diff --git a/migrate_d2d_example/node.inc b/migrate_d2d_example/node.inc
index b591349..04ba245 100644
--- a/migrate_d2d_example/node.inc
+++ b/migrate_d2d_example/node.inc
@@ -102,3 +102,90 @@ class ExampleArticleMigration extends ExampleNodeMigration {
     return $fields;
   }
 }
+
+class ExamplePollMigration extends ExampleNodeMigration {
+  public function __construct(array $arguments) {
+    parent::__construct($arguments);
+
+    $this->addFieldMapping('active')
+      ->defaultValue(1);
+    $this->addFieldMapping('runtime', 'seconds_to_run')
+      ->defaultValue(0);
+    $this->addFieldMapping('choice', 'choice')
+      ->description('choices populated in prepareRow()');
+    $this->addFieldMapping('votes', 'votes')
+      ->description('votes populated in prepareRow()');
+
+
+    $this->description = 'Migration of Poll data';
+    $this->dependencies = array('DrupalUser6Migration');
+    $this->map = new MigrateSQLMap($this->machineName,
+      array(
+        'nid' => array(
+          'type' => 'int',
+          'not null' => TRUE,
+          'description' => 'Drupal 6 POLL NID.',
+          'alias' => 'p',
+        )
+      ),
+      MigrateDestinationNode::getKeySchema()
+    );
+    $query = Database::getConnection('default', $this->sourceConnection)
+      ->select('poll', 'p');
+    $query->fields('p', array('nid', 'runtime', 'active'));
+    $query->leftJoin('node', 'n', 'p.nid = n.nid');
+    $query->fields('n', array('title', 'uid', 'status', 'created', 'changed', 'sticky'));
+    $query->condition('n.type', 'poll');
+    $query->orderBy('changed');
+    $this->source = new MigrateSourceSQL($query);
+    $this->destination = new MigrateDestinationNode('poll');
+    $this->highwaterField = array(
+      'name' => 'changed',
+      'type' => 'int',
+    );
+  }
+
+  public function prepareRow($row) {
+
+    $query = Database::getConnection('default', $this->sourceConnection)
+      ->select('poll_choices', 'pc')
+      ->fields('pc', array('chtext', 'chorder', 'chvotes', 'chid'))
+      ->condition('pc.nid', $row->nid);
+
+    $choices = $query->execute()->fetchAll();
+
+    $row->choice = array();
+    //dpm($row, 'row');
+    //dpm($choices, 'choices');
+    foreach ($choices as $choice) {
+      $row->choice[] = array(
+        'chid' => $choice->chid,
+        'chtext' => $choice->chtext,
+        'chvotes' => $choice->chvotes,
+        'weight' => $choice->chorder,
+      );
+    }
+
+    // Note that we won't know until much later what the chid is for each
+    // choice, so it's best to tie the votes to choices by text.
+    $query = Database::getConnection('default', $this->sourceConnection)
+      ->select('poll_votes', 'pv')
+      ->fields('pv', array('uid', 'hostname'))
+      ->condition('pv.nid', $row->nid);
+    $query->innerJoin('poll_choices', 'pc', 'pv.nid = pc.nid AND pv.chorder = pc.chorder');
+    $query->fields('pc', array('chtext', 'chid'));
+    $votes = $query->execute()->fetchAll();
+    //dpm($votes, 'all the votes');
+    $row->votes = array();
+    foreach ($votes as $vote) {
+      $row->votes[] = array(
+        'chtext' => $vote->chtext,
+        'uid' => $vote->uid,
+        'hostname' => $vote->hostname,
+        'timestamp' => 1330335487,  // Some static value as Drupal 6 had no such field
+      );
+    }
+
+    return TRUE;
+  }
+}
