diff --git a/app/classes/Framadate/Migration/From_0_0_to_0_8_Migration.php b/app/classes/Framadate/Migration/From_0_0_to_0_8_Migration.php
index 121e389e1cf4f90caad7c755047af8dc6b427e2a..dbdb59eb0a39595e5434836287dd25412a03b6d1 100644
--- a/app/classes/Framadate/Migration/From_0_0_to_0_8_Migration.php
+++ b/app/classes/Framadate/Migration/From_0_0_to_0_8_Migration.php
@@ -1,11 +1,29 @@
 <?php
 namespace Framadate\Migration;
 
+use Framadate\Utils;
+
 class From_0_0_to_0_8_Migration implements Migration {
 
     function __construct() {
     }
 
+    /**
+     * This method could check if the execute method should be called.
+     * It is called before the execute method.
+     *
+     * @param \PDO $pdo The connection to database
+     * @return bool true is the Migration should be executed.
+     */
+    function preCondition(\PDO $pdo) {
+        $stmt = $pdo->query('SHOW TABLES');
+        $tables = $stmt->fetchAll(\PDO::FETCH_COLUMN);
+
+        // Check if there is no tables but the MIGRATION_TABLE one
+        $diff = array_diff($tables, [Utils::table(MIGRATION_TABLE)]);
+        return count($diff) === 0;
+    }
+
     /**
      * This methode is called only one time in the migration page.
      *
diff --git a/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php b/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php
index 33f11858ea298b360545b9e7de5ece262ae95177..ea69991f4c62289e85f39ee3c7fecbc7253cf2e5 100644
--- a/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php
+++ b/app/classes/Framadate/Migration/From_0_8_to_0_9_Migration.php
@@ -13,6 +13,22 @@ class From_0_8_to_0_9_Migration implements Migration {
     function __construct() {
     }
 
+    /**
+     * This method could check if the execute method should be called.
+     * It is called before the execute method.
+     *
+     * @param \PDO $pdo The connection to database
+     * @return bool true is the Migration should be executed.
+     */
+    function preCondition(\PDO $pdo) {
+        $stmt = $pdo->query('SHOW TABLES');
+        $tables = $stmt->fetchAll(\PDO::FETCH_COLUMN);
+
+        // Check if tables of v0.8 are presents
+        $diff = array_diff(['sondage', 'sujet_studs', 'comments', 'user_studs'], $tables);
+        return count($diff) === 0;
+    }
+
     /**
      * This methode is called only one time in the migration page.
      *
diff --git a/app/classes/Framadate/Migration/Migration.php b/app/classes/Framadate/Migration/Migration.php
index e6d0eb9e5648f748dcef35f32b7114f30f83eb92..b68362b536c043ae387c2f5435b7d28860a1e914 100644
--- a/app/classes/Framadate/Migration/Migration.php
+++ b/app/classes/Framadate/Migration/Migration.php
@@ -3,6 +3,15 @@ namespace Framadate\Migration;
 
 interface Migration {
 
+    /**
+     * This method could check if the execute method should be called.
+     * It is called before the execute method.
+     *
+     * @param \PDO $pdo The connection to database
+     * @return bool true is the Migration should be executed.
+     */
+    function preCondition(\PDO $pdo);
+
     /**
      * This methode is called only one time in the migration page.
      *
diff --git a/migration.php b/migration.php
index 70d7c6dc3e532ff963b77335a19509ed7e29983e..2617b843af0885e92e32177e4b5487de4e4bd056 100644
--- a/migration.php
+++ b/migration.php
@@ -57,7 +57,7 @@ foreach ($migrations as $migration) {
     $executed = $selectStmt->rowCount();
     $selectStmt->closeCursor();
 
-    if (!$executed) {
+    if (!$executed && $migration->preCondition($pdo)) {
         $migration->execute($pdo);
         if ($insertStmt->execute([$className])) {
             $countSucceeded++;