Index: supertux/src/video/glutil.hpp
===================================================================
--- supertux/src/video/glutil.hpp	(revision 4626)
+++ supertux/src/video/glutil.hpp	(working copy)
@@ -63,6 +63,8 @@
 
     throw std::runtime_error(msg.str());
   }
+#else
+  (void) message;
 #endif
 }
 
Index: supertux/src/object/camera.cpp
===================================================================
--- supertux/src/object/camera.cpp	(revision 4626)
+++ supertux/src/object/camera.cpp	(working copy)
@@ -204,10 +204,14 @@
     translation.y = height - SCREEN_HEIGHT;
   if(translation.y < 0)
     translation.y = 0;
+  if (height < SCREEN_HEIGHT)
+    translation.y = height/2.0 - SCREEN_HEIGHT/2.0;
   if(translation.x > width - SCREEN_WIDTH)
     translation.x = width - SCREEN_WIDTH;
   if(translation.x < 0)
     translation.x = 0;
+  if (width < SCREEN_WIDTH)
+    translation.x = width/2.0 - SCREEN_WIDTH/2.0;
 }
 
 void
Index: supertux/src/statistics.cpp
===================================================================
--- supertux/src/statistics.cpp	(revision 4626)
+++ supertux/src/statistics.cpp	(working copy)
@@ -38,8 +38,17 @@
   const int nv_secrets = std::numeric_limits<int>::min();
 }
 
+float WMAP_INFO_LEFT_X;
+float WMAP_INFO_RIGHT_X;
+float WMAP_INFO_TOP_Y1;
+float WMAP_INFO_TOP_Y2;
+
 Statistics::Statistics() : coins(nv_coins), total_coins(nv_coins), badguys(nv_badguys), total_badguys(nv_badguys), time(nv_time), secrets(nv_secrets), total_secrets(nv_secrets), valid(true), display_stat(0)
 {
+  WMAP_INFO_LEFT_X = (SCREEN_WIDTH/2 + 80) + 32;
+  WMAP_INFO_RIGHT_X = SCREEN_WIDTH/2 + 368;
+  WMAP_INFO_TOP_Y1 = SCREEN_HEIGHT/2 + 172 - 16;
+  WMAP_INFO_TOP_Y2 = SCREEN_HEIGHT/2 + 172;
 }
 
 Statistics::~Statistics()
@@ -76,11 +85,6 @@
 #define TOTAL_DISPLAY_TIME  5
 #define FADING_TIME         1
 
-const float WMAP_INFO_LEFT_X = (800 - 320) + 32;
-const float WMAP_INFO_RIGHT_X = 800 - 32;
-const float WMAP_INFO_TOP_Y1 = 600 - 128 - 16;
-const float WMAP_INFO_TOP_Y2 = 600 - 128;
-
 void
 Statistics::draw_worldmap_info(DrawingContext& context)
 {
Index: supertux/src/sector.cpp
===================================================================
--- supertux/src/sector.cpp	(revision 4626)
+++ supertux/src/sector.cpp	(working copy)
@@ -67,6 +67,7 @@
 #include "scripting/squirrel_util.hpp"
 #include "script_interface.hpp"
 #include "log.hpp"
+#include "main.hpp"
 
 Sector* Sector::_current = 0;
 
@@ -630,7 +631,7 @@
 {
   return Rect(
     camera->get_translation() - Vector(1600, 1200),
-    camera->get_translation() + Vector(1600, 1200));
+    camera->get_translation() + Vector(1600, 1200) + Vector(SCREEN_WIDTH,SCREEN_HEIGHT));
 }
 
 void
Index: supertux/src/worldmap/worldmap.cpp
===================================================================
--- supertux/src/worldmap/worldmap.cpp	(revision 4626)
+++ supertux/src/worldmap/worldmap.cpp	(working copy)
@@ -528,10 +528,15 @@
     if (camera_offset.y < 0)
       camera_offset.y = 0;
 
-    if (camera_offset.x > solids->get_width()*32 - SCREEN_WIDTH)
-      camera_offset.x = solids->get_width()*32 - SCREEN_WIDTH;
-    if (camera_offset.y > solids->get_height()*32 - SCREEN_HEIGHT)
-      camera_offset.y = solids->get_height()*32 - SCREEN_HEIGHT;
+    if (camera_offset.x > (int)solids->get_width()*32 - SCREEN_WIDTH)
+      camera_offset.x = (int)solids->get_width()*32 - SCREEN_WIDTH;
+    if (camera_offset.y > (int)solids->get_height()*32 - SCREEN_HEIGHT)
+      camera_offset.y = (int)solids->get_height()*32 - SCREEN_HEIGHT;
+    
+    if (int(solids->get_width()*32) < SCREEN_WIDTH)
+      camera_offset.x = solids->get_width()*16.0 - SCREEN_WIDTH/2.0;
+    if (int(solids->get_height()*32) < SCREEN_HEIGHT)
+      camera_offset.y = solids->get_height()*16.0 - SCREEN_HEIGHT/2.0;
 
     // handle input
     bool enter_level = false;
@@ -663,6 +668,10 @@
 void
 WorldMap::draw(DrawingContext& context)
 {
+  if (int(solids->get_width()*32) < SCREEN_WIDTH || int(solids->get_height()*32) < SCREEN_HEIGHT)
+    context.draw_filled_rect(Vector(0, 0), Vector(SCREEN_WIDTH, SCREEN_HEIGHT),
+      Color(0.0f, 0.0f, 0.0f, 1.0f), LAYER_BACKGROUND0);
+
   context.set_ambient_color( ambient_light );
   context.push_transform();
   context.set_translation(camera_offset);
Index: supertux/src/title.cpp
===================================================================
--- supertux/src/title.cpp	(revision 4626)
+++ supertux/src/title.cpp	(working copy)
@@ -270,7 +270,7 @@
   player->set_speedlimit(230); //MAX_WALK_XM
 
   main_menu.reset(new Menu());
-  main_menu->set_pos(SCREEN_WIDTH/2, 335);
+  main_menu->set_pos(SCREEN_WIDTH/2, SCREEN_HEIGHT/2 + 35);
   main_menu->add_entry(MNID_STARTGAME, _("Start Game"));
   main_menu->add_entry(MNID_LEVELS_CONTRIB, _("Contrib Levels"));
   main_menu->add_submenu(_("Options"), get_options_menu());
Index: supertux/data/levels/misc/menu.stl
===================================================================
--- supertux/data/levels/misc/menu.stl	(revision 4626)
+++ supertux/data/levels/misc/menu.stl	(working copy)
@@ -7,8 +7,8 @@
     (music "music/theme.ogg")
     (init-script "
 logo <- FloatingImage(\"images/objects/logo/logo.sprite\");
-logo.set_anchor_point(ANCHOR_TOP);
-logo.set_pos(0, 30);
+logo.set_anchor_point(ANCHOR_MIDDLE);
+logo.set_pos(0, -171);
 logo.set_visible(true);
 // Suspend (this is needed so that logo doesn't get deleted)
 suspend();
