diff --git a/bean_entitycache/bean_entitycache.info b/bean_entitycache/bean_entitycache.info
index 0675e44..2fdffc9 100644
--- a/bean_entitycache/bean_entitycache.info
+++ b/bean_entitycache/bean_entitycache.info
@@ -4,5 +4,7 @@ description = "Integrates the Bean module with the Entitycache module"
 core = 7.x
 package = Performance and scalability
 
+files[] = includes/bean_entitycache.core.inc
+
 dependencies[] = bean
 dependencies[] = entitycache
diff --git a/bean_entitycache/bean_entitycache.module b/bean_entitycache/bean_entitycache.module
index 9423e29..e1b8ebd 100644
--- a/bean_entitycache/bean_entitycache.module
+++ b/bean_entitycache/bean_entitycache.module
@@ -13,6 +13,9 @@ function bean_entitycache_entity_info_alter(&$entity_info) {
   $entity_info['bean']['entity cache'] = TRUE;
   // Which means that we don't need to cache the fields.
   $entity_info['bean']['field cache'] = FALSE;
+  // Provide bean entitycache controller so other modules using entitycache can
+  // work with beans.
+  $entity_info['bean']['controller class'] = 'BeanEntityCacheAPIController';
 }
 
 /**
diff --git a/bean_entitycache/includes/bean_entitycache.core.inc b/bean_entitycache/includes/bean_entitycache.core.inc
new file mode 100644
index 0000000..be6c991
--- /dev/null
+++ b/bean_entitycache/includes/bean_entitycache.core.inc
@@ -0,0 +1,10 @@
+<?php
+
+class BeanEntityCacheAPIController extends BeanEntityAPIController {
+
+  public function resetCache(array $ids = NULL) {
+    EntityCacheControllerHelper::resetEntityCache($this, $ids);
+    parent::resetCache($ids);
+  }
+
+}
diff --git a/includes/translation.handler.bean.inc b/includes/translation.handler.bean.inc
index 19b6c0f..f1d86e0 100644
--- a/includes/translation.handler.bean.inc
+++ b/includes/translation.handler.bean.inc
@@ -5,7 +5,6 @@
  * Bean translation handler for the translation module.
  */
 
-
 /**
  * Bean translation handler.
  *
@@ -17,6 +16,46 @@ class EntityTranslationBeanHandler extends EntityTranslationDefaultHandler {
     parent::__construct('bean', $entity_info, $entity);
   }
 
+  public function removeTranslation($langcode) {
+    $translations_key = $this->getTranslationsKey();
+    if (empty($translations_key)) {
+      return;
+    }
+
+    $hook_info = array('hook' => 'delete');
+    if (!empty($langcode)) {
+      unset($this->entity->{$translations_key}->data[$langcode]);
+      // Keep track that the current translation has been removed.
+      $this->entity->{$translations_key}->hook[$langcode] = $hook_info;
+    }
+    elseif (!empty($this->entity->{$translations_key}->data)) {
+      $keys = array_keys($this->entity->{$translations_key}->data);
+      $values = array_fill(0, count($keys), $hook_info);
+      // Keep track that the all translations have been removed.
+      $this->entity->{$translations_key}->hook = array_combine($keys, $values);
+      // Actually remove translations.
+      $this->entity->{$translations_key}->data = array();
+    }
+
+    // Remove field translations.
+    foreach (field_info_instances($this->entityType, $this->bundle) as $instance) {
+      $field_name = $instance['field_name'];
+      $field = field_info_field($field_name);
+
+      if ($field['translatable']) {
+        if (!empty($langcode)) {
+          $this->entity->{$field_name}[$langcode] = array();
+        }
+        else {
+          $this->entity->{$field_name} = array();
+        }
+      }
+    }
+
+    // Clear the cache for this entity.
+    entity_get_controller($this->entityType)->resetCache(array($this->getEntityBid()));
+  }
+
   public function getAccess($op) {
     return entity_access($op, 'bean', $this->entity);
   }
@@ -27,4 +66,12 @@ class EntityTranslationBeanHandler extends EntityTranslationDefaultHandler {
     }
     return parent::getEntityId();
   }
+
+  protected function getEntityBid() {
+    if (isset($this->entity->entityId)) {
+      return $this->entity->entityId;
+    }
+    return parent::getEntityId();
+  }
+
 }
