diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java b/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java
index 116a0143dc6a94f9547f08505307c543a920ebc8..bed02ff41b790d1d021e08e2c6c89eb92d957faa 100644
--- a/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java
+++ b/core/src/cz/nic/tablexia/screen/gamemenu/GameMenuScreen.java
@@ -7,6 +7,7 @@ import com.badlogic.gdx.math.Vector2;
 import com.badlogic.gdx.scenes.scene2d.Actor;
 import com.badlogic.gdx.scenes.scene2d.Touchable;
 import com.badlogic.gdx.scenes.scene2d.actions.Actions;
+import com.badlogic.gdx.scenes.scene2d.actions.SequenceAction;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
 
 import net.engio.mbassy.listener.Handler;
@@ -18,7 +19,9 @@ import java.util.Map;
 
 import cz.nic.tablexia.bus.ApplicationBus;
 import cz.nic.tablexia.game.GameDefinition;
+import cz.nic.tablexia.menu.AbstractMenu;
 import cz.nic.tablexia.menu.game.GameMenuDefinition;
+import cz.nic.tablexia.menu.main.MainMenu;
 import cz.nic.tablexia.model.screen.ScreenDAO;
 import cz.nic.tablexia.screen.AbstractTablexiaScreen;
 import cz.nic.tablexia.screen.gamemenu.actions.ScrollHomeAction;
@@ -27,6 +30,7 @@ import cz.nic.tablexia.screen.gamemenu.pages.GameMenuPage;
 import cz.nic.tablexia.screen.gamemenu.pages.MenuPage;
 import cz.nic.tablexia.screen.gamemenu.pages.OfficeMenuPage;
 import cz.nic.tablexia.screen.gamemenu.pages.WallPage;
