Index: binaries/data/config/default.cfg
===================================================================
--- binaries/data/config/default.cfg	(revision 13898)
+++ binaries/data/config/default.cfg	(working copy)
@@ -22,6 +22,8 @@
 
 ; Enable/disable the splashscreen
 splashscreenenable = true
+; Splashscreen version (date of last modification). By default, 0 to force splashscreen to appear at first launch.
+splashscreenversion = 0
 
 ; Pause the game on window focus loss (Only applicable to single player mode)
 pauseonfocusloss = true
Index: binaries/data/mods/public/gui/splashscreen/splashscreen.xml
===================================================================
--- binaries/data/mods/public/gui/splashscreen/splashscreen.xml	(revision 13898)
+++ binaries/data/mods/public/gui/splashscreen/splashscreen.xml	(working copy)
@@ -7,37 +7,45 @@
 	<!-- Add a translucent black background to fade out the menu page -->
 	<object type="image" z="0" style="TranslucentPanel"/>
 
-	<object type="image" style="StoneDialog" size="50%-300 50%-200 50%+300 50%+200">
+	<object type="image" style="StoneDialog" size="50%-300 50%-200 50%+300 50%+250">
 		<object type="text" style="TitleText" size="50%-128 0%-16 50%+128 16">Welcome to 0 A.D. !</object>
 
-			<object type="image" sprite="BackgroundTranslucent" size="20 20 100%-20 100%-52">
-				<object name="openFundraiserPage" type="button" style="fundraiserButton" size="5 5 100% 150">
-					<action on="Press"><![CDATA[
-					Engine.OpenURL("http://play0ad.com/fundraiser");
-					]]></action>
-				</object>
-				<object size="0 150 100% 100%">
-					<object name="mainText" type="text" style="textPanel"/>
-				</object>
+		<object type="image" sprite="BackgroundTranslucent" size="20 20 100%-20 100%-105">
+			<object name="openFundraiserPage" type="button" style="fundraiserButton" size="5 5 100% 150">
+				<action on="Press"><![CDATA[
+				Engine.OpenURL("http://play0ad.com/fundraiser");
+				]]></action>
 			</object>
-		<object name="btnOK" type="button" style="StoneButton" tooltip_style="snToolTip" size="24 100%-52 188 100%-24">
-			OK
+			<object size="0 150 100% 100%">
+				<object name="mainText" type="text" style="textPanel"/>
+			</object>
+		</object>
+		
+		<object name="btnFundraiser" type="button" style="StoneButtonFancy" tooltip_style="snToolTip" size="50 100%-104 100%-50 100%-75">
+			Visit Fundraiser
 			<action on="Press"><![CDATA[
-			Engine.SetSplashScreenEnabled(!getGUIObjectByName("displaySplashScreen").checked);
+			Engine.OpenURL("http://play0ad.com/fundraiser");
+			]]></action>
+		</object>
+		<object name="btnDismiss" type="button" style="StoneButton" tooltip_style="snToolTip" size="24 100%-59 180 100%-30">
+			Dismiss
+			<action on="Press"><![CDATA[
+			Engine.SynchroniseSplashScreen();
 			Engine.PopGuiPage();
 			]]></action>
 		</object>
-		<object name="btnFundraiser" type="button" style="StoneButton" tooltip_style="snToolTip" size="196 100%-52 360 100%-24">
-			Visit Fundraiser
+		<object name="btnRemind" type="button" style="StoneButton" tooltip_style="snToolTip" size="190 100%-59 350 100%-30">
+			Remind me later
 			<action on="Press"><![CDATA[
-			Engine.OpenURL("http://play0ad.com/fundraiser");
+			Engine.PopGuiPage();
 			]]></action>
 		</object>
-		<object size="368 100%-52 100%-32 100%-24">
-			<object size="0 0 100% 100%">
-				<object name="displaySplashScreenText" size="0 0 100%-32 100%" type="text" style="RightLabelText">Don't show this again</object>
-				<object name="displaySplashScreen" checked="false" size="100%-16 50%-8 100% 50%+8" type="checkbox" style="StoneCrossBox"/>
-			</object>
+		<object name="btnDisable" type="button" style="StoneButton" tooltip_style="snToolTip" size="360 100%-59 576 100%-30">
+			Never show notifications
+			<action on="Press"><![CDATA[
+			Engine.SetSplashScreenEnabled(false);
+			Engine.PopGuiPage();
+			]]></action>
 		</object>
 	</object>
 	
Index: source/gui/scripting/ScriptFunctions.cpp
===================================================================
--- source/gui/scripting/ScriptFunctions.cpp	(revision 13898)
+++ source/gui/scripting/ScriptFunctions.cpp	(working copy)
@@ -530,9 +530,30 @@
 {
 	bool splashScreenEnable = true;
 	CFG_GET_VAL("splashscreenenable", Bool, splashScreenEnable);
-	return splashScreenEnable;
+
+	time_t splashScreenVersion = 0;
+	CFileInfo splashFileInfo;
+
+	CFG_GET_VAL("splashscreenversion", Time, splashScreenVersion);
+
+	if(g_VFS->GetFileInfo("gui/splashscreen/splashscreen.txt", &splashFileInfo) == INFO::OK)
+		return (splashScreenVersion != splashFileInfo.MTime() && splashScreenEnable);
+	else
+		return true;	
 }
 
+void SynchroniseSplashScreen(void* UNUSED(cbdata))
+{
+	CFileInfo splashFileInfo;
+	CStr val;
+
+	g_VFS->GetFileInfo("gui/splashscreen/splashscreen.txt", &splashFileInfo);
+	val = CStr::FromInt64(splashFileInfo.MTime());
+	
+	g_ConfigDB.CreateValue(CFG_USER, "splashscreenversion")->m_String = val;	
+	g_ConfigDB.WriteFile(CFG_USER);
+}
+
 void SetSplashScreenEnabled(void* UNUSED(cbdata), bool enabled)
 {
 	CStr val = (enabled ? "true" : "false");
@@ -726,6 +747,7 @@
 
 	// Splash screen functions
 	scriptInterface.RegisterFunction<bool, &IsSplashScreenEnabled>("IsSplashScreenEnabled");
+	scriptInterface.RegisterFunction<void, &SynchroniseSplashScreen>("SynchroniseSplashScreen");
 	scriptInterface.RegisterFunction<void, bool, &SetSplashScreenEnabled>("SetSplashScreenEnabled");
 
 	// Development/debugging functions
Index: source/ps/Parser.cpp
===================================================================
--- source/ps/Parser.cpp	(revision 13898)
+++ source/ps/Parser.cpp	(working copy)
@@ -224,6 +224,7 @@
 FUNC_IMPL_CAST_GETDOUBLE(GetUnsignedShort,	unsigned short)
 FUNC_IMPL_CAST_GETDOUBLE(GetUnsignedInt,	unsigned int)
 FUNC_IMPL_CAST_GETDOUBLE(GetUnsignedLong,	unsigned long)
+FUNC_IMPL_CAST_GETDOUBLE(GetTime,			time_t)
 
 // CParserTaskTypeNode
 // ---------------------------------------------------------------------| Class
Index: source/ps/Parser.h
===================================================================
--- source/ps/Parser.h	(revision 13898)
+++ source/ps/Parser.h	(working copy)
@@ -106,6 +106,7 @@
 	bool GetUnsignedInt(unsigned int &ret);
 	bool GetUnsignedLong(unsigned long &ret);
 	bool GetFloat(float &ret);
+	bool GetTime(time_t &time);
 	bool GetDouble(double &ret);
 
 	// Memory regardless if it's an int, real, string or whatever
