diff --git a/fieldable_panels_panes.install b/fieldable_panels_panes.install
index e5f8747..7079556 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,25 @@ 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_7107(&$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.");
+}
+
diff --git a/fieldable_panels_panes.module b/fieldable_panels_panes.module
index ca14b2a..bbdd7ce 100644
--- a/fieldable_panels_panes.module
+++ b/fieldable_panels_panes.module
@@ -50,7 +50,35 @@ function fieldable_panels_panes_entity_info() {
           'custom settings' => FALSE,
         ),
       ),
+      'translation' => array(
+        'locale' => TRUE,
+        'entity_translation' => array(
+          'class' => 'EntityTranslationDefaultHandler',
+          '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,7 +788,20 @@ function fieldable_panels_panes_get_base_context($entity = NULL) {
  */
 function fieldable_panels_panes_entity_edit_form($form, &$form_state) {
   $entity = $form_state['entity'];
+  $form['previous_langcode'] = array(
+    '#type' => 'hidden',
+    '#value' => isset($entity->language) ? $entity->language : LANGUAGE_NONE,
+  );
 
+  // Provide support for translations
+  if (module_exists('entity_translation')
+      && entity_translation_enabled('fieldable_panels_pane')) {
+    $handler = entity_translation_get_handler('fieldable_panels_pane', $entity);
+    $langcode = $handler->getFormLanguage();
+  }
+  else {
+    $langcode = LANGUAGE_NONE;
+  }
   // fixes a bug in wysiwyg
   // oh wysiwyg. We need a better way to address this.
 //  drupal_add_css('sites/all/libraries/ckeditor/skins/kama/editor.css');
@@ -772,6 +813,36 @@ function fieldable_panels_panes_entity_edit_form($form, &$form_state) {
     '#weight' => -10,
   );
 
+  // Need to attach the form elements before checking if we can translate
+  // @see fieldable_panels_panes_entity_has_translatable_field
+  field_attach_form('fieldable_panels_pane', $entity, $form, $form_state, $langcode);
+
+  // Provide support for translations
+  if (module_exists('entity_translation')
+      && entity_translation_enabled('fieldable_panels_pane')
+      && fieldable_panels_panes_entity_has_translatable_field($form)) {
+    // Get the correct language code
+    $settings = entity_translation_settings('fieldable_panels_pane', $entity->bundle);
+    // 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' => $langcode,
+      '#options' => fieldable_panels_panes_language_options($settings),
+      '#access' => fieldable_panels_panes_language_access($entity, $settings),
+    );
+  }
+  else {
+    $form['language'] = array(
+      '#type' => 'value',
+      '#value' => $langcode,
+    );
+  }
+
   // Make the other form items dependent upon it.
   ctools_include('dependent');
   ctools_add_js('dependent');
@@ -859,8 +930,6 @@ function fieldable_panels_panes_entity_edit_form($form, &$form_state) {
     '#default_value' => '',
   );
 
-  field_attach_form('fieldable_panels_pane', $entity, $form, $form_state);
-
   if (!empty($form_state['add submit'])) {
     $form['actions'] = array(
       '#type' => 'actions',
@@ -889,20 +958,43 @@ function fieldable_panels_panes_entity_edit_form_submit($form, &$form_state) {
   $entity = $form_state['entity'];
 
   // Copy hardcoded fields.
-  $entity->title = $form_state['values']['title'];
+  if (module_exists('title') && isset($form_state['values']['title_field'])) {
+    $entity->title = $form_state['values']['title_field'];
+  } else {
+    $entity->title = $form_state['values']['title'];
+  }
+
   $entity->link = $form_state['values']['link'];
   $entity->path = $form_state['values']['path'];
   $entity->reusable = $form_state['values']['reusable'];
   $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->previous_langcode = $form_state['values']['previous_langcode'];
   $entity->revision = $form_state['values']['revision'];
   // Only set a log message if there was a new revision. This prevents
   // overwriting a log message on the current revision
   if ($entity->revision) {
     $entity->log = $form_state['values']['log'];
   }
+  dsm($form_state);
+  dsm($entity);
+  if (module_exists('entity_translation')
+      && entity_translation_enabled('fieldable_panels_pane')
+      && fieldable_panels_panes_entity_has_translatable_field($form)
+      && isset($entity->translations->original)) {
+    // When adding a new translation we end up at a path
+    // that is nolonger accessable. Get out of there.
+    if (!isset($entity->translations->data[$entity->language])) {
+      $form_state['redirect'] = 'admin/structure/fieldable-panels-panes/manage/' . $entity->bundle;
+    }
+    $entity->translations->data[$entity->language] = $translation = array(
+      'translate' => TRUE,
+      'status' => TRUE,
+      'source' => $entity->previous_langcode,
+      'language' => $entity->language);
+  }
 
   field_attach_submit('fieldable_panels_pane', $entity, $form, $form_state);
 
@@ -911,3 +1003,53 @@ function fieldable_panels_panes_entity_edit_form_submit($form, &$form_state) {
     drupal_set_message(t('The entity has been saved.'));
   }
 }
+
+/**
+ * Determine if there is a field on this entity that is translatable
+ *
+ * @param $form
+ *  The form with all the fields.
+ */
+function fieldable_panels_panes_entity_has_translatable_field($form) {
+  foreach ($form as $key => $value) {
+    $pos = strpos($key, 'field_');
+    if ($pos !== FALSE) {
+      $info = field_info_field($key);
+      if (isset($info['translatable']) && $info['translatable']) {
+        return TRUE;
+      }
+    }
+  }
+  return FALSE;
+}
+
+/**
+ * Return the language options based on the entity translation settings.
+ *
+ * @param $entity_translation_settings
+ *  The entity translation settings for this entity.
+ */
+function fieldable_panels_panes_language_options($entity_translation_settings) {
+  $options = locale_language_list('name');
+  if (!$entity_translation_settings['exclude_language_none']) {
+    $options[LANGUAGE_NONE] = t('Language neutral');
+  }
+  return $options;
+}
+
+/**
+ * Prevent the language selector from being displayed.
+ *
+ * @param $entity
+ *  The fieldable_panels_panes entity.
+ * @param $entity_translation_settings
+ *  The entity translation settings for this entity.
+ */
+function fieldable_panels_panes_language_access($entity, $entity_translation_settings) {
+  if ($entity_translation_settings['hide_language_selector']
+      || (!isset($entity->is_new) && $entity_translation_settings['lock_language'])) {
+    return FALSE;
+  }
+
+  return TRUE;
+}
diff --git a/plugins/content_types/fieldable_panels_pane.inc b/plugins/content_types/fieldable_panels_pane.inc
index 3f25fa2..c59b20c 100644
--- a/plugins/content_types/fieldable_panels_pane.inc
+++ b/plugins/content_types/fieldable_panels_pane.inc
@@ -89,6 +89,17 @@ 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;
   }
 }
