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 a041c2d304d9464917edd59ffe2c095615c9274c..7c2ae4827836c2012e9501eb2fecb134d4ceebd7 100644
--- a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
+++ b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
@@ -5,12 +5,13 @@ import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.Batch;
 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.Skin;
 import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
-import com.badlogic.gdx.scenes.scene2d.utils.DragListener;
 
 import cz.nic.tablexia.TablexiaSettings;
 import cz.nic.tablexia.game.GameDefinition;
@@ -25,6 +26,8 @@ import cz.nic.tablexia.util.ui.ViewPager;
 public class GameMenuPage extends MenuPage implements ViewPager.ScrollListener {
     private GameDefinition game;
 
+    private float diffEasyX, diffMediumX, diffHardX;
+
     private float scrollOffset = TablexiaSettings.getDefaultScreenWidth(); // hack to keep paralax layers out of picture before scrolled for first time
 
     public GameMenuPage(AbstractTablexiaScreen screen, GameDefinition game) {
@@ -118,33 +121,65 @@ public class GameMenuPage extends MenuPage implements ViewPager.ScrollListener {
         addActor(diffBarImage);
 
         // Difficulty button
-        Texture diff = getScreen().getTexture(GameMenuAssets.DIFF_THUMB_MEDIUM);
+
+
+        final Texture diff = getScreen().getTexture(GameMenuAssets.DIFF_THUMB_MEDIUM);
         final Image diffButton = new Image(diff);
-        int diffY = 0;
-        int diffHeight = (int) (screen.getStage().getHeight() * 0.15);
-        int diffWidth = (int) (diffHeight * ((float) diff.getWidth() / (float) diff.getHeight()));
-        int diffX = (int) screen.getStage().getWidth() / 2 - diffWidth / 2 + (int) (diffWidth * 0.1f);
+        float diffY = 0;
+        float diffHeight = screen.getStage().getHeight() * 0.15f;
+        float diffWidth = diffHeight * ((float) diff.getWidth() / (float) diff.getHeight());
+
+        diffEasyX = (screen.getStage().getWidth() / 2 - diffWidth / 2 + (int) (diffWidth * 0.1f)) - diffBarWidth / 2;
+        diffMediumX = screen.getStage().getWidth() / 2 - diffWidth / 2 + (int) (diffWidth * 0.1f);
+        diffHardX = (screen.getStage().getWidth() / 2 - diffWidth / 2 + (int) (diffWidth * 0.1f)) + diffBarWidth / 2;
+
+        float diffX = diffEasyX;
         diffButton.setSize(diffWidth, diffHeight);
         diffButton.setPosition(diffX, diffY);
         addActor(diffButton);
 
-        diffButton.addListener(new DragListener() {
+
+        diffButton.addListener(new InputListener() {
             float lastX;
 
             @Override
-            public void dragStart(InputEvent event, float x, float y, int pointer) {
-                super.dragStart(event, x, y, pointer);
+            public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
+                super.touchDown(event, x, y, pointer, button);
                 lastX = x;
-                event.handle();
+                event.stop();
+                return true;
             }
 
             @Override
-            public void drag(InputEvent event, float x, float y, int pointer) {
-                super.drag(event, x, y, pointer);
-                // example code below for origin and position
-                //diffButton.setPosition(lastX - x, diffButton.getY());
-                lastX = x;
-                event.handle();
+            public void touchDragged(InputEvent event, float x, float y, int pointer) {
+                super.touchDragged(event, x, y, pointer);
+                float bx = diffButton.getX() + (x - lastX);
+                if (bx >= diffEasyX && bx <= diffHardX) {
+                    diffButton.setPosition(bx, diffButton.getY());
+                }
+                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 = diffButton.getX() + (x - lastX);
+                MoveToAction ma = new MoveToAction();
+                if (bx < diffMediumX) {
+                    if ((diffEasyX + ((diffMediumX - diffEasyX) / 2)) > bx) {
+                        ma.setPosition(diffEasyX, diffButton.getY());
+                    } else {
+                        ma.setPosition(diffMediumX, diffButton.getY());
+                    }
+                } else {
+                    if ((diffMediumX + ((diffHardX - diffMediumX) / 2)) > bx) {
+                        ma.setPosition(diffMediumX, diffButton.getY());
+                    } else {
+                        ma.setPosition(diffHardX, diffButton.getY());
+                    }
+                }
+                diffButton.addAction(ma);
+                event.stop();
             }
         });
     }