diff --git a/core/src/cz/nic/tablexia/TablexiaSettings.java b/core/src/cz/nic/tablexia/TablexiaSettings.java
index e8323f3e5e2f19ed29e38adf623d0624b101882a..d0d12cbb459914c6de37c73c8626c49d7c7fe168 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.createuser.FormScreen;
+import cz.nic.tablexia.screen.gamemenu.GameMenuScreen;
 import cz.nic.tablexia.util.Log;
 import cz.nic.tablexia.util.Utility;
 
@@ -24,7 +24,7 @@ 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 = FormScreen.class;
+    public  static final Class<? extends AbstractTablexiaScreen<?>> INITIAL_SCREEN = GameMenuScreen.class;
 
     public static final String LOCALE_KEY         = "locale";
     public static final String CURRENT_SCREEN_KEY = "current_screen";
diff --git a/core/src/cz/nic/tablexia/model/User.java b/core/src/cz/nic/tablexia/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..4067b4a1f2620113076c7f5ce84a1547b8a5301c
--- /dev/null
+++ b/core/src/cz/nic/tablexia/model/User.java
@@ -0,0 +1,20 @@
+package cz.nic.tablexia.model;
+
+/**
+ * Created by lhoracek on 4/16/15.
+ */
+public class User {
+    private Gender gender;
+
+    public Gender getGender() {
+        return gender;
+    }
+
+    public void setGender(Gender gender) {
+        this.gender = gender;
+    }
+
+    public static enum Gender {
+        MALE,FEMALE;
+    }
+}
diff --git a/core/src/cz/nic/tablexia/screen/createuser/FormScreen.java b/core/src/cz/nic/tablexia/screen/createuser/FormScreen.java
index 89d224be78bd76a10abe5c067a8b1e51cb701c2a..ee42c1391b7b7c574a567090192da05c603bc477 100644
--- a/core/src/cz/nic/tablexia/screen/createuser/FormScreen.java
+++ b/core/src/cz/nic/tablexia/screen/createuser/FormScreen.java
@@ -12,6 +12,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 
 import cz.nic.tablexia.TablexiaSettings;
 import cz.nic.tablexia.loader.application.ApplicationFontManager;
+import cz.nic.tablexia.model.User;
 import cz.nic.tablexia.screen.AbstractAutoloadTablexiaScreen;
 import cz.nic.tablexia.util.ScaleUtil;
 import cz.nic.tablexia.util.listener.DragActorListener;
