diff --git a/bundle_copy_commerce/bundle_copy_commerce.module b/bundle_copy_commerce/bundle_copy_commerce.module
index cc47681..8ab73e2 100644
--- a/bundle_copy_commerce/bundle_copy_commerce.module
+++ b/bundle_copy_commerce/bundle_copy_commerce.module
@@ -4,33 +4,60 @@
  * @file
  * Bundle Copy Commerce.
  */
+
 /**
  * Implements hook_menu().
  */
 function bundle_copy_commerce_menu() {
   $items = array();
 
-    $items['admin/commerce/products/export'] = array(
-      'title' => 'Export',
+  $items['admin/commerce/products/export'] = array(
+    'title' => t('Export'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('bundle_copy_commerce_export', 'commerce_product'),
+    'access arguments' => array('administer product types'),
+    'type' => MENU_LOCAL_TASK
+  );
+  $items['admin/commerce/products/import'] = array(
+    'title' => t('Import'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('bundle_copy_commerce_import', 'commerce_product'),
+    'access callback' => 'bundle_copy_import_access',
+    'access arguments' => array('administer product types'),
+    'type' => MENU_LOCAL_TASK
+  );
+
+  if (module_exists('commerce_custom_product')) {
+    $items['admin/commerce/config/line-items/list'] = array(
+      'title' => t('List'),
+      'type' => MENU_DEFAULT_LOCAL_TASK,
+    );
+
+    $items['admin/commerce/config/line-items/export'] = array(
+      'title' => t('Export'),
       'page callback' => 'drupal_get_form',
-      'page arguments' => array('bundle_copy_commerce_export', 'commerce_product'),
-      'access arguments' => array('administer product types'),
+      'page arguments' => array('bundle_copy_commerce_export', 'commerce_line_item'),
+      'access arguments' => array('administer line item types'),
       'type' => MENU_LOCAL_TASK
     );
-    $items['admin/commerce/products/import'] = array(
-      'title' => 'Import',
+    $items['admin/commerce/config/line-items/import'] = array(
+      'title' => t('Import'),
       'page callback' => 'drupal_get_form',
-      'page arguments' => array('bundle_copy_commerce_import', 'commerce_product'),
+      'page arguments' => array('bundle_copy_commerce_import', 'commerce_line_item'),
       'access callback' => 'bundle_copy_import_access',
-      'access arguments' => array('administer product types'),
+      'access arguments' => array('administer line item types'),
       'type' => MENU_LOCAL_TASK
     );
+  }
+
   return $items;
 }
 
 /**
  * Callback function of Export Menu.
- * @entity_type is commerce_product
+ *
+ * @param $entity_type
+ *   Either 'commerce_product' or 'commerce_line_item'.
  */
 function bundle_copy_commerce_export($form, &$form_state, $entity_type) {
 
@@ -41,12 +68,12 @@ function bundle_copy_commerce_export($form, &$form_state, $entity_type) {
     $step = 1;
     $form_state['step'] = $step;
   }
-  
+
   switch ($step) {
 
     // Select the bundles.
     case 1:
-      
+
       $commerce_bundles = _bundle_copy_commerce_bundle_info($entity_type, TRUE);
       $form['commerce-info'] = array(
         '#markup' => t('Select Commerce Bundles you want to export.'),
@@ -66,7 +93,7 @@ function bundle_copy_commerce_export($form, &$form_state, $entity_type) {
 
      // List the fields / field groups.
     case 2:
-       
+
       // Field group.
       $all_groups = function_exists('field_group_info_groups') ? field_group_info_groups() : array();
 
@@ -156,7 +183,7 @@ function bundle_copy_commerce_export($form, &$form_state, $entity_type) {
       break;
   }
   return $form;
-  
+
 }
 
 /**
@@ -204,7 +231,16 @@ function _bundle_copy_commerce_export_data($entity_type, $selected_data) {
 
     // Bundles export data.
     //$bundle_info_callback = $bc_info[$entity_type]['bundle_export_callback'];
-    $bundle_info_callback = 'commerce_product_type_load';
+    switch($entity_type) {
+      case 'commerce_product':
+        $bundle_info_callback = 'commerce_product_type_load';
+        break;
+
+      case 'commerce_line_item':
+        $bundle_info_callback = 'commerce_line_item_type_load';
+        break;
+    }
+
     $bundle_info = $bundle_info_callback($bkey, $entity_type);
     if (is_object($bundle_info)) {
       $bundle_info->bc_entity_type = $entity_type;
@@ -271,7 +307,6 @@ function bundle_copy_commerce_import($form, $form_state, $entity_type = 'commerc
   return $form;
 }
 
-
 /**
  * Submit callback: import data.
  */
@@ -280,7 +315,7 @@ function bundle_copy_commerce_import_submit($form, &$form_state) {
   // Evaluate data.
   eval($form_state['values']['macro']);
   if (isset($data) && is_array($data)) {
-    
+
     $modules = module_list();
     // Create bundles.
     foreach ($data['bundles'] as $key => $bundle) {
@@ -298,15 +333,24 @@ function bundle_copy_commerce_import_submit($form, &$form_state) {
           $bundle['is_new'] = FALSE;
         }
         if ($bundle['is_new']) {
-          commerce_product_ui_product_type_save($bundle);
-          drupal_set_message(t('%bundle Product type has been created.', array('%bundle' => $bundle['name'])));
+          switch($entity_type) {
+            case 'commerce_product':
+              commerce_product_ui_product_type_save($bundle);
+              break;
+
+            case 'commerce_line_item':
+              commerce_custom_product_line_item_type_save($bundle);
+              break;
+          }
+
+          drupal_set_message(t('%bundle %entity_type type has been created.', array('%bundle' => $bundle['name'], '%entity_type' => $entity_type)));
         }
         else {
-          drupal_set_message(t('%bundle product type has already been exist.', array('%bundle' => $bundle['name'])));
+          drupal_set_message(t('%bundle %entity_type type already existed.', array('%bundle' => $bundle['name'], '%entity_type' => $entity_type)));
         }
       }
     }
-    
+
     // Create or update fields and their instances
     if ($bundle['is_new']) {
      if (isset($data['fields'])) {
@@ -356,7 +400,7 @@ function bundle_copy_commerce_import_submit($form, &$form_state) {
          }
        }
      }
-    
+
     // Create / update fieldgroups.
     if (isset($data['fieldgroups'])) {
       if (module_exists('field_group')) {
@@ -403,20 +447,31 @@ function bundle_copy_commerce_import_submit($form, &$form_state) {
 }
 
 /**
- * Return bundles for a commerce_product entity type.
+ * Return bundles for a commerce entity type.
  *
  * @param $entity_type
- *   The name of the entity type.
+ *   The name of the entity type: commerce_product or commerce_line_item.
  * @param $table_select
  *   Whether we're returning for the table select or not.
  */
 function _bundle_copy_commerce_bundle_info($entity_type, $table_select = FALSE) {
   static $bundles = array();
 
+  switch($entity_type) {
+    case 'commerce_product':
+      $list_types_callback = 'commerce_product_types';
+      break;
+
+    case 'commerce_line_item':
+      $list_types_callback = 'commerce_line_item_types';
+      break;
+  }
+
   if (!isset($bundles[$entity_type])) {
-    
     $bundles[$entity_type] = array();
-    $commerce_product_types = commerce_product_types();
+    // Note that although this variable has 'product' in the name, it is really
+    // a list of whatever $entity_type bundles.
+    $commerce_product_types = $list_types_callback();
     foreach ($commerce_product_types as $type => $product_type) {
       if ($table_select) {
         $commerce_bundles[$type]['machine_name'] = $type;
@@ -425,7 +480,7 @@ function _bundle_copy_commerce_bundle_info($entity_type, $table_select = FALSE)
       else {
         $commerce_bundles[$type][$type] = $product_type['name'];
       }
-    }     
+    }
   }
   return $commerce_bundles;
 }
