diff --git a/src/MigrateExecutable.php b/src/MigrateExecutable.php
index e6f0139..b22acc2 100644
--- a/src/MigrateExecutable.php
+++ b/src/MigrateExecutable.php
@@ -99,6 +99,9 @@ public function __construct(MigrationInterface $migration, MigrateMessageInterfa
     }
     if (isset($options['idlist'])) {
       $this->idlist = explode(',', $options['idlist']);
+      array_walk($this->idlist , function(&$value, $key) {
+        $value = explode(':', $value);
+      });
     }
 
     $this->listeners[MigrateEvents::MAP_SAVE] = [$this, 'onMapSave'];
@@ -336,8 +339,20 @@ public function onPostRowDelete(MigrateRowDeleteEvent $event) {
   public function onPrepareRow(MigratePrepareRowEvent $event) {
     if ($this->idlist) {
       $row = $event->getRow();
-      $source_id = $row->getSourceIdValues();
-      if (!in_array(reset($source_id), $this->idlist)) {
+      /**
+       * @TODO replace for $source_id = $row->getSourceIdValues(); when https://www.drupal.org/node/2698023 is fixed
+       */
+      $migration = $event->getMigration();
+      $source_id = array_merge(array_flip(array_keys($migration->getSourcePlugin()
+        ->getIds())), $row->getSourceIdValues());
+      $skip = TRUE;
+      foreach ($this->idlist as $item) {
+        if (array_values($source_id) === $item) {
+          $skip = FALSE;
+          break;
+        }
+      }
+      if ($skip) {
         throw new MigrateSkipRowException(NULL, FALSE);
       }
     }
