diff --git a/backends/audiocd/sdl/sdl-audiocd.cpp b/backends/audiocd/sdl/sdl-audiocd.cpp
index d032df7eac6..4035f4ed412 100644
--- a/backends/audiocd/sdl/sdl-audiocd.cpp
+++ b/backends/audiocd/sdl/sdl-audiocd.cpp
@@ -23,7 +23,7 @@
  *
  */
 
-#if defined(WIN32) || defined(UNIX) || defined(MACOSX)
+#if defined(WIN32) || defined(UNIX) || defined(MACOSX) || defined(__SYMBIAN32__)
 
 #include "backends/audiocd/sdl/sdl-audiocd.h"
 
diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp
index 66685e1886b..95d709a9a7b 100644
--- a/backends/events/sdl/sdl-events.cpp
+++ b/backends/events/sdl/sdl-events.cpp
@@ -23,7 +23,7 @@
  *
  */
 
-#if defined(WIN32) || defined(UNIX) || defined(MACOSX)
+#if defined(WIN32) || defined(UNIX) || defined(MACOSX) || defined(__SYMBIAN32__)
 
 #include "backends/events/sdl/sdl-events.h"
 #include "backends/platform/sdl/sdl.h"
diff --git a/backends/graphics/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp
index 5eb6e6e693a..2ffd21b686f 100644
--- a/backends/graphics/sdl/sdl-graphics.cpp
+++ b/backends/graphics/sdl/sdl-graphics.cpp
@@ -23,7 +23,7 @@
  *
  */
 
-#if defined(WIN32) || defined(UNIX) || defined(MACOSX)
+#if defined(WIN32) || defined(UNIX) || defined(MACOSX) || defined (__SYMBIAN32__)
 
 #include "backends/graphics/sdl/sdl-graphics.h"
 #include "backends/events/sdl/sdl-events.h"
diff --git a/backends/mixer/sdl/sdl-mixer.cpp b/backends/mixer/sdl/sdl-mixer.cpp
index b9e04532f82..0d33e1b8217 100644
--- a/backends/mixer/sdl/sdl-mixer.cpp
+++ b/backends/mixer/sdl/sdl-mixer.cpp
@@ -23,7 +23,7 @@
  *
  */
 
-#if defined(WIN32) || defined(UNIX) || defined(MACOSX)
+#if defined(WIN32) || defined(UNIX) || defined(MACOSX) || defined (__SYMBIAN32__)
 
 #include "backends/mixer/sdl/sdl-mixer.h"
 #include "common/system.h"
diff --git a/backends/mutex/sdl/sdl-mutex.cpp b/backends/mutex/sdl/sdl-mutex.cpp
index 53529c155a6..b9f48c832f8 100644
--- a/backends/mutex/sdl/sdl-mutex.cpp
+++ b/backends/mutex/sdl/sdl-mutex.cpp
@@ -23,7 +23,7 @@
  *
  */
 
-#if defined(WIN32) || defined(UNIX) || defined(MACOSX)
+#if defined(WIN32) || defined(UNIX) || defined(MACOSX) || defined(__SYMBIAN32__)
 
 #include "backends/mutex/sdl/sdl-mutex.h"
 
diff --git a/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl
index cd107f59caf..a9e7aa562a8 100644
--- a/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl
+++ b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl
@@ -42,12 +42,12 @@
 		'zlib'		=> 'zlib.lib', 
 		'mad'		=> 'libmad.lib', 
 		'tremor'	=> 'libtremor.lib',
-		'mpeg2'		=> 'libmpeg2.lib'
+		'flac'		=> 'libflac.lib'
 	);
 	
 	# these are normally enabled for each variation
 	#$DefaultFeatures = qw(zlib,mad);
-	$DefaultFeatures = qw(zlib,mad,tremor);		
+	$DefaultFeatures = qw(zlib,mad,tremor,flac);		
 													
 ##################################################################################################################
 	##
@@ -229,6 +229,45 @@
 		# now you can add $VariationSets only built on this PC below this line :)
 
 	}
