diff --git a/android/gradle.properties b/android/gradle.properties
index 4bb5439f682100f8ef4ba80a557fe4f2f0ab14c2..6bf54a6ed821c19f76d860d4a24e7c85d440b575 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.9
-app.versionCode=9
+app.versionName=0.0.10
+app.versionCode=10
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 108ef70d4dfec45476167796da4bd3f6283fc900..ff8ff8f1bfbee14a1af5fbd6838dd94b827f3f44 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -23,6 +23,20 @@ class Home extends StatelessWidget {
     pickGrid(myProvider);
   }
 
+  printGrid(List cells) {
+    print('');
+    print('-------');
+    for (var rowIndex = 0; rowIndex < cells.length; rowIndex++) {
+      String row = '';
+      for (var colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) {
+        row += cells[rowIndex][colIndex].value.toString();
+      }
+      print(row);
+    }
+    print('-------');
+    print('');
+  }
+
   Future<void> pickGrid(Data myProvider) async {
     int size = myProvider.size;
 
@@ -37,26 +51,77 @@ class Home extends StatelessWidget {
     }
 
     if (grid.length == pow(size, 4)) {
-      List cells = createBoardFromTemplate(grid);
-      myProvider.updateCells = cells;
+      myProvider.updateCells = createBoardFromTemplate(grid);
     }
   }
 
   List createBoardFromTemplate(String grid) {
     List cells = [];
     int size = int.parse(pow(grid.length, 1/4).toStringAsFixed(0));
+    int sideLength = pow(size, 2);
 
     int index = 0;
-    for (var rowIndex = 0; rowIndex < pow(size, 2); rowIndex++) {
+    for (var rowIndex = 0; rowIndex < sideLength; rowIndex++) {
       List row = [];
-      for (var colIndex = 0; colIndex < pow(size, 2); colIndex++) {
+      for (var colIndex = 0; colIndex < sideLength; colIndex++) {
         int value = int.parse(grid[index++]);
         row.add(Cell(value, colIndex, rowIndex, (value != 0)));
       }
       cells.add(row);
     }
 
-    // TODO: shuffle/flip/rotate grid
+    List<String> allowedFlip = ['', 'horizontal', 'vertical'];
+    List<String> allowedRotate = ['', 'left', 'right'];
+
+    var rand = new Random();
+    String flip = allowedFlip[rand.nextInt(allowedFlip.length)];
+    String rotate = allowedRotate[rand.nextInt(allowedRotate.length)];
+
+    switch(flip) {
+      case 'horizontal': {
+        List transformedBoard = createEmptyBoard(size);
+        for (var rowIndex = 0; rowIndex < sideLength; rowIndex++) {
+          for (var colIndex = 0; colIndex < sideLength; colIndex++) {
+            transformedBoard[rowIndex][colIndex] = cells[sideLength - rowIndex - 1][colIndex];
+          }
+        }
+        cells = transformedBoard;
+      }
+      break;
+      case 'vertical': {
+        List transformedBoard = createEmptyBoard(size);
+        for (var rowIndex = 0; rowIndex < sideLength; rowIndex++) {
+          for (var colIndex = 0; colIndex < sideLength; colIndex++) {
+            transformedBoard[rowIndex][colIndex] = cells[rowIndex][sideLength - colIndex - 1];
+          }
+        }
+        cells = transformedBoard;
+      }
+      break;
+    }
+
+    switch(rotate) {
+      case 'left': {
+        List transformedBoard = createEmptyBoard(size);
+        for (var rowIndex = 0; rowIndex < sideLength; rowIndex++) {
+          for (var colIndex = 0; colIndex < sideLength; colIndex++) {
+            transformedBoard[rowIndex][colIndex] = cells[colIndex][sideLength - rowIndex - 1];
+          }
+        }
+        cells = transformedBoard;
+      }
+      break;
+      case 'right': {
+        List transformedBoard = createEmptyBoard(size);
+        for (var rowIndex = 0; rowIndex < sideLength; rowIndex++) {
+          for (var colIndex = 0; colIndex < sideLength; colIndex++) {
+            transformedBoard[rowIndex][colIndex] = cells[sideLength - colIndex - 1][rowIndex];
+          }
+        }
+        cells = transformedBoard;
+      }
+      break;
+    }
 
     return cells;
   }