diff --git a/core/src/cz/nic/tablexia/TablexiaApplication.java b/core/src/cz/nic/tablexia/TablexiaApplication.java
index f03c247fc1c3bebe01759e5a93f7343ff7f536cc..56fc7a4eae1d289bb500ad59ad57acc9faf7fbf3 100644
--- a/core/src/cz/nic/tablexia/TablexiaApplication.java
+++ b/core/src/cz/nic/tablexia/TablexiaApplication.java
@@ -10,6 +10,7 @@ import com.badlogic.gdx.graphics.g2d.Batch;
 import com.badlogic.gdx.math.Interpolation;
 import com.badlogic.gdx.scenes.scene2d.Actor;
 import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.utils.viewport.ScreenViewport;
 
 import cz.nic.tablexia.bus.ApplicationBus;
 import cz.nic.tablexia.bus.ApplicationBus.ApplicationEvent;
@@ -17,7 +18,6 @@ import cz.nic.tablexia.debug.DebugInfo;
 import cz.nic.tablexia.graphics.ColorTexture;
 import cz.nic.tablexia.screen.AbstractTablexiaScreen;
 import cz.nic.tablexia.screen.AbstractTablexiaScreen.ScreenLoadingListener;
-import cz.nic.tablexia.util.ui.XFillViewport;
 
 import static com.badlogic.gdx.scenes.scene2d.actions.Actions.alpha;
 import static com.badlogic.gdx.scenes.scene2d.actions.Actions.fadeIn;
