diff --git a/src/d_main.c b/src/d_main.c
index 4080087..194383a 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -1052,7 +1052,7 @@ void D_SRB2Main(void)
 	}
 
 	// rand() needs seeded regardless of password
-	srand((unsigned int)time(NULL));
+	srand(0);
 
 	if (M_CheckParm("-password") && M_IsNextParm())
 		D_SetPassword(M_GetNextParm());
diff --git a/src/m_menu.c b/src/m_menu.c
index 45b3d7e..672df3b 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -2315,6 +2315,7 @@ boolean M_Responder(event_t *ev)
 	switch (ch)
 	{
 		case KEY_DOWNARROW:
+		case KEY_KEYPAD2:
 			M_NextOpt();
 			S_StartSound(NULL, sfx_menu1);
 			if (currentMenu == &SP_PlayerDef)
@@ -2325,6 +2326,7 @@ boolean M_Responder(event_t *ev)
 			return true;
 
 		case KEY_UPARROW:
+		case KEY_KEYPAD8:
 			M_PrevOpt();
 			S_StartSound(NULL, sfx_menu1);
 			if (currentMenu == &SP_PlayerDef)
@@ -2335,6 +2337,7 @@ boolean M_Responder(event_t *ev)
 			return true;
 
 		case KEY_LEFTARROW:
+		case KEY_KEYPAD4:
 			if (routine && ((currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_ARROWS
 				|| (currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_CVAR))
 			{
@@ -2345,6 +2348,7 @@ boolean M_Responder(event_t *ev)
 			return true;
 
 		case KEY_RIGHTARROW:
+		case KEY_KEYPAD6:
 			if (routine && ((currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_ARROWS
 				|| (currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_CVAR))
 			{
@@ -3783,6 +3787,7 @@ static void M_HandleImageDef(INT32 choice)
 	switch (choice)
 	{
 		case KEY_RIGHTARROW:
+		case KEY_KEYPAD6:
 			if (currentMenu->numitems == 1)
 				break;
 
@@ -4138,10 +4143,12 @@ static void M_HandleSoundTest(INT32 choice)
 	switch (choice)
 	{
 		case KEY_DOWNARROW:
+		case KEY_KEYPAD2:
 			M_NextOpt();
 			S_StartSound(NULL, sfx_menu1);
 			break;
 		case KEY_UPARROW:
+		case KEY_KEYPAD8:
 			M_PrevOpt();
 			S_StartSound(NULL, sfx_menu1);
 			break;
@@ -4151,9 +4158,11 @@ static void M_HandleSoundTest(INT32 choice)
 			break;
 
 		case KEY_RIGHTARROW:
+		case KEY_KEYPAD6:
 			CV_AddValue(&cv_soundtest, 1);
 			break;
 		case KEY_LEFTARROW:
+		case KEY_KEYPAD4:
 			CV_AddValue(&cv_soundtest, -1);
 			break;
 		case KEY_ENTER:
@@ -4691,6 +4700,7 @@ static void M_HandleLoadSave(INT32 choice)
 	switch (choice)
 	{
 		case KEY_DOWNARROW:
+		case KEY_KEYPAD2:
 			S_StartSound(NULL, sfx_menu1);
 			++saveSlotSelected;
 			if (saveSlotSelected >= MAXSAVEGAMES)
@@ -4699,6 +4709,7 @@ static void M_HandleLoadSave(INT32 choice)
 			break;
 
 		case KEY_UPARROW:
+		case KEY_KEYPAD8:
 			S_StartSound(NULL, sfx_menu1);
 			--saveSlotSelected;
 			if (saveSlotSelected < 0)
@@ -5081,23 +5092,27 @@ static void M_HandleLevelStats(INT32 choice)
 	switch (choice)
 	{
 		case KEY_DOWNARROW:
+		case KEY_KEYPAD2:
 			S_StartSound(NULL, sfx_menu1);
 			if (statsLocation < statsMax)
 				++statsLocation;
 			break;
 
 		case KEY_UPARROW:
+		case KEY_KEYPAD8:
 			S_StartSound(NULL, sfx_menu1);
 			if (statsLocation)
 				--statsLocation;
 			break;
 
 		case KEY_RIGHTARROW:
+		case KEY_KEYPAD6:
 			S_StartSound(NULL, sfx_menu1);
 			statsLocation += (statsLocation+15 >= statsMax) ? statsMax-statsLocation : 15;
 			break;
 
 		case KEY_LEFTARROW:
+		case KEY_KEYPAD4:
 			S_StartSound(NULL, sfx_menu1);
 			statsLocation -= (statsLocation < 15) ? statsLocation : 15;
 			break;
@@ -5810,10 +5825,12 @@ static void M_HandleServerPage(INT32 choice)
 	switch (choice)
 	{
 		case KEY_DOWNARROW:
+		case KEY_KEYPAD2:
 			M_NextOpt();
 			S_StartSound(NULL, sfx_menu1);
 			break;
 		case KEY_UPARROW:
+		case KEY_KEYPAD8:
 			M_PrevOpt();
 			S_StartSound(NULL, sfx_menu1);
 			break;
@@ -5824,11 +5841,13 @@ static void M_HandleServerPage(INT32 choice)
 
 		case KEY_ENTER:
 		case KEY_RIGHTARROW:
+		case KEY_KEYPAD6:
 			S_StartSound(NULL, sfx_menu1);
 			if ((serverlistpage + 1) * SERVERS_PER_PAGE < serverlistcount)
 				serverlistpage++;
 			break;
 		case KEY_LEFTARROW:
+		case KEY_KEYPAD4:
 			S_StartSound(NULL, sfx_menu1);
 			if (serverlistpage > 0)
 				serverlistpage--;
@@ -6480,16 +6499,19 @@ static void M_HandleSetupMultiPlayer(INT32 choice)
 	switch (choice)
 	{
 		case KEY_DOWNARROW:
+		case KEY_KEYPAD2:
 			M_NextOpt();
 			S_StartSound(NULL,sfx_menu1); // Tails
 			break;
 
 		case KEY_UPARROW:
+		case KEY_KEYPAD8:
 			M_PrevOpt();
 			S_StartSound(NULL,sfx_menu1); // Tails
 			break;
 
 		case KEY_LEFTARROW:
+		case KEY_KEYPAD4:
 			if (itemOn == 2)       //player skin
 			{
 				S_StartSound(NULL,sfx_menu1); // Tails
@@ -6503,6 +6525,7 @@ static void M_HandleSetupMultiPlayer(INT32 choice)
 			break;
 
 		case KEY_RIGHTARROW:
+		case KEY_KEYPAD6:
 			if (itemOn == 2)       //player skin
 			{
 				S_StartSound(NULL,sfx_menu1); // Tails
@@ -7198,18 +7221,21 @@ static void M_HandleVideoMode(INT32 ch)
 	else switch (ch)
 	{
 		case KEY_DOWNARROW:
+		case KEY_KEYPAD2:
 			S_StartSound(NULL, sfx_menu1);
 			if (++vidm_selected >= vidm_nummodes)
 				vidm_selected = 0;
 			break;
 
 		case KEY_UPARROW:
+		case KEY_KEYPAD8:
 			S_StartSound(NULL, sfx_menu1);
 			if (--vidm_selected < 0)
 				vidm_selected = vidm_nummodes - 1;
 			break;
 
 		case KEY_LEFTARROW:
+		case KEY_KEYPAD4:
 			S_StartSound(NULL, sfx_menu1);
 			vidm_selected -= vidm_column_size;
 			if (vidm_selected < 0)
@@ -7219,6 +7245,7 @@ static void M_HandleVideoMode(INT32 ch)
 			break;
 
 		case KEY_RIGHTARROW:
+		case KEY_KEYPAD6:
 			S_StartSound(NULL, sfx_menu1);
 			vidm_selected += vidm_column_size;
 			if (vidm_selected >= (vidm_column_size*3))
@@ -7396,11 +7423,13 @@ static void M_HandleFogColor(INT32 choice)
 	switch (choice)
 	{
 		case KEY_DOWNARROW:
+		case KEY_KEYPAD2:
 			S_StartSound(NULL, sfx_menu1);
 			itemOn++;
 			break;
 
 		case KEY_UPARROW:
+		case KEY_KEYPAD8:
 			S_StartSound(NULL, sfx_menu1);
 			itemOn--;
 			break;
