diff --git a/migrate_tools.drush.inc b/migrate_tools.drush.inc
index 4612874..9f2bca3 100644
--- a/migrate_tools.drush.inc
+++ b/migrate_tools.drush.inc
@@ -10,6 +10,7 @@ use Drupal\migrate\Exception\RequirementsException;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Plugin\RequirementsInterface;
 use Drupal\migrate_tools\MigrateExecutable;
+use Drupal\migrate_tools\MigrateBatchExecutable;
 use Drupal\migrate_tools\DrushLogMigrateMessage;
 use Drupal\Core\Datetime\DateFormatter;
 use Drupal\migrate_plus\Entity\MigrationGroup;
@@ -284,9 +285,10 @@ function _drush_migrate_tools_execute_migration(MigrationInterface $migration, $
   if (!empty($options['update'])) {
     $migration->getIdMap()->prepareUpdate();
   }
-  $executable = new MigrateExecutable($migration, $log, $options);
+  $executable = new MigrateBatchExecutable($migration, $log, $options);
+  $executable->batchImport();
   // drush_op() provides --simulate support
-  drush_op(array($executable, 'import'));
+  drush_op('drush_backend_batch_process');
   if ($count = $executable->getFailedCount()) {
     // Nudge Drush to use a non-zero exit code.
     drush_set_error('MIGRATE_ERROR', dt('!name Migration - !count failed.', array('!name' => $migration_id, '!count' => $count)));
diff --git a/src/Commands/MigrateToolsCommands.php b/src/Commands/MigrateToolsCommands.php
index 501c6ac..e12cc65 100644
--- a/src/Commands/MigrateToolsCommands.php
+++ b/src/Commands/MigrateToolsCommands.php
@@ -14,6 +14,7 @@ use Drupal\migrate\Plugin\RequirementsInterface;
 use Drupal\migrate_tools\Drush9LogMigrateMessage;
 use Drupal\migrate_tools\DrushLogMigrateMessage;
 use Drupal\migrate_tools\MigrateExecutable;
+use Drupal\migrate_tools\MigrateBatchExecutable;
 use Drush\Commands\DrushCommands;
 use Drush\Drush;
 
@@ -711,9 +712,10 @@ class MigrateToolsCommands extends DrushCommands {
     if (!empty($options['update'])) {
       $migration->getIdMap()->prepareUpdate();
     }
-    $executable = new MigrateExecutable($migration, $this->getMigrateMessage(), $options);
+    $executable = new MigrateBatchExecutable($migration, $this->getMigrateMessage(), $options);
+    $executable->batchImport();
     // drush_op() provides --simulate support.
-    drush_op([$executable, 'import']);
+    drush_op('drush_backend_batch_process');
     if ($count = $executable->getFailedCount()) {
       // Nudge Drush to use a non-zero exit code.
       throw new \Exception(
diff --git a/src/MigrateBatchExecutable.php b/src/MigrateBatchExecutable.php
index d1aa35e..d7c9e2b 100644
--- a/src/MigrateBatchExecutable.php
+++ b/src/MigrateBatchExecutable.php
@@ -101,6 +101,7 @@ class MigrateBatchExecutable extends MigrateExecutable {
         'progress_message' => t('Migrating %migrate', ['%migrate' => $this->migration->label()]),
         'error_message' => t('An error occurred while migrating %migrate.', ['%migrate' => $this->migration->label()]),
         'finished' => '\Drupal\migrate_tools\MigrateBatchExecutable::batchFinishedImport',
+        'file' => drupal_get_path('module', 'migrate_tools') . '/src/MigrateBatchExecutable.php',
       ];
 
       batch_set($batch);
@@ -191,7 +192,7 @@ class MigrateBatchExecutable extends MigrateExecutable {
         '@updated' => 0,
         '@failures' => 0,
         '@ignored' => 0,
-        '@name' => $migration->id()
+        '@name' => $migration->id(),
       ];
     }
 
@@ -211,7 +212,7 @@ class MigrateBatchExecutable extends MigrateExecutable {
       '@updated' => $context['results'][$migration->id()]['@updated'] + $executable->getUpdatedCount(),
       '@failures' => $context['results'][$migration->id()]['@failures'] + $executable->getFailedCount(),
       '@ignored' => $context['results'][$migration->id()]['@ignored'] + $executable->getIgnoredCount(),
-      '@name' => $migration->id()
+      '@name' => $migration->id(),
     ];
 
     // Do some housekeeping.