@@ -25,6 +26,7 @@ public class FormScreen extends AbstractAutoloadTablexiaScreen<Void> {
     private Label ageLabel, nameLabel;
     private int age;
     private String name;
+    private User user = new User();
 
 
     public FormScreen() {
@@ -100,7 +102,7 @@ public class FormScreen extends AbstractAutoloadTablexiaScreen<Void> {
         selector.setPosition(getStage().getWidth() * 0.735f, getStage().getWidth() * 0.169f);
         group.addActor(selector);
         float middle = getStage().getWidth() * 0.71f + getStage().getWidth() * 0.027f;
-        DragSwitchListener sl =new DragSwitchListener(selector, getStage().getWidth() * 0.71f, getStage().getWidth() * 0.71f + getStage().getWidth() * 0.055f, middle);
+        DragSwitchListener sl = new DragSwitchListener(selector, getStage().getWidth() * 0.71f, getStage().getWidth() * 0.71f + getStage().getWidth() * 0.055f, middle);
         selector.addListener(sl);
         sl.setSwitchMovedListener(new DragSwitchListener.SwitchMovedListener() {
             @Override
@@ -111,6 +113,12 @@ public class FormScreen extends AbstractAutoloadTablexiaScreen<Void> {
                 steps[step].setVisible(true);
             }
         });
+        sl.setSwitchSelectedListener(new DragSwitchListener.SwitchSelectedListener() {
+            @Override
+            public void stepSelected(int step) {
+                user.setGender(step == 0 ? User.Gender.FEMALE : User.Gender.MALE);
+            }
+        });
         sl.switchToStep(1);
         sl.setDisabledPoint(middle);
 
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..5beb67f7cb190fc220f5a151b0fbfbd9e3fa1f0c 100644
--- a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
+++ b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
@@ -6,9 +6,7 @@ import com.badlogic.gdx.graphics.g2d.Batch;
 import com.badlogic.gdx.graphics.g2d.BitmapFont;
 import com.badlogic.gdx.scenes.scene2d.Actor;
 import com.badlogic.gdx.scenes.scene2d.InputEvent;
-import com.badlogic.gdx.scenes.scene2d.InputListener;
 import com.badlogic.gdx.scenes.scene2d.actions.AlphaAction;
-import com.badlogic.gdx.scenes.scene2d.actions.MoveToAction;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
 import com.badlogic.gdx.scenes.scene2d.ui.Label;
 import com.badlogic.gdx.scenes.scene2d.ui.Stack;
@@ -17,9 +15,10 @@ 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.Log;
+import cz.nic.tablexia.util.listener.DragSwitchListener;
 import cz.nic.tablexia.util.ui.ViewPager;
 
 /**
@@ -33,6 +32,7 @@ public class GameMenuPage extends MenuPage implements ViewPager.ScrollListener {
     private Actor diffEasy, diffMedium, diffHard;
     private Stack diffStack;
     private GameDifficulty gameDifficulty = GameDifficulty.EASY;
+    private DragSwitchListener dragSwitchListener;
 
     private float scrollOffset = TablexiaSettings.getDefaultScreenWidth(); // hack to keep paralax layers out of picture before scrolled for first time
 
@@ -149,43 +149,18 @@ public class GameMenuPage extends MenuPage implements ViewPager.ScrollListener {
         diffStack.setSize(diffWidth, diffHeight);
         diffStack.setPosition(diffX, diffY);
         addActor(diffStack);
-        setDifficulty(gameDifficulty);
-
-        diffStack.addListener(new InputListener() {
-            float lastX;
-
+        diffStack.addListener(dragSwitchListener = new DragSwitchListener(diffStack, diffEasyX, diffHardX, diffMediumX));
+        dragSwitchListener.setSwitchMovedListener(new DragSwitchListener.SwitchMovedListener() {
             @Override
-            public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
-                super.touchDown(event, x, y, pointer, button);
-                lastX = x;
-                event.stop();
-                return true;
-            }
-
-            @Override
-            public void touchDragged(InputEvent event, float x, float y, int pointer) {
-                super.touchDragged(event, x, y, pointer);
-                float bx = diffStack.getX() + (x - lastX);
-                if (bx >= diffEasyX && bx <= diffHardX) {
-                    diffStack.setPosition(bx, diffStack.getY());
+            public void movedToStep(int step) {
+                Log.info(((Object) this).getClass().getName(), "moved to step: " + step);
+                for(int i = 0 ; i< diffStack.getChildren().size; i++){
+                    diffStack.getChildren().get(i).setVisible(i==step);
                 }
-                showDifficulty(getDifficulty());
-                event.stop();
-            }
-
-            @Override
-            public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
-                super.touchUp(event, x, y, pointer, button);
-                float bx = diffStack.getX() + (x - lastX);
-
-                GameDifficulty newDiff = getDifficulty();
-                setDifficulty(newDiff);
-                if (gameDifficulty != newDiff) {
-                    difficultyChanged(newDiff);
-                }
-                event.stop();
             }
         });
+        setDifficulty(gameDifficulty); // TODO
+
     }
 
     /**
@@ -194,20 +169,7 @@ public class GameMenuPage extends MenuPage implements ViewPager.ScrollListener {
      * @param difficulty
      */
     public void setDifficulty(GameDifficulty difficulty) {
-        showDifficulty(difficulty);
-        MoveToAction ma = new MoveToAction();
-        switch (difficulty) {
-            case EASY:
-                ma.setPosition(diffEasyX, diffStack.getY());
-                break;
-            case MEDIUM:
-                ma.setPosition(diffMediumX, diffStack.getY());
-                break;
-            case HARD:
-                ma.setPosition(diffHardX, diffStack.getY());
-                break;
-        }
-        diffStack.addAction(ma);
+        dragSwitchListener.switchToStep(difficulty.ordinal());
         if (gameDifficulty != difficulty) {
             difficultyChanged(difficulty);
         }
@@ -223,51 +185,6 @@ public class GameMenuPage extends MenuPage implements ViewPager.ScrollListener {
         TablexiaSettings.getInstance().setGameDifficulty(game, difficulty);
     }
 
-    /**
-     * Get nearest difficulty from current slider position
-     *
-     * @return
-     */
-    private GameDifficulty getDifficulty() {
-        float bx = diffStack.getX();
-        if (bx < diffMediumX) {
-            if ((diffEasyX + ((diffMediumX - diffEasyX) / 2)) > bx) {
-                return GameDifficulty.EASY;
-            } else {
-                return GameDifficulty.MEDIUM;
-            }
-        } else {
-            if ((diffMediumX + ((diffHardX - diffMediumX) / 2)) > bx) {
-                return GameDifficulty.MEDIUM;
-            } else {
-                return GameDifficulty.HARD;
-            }
-        }
-    }
-
-    /**
-     * Check difficulty image and display corresponding image
-     *
-     * @param diff
-     */
-    private void showDifficulty(GameDifficulty diff) {
-        diffEasy.setVisible(false);
-        diffMedium.setVisible(false);
-        diffHard.setVisible(false);
-
-        switch (diff) {
-            case EASY:
-                diffEasy.setVisible(true);
-                break;
-            case MEDIUM:
-                diffMedium.setVisible(true);
-                break;
-            case HARD:
-                diffHard.setVisible(true);
-                break;
-        }
-    }
-
     @Override
     public void draw(Batch batch, float parentAlpha) {
         // Paralax layers
diff --git a/core/src/cz/nic/tablexia/util/listener/DragSwitchListener.java b/core/src/cz/nic/tablexia/util/listener/DragSwitchListener.java
index 824909a6b33486b6e7f7257bad0cd61daaa226a7..5d90c72d8fe05e351bfacd28a06ca35dfe22e36e 100644
--- a/core/src/cz/nic/tablexia/util/listener/DragSwitchListener.java
+++ b/core/src/cz/nic/tablexia/util/listener/DragSwitchListener.java
@@ -36,6 +36,7 @@ public class DragSwitchListener extends InputListener {
         super.touchDown(event, x, y, pointer, button);
         grabX = x;
         startX = actor.getX();
+        event.stop();
         return true;
     }