diff --git a/doc/ChangeLog.html b/doc/ChangeLog.html
index bd36dd03f..f4ccc2bb2 100644
--- a/doc/ChangeLog.html
+++ b/doc/ChangeLog.html
@@ -930,6 +930,7 @@
     <LI>Added initial support for game replay (from Jimmy Salmon).
     <LI>Fixed bug #536262: Oil icon changes colors (from Jimmy Salmon).
     <LI>Fixed bug #587638: Transports can carry ships (from Jimmy Salmon).
+    <LI>Fixed bug #577066: Restart loses custom settings (from Jimmy Salmon).
     <LI>+++
     </UL>
 </UL>
diff --git a/src/game/game.cpp b/src/game/game.cpp
index d63eb95e5..415e2cd4d 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -152,6 +152,9 @@ local void LoadMap(const char* filename,WorldMap* map)
 --	Game creation
 ----------------------------------------------------------------------------*/
 
+/**
+**	Free for all
+*/
 local void GameTypeFreeForAll(void)
 {
     int i;
@@ -166,6 +169,9 @@ local void GameTypeFreeForAll(void)
     }
 }
 
+/**
+**	Top vs Bottom
+*/
 local void GameTypeTopVsBottom(void)
 {
     int i;
@@ -189,6 +195,9 @@ local void GameTypeTopVsBottom(void)
     }
 }
 
+/**
+**	Left vs Right
+*/
 local void GameTypeLeftVsRight(void)
 {
     int i;
@@ -484,6 +493,12 @@ global void InitSettings(void)
 {
     int i;
 
+    if (RestartScenario) {
+	TheMap.NoFogOfWar = GameSettings.NoFogOfWar;
+	FlagRevealMap = GameSettings.RevealMap;
+	return;
+    }
+
     for (i = 0; i < PlayerMax; i++) {
 	GameSettings.Presets[i].Race = SettingsPresetMapDefault;
 	GameSettings.Presets[i].Team = SettingsPresetMapDefault;
diff --git a/src/include/settings.h b/src/include/settings.h
index 897a2dbce..fa9e2e80c 100644
--- a/src/include/settings.h
+++ b/src/include/settings.h
@@ -68,6 +68,8 @@ struct _settings_ {
     unsigned	Opponents;		/// Preset # of ai-opponents
     unsigned	Terrain;		/// Terrain type (summer,winter,...)
     unsigned	GameType;		/// Game type (melee, free for all,...)
+    unsigned	NoFogOfWar;		/// No fog of war
+    unsigned	RevealMap;		/// Reveal map
 };
 
 #define SettingsPresetMapDefault	(~0ul)	/// Special: Use pud/cm supplied
diff --git a/src/ui/menus.cpp b/src/ui/menus.cpp
index cc8b00789..cfb30e711 100644
--- a/src/ui/menus.cpp
+++ b/src/ui/menus.cpp
@@ -3780,18 +3780,26 @@ local void MultiGameFWSAction(Menuitem *mi, int i)
 	    case 0:
 		TheMap.NoFogOfWar = 0;
 		FlagRevealMap = 0;
+		GameSettings.NoFogOfWar = 0;
+		GameSettings.RevealMap = 0;
 		break;
 	    case 1:
 		TheMap.NoFogOfWar = 1;
 		FlagRevealMap = 0;
+		GameSettings.NoFogOfWar = 1;
+		GameSettings.RevealMap = 0;
 		break;
 	    case 2:
 		TheMap.NoFogOfWar = 0;
 		FlagRevealMap = 1;
+		GameSettings.NoFogOfWar = 0;
+		GameSettings.RevealMap = 1;
 		break;
 	    case 3:
 		TheMap.NoFogOfWar = 1;
 		FlagRevealMap = 1;
+		GameSettings.NoFogOfWar = 1;
+		GameSettings.RevealMap = 1;
 		break;
 	}
 	ServerSetupState.FwsOpt = i;