diff --git a/addtocal.js b/addtocal.js
index 6f67362..4f9a0ef 100644
--- a/addtocal.js
+++ b/addtocal.js
@@ -16,7 +16,7 @@
       $('.addtocal', context).once('addtocal', function() {
         var $button = $(this),
             button_id = $button.attr('id'),
-            $menu = $('#' + button_id + '_menu');
+            $menu = $button.siblings('.item-list').find('.addtocal_menu');
 
         $button.bind('click.addtocal', function(e) {
           e.stopPropagation();
diff --git a/addtocal.module b/addtocal.module
index de0adf1..e0f2d21 100644
--- a/addtocal.module
+++ b/addtocal.module
@@ -12,27 +12,27 @@ function addtocal_menu() {
   $items = array();
   
   foreach (addtocal_get_addtocal_entities() as $entity_name => $values) {
-    $items[$entity_name . '/%entity_object/%/%/addtocal.ics'] = array(
+    $items[$entity_name . '/%entity_object/%/%/%/addtocal.ics'] = array(
       'load arguments' => array($entity_name),
       'title' => 'Download Event',
       'page callback' => 'addtocal_download_ics',
-      'page arguments' => array(1, 2, 3),
+      'page arguments' => array(1, 2, 3, 4),
       'access callback' => 'entity_access',
       'access arguments' => array('view', $entity_name, 1),
     );
-    $items[$entity_name . '/%entity_object/%/%/addtocal-google'] = array(
+    $items[$entity_name . '/%entity_object/%/%/%/addtocal-google'] = array(
       'load arguments' => array($entity_name),
       'title' => 'Download Event',
       'page callback' => 'addtocal_google_link',
-      'page arguments' => array(1, 2, 3),
+      'page arguments' => array(1, 2, 3, 4),
       'access callback' => 'entity_access',
       'access arguments' => array('view', $entity_name, 1),
     );
-    $items[$entity_name . '/%entity_object/%/%/addtocal-yahoo'] = array(
+    $items[$entity_name . '/%entity_object/%/%/%/addtocal-yahoo'] = array(
       'load arguments' => array($entity_name),
       'title' => 'Download Event',
       'page callback' => 'addtocal_yahoo_link',
-      'page arguments' => array(1, 2, 3),
+      'page arguments' => array(1, 2, 3, 4),
       'access callback' => 'entity_access',
       'access arguments' => array('view', $entity_name, 1),
     );
@@ -134,29 +134,28 @@ function addtocal_field_formatter_view($entity_type, $entity, $field, $instance,
   switch ($display['type']) {
     case 'addtocal_view':
       $element = array();
-      $date_element = date_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display);
+      $date_elements = date_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display);
       $view_mode = $display['settings']['view_mode'];
 
-      if ($date_element) {
-        $element[0]['date'] = $date_element[0];
+      list($entity_id) = entity_extract_ids($entity_type, $entity);
 
-        list($entity_id) = entity_extract_ids($entity_type, $entity);
+      $dates = field_get_items($entity_type, $entity, $field['field_name']);
 
-        $info = addtocal_extract_event_info($entity_type, $entity, $entity_id, $field['field_name'], $display);
-        $dates = field_get_items($entity_type, $entity, $field['field_name']);
+      foreach ($date_elements as $delta => $date_element) {
+        $info = addtocal_extract_event_info($entity_type, $entity, $entity_id, $field['field_name'], $display, $delta);
+        $element[$delta] = [
+          'date' => $date_element,
+        ];
+        $start_date = $dates[$delta]['value'];
 
-        $start_date = $dates[(count($dates) - 1)]['value'];
-
-         // Build URLs
-        $base_url = $entity_type . '/' . $entity_id . '/' . $field['field_name'] . '/' . $view_mode;
+        $base_url = $entity_type . '/' . $entity_id . '/' . $field['field_name'] . '/' . $view_mode . '/' . $delta;
         $ics_url = $base_url . '/addtocal.ics';
         $google_url = $base_url . '/addtocal-google';
         $yahoo_url = $base_url . '/addtocal-yahoo';
 
-        // Check setting for past events and show widget accordingly
         if (strtotime($start_date) >= time() ||
           ($display['settings']['past_events'] == TRUE && strtotime($start_date) < time())) {
-          $element[0] += addtocal_render(
+          $element[$delta] += addtocal_render(
             $entity_type,
             $entity_id,
             $info['start'],
@@ -168,10 +167,9 @@ function addtocal_field_formatter_view($entity_type, $entity, $field, $instance,
             $yahoo_url
           );
         }
-
-        return $element;
       }
 
+      return $element;
       break;
   }
 }
@@ -414,21 +412,22 @@ function addtocal_field_get_value($entity_type, $entity, $field_name) {
  * @param int $entity_id
  * @param $field_name
  * @param $display
+ * @param $delta
  *
  * @return array
  */
-function addtocal_extract_event_info($entity_type, $entity, $entity_id, $field_name, $display) {
+function addtocal_extract_event_info($entity_type, $entity, $entity_id, $field_name, $display, $delta) {
   $dates = field_get_items($entity_type, $entity, $field_name);
 
-  $start_date = $dates[0]['value'];
+  $start_date = $dates[$delta]['value'];
 
-  if (array_key_exists('value2', $dates[0])) {
-    $end_date = $dates[0]['value2'];
+  if (array_key_exists('value2', $dates[$delta])) {
+    $end_date = $dates[$delta]['value2'];
   } else {
     $end_date = $start_date;
   }
 
-  $timezone = $dates[0]['timezone_db'];
+  $timezone = $dates[$delta]['timezone_db'];
 
   if (isset($display['settings']['location_field'])) {
     $location = addtocal_field_get_value($entity_type, $entity, $display['settings']['location_field']);
@@ -580,7 +579,7 @@ function addtocal_rfc_3339_date($start, $end, $timezone) {
  * @param $field_name
  * @param $view_mode
  */
-function addtocal_download_ics($entity, $field_name, $view_mode) {
+function addtocal_download_ics($entity, $field_name, $view_mode, $delta) {
   drupal_add_http_header('Content-Type', 'application/calendar; charset=utf-8');
 
   // Set the filename.
@@ -598,7 +597,7 @@ function addtocal_download_ics($entity, $field_name, $view_mode) {
 
   // Get display and info.
   $display = addtocal_get_display($entity, $entity_type, $field_name, $view_mode);
-  $info = addtocal_extract_event_info($entity_type, $entity, $entity_id, $field_name, $display);
+  $info = addtocal_extract_event_info($entity_type, $entity, $entity_id, $field_name, $display, $delta);
 
   $url = isset($query['url']) ? $query['url'] : '';
   $description = $info['description'];
@@ -606,9 +605,9 @@ function addtocal_download_ics($entity, $field_name, $view_mode) {
   $title = $info['title'];
 
   $dates = field_get_items($entity_type, $entity, $field_name);
-  $start_date = $dates[0]['value'];
-  if (array_key_exists('value2', $dates[0])) {
-    $end_date = $dates[0]['value2'];
+  $start_date = $dates[$delta]['value'];
+  if (array_key_exists('value2', $dates[$delta])) {
+    $end_date = $dates[$delta]['value2'];
   } else {
     $end_date = $start_date;
   }
@@ -638,15 +637,16 @@ END:VCALENDAR';
  * @param $entity
  * @param $field_name
  * @param $view_mode
+ * @param $delta
  */
-function addtocal_google_link($entity, $field_name, $view_mode) {
+function addtocal_google_link($entity, $field_name, $view_mode, $delta) {
 
   // Get entity type from the current path
   $entity_type = arg(0);
 
   list($entity_id) = entity_extract_ids($entity_type, $entity);
   $display = addtocal_get_display($entity, $entity_type, $field_name, $view_mode);
-  $info = addtocal_extract_event_info($entity_type, $entity, $entity_id, $field_name, $display);
+  $info = addtocal_extract_event_info($entity_type, $entity, $entity_id, $field_name, $display, $delta);
 
   $rfc_dates = addtocal_rfc_3339_date($info['start'], $info['end'], $info['timezone']);
 
@@ -672,15 +672,16 @@ function addtocal_google_link($entity, $field_name, $view_mode) {
  * @param $entity
  * @param $field_name
  * @param $view_mode
+ * @param $delta
  */
-function addtocal_yahoo_link($entity, $field_name, $view_mode) {
+function addtocal_yahoo_link($entity, $field_name, $view_mode, $delta) {
 
   // Get entity type from the current path
   $entity_type = arg(0);
 
   list($entity_id) = entity_extract_ids($entity_type, $entity);
   $display = addtocal_get_display($entity, $entity_type, $field_name, $view_mode);
-  $info = addtocal_extract_event_info($entity_type, $entity, $entity_id, $field_name, $display);
+  $info = addtocal_extract_event_info($entity_type, $entity, $entity_id, $field_name, $display, $delta);
 
   $rfc_dates = addtocal_rfc_3339_date($info['start'], $info['end'], $info['timezone']);
 