+	elsif ($ENV{'COMPUTERNAME'} eq "EMBEDDEV_VAIO1") #################################################################
+	{
+		$Producer = "AnotherGuest";
+		$RedirectSTDERR = 1;
+		$HaltOnError = 0;
+		$SkipExistingPackages = 1;
+		$ReallyQuiet = 1;
+
+		#$FTP_Host = "host.com";
+		#$FTP_User = "ag@host.com";
+		#$FTP_Pass = "password";
+		#$FTP_Dir  = "cvsbuilds";
+
+		#$SDK_RootDirs{'UIQ2'}= "D:\\UIQ2";
+		$SDK_RootDirs{'UIQ3'}= "G:\\UIQ3";
+		#$SDK_RootDirs{'S60v1'}= "D:\\S60v1";
+		#$SDK_RootDirs{'S60v2'}= "D:\\S60v2";
+		$SDK_RootDirs{'S60v3'}= "G:\\S60v3";
+		#$SDK_RootDirs{'S80'}= "D:\\S80";
+		#$SDK_RootDirs{'S90'}= "D:\\S90";
+		$ECompXL_BinDir= "D:\\ECompXL\\";
+		if (0) # so we can turn them on/off easily
+		{
+#			$SDK_LibraryDirs{'ALL'}{'zlib.lib'}		= "C:\\S\\zlib-1.2.2\\epoc";
+#			$SDK_LibraryDirs{'ALL'}{'libmad.lib'}	= "C:\\S\\libmad-0.15.1b\\group";
+#			$SDK_LibraryDirs{'ALL'}{'libtremor.lib'}= "C:\\tremor\\epoc";
+			$SDK_LibraryDirs{'UIQ2'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\UIQ";
+			$SDK_LibraryDirs{'S60v1'}{'esdl.lib'}	= $SDK_LibraryDirs{'S60v2'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\S60";
+			$SDK_LibraryDirs{'S80'}{'esdl.lib'}		= "E:\\WICKED\\ESDL\\epoc\\S80";
+			$SDK_LibraryDirs{'S90'}{'esdl.lib'}		= "E:\\WICKED\\ESDL\\epoc\\S90";
+			$SDK_LibraryDirs{'S60v3'}{'esdl.lib'}		= "E:\\WICKED\\ESDL\\epoc\\S60\\S60V3";
+			$SDK_LibraryDirs{'UIQ3'}{'esdl.lib'}		= "E:\\WICKED\\ESDL\\epoc\\UIQ\\UIQ3";
+			#$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc";
+		}
+
+		# now you can add $VariationSets only built on this PC below this line :)
+
+	}
+
 	else #########################################################################################################
 	{
 		print "ERROR: Computer name ".$ENV{'COMPUTERNAME'}." not recognized! Plz edit _LocalSettings.pl!";
diff --git a/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
index 2916d739387..26c83bd15e7 100644
--- a/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
+++ b/backends/platform/symbian/S60v3/ScummVM_A0000658_S60v3.mmp.in
@@ -112,14 +112,13 @@ SOURCEPATH ..\..\..\..\base
 SOURCEPATH ..\..\..\..
 
 // backend EPOC/SDL/ESDL specific includes
-SOURCE backends\platform\sdl\events.cpp
-SOURCE backends\platform\sdl\graphics.cpp
 SOURCE backends\platform\sdl\hardwarekeys.cpp
 SOURCE backends\platform\sdl\sdl.cpp
 SOURCE backends\fs\symbian\symbian-fs-factory.cpp
 SOURCE backends\platform\symbian\src\SymbianOS.cpp
 SOURCE backends\platform\symbian\src\SymbianActions.cpp
 SOURCE backends\platform\symbian\src\ScummApp.cpp
+SOURCE backends\platform\symbian\src\Main.cpp
 
 SOURCE gui\Key.cpp
 SOURCE gui\KeysDialog.cpp
diff --git a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
index e95bb9ee218..7d7ba77cf56 100644
--- a/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
+++ b/backends/platform/symbian/S60v3/ScummVM_S60v3.mmp.in
@@ -112,14 +112,13 @@ SOURCEPATH ..\..\..\..\base
 SOURCEPATH ..\..\..\..
 
 // backend EPOC/SDL/ESDL specific includes
-SOURCE backends\platform\sdl\events.cpp
-SOURCE backends\platform\sdl\graphics.cpp
 SOURCE backends\platform\sdl\hardwarekeys.cpp
 SOURCE backends\platform\sdl\sdl.cpp
 SOURCE backends\fs\symbian\symbian-fs-factory.cpp
 SOURCE backends\platform\symbian\src\SymbianOS.cpp
 SOURCE backends\platform\symbian\src\SymbianActions.cpp
 SOURCE backends\platform\symbian\src\ScummApp.cpp
+SOURCE backends\platform\symbian\src\Main.cpp
 
 SOURCE gui\Key.cpp
 SOURCE gui\KeysDialog.cpp
diff --git a/backends/platform/symbian/mmp/scummvm_base.mmp.in b/backends/platform/symbian/mmp/scummvm_base.mmp.in
index c178440fa95..6b3b2f20a99 100644
--- a/backends/platform/symbian/mmp/scummvm_base.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_base.mmp.in
@@ -108,6 +108,7 @@ SOURCE rate_arm_asm.s	// ARM version: add ASM routines
 
 // add a few files manually, since they are not parsed from modules.mk files
 SOURCEPATH ..\..\..\..
+SOURCE	   base\main.cpp
 SOURCE	   backends\events\default\default-events.cpp
 SOURCE	   backends\timer\default\default-timer.cpp
 SOURCE	   backends\saves\savefile.cpp
@@ -120,12 +121,24 @@ SOURCE	   engines\game.cpp
 SOURCE 	   engines\advanceddetector.cpp
 SOURCE 	   engines\savestate.cpp
 // backend specific includes
+SOURCE	   backends\modular-backend.cpp
+SOURCE     backends\audiocd\default\default-audiocd.cpp
+SOURCE     backends\audiocd\sdl\sdl-audiocd.cpp
+SOURCE     backends\events\sdl\sdl-events.cpp
+SOURCE     backends\events\symbiansdl\symbiansdl-events.cpp
 SOURCE	   backends\fs\abstract-fs.cpp
 SOURCE	   backends\fs\symbian\symbianstream.cpp
+SOURCE     backends\graphics\sdl\sdl-graphics.cpp
+SOURCE     backends\graphics\symbiansdl\symbiansdl-graphics.cpp
 SOURCE     backends\keymapper\action.cpp
 SOURCE     backends\keymapper\keymap.cpp
 SOURCE     backends\keymapper\keymapper.cpp
 SOURCE     backends\keymapper\remap-dialog.cpp
+SOURCE     backends\mixer\sdl\sdl-mixer.cpp
+SOURCE     backends\mixer\symbiansdl\symbiansdl-mixer.cpp
+SOURCE     backends\mutex\sdl\sdl-mutex.cpp
+SOURCE     backends\timer\sdl\sdl-timer.cpp
+
 // Source files for virtual keyboard
 SOURCE     backends\vkeybd\image-map.cpp
 SOURCE     backends\vkeybd\polygon.cpp
diff --git a/backends/timer/sdl/sdl-timer.cpp b/backends/timer/sdl/sdl-timer.cpp
index 94932d61ba5..11bf825bb08 100644
--- a/backends/timer/sdl/sdl-timer.cpp
+++ b/backends/timer/sdl/sdl-timer.cpp
@@ -24,7 +24,7 @@
  *
  */
 
-#if defined(WIN32) || defined(UNIX) || defined(MACOSX)
+#if defined(WIN32) || defined(UNIX) || defined(MACOSX) || defined (__SYMBIAN32__)
 
 #include "backends/timer/sdl/sdl-timer.h"
 
diff --git a/gui/ThemeEngine.h b/gui/ThemeEngine.h
index f736559def7..e3cdb09b4e3 100644
--- a/gui/ThemeEngine.h
+++ b/gui/ThemeEngine.h
@@ -37,6 +37,7 @@
 namespace Graphics {
 	struct DrawStep;
 	class VectorRenderer;
+	class Font;
 }
 
 namespace GUI {
@@ -52,6 +53,7 @@ class ThemeEval;
 class ThemeItem;
 class ThemeParser;
 
+
 /**
  *	DrawData sets enumeration.
  *	Each DD set corresponds to the actual looks