diff --git a/android/gradle.properties b/android/gradle.properties
index 135006f9c1386c8757595c43e890e911f732f5a3..85b94f88ee157e1d1b3cec184c8948902443d36f 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.6
-app.versionCode=6
+app.versionName=0.0.7
+app.versionCode=7
diff --git a/lib/entities/tile.dart b/lib/entities/tile.dart
index e9919d72673fc50fc4fd9d535bd4f9bdfe11cb33..2860b50f6df50c69071adb71fdd6f51325e5c189 100644
--- a/lib/entities/tile.dart
+++ b/lib/entities/tile.dart
@@ -1,4 +1,7 @@
 import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+
+import '../provider/data.dart';
 
 class Tile {
   final Image image;
@@ -35,7 +38,7 @@ class Tile {
     );
   }
 
-  Container widget() {
+  Container widget(Data myProvider) {
     return Container(
       child: DragTarget<List<int>>(
         builder: (
@@ -70,6 +73,10 @@ class Tile {
         },
         onAccept: (List<int> data) {
           print(data.toString());
+          myProvider.swapTiles(
+            [this.currentCol, this.currentRow],
+            data
+          );
         },
       )
     );
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index 5979a1ba28d69118bb64e34670c2eb2d500e77bf..601037d06095346a23efb203105877e7e6e02151 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -1,5 +1,7 @@
 import 'package:flutter/foundation.dart';
 
+import '../entities/tile.dart';
+
 class Data extends ChangeNotifier {
 
   // application data
@@ -38,6 +40,17 @@ class Data extends ChangeNotifier {
     notifyListeners();
   }
 
+  void swapTiles(List<int> tile1, List<int> tile2) {
+    int indexTile1 = _tiles.indexWhere((tile) => ((tile.currentCol == tile1[0]) && (tile.currentRow == tile1[1])));
+    int indexTile2 = _tiles.indexWhere((tile) => ((tile.currentCol == tile2[0]) && (tile.currentRow == tile2[1])));
+
+    Tile swap = _tiles[indexTile1];
+    _tiles[indexTile1] = _tiles[indexTile2];
+    _tiles[indexTile2] = swap;
+
+    notifyListeners();
+  }
+
   void resetGame() {
     _image = '';
     notifyListeners();
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 42432a25d78b5f9303227413c9510782fcf89585..6d7bd078f2396987ae4e22b7ecff7894b880f013 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -117,14 +117,14 @@ class Home extends StatelessWidget {
       y += height;
     }
 
+    tiles.shuffle();
+
     return tiles;
   }
 
   Container _buildTilesetWidget(Data myProvider) {
     List tiles = myProvider.tiles;
 
-    tiles.shuffle();
-
     int tileIndex = 0;
 
     Table tileset = Table(
@@ -139,7 +139,7 @@ class Home extends StatelessWidget {
         for (var row = 0; row < _linesCount; row++)
           TableRow(children: [
             for (var col = 0; col < _columnsCount; col++)
-              Column(children: [tiles[tileIndex++].widget()]),
+              Column(children: [tiles[tileIndex++].widget(myProvider)]),
           ]),
       ]
     );