diff --git modules/block.skinr.inc modules/block.skinr.inc
index 4ab2298..a5e9764 100644
--- modules/block.skinr.inc
+++ modules/block.skinr.inc
@@ -15,20 +15,6 @@
  * Implements hook_skinr_config_info().
  */
 function block_skinr_config_info() {
-  $data['block']['form']['block_admin_configure'] = array(
-    'index_handler' => 'block_skinr_form_index_handler',
-    'preprocess_hook_callback' => 'block_skinr_preprocess_hook_callback',
-    'title' => t('block settings'),
-    'skinr_weight' => 0,
-    'collapsed' => FALSE,
-  );
-  $data['block']['form']['block_add_block_form'] = array(
-    'index_handler' => 'block_skinr_form_index_handler',
-    'preprocess_hook_callback' => 'block_skinr_preprocess_hook_callback',
-    'title' => t('block settings'),
-    'skinr_weight' => 0,
-    'collapsed' => FALSE,
-  );
   $data['block']['form']['skinr_ui_form'] = array(
     'preprocess_hook_callback' => 'block_skinr_preprocess_hook_callback',
     'title' => t('block settings'),
diff --git modules/comment.skinr.inc modules/comment.skinr.inc
index 56940c9..6e25640 100644
--- modules/comment.skinr.inc
+++ modules/comment.skinr.inc
@@ -15,12 +15,6 @@
  * Implements hook_skinr_config_info().
  */
 function comment_skinr_config_info() {
-  $data['comment']['form']['node_type_form'] = array(
-    'index_handler' => 'comment_skinr_form_index_handler',
-    'preprocess_hook_callback' => 'comment_skinr_preprocess_hook_callback',
-    'title' => t('comment settings'),
-    'weight' => 1,
-  );
   $data['comment']['form']['skinr_ui_form'] = array(
     'preprocess_hook_callback' => 'comment_skinr_preprocess_hook_callback',
     'title' => t('comment settings'),
diff --git modules/node.skinr.inc modules/node.skinr.inc
index d86a68f..1d6e54f 100644
--- modules/node.skinr.inc
+++ modules/node.skinr.inc
@@ -15,11 +15,6 @@
  * Implements hook_skinr_config_info().
  */
 function node_skinr_config_info() {
-  $data['node']['form']['node_type_form'] = array(
-    'index_handler' => 'node_skinr_form_index_handler',
-    'preprocess_hook_callback' => 'node_skinr_preprocess_hook_callback',
-    'title' => t('node settings'),
-  );
   $data['node']['form']['skinr_ui_form'] = array(
     'preprocess_hook_callback' => 'node_skinr_preprocess_hook_callback',
     'title' => t('node settings'),
diff --git modules/panels.skinr.inc modules/panels.skinr.inc
index 56c6a23..d58e91b 100644
--- modules/panels.skinr.inc
+++ modules/panels.skinr.inc
@@ -15,36 +15,11 @@
  * Implements hook_skinr_config_info().
  */
 function panels_skinr_config_info() {
-  $data['panels']['form']['panels_edit_style_settings_form'] = array(
-    'index_handler' => 'panels_skinr_form_index_handler',
-    'data_handler' => 'panels_skinr_data_handler',
-    'submit_handler' => 'panels_skinr_submit_handler_settings',
-    'preprocess_hook_callback' => 'panels_skinr_preprocess_hook_callback',
-    'title' => t('panel pane settings'),
-    'skinr_weight' => 0,
-    'collapsed' => FALSE,
-  );
-  // AJAX form.
   $data['panels']['form']['skinr_ui_form'] = array(
-    'preprocess_hook_callback' => 'panels_skinr_ajax_preprocess_hook_callback',
+    'preprocess_hook_callback' => 'panels_skinr_preprocess_hook_callback',
     'title' => t('panel pane settings'),
     'collapsed' => FALSE,
   );
-  // Panel pages.
-  $data['panels']['form']['page_manager_save_page_form'] = array(
-    'access_handler' => 'panels_skinr_access_handler_display',
-    'submit_handler' => 'panels_skinr_submit_handler_display',
-  );
-  // Content form for panel pages.
-  $data['panels']['form']['panels_panel_context_edit_content'] = array(
-    'access_handler' => 'panels_skinr_access_handler_display',
-    'submit_handler' => 'panels_skinr_submit_handler_display',
-  );
-  // Mini panels.
-  $data['panels']['form']['panels_edit_display_form'] = array(
-    'access_handler' => 'panels_skinr_access_handler_display',
-    'submit_handler' => 'panels_skinr_submit_handler_display',
-  );
   $data['panels']['preprocess']['panels_pane'] = array(
     'index_handler' => 'panels_skinr_preprocess_index_handler',
   );
@@ -53,279 +28,6 @@ function panels_skinr_config_info() {
 }
 
 /**
- * Skinr form index handler.
- *
- * @param $op
- *   What kind of action is being performed. Possible values:
- *   - 'form': the form elements for Skinr are being inserted in a form.
- *   - 'submit': the form has been submitted.
- * @param &$form
- *   - For 'form', passes in the $form parameter from hook_form_alter().
- *   - For 'submit', passes in the $form parameter from hook_form_submit().
- * @param $form_state
- *   - For 'form', passes in the $form_state parameter from hook_form_alter().
- *   - For 'submit', passes in the $form_state parameter from hook_form_submit().
- *
- * @return
- *   The index where we can find our values in Skinr's data structure.
- */
-function panels_skinr_form_index_handler($op, &$form, $form_state) {
-  switch ($op) {
-    case 'form':
-    case 'submit':
-      switch ($form_state['type']) {
-        case 'display':
-          return 'display-' . $form_state['display']->did;
-        case 'region':
-          return 'display-' . $form_state['display']->did . '-region-' . $form_state['pid'];
-        case 'pane':
-          return 'display-' . $form_state['display']->did . '-pane-' . $form_state['pid'];
-      }
-  }
-}
-
-/**
- * Skinr access handler.
- *
- * @param $op
- *   What kind of action is being performed. Possible values:
- *   - edit skin settings
- *   - edit advanced skin settings
- * @param &$form
- *   Passes in the $form parameter from hook_form_alter().
- * @param $form_state
- *   Passes in the $form_state parameter from hook_form_alter().
- *
- * @return
- *   TRUE if we get access, FALSE otherwise.
- */
-function panels_skinr_access_handler_display($op, &$form, $form_state) {
-  // We don't want the skinr settings form to appear on this form. We only want
-  // to intercept it so we can save our cached data.
-
-  // Since we're not using the form, we won't get our form submitter, so let's
-  // add it manually.
-
-  $form_id = $form['form_id']['#value'];
-
-  switch ($form_id) {
-    case 'panels_panel_context_edit_content':
-      // Update and save button
-
-      // Only add submit handler once.
-      if (!in_array('skinr_ui_form_submit', $form['#submit'])) {
-        $form['#submit'][] = 'skinr_ui_form_submit';
-      }
-      break;
-
-    case 'page_manager_save_page_form':
-      // Submitting a panel page.
-
-      // Only add submit handler once.
-      if (!in_array('skinr_ui_form_submit', $form['#submit'])) {
-        $form['#submit'][] = 'skinr_ui_form_submit';
-      }
-      if (isset($form['save']['#submit']) && !in_array('skinr_ui_form_submit', $form['save']['#submit'])) {
-        $form['save']['#submit'][] = 'skinr_ui_form_submit';
-      }
-      if (isset($form['cancel']['#submit']) && !in_array('skinr_ui_form_submit', $form['cancel']['#submit'])) {
-        $form['cancel']['#submit'][] = 'skinr_ui_form_submit';
-      }
-      break;
-
-    case 'panels_edit_display_form':
-      // Only add submit handler once.
-      if (!in_array('skinr_ui_form_submit', $form['#submit'])) {
-        $form['#submit'][] = 'skinr_ui_form_submit';
-      }
-      if (isset($form['buttons']['submit']['#submit']) && !in_array('skinr_ui_form_submit', $form['buttons']['submit']['#submit'])) {
-        $form['buttons']['submit']['#submit'][] = 'skinr_ui_form_submit';
-      }
-      break;
-
-    default:
-      // We only want to save or cancel on these other forms if we're dealing with a panel_page.
-      if ($form_state['task']['name'] == 'panel_page') {
-        // Only add submit handler once
-        if (!in_array('skinr_ui_form_submit', $form['#submit'])) {
-          $form['#submit'][] = 'skinr_ui_form_submit';
-        }
-        if (isset($form['buttons']['cancel']['#submit']) && !in_array('skinr_ui_form_submit', $form['buttons']['cancel']['#submit'])) {
-          $form['buttons']['cancel']['#submit'][] = 'skinr_ui_form_submit';
-        }
-      }
-      break;
-  }
-
-  return FALSE;
-}
-
-/**
- * Skinr data handler.
- * This is the data that populates the skinr form.
- *
- * @param &$form
- *   Passes in the $form parameter from hook_form_submit().
- * @param $form_state
- *   Passes in the $form_state parameter from hook_form_submit().
- * @param $module
- *   The module that is currently being processed.
- * @param $form_settings
- *   The settings from hook_skinr_config() for the form that's currently being
- *   processed.
- *
- * @return
- *   A skinr settings object.
- */
-function panels_skinr_data_handler(&$form, $form_state, $theme, $module, $form_settings) {
-  // Ensure we have the required index_handler.
-  if (empty($form_settings['index_handler'])) {
-    trigger_error(sprintf("No index_handler was found for form_id '%s' in module '%s'.", $form_id, $module), E_USER_ERROR);
-  }
-  $index = skinr_handler('form_index_handler', 'form', $form_settings['index_handler'], $form, $form_state);
-
-  // Fetch skinr data for this view from cache.
-  ctools_include('object-cache');
-
-  if ($skinr_data = ctools_object_cache_get('skinr', $form_state['display']->did, TRUE)) {
-    if (isset($skinr_data[$theme][$index])) {
-      return $skinr_data[$theme][$index];
-    }
-    else {
-      return array();
-    }
-  }
-
-  // No data exists in cache, so let's grab it from the regular source.
-  return skinr_skin_load($theme, $module, $index);
-}
-
-/**
- * Skinr submit handler.
- *
- * @param &$form
- *   Passes in the $form parameter from hook_form_submit().
- * @param $form_state
- *   Passes in the $form_state parameter from hook_form_submit().
- * @param $module
- *   The module that is currently being processed.
- * @param $form_settings
- *   The settings from hook_skinr_config() for the form that's currently being
- *   processed.
- */
-function panels_skinr_submit_handler_settings(&$form, $form_state, $module, $form_settings) {
-  foreach ($form_state['values']['skinr_settings'][$module . '_group'] as $theme_name => $theme) {
-    if ((!empty($theme['widgets']) && is_array($theme['widgets'])) || isset($theme['_additional'])) {
-      $hook  = $module;
-      $sid   = skinr_handler('form_index_handler', 'submit', $form_settings['index_handler'], $form, $form_state);
-
-      // Key doesn't exist properly for new displays. Perhaps we should inject a timestamp based key into the display object
-      // and use that for reference on the final submit? If it works...
-
-      $value = array();
-
-      if (!empty($theme['widgets']) && is_array($theme['widgets'])) {
-        foreach ($theme['widgets'] as $skin_name => $skin_value) {
-          $value['_options'][$skin_name] = $skin_value;
-        }
-      }
-
-      if (isset($theme['_additional'])) {
-        $theme['_additional'] = trim($theme['_additional']);
-        if (!empty($theme['_additional'])) {
-          $value['_additional'] = $theme['_additional'];
-        }
-      }
-
-      if (empty($sid)) {
-        // We didn't receive a valid sid, so raise an error.
-        drupal_set_message(t("Skinr settings weren't saved due to an error."), 'error');
-      }
-
-      // Save skinr_settings for this panel display in cache.
-      ctools_include('object-cache');
-      if (!$skinr_data = ctools_object_cache_get('skinr', $form_state['display']->did, TRUE)) {
-        $skinr_data = array();
-        // Fetch skinr data.
-        $skinr = skinr_skin_load($theme_name);
-        if (isset($skinr[$module])) {
-          foreach ($skinr[$module] as $skinr_key => $skinr_value) {
-            if (drupal_substr($skinr_key, 0, drupal_strlen('display-' . $form_state['display']->did)) == 'display-' . $form_state['display']->did) {
-              $skinr_data[$theme_name][$skinr_key] = $skinr_value;
-            }
-          }
-        }
-      }
-      $skinr_data[$theme_name][$sid] = $value;
-      ctools_object_cache_set('skinr', $form_state['display']->did, $skinr_data);
-    }
-  }
-}
-
-/**
- * @todo Remove values from skinr if a display is deleted.
- */
-function panels_skinr_submit_handler_display(&$form, $form_state, $module, $form_settings) {
-  $form_id = $form_state['values']['form_id'];
-
-  // Include ctools' object cache files.
-  ctools_include('object-cache');
-
-  if ($form_state['values']['op'] == t('Save') || $form_state['values']['op'] == t('Update and save')) {
-    switch ($form_id) {
-      case 'panels_panel_context_edit_content':
-      case 'page_manager_save_page_form':
-        // Panel page.
-        foreach ($form_state['page']->handler_info as $id => $info) {
-          if ($info['changed']) {
-            _panels_skinr_save_and_clear_cache($form_state['page']->handlers[$id]->conf['did']);
-          }
-        }
-        break;
-
-      case 'panels_edit_display_form':
-        // Mini panels.
-        _panels_skinr_save_and_clear_cache($form_state['display']->did);
-        break;
-    }
-  }
-  elseif ($form_state['values']['op'] == t('Cancel')) {
-    switch ($form_id) {
-      case 'page_manager_save_page_form':
-        // Panel page.
-        foreach ($form_state['page']->handler_info as $id => $info) {
-          if ($info['changed']) {
-            ctools_object_cache_clear('skinr', $form_state['page']->handlers[$id]->conf['did']);
-          }
-        }
-        break;
-
-      case 'panels_edit_display_form':
-        // Mini panels.
-        ctools_object_cache_clear('skinr', $form_state['display']->did);
-        break;
-    }
-  }
-}
-
-function _panels_skinr_save_and_clear_cache($did) {
-  if ($skinr_data = ctools_object_cache_get('skinr', $did, TRUE)) {
-    foreach ($skinr_data as $theme_name => $theme) {
-      foreach ($theme as $sid => $skins) {
-        $skinr = new stdClass();
-        $skinr->theme = $theme_name;
-        $skinr->module = 'panels';
-        $skinr->sid = $sid;
-        $skinr->skins = $skins;
-
-        skinr_skin_save($skinr);
-      }
-    }
-    ctools_object_cache_clear('skinr', $did);
-  }
-}
-
-/**
  * Skinr preprocess hook callback.
  *
  * @param &$form
@@ -337,28 +39,6 @@ function _panels_skinr_save_and_clear_cache($did) {
  *   An array of preprocess hooks we wish to use.
  */
 function panels_skinr_preprocess_hook_callback(&$form, $form_state) {
-  switch ($form_state['type']) {
-    case 'display':
-      return 'panels_display';
-    case 'region':
-      return 'panels_region';
-    case 'pane':
-      return 'panels_pane';
-  }
-}
-
-/**
- * Skinr preprocess hook callback.
- *
- * @param &$form
- *   Passes in the $form parameter from hook_form_alter().
- * @param $form_state
- *   Passes in the $form_state parameter from hook_form_alter().
- *
- * @return
- *   An array of preprocess hooks we wish to use.
- */
-function panels_skinr_ajax_preprocess_hook_callback(&$form, $form_state) {
   if (strpos($form['skinr']['sid']['#value'], '-region-') !== FALSE) {
     return 'panels_region';
   }
@@ -389,20 +69,20 @@ function panels_skinr_preprocess_index_handler(&$variables) {
   return $index;
 }
 
-//----------------------------------------------------------------------------
-// Panels hooks.
-
 /**
- * Implements hook_ctools_plugin_directory() to let the system know
- * we implement panels plugins.
+ * Implements hook_panels_pane_content_alter().
+ *
+ * Because of the way panels handles contextual links we can't use a
+ * contextual links handler.
  */
-function skinr_ctools_plugin_directory($module, $plugin) {
-  // Safety: go away if CTools is not at an appropriate version.
-  if (!module_invoke('ctools', 'api_version', PANELS_REQUIRED_CTOOLS_API)) {
-    return;
-  }
-  if ($module == 'panels') {
-    return 'modules/panels';
+function panels_panels_pane_content_alter(&$content, $pane, $display_args, $context) {
+  if (user_access('skinr access')) {
+    $sid = 'display-' . $pane->did . '-pane-' . $pane->pid;
+    $content->admin_links[] = array(
+      'title' => t('Edit skin'),
+      'href' => 'admin/appearance/skinr/edit/nojs/panels/' . $sid,
+      'query' => drupal_get_destination(),
+    );
   }
 }
 
diff --git modules/panels/skinr.inc modules/panels/skinr.inc
deleted file mode 100644
index d6974d6..0000000
--- modules/panels/skinr.inc
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-// $Id$
-
-/**
- * @file
- * Definition of the 'skinr' panel style.
- */
-
-// 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',
-);
-
-/**
- * Render region callback.
- *
- * @ingroup themeable
- */
-function theme_panels_skinr_style_render_region($variables) {
-  $hook = 'panels';
-  $sid = 'display-' . $variables['display']->did . '-region-' . $variables['region_id'];
-
-  // Add skinr styles.
-  $style = array();
-  if ($skinr = skinr_skin_load(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.
-  if (user_access('skinr access')) {
-    $variables['content']->admin_links[] = array(
-      'title' => t('Edit skin'),
-      'href' => 'admin/appearance/skinr/edit/nojs/panels/' . $sid,
-      'query' => drupal_get_destination(),
-    );
-  }
-
-  return $output;
-}
-
-/**
- * Render pane callback.
- *
- * @ingroup themeable
- */
-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_skin_load(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.
-  if (user_access('skinr access')) {
-    $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($style_settings) {
-  // Return an empty form, and let skinr handle the rest.
-  $form = array();
-  return $form;
-}
diff --git modules/views.skinr.inc modules/views.skinr.inc
index eb09a9b..191747f 100644
--- modules/views.skinr.inc
+++ modules/views.skinr.inc
@@ -16,21 +16,6 @@
  * Implements hook_skinr_config_info().
  */
 function views_skinr_config_info() {
-  $data['views']['form']['views_ui_edit_display_form'] = array(
-    'index_handler' => 'views_skinr_form_index_handler',
-    'access_handler' => 'views_skinr_access_handler_display',
-    'data_handler' => 'views_skinr_data_handler',
-    'submit_handler' => 'views_skinr_submit_handler_display',
-    'submit_handler_attach_to' => array('buttons', 'submit', '#submit'),
-    'preprocess_hook_callback' => 'views_skinr_preprocess_hook_callback',
-    'title' => t('views style settings'),
-    'skinr_weight' => 0,
-    'collapsed' => FALSE,
-  );
-  $data['views']['form']['views_ui_edit_view_form'] = array(
-    'access_handler' => 'views_skinr_access_handler_view',
-    'submit_handler' => 'views_skinr_submit_handler_view',
-  );
   $data['views']['form']['skinr_ui_form'] = array(
     'preprocess_hook_callback' => 'views_skinr_preprocess_hook_callback',
     'title' => t('views style settings'),
@@ -44,232 +29,6 @@ function views_skinr_config_info() {
 }
 
 /**
- * Skinr form index handler.
- *
- * @param $op
- *   What kind of action is being performed. Possible values:
- *   - 'form': the form elements for Skinr are being inserted in a form.
- *   - 'submit': the form has been submitted.
- * @param &$form
- *   - For 'form', passes in the $form parameter from hook_form_alter().
- *   - For 'submit', passes in the $form parameter from hook_form_submit().
- * @param $form_state
- *   - For 'form', passes in the $form_state parameter from hook_form_alter().
- *   - For 'submit', passes in the $form_state parameter from hook_form_submit().
- *
- * @return
- *   The index where we can find our values in Skinr's data structure.
- */
-function views_skinr_form_index_handler($op, &$form, $form_state) {
-  switch ($op) {
-    case 'form':
-      $default = $form_state['view']->display_handler->is_defaulted('style_options');
-      if ($default) {
-        return 'view-'. $form_state['view']->name .'-display-default';
-      }
-      else {
-        return 'view-'. $form_state['view']->name .'-display-'. $form_state['view']->current_display;
-      }
-
-    case 'submit':
-      // Can't use display_handler->is_defaulted('style_options') on submit
-      $default = ($form_state['#section'] == 'default-style_options');
-      if ($default) {
-        return 'view-'. $form_state['view']->name .'-display-default';
-      }
-      else {
-        return 'view-'. $form_state['view']->name .'-display-'. $form_state['display_id'];
-      }
-  }
-}
-
-/**
- * Skinr access handler.
- *
- * @param $op
- *   What kind of action is being performed. Possible values:
- *   - edit skin settings
- *   - edit advanced skin settings
- * @param &$form
- *   Passes in the $form parameter from hook_form_alter().
- * @param $form_state
- *   Passes in the $form_state parameter from hook_form_alter().
- *
- * @return
- *   TRUE if we get access, FALSE otherwise.
- */
-function views_skinr_access_handler_display($op, &$form, $form_state) {
-  if ($access = skinr_access_handler($op, $form, $form_state)) {
-    // Views uses the same form_id for all forms, but it sets a $section
-    // variable to distinguish between them. So only show the skinr settings
-    // form on the style options form.
-    if ($form_state['section'] != 'style_options') {
-      $access = FALSE;
-    }
-  }
-
-  return $access;
-}
-
-function views_skinr_access_handler_view($op, &$form, $form_state) {
-  // We don't want the skinr settings form to appear on this form. We only want
-  // to intercept it so we can save our cached data.
-
-  // Since we're not using the form, we won't get our form submitter, so let's
-  // add it manually.
-
-  // Only add submit handler once
-  if (!in_array('skinr_ui_form_submit', $form['#submit'])) {
-    $form['#submit'][] = 'skinr_ui_form_submit';
-  }
-  // Special for views
-  if (isset($form['buttons']['save']['#submit']) && !in_array('skinr_ui_form_submit', $form['buttons']['save']['#submit'])) {
-    $form['buttons']['save']['#submit'][] = 'skinr_ui_form_submit';
-  }
-  if (isset($form['buttons']['cancel']['#submit']) && !in_array('skinr_ui_form_submit', $form['buttons']['cancel']['#submit'])) {
-    // Need to make this happen before views' submit handler because it hijacks
-    // things and does a drupal_goto(). That effectively prevents any other
-    // submit handlers from being processed.
-    array_unshift($form['buttons']['cancel']['#submit'], 'skinr_ui_form_submit');
-  }
-
-  return FALSE;
-}
-
-/**
- * Skinr data handler.
- * This is the data that populates the skinr form.
- *
- * @param &$form
- *   Passes in the $form parameter from hook_form_submit().
- * @param $form_state
- *   Passes in the $form_state parameter from hook_form_submit().
- * @param $module
- *   The module that is currently being processed.
- * @param $form_settings
- *   The settings from hook_skinr_config() for the form that's currently being
- *   processed.
- *
- * @return
- *   A skinr settings object.
- */
-function views_skinr_data_handler(&$form, $form_state, $theme, $module, $form_settings) {
-  // Ensure we have the required index_handler
-  if (empty($form_settings['index_handler'])) {
-    trigger_error(sprintf("No index_handler was found for form_id '%s' in module '%s'.", $form_id, $module), E_USER_ERROR);
-  }
-  $index = skinr_handler('form_index_handler', 'form', $form_settings['index_handler'], $form, $form_state);
-
-  // Fetch skinr data for this view from cache
-  views_include('cache');
-
-  if ($skinrs = ctools_object_cache_get('skinr', $form_state['view']->name)) {
-    if (isset($skinrs[$theme][$index])) {
-      $skinr = new stdClass();
-      $skinr->theme = $theme;
-      $skinr->module = $module;
-      $skinr->sid = $index;
-      $skinr->skins = $skinrs[$theme][$index];
-
-      return $skinr;
-    }
-    else {
-      return array();
-    }
-  }
-
-  // No data exists in cache, so let's grab it from the regular source
-  return skinr_skin_load($theme, $module, $index);
-}
-
-/**
- * Skinr submit handler.
- *
- * @param &$form
- *   Passes in the $form parameter from hook_form_submit().
- * @param $form_state
- *   Passes in the $form_state parameter from hook_form_submit().
- * @param $module
- *   The module that is currently being processed.
- * @param $form_settings
- *   The settings from hook_skinr_config() for the form that's currently being
- *   processed.
- */
-function views_skinr_submit_handler_display(&$form, $form_state, $module, $form_settings) {
-  foreach ($form_state['values']['skinr_settings'][$module .'_group'] as $theme_name => $theme) {
-    if ((!empty($theme['widgets']) && is_array($theme['widgets'])) || isset($theme['_additional'])) {
-      $sid   = skinr_handler('form_index_handler', 'submit', $form_settings['index_handler'], $form, $form_state);
-      $value = array();
-
-      if (!empty($theme['widgets']) && is_array($theme['widgets'])) {
-        foreach ($theme['widgets'] as $skin_name => $skin_value) {
-          $value['_options'][$skin_name] = $skin_value;
-        }
-      }
-
-      if (isset($theme['_additional'])) {
-        $theme['_additional'] = trim($theme['_additional']);
-        if (!empty($theme['_additional'])) {
-          $value['_additional'] = $theme['_additional'];
-        }
-      }
-
-      if (empty($sid)) {
-        // We didn't receive a valid sid, so raise an error
-        drupal_set_message(t("Skinr settings weren't saved due to an error."), 'error');
-      }
-
-      // Save skinr_settings for this view in cache
-      ctools_include('object-cache');
-      if (!$skinrs = ctools_object_cache_get('skinr', $form_state['view']->name, TRUE)) {
-        $skinrs = array();
-        // Fetch skinr data
-        $skinr = skinr_skin_load($theme_name);
-        if (isset($skinr[$module])) {
-          foreach ($skinr[$module] as $skinr_key => $skinr_value) {
-            if (drupal_substr($skinr_key, 0, drupal_strlen('view-'. $form_state['view']->name)) == 'view-'. $form_state['view']->name) {
-              $skinrs[$theme_name][$skinr_key] = $skinr_value;
-            }
-          }
-        }
-      }
-      $skinrs[$theme_name][$sid] = $value;
-      ctools_object_cache_set('skinr', $form_state['view']->name, $skinrs);
-    }
-  }
-}
-
-function views_skinr_submit_handler_view(&$form, $form_state, $module, $form_settings) {
-  switch ($form_state['values']['op']) {
-    case t('Save'):
-      // Fetch skinr data for this view from cache
-      ctools_include('object-cache');
-
-      if ($skinrs = ctools_object_cache_get('skinr', $form_state['view']->name, TRUE)) {
-        foreach ($skinrs as $theme_name => $theme) {
-          foreach ($theme as $sid => $skins) {
-            $skinr = new stdClass();
-            $skinr->theme = $theme_name;
-            $skinr->module = $module;
-            $skinr->sid = $sid;
-            $skinr->skins = $skins;
-
-            skinr_skin_save($skinr);
-          }
-        }
-        ctools_object_cache_clear('skinr', $form_state['view']->name);
-      }
-      break;
-    case t('Cancel'):
-      // Remove our data from views cache
-      ctools_include('object-cache');
-
-      ctools_object_cache_clear('skinr', $form_state['view']->name);
-      break;
-  }
-}
-
-/**
  * Skinr form preprocess hook callback.
  *
  * @param &$form
@@ -344,6 +103,9 @@ function views_skinr_preprocess_index_handler(&$variables) {
 
 /**
  * Implements hook_views_admin_links_alter().
+ *
+ * Because of the way views handles contextual links we can't use a
+ * contextual links handler.
  */
 function views_views_admin_links_alter(&$links, &$view) {
   $default = $view->display_handler->is_defaulted('style_options');
