diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj
index 37538ffba2..1ada4c3225 100644
--- a/stepmania/src/StepMania.vcproj
+++ b/stepmania/src/StepMania.vcproj
@@ -998,6 +998,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
+
+
+
+
diff --git a/stepmania/src/archutils/Win32/RestartProgram.cpp b/stepmania/src/archutils/Win32/RestartProgram.cpp
new file mode 100644
index 0000000000..acff6b9c92
--- /dev/null
+++ b/stepmania/src/archutils/Win32/RestartProgram.cpp
@@ -0,0 +1,29 @@
+#include "global.h"
+#include "RestartProgram.h"
+
+void Win32RestartProgram()
+{
+ TCHAR szFullAppPath[MAX_PATH];
+ GetModuleFileName(NULL, szFullAppPath, MAX_PATH);
+
+ // Launch StepMania
+ PROCESS_INFORMATION pi;
+ STARTUPINFO si;
+ ZeroMemory( &si, sizeof(si) );
+ CreateProcess(
+ NULL, // pointer to name of executable module
+ szFullAppPath, // pointer to command line string
+ NULL, // process security attributes
+ NULL, // thread security attributes
+ false, // handle inheritance flag
+ 0, // creation flags
+ NULL, // pointer to new environment block
+ NULL, // pointer to current directory name
+ &si, // pointer to STARTUPINFO
+ &pi // pointer to PROCESS_INFORMATION
+ );
+
+ ExitProcess( 0 );
+
+ /* not reached */
+}
diff --git a/stepmania/src/archutils/Win32/RestartProgram.h b/stepmania/src/archutils/Win32/RestartProgram.h
new file mode 100644
index 0000000000..a0555aed73
--- /dev/null
+++ b/stepmania/src/archutils/Win32/RestartProgram.h
@@ -0,0 +1,6 @@
+#ifndef RESTART_PROGRAM_H
+#define RESTART_PROGRAM_H
+
+void Win32RestartProgram();
+
+#endif