diff --git a/field_group.module b/field_group.module
index 4061519..43c1e4e 100644
--- a/field_group.module
+++ b/field_group.module
@@ -176,6 +176,17 @@ function field_group_ctools_plugin_api($owner, $api) {
 }
 
 /**
+ * Implementation of hook_ctools_plugin_directory().
+ *
+ * Panels integration.
+ */
+function field_group_ctools_plugin_directory($module, $plugin) {
+  if (in_array($module, array('panels', 'ctools', 'page_manager'))) {
+    return 'plugins/' . $plugin;
+  }
+}
+
+/**
  * Implements hook_theme().
  */
 function field_group_theme() {
diff --git a/plugins/content_types/entity_form_field_group.inc b/plugins/content_types/entity_form_field_group.inc
new file mode 100644
index 0000000..0414cab
--- /dev/null
+++ b/plugins/content_types/entity_form_field_group.inc
@@ -0,0 +1,167 @@
+<?php
+
+/**
+ * @file
+ * Handle rendering fieldgroup form elements
+ */
+$plugin = array(
+  'title' => t('Entity field group'),
+  'defaults' => array('label' => '', 'formatter' => ''),
+  'content type' => 'field_group_entity_form_field_group_content_type_content_type',
+);
+
+/**
+ * Just one subtype.
+ *
+ * Ordinarily this function is meant to get just one subtype. However, we are
+ * using it to deal with the fact that we have changed the subtype names. This
+ * lets us translate the name properly.
+ */
+function field_group_entity_form_field_group_content_type_content_type($subtype) {
+  $types = field_group_entity_form_field_group_content_type_content_types();
+  if (isset($types[$subtype])) {
+    return $types[$subtype];
+  }
+}
+
+/**
+ * return all field group content types availible
+ */
+function field_group_entity_form_field_group_content_type_content_types() {
+  $groups = field_group_read_groups();
+  $types = array();
+  $content_types = array();
+
+  foreach ($groups as $entity_type => $bundles) {
+    foreach ($bundles as $bundle => $modes) {
+      foreach ($modes as $mode => $fieldgroups) {
+        foreach ($fieldgroups as $group_name => $field_group) {
+          // Only use form field groups
+          if ($field_group->mode == 'form') {
+            $types[$entity_type . ':' . $group_name] = array(
+              'title' => t('Field Group Form: @widget_label', array(
+                '@widget_label' => t($field_group->label),
+              )),
+              'category' => t('Form'),
+            );
+            $content_types[$entity_type . ':' . $group_name]['types'][$bundle] = $bundle;
+          }
+        }
+      }
+    }
+  }
+  // Create the required context for each field related to the bundle types.
+  foreach ($types as $key => $field_content_type) {
+    list($entity_type, $group_name) = explode(':', $key, 2);
+    $types[$key]['required context'] = new ctools_context_required(t(ucfirst($entity_type)), $entity_type, array(
+      'form' => array('form'),
+      'type' => $content_types[$key]['types'],
+    ));
+    unset($content_types[$key]['types']);
+  }
+  return $types;
+}
+
+/**
+ * Render the custom content type.
+ */
+function field_group_entity_form_field_group_content_type_render($subtype, $conf, $panel_args, $context) {
+  if (empty($context) || empty($context->data)) {
+    return;
+  }
+
+  // Get a shortcut to the entity.
+  $entity = $context->data;
+  list($entity_type, $group_name) = explode(':', $subtype, 2);
+
+  // Load the entity type's information where the fieldgroup is placed
+  $ids = entity_extract_ids($entity_type, $entity);
+  $bundle = $entity->type;
+
+  $list = field_group_read_groups(array('bundle' => $bundle, 'entity_type' => $entity_type, 'mode' => 'form'));
+
+  $group = $list[$entity_type][$bundle]['form'][$group_name];
+
+  // Do not render if the entity type does not have this fieldgroup.
+  if (empty($group)) {
+    return;
+  }
+
+  if (isset($context->form)) {
+
+    if (isset($context->form['#pre_render'])) {
+      foreach ($context->form['#pre_render'] as $function) {
+        if (function_exists($function)) {
+          $context->form = $function($context->form);
+        }
+      }
+      unset($context->form['#pre_render']);
+    }
+    if (!empty($context->form[$group_name])) {
+      $block->content[$group_name] = $context->form[$group_name];
+      if (!empty($conf['disable_children'])) {
+        foreach ($conf['disable_children'] as $field) {
+          if (!empty($block->content[$group_name][$field])) {
+            $block->content[$group_name][$field]['#access'] = FALSE;
+          }
+        }
+      }
+      unset($context->form[$group_name]);
+    }
+  }
+  else {
+    $block->content = '';
+  }
+  return $block;
+}
+
+/**
+ * Returns the administrative title for a type.
+ */
+function field_group_entity_form_field_group_content_type_admin_title($subtype, $conf, $context) {
+  list($entity_type, $group_name) = explode(':', $subtype, 2);
+  return t('"@s" @group_name', array('@s' => $context->identifier, '@group_name' => $group_name));
+}
+
+function field_group_entity_form_field_group_content_type_edit_form($form, &$form_state) {
+  list($entity_type, $group_name) = explode(':', $form_state['subtype_name'], 2);
+  $bundle = !empty($form_state['subtype']['required context']->restrictions['type']) && count($form_state['subtype']['required context']->restrictions['type']) == 1 ? current($form_state['subtype']['required context']->restrictions['type']) : NULL;
+  $groups = field_group_info_groups();
+  if ($bundle) {
+    if (!empty($groups[$entity_type][$bundle]['form'][$group_name]->children)) {
+      $fields = $groups[$entity_type][$bundle]['form'][$group_name]->children;
+    }
+  }
+  else {
+    $fields = array();
+    foreach ($groups[$entity_type] as $bundle => $groups) {
+      if (!empty($groups['form'][$group_name]->children)) {
+        $fields = array_merge($groups['form'][$group_name]->children, $fields);
+      }
+    }
+  }
+  if ($fields) {
+    $options = array();
+    foreach ($fields as $field) {
+      if ($field_data = field_info_field($field)) {
+        $options[$field] = check_plain($field['label']);
+      }
+      else {
+        $options[$field] = check_plain($field);
+      }
+    }
+    $form['disable_children'] = array(
+      '#title' => t('Disable fields'),
+      '#type' => 'checkboxes',
+      '#options' => $options,
+      '#default_value' => !empty($form_state['conf']['disable_children']) ? $form_state['conf']['disable_children'] : array(),
+    );
+  }
+  return $form;
+}
+
+function field_group_entity_form_field_group_content_type_edit_form_submit($form, &$form_state) {
+  foreach (array('disable_children') as $key) {
+    $form_state['conf'][$key] = !empty($form_state['values'][$key]) ? $form_state['values'][$key] : array();
+  }
+}
diff --git a/plugins/content_types/field_group.inc b/plugins/content_types/field_group.inc
new file mode 100644
index 0000000..298faad
--- /dev/null
+++ b/plugins/content_types/field_group.inc
@@ -0,0 +1,261 @@
+<?php
+
+/**
+ * field_group.inc
+ * Handle rendering fieldgroups as panes.
+ */
+$plugin = array(
+  'title' => t('Field Group'),
+  'category' => t('Field Groups'),
+  'content type' => 'field_group_field_group_content_type',
+  'required context' => new ctools_context_required(t('entity'), 'entity'),
+);
+
+function field_group_field_group_content_type_edit_form($form, &$form_state) {
+  $conf = $form_state['conf'];
+
+  // Force to load this file, that the callbackfunction could be loaded.
+  $form_state['build_info']['files'][] = array(
+    'type' => 'inc',
+    'module' => 'field_group',
+    'name' => 'plugins/content_types/field_group',
+  );
+
+  // Ajax Call when the Entity is changed.
+  $form['context']['#ajax'] = array(
+    'event' => 'change',
+    'wrapper' => 'field-group-bundles-container',
+    'callback' => 'field_group_bundle_callback'
+  );
+  $form['context']['#submit'] = array('field_group_field_group_content_type_submit_temporary');
+  $form['context']['#executes_submit_callback'] = TRUE;
+
+  // Get valid context value.
+  $context = empty($conf['context']) ? reset($form_state['contexts']) : $form_state['contexts'][$conf['context']];
+
+  // Not sure if this is always valid?
+  $entity_type = $context->type[2];
+  $entity_info = entity_get_info($entity_type);
+
+  // Reading all field_groups.
+  $groups = field_group_read_groups(array('entity_type' => $entity_type));
+
+  // Get all available bundles, having a fieldgroups attached.
+  $bundles = array();
+  foreach ($groups as $entitys => $entity) {
+    foreach (array_keys($entity) as $key => $value) {
+      $bundles[$value] = $value;
+    }
+  }
+
+  $form['bundle'] = array(
+    '#title' => t('Bundle'),
+    '#type' => 'select',
+    '#description' => t('Select a bundle for this @entity_type.', array('@entity_type' => $entity_info['label'])),
+    '#options' => $bundles,
+    '#default_value' => !empty($conf['bundle']) ? $conf['bundle'] : NULL,
+    '#ajax' => array(
+      'event' => 'change',
+      'wrapper' => 'field-group-build-mode-container',
+      'callback' => 'field_group_build_mode_callback'
+    ),
+    '#submit' => array('field_group_field_group_content_type_submit_temporary'),
+    '#executes_submit_callback' => TRUE,
+  );
+
+  // Get the valid bundle depending on the previous selection.
+  $bundle = !empty($conf['bundle']) && in_array($conf['bundle'], $bundles) ? $conf['bundle'] : reset($bundles);
+
+  // Get all build_modes for the current selection of entity_type + bundle.
+  $build_mode_options = array();
+  foreach ($groups[$entity_type][$bundle] as $field_groups_modes => $field_groups) {
+    $build_mode_options[$field_groups_modes] = $field_groups_modes;
+  }
+
+  $form['build_mode'] = array(
+    '#title' => t('Build mode'),
+    '#type' => 'select',
+    '#description' => t('Select a build mode for this @entity_type.', array('@entity_type' => $entity_info['label'])),
+    '#options' => $build_mode_options,
+    '#default_value' => !empty($conf['build_mode']) ? $conf['build_mode'] : NULL,
+    '#ajax' => array(
+      'event' => 'change',
+      'wrapper' => 'field-group-field-group-container',
+      'callback' => 'field_group_avalible_field_groups_callback'
+    ),
+    '#submit' => array('field_group_field_group_content_type_submit_temporary'),
+    '#executes_submit_callback' => TRUE,
+  );
+
+  // if build_mode exists in the options, it's kept as selected, otherwise the first value will be set
+  $build_mode = !empty($conf['build_mode']) && in_array($conf['build_mode'], $form['build_mode']['#options']) ? $conf['build_mode'] : reset($form['build_mode']['#options']);
+
+  // Get all field_groups for the current selectin of mode + bundle + entity_type.
+  $field_groups = array();
+  foreach ($groups[$entity_type][$bundle][$build_mode] as $grouup_name => $field_group) {
+    $field_groups[$grouup_name] = $grouup_name;
+  }
+
+  $form['field_group'] = array(
+    '#type' => 'select',
+    '#options' => $field_groups,
+    '#default_value' => !empty($conf['field_group']) ? $conf['field_group'] : NULL,
+    '#title' => t('Select Field Group'),
+  );
+
+  $form['#pre_render'][] = 'field_group_field_group_content_type_pre_render';
+  return $form;
+}
+
+/**
+ * A pre_render function to move the fields into different divs, so ajax can work as expected.
+ */
+function field_group_field_group_content_type_pre_render($form) {
+  $field_group = $form['field_group'];
+
+  $form['field_group'] = array(
+    '#type' => 'container',
+    '#attributes' => array('id' => 'field-group-bundles-container'),
+    // On pre_render the weight of other elements is already done,
+    // so 0 would move the element before the context selection.
+    '#weight' => 1,
+  );
+  $form['field_group']['bundle'] = $form['bundle'];
+  unset($form['bundle']);
+
+  $form['field_group']['build_mode_container'] = array(
+    '#type' => 'container',
+    '#attributes' => array('id' => 'field-group-build-mode-container'),
+    '#weight' => 1,
+  );
+  $form['field_group']['build_mode_container']['build_mode'] = $form['build_mode'];
+  unset($form['build_mode']);
+
+  $form['field_group']['build_mode_container']['field_group_container'] = array(
+    '#type' => 'container',
+    '#attributes' => array('id' => 'field-group-field-group-container'),
+    '#weight' => 1,
+  );
+  $form['field_group']['build_mode_container']['field_group_container']['field_group'] = $field_group;
+
+  return $form;
+}
+
+/**
+ * Helperfunction to save the values into conf for further using.
+ */
+function field_group_field_group_content_type_submit_temporary($form, &$form_state) {
+  $form_state['conf']['context'] = $form_state['values']['context'];
+  $form_state['conf']['label'] = $form_state['values']['label'];
+  $form_state['conf']['bundle'] = $form_state['values']['bundle'];
+  $form_state['conf']['build_mode'] = $form_state['values']['build_mode'];
+  $form_state['conf']['field_group'] = $form_state['values']['field_group'];
+
+  $form_state['rebuild'] = TRUE;
+  $form_state['rerender'] = TRUE;
+}
+
+/**
+ * Ajax callback to return the bundles container.
+ * The pre_render function is called manually to be able to return
+ * the container, not only the form element.
+ */
+function field_group_bundle_callback($form, &$form_state) {
+  $form = field_group_field_group_content_type_pre_render($form);
+  return $form['field_group'];
+}
+
+/**
+ * Ajax callback to return the build_modes container.
+ */
+function field_group_build_mode_callback($form, &$form_state) {
+  $form = field_group_field_group_content_type_pre_render($form);
+  return $form['field_group']['build_mode_container'];
+}
+
+/**
+ * Ajax callback to return the field_groups.
+ */
+function field_group_avalible_field_groups_callback($form, &$form_state) {
+  $form = field_group_field_group_content_type_pre_render($form);
+  return $form['field_group']['build_mode_container']['field_group_container'];
+}
+
+/**
+ * Validate the node selection.
+ */
+function field_group_field_group_content_type_edit_form_submit($form, &$form_state) {
+  foreach (array('context', 'build_mode', 'field_group', 'bundle') as $key) {
+    if (!empty($form_state['values'][$key])) {
+      $form_state['conf'][$key] = $form_state['values'][$key];
+    }
+  }
+}
+
+/**
+ * Render a field_group as pane.
+ */
+function field_group_field_group_content_type_render($subtype, $conf, $panel_args, $context) {
+  // We don't have context, return.
+  if (empty($context) || empty($context->data)) {
+    return;
+  }
+
+  // Get some better names
+  $view_mode = $conf['build_mode'];
+  $group_name = $conf['field_group'];
+  $entity_type = $context->type[2];
+
+  // Load the entitys
+  $entitys = entity_get_info($entity_type);
+  $entity_key = $entitys['entity keys']['id'];
+
+  // pickup the right entity
+  $entity = isset($context->data) ? clone($context->data) : NULL;
+  $entity_id = $entity->$entity_key;
+
+  $elements = entity_view($entity_type, array($entity_id => $entity), $view_mode);
+  if (count($elements) > 1) {
+    $entity_types = $entity_type . 's';
+  }
+  else {
+    $entity_types = $entity_type;
+  }
+  $element = $elements[$entity_types][$entity_id];
+
+  if (isset($element['#pre_render'])) {
+    foreach ($element['#pre_render'] as $function) {
+      if (function_exists($function)) {
+        $element = $function($element);
+      }
+    }
+    unset($element['#pre_render']);
+  }
+
+  // If we're using Field Group 7.x-2.x, we need to do some extra processing.
+  if (function_exists('field_group_build_entity_groups')) {
+    // Needs to be form to get a return value
+    $element = field_group_build_entity_groups($element, 'form');
+  }
+
+  $block = new StdClass();
+  $block->module = 'field_group';
+  $block->delta = 'field_group';
+  $block->content = drupal_render($element[$group_name]);
+
+  return $block;
+}
+
+/**
+ * Returns the administrative title for a type.
+ */
+function field_group_field_group_content_type_admin_title($subtype, $conf, $context) {
+  $entity_type = $context->type[2];
+  if (empty($conf['field_group'])) {
+    $group_name = t('undefined');
+  }
+  else {
+    $group_name = $conf['field_group'];
+  }
+  return t('"@s" @group_name', array('@s' => $entity_type, '@group_name' => $group_name));
+}
