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 d7579fd..3099516 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
@@ -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,116 @@ 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) {
+        // @TODO Massage the field values so that field_foo_value becomes
+        // just 'value', and so forth.
+        $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;
+  }
+
+  /**
+   * @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 @($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['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');
+    }
+    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);
+      }
+
+      // Each 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/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php
index a108f61..65b19ff 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
@@ -108,6 +108,42 @@ 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:6:{s:6:"prefix";s:3:"id-";s:6:"suffix";s:0:"";s:3:"min";s:3:"100";s:3:"max";s:3:"200";s:14:"allowed_values";s:0:"";s:18:"allowed_values_php";s: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:2:{s:13:"default_value";a:1:{i:0;a:2:{s:5:"value";s:3:"101";s:14:"_error_element";s:47:"default_value_widget][field_test_four][0][value";}}s:17:"default_value_php";N;}',
+        'display_settings' => 'a:7:{s:6:"weight";s:1:"3";s:6:"parent";s:0:"";i:5;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:5:"label";a:1:{s:6:"format";s:5:"above";}s:6:"teaser";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:4:"full";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:4;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i: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',
+      ),
+    );
     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];
@@ -133,4 +169,62 @@ protected function setUp() {
     parent::setUp();
   }
 
+  /**
+   * Mocks a Row object representing a node.
+   */
+  protected function getMockRow() {
+    $row = $this->getMockBuilder('\Drupal\migrate\Row')
+      ->disableOriginalConstructor()
+      ->getMock();
+
+    $row->method('getSourceProperty')->willReturnMap([
+      ['type', 'story'],
+      ['nid', 5],
+      ['vid', 5],
+    ]);
+
+    return $row;
+  }
+
+  /**
+   * Tests retrieving CCK field values for a node.
+   */
+  public function testGetFieldValues() {
+    $method = (new \ReflectionClass($this->source))->getMethod('getFieldValues');
+    $method->setAccessible(TRUE);
+
+    $values = $method->invoke($this->source, $this->getMockRow());
+    $this->assertSame('3.14159', $values['field_test_four'][0]['field_test_four_value']);
+  }
+
+  /**
+   * Tests retrieving CCK field and field instance definitions.
+   */
+  public function testGetFieldInfo() {
+    $method = (new \ReflectionClass($this->source))->getMethod('getFieldInfo');
+    $method->setAccessible(TRUE);
+
+    $info = $method->invoke($this->source, 'story');
+    $this->assertInternalType('array', $info['field_test_four']);
+    // @TODO Assert moar thangs!
+  }
+
+  /**
+   * Tests retrieving raw CCK field data for a node.
+   */
+  public function testGetCckData() {
+    $method = (new \ReflectionClass($this->source))->getMethod('getCckData');
+    $method->setAccessible(TRUE);
+
+    $field = [
+      'field_name' => 'field_test_four',
+      'db_columns' => [
+        'value' => [],
+      ],
+    ];
+
+    $cck_data = $method->invoke($this->source, $field, $this->getMockRow());
+    $this->assertSame('3.14159', $cck_data[0]['field_test_four_value']);
+  }
+
 }
