diff --git a/fieldable_panels_panes.install b/fieldable_panels_panes.install
index e5f8747..372be24 100644
--- a/fieldable_panels_panes.install
+++ b/fieldable_panels_panes.install
@@ -64,6 +64,13 @@ function fieldable_panels_panes_schema() {
         'description' => 'The category it will appear in the Add Content dialog under.',
         'type' => 'text',
       ),
+      'language' => array(
+        'description' => 'The language of this entity.',
+        'type' => 'varchar',
+        'length' => 32,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'view_access' => array(
         'type' => 'text',
         'size' => 'big',
@@ -210,3 +217,24 @@ function fieldable_panels_panes_update_7105() {
   db_add_field('fieldable_panels_panes', 'link', array('type' => 'int', 'size' => 'tiny', 'description' => 'Whether or not this entity title will link to another page.'));
   db_add_field('fieldable_panels_panes', 'path', array('type' => 'varchar', 'length' => 255, 'description' => 'The path the title should link to.'));
 }
+
+/*
+ * Add language column.
+ */
+function fieldable_panels_panes_update_7106(&$sandbox) {
+  $table = 'fieldable_panels_panes';
+  $field = 'language';
+
+  if (!db_field_exists($table, $field)) {
+    $schema = drupal_get_schema($table, TRUE);
+    db_add_field($table, $field, $schema['fields'][$field]);
+
+    db_update($table)
+      ->fields(array($field => LANGUAGE_NONE))
+      ->execute();
+
+    return t("Added $table.language field.");
+  }
+
+  return t("$table.language field already exists, updated skipped.");
+}
\ No newline at end of file
diff --git a/fieldable_panels_panes.module b/fieldable_panels_panes.module
index ca14b2a..fc07790 100644
--- a/fieldable_panels_panes.module
+++ b/fieldable_panels_panes.module
@@ -51,6 +51,35 @@ function fieldable_panels_panes_entity_info() {
         ),
       ),
 
+      'translation' => array(
+        'locale' => TRUE,
+        'entity_translation' => array(
+          'base path' => 'admin/structure/fieldable-panels-panes/view/%fieldable_panels_panes',
+          'path wildcard' => '%fieldable_panels_panes',
+        ),
+      ),
+
+      // Add title replacement support for translations.
+      'field replacement' => array(
+        'title' => array(
+          'field' => array(
+            'type' => 'text',
+            'cardinality' => 1,
+            'translatable' => TRUE,
+          ),
+          'instance' => array(
+            'label' => t('Title'),
+            'required' => TRUE,
+            'settings' => array(
+              'text_processing' => 0,
+            ),
+            'widget' => array(
+              'weight' => -5,
+            ),
+          ),
+        ),
+      ),
+
       // entity module callbacks
       'view callback' => 'entity_metadata_view_single',
       'creation callback' => 'fieldable_panels_panes_create',
@@ -760,6 +789,7 @@ function fieldable_panels_panes_get_base_context($entity = NULL) {
  */
 function fieldable_panels_panes_entity_edit_form($form, &$form_state) {
   $entity = $form_state['entity'];
+  $language = isset($entity->language) ? $entity->language : LANGUAGE_NONE;
 
   // fixes a bug in wysiwyg
   // oh wysiwyg. We need a better way to address this.
@@ -772,6 +802,37 @@ function fieldable_panels_panes_entity_edit_form($form, &$form_state) {
     '#weight' => -10,
   );
 
+  // Provide support for translations
+  if (module_exists('entity_translation') && entity_translation_enabled('fieldable_panels_pane')) {
+    // Entity Translation expects these keys to exist in the form in order to
+    // flag when translations are out of date.
+    $form['#entity_type'] = $entity->bundle;
+    $form['#' . $entity->bundle] = $entity;
+
+    $form['language'] = array(
+      '#type' => 'select',
+      '#title' => t('Language'),
+      '#default_value' => $language,
+      '#options' => array(LANGUAGE_NONE => t('Language neutral')) + locale_language_list('name'),
+    );
+
+    // Disable languages for existing translations, so it is not possible to
+    // switch this product to some language which is already in the translation set.
+    if (isset($entity->translations)) {
+      foreach ($entity->translations->data as $langcode => $translation) {
+        if ($langcode != $entity->translations->original) {
+          unset($form['language']['#options'][$langcode]);
+        }
+      }
+    }
+  }
+  else {
+    $form['language'] = array(
+      '#type' => 'value',
+      '#value' => $language,
+    );
+  }
+
   // Make the other form items dependent upon it.
   ctools_include('dependent');
   ctools_add_js('dependent');
@@ -896,6 +957,7 @@ function fieldable_panels_panes_entity_edit_form_submit($form, &$form_state) {
   $entity->category = $form_state['values']['category'];
   $entity->admin_title = $form_state['values']['admin_title'];
   $entity->admin_description = $form_state['values']['admin_description'];
+  $entity->language = $form_state['values']['language'];
 
   $entity->revision = $form_state['values']['revision'];
   // Only set a log message if there was a new revision. This prevents
diff --git a/plugins/content_types/fieldable_panels_pane.inc b/plugins/content_types/fieldable_panels_pane.inc
index 3f25fa2..e5b08d9 100644
--- a/plugins/content_types/fieldable_panels_pane.inc
+++ b/plugins/content_types/fieldable_panels_pane.inc
@@ -89,6 +89,15 @@ function fieldable_panels_panes_fieldable_panels_pane_content_type_render($subty
       );
     }
 
+    if (module_exists('entity_translation') && entity_translation_enabled('fieldable_panels_pane') && entity_translation_tab_access($entity->bundle)) {
+      $block->admin_links[] = array(
+        'title' => t('Translate pane'),
+        'alt' => t("Translate the values in this pane"),
+        'href' => "admin/structure/fieldable-panels-panes/view/$entity->fpid/translate",
+        'query' => drupal_get_destination(),
+      );
+    }
+
     return $block;
   }
 }