+import cz.nic.tablexia.util.MusicUtil;
 import cz.nic.tablexia.util.Utility;
 
 /**
@@ -41,6 +45,12 @@ public class GameMenuScreen extends AbstractTablexiaScreen<int[][]> {
 
     private Music ambientMusic;
 
+    private Music introSpeechMusic;
+    private Music.OnCompletionListener introSpeechMusicCompleteListener;
+
+    private SequenceAction initialScrollAction;
+    private boolean initialScrollActive = false;
+
     public enum GameMenuPageDefinition {
         OFFICE_PAGE(0, null, null, null),
         ROBBERY_PAGE(        1, GameDefinition.ROBBERY,          GameMenuAssets.BASE_ASSETS_ROBBERY,         new Vector2(0.168f, 0.016f)),
@@ -166,10 +176,10 @@ public class GameMenuScreen extends AbstractTablexiaScreen<int[][]> {
         }
 
         // show intro scroll and play intro speech only first time user visits GameMenuScreen
-        Music music = null;
+        introSpeechMusic = null;
         if(isFirstLogIn) {
-            music = getMusic(INTRO_SPEECH);
-            music.play();
+            introSpeechMusic = getMusic(INTRO_SPEECH);
+            introSpeechMusic.play();
 
             pagedScrollPane.setTouchable(Touchable.disabled);
             pagedScrollPane.scrollToPage(pagedScrollPane.getChildren().size - 1, false);
@@ -178,26 +188,31 @@ public class GameMenuScreen extends AbstractTablexiaScreen<int[][]> {
             pagedScrollPane.setScrollX(pagedScrollPane.getContent().getWidth());
             pagedScrollPane.updateVisualScroll();
 
-            pagedScrollPane.addAction(Actions.sequence(Actions.delay(1f), ScrollHomeAction.createInstace(), Actions.run(new Runnable() {
+            initialScrollAction = Actions.sequence(Actions.delay(1f), ScrollHomeAction.createInstace(), Actions.run(new Runnable() {
                 @Override
                 public void run() {
                     pagedScrollPane.setTouchable(Touchable.enabled);
+                    initialScrollActive = false;
                 }
-            })));
+            }));
+            pagedScrollPane.addAction(initialScrollAction);
+            initialScrollActive = true;
         }
 
         //sound effect of street is waiting, until intro speech is finished
         //game sound effects in menu are turned of after intro speech is finished
         if(isFirstLogIn) {
-            if (music != null) {
-                music.setOnCompletionListener(new Music.OnCompletionListener() {
+            if (introSpeechMusic != null) {
+                introSpeechMusicCompleteListener = new Music.OnCompletionListener() {
                     @Override
                     public void onCompletion(Music music) {
                         music.dispose();
                         playAmbientMusic();
                         resetGameMenuSounds(gameMenuPages);
                     }
-                });
+                };
+
+                introSpeechMusic.setOnCompletionListener(introSpeechMusicCompleteListener);
             }
         } else {
             playAmbientMusic();
@@ -206,6 +221,18 @@ public class GameMenuScreen extends AbstractTablexiaScreen<int[][]> {
         screenResized(0, 0);
     }
 
+    private void cancelInitialScroll() {
+        initialScrollActive = false;
+        pagedScrollPane.removeAction(initialScrollAction);
+        pagedScrollPane.cancel();
+        pagedScrollPane.scrollToInitialPage();
+        pagedScrollPane.setTouchable(Touchable.enabled);
+
+        if(introSpeechMusic != null && introSpeechMusic.isPlaying()) {
+            MusicUtil.fadeOut(introSpeechMusic, 1f, introSpeechMusicCompleteListener);
+        }
+    }
+
     private void playAmbientMusic() {
         ambientMusic = getMusic(GameMenuAssets.AMBIENT_MUSIC);
         ambientMusic.setVolume(AMBIENT_SOUND_VOLUME);
@@ -284,10 +311,22 @@ public class GameMenuScreen extends AbstractTablexiaScreen<int[][]> {
 
     @Override
     public void backButtonPressed() {
+        if(initialScrollActive) {
+            cancelInitialScroll();
+            return;
+        }
+
         if (!pagedScrollPane.getCurrentPage().backButtonPressed()) {
             if (!pagedScrollPane.scrollToInitialPage()) {
                 Gdx.app.exit();
             }
         }
     }
+
+    @Handler
+    public void onMenuEvent(AbstractMenu.MenuEvent menuEvent) {
+        if(initialScrollActive && menuEvent.getTargetMenu() == MainMenu.class) {
+            cancelInitialScroll();
+        }
+    }
 }
\ No newline at end of file
diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/PagedScrollPane.java b/core/src/cz/nic/tablexia/screen/gamemenu/PagedScrollPane.java
index c48a065b2fd7ddbc9125a6fa41b4cbc897c4c501..b4df09713f3860267b260530ce9b0e0d475938f5 100644
--- a/core/src/cz/nic/tablexia/screen/gamemenu/PagedScrollPane.java
+++ b/core/src/cz/nic/tablexia/screen/gamemenu/PagedScrollPane.java
@@ -9,6 +9,7 @@ import com.badlogic.gdx.scenes.scene2d.InputEvent;
 import com.badlogic.gdx.scenes.scene2d.InputListener;
 import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.utils.SnapshotArray;
 
 import cz.nic.tablexia.screen.gamemenu.pages.MenuPage;
 import cz.nic.tablexia.util.ui.ScrollPaneWithBorders;
@@ -148,6 +149,20 @@ public class PagedScrollPane extends ScrollPaneWithBorders {
         });
     }
 
+    @Override
+    public void setScrollX(float pixels) {
+        super.setScrollX(pixels);
+
+        SnapshotArray<Actor> pages = content.getChildren();
+        int page = 0;
+        for(int i = 0; i < pages.size; i++) {
+            if(pages.get(i).getX() < getScrollX()) {
+                page++;
+            }
+        }
+        currentPage = page;
+    }
+
     /**
      * Determinates if PagedScrollPane should change page or not
      * according to swipes X coordinate
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 e54d498c3643b4df29fad9caa4bf7cef92d460ca..a3bf0e3812d29601a961c410237675d0fcd741c9 100644
--- a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
+++ b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java
@@ -358,6 +358,7 @@ public class GameMenuPage extends MenuPage {
         buttonDifficultyEasy.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent event, float x, float y) {
+                super.clicked(event, x, y);
                 dragSwitchListener.switchToStep(GameDifficulty.EASY.getDifficultyNumber() - 1);
             }
         });
@@ -365,6 +366,7 @@ public class GameMenuPage extends MenuPage {
         buttonDifficultyMedium.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent event, float x, float y) {
+                super.clicked(event, x, y);
                 dragSwitchListener.switchToStep(GameDifficulty.MEDIUM.getDifficultyNumber() - 1);
             }
         });
@@ -372,6 +374,7 @@ public class GameMenuPage extends MenuPage {
         buttonDifficultyHard.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent event, float x, float y) {
+                super.clicked(event, x, y);
                 dragSwitchListener.switchToStep(GameDifficulty.HARD.getDifficultyNumber() - 1);
             }
         });
@@ -420,8 +423,8 @@ public class GameMenuPage extends MenuPage {
                 difficultyChanged(GameDifficulty.getVisibleGameDifficultyList().get(step));
             }
         });
-        gameDifficulty = UserDifficultySettingsDAO.getUserSettingsByGame(TablexiaSettings.getInstance().getSelectedUser().getId(), game.getGameNumber());
-        dragSwitchListener.switchToStep(gameDifficulty.getDifficultyNumber() - 1);
+		gameDifficulty = UserDifficultySettingsDAO.getUserSettingsByGame(TablexiaSettings.getInstance().getSelectedUser().getId(), game.getGameNumber());
+        dragSwitchListener.switchToStep(gameDifficulty.getDifficultyNumber() - 1, false);
 
         stepSoundsEnabled = true;
     }
@@ -482,7 +485,6 @@ public class GameMenuPage extends MenuPage {
     public void difficultyChanged(final GameDifficulty difficulty) {
         gameDifficulty = difficulty;
         TablexiaSettings.getInstance().setGameDifficulty(game, difficulty);
-
 		new Runnable() {
 			@Override
 			public void run() {
diff --git a/core/src/cz/nic/tablexia/util/MusicUtil.java b/core/src/cz/nic/tablexia/util/MusicUtil.java
index c9e381e0cadba3b9cac2d3022802d9df2253738c..2a8df99c5b453d0f21eae68396da935f4ac9f25d 100644
--- a/core/src/cz/nic/tablexia/util/MusicUtil.java
+++ b/core/src/cz/nic/tablexia/util/MusicUtil.java
@@ -13,9 +13,17 @@ public class MusicUtil {
     public static final float MAX_EFFECT_DURATION     =   5;
 
 	public static void fadeOut(final Music music, float time) {
-		fadeOut(music, time, true);
+		fadeOut(music, time, null, true);
 	}
 
+    public static void fadeOut(final Music music, float time, boolean dispose) {
+        fadeOut(music, time, null, dispose);
+    }
+
+    public static void fadeOut(final Music music, float time, Music.OnCompletionListener completionListener) {
+        fadeOut(music, time, completionListener, true);
+    }
+
 	public static void fadeIn(final Music music, float time) {
 		fadeIn(music, time, true);
 	}
@@ -26,7 +34,7 @@ public class MusicUtil {
      * @param music Music you want to apply the effect to
      * @param time Duration of the effect in seconds
      */
-    public static void fadeOut(final Music music, float time, final boolean dispose) {
+    public static void fadeOut(final Music music, float time, final Music.OnCompletionListener completionListener, final boolean dispose) {
         //Wrong arguments ? return...
         if(music == null || music.getVolume() <= 0 || !music.isPlaying()) return;
 
@@ -53,7 +61,8 @@ public class MusicUtil {
                     float volume = MathUtils.clamp(currentVolume - volumeStep, 0, 1);
 
                     if(volume <= endVolume) {
-						music.stop();
+                        music.stop();
+                        if(completionListener != null) completionListener.onCompletion(music);
 						if(dispose) music.dispose();
 						cancel();
 					}
@@ -113,4 +122,4 @@ public class MusicUtil {
             }
         }, 0, SOUND_EFFECT_INTERVAL, repeatCount);
     }
-}
+}
\ No newline at end of file