diff --git a/android/gradle.properties b/android/gradle.properties
index 14eed3944b547f02179b1b42f4b601f91b7957c0..aa51064abebb79ba519e600afb7af23779154d4e 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,5 +1,5 @@
 org.gradle.jvmargs=-Xmx1536M
 android.useAndroidX=true
 android.enableJetifier=true
-app.versionName=0.0.4
-app.versionCode=4
+app.versionName=0.0.5
+app.versionCode=5
diff --git a/lib/layout/game.dart b/lib/layout/game.dart
index 342f1a2737733bc5d6c15e61524403b365a954b1..0c70fe6004a06f4cca65f2dc77ec5a8240718bba 100644
--- a/lib/layout/game.dart
+++ b/lib/layout/game.dart
@@ -18,16 +18,7 @@ class Game {
         crossAxisAlignment: CrossAxisAlignment.center,
         children: [
           SizedBox(height: 8),
-          Container(
-            child: Text(
-              myProvider.movesCount.toString(),
-              style: TextStyle(
-                fontSize: 40,
-                fontWeight: FontWeight.w600,
-                color: Colors.black,
-              ),
-            ),
-          ),
+          Game.buildTopIndicatorWidget(myProvider),
           SizedBox(height: 2),
           Expanded(
             child: Board.buildGameBoard(myProvider),
@@ -43,6 +34,47 @@ class Game {
     );
   }
 
+  static Widget buildTopIndicatorWidget(Data myProvider) {
+    String progressIndicator = myProvider.progress.toString() + '/' + myProvider.progressTotal.toString();
+
+    if (myProvider.movesCount > 0) {
+      progressIndicator += ' (+' + myProvider.progressDelta.toString() + ')';
+    }
+
+    return Table(
+      children: [
+        TableRow(
+          children: [
+            Column(
+              children: [
+                Text(
+                  myProvider.movesCount.toString(),
+                  style: TextStyle(
+                    fontSize: 40,
+                    fontWeight: FontWeight.w600,
+                    color: Colors.black,
+                  ),
+                ),
+              ]
+            ),
+            Column(
+              children: [
+                Text(
+                  progressIndicator,
+                  style: TextStyle(
+                    fontSize: 20,
+                    fontWeight: FontWeight.w600,
+                    color: Colors.green,
+                  ),
+                ),
+              ]
+            ),
+          ],
+        ),
+      ],
+    );
+  }
+
   static Container buildSelectColorBar(Data myProvider) {
     List cells = myProvider.cells;
 
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index 4f044ed5c04be6c32250366895ee80b4a19c2b86..3ecfa090a9224f0b52988474494944281941a494 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -24,6 +24,10 @@ class Data extends ChangeNotifier {
   int _movesCount = 0;
   List _cells = [];
 
+  int _progress = 0;
+  int _progressTotal = 0;
+  int _progressDelta = 0;
+
   String get level => _level;
   void updateLevel(String level) {
     _level = level;
@@ -80,6 +84,7 @@ class Data extends ChangeNotifier {
   int get boardSize => _boardSize;
   void updateBoardSize(int boardSize) {
     _boardSize = boardSize;
+    _progressTotal = boardSize * boardSize;
   }
 
   int get colorsCount => _colorsCount;
@@ -135,6 +140,22 @@ class Data extends ChangeNotifier {
     updateMovesCount(movesCount + 1);
   }
 
+  int get progress => _progress;
+  int get progressTotal => _progressTotal;
+  int get progressDelta => _progressDelta;
+  void updateProgress(int progress) {
+    _progress = progress;
+    notifyListeners();
+  }
+  void updateProgressTotal(int progressTotal) {
+    _progressTotal = progressTotal;
+    notifyListeners();
+  }
+  void updateProgressDelta(int progressDelta) {
+    _progressDelta = progressDelta;
+    notifyListeners();
+  }
+
   bool get gameIsRunning => _gameIsRunning;
   void updateGameIsRunning(bool gameIsRunning) {
     _gameIsRunning = gameIsRunning;
@@ -155,6 +176,7 @@ class Data extends ChangeNotifier {
     _gameIsRunning = false;
     _gameWon = false;
     _movesCount = 0;
+    _progress = 0;
     notifyListeners();
   }
 
diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart
index 6971073b68872d5f9daff86237ef7fbf13cb2f54..405685c01ae50e0ffba4152e1958d1951fbc8b07 100644
--- a/lib/utils/board_utils.dart
+++ b/lib/utils/board_utils.dart
@@ -39,15 +39,24 @@ class BoardUtils {
 
     myProvider.resetGame();
     myProvider.updateCells(grid);
+
+    int initProgress = BoardUtils.getSiblingFillableCells(myProvider, 0, 0, [[0, 0]]).length;
+    myProvider.updateProgress(initProgress);
   }
 
   static fillBoardFromFirstCell(Data myProvider, int value) {
     List cellsToFill = BoardUtils.getSiblingFillableCells(myProvider, 0, 0, [[0, 0]]);
+    int progressBeforeMove = cellsToFill.length;
 
     for (var cellIndex = 0; cellIndex < cellsToFill.length; cellIndex++) {
       myProvider.updateCellValue(cellsToFill[cellIndex][1], cellsToFill[cellIndex][0], value);
     }
 
+    int progressAfterMove = BoardUtils.getSiblingFillableCells(myProvider, 0, 0, [[0, 0]]).length;
+    int progressDelta = progressAfterMove - progressBeforeMove;
+    myProvider.updateProgressDelta(progressDelta);
+    myProvider.updateProgress(progressAfterMove);
+
     myProvider.incrementMovesCount();
   }