--- og_panels.module.orgin	2009-11-22 08:02:53.921482852 -0800
+++ og_panels.module	2009-11-22 08:12:26.140700467 -0800
@@ -288,7 +288,7 @@ function og_panels_main_tab_title($node)
 }
 
 function og_panels_perm() {
-  return array('manage OG panels pages');
+  return array('manage OG panels pages','import and export OG panels pages');
 }
 
 /**
@@ -815,4 +815,94 @@ function og_panels_edit_content($did, $g
 function og_panels_admin_content() {
   panels_load_include('common');
   return drupal_get_form('panels_common_settings', 'og_panels');
+}
+
+/**
+ * Implementation of hook_form_alter
+ * attach og_panels_export_import_form before the panel edit form
+ */
+function og_panels_form_alter(&$form, $form_state, $form_id){
+    if($form_id == 'panels_edit_display_form' && arg(0) == 'node' && arg(1) > 0 && arg(2) == 'og_panels' && arg(3) > 0){
+        if(user_access('import and export OG panels pages')){
+            $did = (int)arg(3);
+            $form['#prefix'] = drupal_get_form('og_panels_export_import_form', $did);
+        }
+    }
+}
+
+/**
+ * build the og panels export import form
+ */
+function og_panels_export_import_form(){
+    $form = array();
+    //add extra condition check
+    if( arg(0) == 'node' && arg(1) > 0 && arg(2) == 'og_panels' && arg(3) > 0 ){
+        $args = func_get_args();
+
+        $display_id = (int)$args[1];
+
+        $display = og_panels_load_display($display_id);
+        $panel_code = panels_export_display($display);
+
+        $form['view'] = array(
+          '#type' => 'fieldset',
+          '#title' => t('Export'),
+          '#collapsible' => TRUE,
+          '#collapsed' => TRUE,
+        );
+
+        $form['view']['exported'] = array(
+            '#type' => 'textarea',
+            '#value' => $panel_code,
+        );
+
+        $form['import'] = array(
+          '#type' => 'fieldset',
+          '#title' => t('Import From Code'),
+          '#weight' => 5,
+          '#collapsible' => TRUE,
+          '#collapsed' => TRUE,
+        );
+        $form['import']['display_id'] = array(
+            '#type' => 'hidden',
+            '#value' => $display_id,
+        );
+        $form['import']['code'] = array(
+            '#type' => 'textarea',
+            '#title' => t('Import From Code'),
+        );
+        $form['import']['submit'] = array(
+            '#type' => 'submit',
+            '#value' => t("Import"),
+        );
+    }
+    return $form;
+}
+
+function og_panels_export_import_form_submit(&$form, $form_state){
+    //og_panels_import_from_code
+    og_panels_import_from_code($form_state['values']['code'], $form_state['values']['display_id']);
+}
+
+/**
+ * Import a piece of code and save as a panel display
+ */
+function og_panels_import_from_code($code, $display_id){
+   if(strlen($code) > 0 && $display_id > 0){
+        ob_start();
+        eval($code);
+        ob_end_clean();
+        if(is_object($display)){
+            $old_did = $display_id;
+            //tricky, we need to update the display's layout first
+            if(strlen($display->layout) > 0){
+                db_query("UPDATE {panels_display} SET layout = '%s' WHERE did = '%d'", $display->layout, $old_did);
+            }
+            $display = panels_save_display($display);
+            $new_did = $display->did;
+            //tricky, we need to delete the old display's panels pane info and update it with the new info
+            db_query("DELETE FROM {panels_pane} WHERE did = '%d'", $old_did);
+            db_query("UPDATE {panels_pane} SET did = '%d' WHERE did = '%d'", $old_did, $new_did);
+        }
+   }
 }
\ No newline at end of file
