diff --git a/core/modules/migrate/config/schema/migrate.source.schema.yml b/core/modules/migrate/config/schema/migrate.source.schema.yml
index 86631c2..b3bef33 100644
--- a/core/modules/migrate/config/schema/migrate.source.schema.yml
+++ b/core/modules/migrate/config/schema/migrate.source.schema.yml
@@ -193,6 +193,26 @@ migrate.source.d6_node_type:
           type: boolean
           label: 'create body'
 
+migrate.source.d6_node:
+  type: migrate_source
+  label: 'Drupal 6 node'
+  mapping:
+    node_type:
+      # The node type can be specified both as a string ID of a node type or an
+      # array of node type IDs, so there is no way to consistently parse this.
+      type: ignore
+      label: 'Node type'
+
+migrate.source.d6_node_revision:
+  type: migrate_source
+  label: 'Drupal 6 node'
+  mapping:
+    node_type:
+      # The node type can be specified both as a string ID of a node type or an
+      # array of node type IDs, so there is no way to consistently parse this.
+      type: ignore
+      label: 'Node type'
+
 migrate.source.d6_upload_instance:
   type: migrate_source
   label: 'Drupal 6 upload form display'
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/Node.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/Node.php
index 4c0edcd..41f4fc3 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/Node.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/Node.php
@@ -54,6 +54,10 @@ public function query() {
       ));
     $query->innerJoin('node', 'n', static::JOIN);
 
+    if (isset($this->configuration['node_type'])) {
+      $query->condition('type', $this->configuration['node_type']);
+    }
+
     return $query;
   }
 
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeByNodeTypeTest.php
similarity index 87%
copy from core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php
copy to core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeByNodeTypeTest.php
index c0e528b..6bbbfbb 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeByNodeTypeTest.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\Tests\migrate_drupal\Unit\source\d6\NodeTest.
+ * Contains \Drupal\Tests\migrate_drupal\Unit\source\d6\NodeByNodeTypeTest.
  */
 
 namespace Drupal\Tests\migrate_drupal\Unit\source\d6;
@@ -10,11 +10,11 @@
 use Drupal\Tests\migrate\Unit\MigrateSqlSourceTestCase;
 
 /**
- * Tests D6 node source plugin.
+ * Tests D6 node source plugin with 'node_type' configuration.
  *
  * @group migrate_drupal
  */
