diff --git panels_tabs.info panels_tabs.info
index 27a9820..9fe1c64 100644
--- panels_tabs.info
+++ panels_tabs.info
@@ -1,7 +1,7 @@
 ; $Id: panels_tabs.info,v 1.1.2.3.2.1 2009/05/13 20:30:34 dereine Exp $
 name = Tabs panel style
 description = Configurable 'tabs' panel style. Provides 3 kinds of tabs.
-package = "Panels style plugins"
+package = "Panels"
 dependencies[] = panels
 dependencies[] = tabs
 core = 6.x
diff --git panels_tabs.module panels_tabs.module
index e89908e..cc16d55 100644
--- panels_tabs.module
+++ panels_tabs.module
@@ -6,119 +6,12 @@
  * Definition of the 'tabs' panel style.
  */
 
-
-//----------------------------------------------------------------------------
-// Panels hooks.
-
-/**
- * Implementation of hook_panels_style_info().
- */
-function panels_tabs_panels_styles() {
-  return array(
-    'tabs' => array(
-      'title'             => t('Tabs'),
-      'description'       => t('Presents the panes in tabs.'),
-      'render panel'      => 'panels_tabs_style_render_panel',
-      'settings form'     => 'panels_tabs_style_settings_form',
-      'settings validate' => 'panels_tabs_style_settings_validate',
-      'hook theme' => array(
-        'panels_tabs_style_render_panel' => array(
-          'arguments' => array('content' => NULL),
-        ),
-      ),
-    ),
-  );
-}
-
-//----------------------------------------------------------------------------
-// Panels style plugin callbacks.
-
-/**
- * Render callback.
- */
-function theme_panels_tabs_style_render_panel($display, $owner_id, $panes, $settings) {
-  $output = '';
-
-  // Generate a unique id based on the CSS ID and the name of the panel in the
-  // layout.
-  $pane_id = reset(array_keys($panes));
-  $panel = $display->content[$pane_id]->panel;  
-  $id = "$display->css_id-$panel";
-
-  // Add the Javascript to the page, and save the settings for this panel.
-  _panels_tabs_add_js($id, $settings['filling_tabs']);
-
-  $tabs = array();
-  $tabs[$id] = array(
-    '#type' => 'tabset',
-  );
-  $index = 0;
-  foreach ($panes as $pane_id => $content) {
-    // Remove the title from the content. We don't want titles in both the tab
-    // and the content associated with the tab.
-    if ($content->content) {
-      $content_without_title = drupal_clone($content);
-      unset($content_without_title->title);
-
-      $tabs[$id][$pane_id] = array(
-        '#type'    => 'tabpage',
-        '#title'   => $content->title,
-        '#content' => theme('panels_pane', $content_without_title, $display->content[$pane_id], $display),
-        '#weight'  => $index,
-      );
-      $index++;
-    }
-  }
-
-  // See if an optional title was added.
-  if (!empty($settings['title'])) {
-    $output .= theme('panels_tabs_title', $settings['title']);
-  }
-
-  $output .= tabs_render($tabs);
-
-  return $output;
-}
-
-/**
- * Settings form callback.
- */
-function panels_tabs_style_settings_form($settings) {
-  $form['title'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Optional Title'),
-    '#default_value' => (isset($settings['title'])) ? $settings['title'] : '',
-  );
-  $form['filling_tabs'] = array(
-    '#type' => 'radios',
-    '#title' => t('Horizontally filling tabs'),
-    '#options' => array(
-      'disabled' => t('Disabled'),
-      'equal' => t('Equal width tabs'),
-      'smart' => t('Equal width scaling tabs'),
-    ),
-    '#description' => t(
-      "Horizontally filling tabs make sure the tabs consume all available
-      horizontal space.<br />
-      Equal width tabs: sets the <em>width</em> property, forcing each tab
-      to be equally wide. If the text doesn't fit in the tab, the overflow
-      will be hidden.<br />
-      Horizontally filling, smart width tabs: calculates the length of the
-      text in each tab and compares this to the total length of the text on
-      all tabs. It then sets the width property of each tab according to the
-      percentage of text the tab contains."
-    ),
-    '#default_value' => (isset($settings['filling_tabs'])) ? $settings['filling_tabs'] : 'disabled',
-  );
-  return $form;
-}
-
 /**
- * Settings form validation callback.
+ * Implementation of hook_ctools_plugin_directory().
  */
