diff --git a/core/src/cz/nic/tablexia/Tablexia.java b/core/src/cz/nic/tablexia/Tablexia.java
index b49376fd64354b95a204eb371cb00ac3477346ac..d9e0267cb0d7ce424ed127cdeb515017d312ddd6 100644
--- a/core/src/cz/nic/tablexia/Tablexia.java
+++ b/core/src/cz/nic/tablexia/Tablexia.java
@@ -110,7 +110,17 @@ public class Tablexia extends TablexiaApplication {
         addMenuController(menuController);
     }
 
-    @Override
+	@Override
+	public boolean onBackButtonDown() {
+		if(menuController != null && menuController.isMenuOpened()) {
+			menuController.closeAllMenus();
+			return false;
+		}
+
+		return true;
+	}
+
+	@Override
     public void resize(int width, int height) {
         super.resize(width, height);
         if(menuController != null) {
diff --git a/core/src/cz/nic/tablexia/TablexiaApplication.java b/core/src/cz/nic/tablexia/TablexiaApplication.java
index 59abd0d824d8e399d3c3aa72532f845ff5dfa8ba..3884c7a994fd255bfe88bac156ccca1d78c2f516 100644
--- a/core/src/cz/nic/tablexia/TablexiaApplication.java
+++ b/core/src/cz/nic/tablexia/TablexiaApplication.java
@@ -183,12 +183,20 @@ public abstract class TablexiaApplication implements ApplicationListener {
         @Override
         public boolean keyDown(int keycode) {
             if (keycode == Input.Keys.BACK && screen != null && screenPrepared) {
-                screen.backButtonPressed();
+				if(onBackButtonDown()) {
+					screen.backButtonPressed();
+				}
             }
             return false;
         }
     };
 
+	/**
+	 * Override this method to handle back button down event on your own
+	 * @return true if u want the event to be send to the current screen
+	 */
+	public boolean onBackButtonDown() { return true; }
+
 
 //////////////////////////// SCREEN DIMMER
 
@@ -472,6 +480,14 @@ public abstract class TablexiaApplication implements ApplicationListener {
         processNewScreen(screen);
     }
 
+	/**
+	 * Returns whether or not is screen prepared
+	 * @return screenPrepared
+	 */
+	public boolean isScreenPrepared() {
+		return screenPrepared;
+	}
+
     /**
      * Change current screen to new screen with screen transaction.
      * If new screen is same as current screen no change is performed.
diff --git a/core/src/cz/nic/tablexia/menu/MenuController.java b/core/src/cz/nic/tablexia/menu/MenuController.java
index c75f1f45cfed86a44f4f818e52e8a6bf0a48cca4..01ce50d3df3a28a29c33baee5f9b31daa83d625d 100644
--- a/core/src/cz/nic/tablexia/menu/MenuController.java
+++ b/core/src/cz/nic/tablexia/menu/MenuController.java
@@ -68,6 +68,20 @@ public class MenuController extends Group implements Disposable {
         initMenu(UserMenu.class);
     }
 
+	public boolean isMenuOpened() {
+		for(AbstractMenu menu : menus.values()) {
+			if(menu.isMenuOpen()) return true;
+		}
+
+		return false;
+	}
+
+	public void closeAllMenus() {
+		for(AbstractMenu menu : menus.values()) {
+			menu.closeMenu(true, false);
+		}
+	}
+
     public void initMenu (Class<? extends AbstractMenu> menuClass) {
         try {
             AbstractMenu menu = menuClass.getConstructor(Float.class, Float.class).newInstance(getWidth() * MAIN_MENU_WIDTH_RATIO, getHeight());