diff --git modules/panels.skinr.inc modules/panels.skinr.inc
index b8c2bfd..1234256 100644
--- modules/panels.skinr.inc
+++ modules/panels.skinr.inc
@@ -72,13 +72,13 @@ function panels_skinr_form_index_handler($op, &$form, $form_state) {
   switch ($op) {
     case 'form':
     case 'submit':
-      switch ($form['#parameters'][1]['type']) {
+      switch ($form_state['type']) {
         case 'display':
-          return 'display-' . $form['#parameters'][1]['display']->did;
-        case 'panel':
-          return 'display-' . $form['#parameters'][1]['display']->did . '-panel-' . $form['#parameters'][1]['pid'];
+          return 'display-' . $form_state['display']->did;
+        case 'region':
+          return 'display-' . $form_state['display']->did . '-region-' . $form_state['pid'];
         case 'pane':
-          return 'display-' . $form['#parameters'][1]['display']->did . '-pane-' . $form['#parameters'][1]['pid'];
+          return 'display-' . $form_state['display']->did . '-pane-' . $form_state['pid'];
       }
   }
 }
@@ -341,11 +341,11 @@ function _panels_skinr_save_and_clear_cache($did) {
  *   The preprocess_hook we wish to use.
  */
 function panels_skinr_preprocess_hook_callback(&$form, $form_state) {
-  switch ($form['#parameters'][1]['type']) {
+  switch ($form_state['type']) {
     case 'display':
       return 'panels_display';
-    case 'panel':
-      return 'panels_panel';
+    case 'region':
+      return 'panels_region';
     case 'pane':
       return 'panels_pane';
   }
@@ -362,8 +362,8 @@ function panels_skinr_preprocess_hook_callback(&$form, $form_state) {
  *   The preprocess_hook we wish to use.
  */
 function panels_skinr_ajax_preprocess_hook_callback(&$form, $form_state) {
-  if (strpos($form['skinr']['sid']['#value'], '-panel-') !== FALSE) {
-    return 'panels_panel';
+  if (strpos($form['skinr']['sid']['#value'], '-region-') !== FALSE) {
+    return 'panels_region';
   }
   elseif (strpos($form['skinr']['sid']['#value'], '-pane-') !== FALSE) {
     return 'panels_pane';
diff --git modules/panels/skinr.inc modules/panels/skinr.inc
index 286c265..7c6ba85 100644
--- modules/panels/skinr.inc
+++ modules/panels/skinr.inc
@@ -7,72 +7,41 @@
  */
 
 // Plugin definition
+$plugin = array(
+  'title'              => t('Skinr'),
+  'description'        => t('Allows you to apply Skinr skins.'),
+  'render region'      => 'panels_skinr_style_render_region',
+  'render pane'        => 'panels_skinr_style_render_pane',
+  'settings form'      => 'panels_skinr_style_settings_form',
+  'pane settings form' => 'panels_skinr_style_settings_form',
+);
 
 /**
- * Implementation of hook_panels_style_info().
- */
-function skinr_skinr_panels_styles() {
-  return array(
-    'skinr' => array(
-      'title'              => t('Skinr'),
-      'description'        => t('Allows you to apply Skinr skins.'),
-      'render panel'       => 'panels_skinr_style_render_panel',
-      'render pane'        => 'panels_skinr_style_render_pane',
-      'settings form'      => 'panels_skinr_style_settings_form',
-      'pane settings form' => 'panels_skinr_style_settings_form',
-    ),
-  );
-}
-
-/**
- * Render panel callback.
- *
- * @todo: Need to wait for a panels update to panels_render_panel()
- *        The panel_id is not sent through properly, yet. Once it works as
- *        promised, we can remove the workaround.
+ * Render region callback.
  *
  * @ingroup themeable
  */
-function theme_panels_skinr_style_render_panel($display, $panel_id, $panes, $settings) {
-  // Workaround for missing/invalid $panel_id.
-  if (empty($panel_id)) {
-    // We grab the first pane that we know exists in this panel and extract the panel_id from it.
-    $panes_keys = array_keys($panes);
-    $panel_id = $display->content[$panes_keys[0]]->panel;
-  }
-
-  $output = '';
-  $print_separator = FALSE;
-  foreach ($panes as $pane_id => $content) {
-    // Add the separator if we've already displayed a pane.
-    if ($print_separator) {
-      $output .= '<div class="panel-separator"></div>';
-    }
-    $output .= $text = panels_render_pane($content, $display->content[$pane_id], $display);
-
-    // If we displayed a pane, this will become true; if not, it will become
-    // false.
-    $print_separator = (bool) $text;
-  }
-
-  // Add skinr styles
+function theme_panels_skinr_style_render_region($variables) {
   $hook = 'panels';
-  if (isset($display->panel_settings[$panel_id]['style']) && isset($display->panel_settings[$panel_id]['style']) == 'skinr') {
-    // Specific style set for this panel.
-    $sid = 'display-' . $display->did . '-panel-' . $panel_id;
-  }
-  else {
-    // No specific style set, so use the display's style.
-    $sid = 'display-' . $display->did;
-  }
+  $sid = 'display-' . $variables['display']->did . '-region-' . $variables['region_id'];
+
+  // Add skinr styles.
   $style = array();
-  if($skinr = skinr_get(NULL, $hook, $sid)) {
+  if ($skinr = skinr_get(NULL, $hook, $sid)) {
     $style = implode(' ', skinr_flatten_skins_array($skinr->skins));
   }
 
+  $output = implode('<div class="panel-separator"></div>', $variables['panes']);
   if (!empty($style)) {
     $output = '<div class="' . $style . '">' . $output . '</div>';
   }
+  
+  // Add our contextual links here because panels does some crazy custom stuff.
+  $variables['content']->admin_links[] = array(
+    'title' => t('Edit skin'),
+    'href' => 'admin/appearance/skinr/edit/nojs/panels/' . $sid,
+    'query' => drupal_get_destination(),
+  );
 
   return $output;
 }
@@ -82,14 +51,39 @@ function theme_panels_skinr_style_render_panel($display, $panel_id, $panes, $set
  *
  * @ingroup themeable
  */
-function theme_panels_skinr_style_render_pane($content, $pane, $display) {
-  return theme('panels_pane', $content, $pane, $display);
+function theme_panels_skinr_style_render_pane($variables) {
+  $hook = 'panels';
+  $sid = 'display-' . $variables['display']->did . '-pane-' . $variables['pane']->pid;
+
+  // Add skinr styles
+  $style = array();
+  if ($skinr = skinr_get(NULL, $hook, $sid)) {
+    $style = skinr_flatten_skins_array($skinr->skins);
+  }
+
+  if (!empty($style)) {
+    if (!empty($variables['classes_array'])) {
+      $variables['classes_array'] += $style;
+    }
+    else {
+      $variables['classes_array'] = $style;
+    }
+  }
+  
+  // Add our contextual links here because panels does some crazy custom stuff.
+  $variables['content']->admin_links[] = array(
+    'title' => t('Edit skin'),
+    'href' => 'admin/appearance/skinr/edit/nojs/panels/' . $sid,
+    'query' => drupal_get_destination(),
+  );
+
+  return theme('panels_pane', $variables);
 }
 
 /**
  * Settings form callback.
  */
-function panels_skinr_style_settings_form($settings, $panels_display = NULL, $region = NULL, $type = NULL) {
+function panels_skinr_style_settings_form($style_settings) {
   // Return an empty form, and let skinr handle the rest.
   $form = array();
   return $form;
diff --git skinr.install skinr.install
index a8fa30b..97443c0 100644
--- skinr.install
+++ skinr.install
@@ -191,6 +191,15 @@ function skinr_uninstall() {
 }
 
 /**
+ * Implements hook_update_last_removed().
+ *
+ * Make sure any previous updates aren't skipped.
+ */
+function skinr_update_last_removed() {
+  return 6004;
+}
+
+/**
  * Install new skinr tables and convert old variables to the new db system.
  */
 function skinr_update_7001() {