-function panels_tabs_style_settings_validate($form, &$form_state) {
-  if (!in_array($form_state['values']['filling_tabs'], array('disabled', 'equal', 'smart'))) {
-    form_error($form_state['values']['filling_tabs'], t('Invalid value detected.'));
+function panels_tabs_ctools_plugin_directory($module, $plugin) {
+  if ($module == 'panels' && $plugin == 'styles') {
+    return 'styles/';
   }
 }
 
diff --git styles/tabs.inc styles/tabs.inc
new file mode 100644
index 0000000..0dd3833
--- /dev/null
+++ styles/tabs.inc
@@ -0,0 +1,109 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Tabs Panels style plugin.
+ */
+
+$plugin = array(
+  'title'             => t('Tabs'),
+  'description'       => t('Presents the panes in tabs.'),
+  'render panel'      => 'panels_tabs_style_render_panel',
+  'settings form'     => 'panels_tabs_style_settings_form',
+  'settings validate' => 'panels_tabs_style_settings_validate',
+  'hook theme' => array(
+    'panels_tabs_style_render_panel' => array(
+      'arguments' => array('content' => NULL),
+    ),
+  ),
+);
+
+/**
+ * Settings form callback.
+ */
+function panels_tabs_style_settings_form($settings) {
+  $form['title'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Optional Title'),
+    '#default_value' => (isset($settings['title'])) ? $settings['title'] : '',
+  );
+  $form['filling_tabs'] = array(
+    '#type' => 'radios',
+    '#title' => t('Horizontally filling tabs'),
+    '#options' => array(
+      'disabled' => t('Disabled'),
+      'equal' => t('Equal width tabs'),
+      'smart' => t('Equal width scaling tabs'),
+    ),
+    '#description' => t(
+      "Horizontally filling tabs make sure the tabs consume all available
+      horizontal space.<br />
+      Equal width tabs: sets the <em>width</em> property, forcing each tab
+      to be equally wide. If the text doesn't fit in the tab, the overflow
+      will be hidden.<br />
+      Horizontally filling, smart width tabs: calculates the length of the
+      text in each tab and compares this to the total length of the text on
+      all tabs. It then sets the width property of each tab according to the
+      percentage of text the tab contains."
+    ),
+    '#default_value' => (isset($settings['filling_tabs'])) ? $settings['filling_tabs'] : 'disabled',
+  );
+  return $form;
+}
+
+/**
+ * Settings form validation callback.
+ */
+function panels_tabs_style_settings_validate($form, &$form_state) {
+  if (!in_array($form_state['values']['filling_tabs'], array('disabled', 'equal', 'smart'))) {
+    form_error($form_state['values']['filling_tabs'], t('Invalid value detected.'));
+  }
+}
+
+/**
+ * Render callback.
+ */
+function theme_panels_tabs_style_render_panel($display, $owner_id, $panes, $settings) {
+  $output = '';
+
+  // Generate a unique id based on the CSS ID and the name of the panel in the
+  // layout.
+  $pane_id = reset(array_keys($panes));
+  $panel = $display->content[$pane_id]->panel;  
+  $id = "$display->css_id-$panel";
+
+  // Add the Javascript to the page, and save the settings for this panel.
+  _panels_tabs_add_js($id, $settings['filling_tabs']);
+
+  $tabs = array();
+  $tabs[$id] = array(
+    '#type' => 'tabset',
+  );
+  $index = 0;
+  foreach ($panes as $pane_id => $content) {
+    // Remove the title from the content. We don't want titles in both the tab
+    // and the content associated with the tab.
+    if ($content->content) {
+      $content_without_title = drupal_clone($content);
+      unset($content_without_title->title);
+
+      $tabs[$id][$pane_id] = array(
+        '#type'    => 'tabpage',
+        '#title'   => $content->title,
+        '#content' => theme('panels_pane', $content_without_title, $display->content[$pane_id], $display),
+        '#weight'  => $index,
+      );
+      $index++;
+    }
+  }
+
+  // See if an optional title was added.
+  if (!empty($settings['title'])) {
+    $output .= theme('panels_tabs_title', $settings['title']);
+  }
+
+  $output .= tabs_render($tabs);
+
+  return $output;
+}
