diff -ur uqm-0.6.2.dfsg/sc2/src/options.c uqm-0.6.2beginner/sc2/src/options.c
--- uqm-0.6.2.dfsg/sc2/src/options.c	2009-05-29 23:17:50.000000000 +0930
+++ uqm-0.6.2beginner/sc2/src/options.c	2009-05-29 21:05:59.000000000 +0930
@@ -46,6 +46,7 @@
 int optSmoothScroll;
 int optMeleeScale;
 
+BOOLEAN optSlowTime;
 BOOLEAN optSubtitles;
 BOOLEAN optStereoSFX;
 uio_DirHandle *contentDir;
diff -ur uqm-0.6.2.dfsg/sc2/src/options.h uqm-0.6.2beginner/sc2/src/options.h
--- uqm-0.6.2.dfsg/sc2/src/options.h	2006-12-23 20:56:15.000000000 +1030
+++ uqm-0.6.2beginner/sc2/src/options.h	2009-05-29 21:01:01.000000000 +0930
@@ -39,6 +39,7 @@
 extern int optSmoothScroll;
 extern int optMeleeScale;
 
+extern BOOLEAN optSlowTime;
 extern BOOLEAN optSubtitles;
 extern BOOLEAN optStereoSFX;
 
diff -ur uqm-0.6.2.dfsg/sc2/src/sc2code/clock.c uqm-0.6.2beginner/sc2/src/sc2code/clock.c
--- uqm-0.6.2.dfsg/sc2/src/sc2code/clock.c	2006-12-23 20:56:09.000000000 +1030
+++ uqm-0.6.2beginner/sc2/src/sc2code/clock.c	2009-05-29 21:07:58.000000000 +0930
@@ -20,6 +20,7 @@
 #include "gameev.h"
 #include "globdata.h"
 #include "setup.h"
+#include "options.h"
 #include "libs/compiler.h"
 #include "libs/gfxlib.h"
 #include "libs/tasklib.h"
@@ -286,6 +287,9 @@
 {
 	SIZE new_day_in_ticks, new_tick_count;
 
+	if (optSlowTime)
+		seconds_per_day *= 2;
+
 	SetSemaphore (GLOBAL (GameClock.clock_sem));
 	new_day_in_ticks = (SIZE)(seconds_per_day * CLOCK_BASE_FRAMERATE);
 	if (GLOBAL (GameClock.day_in_ticks) == 0)
diff -ur uqm-0.6.2.dfsg/sc2/src/sc2code/setupmenu.c uqm-0.6.2beginner/sc2/src/sc2code/setupmenu.c
--- uqm-0.6.2.dfsg/sc2/src/sc2code/setupmenu.c	2007-01-06 13:30:20.000000000 +1030
+++ uqm-0.6.2beginner/sc2/src/sc2code/setupmenu.c	2009-05-29 22:09:40.000000000 +0930
@@ -58,6 +58,7 @@
 static int do_engine (WIDGET *self, int event);
 static int do_resources (WIDGET *self, int event);
 static int do_keyconfig (WIDGET *self, int event);
+static int do_gameconfig (WIDGET *self, int event);
 static int do_advanced (WIDGET *self, int event);
 static int do_editkeys (WIDGET *self, int event);
 static void change_template (WIDGET_CHOICE *self, int oldval);
@@ -71,10 +72,10 @@
 #define RES_OPTS 2
 #endif
 
-#define MENU_COUNT          8
-#define CHOICE_COUNT       21
+#define MENU_COUNT          9
+#define CHOICE_COUNT       22
 #define SLIDER_COUNT        3
-#define BUTTON_COUNT       10
+#define BUTTON_COUNT       11
 #define LABEL_COUNT         4
 #define TEXTENTRY_COUNT     1
 #define CONTROLENTRY_COUNT  7
@@ -95,24 +96,25 @@
 static int choice_widths[CHOICE_COUNT] = {
 	3, 2, 3, 3, 2, 2, 2, 2, 2, 2, 
 	2, 2, 3, 2, 2, 3, 3, 2,	3, 3, 
-	3 };
+	3, 2 };
 
 static HANDLER button_handlers[BUTTON_COUNT] = {
 	quit_main_menu, quit_sub_menu, do_graphics, do_engine,
 	do_audio, do_resources, do_keyconfig, do_advanced, do_editkeys, 
-	do_keyconfig };
+	do_keyconfig, do_gameconfig };
 
 static int menu_sizes[MENU_COUNT] = {
-	7, 5, 6, 9, 2, 5,
+	8, 5, 6, 9, 2, 5,
 #ifdef HAVE_OPENGL
 	5,
 #else
 	4,
 #endif
-	11
+	2,
+	11,
 };
 
