diff --git a/core/modules/node/src/Plugin/migrate/source/d6/Node.php b/core/modules/node/src/Plugin/migrate/source/d6/Node.php
index 038c479..29f6745 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/Node.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/Node.php
@@ -33,6 +33,13 @@ class Node extends DrupalSqlBase implements SourceEntityInterface {
   protected $filterDefaultFormat;
 
   /**
+   * Cached field and field instance definitions.
+   *
+   * @var array
+   */
+  protected $fieldInfo;
+
+  /**
    * {@inheritdoc}
    */
   public function query() {
@@ -115,10 +122,131 @@ public function prepareRow(Row $row) {
     if ($row->getSourceProperty('format') === '0') {
       $row->setSourceProperty('format', $this->filterDefaultFormat);
     }
+
+    if ($this->moduleExists('content') && $this->getModuleSchemaVersion('content') >= 6001) {
+      foreach ($this->getFieldValues($row) as $field => $values) {
+        foreach ($values as $delta => $item) {
+          foreach ($item as $column => $value) {
+            if (strpos($column, $field) === 0) {
+              $key = substr($column, strlen($field) + 1);
+              $values[$delta][$key] = $value;
+              unset($values[$delta][$column]);
+            }
+          }
+        }
+        $row->setSourceProperty($field, $values);
+      }
+    }
+
     return parent::prepareRow($row);
   }
 
   /**
+   * Gets CCK field values for a node.
+   *
+   * @param \Drupal\migrate\Row $node
+   *   The node.
+   *
+   * @return array
+   *   CCK field values, keyed by field name.
+   */
+  protected function getFieldValues(Row $node) {
+    $values = [];
+    foreach ($this->getFieldInfo($node->getSourceProperty('type')) as $field => $info) {
+      $values[$field] = $this->getCckData($info, $node);
+    }
+    return $values;
+  }
+
+  /**
+   * Gets CCK field and instance definitions from the database.
+   *
+   * @param string $node_type
+   *   The node type for which to get field info.
+   *
+   * @return array
+   *   Field and instance information for the node type, keyed by field name.
+   */
+  protected function getFieldInfo($node_type) {
+    if (!isset($this->fieldInfo)) {
+      $this->fieldInfo = [];
+
+      // Query the database directly for all CCK field info.
+      $query = $this->select('content_node_field_instance', 'cnfi');
+      $query->join('content_node_field', 'cnf', 'cnf.field_name = cnfi.field_name');
+      $query->fields('cnfi');
+      $query->fields('cnf');
+
+      foreach ($query->execute() as $field) {
+        $this->fieldInfo[ $field['type_name'] ][ $field['field_name'] ] = $field;
+      }
+
+      foreach ($this->fieldInfo as $type => $fields) {
+        foreach ($fields as $field => $info) {
+          foreach ($info as $property => $value) {
+            if ($property == 'db_columns' || preg_match('/_settings$/', $property)) {
+              $this->fieldInfo[$type][$field][$property] = unserialize($value);
+            }
+          }
+        }
+      }
+    }
+
+    return isset($this->fieldInfo[$node_type]) ? $this->fieldInfo[$node_type] : [];
+  }
+
+  /**
+   * Retrieves raw CCK field data for a node.
+   *
+   * @param array $field
+   *   A field and instance definition from getFieldInfo().
+   * @param \Drupal\migrate\Row $node
+   *   The node.
+   *
+   * @return array
+   *   The field values, keyed by delta.
+   */
+  protected function getCckData(array $field, Row $node) {
+    $field_table = 'content_' . $field['field_name'];
+    $node_table = 'content_type_' . $node->getSourceProperty('type');
+
+    /** @var \Drupal\Core\Database\Schema $db */
+    $db = $this->getDatabase()->schema();
+
+    if ($db->tableExists($field_table)) {
+      $query = $this->select($field_table, 't')->fields('t');
+
+      // If the delta column does not exist, add it as an expression to
+      // normalize the query results.
+      if (!$db->fieldExists($field_table, 'delta')) {
+        $query->addExpression(0, 'delta');
+      }
+    }
+    elseif ($db->tableExists($node_table)) {
+      $query = $this->select($node_table, 't');
+
+      // Add every DB column CCK knows about.
+      foreach (array_keys($field['db_columns']) as $column) {
+        $query->addField('t', $field['field_name'] . '_' . $column);
+      }
+
+      // Every row should have a delta of 0.
+      $query->addExpression(0, 'delta');
+    }
+
+    if (isset($query)) {
+      return $query
+        ->condition('nid', $node->getSourceProperty('nid'))
+        ->condition('vid', $node->getSourceProperty('vid'))
+        ->execute()
+        ->fetchAllAssoc('delta');
+    }
+    else {
+      return [];
+    }
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getIds() {
diff --git a/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeTest.php b/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeTest.php
index 4a5d7af..13131a1 100644
--- a/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeTest.php
+++ b/core/modules/node/tests/src/Unit/Plugin/migrate/source/d6/NodeTest.php
@@ -18,12 +18,8 @@ class NodeTest extends MigrateSqlSourceTestCase {
 
   const PLUGIN_CLASS = 'Drupal\node\Plugin\migrate\source\d6\Node';
 
-  // The fake Migration configuration entity.
   protected $migrationConfiguration = array(
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => array(),
-    // The fake configuration for the source.
     'source' => array(
       'plugin' => 'd6_node',
     ),
@@ -79,10 +75,9 @@ class NodeTest extends MigrateSqlSourceTestCase {
       'format' => 1,
     ),
     array(
-      // Node fields.
       'nid' => 5,
       'vid' => 5,
-      'type' => 'article',
+      'type' => 'story',
       'language' => 'en',
       'title' => 'node title 5',
       'uid' => 1,
@@ -101,6 +96,9 @@ class NodeTest extends MigrateSqlSourceTestCase {
       'log' => '',
       'timestamp' => 1279308993,
       'format' => 1,
+      'field_test_four' => array(
+        array('value' => '3.14159'),
+      ),
     ),
   );
 
@@ -108,6 +106,50 @@ class NodeTest extends MigrateSqlSourceTestCase {
    * {@inheritdoc}
    */
   protected function setUp() {
+    $this->databaseContents['content_node_field'] = array(
+      array(
+        'field_name' => 'field_test_four',
+        'type' => 'number_float',
+        'global_settings' => 'a:0:{}',
+        'required' => '0',
+        'multiple' => '0',
+        'db_storage' => '1',
+        'module' => 'number',
+        'db_columns' => 'a:1:{s:5:"value";a:3:{s:4:"type";s:5:"float";s:8:"not null";b:0;s:8:"sortable";b:1;}}',
+        'active' => '1',
+        'locked' => '0',
+      ),
+    );
+    $this->databaseContents['content_node_field_instance'] = array(
+      array(
+        'field_name' => 'field_test_four',
+        'type_name' => 'story',
+        'weight' => '3',
+        'label' => 'Float Field',
+        'widget_type' => 'number',
+        'widget_settings' => 'a:0:{}',
+        'display_settings' => 'a:0:{}',
+        'description' => 'An example float field.',
+        'widget_module' => 'number',
+        'widget_active' => '1',
+      ),
+    );
+    $this->databaseContents['content_type_story'] = array(
+      array(
+        'nid' => 5,
+        'vid' => 5,
+        'uid' => 5,
+        'field_test_four_value' => '3.14159',
+      ),
+    );
+    $this->databaseContents['system'] = array(
+      array(
+        'type' => 'module',
+        'name' => 'content',
+        'schema_version' => 6001,
+        'status' => TRUE,
+      ),
+    );
     foreach ($this->expectedResults as $k => $row) {
       foreach (array('nid', 'vid', 'title', 'uid', 'body', 'teaser', 'format', 'timestamp', 'log') as $field) {
         $this->databaseContents['node_revisions'][$k][$field] = $row[$field];
