diff --git a/entityreference.module b/entityreference.module
index e0efa7e..0be5337 100644
--- a/entityreference.module
+++ b/entityreference.module
@@ -40,6 +40,8 @@ function entityreference_field_info() {
     'settings' => array(
       // Default to the core target entity type node.
       'target_type' => 'node',
+      // Don't cascade on delete
+      'cascade_on_delete' => 0,
       // The handler for this field.
       'handler' => 'base',
       // The handler settings.
@@ -216,6 +218,18 @@ function entityreference_field_presave($entity_type, $entity, $field, $instance,
   foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) {
     $handler->presave($entity_type, $entity, $field, $instance, $langcode, $items);
   }
+  
+  // Delete removed referenced entites if cascade on delete
+  if($field['settings']['cascade_on_delete']) {
+    list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
+    //TODO: how load revisions if conditions is depricated?
+    if(!empty($id)) {
+      $saved_entity = current(entity_load($entity_type, array($id)));
+      $saved_items = isset($saved_entity->{$field['field_name']}) ? field_get_items($entity_type, $saved_entity, $field['field_name']) : array();
+      $removed_items = array_udiff($saved_items, $items, '_entityreference_items_compare');
+      _entityreference_delete_multiple($removed_items);
+    }
+  }
 }
 
 /**
@@ -246,8 +260,29 @@ function entityreference_field_delete($entity_type, $entity, $field, $instance,
   foreach (entityreference_get_behavior_handlers($field, $instance) as $handler) {
     $handler->delete($entity_type, $entity, $field, $instance, $langcode, $items);
   }
+  // Delete removed referenced entites if cascade on delete
+  if($field['settings']['cascade_on_delete']) {
+    _entityreference_delete_multiple($items);
+  }
+}
+
+//TODO: right now we don't check if entity is referenced to somewhere else, but assume a one-to-one or one-to-many relation, possible to fix this?
+function _entityreference_delete_multiple($items) {
+  $delete = array();
+  foreach($items as $item) {
+    $delete[$item['target_type']][] = $item['target_id'];
+  }
+  foreach($delete as $target_type => $ids) {
+    entity_delete_multiple($target_type, $ids);
+  }
+}
+
+function _entityreference_items_compare($item_a, $item_b) {
+  $result = strcmp($item_a['target_type'], $item_b['target_type']);
+  return $result ? $result : strcmp($item_a['target_id'], $item_b['target_id']);
 }
 
+
 /**
  * Implements hook_field_settings_form().
  */
@@ -277,6 +312,13 @@ function entityreference_field_settings_form($field, $instance, $has_data) {
     '#limit_validation_errors' => array(),
   );
 
+  $form['cascade_on_delete'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Cascade on delete'),
+    '#description' => t('Delete referenced entities when items are removed from this field. They will be deleted even if references to these entities exists in other field instances!'),
+    '#default_value' => $field['settings']['cascade_on_delete'],
+  );
+
   ctools_include('plugins');
   $handlers = ctools_get_plugins('entityreference', 'selection');
   uasort($handlers, 'ctools_plugin_sort');