-static int menu_bgs[MENU_COUNT] = { 0, 1, 1, 2, 3, 1, 2, 1 };
+static int menu_bgs[MENU_COUNT] = { 0, 1, 1, 2, 3, 1, 2, 1, 1 };
 
 /* These refer to uninitialized widgets, but that's OK; we'll fill
  * them in before we touch them */
@@ -123,6 +125,7 @@
 	(WIDGET *)(&buttons[5]),
 	(WIDGET *)(&buttons[6]),
 	(WIDGET *)(&buttons[7]),
+	(WIDGET *)(&buttons[10]),
 	(WIDGET *)(&buttons[0]) };
 
 static WIDGET *graphics_widgets[] = {
@@ -184,9 +187,15 @@
 	(WIDGET *)(&labels[0]),
 	(WIDGET *)(&buttons[1]) };
 
+static WIDGET *gameconfig_widgets[] = {
+	(WIDGET *)(&choices[21]),
+	(WIDGET *)(&buttons[1]) };
+
 static WIDGET **menu_widgets[MENU_COUNT] = {
 	main_widgets, graphics_widgets, audio_widgets, engine_widgets, 
-	incomplete_widgets, keyconfig_widgets, advanced_widgets, editkeys_widgets };
+	incomplete_widgets, keyconfig_widgets, advanced_widgets,
+	gameconfig_widgets, editkeys_widgets,
+	};
 
 static int
 quit_main_menu (WIDGET *self, int event)
@@ -291,6 +300,19 @@
 	return FALSE;
 }
 
