diff --git a/feeds.info b/feeds.info
index 22b8456..7179ebf 100644
--- a/feeds.info
+++ b/feeds.info
@@ -14,6 +14,7 @@ files[] = libraries/PuSHSubscriber.inc
 files[] = tests/feeds.test
 files[] = tests/feeds_date_time.test
 files[] = tests/feeds_mapper_date.test
+files[] = tests/feeds_mapper_date_multiple.test
 files[] = tests/feeds_mapper_field.test
 files[] = tests/feeds_mapper_file.test
 files[] = tests/feeds_mapper.test
diff --git a/mappers/date.inc b/mappers/date.inc
index 6cc5bca..c2f2ace 100644
--- a/mappers/date.inc
+++ b/mappers/date.inc
@@ -43,21 +43,31 @@ function date_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_nam
  *   The value to be mapped. Should be either a (flexible) date string
  *   or a FeedsDateTimeElement object.
  *
- * @todo Support array of values for dates.
  */
 function date_feeds_set_target($source, $entity, $target, $feed_element) {
   list($field_name, $sub_field) = explode(':', $target, 2);
   if (!($feed_element instanceof FeedsDateTimeElement)) {
     if (is_array($feed_element)) {
-      $feed_element = $feed_element[0];
-    }
-    if ($sub_field == 'end') {
-      $feed_element = new FeedsDateTimeElement(NULL, $feed_element);
-    }
-    else {
-      $feed_element = new FeedsDateTimeElement($feed_element, NULL);
+      $delta = 0;
+        foreach ($feed_element as $f) {
+          if ($sub_field == 'end') {
+            $array_element = new FeedsDateTimeElement(NULL, $f);
+          }
+          else {
+            $array_element = new FeedsDateTimeElement($f, NULL);
+          }
+          $array_element->buildDateField($entity, $field_name, $delta);
+          $delta++;
+        }
+      }
+      else {
+      if ($sub_field == 'end') {
+        $feed_element = new FeedsDateTimeElement(NULL, $feed_element);
+      }
+      else {
+        $feed_element = new FeedsDateTimeElement($feed_element, NULL);
+      }
+    $feed_element->buildDateField($entity, $field_name);
     }
   }
-  $feed_element->buildDateField($entity, $field_name);
-
 }
