diff --git a/simplenews.module b/simplenews.module
index 922b268..1acc07c 100644
--- a/simplenews.module
+++ b/simplenews.module
@@ -16,6 +16,9 @@ use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Url;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\migrate\Plugin\MigrateSourceInterface;
+use Drupal\migrate\Plugin\MigrationInterface;
+use Drupal\migrate\Row;
 use Drupal\node\NodeInterface;
 use Drupal\node\NodeTypeInterface;
 use Drupal\simplenews\Entity\Subscriber;
@@ -1149,3 +1152,18 @@ function _simplenews_batch_dispatcher() {
   list($service, $method) = explode(':', array_shift($args));
   call_user_func_array(array(\Drupal::service($service), $method), $args);
 }
+
+/**
+ * Implements hook_migrate_prepare_row().
+ */
+function simplenews_migrate_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) {
+  if ($migration->id() == 'd7_node_type') {
+    $value = $source->getDatabase()->query(
+      'SELECT value FROM {variable} WHERE name = :name',
+      [':name' => 'simplenews_content_type_' . $row->getSourceProperty('type')]
+    )->fetchField();
+    if ($value) {
+      $row->setSourceProperty('simplenews_content_type', unserialize($value));
+    }
+  }
+}
diff --git a/simplenews.services.yml b/simplenews.services.yml
index 0e8e8a7..afe8311 100644
--- a/simplenews.services.yml
+++ b/simplenews.services.yml
@@ -21,3 +21,8 @@ services:
       - { name: needs_destruction }
   simplenews.mail_cache:
     class: Drupal\simplenews\Mail\MailCacheBuild
+  simplenews.migration_subscriber:
+    class: Drupal\simplenews\EventSubscriber\MigrationSubscriber
+    arguments: ['@entity_field.manager']
+    tags:
+      - { name: event_subscriber }
diff --git a/src/EventSubscriber/MigrationSubscriber.php b/src/EventSubscriber/MigrationSubscriber.php
new file mode 100644
index 0000000..b65d83c
--- /dev/null
+++ b/src/EventSubscriber/MigrationSubscriber.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace Drupal\simplenews\EventSubscriber;
+
+use Drupal\Core\Entity\EntityFieldManagerInterface;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\migrate\Event\MigrateEvents;
+use Drupal\migrate\Event\MigratePostRowSaveEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+class MigrationSubscriber implements EventSubscriberInterface {
+
+  protected $entityFieldManager;
+
+  public function __construct(EntityFieldManagerInterface $entityFieldManager) {
+    $this->entityFieldManager = $entityFieldManager;
+  }
+
+  /**
+   * Create simplenews field if applicable.
+   *
+   * @param \Drupal\migrate\Event\MigratePostRowSaveEvent $event
+   *   The event object.
+   */
+  public function onMigrationPostRowSave(MigratePostRowSaveEvent $event) {
+    if (!$event->getRow()->getSourceProperty('simplenews_content_type')) {
+      return;
+    }
+
+    $node_type = reset($event->getDestinationIdValues());
+    $fields = $this->entityFieldManager->getFieldDefinitions('node', $node_type);
+    if (isset($fields['simplenews_issue'])) {
+      return;
+    }
+
+    // If checked and the field does not exist yet, create it.
+    $field_storage = FieldStorageConfig::loadByName('node', 'simplenews_issue');
+    $field = FieldConfig::create([
+      'field_storage' => $field_storage,
+      'label' => t('Issue'),
+      'bundle' => $node_type,
+      'translatable' => TRUE,
+    ]);
+    $field->save();
+
+    // Set the default widget.
+    entity_get_form_display('node', $node_type, 'default')
+      ->setComponent($field->getName())
+      ->save();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    $return = [];
+    if (class_exists('\Drupal\migrate\Event\MigrateEvents')) {
+      $return[MigrateEvents::POST_ROW_SAVE][] = 'onMigrationPostRowSave';
+    }
+    return $return;
+  }
+}
diff --git a/src/Plugin/migrate/source/d7/Newsletter.php b/src/Plugin/migrate/source/d7/Newsletter.php
index 91acb69..8bc297f 100644
--- a/src/Plugin/migrate/source/d7/Newsletter.php
+++ b/src/Plugin/migrate/source/d7/Newsletter.php
@@ -1,8 +1,4 @@
 <?php
