diff --git fullcalendar.module fullcalendar.module
index 13c0324..17e1db5 100644
--- fullcalendar.module
+++ fullcalendar.module
@@ -231,6 +231,7 @@
  * Prepares variables for template file invoked for node row type.
  */
 function template_preprocess_views_view_node_fullcalendar(&$vars) {
+
   // If the view has no availble nodes, exit.
   if (isset($vars['view']->empty_text)) {
     $vars['empty_text'] = $vars['view']->empty_text;
@@ -240,33 +241,56 @@
   // Fetch the available fields in this view.
   $fields = $vars['view']->display_handler->get_field_labels();
 
-  // Check if the entity is empty.
-  $entity = $vars['row']->_field_data[$vars['field_alias']]['entity'];
-  if (empty($entity)) {
+  // Check if we have field data.
+  if (empty($vars['row']->_field_data)) {
      return;
    }
+
+  // Check if the entity is empty.
+  $entity = $vars['row']->_field_data[$vars['view']->base_field]['entity'];
 
   $vars['data'] = array(); // Contains the start, end & allDay values.
 
-  $entity_type = $vars['row']->_field_data[$vars['field_alias']]['entity_type'];
+  $entity->id = $vars['row']->{$vars['view']->base_field};
+  $entity_type = $vars['row']->_field_data[$vars['view']->base_field]['entity_type'];
   $entity->editable = _fullcalendar_update_access($entity);
+
+  // Ensure every entity has a type field.
+  if(!isset($entity->type)) {
+    $entity->type = $entity_type;
+  }
   $entity->class = theme('fullcalendar_classname', array('entity' => $entity));
 
   // Default URL.
-  $entity->url = 'node/' . $vars['row']->{$vars['field_alias']};
+  $entity->url = $entity_type . '/' . $vars['row']->{$vars['view']->base_field};
   // Fetch custom URL if needed.
   if (!empty($vars['options']['custom']['fc_url'])) {
-    $url_field = field_get_items($entity_type, $entity, $fields[$vars['options']['custom']['fc_url_field']]);
-    if (!empty($url_field[0]['value'])) {
-      $entity->url = $url_field[0]['value'];
+    $field_name = $vars['options']['custom']['fc_url_field'];
+    if (!empty($entity->$field_name)) {
+      $entity->url = $entity->$field_name;
+    }
+    else {
+      $url_field = field_get_items($entity_type, $entity, $fields[$field_name]);
+      if (!empty($url_field[0]['value'])) {
+        $entity->url = $url_field[0]['value'];
+      }
     }
   }
 
   // Fetch custom title if needed.
+  if (!isset($entity->title)) {
+    $entity->title = '';
+  }
   if (!empty($vars['options']['custom']['fc_title'])) {
-    $title_field = field_get_items($entity_type, $entity, $fields[$vars['options']['custom']['fc_title_field']]);
-    if (!empty($title_field[0]['value'])) {
-      $entity->title = $title_field[0]['value'];
+    $field_name = $vars['options']['custom']['fc_title_field'];
+    if (!empty($entity->$field_name)) {
+      $entity->title = $entity->$field_name;
+    }
+    else {
+      $title_field = field_get_items($entity_type, $entity, $fields[$field_name]);
+      if (!empty($title_field[0]['value'])) {
+        $entity->title = $title_field[0]['value'];
+      }
     }
   }
 
@@ -279,9 +303,10 @@
   }
 
   // Iterate through all available fields.
-  foreach (fullcalendar_date_fields($fields) as $field_name => $field) {
+  foreach (fullcalendar_date_fields($fields) as $field_name => $field) { 
     $instance = field_info_instance($entity_type, $field_name, $entity->type);
     $items = field_get_items($entity_type, $entity, $field_name);
+
     // Filter fields without value.
     if (!empty($items)) {
       foreach ($items as $index => $item) {
@@ -328,7 +353,8 @@
     'allDay' => date_field_all_day($field, $instance, $date1, $date2),
     'start' => $date1,
     'end' => $date2,
-    'nid' => $entity->nid,
+    'id' => $entity->id,
+    'bundle' => $entity->type,
     'cn' => $entity->class,
     'title' => $entity->title,
     'class' => 'fullcalendar_event_details',
diff --git fullcalendar.views.js fullcalendar.views.js
index c6ed08a..441cacf 100644
--- fullcalendar.views.js
+++ fullcalendar.views.js
@@ -62,7 +62,8 @@
           events.push({
             field: $(this).attr('field'),
             index: $(this).attr('index'),
-            nid: $(this).attr('nid'),
+            id: $(this).attr('id'),
+            bundle: $(this).attr('bundle'),
             title: $(this).attr('title'),
             start: $(this).attr('start'),
             end: $(this).attr('end'),
@@ -77,14 +78,14 @@
       callback(events);
     },
     eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc) {
-      $.post(Drupal.settings.basePath + 'fullcalendar/ajax/update/drop/'+ event.nid,
-        'field=' + event.field + '&index=' + event.index + '&day_delta=' + dayDelta + '&minute_delta=' + minuteDelta + '&all_day=' + allDay,
+      $.post(Drupal.settings.basePath + 'fullcalendar/ajax/update/drop/'+ event.id,
+        'field=' + event.field + '&bundle=' + event.bundle + '&index=' + event.index + '&day_delta=' + dayDelta + '&minute_delta=' + minuteDelta + '&all_day=' + allDay,
         fullcalendarUpdate);
       return false;
     },
     eventResize: function(event, dayDelta, minuteDelta, revertFunc) {
-      $.post(Drupal.settings.basePath + 'fullcalendar/ajax/update/resize/'+ event.nid,
-        'field=' + event.field + '&index=' + event.index + '&day_delta=' + dayDelta + '&minute_delta=' + minuteDelta,
+      $.post(Drupal.settings.basePath + 'fullcalendar/ajax/update/drop/'+ event.id,
+        'field=' + event.field + '&bundle=' + event.bundle + '&index=' + event.index + '&day_delta=' + dayDelta + '&minute_delta=' + minuteDelta + '&all_day=' + allDay,
         fullcalendarUpdate);
       return false;
     }
diff --git views_plugin_node_fullcalendar.inc views_plugin_node_fullcalendar.inc
index 5ddaa6d..bc872ef 100644
--- views_plugin_node_fullcalendar.inc
+++ views_plugin_node_fullcalendar.inc
@@ -12,9 +12,6 @@
  * Most of the code on this object is in the theme function.
  */
 class views_plugin_node_fullcalendar extends views_plugin_row {
-  // Basic properties that let the row style follow relationships.
-  var $base_table = 'node';
-  var $base_field = 'nid';
 
   function option_definition() {
     $options = parent::option_definition();
@@ -95,7 +92,6 @@
       'view' => $this->view,
       'options' => $this->options,
       'row' => $row,
-      'field_alias' => $this->field_alias,
     ));
   }
 }
