diff --git a/core/assets/common/game/runes/common/gfx/background.jpg b/core/assets/common/game/runes/common/gfx/background.jpg
deleted file mode 100644
index 1a2cd4e7ce1008d9db274f2df84d7b521fe160ac..0000000000000000000000000000000000000000
Binary files a/core/assets/common/game/runes/common/gfx/background.jpg and /dev/null differ
diff --git a/core/assets/common/game/runes/common/gfx/background.png b/core/assets/common/game/runes/common/gfx/background.png
new file mode 100644
index 0000000000000000000000000000000000000000..43ad54697e94ca5022bd74b951cc0bac327af1a1
Binary files /dev/null and b/core/assets/common/game/runes/common/gfx/background.png differ
diff --git a/core/assets/common/screen/statistics/gfx/arrow_down.png b/core/assets/common/screen/statistics/gfx/arrow_down.png
index 84d9898de3f0af7ecd1dc5ca5863f5c9422ac4c4..cee92d4075302f2e218f4aca37a5e095c41a4e71 100644
Binary files a/core/assets/common/screen/statistics/gfx/arrow_down.png and b/core/assets/common/screen/statistics/gfx/arrow_down.png differ
diff --git a/core/assets/common/screen/statistics/gfx/arrow_down_pressed.png b/core/assets/common/screen/statistics/gfx/arrow_down_pressed.png
index 3a7fe9eac49c3c2e17fa79735dd5d44c09d9541d..d92016be7c116dd6868e786f0ba7f32081658f89 100644
Binary files a/core/assets/common/screen/statistics/gfx/arrow_down_pressed.png and b/core/assets/common/screen/statistics/gfx/arrow_down_pressed.png differ
diff --git a/core/assets/common/screen/statistics/gfx/arrow_up.png b/core/assets/common/screen/statistics/gfx/arrow_up.png
index 5e6eb51a9aee3b2b61d12547ef0ce8415882359e..bac7a550172921e261ec34e24dd16665bd642207 100644
Binary files a/core/assets/common/screen/statistics/gfx/arrow_up.png and b/core/assets/common/screen/statistics/gfx/arrow_up.png differ
diff --git a/core/assets/common/screen/statistics/gfx/arrow_up_pressed.png b/core/assets/common/screen/statistics/gfx/arrow_up_pressed.png
index 64e4c307c1f90c25bdc81138bb587cea28dd5521..b37943fa5e96728fe3eaf054b6a7e7ab852446bd 100644
Binary files a/core/assets/common/screen/statistics/gfx/arrow_up_pressed.png and b/core/assets/common/screen/statistics/gfx/arrow_up_pressed.png differ
diff --git a/core/assets/common/screen/statistics/gfx/bookmark1.png b/core/assets/common/screen/statistics/gfx/bookmark1.png
index 17e3a75f4b1163bfd8f31349ecbe18a4bae3c096..faafe62a51bcb4166af383c3c7e5545d82808087 100644
Binary files a/core/assets/common/screen/statistics/gfx/bookmark1.png and b/core/assets/common/screen/statistics/gfx/bookmark1.png differ
diff --git a/core/assets/common/screen/statistics/gfx/bookmark1_pressed.png b/core/assets/common/screen/statistics/gfx/bookmark1_pressed.png
index de155565c07d3dbc6f9e789ec55ceb604f4a4906..21571ad1abc765d427557c6acb09f438e0b02362 100644
Binary files a/core/assets/common/screen/statistics/gfx/bookmark1_pressed.png and b/core/assets/common/screen/statistics/gfx/bookmark1_pressed.png differ
diff --git a/core/assets/common/screen/statistics/gfx/bookmark2.png b/core/assets/common/screen/statistics/gfx/bookmark2.png
index 748219cf2434befe768cc9da2ee27a4caf39dc6c..55b6250ce89fcf22fd3b2110531596bfef71648a 100644
Binary files a/core/assets/common/screen/statistics/gfx/bookmark2.png and b/core/assets/common/screen/statistics/gfx/bookmark2.png differ
diff --git a/core/assets/common/screen/statistics/gfx/bookmark2_pressed.png b/core/assets/common/screen/statistics/gfx/bookmark2_pressed.png
index 1ebed0b50811df770d7c2fed7392fccc3ebc6d46..0ff8510d3c6f8ea1c1216af43d01e82259379759 100644
Binary files a/core/assets/common/screen/statistics/gfx/bookmark2_pressed.png and b/core/assets/common/screen/statistics/gfx/bookmark2_pressed.png differ
diff --git a/core/assets/common/screen/statistics/gfx/bookmark3.png b/core/assets/common/screen/statistics/gfx/bookmark3.png
index 248956ee248c9d29a8a005111944e9a0c2bf2912..bf9a09d45b0b160bf24d61a5bdab26edf6e98c60 100644
Binary files a/core/assets/common/screen/statistics/gfx/bookmark3.png and b/core/assets/common/screen/statistics/gfx/bookmark3.png differ
diff --git a/core/assets/common/screen/statistics/gfx/bookmark3_pressed.png b/core/assets/common/screen/statistics/gfx/bookmark3_pressed.png
index 8932cd2126f41b3920cfe1678da003f389a34221..6d4544f32fead2e981df30bb48bf7b5566efe60a 100644
Binary files a/core/assets/common/screen/statistics/gfx/bookmark3_pressed.png and b/core/assets/common/screen/statistics/gfx/bookmark3_pressed.png differ
diff --git a/core/assets/cs/screen/nightwatchpage/gfx/startbutton.png b/core/assets/cs/screen/nightwatchpage/gfx/startbutton.png
index a08e4fb798fd89f9a0b68226b65bfadc84ad936c..e1c22c819856d5c7318e859470bb0dbee1b421f6 100644
Binary files a/core/assets/cs/screen/nightwatchpage/gfx/startbutton.png and b/core/assets/cs/screen/nightwatchpage/gfx/startbutton.png differ
diff --git a/core/assets/cs/screen/nightwatchpage/gfx/startbutton_pressed.png b/core/assets/cs/screen/nightwatchpage/gfx/startbutton_pressed.png
index b6ded16e2a6d75564ed00a6c2a59ddffa4c729a6..e23fadb7cfc3c7fd4d322167823cbcf95c4ddca7 100644
Binary files a/core/assets/cs/screen/nightwatchpage/gfx/startbutton_pressed.png and b/core/assets/cs/screen/nightwatchpage/gfx/startbutton_pressed.png differ
diff --git a/core/assets/de/screen/nightwatchpage/gfx/startbutton.png b/core/assets/de/screen/nightwatchpage/gfx/startbutton.png
index 7667886e786f5a5086479a6a79b7eba3e1066fe2..bd87164f66c9b22d645e877f92981ba67bbc1a36 100644
Binary files a/core/assets/de/screen/nightwatchpage/gfx/startbutton.png and b/core/assets/de/screen/nightwatchpage/gfx/startbutton.png differ
diff --git a/core/assets/de/screen/nightwatchpage/gfx/startbutton_pressed.png b/core/assets/de/screen/nightwatchpage/gfx/startbutton_pressed.png
index 44d037b6c0d0b438c3367883b55ee2cfbc45b9d3..dee5160c8327bb11b00af467ec15a7da32bdde25 100644
Binary files a/core/assets/de/screen/nightwatchpage/gfx/startbutton_pressed.png and b/core/assets/de/screen/nightwatchpage/gfx/startbutton_pressed.png differ
diff --git a/core/assets/sk/screen/nightwatchpage/gfx/startbutton.png b/core/assets/sk/screen/nightwatchpage/gfx/startbutton.png
index e636fb42fb127f6ab8cd6bbe027672b2ca613b1b..237d9e9e76031877c407184f97834bad5111e324 100644
Binary files a/core/assets/sk/screen/nightwatchpage/gfx/startbutton.png and b/core/assets/sk/screen/nightwatchpage/gfx/startbutton.png differ
diff --git a/core/assets/sk/screen/nightwatchpage/gfx/startbutton_pressed.png b/core/assets/sk/screen/nightwatchpage/gfx/startbutton_pressed.png
index a51901669e877752acbe7a920e5ab6221d0d8358..5b57b4190142f2dbfadae932e899292f63cbb2eb 100644
Binary files a/core/assets/sk/screen/nightwatchpage/gfx/startbutton_pressed.png and b/core/assets/sk/screen/nightwatchpage/gfx/startbutton_pressed.png differ
diff --git a/core/src/cz/nic/tablexia/game/GameDefinition.java b/core/src/cz/nic/tablexia/game/GameDefinition.java
index a58c0962657dafa5c67e690318c8b6fad1a88b93..855035ec0925594171a970b73121fd4855ac56c3 100644
--- a/core/src/cz/nic/tablexia/game/GameDefinition.java
+++ b/core/src/cz/nic/tablexia/game/GameDefinition.java
@@ -47,10 +47,20 @@ public enum GameDefinition implements ApplicationEvent, IMenuItem {
     RUNES           (7, ApplicationTextManager.ApplicationTextsAssets.GAME_RUNES_TITLE, ApplicationTextManager.ApplicationTextsAssets.GAME_RUNES_DESCRIPTION, RunesPageScreen.class, RunesGame.class, false, new RunesGameResultResolver(),ApplicationTextManager.ApplicationTextsAssets.GAME_SCORE, ApplicationTextManager.ApplicationTextsAssets.GAME_AVERAGE_SCORE),
     CRIME_SCENE     (8, ApplicationTextManager.ApplicationTextsAssets.GAME_CRIME_SCENE_TITLE, ApplicationTextManager.ApplicationTextsAssets.GAME_CRIME_SCENE_DESCRIPTION, CrimeScenePageScreen.class, CrimeSceneGame.class, false, new CrimeSceneGame.GameResultResolver(), ApplicationTextManager.ApplicationTextsAssets.GAME_SCORE, ApplicationTextManager.ApplicationTextsAssets.GAME_AVERAGE_SCORE);
 
-    public interface GameResultResolver {
-        AbstractTablexiaGame.GameResult getGameCupsResult(Game game);
-        float getGameScoreResult(Game game);
-        List<GameScore> getGameScoreList(GameDifficulty difficulty, AbstractTablexiaGame.GameResult result);
+    public static abstract class GameResultResolver {
+        public abstract AbstractTablexiaGame.GameResult getGameCupsResult(Game game);
+        public abstract float getGameScoreResult(Game game);
+        public abstract List<GameScore> getGameScoreList(GameDifficulty difficulty, AbstractTablexiaGame.GameResult result);
+
+        //Override this method if you want to use different values to sort graphs in statistics screen (eg. CrimeScene)
+        public float getStatisticsScore(Game game) {
+            return getGameScoreResult(game);
+        }
+
+        //Override this method if you want to show different formatted score in graph detail dialogs in statistics screen (eg. Pursuit or CrimeScene)
+        public String getFormattedScoreForStatistics(Game game) {
+            return Integer.toString(Math.round(getGameScoreResult(game)));
+        }
     }
 
     private int                                      gameNumber;
diff --git a/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java b/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java
index 23d4ca03c4ca28165d9e1e0c345195eebaaf3dcf..645ebf2e305da0c47b44082e416ef9229a68af53 100644
--- a/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java
+++ b/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java
@@ -108,7 +108,8 @@ public class CrimeSceneGame extends AbstractTablexiaGame<CrimeSceneGameState> {
     private int                     actualRound = 1;
     private int                     wrongRounds = 0;
 
-    public static class GameResultResolver implements GameDefinition.GameResultResolver {
+    public static class GameResultResolver extends GameDefinition.GameResultResolver {
+        private static final String FORMATTED_TEXT_FOR_STATISTICS_FORMAT = "%d / %d";
 
         @Override
         public AbstractTablexiaGame.GameResult getGameCupsResult(Game game) {
@@ -121,6 +122,17 @@ public class CrimeSceneGame extends AbstractTablexiaGame<CrimeSceneGameState> {
             return Float.parseFloat(game.getGameScore(SCORE_KEY_COUNT, String.valueOf(correctSounds)));
         }
 
+        @Override
+        public float getStatisticsScore(Game game) {
+            //Score to sort graph values in statistics is calculated as "actualScore / maxScore". So 2 cups on hard difficulty wont show up higher than 3 cups on medium difficulty.
+            return getGameScoreResult(game) / (float)(getMaxScoreForDifficulty(GameDifficulty.getGameDifficultyForDifficultyNumber(game.getGameDifficulty())));
+        }
+
+        @Override
+        public String getFormattedScoreForStatistics(Game game) {
+            return String.format(FORMATTED_TEXT_FOR_STATISTICS_FORMAT, Math.round(getGameScoreResult(game)), getMaxScoreForDifficulty(GameDifficulty.getGameDifficultyForDifficultyNumber(game.getGameDifficulty())));
+        }
+
         @Override
         public List<GameScore> getGameScoreList(GameDifficulty difficulty, GameResult result) {
             ArrayList gameScoreList = new ArrayList<GameScore>(1);
@@ -549,14 +561,18 @@ public class CrimeSceneGame extends AbstractTablexiaGame<CrimeSceneGameState> {
                 actionsStripWidget.getSelectedActions().size() + objectsLayer.getChildren().size == getData().getSolution().size();
     }
 
-    private int getMaxScore() {
+    private static int getMaxScoreForDifficulty(GameDifficulty gameDifficulty) {
         int maxScore = 0;
         for(int i = 0; i < MAX_ROUNDS; i++) {
-            maxScore += CrimeSceneDifficulty.getCrimeSceneDifficultyForGameDifficulty(getGameDifficulty()).getNumberOfObjects() + i;
+            maxScore += CrimeSceneDifficulty.getCrimeSceneDifficultyForGameDifficulty(gameDifficulty).getNumberOfObjects() + i;
         }
         return maxScore;
     }
 
+    private int getMaxScore() {
+        return getMaxScoreForDifficulty(getGameDifficulty());
+    }
+
     private void playAllSounds() {
         preparePlaySoundScreen(true);
         playSoundScreen.playSounds();
diff --git a/core/src/cz/nic/tablexia/game/games/crime_scene/model/ResultStars.java b/core/src/cz/nic/tablexia/game/games/crime_scene/model/ResultStars.java
index be59c52d666e055424635b5f7c1bdd872415dd5d..906faed755f872724ace4d78a2cdd96c9786ac5c 100644
--- a/core/src/cz/nic/tablexia/game/games/crime_scene/model/ResultStars.java
+++ b/core/src/cz/nic/tablexia/game/games/crime_scene/model/ResultStars.java
@@ -48,7 +48,7 @@ public enum ResultStars {
         return 0;
     }
 
-    private int getScoreForDifficulty(GameDifficulty gameDifficulty) {
+    public int getScoreForDifficulty(GameDifficulty gameDifficulty) {
         switch(gameDifficulty) {
             case EASY:
                 return easyScore;
diff --git a/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java b/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java
index c6b8fa51d8ac134cfd749b0571c8dbe492d88984..d6c48092ac80ab48e03d9c2bbda08f8b21835ee9 100644
--- a/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java
+++ b/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java
@@ -66,7 +66,7 @@ import static com.badlogic.gdx.scenes.scene2d.actions.Actions.sequence;
  */
 public class InTheDarknessGame extends AbstractTablexiaGame<List<MapWidget>> implements MapWidget.TileMapClickListener {
 
-    public static class GameResultResolver implements GameDefinition.GameResultResolver {
+    public static class GameResultResolver extends GameDefinition.GameResultResolver {
         public static final int ERROR_COUNT_THREE_STARS = 2;
         public static final int ERROR_COUNT_TWO_STARS   = 4;
         public static final int ERROR_COUNT_ONE_STAR    = 8;
diff --git a/core/src/cz/nic/tablexia/game/games/kidnapping/util/KidnappingResultResolver.java b/core/src/cz/nic/tablexia/game/games/kidnapping/util/KidnappingResultResolver.java
index 78f554df3b51ec32349920cdcb47cc9a0115ca59..b18ba6c30314ae2233bfcb3936c618f3d8240f16 100644
--- a/core/src/cz/nic/tablexia/game/games/kidnapping/util/KidnappingResultResolver.java
+++ b/core/src/cz/nic/tablexia/game/games/kidnapping/util/KidnappingResultResolver.java
@@ -6,17 +6,15 @@ import java.util.List;
 import cz.nic.tablexia.game.AbstractTablexiaGame;
 import cz.nic.tablexia.game.GameDefinition;
 import cz.nic.tablexia.game.difficulty.GameDifficulty;
-import cz.nic.tablexia.game.games.kidnapping.KidnappingGame;
 import cz.nic.tablexia.game.games.kidnapping.Properties;
 import cz.nic.tablexia.game.games.kidnapping.model.GameState;
-import cz.nic.tablexia.game.games.robbery.RobberyGame;
 import cz.nic.tablexia.shared.model.Game;
 import cz.nic.tablexia.shared.model.GameScore;
 
 /**
  * Created by lhoracek on 10/6/15.
  */
-public class KidnappingResultResolver implements GameDefinition.GameResultResolver {
+public class KidnappingResultResolver extends GameDefinition.GameResultResolver {
     @Override
     public AbstractTablexiaGame.GameResult getGameCupsResult(Game game) {
         int[] levels = Properties.GAMERULE_CUPS[game.getGameDifficulty() - 1];
diff --git a/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java b/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java
index 5e52bd016915392424b3172d792e4b544330daee..c02485db71db8405f6515b7d30d7a4b14c37873d 100644
--- a/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java
+++ b/core/src/cz/nic/tablexia/game/games/night_watch/NightWatchGame.java
@@ -51,7 +51,7 @@ import cz.nic.tablexia.util.ui.dialog.components.TwoColumnContentDialogComponent
  * Created by Václav Tarantík on 6.3.15.
  */
 public class NightWatchGame extends AbstractTablexiaGame<int[][]> {
-    public static class GameResultResolver implements GameDefinition.GameResultResolver {
+    public static class GameResultResolver extends GameDefinition.GameResultResolver {
         @Override
         public GameResult getGameCupsResult(Game game) {
             int correctWindows = LEVELS_COUNT - Integer.valueOf(game.getGameScoreValue(SCORE_WRONG_WINDOWS));
diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java
index c24eddeec2f97b818fda9602a687a77ceddf51d1..904632d63915a953009d8f0bd66eacee7da5ccb0 100644
--- a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java
+++ b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java
@@ -66,7 +66,7 @@ import cz.nic.tablexia.util.ui.dialog.components.TwoColumnContentDialogComponent
  */
 public class PursuitGame extends AbstractTablexiaGame<int[][]> {
 
-    public static class GameResultResolver implements GameDefinition.GameResultResolver {
+    public static class GameResultResolver extends GameDefinition.GameResultResolver {
         @Override
         public GameResult getGameCupsResult(Game game) {
             return GameRulesHelper.getNumberOfStarsForTime(GameDifficulty.getGameDifficultyForDifficultyNumber(game.getGameDifficulty()), GameDAO.getGameDuration(game, false));
@@ -83,6 +83,22 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
             gameScores.add(new GameScore(SCORE_KEY_MOVE_COUNT, Integer.toString(30)));
             return gameScores;
         }
+
+        @Override
+        public String getFormattedScoreForStatistics(Game game) {
+            float time = getGameScoreResult(game);
+
+            int minutes = (int) ((time / 1000) / 60);
+            int seconds = (int) ((time / 1000) % 60);
+
+            if(minutes == 0) {
+                return seconds + "s";
+            } else if (seconds == 0){
+                return minutes + "m ";
+            } else {
+                return minutes + "m " + seconds + "s";
+            }
+        }
     }
     private enum ResultMapping {
 
diff --git a/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java b/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java
index 471f4d3cda892766c5336b5fba4482f931ccb6c4..c0d2377cabd6eb6bb9d4e21053d71ee22dfe1761 100644
--- a/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java
+++ b/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java
@@ -33,7 +33,7 @@ import cz.nic.tablexia.util.ui.dialog.components.TwoColumnContentDialogComponent
 
 public class RobberyGame extends AbstractTablexiaGame<GameRule> {
 
-	public static class GameResultResolver implements GameDefinition.GameResultResolver {
+	public static class GameResultResolver extends GameDefinition.GameResultResolver {
 		public static final int FINAL_SCORE_THREE_STARS = 47;
 		public static final int FINAL_SCORE_TWO_STARS 	= 29;
 		public static final int FINAL_SCORE_ONE_STAR 	= 15;
diff --git a/core/src/cz/nic/tablexia/game/games/runes/RunesGame.java b/core/src/cz/nic/tablexia/game/games/runes/RunesGame.java
index 9057abde025cc1aeb2e54b18e9444826b67cfbb8..0619ff2ff80688881480249baa6357d3176b9d41 100644
--- a/core/src/cz/nic/tablexia/game/games/runes/RunesGame.java
+++ b/core/src/cz/nic/tablexia/game/games/runes/RunesGame.java
@@ -40,7 +40,6 @@ import cz.nic.tablexia.shared.model.Game;
 import cz.nic.tablexia.util.Log;
 import cz.nic.tablexia.util.Utility;
 import cz.nic.tablexia.util.ui.TablexiaLabel;
-import cz.nic.tablexia.util.ui.actionwidget.Action;
 import cz.nic.tablexia.util.ui.dialog.components.FixedSpaceContentDialogComponent;
 import cz.nic.tablexia.util.ui.dialog.components.TablexiaDialogComponentAdapter;
 import cz.nic.tablexia.util.ui.dialog.components.TextContentDialogComponent;
@@ -52,7 +51,7 @@ public class RunesGame extends AbstractTablexiaGame<RunesGameState> {
 
     private static final int ONE_SECOND_DELAY = 1;
 
-    private static final float SIDEBAR_RELATIVE_WIDTH       = 0.17f;
+    public static final float SIDEBAR_RELATIVE_WIDTH       = 0.17f;
     private static final int   SIDEBAR_ITEMS_PAD            = 10;
     private static final float TARGET_PLATE_RELATIVE_HEIGHT = 0.45f;
     private static final float HEALTHBAR_RELATIVE_HEIGHT = 0.2f;
diff --git a/core/src/cz/nic/tablexia/game/games/runes/actors/RunesHolder.java b/core/src/cz/nic/tablexia/game/games/runes/actors/RunesHolder.java
index 0333666f5510eda1b69b7e9a581262a6eed8e789..e7c643bd60eed1917f97b8231cb628c2109b8439 100644
--- a/core/src/cz/nic/tablexia/game/games/runes/actors/RunesHolder.java
+++ b/core/src/cz/nic/tablexia/game/games/runes/actors/RunesHolder.java
@@ -14,7 +14,7 @@ import cz.nic.tablexia.TablexiaSettings;
 import cz.nic.tablexia.game.common.TablexiaRandom;
 import cz.nic.tablexia.game.common.media.GfxLibrary;
 import cz.nic.tablexia.game.difficulty.GameDifficulty;
-import cz.nic.tablexia.game.games.runes.assets.RuneDefinition;
+import cz.nic.tablexia.game.games.runes.RunesGame;
 import cz.nic.tablexia.game.games.runes.helper.PositionDefinition;
 import cz.nic.tablexia.game.games.runes.helper.RuneDescription;
 import cz.nic.tablexia.game.games.runes.model.RunesDifficultyDefinition;
@@ -80,10 +80,6 @@ public class RunesHolder extends Group {
         return false;
     }
 
-    public int getRunesCount() {
-        return runesCount;
-    }
-
     public int getWrongRunesCount() {
         return runesCount - holderTargets.size();
     }
@@ -135,10 +131,6 @@ public class RunesHolder extends Group {
         setWidth(getWidth() + actor.getWidth() + runesGroup.getSpace());
     }
 
-    public void setHolderTargets(List<RuneDescription> runeDescriptions) {
-        holderTargets = runeDescriptions;
-    }
-
     /**
      * Set scale value depending on position (folded holder can be smaller/bigger depending on PositionDefinition values)
      *
@@ -182,11 +174,12 @@ public class RunesHolder extends Group {
             setTouchable(Touchable.childrenOnly);
             toFront();
             prevX = getX();
+            float stageWidth = getStage().getWidth() * (1-RunesGame.SIDEBAR_RELATIVE_WIDTH);
             float prevMid = prevX + getWidth() * 0.5f * getScaleX();
             setScale(UNFOLDED_SCALE);
             float newX = prevMid - getWidth() * getScaleX() * 0.5f;
-            if (newX + getWidth() * getScaleX() >= getStage().getWidth() - PAD) {
-                setX(getStage().getWidth() - PAD - getWidth() * getScaleX());
+            if (newX + getWidth() * getScaleX() >= stageWidth - PAD) {
+                setX(stageWidth - PAD - getWidth() * getScaleX());
             } else if (newX <= 0) {
                 setX(PAD);
             } else {
@@ -204,7 +197,7 @@ public class RunesHolder extends Group {
         prevX = 0;
         setAlternativeScale(positionDefinition.getScale());
         setPosition(positionDefinition.getX() * width, positionDefinition.getY() * height);
-        maxEntities = positionDefinition.getMaxRunes();
+        maxEntities = PositionDefinition.getMaxChildrenCount(gameDifficulty,positionDefinition);
     }
 
     public boolean isFolded() {
diff --git a/core/src/cz/nic/tablexia/game/games/runes/helper/PositionDefinition.java b/core/src/cz/nic/tablexia/game/games/runes/helper/PositionDefinition.java
index c23806bde6b8efc631a0930b49fac02b37f935f6..386df74e77e2bdde890f55a79644454bf8146259 100644
--- a/core/src/cz/nic/tablexia/game/games/runes/helper/PositionDefinition.java
+++ b/core/src/cz/nic/tablexia/game/games/runes/helper/PositionDefinition.java
@@ -14,43 +14,35 @@ import cz.nic.tablexia.game.games.runes.model.RunesGameProperties;
  */
 public enum PositionDefinition {
 
-    //x,y, max height, max runes
-    
-    POS1(0.22f,0.14f),
-    POS2(0.22f,0.51f),
-    POS3(0.22f,0.87f),
-    POS4(0.58f,0.71f,3),
-    POS5(0.58f,0.37f,3),
-    POS6(0.58f,0.01f,3),
-    POS7(0.04f,0.57f,2),
-    POS8(0.02f,0.19f,2);
+    //x,y, max runes, max runes clusters
+
+    POS1(0.24f, 0.14f, 5, 4),
+    POS2(0.24f, 0.51f, 5, 4),
+    POS3(0.24f, 0.87f, 5, 4),
+    POS4(0.62f, 0.71f, 3, 2),
+    POS5(0.62f, 0.37f, 3, 2),
+    POS6(0.62f, 0.01f, 3, 2),
+    POS7(0.01f, 0.57f, 3, 2),
+    POS8(0.01f, 0.19f, 3, 2);
     
     private static final float FOLDED_SCALE = 0.6f;
-    private static final int MAX_RUNES = 4;
 
     public static final PositionDefinition[] MAP_EASY   = PositionDefinition.values();
     public static final PositionDefinition[] MAP_MEDIUM = PositionDefinition.values(); //was meant to be different for every difficulty
     public static final PositionDefinition[] MAP_HARD   = PositionDefinition.values();
 
     private float x, y, scale;
-    private int maxRunes;
-
-    PositionDefinition(float x, float y) {
-        this(x,y,FOLDED_SCALE,MAX_RUNES);
-    }
-
-    PositionDefinition(float x, float y, float scale) {
-        this(x,y,scale,MAX_RUNES);
-    }
+    private int maxRunes, maxRunesClusters;
 
-    PositionDefinition(float x, float y, int maxRunes) {
-        this(x,y,FOLDED_SCALE,maxRunes);
+    PositionDefinition(float x, float y, int maxRunes, int maxRunesClusters) {
+        this(x, y, FOLDED_SCALE, maxRunes, maxRunesClusters);
     }
 
-    PositionDefinition(float x, float y, float scale, int maxRunes) {
+    PositionDefinition(float x, float y, float scale, int maxRunes, int maxRunesClusters) {
         this.x = x;
         this.y = y;
         this.maxRunes = maxRunes;
+        this.maxRunesClusters = maxRunesClusters;
         this.scale = scale;
     }
 
@@ -71,6 +63,10 @@ public enum PositionDefinition {
         return y;
     }
 
+    public int getMaxRunesClusters() {
+        return maxRunesClusters;
+    }
+
     private static List<PositionDefinition> getMapPositions(GameDifficulty runesDifficulty) {
         return Arrays.asList(RunesDifficultyDefinition.getRunesDifficultyForGameDifficulty(runesDifficulty).getPositionDefinitions());
     }
@@ -88,4 +84,9 @@ public enum PositionDefinition {
         return RunesDifficultyDefinition.getRunesDifficultyForGameDifficulty(gameDifficulty).getGroupsCount()[round];
     }
     
+    public static int getMaxChildrenCount(GameDifficulty gameDifficulty, PositionDefinition positionDefinition){
+        if (gameDifficulty.equals(GameDifficulty.HARD)) return positionDefinition.getMaxRunesClusters();
+        else return positionDefinition.getMaxRunes();
+    }
+    
 }
diff --git a/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameProperties.java b/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameProperties.java
index 941d024e1e49803766df33a2ca9d1575ebe71bd7..91fcebf851b419eda3981e08600a27ff346029d8 100644
--- a/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameProperties.java
+++ b/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameProperties.java
@@ -14,30 +14,30 @@ public class RunesGameProperties {
     public static final int[] CUPS_EASY           = {15, 26, 38};
     public static final int[] CUPS_MEDIUM         = {15, 26, 38};
     public static final int[] CUPS_HARD           = {15, 26, 38};
-    
-    public static final int[] GROUPS_EASY = {2,2,3,3,3,3,3,3,3,3,3,3};
-    public static final int[] GROUPS_MEDIUM = {2,2,3,3,3,3,4,4,4,5,5,5};
-    public static final int[] GROUPS_HARD = {2,2,3,3,3,3,4,4,5,5,6,6};
-    
-    public static final int[] RUNES_COUNT = {6,7,8,9,10,11,11,12,13,13,14,15};
-    public static final int[] RUNES_TO_FIND = {2,2,3,3,3,3,4,4,4,5,5,6}; //44
+
+    public static final int[] GROUPS_EASY   = {3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6};
+    public static final int[] GROUPS_MEDIUM = {3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6};
+    public static final int[] GROUPS_HARD   = {3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7, 7};
+
+    public static final int[] RUNES_COUNT   = {6, 7, 8, 9, 10, 11, 11, 12, 13, 13, 14, 15};
+    public static final int[] RUNES_TO_FIND = {2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6}; //44
 
     public static final String MFX_PATH = "common/sfx/";
 
-    public static final String[] RESULT_SOUNDS = new String[]{ MFX_PATH + "result_0.mp3",
+    public static final String[] RESULT_SOUNDS = new String[]{MFX_PATH + "result_0.mp3",
             MFX_PATH + "result_1.mp3",
             MFX_PATH + "result_2.mp3",
             MFX_PATH + "result_3.mp3"};
 
-    public static final String[] RESULT_TEXT   = new String[]{ "game_runes_result_0",
+    public static final String[] RESULT_TEXT = new String[]{"game_runes_result_0",
             "game_runes_result_1",
             "game_runes_result_2",
             "game_runes_result_3"};
 
     public static final String RESULT_TEXT_SUMMARY = "game_runes_stats";
-    
-    public static int getGroupCount(GameDifficulty gameDifficulty, int round){
+
+    public static int getGroupCount(GameDifficulty gameDifficulty, int round) {
         return RunesDifficultyDefinition.getRunesDifficultyForGameDifficulty(gameDifficulty).getGroupsCount()[round];
     }
-    
+
 }
diff --git a/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameResultResolver.java b/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameResultResolver.java
index 5a7453c850a31a501603be866584a6feceaee027..4d6dc3a8492adccbdf4ab40fa913cae48b5e09f9 100644
--- a/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameResultResolver.java
+++ b/core/src/cz/nic/tablexia/game/games/runes/model/RunesGameResultResolver.java
@@ -12,7 +12,7 @@ import cz.nic.tablexia.shared.model.GameScore;
 /**
  * Created by Vitaliy Vashchenko on 25.4.16.
  */
-public class RunesGameResultResolver implements GameDefinition.GameResultResolver  {
+public class RunesGameResultResolver extends GameDefinition.GameResultResolver  {
     @Override
     public AbstractTablexiaGame.GameResult getGameCupsResult(Game game) {
         int[][] CUPS = {RunesGameProperties.CUPS_EASY, RunesGameProperties.CUPS_MEDIUM, RunesGameProperties.CUPS_HARD};
diff --git a/core/src/cz/nic/tablexia/game/games/shooting_range/tools/ShootingRangeResultResolver.java b/core/src/cz/nic/tablexia/game/games/shooting_range/tools/ShootingRangeResultResolver.java
index 83f8769a9f122b98da715050c7138022cd6867cd..b192a48c1c70a7ad8446c3fd8983806e41f09077 100644
--- a/core/src/cz/nic/tablexia/game/games/shooting_range/tools/ShootingRangeResultResolver.java
+++ b/core/src/cz/nic/tablexia/game/games/shooting_range/tools/ShootingRangeResultResolver.java
@@ -14,7 +14,7 @@ import cz.nic.tablexia.shared.model.GameScore;
 /**
  * Created by lhoracek on 10/6/15.
  */
-public class ShootingRangeResultResolver implements GameDefinition.GameResultResolver {
+public class ShootingRangeResultResolver extends GameDefinition.GameResultResolver {
     @Override
     public AbstractTablexiaGame.GameResult getGameCupsResult(Game game) {
         int[][] CUPS = {Properties.CUPS_EASY, Properties.CUPS_MEDIUM, Properties.CUPS_HARD};
diff --git a/core/src/cz/nic/tablexia/screen/statistics/StatisticsGameScoreResolver.java b/core/src/cz/nic/tablexia/screen/statistics/StatisticsGameScoreResolver.java
index c1f3af4bdf59ae78979a2db45772c0cd20e9d72f..27005f9dbe012eb2a06f8c27e3102eb093760b22 100644
--- a/core/src/cz/nic/tablexia/screen/statistics/StatisticsGameScoreResolver.java
+++ b/core/src/cz/nic/tablexia/screen/statistics/StatisticsGameScoreResolver.java
@@ -36,7 +36,7 @@ public class StatisticsGameScoreResolver {
                     index = 1;
                 }
                 lastTime = game.getGameStartTime();
-                score += selectedGameDefinition.getGameResultResolver().getGameScoreResult(game);
+                score += selectedGameDefinition.getGameResultResolver().getStatisticsScore(game);
                 point = score / index;
                 index++;
             }
@@ -81,7 +81,7 @@ public class StatisticsGameScoreResolver {
     public float getMaxScore(List<Game> games) {
         float maxScore = -Float.MAX_VALUE;
         for (Game game : games) {
-            float score = selectedGameDefinition.getGameResultResolver().getGameScoreResult(game);
+            float score = selectedGameDefinition.getGameResultResolver().getStatisticsScore(game);
             if (score > maxScore) maxScore = score;
         }
         return maxScore;
@@ -90,7 +90,7 @@ public class StatisticsGameScoreResolver {
     public float getMinScore(List<Game> games) {
         float minScore = Float.MAX_VALUE;
         for (Game game : games) {
-            float score = selectedGameDefinition.getGameResultResolver().getGameScoreResult(game);
+            float score = selectedGameDefinition.getGameResultResolver().getStatisticsScore(game);
             if (score < minScore) minScore = score;
         }
         return minScore;
diff --git a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java
index 24643a2b4b87ee6ac6b6a4a2056c2c178dc6f38b..cdd88074c640c427ab4b503dd1f3324cfec26449 100644
--- a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java
+++ b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java
@@ -15,6 +15,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Image;
 import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
 import com.badlogic.gdx.scenes.scene2d.ui.Stack;
 import com.badlogic.gdx.scenes.scene2d.ui.Table;
+import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup;
 import com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup;
 import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable;
@@ -59,6 +60,7 @@ import cz.nic.tablexia.util.ui.dialog.components.TextContentDialogComponent;
 import cz.nic.tablexia.util.ui.dialog.components.TouchCloseDialogComponent;
 
 public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
+
     private static final ApplicationFontManager.FontType_NEW DEFAULT_FONT_TYPE    = ApplicationFontManager.FontType_NEW.BOLD_16;
     private static final ApplicationFontManager.FontType_NEW DIFFICULTY_FONT_TYPE = ApplicationFontManager.FontType_NEW.BOLD_20;
     private static final ApplicationFontManager.FontType_NEW BOOKMARK_FONT_TYPE   = ApplicationFontManager.FontType_NEW.BOLD_26;
@@ -75,7 +77,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
     private static final float SWITCH_GRAPH_PADDING_X           = 52f;
     private static final float SWITCH_GRAPH_PADDING_Y           = 5f;
     private static final float DIFFICULTIES_SCALE               = 0.8f;
-    private static final float DIFFICULTIES_POSITION_X_SCALE    = 0.63f;
+    private static final float DIFFICULTIES_POSITION_X_SCALE    = 0.6f;
     private static final float DIFFICULTIES_POSITION_Y_SCALE    = 0.9f;
     private static final float NOTEBOOK_POSITION_SCALE          = 0.3f;
     private static final float NOTEBOOK_WIDTH_SCALE             = 0.7f;
@@ -88,24 +90,31 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
     private static final float UP_BUTTON_POSITION_Y_SCALE       = 0.75f;
     private static final float UP_DOWN_BUTTON_POSITION_X_SCALE  = 0.2f;
     private static final float DOWN_BUTTON_POSITION_Y_SCALE     = 0.05f;
-    private static final float SELECTED_GAME_WIDTH              = 0.66f;
-
-    public static final String                                  GFX_PATH                = "gfx/";
-    public static final String                                  STATISTICS_SPEECH       = MFX_PATH + "statistics.mp3";
-    private static final String[]                               BOOKMARKS_TEXTURES      = {"1", "2", "3", "2", "1", "3", "1", "2"};
-    private static final String                                 SELECTED_SWITCH_KEY     = "selected_switch", SELECTED_GAME_KEY = "selected_game", DIFFICULTY_EASY_KEY = "diff_easy", DIFFICULTY_MEDIUM_KEY = "diff_medium", DIFFICULTY_HARD_KEY = "diff_hard";
-    private static final String                                 ARROW_UP_TEXT           = "arrow_up";
-    private static final String                                 ARROW_DOWN_TEXT         = "arrow_down";
-    private static final String                                 PRESSED_TEXT            = "_pressed";
-    private static final String                                 BOOKMARK_TEXT           = "bookmark";
-
-    private static final int                                    BOOKMARK_OPEN_TEXT_LEFT_OFFSET  = 50;
+
+    public static final String                                  GFX_PATH                        = "gfx/";
+    private static final String                                 STATISTICS_SPEECH               = MFX_PATH + "statistics.mp3";
+    private static final String[]                               BOOKMARKS_TEXTURES              = {"1", "2", "3", "2", "1", "3", "1", "2"};
+    private static final String                                 SCREEN_STATE_SWITCH_KEY         = "selected_switch";
+    private static final String                                 SCREEN_STATE_GAME_KEY           = "selected_game";
+    private static final String                                 SCREEN_STATE_DIFFICULTY_SET     = "1";
+    private static final String                                 SCREEN_STATE_DIFFICULTY_UNSET   = "0";
+    private static final String                                 ARROW_UP_TEXT                   = "arrow_up";
+    private static final String                                 ARROW_DOWN_TEXT                 = "arrow_down";
+    private static final String                                 PRESSED_TEXT                    = "_pressed";
+    private static final String                                 BOOKMARK_TEXT                   = "bookmark";
+
+    private static final int                                    BOOKMARK_OPEN_TEXT_LEFT_OFFSET  = 45;
     private static final int                                    BOOKMARK_OPEN_ALIGN             = Align.left;
-    private static final int                                    BOOKMARK_CLOSE_ALIGN            = Align.right;
+    private static final int                                    BOOKMARK_CLOSE_ALIGN            = Align.left;
+    private static final int                                    BOOKMARK_OPEN_WIDTH             = 380;
+    private static final int                                    BOOKMARK_CLOSE_WIDTH            = 250;
 
-    private static final GameDefinition                         DEFAULT_GAME            = GameDefinition.ROBBERY;
-    private static final int                                    DIFFICULTY_BUTTON_SIZE  = 70;
-    private static final ApplicationFontManager.FontType_NEW    DIALOG_BOLD_FONT        = ApplicationFontManager.FontType_NEW.BOLD_16;
+    private static final GameDefinition                         DEFAULT_GAME                        = GameDefinition.ROBBERY;
+    private static final int                                    DIFFICULTY_BUTTON_SIZE              = 70;
+    private static final int                                    DIFFICULTY_LABEL_UNDERLINE_HEIGHT   = 2;
+    private static final Color                                  DIFFICULTY_LABEL_UNDERLINE_COLOR    = Color.BLACK;
+    private static final String                                 DIFFICULTY_LABEL_TEXT_PREFIX_KEY    = "gamedifficulty_";
+    private static final ApplicationFontManager.FontType_NEW    DIALOG_BOLD_FONT                    = ApplicationFontManager.FontType_NEW.BOLD_16;
 
     private Group                       content;
     private Image                       background;
@@ -136,11 +145,11 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
 
     @Override
     protected void screenPaused(Map<String, String> screenState) {
-        screenState.put(DIFFICULTY_EASY_KEY, String.valueOf(selectedGameDifficulties.contains(GameDifficulty.EASY)));
-        screenState.put(DIFFICULTY_MEDIUM_KEY, String.valueOf(selectedGameDifficulties.contains(GameDifficulty.MEDIUM)));
-        screenState.put(DIFFICULTY_HARD_KEY, String.valueOf(selectedGameDifficulties.contains(GameDifficulty.HARD)));
-        screenState.put(SELECTED_GAME_KEY, Integer.toString(selectedGameDefinition.getGameNumber()));
-        screenState.put(SELECTED_SWITCH_KEY, String.valueOf(graphStyle == GraphStyle.DAILY ? 0 : 2));
+        screenState.put(GameDifficulty.EASY.name(),    String.valueOf(selectedGameDifficulties.contains(GameDifficulty.EASY) ? SCREEN_STATE_DIFFICULTY_SET : SCREEN_STATE_DIFFICULTY_UNSET));
+        screenState.put(GameDifficulty.MEDIUM.name(),  String.valueOf(selectedGameDifficulties.contains(GameDifficulty.MEDIUM) ? SCREEN_STATE_DIFFICULTY_SET : SCREEN_STATE_DIFFICULTY_UNSET));
+        screenState.put(GameDifficulty.HARD.name(),    String.valueOf(selectedGameDifficulties.contains(GameDifficulty.HARD) ? SCREEN_STATE_DIFFICULTY_SET : SCREEN_STATE_DIFFICULTY_UNSET));
+        screenState.put(SCREEN_STATE_GAME_KEY,      Integer.toString(selectedGameDefinition.getGameNumber()));
+        screenState.put(SCREEN_STATE_SWITCH_KEY,    String.valueOf(graphStyle == GraphStyle.DAILY ? 0 : 2));
     }
 
     @Override
@@ -191,23 +200,33 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
 
         for (GameDifficulty gameDifficulty : GameDifficulty.getVisibleGameDifficultyList()) {
             String diffString = gameDifficulty.name().toLowerCase();
+            final Image difficultyLabelUnderLine = new Image(getColorTextureRegion(DIFFICULTY_LABEL_UNDERLINE_COLOR));
             TablexiaButton diffButton = new TablexiaButton(null, false,
                         getScreenTextureRegion(GFX_PATH + "difficultyradio_" + diffString + "_unpressed"),
                         getScreenTextureRegion(GFX_PATH + "difficultyradio_" + diffString + "_pressed"),
                         getScreenTextureRegion(GFX_PATH + "difficultyradio_" + diffString + "_pressed"),
-                        null)
+                        null) {
+
+                @Override
+                public void setChecked() {
+                    super.setChecked();
+                    difficultyLabelUnderLine.setVisible(true);
+                }
+
+                @Override
+                public void setUnchecked() {
+                    super.setUnchecked();
+                    difficultyLabelUnderLine.setVisible(false);
+                }
+            }
                     .setButtonSize(DIFFICULTY_BUTTON_SIZE, DIFFICULTY_BUTTON_SIZE)
                     .checkable(true)
                     .setInputListener(difficultyClickListener)
                     .adaptiveSize(true);
             difficulties.addActor(diffButton);
-            if(!isUnderScaleThreshold()) {
-                TablexiaLabel diffLabel = new TablexiaLabel(ApplicationTextManager.getInstance().getText("gamedifficulty_" + diffString), new TablexiaLabel.TablexiaLabelStyle(DIFFICULTY_FONT_TYPE, Color.BLACK));
-                difficulties.addActor(diffLabel);
-            }
+            prepareDifficultyButtonLabel(difficultyLabelUnderLine, diffString);
             diffButton.setUserObject(gameDifficulty);
-            setDifficultyButtonByDifficulty(gameDifficulty, screenState, diffButton);
-            difficultyButtons.put(gameDifficulty,diffButton);
+            difficultyButtons.put(gameDifficulty, diffButton);
         }
         difficulties.setScale(DIFFICULTIES_SCALE);
         content.addActor(difficulties);
@@ -219,7 +238,6 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
         notebook.fill();
         content.addActor(bookmarksGroup);
 
-        boolean gameFromDBLoaded = false;
         for (int i = 0; i < GameMenuDefinition.values().length; i++) {
             final GameMenuDefinition gameMenuDefinition = GameMenuDefinition.values()[i];
 
@@ -236,6 +254,8 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
                     super.setChecked();
                     getLabel().setAlignment(BOOKMARK_OPEN_ALIGN);
                     setTouchable(Touchable.disabled);
+                    setWidth(BOOKMARK_OPEN_WIDTH);
+                    prepareButtonPosition(this);
                 }
 
                 @Override
@@ -243,13 +263,17 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
                     super.setUnchecked();
                     getLabel().setAlignment(BOOKMARK_CLOSE_ALIGN);
                     setTouchable(Touchable.enabled);
+                    setWidth(BOOKMARK_CLOSE_WIDTH);
+                    prepareButtonPosition(this);
                 }
             };
+            button.adaptiveSize(false);
             button.setTouchable(Touchable.enabled);
-            button.getLabel().setAlignment(Align.right);
+            button.getLabel().setAlignment(BOOKMARK_CLOSE_ALIGN);
+            button.getLabel().setWrap(false);
             button.fontType(BOOKMARK_FONT_TYPE);
             button.setUserObject(gameMenuDefinition);
-            button.setWidth(getScreenTextureRegion(GFX_PATH + BOOKMARK_TEXT + BOOKMARKS_TEXTURES[i]).getRegionWidth() * SELECTED_GAME_WIDTH);
+            button.setWidth(BOOKMARK_CLOSE_WIDTH);
             button.setY((GameMenuDefinition.values().length - i) * BOOKMARKS_PADDING * getViewportHeight());
             button.setInputListener(new ClickListener() {
                 @Override
@@ -259,22 +283,34 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
             });
 
             bookmarksGroup.addActor(button);
-
-            //if user selected some graphs on last session, select them
-            if(selectGame(screenState, gameMenuDefinition.getGameDefinition()) && !gameFromDBLoaded) gameFromDBLoaded = true;
         }
 
-        //if not loaded from DB, select first available or default game and difficulty
-        if(!gameFromDBLoaded)selectFirstGameAndDifficultyAvailable();
-
         getStage().addActor(content);
         screenResized(0, 0);
     }
 
+    private void prepareDifficultyButtonLabel(Image underLine, String name) {
+        if(!isUnderScaleThreshold()) {
+            VerticalGroup diffLabelGroup = new VerticalGroup();
+            TablexiaLabel diffLabel = new TablexiaLabel(ApplicationTextManager.getInstance().getText(DIFFICULTY_LABEL_TEXT_PREFIX_KEY + name), new TablexiaLabel.TablexiaLabelStyle(DIFFICULTY_FONT_TYPE, Color.BLACK));
+            underLine.getDrawable().setMinWidth(diffLabel.getWidth());
+            underLine.getDrawable().setMinHeight(DIFFICULTY_LABEL_UNDERLINE_HEIGHT);
+            diffLabelGroup.addActor(diffLabel);
+            diffLabelGroup.addActor(underLine);
+            difficulties.addActor(diffLabelGroup);
+        }
+    }
+
     @Override
     protected void screenVisible(Map<String, String> screenState) {
-        super.screenVisible(screenState);
-        datasetChanged();
+        if (screenState.containsKey(SCREEN_STATE_GAME_KEY)){
+            selectGame(GameDefinition.getGameDefinitionForGameNumber(Integer.parseInt(screenState.get(SCREEN_STATE_GAME_KEY))));
+            for (GameDifficulty gameDifficulty: GameDifficulty.getVisibleGameDifficultyList()) {
+                setDifficultyButtonChecked(screenState.containsKey(gameDifficulty.name()) && SCREEN_STATE_DIFFICULTY_SET.equals(screenState.get(gameDifficulty.name())), gameDifficulty);
+            }
+        } else {
+            selectFirstGameAndDifficultyAvailable();
+        }
     }
 
     @Override
@@ -317,17 +353,13 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
         boolean gameSelected = false;
         for(int i = 1; i < GameMenuDefinition.values().length+1; i++) {
             games = getGames(GameDefinition.getGameDefinitionForGameNumber(i));
-            if(games.size() > 0) {
-
-                GameDifficulty difficulty;
-                for(Game game : games) {
-                    difficulty = GameDifficulty.getByGame(game);
-                    if(difficulty.hasScore()) {
-                        selectGame(GameDefinition.getGameDefinitionForGameNumber(i));
-                        setDifficultyButtonChecked(difficultyButtons.get(difficulty), true, difficulty);
-                        gameSelected = true;
-                        break;
-                    }
+            for(Game game : games) {
+                GameDifficulty difficulty = GameDifficulty.getByGame(game);
+                if(difficulty.hasScore()) {
+                    selectGame(GameDefinition.getGameDefinitionForGameNumber(i));
+                    setDifficultyButtonChecked(true, difficulty);
+                    gameSelected = true;
+                    break;
                 }
             }
             if(gameSelected) break;
@@ -335,43 +367,22 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
 
         if(!gameSelected) {
             selectGame(DEFAULT_GAME);
-            setDifficultyButtonChecked((TablexiaButton)difficulties.getChildren().get(0),true,GameDifficulty.DEFAULT_DIFFICULTY);
-        }
-    }
-
-    private void setDifficultyButtonByDifficulty(GameDifficulty difficulty, Map<String, String> screenState, TablexiaButton button) {
-        switch (difficulty) {
-            case EASY:
-                if(screenState.containsKey(DIFFICULTY_EASY_KEY)) setDifficultyButtonChecked(button, Boolean.parseBoolean(screenState.get(DIFFICULTY_EASY_KEY)), GameDifficulty.EASY);
-                break;
-
-            case MEDIUM:
-                if(screenState.containsKey(DIFFICULTY_MEDIUM_KEY)) setDifficultyButtonChecked(button, Boolean.parseBoolean(screenState.get(DIFFICULTY_MEDIUM_KEY)), GameDifficulty.MEDIUM);
-                break;
-
-            case HARD:
-                if(screenState.containsKey(DIFFICULTY_HARD_KEY)) setDifficultyButtonChecked(button, Boolean.parseBoolean(screenState.get(DIFFICULTY_HARD_KEY)), GameDifficulty.HARD);
-                break;
+            setDifficultyButtonChecked(true, GameDifficulty.DEFAULT_DIFFICULTY);
         }
     }
 
-    private void setDifficultyButtonChecked(TablexiaButton button, boolean selected, GameDifficulty difficulty) {
-        if (button != null) {
-            button.setChecked(selected);
-            if(selected) selectedGameDifficulties.add(difficulty);
+    private void setDifficultyButtonChecked(boolean selected, GameDifficulty difficulty) {
+        TablexiaButton difficultyButton = difficultyButtons.get(difficulty);
+        if (difficultyButton != null) {
+            difficultyButton.setChecked(selected);
+            if(selected) {
+                selectedGameDifficulties.add(difficulty);
+            }
+        } else {
+            Log.err(getClass(), "No difficulty button for difficulty definition: " + difficulty);
         }
     }
 
-    /** used when loading selected game bookmark from DB */
-    private boolean selectGame(Map<String, String> screenState, GameDefinition definition) {
-        if (screenState.containsKey(SELECTED_GAME_KEY) &&
-                Integer.parseInt(screenState.get(SELECTED_GAME_KEY)) == definition.getGameNumber()){
-           selectGame(definition);
-            return true;
-        }
-        return false;
-    }
-
     /**used when selecting first available or default game */
     private void selectGame(GameDefinition definition) {
         if(selectedGameDefinition == definition) return;
@@ -389,7 +400,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
     }
 
     private void setSelectedGraphType(Map<String,String> screenState) {
-        if(screenState.containsKey(SELECTED_SWITCH_KEY)) graphStyle = (Integer.parseInt(screenState.get(SELECTED_SWITCH_KEY)) == 0 ? GraphStyle.DAILY : GraphStyle.AVERAGE);
+        if(screenState.containsKey(SCREEN_STATE_SWITCH_KEY)) graphStyle = (Integer.parseInt(screenState.get(SCREEN_STATE_SWITCH_KEY)) == 0 ? GraphStyle.DAILY : GraphStyle.AVERAGE);
         switchGraph.switchToStep(graphStyle == GraphStyle.AVERAGE ? 2 : 0);
     }
 
@@ -453,7 +464,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
                                     dateText,
                                     String.format("%s %s",
                                                     ApplicationTextManager.getInstance().getText(GameDefinition.getGameDefinitionForGameNumber(game.getGameNumber()).getStatisticsAverageScoreDialogText()),
-                                                    getCorrectedScore(selectedGameDefinition, averageScore)));
+                                                    getCorrectedScore(selectedGameDefinition, game)));
         }
 
         @Override
@@ -588,30 +599,8 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
         return false;
     }
 
-    /**In some games is time used as score (less means better).
-    In order to calculate graph points, it is converted to 1/time.
-    This function makes the opposite to show real time.
-    Other scores are converted to text representing minutes and seconds */
     private String getCorrectedScore(GameDefinition gameDefinition, Game game) {
-        return getCorrectedScore(gameDefinition, gameDefinition.getGameResultResolver().getGameScoreResult(game));
-    }
-
-    private String getCorrectedScore(GameDefinition gameDefinition, float score) {
-        if(gameDefinition == GameDefinition.PURSUIT) return millisecondsToTimeText(score);
-        return String.valueOf(Math.round(score));
-    }
-
-    private String millisecondsToTimeText(float time) {
-        int minutes = (int) (time/1000) / 60;
-        int seconds = (int) ((time/1000) % 60);
-
-        if(minutes == 0) {
-            return seconds + "s";
-        } else if (seconds == 0){
-            return minutes + "m ";
-        } else {
-            return minutes + "m " + seconds + "s";
-        }
+        return gameDefinition.getGameResultResolver().getFormattedScoreForStatistics(game);
     }
 
     /**returning absolute value of clicked position on X axis on screen*/
@@ -678,8 +667,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
         downButton.setPosition(getViewportWidth() * UP_DOWN_BUTTON_POSITION_X_SCALE, getViewportHeight() * DOWN_BUTTON_POSITION_Y_SCALE);
         bookmarksGroup.setY(getViewportHeight() * BOOKMARKS_GROUP_POSITION_Y_SCALE);
         for(Actor button : bookmarksGroup.getChildren()) {
-            button.setPosition(getViewportWidth() * BOOKMARK_POSITION_X_SCALE - button.getWidth(),
-                    (GameMenuDefinition.values().length - bookmarksGroup.getChildren().indexOf(button, true)) * BOOKMARKS_PADDING * getViewportHeight());
+            prepareButtonPosition(button);
         }
 
         scrollPane.setSize(graphs.getWidth(), graphs.getHeight());
@@ -687,6 +675,11 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
         if (graphPane != null) graphPaneHolder.setSize(graphPane.getWidth(), graphPane.getHeight());
     }
 
+    private void prepareButtonPosition(Actor button) {
+        button.setPosition(getViewportWidth() * BOOKMARK_POSITION_X_SCALE - button.getWidth(),
+                (GameMenuDefinition.values().length - bookmarksGroup.getChildren().indexOf(button, true)) * BOOKMARKS_PADDING * getViewportHeight());
+    }
+
     private List<Game> getGames(GameDefinition definition) {
         return GameDAO.getGamesForUserAndDefinition(getSelectedUser().getId(), definition);
     }
diff --git a/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java b/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java
index 165d63f2e9f159d27ca43482919d41898d782879..a866c590365d9b7be45981a0e5c92ee6d3b8e2d5 100644
--- a/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java
+++ b/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java
@@ -155,7 +155,7 @@ public class GraphPane extends WidgetGroup {
 
     private void createScorePoints(List<Game> games) {
         for (Game game : games) {
-            float score = selectedGameDefinition.getGameResultResolver().getGameScoreResult(game);
+            float score = selectedGameDefinition.getGameResultResolver().getStatisticsScore(game);
             createPoint(game, score, getGamesByDifficulty(GameDifficulty.getByGame(game)).size(), games.indexOf(game), -1, null);
         }
     }