@@ -80,7 +80,7 @@ public abstract class TablexiaApplication implements ApplicationListener {
 
     @Override
     public void create() {
-        stage = new Stage();
+        stage = new Stage(new ScreenViewport());
         inputMultiplexer = new InputMultiplexer(stage);
         Gdx.input.setInputProcessor(inputMultiplexer);
         prepareDebugInfo();
diff --git a/core/src/cz/nic/tablexia/TablexiaSettings.java b/core/src/cz/nic/tablexia/TablexiaSettings.java
index ca685d3b416c06282b338632061641650561e4b3..eb42917b5f1755f2e64a55edcf1634b37be402c1 100644
--- a/core/src/cz/nic/tablexia/TablexiaSettings.java
+++ b/core/src/cz/nic/tablexia/TablexiaSettings.java
@@ -13,7 +13,7 @@ import cz.nic.tablexia.game.GameDefinition;
 import cz.nic.tablexia.game.difficulty.GameDifficulty;
 import cz.nic.tablexia.loader.application.ApplicationTextManager;
 import cz.nic.tablexia.screen.AbstractTablexiaScreen;
-import cz.nic.tablexia.screen.gamemenu.GameMenuScreen;
+import cz.nic.tablexia.screen.viewport.ViewportDebugScreen;
 import cz.nic.tablexia.util.Log;
 import cz.nic.tablexia.util.Utility;
 
@@ -24,13 +24,13 @@ public class TablexiaSettings {
     private static final int     MIN_SCREEN_HEIGHT         = (int) (DEFAULT_SCREEN_WIDTH * MAXIMUM_RATIO);
     private static final boolean DEBUG_SHOW_BOUNDING_BOXES = true;
 
-    public  static final Class<? extends AbstractTablexiaScreen<?>> INITIAL_SCREEN = GameMenuScreen.class;
+    public static final Class<? extends AbstractTablexiaScreen<?>> INITIAL_SCREEN = ViewportDebugScreen.class;
 
-    private static final String PREFERENCES_KEY             = "cz.nic.tablexia.";
-    public static final String  LOCALE_KEY                  = "locale";
-    public static final String  CURRENT_SCREEN_KEY          = "current_screen";
+    private static final String PREFERENCES_KEY    = "cz.nic.tablexia.";
+    public static final  String LOCALE_KEY         = "locale";
+    public static final  String CURRENT_SCREEN_KEY = "current_screen";
 
-    private static final String IDE_BUILD_VERSION_NAME   = "DEVEL";
+    private static final String IDE_BUILD_VERSION_NAME = "DEVEL";
 
     private final BuildType BUILD_TYPE;
     private final String    VERSION_NAME;
@@ -42,15 +42,15 @@ public class TablexiaSettings {
 
     public static enum BuildType {
 
-        RELEASE ("release", false,  Log.TablexiaLogLevel.ERROR),
-        DEBUG   ("debug",   true,   Log.TablexiaLogLevel.DEBUG),
-        DEVEL   ("devel",   true,   Log.TablexiaLogLevel.DEBUG);
+        RELEASE("release", false, Log.TablexiaLogLevel.ERROR),
+        DEBUG("debug", true, Log.TablexiaLogLevel.DEBUG),
+        DEVEL("devel", true, Log.TablexiaLogLevel.DEBUG);
 
         private final static BuildType FALLBACK_VARIANT = BuildType.DEVEL;
 
-        private final String                key;
-        private final boolean               isDebug;
-        private final Log.TablexiaLogLevel  logLevel;
+        private final String               key;
+        private final boolean              isDebug;
+        private final Log.TablexiaLogLevel logLevel;
 
         private BuildType(String key, boolean isDebug, Log.TablexiaLogLevel logLevel) {
             this.key = key;
@@ -257,7 +257,7 @@ public class TablexiaSettings {
 
 //////////////////////////// SCREEN SIZE
 
-    public static int getDefaultScreenWidth() {
+    public static int getWorldWidth() {
         return DEFAULT_SCREEN_WIDTH;
     }
 
@@ -265,7 +265,7 @@ public class TablexiaSettings {
         return MAXIMUM_RATIO;
     }
 
-    public static int getMinScreenHeight() {
+    public static int getMinWorldHeight() {
         return MIN_SCREEN_HEIGHT;
     }
 }
\ No newline at end of file
diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
index 54666a561f8b45217070149d3eb2a0cd588efdd0..d0712ead42a2306fe1ba37e340415584b9ceae85 100644
--- a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
+++ b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
@@ -17,7 +17,6 @@ import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 import cz.nic.tablexia.TablexiaSettings;
 import cz.nic.tablexia.game.GameDefinition;
 import cz.nic.tablexia.game.difficulty.GameDifficulty;
-import cz.nic.tablexia.loader.application.ApplicationTextManager;
 import cz.nic.tablexia.screen.AbstractTablexiaScreen;
 import cz.nic.tablexia.screen.gamemenu.GameMenuAssets;
 import cz.nic.tablexia.util.ui.ViewPager;
@@ -34,7 +33,7 @@ public class GameMenuPage extends MenuPage implements ViewPager.ScrollListener {
     private Stack diffStack;
     private GameDifficulty gameDifficulty = GameDifficulty.EASY;
 
-    private float scrollOffset = TablexiaSettings.getDefaultScreenWidth(); // hack to keep paralax layers out of picture before scrolled for first time
+    private float scrollOffset = TablexiaSettings.getWorldWidth(); // hack to keep paralax layers out of picture before scrolled for first time
 
     public GameMenuPage(AbstractTablexiaScreen screen, GameDefinition game) {
         super(screen);
diff --git a/core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java b/core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java
index ab27da94d0352bebe2fc8f214cd809a7e933b88b..66adabe97dac73c02644bdfccedf562582e9935f 100644
--- a/core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java
+++ b/core/src/cz/nic/tablexia/screen/viewport/ViewportDebugScreen.java
@@ -34,13 +34,14 @@ public class ViewportDebugScreen extends AbstractTablexiaScreen<Void> {
         getStage().setDebugAll(true);
 
         Image large = new Image(getTexture("yellow.png"));
-        large.setSize(TablexiaSettings.getDefaultScreenWidth(), TablexiaSettings.getMinScreenHeight() * 2);
-        large.setPosition(0, TablexiaSettings.getMinScreenHeight() / -2.0f);
+        large.setSize(TablexiaSettings.getWorldWidth(), TablexiaSettings.getMinWorldHeight() * 2);
+        large.setPosition(0, TablexiaSettings.getMinWorldHeight() / -2.0f);
         getStage().addActor(large);
 
 
         Image widescreen = new Image(getTexture("red.png"));
-        widescreen.setSize(1000, TablexiaSettings.getMinScreenHeight());
+        widescreen.setSize(1000, TablexiaSettings.getMinWorldHeight());
+        widescreen.setPosition(0,0);
         getStage().addActor(widescreen);
 
         int size = 10;
@@ -48,7 +49,7 @@ public class ViewportDebugScreen extends AbstractTablexiaScreen<Void> {
             for (int j = 0; j < size; j++) {
                 Texture checker = getTexture("checker.png");
                 Image check = new Image(checker);
-                check.setPosition(500 - (check.getWidth() * size / 2) + (i * check.getWidth()), TablexiaSettings.getMinScreenHeight() / 2 - (check.getWidth() * size / 2) + (j * check.getWidth()));
+                check.setPosition(500 - (check.getWidth() * size / 2) + (i * check.getWidth()), TablexiaSettings.getMinWorldHeight() / 2 - (check.getWidth() * size / 2) + (j * check.getWidth()));
                 getStage().addActor(check);
             }
         }
@@ -68,14 +69,19 @@ public class ViewportDebugScreen extends AbstractTablexiaScreen<Void> {
 
             @Override
             public void touchDragged(InputEvent event, float x, float y, int pointer) {
-                point.setPosition(x - point.getWidth() / 2, y - point.getHeight() / 2);
+                if(point != null) {
+                    point.setPosition(x - point.getWidth() / 2, y - point.getHeight() / 2);
+                    Log.debug(getClass(), "Touch coords " + (x - point.getWidth() / 2) + ":" + ( y - point.getHeight() / 2));
+                }
             }
 
             @Override
             public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
-                Log.debug(getClass(), "Liftoff");
-                point.remove();
-                point = null;
+                if(point != null) {
+                    Log.debug(getClass(), "Liftoff");
+                    point.remove();
+                    point = null;
+                }
             }
         });
         // TODO
diff --git a/core/src/cz/nic/tablexia/util/ui/XFillViewport.java b/core/src/cz/nic/tablexia/util/ui/XFillViewport.java
index 831a9ac5c06b710f0c2051dc35b4e88a2812a4db..c9a71aba40cc8b1f7917f26c49fc29e1a13ce092 100644
--- a/core/src/cz/nic/tablexia/util/ui/XFillViewport.java
+++ b/core/src/cz/nic/tablexia/util/ui/XFillViewport.java
@@ -1,7 +1,6 @@
 package cz.nic.tablexia.util.ui;
 
 import com.badlogic.gdx.Gdx;
-import com.badlogic.gdx.graphics.Camera;
 import com.badlogic.gdx.graphics.OrthographicCamera;
 import com.badlogic.gdx.utils.viewport.Viewport;
 
@@ -17,43 +16,38 @@ public class XFillViewport extends Viewport {
      * Creates a new viewport using a new {@link com.badlogic.gdx.graphics.OrthographicCamera} with no maximum world size.
      */
     public XFillViewport() {
-        this(TablexiaSettings.getDefaultScreenWidth(), TablexiaSettings.getMinScreenHeight(), new OrthographicCamera());
-        Log.info(getClass().getName(), "Viewport size: " + TablexiaSettings.getDefaultScreenWidth() + "x" + TablexiaSettings.getMinScreenHeight());
+        setWorldSize(TablexiaSettings.getWorldWidth(), TablexiaSettings.getMinWorldHeight());
+        setCamera(new OrthographicCamera());
+        Log.info(getClass().getName(), "Viewport size: " + TablexiaSettings.getWorldWidth() + "x" + TablexiaSettings.getMinWorldHeight());
     }
 
-    /**
-     * Creates a new viewport with a maximum world size.
-     */
-    public XFillViewport(float worldWidth, float worldHeight, Camera camera) {
-        setWorldSize(worldWidth, worldHeight);
-        setCamera(camera);
-    }
-
-    private int screenX, screenY, screenWidth, screenHeight;
     private float cameraYOffset;
 
-
     @Override
     public void update(int screenWidth, int screenHeight, boolean centerCamera) {
         float newWorldHeight = getWorldWidth() / ((float) screenWidth / (float) screenHeight);
 
         // FIT into screen keeping at least minimum ration
-        this.screenX = (newWorldHeight < TablexiaSettings.getMinScreenHeight()) ? ((int) ((screenWidth - (screenHeight / TablexiaSettings.getMaximumRatio())) / 2)) : 0;
-        this.screenY = 0;
-        this.screenWidth = (newWorldHeight < TablexiaSettings.getMinScreenHeight()) ? ((int) (screenHeight / TablexiaSettings.getMaximumRatio())) : screenWidth;
-        this.screenHeight = screenHeight;
-        setScreenBounds(screenX,screenY,this.screenWidth,this.screenHeight);
-        // SET NEW WORLD HEIGHT
-        this.setWorldHeight(newWorldHeight < TablexiaSettings.getMinScreenHeight() ? TablexiaSettings.getMinScreenHeight() : newWorldHeight); // World width dooes not change
-        cameraYOffset = (getWorldHeight() - TablexiaSettings.getMinScreenHeight()) / 2;
+        //int screenX = (newWorldHeight < TablexiaSettings.getMinWorldHeight()) ? ((int) ((screenWidth - (screenHeight / TablexiaSettings.getMaximumRatio())) / 2)) : 0;
+        int screenX = 0;
+        int screenY = 0;
+        //int newScreenWidth = (newWorldHeight < TablexiaSettings.getMinWorldHeight()) ? ((int) (screenHeight / TablexiaSettings.getMaximumRatio())) : screenWidth;
+        int newScreenWidth = screenWidth;
+        int newScreenHeight = screenHeight;
 
-        Log.info(getClass().getName(), "New viewport size (min: " + TablexiaSettings.getMinScreenHeight() + ") update: " + screenWidth + "x" + screenHeight + " - position: " + screenX + "x" + screenY + " - bounds: " + this.screenWidth + "x" + this.screenHeight + " - world: " + getWorldWidth() + "x" + getWorldHeight() + " - y offset: " + cameraYOffset);
+        // SET NEW WORLD HEIGHT
+        this.setWorldHeight(Math.max(TablexiaSettings.getMinWorldHeight(), newWorldHeight)); // World width dooes not change
+        this.setWorldWidth(TablexiaSettings.getWorldWidth());
+        cameraYOffset = (getWorldHeight() - TablexiaSettings.getMinWorldHeight()) / 2;
+        setScreenBounds(screenX, screenY, newScreenWidth, newScreenHeight);
         apply(centerCamera);
     }
 
     @Override
     public void apply(boolean centerCamera) {
-        Gdx.gl.glViewport(screenX, screenY, screenWidth, screenHeight);
+        Log.info(getClass().getName(), "New viewport size (min: " + TablexiaSettings.getMinWorldHeight() + ") position: " + getScreenX() + ":" + getScreenY() + " - bounds: " + getScreenWidth() + ":" + getScreenHeight() + " - world: " + getWorldWidth() + "x" + getWorldHeight() + " - y offset: " + cameraYOffset);
+
+        Gdx.gl.glViewport(getScreenX(), getScreenY(), getScreenWidth(), getScreenHeight());
         getCamera().viewportWidth = getWorldWidth();
         getCamera().viewportHeight = getWorldHeight();
         if (centerCamera) getCamera().position.set(getWorldWidth() / 2, getWorldHeight() / 2, 0);