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/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 dd9e957c98e624f65d26cf8aeb51098000d1cec2..cdd88074c640c427ab4b503dd1f3324cfec26449 100644
--- a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java
+++ b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java
@@ -464,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
@@ -599,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*/
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);
         }
     }