diff --git entity/entity.module entity/entity.module
index 95a616c..c9b28a7 100644
--- entity/entity.module
+++ entity/entity.module
@@ -540,7 +540,7 @@ function entity_forms() {
  *   initialized with empty values using entity_create(). Thus entities, for
  *   which this is problematic have to care to pass in an initialized entity.
  * @param $op
- *   One of 'edit', 'add' or 'clone. Defaults to edit.
+ *   One of 'edit', 'add' or 'clone'. Defaults to edit.
  *
  * @return
  *   The fully built and processed form, ready to be rendered.
diff --git entity/entity.ui.inc entity/entity.ui.inc
index 378076b..fa26f76 100644
--- entity/entity.ui.inc
+++ entity/entity.ui.inc
@@ -172,7 +172,11 @@ class EntityDefaultUIController {
     }
     // Add operations with the right colspan.
     $field_ui = !empty($this->entityInfo['bundle of']) && module_exists('field_ui');
-    $header[] = array('data' => t('Operations'), 'colspan' => $field_ui ? 5 : 3);
+    $exportable = !empty($this->entityInfo['exportable']);
+    $colspan = 3;
+    $colspan = $field_ui ? $colspan + 2 : $colspan;
+    $colspan = $exportable ? $colspan + 1 : $colspan;
+    $header[] = array('data' => t('Operations'), 'colspan' => $colspan);
 
     $render = array(
       '#theme' => 'table',
@@ -215,10 +219,15 @@ class EntityDefaultUIController {
     }
     // In case this is a bundle, we add links to the field ui tabs.
     $field_ui = !empty($this->entityInfo['bundle of']) && module_exists('field_ui');
+    // For exportable entities we add an export link.
+    $exportable = !empty($this->entityInfo['exportable']);
+    $colspan = 3;
+    $colspan = $field_ui ? $colspan + 2 : $colspan;
+    $colspan = $exportable ? $colspan + 1 : $colspan;
 
     // Add operations depending on the status.
     if (entity_has_status($this->entityType, $entity, ENTITY_FIXED)) {
-      $row[] = array('data' => l(t('clone'), $this->path . '/manage/' . $id . '/clone'), 'colspan' => $field_ui ? 5 : 3);
+      $row[] = array('data' => l(t('clone'), $this->path . '/manage/' . $id . '/clone'), 'colspan' => $colspan);
     }
     else {
       $row[] = l(t('edit'), $this->path . '/manage/' . $id);
@@ -239,6 +248,9 @@ class EntityDefaultUIController {
         $row[] = '';
       }
     }
+    if ($exportable) {
+      $row[] = l(t('export'), $this->path . '/manage/' . $id . '/export');
+    }
     return $row;
   }
 
@@ -256,6 +268,18 @@ class EntityDefaultUIController {
       case 'delete':
         $confirm_question = t('Are you sure you want to delete the %entity %label?', array('%entity' => $this->entityInfo['label'], '%label' => $label));
         return confirm_form($form, $confirm_question, $this->path);
+
+      case 'export':
+        if (!empty($this->entityInfo['exportable'])) {
+          $export = entity_export($this->entityType, $entity);
+          $form['export'] = array(
+            '#type' => 'textarea',
+            '#title' => t('Export'),
+            '#rows' => count(explode("\n", $export)),
+            '#default_value' => $export,
+          );
+          return $form;
+        }
     }
     drupal_not_found();
     exit;
@@ -434,6 +458,8 @@ function entity_ui_get_page_title($op, $entity_type, $entity = NULL) {
       return t('Revert @label', array('@label' => $label));
     case 'delete':
       return t('Delete @label', array('@label' => $label));
+    case 'export':
+      return t('Export @label', array('@label' => $label));
   }
 }
 