-class NodeTest extends MigrateSqlSourceTestCase {
+class NodeByNodeTypeTest extends MigrateSqlSourceTestCase {
 
   const PLUGIN_CLASS = 'Drupal\migrate_drupal\Plugin\migrate\source\d6\Node';
 
@@ -25,8 +25,8 @@ class NodeTest extends MigrateSqlSourceTestCase {
     'idlist' => array(),
     // The fake configuration for the source.
     'source' => array(
-      'bundle' => 'page',
       'plugin' => 'd6_node',
+      'node_type' => 'page',
     ),
   );
 
@@ -75,7 +75,15 @@ class NodeTest extends MigrateSqlSourceTestCase {
       'teaser' => 'teaser for node 2',
       'format' => 1,
     ),
-    array(
+  );
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    $database_contents = $this->expectedResults;
+
+    $database_contents[] = array(
       // Node fields.
       'nid' => 5,
       'vid' => 5,
@@ -96,14 +104,11 @@ class NodeTest extends MigrateSqlSourceTestCase {
       'body' => 'body for node 5',
       'teaser' => 'body for node 5',
       'format' => 1,
-    ),
-  );
+    );
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    foreach ($this->expectedResults as $k => $row) {
+    // Add another row with an article node and make sure it is not migrated.
+
+    foreach ($database_contents as $k => $row) {
       foreach (array('nid', 'vid', 'title', 'uid', 'body', 'teaser', 'format') as $i => $field) {
         $this->databaseContents['node_revisions'][$k][$field] = $row[$field];
         // Keep nid and vid.
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionByNodeTypeTest.php
similarity index 97%
copy from core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionTest.php
copy to core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionByNodeTypeTest.php
index a83c70d..cd2407b 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionByNodeTypeTest.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\Tests\migrate_drupal\Unit\source\d6\NodeRevisionTest.
+ * Contains \Drupal\Tests\migrate_drupal\Unit\source\d6\NodeRevisionByNodeTypeTest.
  */
 
 namespace Drupal\Tests\migrate_drupal\Unit\source\d6;
@@ -14,7 +14,7 @@
  *
  * @group migrate_drupal
  */
-class NodeRevisionTest extends MigrateSqlSourceTestCase {
+class NodeRevisionByNodeTypeTest extends MigrateSqlSourceTestCase {
 
   const PLUGIN_CLASS = 'Drupal\migrate_drupal\Plugin\migrate\source\d6\NodeRevision';
 
@@ -25,9 +25,8 @@ class NodeRevisionTest extends MigrateSqlSourceTestCase {
     'idlist' => array(),
     // The fake configuration for the source.
     'source' => array(
-      'node_type' => 'page',
       'plugin' => 'd6_node_revision',
-      'bundle' => 'page',
+      'node_type' => 'page',
     ),
     'sourceIds' => array(
       'vid' => array(
@@ -140,37 +139,6 @@ class NodeRevisionTest extends MigrateSqlSourceTestCase {
         'field_test_one' => 'text for node 1',
       ),
     ),
-    array(
-      // Node fields.
-      'nid' => 2,
-      'type' => 'page',
-      'language' => 'en',
-      'status' => 1,
-      'created' => 1279290908,
-      'changed' => 1279308993,
-      'comment' => 0,
-      'promote' => 1,
-      'moderate' => 0,
-      'sticky' => 0,
-      'tnid' => 0,
-      'translate' => 0,
-      // Node revision fields.
-      'vid' => 2,
-      'uid' => 1,
-      'title' => 'title for revision 2 (node 2)',
-      'body' => 'body for revision 2 (node 2)',
-      'teaser' => 'teaser for revision 2 (node 2)',
-      'log' => 'log for revision 2 (node 2)',
-      'format' => 1,
-      'field_test_two' => array(
-        'test field node 2',
-      ),
-
-      // This is just to help with databaseContents and gets unset later.
-      'fields' => array(
-        'field_test_one' => 'text for node 2',
-      ),
-    ),
   );
 
   protected $fields = array(
@@ -278,7 +246,41 @@ class NodeRevisionTest extends MigrateSqlSourceTestCase {
    * {@inheritdoc}
    */
   protected function setUp() {
-    foreach ($this->expectedResults as $k => $row) {
+    $database_contents = $this->expectedResults;
+
+    $database_contents[] = array(
+      // Node fields.
+      'nid' => 2,
+      'type' => 'article',
+      'language' => 'en',
+      'status' => 1,
+      'created' => 1279290908,
+      'changed' => 1279308993,
+      'comment' => 0,
+      'promote' => 1,
+      'moderate' => 0,
+      'sticky' => 0,
+      'tnid' => 0,
+      'translate' => 0,
+      // Node revision fields.
+      'vid' => 2,
+      'uid' => 1,
+      'title' => 'title for revision 2 (node 2)',
+      'body' => 'body for revision 2 (node 2)',
+      'teaser' => 'teaser for revision 2 (node 2)',
+      'log' => 'log for revision 2 (node 2)',
+      'format' => 1,
+      'field_test_two' => array(
+        'test field node 2',
+      ),
+
+      // This is just to help with databaseContents and gets unset later.
+      'fields' => array(
+        'field_test_one' => 'text for node 2',
+      ),
+    );
+
+    foreach ($database_contents as $k => $row) {
       $this->databaseContents['node_revisions'][$k]['nid'] = $row['nid'];
       $this->databaseContents['node_revisions'][$k]['vid'] = $row['vid'];
       $this->databaseContents['node_revisions'][$k]['uid'] = $row['uid'];
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionTest.php
index a83c70d..eccee47 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionTest.php
@@ -25,9 +25,7 @@ class NodeRevisionTest extends MigrateSqlSourceTestCase {
     'idlist' => array(),
     // The fake configuration for the source.
     'source' => array(
-      'node_type' => 'page',
       'plugin' => 'd6_node_revision',
-      'bundle' => 'page',
     ),
     'sourceIds' => array(
       'vid' => array(
@@ -143,7 +141,7 @@ class NodeRevisionTest extends MigrateSqlSourceTestCase {
     array(
       // Node fields.
       'nid' => 2,
-      'type' => 'page',
+      'type' => 'article',
       'language' => 'en',
       'status' => 1,
       'created' => 1279290908,
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php
index c0e528b..db47be4 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php
@@ -25,7 +25,6 @@ class NodeTest extends MigrateSqlSourceTestCase {
     'idlist' => array(),
     // The fake configuration for the source.
     'source' => array(
-      'bundle' => 'page',
       'plugin' => 'd6_node',
     ),
   );
