diff --git a/core/src/cz/nic/tablexia/TablexiaStorage.java b/core/src/cz/nic/tablexia/TablexiaStorage.java
index 5a56f559b1cf53e55e1be88e2a2e55fd9b1b9212..3e4ebd7e8b2d6914a4466912104cdd76fab5422f 100644
--- a/core/src/cz/nic/tablexia/TablexiaStorage.java
+++ b/core/src/cz/nic/tablexia/TablexiaStorage.java
@@ -62,7 +62,7 @@ public class TablexiaStorage {
                 Log.err(TablexiaStorage.class, "Cannot create database connection!", e);
             }
         } else {
-            throw new IllegalStateException("Data storage already initialized!");
+            Log.info(TablexiaStorage.class, "Data storage has already been initialized! Skipping initialization...");
         }
     }
 
diff --git a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java
index dc33a9488d17fca44fec507ca96a8a011dd5f47a..c29a90f1a6089867ae7c21c1cc515586095577a6 100644
--- a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java
+++ b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java
@@ -72,7 +72,6 @@ import cz.nic.tablexia.util.ui.button.TablexiaButton;
 import cz.nic.tablexia.util.ui.dialog.TablexiaComponentDialog;
 import cz.nic.tablexia.util.ui.dialog.TablexiaComponentDialogFactory;
 import cz.nic.tablexia.util.ui.dialog.components.AdaptiveSizeDialogComponent;
-import cz.nic.tablexia.util.ui.dialog.components.BackButtonHideComponent;
 import cz.nic.tablexia.util.ui.dialog.components.CenterPositionDialogComponent;
 import cz.nic.tablexia.util.ui.dialog.components.DimmerDialogComponent;
 import cz.nic.tablexia.util.ui.dialog.components.FixedSpaceContentDialogComponent;
diff --git a/core/src/cz/nic/tablexia/game/games/kidnapping/KidnappingGame.java b/core/src/cz/nic/tablexia/game/games/kidnapping/KidnappingGame.java
index 92e35cb8e1b5be026e68ff71425e56419605560b..e2366676396812f32661f87dec452539a3b578b9 100644
--- a/core/src/cz/nic/tablexia/game/games/kidnapping/KidnappingGame.java
+++ b/core/src/cz/nic/tablexia/game/games/kidnapping/KidnappingGame.java
@@ -88,7 +88,6 @@ public class KidnappingGame extends AbstractTablexiaGame<GameState> {
 	private Group ruleMessage;
 	private boolean ruleMessageShown = false;
 	private StandardTablexiaButton ruleButton;
-    private boolean isBackButtonAllowed;
 
     private DirectionSounds.SoundPack actualSoundPack;
 
@@ -105,7 +104,6 @@ public class KidnappingGame extends AbstractTablexiaGame<GameState> {
 
     @Override
     protected void gameLoaded(final java.util.Map<String, String> gameState) {
-        isBackButtonAllowed = false;
 		getStage().addActor(map = Map.MapFactory.createInstance(this, gfxLibrary, getData()));
 		map.setMapScale(MAP_SCALE);
 
@@ -212,11 +210,6 @@ public class KidnappingGame extends AbstractTablexiaGame<GameState> {
 		ruleMessageShown = true;
 	}
 
-    @Override
-    public void backButtonPressed() {
-        if(isBackButtonAllowed) super.backButtonPressed();
-    }
-
     private void playRuleSound(float delay) {
         Timer.schedule(new Timer.Task(){
             @Override
@@ -248,7 +241,6 @@ public class KidnappingGame extends AbstractTablexiaGame<GameState> {
 						}
 					})));
 		}
-        isBackButtonAllowed = true;
 	}
 
     @Override
diff --git a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
index 867faca89a52ff11659699eb445f582cede1a642..87027a4d8e0f99393b51b8d09880d23c3d636ce3 100644
--- a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
+++ b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
@@ -198,6 +198,8 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
     private boolean                                       loadAsync;
     private TablexiaAbstractFileManager.AssetsStorageType storageType;
 
+    private boolean backButtonAllowed = false;
+
     private Map<String, TablexiaMusic> notDisposedMusics;
 
     private static class TextManager extends TablexiaDataManager<I18NBundle> {
@@ -583,6 +585,8 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
 
     private final void performScreenLoaded() {
         Log.info(getClass(), "[ ------- Screen Loaded ------- ]");
+        backButtonAllowed = false;
+
         // reset screen state after loading screen with state
         TablexiaStorage.getInstance().resetScreenState(this);
 
@@ -602,6 +606,8 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
         screenVisible(screenState);
         performScreenResumed();
         playIntroMusic();
+
+        backButtonAllowed = true;
     }
 
     private final void performScreenResized(int width, int height) {
@@ -772,7 +778,7 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
 	public void backButtonPressed(TablexiaApplication.BackButtonPressed event) {
         if (event.shouldProcess(TablexiaApplication.BackButtonPressed.SCREEN_PRIORITY)) {
 			event.setProcessWithPriority(TablexiaApplication.BackButtonPressed.SCREEN_PRIORITY);
-            if (loadingComplete && getClass().equals(TablexiaApplication.getActualScreenClass())) {
+            if (loadingComplete && backButtonAllowed && getClass().equals(TablexiaApplication.getActualScreenClass())) {
                 backButtonPressed();
             }
 		}