diff --git a/plugins/FeedsParser.inc b/plugins/FeedsParser.inc
index ac53bc4..3d6fec3 100644
--- a/plugins/FeedsParser.inc
+++ b/plugins/FeedsParser.inc
@@ -433,13 +433,13 @@ class FeedsDateTimeElement extends FeedsElement {
    * Helper method for buildDateField(). Build a FeedsDateTimeElement object
    * from a standard formatted node.
    */
-  protected static function readDateField($entity, $field_name) {
+  protected static function readDateField($entity, $field_name, $delta = 0) {
     $ret = new FeedsDateTimeElement();
-    if (isset($entity->{$field_name}['und'][0]['date']) && $entity->{$field_name}['und'][0]['date'] instanceof FeedsDateTime) {
-      $ret->start = $entity->{$field_name}['und'][0]['date'];
+    if (isset($entity->{$field_name}['und'][$delta]['date']) && $entity->{$field_name}['und'][$delta]['date'] instanceof FeedsDateTime) {
+      $ret->start = $entity->{$field_name}['und'][$delta]['date'];
     }
-    if (isset($entity->{$field_name}['und'][0]['date2']) && $entity->{$field_name}['und'][0]['date2'] instanceof FeedsDateTime) {
-      $ret->end = $entity->{$field_name}['und'][0]['date2'];
+    if (isset($entity->{$field_name}['und'][$delta]['date2']) && $entity->{$field_name}['und'][$delta]['date2'] instanceof FeedsDateTime) {
+      $ret->end = $entity->{$field_name}['und'][$delta]['date2'];
     }
     return $ret;
   }
@@ -452,10 +452,10 @@ class FeedsDateTimeElement extends FeedsElement {
    * @param $field_name
    *   The name of the field to build.
    */
-  public function buildDateField($entity, $field_name) {
+  public function buildDateField($entity, $field_name, $delta = 0) {
     $info = field_info_field($field_name);
 
-    $oldfield = FeedsDateTimeElement::readDateField($entity, $field_name);
+    $oldfield = FeedsDateTimeElement::readDateField($entity, $field_name, $delta);
     // Merge with any preexisting objects on the field; we take precedence.
     $oldfield = $this->merge($oldfield);
     $use_start = $oldfield->start;
@@ -491,24 +491,24 @@ class FeedsDateTimeElement extends FeedsElement {
       $entity->{$field_name} = array('und' => array());
     }
     if ($use_start) {
-      $entity->{$field_name}['und'][0]['timezone'] = $use_start->getTimezone()->getName();
-      $entity->{$field_name}['und'][0]['offset'] = $use_start->getOffset();
+      $entity->{$field_name}['und'][$delta]['timezone'] = $use_start->getTimezone()->getName();
+      $entity->{$field_name}['und'][$delta]['offset'] = $use_start->getOffset();
       $use_start->setTimezone($db_tz);
-      $entity->{$field_name}['und'][0]['date'] = $use_start;
+      $entity->{$field_name}['und'][$delta]['date'] = $use_start;
       /**
        * @todo the date_type_format line could be simplified based upon a patch
        *   DO issue #259308 could affect this, follow up on at some point.
        *   Without this, all granularity info is lost.
        *   $use_start->format(date_type_format($field['type'], $use_start->granularity));
        */
-      $entity->{$field_name}['und'][0]['value'] = $use_start->format(date_type_format($info['type']));
+      $entity->{$field_name}['und'][$delta]['value'] = $use_start->format(date_type_format($info['type']));
     }
     if ($use_end) {
       // Don't ever use end to set timezone (for now)
-      $entity->{$field_name}['und'][0]['offset2'] = $use_end->getOffset();
+      $entity->{$field_name}['und'][$delta]['offset2'] = $use_end->getOffset();
       $use_end->setTimezone($db_tz);
-      $entity->{$field_name}['und'][0]['date2'] = $use_end;
-      $entity->{$field_name}['und'][0]['value2'] = $use_end->format(date_type_format($info['type']));
+      $entity->{$field_name}['und'][$delta]['date2'] = $use_end;
+      $entity->{$field_name}['und'][$delta]['value2'] = $use_end->format(date_type_format($info['type']));
     }
   }
 }
diff --git a/tests/feeds/multi-date.xml b/tests/feeds/multi-date.xml
new file mode 100644
index 0000000..13a705d
--- /dev/null
+++ b/tests/feeds/multi-date.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<items>
+   <item>
+      <title>2 date values</title>
+      <guid>123456789</guid>
+      <date>Wed, 06 Jan 2010 15:05:00 GMT+00:00</date>
+      <date>Thu, 07 Jan 2010 15:08:00 GMT+00:00</date>
+   </item>
+   <item>
+      <title>4 date values</title>
+      <guid>1234567890</guid>
+      <date>Wed, 06 Jan 2010 15:00:00 GMT+00:00</date>
+      <date>Thu, 07 Jan 2010 15:00:00 GMT+00:00</date>
+      <date>Fri, 08 Jan 2010 15:00:00 GMT+00:00</date>
+      <date>Sat, 09 Jan 2010 15:00:00 GMT+00:00</date>
+   </item>
+   <item>
+      <title>Bogus date values</title>
+      <guid>1234567892</guid>
+      <date>Wed, 36 Jan 2010 15:00:00 GMT+00:00</date>
+      <date>Foo, 07 Bar 2010 95:00:00 GMT+00:00</date>
+      <date>This is just pure bogus. No date here!</date>
+   </item>
+   <item>
+      <title>Single date value</title>
+      <guid>1234567894</guid>
+      <date>Wed, 06 Jan 2010 14:00:00 GMT+00:00</date>
+   </item>
+</items>
diff --git a/tests/feeds_mapper_date.test b/tests/feeds_mapper_date.test
index f9020e0..d8c3f10 100644
--- a/tests/feeds_mapper_date.test
+++ b/tests/feeds_mapper_date.test
@@ -75,12 +75,12 @@ class FeedsMapperDateTestCase extends FeedsMapperTestCase {
 
     // Check the imported nodes.
     $values = array(
-      '01/06/2010 - 19:26',
-      '01/06/2010 - 10:21',
-      '01/06/2010 - 13:42',
-      '01/06/2010 - 06:05',
-      '01/06/2010 - 11:26',
-      '01/07/2010 - 00:26',
+      '01/06/2010 - 19:30',
+      '01/06/2010 - 10:15',
+      '01/06/2010 - 13:45',
+      '01/06/2010 - 06:00',
+      '01/06/2010 - 11:30',
+      '01/07/2010 - 00:30',
       );
     for ($i = 1; $i <= 6; $i++) {
       $this->drupalGet("node/$i/edit");
diff --git a/tests/feeds_mapper_date_multiple.test b/tests/feeds_mapper_date_multiple.test
new file mode 100644
index 0000000..371a170
--- /dev/null
+++ b/tests/feeds_mapper_date_multiple.test
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ * @file
+ * Test case for CCK date field mapper mappers/date.inc.
+ */
+
+/**
+ * Class for testing Feeds <em>content</em> mapper.
+ *
+ * @todo: Add test method iCal
+ * @todo: Add test method for end date
+ */
+class FeedsMapperDateMultipleTestCase extends FeedsMapperTestCase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Mapper: Date, multi value fields',
+      'description' => 'Test Feeds Mapper support for CCK multi valiue Date fields.',
+      'group' => 'Feeds',
+      'dependencies' => array('date', 'feeds_xpathparser'),
+    );
+  }
+
+  public function setUp() {
+    parent::setUp(array('date_api', 'date', 'feeds_xpathparser'));
+    variable_set('date_default_timezone', 'UTC');
+  }
+
+  /**
+   * Basic test loading a single entry CSV file.
+   */
+  public function test() {
+    $this->drupalGet('admin/config/regional/settings');
+
+    // Create content type.
+    $typename = $this->createContentType(array(), array(
+      'date' => 'date',
+    ));
+    // Try to import multiple dates to a multi-value field.
+    $edit = array(
+      'field[cardinality]' => -1,
+    );
+    // Edit the same content type as already is set up.
+    $this->drupalPost('admin/structure/types/manage/' . $typename . '/fields/field_date', $edit, 'Save settings');
+    $this->assertText('Saved date_date_label configuration');
+    $this->drupalGet('admin/structure/types/manage/' . $typename . '/fields/field_date');
+
+    // Create and configure importer.
+    $this->createImporterConfiguration('Multi dates', 'multidates');
+    $this->setSettings('multidates', NULL, array('content_type' => '', 'import_period' => FEEDS_SCHEDULE_NEVER));
+    $this->setPlugin('multidates', 'FeedsFileFetcher');
+    $edit = array(
+      'plugin_key' => 'FeedsXPathParserXML',
+    );
+    $this->drupalPost('admin/structure/feeds/multidates/parser', $edit, 'Save');
+    $this->setSettings('multidates', 'FeedsNodeProcessor', array('content_type' => $typename));
+    $this->addMappings('multidates', array(
+      array(
+        'source' => 'xpathparser:0',
+        'target' => 'title',
+      ),
+      array(
+        'source' => 'xpathparser:1',
+        'target' => 'guid',
+      ),
+      array(
+        'source' => 'xpathparser:2',
+        'target' => 'field_date:start',
+      ),
+    ));
+
+    $edit = array(
+      'xpath[context]' => '//item',
+      'xpath[sources][xpathparser:0]' => 'title',
+      'xpath[sources][xpathparser:1]' => 'guid',
+      'xpath[sources][xpathparser:2]' => 'date',
+    );
+    $this->drupalPost('admin/structure/feeds/multidates/settings/FeedsXPathParserXML', $edit, 'Save');
+
+    $edit = array(
+      'allowed_extensions' => 'xml',
+    );
+    $this->drupalPost('admin/structure/feeds/multidates/settings/FeedsFileFetcher', $edit, 'Save');
+
+    // Import XML file.
+    $this->importFile('multidates', $this->absolutePath() . '/tests/feeds/multi-date.xml');
+    $this->assertText('Created 4 nodes');
+
+    // Check the imported nodes.
+    $values = array(
+      '1' => array(
+        '01/06/2010 - 15:00',
+        '01/07/2010 - 15:15',
+      ),
+      '2' => array(
+        '01/06/2010 - 15:00',
+        '01/07/2010 - 15:00',
+        '01/08/2010 - 15:00',
+        '01/09/2010 - 15:00',
+      ),
+      '3' => array(
+        // Well this is the bogus date node. Will have "current" date as value,
+        // so just checking that it exists 3 of them.
+        '',
+        '',
+        '',
+      ),
+      '4' => array(
+        '01/06/2010 - 14:00',
+      )
+    );
+    foreach ($values as $v => $key) {
+      $this->drupalGet("node/$v/edit");
+      foreach ($key as $delta => $value) {
+        $this->assertFieldById('edit-field-date-und-' . $delta . '-value-date', $value);
+      }
+    }
+  }
+}