-/**
- * @file
- * Contains \Drupal\simplenews\Plugin\migrate\source\d7\Newsletter.
- */
 
 namespace Drupal\simplenews\Plugin\migrate\source\d7;
 
@@ -16,6 +12,7 @@ use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
  * )
  */
 class Newsletter extends DrupalSqlBase {
+
   /**
    * {@inheritdoc}
    */
@@ -42,13 +39,40 @@ class Newsletter extends DrupalSqlBase {
    * {@inheritdoc}
    */
   public function getIds() {
-    return ['newsletter_id' => ['type' => 'serial']];
+    return ['newsletter_id' => ['type' => 'integer']];
   }
 
   /**
    * {@inheritdoc}
    */
   public function query() {
+    $version = $this->getModuleSchemaVersion('simplenews');
+    if ($version >= 7000 & $version < 7200) {
+      return $this->query71();
+    }
+    else {
+      return $this->query72();
+    }
+  }
+
+  /**
+   * Get query for Simplenews module version 7.x-1.x.
+   */
+  protected function query71() {
+    $q = $this->select('simplenews_category', 'c');
+    $q->innerJoin('taxonomy_term_data', 't', 't.tid = c.tid');
+    $q->addField('c', 'tid', 'newsletter_id');
+    $q->fields('c', ['format', 'priority', 'receipt', 'from_name', 'email_subject', 'from_address', 'hyperlinks', 'new_account', 'opt_inout', 'block']);
+    $q->fields('t', ['name', 'description', 'weight']);
+    $q->orderBy('newsletter_id');
+
+    return $q;
+  }
+
+  /**
+   * Get query for Simplenews module version 7.x-2.x.
+   */
+  protected function query72() {
     return $this->select('simplenews_newsletter', 'n')
       ->fields('n')
       ->orderBy('newsletter_id');
diff --git a/src/Plugin/migrate/source/d7/Subscriber.php b/src/Plugin/migrate/source/d7/Subscriber.php
index 9421b66..1fccaa9 100644
--- a/src/Plugin/migrate/source/d7/Subscriber.php
+++ b/src/Plugin/migrate/source/d7/Subscriber.php
@@ -1,8 +1,4 @@
 <?php
-/**
- * @file
- * Contains \Drupal\simplenews\Plugin\migrate\source\Subscriber.
- */
 
 namespace Drupal\simplenews\Plugin\migrate\source\d7;
 
@@ -17,6 +13,7 @@ use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
  * )
  */
 class Subscriber extends DrupalSqlBase {
+
   /**
    * {@inheritdoc}
    */
@@ -36,7 +33,7 @@ class Subscriber extends DrupalSqlBase {
    * {@inheritdoc}
    */
   public function getIds() {
-    return ['snid' => ['type' => 'serial']];
+    return ['snid' => ['type' => 'integer']];
   }
 
   /**
@@ -54,12 +51,18 @@ class Subscriber extends DrupalSqlBase {
   public function prepareRow(Row $row) {
     $result = parent::prepareRow($row);
 
+    $version = $this->getModuleSchemaVersion('simplenews');
+    $newsletter_id_field = 'newsletter_id';
+    if ($version >= 7000 & $version < 7200) {
+      $newsletter_id_field = 'tid';
+    }
+
     // Add associated data from the subscriptions table.
-    $subscriptions = $this->select('simplenews_subscription', 'sub')
-      ->fields('sub', ['newsletter_id', 'status', 'timestamp', 'source'])
-      ->condition('sub.snid', $row->getSourceProperty('snid'))
-      ->execute()
-      ->fetchAllAssoc('newsletter_id');
+    $q = $this->select('simplenews_subscription', 'sub');
+    $q->addField('sub', $newsletter_id_field, 'newsletter_id');
+    $q->fields('sub', ['status', 'timestamp', 'source']);
+    $q->condition('sub.snid', $row->getSourceProperty('snid'));
+    $subscriptions = $q->execute()->fetchAllAssoc('newsletter_id');
     $row->setSourceProperty('subscriptions', $subscriptions);
 
     return $result;