+static int
+do_gameconfig (WIDGET *self, int event)
+{
+	if (event == WIDGET_EVENT_SELECT)
+	{
+		next = (WIDGET *)(&menus[7]);
+		(*next->receiveFocus) (next, WIDGET_EVENT_DOWN);
+		return TRUE;
+	}
+	(void)self;
+	return FALSE;
+}
+
 static void
 populate_editkeys (int template)
 {
@@ -313,7 +335,7 @@
 {
 	if (event == WIDGET_EVENT_SELECT)
 	{
-		next = (WIDGET *)(&menus[7]);
+		next = (WIDGET *)(&menus[9]);
 		/* Prepare the components */
 		choices[20].selected = 0;
 		
@@ -383,6 +405,7 @@
 	choices[18].selected = opts.player1;
 	choices[19].selected = opts.player2;
 	choices[20].selected = 0;
+	choices[21].selected = opts.beginner;
 
 	sliders[0].value = opts.musicvol;
 	sliders[1].value = opts.sfxvol;
@@ -413,6 +436,7 @@
 	opts.shield = choices[17].selected;
 	opts.player1 = choices[18].selected;
 	opts.player2 = choices[19].selected;
+	opts.beginner = choices[21].selected;
 
 	opts.musicvol = sliders[0].value;
 	opts.sfxvol = sliders[1].value;
@@ -1080,6 +1104,7 @@
 			OPTVAL_ENABLED : OPTVAL_DISABLED;
 	opts->meleezoom = (optMeleeScale == TFB_SCALE_TRILINEAR) ? 
 			OPTVAL_3DO : OPTVAL_PC;
+	opts->beginner = optSlowTime ? OPTVAL_ENABLED : OPTVAL_DISABLED;
 	opts->stereo = optStereoSFX ? OPTVAL_ENABLED : OPTVAL_DISABLED;
 	/* These values are read in, but won't change during a run. */
 	opts->music = (optWhichMusic == OPT_3DO) ? OPTVAL_3DO : OPTVAL_PC;
@@ -1318,6 +1343,7 @@
 	res_PutBoolean ("config.pulseshield", opts->shield == OPTVAL_3DO);
 	res_PutInteger ("config.player1control", opts->player1);
 	res_PutInteger ("config.player2control", opts->player2);
+	res_PutInteger ("config.beginner", opts->beginner == OPTVAL_ENABLED);
 
 	switch (opts->adriver) {
 	case OPTVAL_SILENCE:
diff -ur uqm-0.6.2.dfsg/sc2/src/sc2code/setupmenu.h uqm-0.6.2beginner/sc2/src/sc2code/setupmenu.h
--- uqm-0.6.2.dfsg/sc2/src/sc2code/setupmenu.h	2006-12-23 20:56:09.000000000 +1030
+++ uqm-0.6.2beginner/sc2/src/sc2code/setupmenu.h	2009-05-29 20:55:32.000000000 +0930
@@ -74,7 +74,7 @@
 	OPT_DRIVERTYPE driver;
 	OPT_ADRIVERTYPE adriver;
 	OPT_AQUALITYTYPE aquality;
-	OPT_ENABLABLE fullscreen, subtitles, scanlines, fps, stereo;
+	OPT_ENABLABLE fullscreen, subtitles, scanlines, fps, stereo, beginner;
 	OPT_CONSOLETYPE music, menu, text, cscan, scroll, intro, meleezoom, shield;
 	CONTROL_TEMPLATE player1, player2;
 	int speechvol, musicvol, sfxvol;
diff -ur uqm-0.6.2.dfsg/sc2/src/starcon2.c uqm-0.6.2beginner/sc2/src/starcon2.c
--- uqm-0.6.2.dfsg/sc2/src/starcon2.c	2006-12-23 20:56:15.000000000 +1030
+++ uqm-0.6.2beginner/sc2/src/starcon2.c	2009-05-29 21:00:13.000000000 +0930
@@ -81,6 +81,7 @@
 	int whichShield;
 	int smoothScroll;
 	int meleeScale;
+	BOOLEAN beginner;
 	BOOLEAN subTitles;
 	BOOLEAN stereoSFX;
 	float musicVolumeScale;
@@ -129,6 +130,7 @@
 		/* .whichShield	= */        OPT_PC,
 		/* .smoothScroll = */       OPT_PC,
 		/* .meleeScale = */         TFB_SCALE_TRILINEAR,
+		/* .beginner = */	    FALSE,
 		/* .subtitles = */          TRUE,
 		/* .stereoSFX = */          FALSE,
 		/* .musicVolumeScale = */   1.0f,
@@ -368,6 +370,10 @@
 		parseVolume (res_GetString ("config.speechvol"), 
 				&options.speechVolumeScale, "speech volume");
 	}		
+	if (res_HasKey ("config.beginner"))
+	{
+		options.beginner = res_GetBoolean ("config.beginner");
+	}		
 
 	{	/* init control template names */
 		static const char* defaultNames[] =
@@ -422,6 +428,7 @@
 	optWhichShield = options.whichShield;
 	optSmoothScroll = options.smoothScroll;
 	optMeleeScale = options.meleeScale;
+	optSlowTime = options.beginner;
 	optSubtitles = options.subTitles;
 	optStereoSFX = options.stereoSFX;
 	musicVolumeScale = options.musicVolumeScale;
@@ -498,7 +505,7 @@
 #endif
 };
 
-static const char *optString = "+r:d:foc:b:spC:n:?hM:S:T:m:q:ug:l:i:v";
+static const char *optString = "+r:d:foc:b:spC:n:?hM:S:T:m:q:ug:l:i:Bv";
 static struct option longOptions[] = 
 {
 	{"res", 1, NULL, 'r'},
@@ -520,6 +527,7 @@
 	{"gamma", 1, NULL, 'g'},
 	{"logfile", 1, NULL, 'l'},
 	{"intro", 1, NULL, 'i'},
+	{"beginner", 0, NULL, 'B'},
 	{"version", 0, NULL, 'v'},
 
 	//  options with no short equivalent:
@@ -646,6 +654,9 @@
 					badArg = TRUE;
 				}
 				break;
+			case 'B':
+				options->beginner = TRUE;
+				break;
 			case 'b':
 				if (!strcmp (optarg, "smooth") || !strcmp (optarg, "3do"))
 					options->meleeScale = TFB_SCALE_TRILINEAR;
--- ./content/lbm/setupmenu.txt	2006-09-12 05:52:56.000000000 +0930
+++ ./content/lbm/setupmenu.txt	2009-05-29 22:07:32.000000000 +0930
@@ -9,6 +9,7 @@
 Resources Options
 Controls Setup
 Advanced Options
+Game Options
 Edit Controls
 
 #(CHOICES)
@@ -33,6 +34,7 @@
 Player One
 Player Two
 Control Set
+Beginner Mode
 
 #(CAT_0_OPTS)
 320x240
@@ -404,9 +406,18 @@
 
 #(CAT_20_OPT_5_DESC)
 
-
 Select the control template to edit.
 
+#(CAT_21_OPTS)
+Disabled
+Enabled
+
+#(CAT_21_OPT_0_DESC)
+Game pace is as normal.
+
+#(CAT_21_OPT_1_DESC)
+Game pace is generously slow.
+
 #(SLIDERS)
 Music Volume
 SFX Volume
@@ -432,6 +443,7 @@
 Advanced Options
 Edit Controls
 Back to Control Select
+Game Options
 
 #(BUTTON_0_DESC)
 Return to the main menu.
@@ -474,6 +486,10 @@
 
 Return to control set selection screen.
 
+#(BUTTON_10_DESC)
+
+Options which alter gameplay.
+
 #(LABELS)
 Incomplete
 Keyconfig header
