diff --git modules/block.skinr.inc modules/block.skinr.inc
index 2c539a0..4ab2298 100644
--- modules/block.skinr.inc
+++ modules/block.skinr.inc
@@ -12,9 +12,9 @@
  */
 
 /**
- * Implements hook_skinr_config().
+ * Implements hook_skinr_config_info().
  */
-function block_skinr_config() {
+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',
diff --git modules/comment.skinr.inc modules/comment.skinr.inc
index 4bbafd9..56940c9 100644
--- modules/comment.skinr.inc
+++ modules/comment.skinr.inc
@@ -12,9 +12,9 @@
  */
 
 /**
- * Implements hook_skinr_config().
+ * Implements hook_skinr_config_info().
  */
-function comment_skinr_config() {
+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',
@@ -69,7 +69,7 @@ function comment_skinr_form_index_handler($op, &$form, &$form_state) {
           $skinr->sid = $form_state['values']['old_type'];
           $skinr->skins = array();
 
-          skinr_set($skinr);
+          skinr_skin_save($skinr);
         }
       }
     return $form_state['values']['type'];
diff --git modules/node.skinr.inc modules/node.skinr.inc
index c69ee47..d86a68f 100644
--- modules/node.skinr.inc
+++ modules/node.skinr.inc
@@ -12,9 +12,9 @@
  */
 
 /**
- * Implements hook_skinr_config().
+ * Implements hook_skinr_config_info().
  */
-function node_skinr_config() {
+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',
@@ -67,7 +67,7 @@ function node_skinr_form_index_handler($op, &$form, $form_state) {
           $skinr->sid = $form_state['values']['old_type'];
           $skinr->skins = array();
 
-          skinr_set($skinr);
+          skinr_skin_save($skinr);
         }
       }
     return $form_state['values']['type'];
diff --git modules/panels.skinr.inc modules/panels.skinr.inc
index 58b714e..96babcf 100644
--- modules/panels.skinr.inc
+++ modules/panels.skinr.inc
@@ -12,9 +12,9 @@
  */
 
 /**
- * Implements hook_skinr_config().
+ * Implements hook_skinr_config_info().
  */
-function panels_skinr_config() {
+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',
@@ -197,7 +197,7 @@ function panels_skinr_data_handler(&$form, $form_state, $theme, $module, $form_s
   }
 
   // No data exists in cache, so let's grab it from the regular source.
-  return skinr_get($theme, $module, $index);
+  return skinr_skin_load($theme, $module, $index);
 }
 
 /**
@@ -225,8 +225,8 @@ function panels_skinr_submit_handler_settings(&$form, $form_state, $module, $for
       $value = array();
 
       if (!empty($theme['widgets']) && is_array($theme['widgets'])) {
-        foreach ($theme['widgets'] as $skin_id => $skin_value) {
-          $value[$skin_id] = $skin_value;
+        foreach ($theme['widgets'] as $skin_name => $skin_value) {
+          $value['_options'][$skin_name] = $skin_value;
         }
       }
 
@@ -247,7 +247,7 @@ function panels_skinr_submit_handler_settings(&$form, $form_state, $module, $for
       if (!$skinr_data = ctools_object_cache_get('skinr', $form_state['display']->did, TRUE)) {
         $skinr_data = array();
         // Fetch skinr data.
-        $skinr = skinr_get($theme_name);
+        $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) {
@@ -318,7 +318,7 @@ function _panels_skinr_save_and_clear_cache($did) {
         $skinr->sid = $sid;
         $skinr->skins = $skins;
 
-        skinr_set($skinr);
+        skinr_skin_save($skinr);
       }
     }
     ctools_object_cache_clear('skinr', $did);
diff --git modules/panels/skinr.inc modules/panels/skinr.inc
index d551df8..d6974d6 100644
--- modules/panels/skinr.inc
+++ modules/panels/skinr.inc
@@ -27,7 +27,7 @@ function theme_panels_skinr_style_render_region($variables) {
 
   // Add skinr styles.
   $style = array();
-  if ($skinr = skinr_get(NULL, $hook, $sid)) {
+  if ($skinr = skinr_skin_load(NULL, $hook, $sid)) {
     $style = implode(' ', skinr_flatten_skins_array($skinr->skins));
   }
 
@@ -59,7 +59,7 @@ function theme_panels_skinr_style_render_pane($variables) {
 
   // Add skinr styles
   $style = array();
-  if ($skinr = skinr_get(NULL, $hook, $sid)) {
+  if ($skinr = skinr_skin_load(NULL, $hook, $sid)) {
     $style = skinr_flatten_skins_array($skinr->skins);
   }
 
diff --git modules/skinr.skinr.inc modules/skinr.skinr.inc
index 273ec8e..9cb735a 100644
--- modules/skinr.skinr.inc
+++ modules/skinr.skinr.inc
@@ -12,9 +12,9 @@
  */
 
 /**
- * Implementation of hook_skinr_config().
+ * Implementation of hook_skinr_config_info().
  */
-function skinr_skinr_config() {
+function skinr_skinr_config_info() {
   $data['rules']['form']['skinr_rule_edit'] = array(
     'index_handler' => 'rules_skinr_form_index_handler',
     'preprocess_hook_callback' => 'rules_skinr_preprocess_hook_callback',
diff --git modules/views.skinr.inc modules/views.skinr.inc
index 10dbee8..8f66495 100644
--- modules/views.skinr.inc
+++ modules/views.skinr.inc
@@ -13,9 +13,9 @@
  */
 
 /**
- * Implements hook_skinr_config().
+ * Implements hook_skinr_config_info().
  */
-function views_skinr_config() {
+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',
@@ -179,7 +179,7 @@ function views_skinr_data_handler(&$form, $form_state, $theme, $module, $form_se
   }
 
   // No data exists in cache, so let's grab it from the regular source
-  return skinr_get($theme, $module, $index);
+  return skinr_skin_load($theme, $module, $index);
 }
 
 /**
@@ -202,8 +202,8 @@ function views_skinr_submit_handler_display(&$form, $form_state, $module, $form_
       $value = array();
 
       if (!empty($theme['widgets']) && is_array($theme['widgets'])) {
-        foreach ($theme['widgets'] as $skin_id => $skin_value) {
-          $value[$skin_id] = $skin_value;
+        foreach ($theme['widgets'] as $skin_name => $skin_value) {
+          $value['_options'][$skin_name] = $skin_value;
         }
       }
 
@@ -224,7 +224,7 @@ function views_skinr_submit_handler_display(&$form, $form_state, $module, $form_
       if (!$skinrs = ctools_object_cache_get('skinr', $form_state['view']->name, TRUE)) {
         $skinrs = array();
         // Fetch skinr data
-        $skinr = skinr_get($theme_name);
+        $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) {
@@ -254,7 +254,7 @@ function views_skinr_submit_handler_view(&$form, $form_state, $module, $form_set
             $skinr->sid = $sid;
             $skinr->skins = $skins;
 
-            skinr_set($skinr);
+            skinr_skin_save($skinr);
           }
         }
         views_object_cache_clear('skinr', $form_state['view']->name);
diff --git skinr.handlers.inc skinr.handlers.inc
index 8c746f7..1b24e7f 100644
--- skinr.handlers.inc
+++ skinr.handlers.inc
@@ -90,7 +90,7 @@ function skinr_data_handler(&$form, $form_state, $theme, $module, $form_settings
   }
   $index = skinr_handler('form_index_handler', 'form', $form_settings['index_handler'], $form, $form_state);
 
-  return skinr_get($theme, $module, $index);
+  return skinr_skin_load($theme, $module, $index);
 }
 
 /**
@@ -110,31 +110,31 @@ function skinr_submit_handler(&$form, $form_state, $module, $form_settings) {
   if (isset($form_state['values']['skinr_settings'][$module . '_group'])) {
     foreach ($form_state['values']['skinr_settings'][$module . '_group'] as $theme_name => $theme) {
       if ((!empty($theme['widgets']) && is_array($theme['widgets'])) || isset($theme['_additional'])) {
-        $skinr = new stdClass();
-        $skinr->theme = $theme_name;
-        $skinr->module = $module;
-        $skinr->sid = skinr_handler('form_index_handler', 'submit', $form_settings['index_handler'], $form, $form_state);
-        $skinr->skins = array();
-
-       if (!empty($theme['widgets']) && is_array($theme['widgets'])) {
-          foreach ($theme['widgets'] as $skin_id => $skin_value) {
-            $skinr->skins[$skin_id] = $skin_value;
+        $skin = new stdClass();
+        $skin->theme = $theme_name;
+        $skin->module = $module;
+        $skin->sid = skinr_handler('form_index_handler', 'submit', $form_settings['index_handler'], $form, $form_state);
+        $skin->skins = array();
+
+        if (!empty($theme['widgets']) && is_array($theme['widgets'])) {
+          foreach ($theme['widgets'] as $skin_name => $skin_value) {
+            $skin->skins['_options'][$skin_name] = $skin_value;
           }
         }
 
         if (isset($theme['_additional'])) {
           $theme['_additional'] = trim($theme['_additional']);
           if (!empty($theme['_additional'])) {
-            $skinr->skins['_additional'] = $theme['_additional'];
+            $skin->skins['_additional'] = $theme['_additional'];
           }
         }
 
-        if (empty($skinr->sid)) {
+        if (empty($skin->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');
         }
 
-        skinr_set($skinr);
+        skinr_skin_save($skin);
       }
     }
   }
diff --git skinr.install skinr.install
index 6508c65..5a9fe49 100644
--- skinr.install
+++ skinr.install
@@ -58,12 +58,12 @@ function skinr_schema() {
   );
 
   $schema['skinr_rules'] = array(
-    'description' => 'Stores skinr page rule data.',
+    'description' => 'Stores skinr rule data.',
     'fields' => array(
       'rid' => array(
         'type' => 'serial',
         'not null' => TRUE,
-        'description' => 'Primary Key: Unique skinr page rule ID.',
+        'description' => 'Primary Key: Unique skinr rule ID.',
       ),
       'title' => array(
         'description' => 'The administrative title for this rule.',
@@ -102,81 +102,6 @@ function skinr_schema() {
     'primary key' => array('rid'),
   );
 
-  $schema['skinr_skinsets'] = array(
-    'description' => "A list of all non-theme skinsets that are or have been installed in Drupal's file system.",
-    'fields' => array(
-      'filename' => array(
-        'description' => 'The path of the primary file for this item, relative to the Drupal root; e.g. skins/skinset/skinset.info.',
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-      'name' => array(
-        'description' => 'The name of the item; e.g. skinset.',
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-      'status' => array(
-        'description' => 'Boolean indicating whether or not this item is enabled.',
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'info' => array(
-        'description' => "A serialized array containing information from the skinset's .info file; keys can include name, description, package, version, core, and skinr.",
-        'type' => 'text',
-        'not null' => FALSE,
-        'serialize' => TRUE,
-      ),
-    ),
-    'primary key' => array('filename'),
-    'indexes' => array(
-      'name' => array('name'),
-    ),
-  );
-
-  $schema['skinr_skins'] = array(
-    'description' => 'Keeps track of the whether a skin is enabled for a specific skinset and theme.',
-    'fields' => array(
-      'name' => array(
-        'description' => 'The name of the skinset or theme that this skin belongs to.',
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-      'type' => array(
-        'description' => 'The type of this item; skinset or theme.',
-        'type' => 'varchar',
-        'length' => 16,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-      'skin' => array(
-        'description' => 'The name of the skin which you are saving settings for.',
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-      'status' => array(
-        'description' => 'A serialized array of values for each theme indicating whether or not the skin is enabled.',
-        'type' => 'text',
-        'size' => 'big',
-        'not null' => TRUE,
-        'serialize' => TRUE,
-        ),
-    ),
-    'primary key' => array('name', 'skin'),
-    'indexes' => array(
-      'name' => array('name'),
-      'skin' => array('skin'),
-    ),
-  );
-
   return $schema;
 }
 
@@ -191,67 +116,13 @@ 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() {
+function skinr_update_6000() {
   // Install skinr table.
   if (!db_table_exists('skinr')) {
-    $schema['skinr'] = array(
-      'description' => 'Stores skinr data.',
-      'fields' => array(
-        'theme' => array(
-          'description' => 'The system name of the theme.',
-          'type' => 'varchar',
-          'length' => 64,
-          'not null' => TRUE,
-          'default' => '',
-        ),
-        'module' => array(
-          'description' => 'The module this skinr settings is for.',
-          'type' => 'varchar',
-          'length' => 64,
-          'not null' => TRUE,
-          'default' => '',
-        ),
-        'sid' => array(
-          'description' => 'A unique identifier for this skinr datum.',
-          'type' => 'varchar',
-          'length' => 128,
-          'not null' => TRUE,
-          'default' => '',
-        ),
-        'skins' => array(
-          'description' => 'The skins set for this datum.',
-          'type' => 'text',
-          'size' => 'big',
-          'not null' => TRUE,
-          'serialize' => TRUE,
-        ),
-        'settings' => array(
-          'description' => 'Custom settings for this id.',
-          'type' => 'text',
-          'size' => 'big',
-          'not null' => TRUE,
-          'serialize' => TRUE,
-        ),
-      ),
-      'primary key' => array('theme', 'module', 'sid'),
-      'indexes' => array(
-        'theme' => array('theme'),
-        'module' => array('module'),
-        'sid' => array('sid'),
-      ),
-    );
-    db_create_table($ret, 'skinr', $schema['skinr']);
+    $schema = drupal_get_schema_unprocessed('skinr');
+    db_create_table('skinr', $schema['skinr']);
   }
 
   // Exclude variables that aren't theme settings (from skinr_ui).
@@ -286,9 +157,29 @@ function skinr_update_7001() {
 /**
  * Install a new field in {skinr_rules} table.
  */
-function skinr_update_7002() {
-  // @todo skinr_update_6001() contains additional field manipulations.
+function skinr_update_6001() {
+  db_change_field('skinr', 'skins', 'skins', array('description' => 'The skins set for this datum.', 'type' => 'text', 'size' => 'big', 'not null' => TRUE, 'serialize' => TRUE));
+  db_change_field('skinr', 'settings', 'settings', array('description' => 'Custom settings for this id.', 'type' => 'text', 'size' => 'big', 'not null' => TRUE, 'serialize' => TRUE, 'default' => ''));
+
+  // Add table for rules.
+  if (!db_table_exists('skinr_rules')) {
+    $schema = drupal_get_schema_unprocessed('skinr');
+    db_create_table('skinr_rules', $schema['skinr_rules']);
+  }
+}
 
+/**
+ * No longer used: Install {skinr_skinsets} tables.
+ */
+
+/**
+ * No longer used: Install {skinr_skins} table.
+ */
+
+/**
+ * Create new {skinr_rules}.rule_type field to allow region rules.
+ */
+function skinr_update_7002() {
   if (!db_field_exists('skinr_rules', 'rule_type')) {
     db_add_field('skinr_rules', 'rule_type', array(
       'description' => 'The content type of this rule.',
@@ -308,87 +199,9 @@ function skinr_update_7002() {
 }
 
 /**
- * Install the new {skinr_skinsets} and {skinr_skins} tables.
+ * Remove {skinr_skinsets} and {skinr_skins} tables.
  */
-function skinr_update_7003() {
-  if (!db_table_exists('skinr_skinsets')) {
-    $schema['skinr_skinsets'] = array(
-      'description' => "A list of all non-theme skinsets that are or have been installed in Drupal's file system.",
-      'fields' => array(
-        'filename' => array(
-          'description' => 'The path of the primary file for this item, relative to the Drupal root; e.g. skins/skinset/skinset.info.',
-          'type' => 'varchar',
-          'length' => 255,
-          'not null' => TRUE,
-          'default' => '',
-        ),
-        'name' => array(
-          'description' => 'The name of the item; e.g. skinset.',
-          'type' => 'varchar',
-          'length' => 255,
-          'not null' => TRUE,
-          'default' => '',
-        ),
-        'status' => array(
-          'description' => 'Boolean indicating whether or not this item is enabled.',
-          'type' => 'int',
-          'not null' => TRUE,
-          'default' => 0,
-        ),
-        'info' => array(
-          'description' => "A serialized array containing information from the skinset's .info file; keys can include name, description, package, version, core, and skinr.",
-          'type' => 'text',
-          'not null' => FALSE,
-          'serialize' => TRUE,
-        ),
-      ),
-      'primary key' => array('filename'),
-      'indexes' => array(
-        'name' => array('name'),
-      ),
-    );
-    db_create_table('skinr_skinsets', $schema['skinr_skinsets']);
-  }
-
-  if (!db_table_exists('skinr_skins')) {
-    $schema['skinr_skins'] = array(
-      'description' => 'Keeps track of the whether a skin is enabled for a specific skinset and theme.',
-      'fields' => array(
-        'name' => array(
-          'description' => 'The name of the skinset or theme that this skin belongs to.',
-          'type' => 'varchar',
-          'length' => 64,
-          'not null' => TRUE,
-          'default' => '',
-        ),
-        'type' => array(
-          'description' => 'The type of this item; skinset or theme.',
-          'type' => 'varchar',
-          'length' => 16,
-          'not null' => TRUE,
-          'default' => '',
-        ),
-        'skin' => array(
-          'description' => 'The name of the skin which you are saving settings for.',
-          'type' => 'varchar',
-          'length' => 128,
-          'not null' => TRUE,
-          'default' => '',
-        ),
-        'status' => array(
-          'description' => 'A serialized array of values for each theme indicating whether or not the skin is enabled.',
-          'type' => 'text',
-          'size' => 'big',
-          'not null' => TRUE,
-          'serialize' => TRUE,
-          ),
-      ),
-      'primary key' => array('name', 'skin'),
-      'indexes' => array(
-        'name' => array('name'),
-        'skin' => array('skin'),
-      ),
-    );
-    db_create_table('skinr_skins', $schema['skinr_skins']);
-  }
+function skinr_update_7200() {
+  db_drop_table('skinr_skinsets');
+  db_drop_table('skinr_skins');
 }
diff --git skinr.module skinr.module
index 24b7d47..515cba8 100644
--- skinr.module
+++ skinr.module
@@ -44,6 +44,8 @@ function skinr_init() {
 
 /**
  * Implements hook_preprocess().
+ *
+ * @todo Account for drupal's caching being enabled and make it work.
  */
 function skinr_preprocess(&$variables, $hook) {
   // Fix for update script.
@@ -51,29 +53,30 @@ function skinr_preprocess(&$variables, $hook) {
     return;
   }
 
-  $skinr_config = skinr_fetch_config();
+  $config = skinr_get_config_info();
   $current_theme = skinr_current_theme();
-  $theme_registry = theme_get_registry();
 
   $original_hook = $hook;
+  $theme_registry = theme_get_registry();
   if (isset($theme_registry[$hook]['original hook'])) {
     $original_hook = $theme_registry[$hook]['original hook'];
   }
 
-  foreach ($skinr_config as $module => $settings) {
-    if (!empty($settings['preprocess'][$original_hook])) {
-      $preprocess_settings = $settings['preprocess'][$original_hook];
+  foreach ($config as $module => $module_settings) {
+    if (!empty($module_settings['preprocess'][$original_hook])) {
+      $preprocess_settings = $module_settings['preprocess'][$original_hook];
       $sids = skinr_handler('preprocess_index_handler', 'preprocess', $preprocess_settings['index_handler'], $variables);
 
-      if ($extracted = skinr_skin_extract($module, $sids, $settings, $current_theme)) {
+      if ($extracted = skinr_skin_extract($module, $sids, $current_theme)) {
+        // @todo How can this be done better with drupal_process_attached()?
         foreach ($extracted['css'] as $file) {
           if ($file['enabled']) {
-            _skinr_add_file($file['path'], 'css', $file['media']);
+            drupal_add_css($file['path'], $file['file_options']);
           }
         }
         foreach ($extracted['js'] as $file) {
           if ($file['enabled']) {
-            _skinr_add_file($file['path'], 'js');
+            drupal_add_js($file['path'], $file['file_options']);
           }
         }
         $variables['classes_array'] = array_merge($variables['classes_array'], $extracted['classes']);
@@ -106,8 +109,11 @@ function skinr_preprocess(&$variables, $hook) {
  * @return
  *   An array containing the module, sids, classes, CSS, JS, template to be
  *   applied.
+ *
+ * @todo Rename this function to something more indicative of its function.
+ * @todo Rename $sids to something more descriptive; these are skin ids.
  */
-function skinr_skin_extract($module, $sids, $settings, $theme = NULL) {
+function skinr_skin_extract($module, $sids, $theme = NULL) {
   if (empty($sids)) {
     return FALSE;
   }
@@ -126,21 +132,17 @@ function skinr_skin_extract($module, $sids, $settings, $theme = NULL) {
     'js' => array(),
   );
 
-  $skins = array();
+  $options = array();
   foreach ($sids as $sid) {
-    if ($skinr = skinr_get($theme, $module, $sid)) {
-      $skins = $skinr->skins + $skins;
+    if ($skin = skinr_skin_load($theme, $module, $sid)) {
+      $options = $skin->skins + $options;
     }
   }
 
-  // Allow other modules to alter the skinr skins array.
-  // @todo Fix this to work with skinr ui.
-  drupal_alter('skinr_skins', $skins, $module, $sids, $settings);
-
-  $extracted['css'] = skinr_skin_get_files($skins, 'css', $theme);
-  $extracted['js'] = skinr_skin_get_files($skins, 'js', $theme);
+  $extracted['css'] = skinr_skin_get_files($options, 'css', $theme);
+  $extracted['js'] = skinr_skin_get_files($options, 'js', $theme);
 
-  $extracted['classes'] = skinr_flatten_skins_array($skins);
+  $extracted['classes'] = skinr_flatten_skins_array($options);
 
   return $extracted;
 }
@@ -148,8 +150,8 @@ function skinr_skin_extract($module, $sids, $settings, $theme = NULL) {
 /**
  * Helper function to fetch all CSS or JS files from an array of skins.
  *
- * @param $skins
- *   A an array of available skins.
+ * @param $skin_options
+ *   A an array of skin options.
  * @param $type
  *   Either 'css' or 'js', depending on which files you wish to retrieve from
  *   these skins.
@@ -159,100 +161,70 @@ function skinr_skin_extract($module, $sids, $settings, $theme = NULL) {
  * @return
  *   An array of file data.
  */
-function skinr_skin_get_files($skins, $type, $theme = NULL) {
+function skinr_skin_get_files($skin_options, $type, $theme = NULL) {
   if (empty($theme)) {
     $theme = skinr_current_theme();
   }
 
-  $info = skinr_skin_data();
+  $skin_infos = skinr_get_skin_info();
   $files = array();
+  if (!empty($skin_options['_options'])) {
+    foreach ($skin_options['_options'] as $skin_name => $skin_option) {
+      if (!is_array($skin_options)) {
+        $skin_options = array($skin_options);
+      }
 
-  if ($type == 'css') {
-    foreach ($skins as $skin => $classes) {
-      // Add custom CSS files.
-      if (isset($info[$theme]->skins[$skin])) {
-        if (!empty($info[$theme]->skins[$skin]['stylesheets'])) {
-          foreach ($info[$theme]->skins[$skin]['stylesheets'] as $media => $stylesheets) {
-            foreach ($stylesheets as $file => $path) {
-              $files[] = array(
-                'file' => $file,
-                'path' => $path,
-                'media' => $media,
-                'enabled' => TRUE,
-                'skin' => $skin,
-                'options' => 0,
-              );
+      // Check if the $skin_name is enabled for this theme.
+      if (!empty($skin_infos[$skin_name]['status'][$theme])) {
+        // Check if this skin has any stylesheets attached to it.
+        if (!empty($skin_infos[$skin_name]['attached'][$type])) {
+          foreach ($skin_infos[$skin_name]['attached'][$type] as $file) {
+            if (is_array($file)) {
+              $path = $file[0];
+              $file_options = count($file) > 1 ? $file[1] : NULL;
             }
-          }
-        }
-        foreach ($info[$theme]->skins[$skin]['options'] as $option_id => $option) {
-          if (!empty($option['stylesheets'])) {
-            foreach ($option['stylesheets'] as $media => $stylesheets) {
-              foreach ($stylesheets as $file => $path) {
-                $enabled = FALSE;
-                if (is_array($classes)) {
-                  if (in_array($option['class'], $classes)) {
-                    $enabled = TRUE;
-                  }
-                }
-                else {
-                  if ($option['class'] == $classes) {
-                    $enabled = TRUE;
-                  }
-                }
-
-                $files[] = array(
-                  'file' => $file,
-                  'path' => $path,
-                  'media' => $media,
-                  'enabled' => $enabled,
-                  'skin' => $skin,
-                  'options' => $option_id,
-                );
-              }
+            else {
+              $path = $file;
+              $file_options = NULL;
             }
-          }
-        }
-      }
-    }
-  }
-  elseif ($type == 'js') {
-    foreach ($skins as $skin => $classes) {
-      // Add custom JS files.
-      if (isset($info[$theme]->skins[$skin])) {
-        if (isset($info[$theme]->skins[$skin]['scripts'])) {
-          foreach ($info[$theme]->skins[$skin]['scripts'] as $file => $path) {
-            $files[] = array(
-              'file' => $file,
+            $files[$path] = array(
+              'file' => basename($path),
               'path' => $path,
+              'file_options' => $file_options,
               'enabled' => TRUE,
-              'skin' => $skin,
-              'options' => 0,
+              'skin' => $skin_name,
+              'skin_option' => NULL,
             );
           }
         }
-        foreach ($info[$theme]->skins[$skin]['options'] as $option_id => $option) {
-          if (isset($option['scripts'])) {
-            foreach ($option['scripts'] as $file => $path) {
+
+        foreach ($skin_infos[$skin_name]['options'] as $skin_info_option_name => $skin_info_option) {
+          if (!empty($skin_info_option['attached'][$type])) {
+            foreach ($skin_info_option['attached'][$type] as $file) {
               $enabled = FALSE;
-                if (is_array($classes)) {
-                  if (in_array($option['class'], $classes)) {
-                    $enabled = TRUE;
-                  }
-                }
-                else {
-                  if ($option['class'] == $classes) {
-                    $enabled = TRUE;
-                  }
-                }
-
-              $files[] = array(
-                'file' => $file,
+              if (in_array($skin_info_option_name, $skin_options)) {
+                $enabled = TRUE;
+              }
+
+              if (is_array($file)) {
+                $path = $file[0];
+                $file_options = count($file) > 1 ? $file[1] : NULL;
+              }
+              else {
+                $path = $file;
+                $file_options = NULL;
+              }
+
+              $files[$path] = array(
+                'file' => basename($path),
                 'path' => $path,
-                'enabled' => $enabled,
-                'skin' => $skin,
-                'options' => $option_id,
+                'file_options' => $file_options,
+                'skin' => $skin_name,
+                'skin_option' => $skin_info_option_name,
               );
+              // Allow for other options to set the same file; make sure it's
+              // enabled when required.
+              $files[$path]['enabled'] = (!empty($files[$path]['enabled']) ? $files[$path]['enabled'] : FALSE) || $enabled;
             }
           }
         }
@@ -264,52 +236,33 @@ function skinr_skin_get_files($skins, $type, $theme = NULL) {
 }
 
 /**
- * Helper function to add CSS and JS files to a page.
- *
- * This function uses drupal_add_css() and drupal_add_js() to add the files.
- *
- * @param $filename
- *   The name of the file to add.
- * @param $type
- *   The type of file. Options include: 'css' and 'js'.
- * @param $media
- *   (optional) The media type for the stylesheet, e.g., 'all', 'print',
- *   'screen'. Only required if $type is set to 'css'.
- */
-function _skinr_add_file($filename, $type, $media = NULL) {
-  if ($type == 'css') {
-    drupal_add_css($filename, array('weight' => CSS_THEME, 'media' => $media));
-  }
-  else {
-    drupal_add_js($filename, array('weight' => JS_THEME));
-  }
-}
-
-/**
- * Helper function to flatten an array of classes settings.
+ * Returns an array of classes.
  *
- * @param $skins
- *   The array of skins to flatten.
+ * @param $skin_options
+ *   An array containing the following keys:
+ *   - _options: An array of skin options keyed by their skin name.
+ *   - _additional: A string containing additional classes to apply.
  *
- * @return
- *   An array of classes.
+ * @todo Rename function to reflect new functionality.
  */
-function skinr_flatten_skins_array($skins) {
-  $return = array();
-  foreach ($skins as $entry) {
-    if (is_array($entry)) {
-      foreach ($entry as $subentry) {
-        if (!empty($subentry)) {
-          $return[] = check_plain($subentry);
-        }
+function skinr_flatten_skins_array($skin_options) {
+  $skin_infos = skinr_get_skin_info();
+
+  $classes = array();
+  if (!empty($skin_options['_options'])) {
+    foreach ($skin_options['_options'] as $skin_name => $options) {
+      if (!is_array($options)) {
+        $options = array($options);
+      }
+      foreach ($options as $option) {
+        $classes = array_merge($classes, $skin_infos[$skin_name]['options'][$option]['class']);
       }
-    }
-    elseif (!empty($entry)) {
-      $return[] = check_plain($entry);
     }
   }
-
-  return $return;
+  if (!empty($skin_options['_additional'])) {
+    $classes[] = $skin_options['_additional'];
+  }
+  return array_unique($classes);
 }
 
 // ------------------------------------------------------------------
@@ -483,63 +436,63 @@ function skinr_get_module_apis() {
 // Skinr data handling functions.
 
 /**
- * Validate a skinr settings object.
+ * Validate a skinr object.
  *
- * @param $skinr
- *   The skinr settings object to validate.
+ * @param $skin
+ *   A skin object.
  *
  * @return
  *   TRUE on success, FALSE on failure.
  */
-function skinr_validate(&$skinr) {
-  if (!isset($skinr->theme) || !isset($skinr->module) || !isset($skinr->sid) || !isset($skinr->skins)) {
+function skinr_skin_validate(&$skin) {
+  if (!isset($skin->theme) || !isset($skin->module) || !isset($skin->sid) || !isset($skin->skins)) {
     return FALSE;
   }
-  if (!isset($skinr->settings)) {
-    $skinr->settings = array();
+  if (!isset($skin->settings)) {
+    $skin->settings = array();
   }
-  if (!is_array($skinr->skins) || !is_array($skinr->settings)) {
+  if (!is_array($skin->skins) || !is_array($skin->settings)) {
     return FALSE;
   }
 
   // Strip empty skins.
-  $skinr->skins = _skinr_array_strip_empty($skinr->skins);
+  $skin->skins = _skinr_array_strip_empty($skin->skins);
 
   return TRUE;
 }
 
 /**
- * Save a skinr settings object.
+ * Save a skin object.
  *
- * @param $skinr
- *   A skinr object.
+ * @param $skin
+ *   A skin object.
  *
  * @return
  *   TRUE on success, FALSE on failure.
  */
-function skinr_set($skinr) {
+function skinr_skin_save($skin) {
   // Make sure we're getting valid data.
-  if (!skinr_validate($skinr)) {
+  if (!skinr_skin_validate($skin)) {
     return FALSE;
   }
 
-  if (empty($skinr->skins) && empty($skinr->settings)) {
+  if (empty($skin->skins) && empty($skin->settings)) {
     // Delete the db entry if it exists.
     db_delete('skinr')
-      ->condition('theme', $skinr->theme)
-      ->condition('module', $skinr->module)
-      ->condition('sid', $skinr->sid)
+      ->condition('theme', $skin->theme)
+      ->condition('module', $skin->module)
+      ->condition('sid', $skin->sid)
       ->execute();
   }
   else {
     // Let's save the data.
-    if (skinr_get($skinr->theme, $skinr->module, $skinr->sid) !== FALSE) {
+    if (skinr_skin_load($skin->theme, $skin->module, $skin->sid) !== FALSE) {
       // Record exists, so let's update.
-      drupal_write_record('skinr', $skinr, array('theme', 'module', 'sid'));
+      drupal_write_record('skinr', $skin, array('theme', 'module', 'sid'));
     }
     else {
       // Insert a new record.
-      drupal_write_record('skinr', $skinr);
+      drupal_write_record('skinr', $skin);
     }
   }
 
@@ -547,7 +500,38 @@ function skinr_set($skinr) {
 }
 
 /**
- * Retrieves the desired skinr settings object.
+ * Delete a skin object.
+ *
+ * @param $theme
+ *   The theme this skin applies to. If no theme name is provided, the
+ *   current theme will be used.
+ * @param $module
+ *   The module.
+ * @param $sid
+ *   The element ID.
+ */
+function skinr_skin_delete($theme = NULL, $module = NULL, $sid = NULL) {
+  node_delete_multiple(array(array($theme, $module, $sid)));
+}
+
+/**
+ * Delete multiple skin objects.
+ *
+ * @param $arguments
+ *   An array of arrays containing the following arguments:
+ *   - $theme
+ *   - $module
+ *   - $sid
+ *
+ * @see skinr_skin_delete().
+ *
+ * @todo Make this function functional.
+ */
+function skinr_skin_delete_multiple($arguments) {
+}
+
+/**
+ * Retrieves the desired skinr object.
  *
  * @param $theme
  *   The theme these settings apply to. If no theme name is provided, the
@@ -558,24 +542,25 @@ function skinr_set($skinr) {
  *   The element ID these settings apply to.
  *
  * @return
- *   A skinr settings object if both $module and $sid are specified. An array
- *   of skinr settings objects if only $module is specified. An array of all
- *   skinr settings objects for a theme if neither $module nor $sid is
- *   specified. FALSE on failure.
+ *   A skin object if both $module and $sid are specified. An array of skin
+ *   objects if only $module is specified. An array of all skin objects for a
+ *   theme if neither $module nor $sid is specified. FALSE on failure.
+ *
+ * @todo Rename $skin->skins to $skin->options throughout the module.
  */
-function skinr_get($theme = NULL, $module = NULL, $sid = NULL) {
-  $cache = &drupal_static(__FUNCTION__, array());
+function skinr_skin_load($theme = NULL, $module = NULL, $sid = NULL) {
+  $skins = &drupal_static(__FUNCTION__, array());
 
   if (is_null($theme)) {
     $theme = skinr_current_theme();
   }
 
-  if (!isset($cache[$theme][$module][$sid])) {
-    if (!isset($cache[$theme])) {
-      $cache[$theme] = array();
+  if (!isset($skins[$theme][$module][$sid])) {
+    if (!isset($skins[$theme])) {
+      $skins[$theme] = array();
     }
-    if (!is_null($module) && !isset($cache[$theme][$module])) {
-      $cache[$theme][$module] = array();
+    if (!is_null($module) && !isset($skins[$theme][$module])) {
+      $skins[$theme][$module] = array();
     }
 
     if (!is_null($module) && !is_null($sid)) {
@@ -600,32 +585,49 @@ function skinr_get($theme = NULL, $module = NULL, $sid = NULL) {
       ));
     }
 
-    foreach ($result as $skinr) {
-      $skinr->settings = unserialize($skinr->settings);
-      $skinr->skins = unserialize($skinr->skins);
-      $cache[$skinr->theme][$skinr->module][$skinr->sid] = $skinr;
+    foreach ($result as $skin) {
+      $skin->settings = unserialize($skin->settings);
+      $skin->skins = unserialize($skin->skins);
+      $skins[$skin->theme][$skin->module][$skin->sid] = $skin;
     }
   }
 
   if (is_null($sid) && is_null($module)) {
     // Return all the skinrs for the theme.
-    if (isset($cache[$theme])) {
-      return $cache[$theme];
+    if (isset($skins[$theme])) {
+      return $skins[$theme];
     }
   }
   elseif(is_null($sid)) {
     // Return all the skinrs for the module.
-    if (isset($cache[$theme][$module])) {
-      return $cache[$theme][$module];
+    if (isset($skins[$theme][$module])) {
+      return $skins[$theme][$module];
     }
   }
-  elseif (isset($cache[$theme][$module][$sid])) {
-    return $cache[$theme][$module][$sid];
+  elseif (isset($skins[$theme][$module][$sid])) {
+    return $skins[$theme][$module][$sid];
   }
   return FALSE;
 }
 
 /**
+ * Load multiple skin objects.
+ *
+ * @param $arguments
+ *   An array of arrays containing the following arguments:
+ *   - $theme
+ *   - $module
+ *   - $sid
+ *
+ * @see skinr_skin_load().
+ *
+ * @todo Make this function functional.
+ * @todo Look at using hook_entity_info() and entity_load().
+ */
+function skinr_skin_load_multiple($arguments) {
+}
+
+/**
  * Helper function to remove empty skins from an array.
  *
  * @param $array
@@ -677,32 +679,15 @@ function skinr_current_theme($exclude_admin_theme = FALSE) {
 }
 
 /**
- * Prepare defaults for skinsets.
- *
- * @return
- *   An array of default skinset settings.
- */
-function skinr_skins_default() {
-  return array(
-    'description' => '',
-    'screenshot' => 'screenshot.png',
-    'php' => DRUPAL_MINIMUM_PHP,
-    'skinr' => array(),
-  );
-}
-
-/**
  * Prepare defaults for groups.
  *
  * @return
  *   An array of default group settings.
  */
-function skinr_group_default() {
+function skinr_group_info_default() {
   return array(
     'title' => '',
     'description' => '',
-    'collapsible' => TRUE,
-    'collapsed' => FALSE,
     'weight' => NULL,
   );
 }
@@ -713,311 +698,259 @@ function skinr_group_default() {
  * @return
  *   An array of default skin settings.
  */
-function skinr_skin_default() {
+function skinr_skin_info_default() {
   return array(
+    'name' => '',
     'title' => '',
     'type' => 'checkboxes',
     'description' => '',
-    'features' => array('*'),
     'group' => '',
+    'theme hooks' => array('*'),
+    'attached' => array(),
     'options' => array(),
-    'stylesheets' => array(),
-    'scripts' => array(),
     'weight' => NULL,
+    'default_status' => 0,
+    'status' => array(),
   );
 }
 
 /**
- * Helper function to process a skin or theme .info file.
+ * Prepare the default status for a skin.
  *
- * @param $info
- *   An array of data as gotten from a skin or theme .info file.
+ * @param $default_status
+ *   The default status for all themes for a skin.
  *
  * @return
- *    A processed set of skins.
+ *   An array of default statuses for each enabled theme.
  */
-function _skinr_skinset($info) {
-  $skinset = array(
-    'options' => array('groups' => array()),
-    'skins' => array(),
-  );
-
-  if (!empty($info->info['skinr'])) {
-    $path_root = dirname($info->filename);
-
-    $skinr_info = (array)$info->info['skinr'];
-
-    // Store skinr options.
-    if (!empty($skinr_info['options'])) {
-      $skinset['options'] = $skinr_info['options'];
-      unset($skinr_info['options']);
-
-      if (!isset($skinset['options']['groups'])) {
-        $skinset['options']['groups'] = array();
-      }
-
-      $defaults = skinr_group_default();
-      foreach ($skinset['options']['groups'] as $id => $group) {
-        $skinset['options']['groups'][$id] = array_merge($defaults, $skinset['options']['groups'][$id]);
-        $skinset['options']['groups'][$id]['collapsible'] = (bool)$skinset['options']['groups'][$id]['collapsible'];
-        $skinset['options']['groups'][$id]['collapsed'] = (bool)$skinset['options']['groups'][$id]['collapsed'];
-        $skinset['options']['groups'][$id]['weight'] = $skinset['options']['groups'][$id]['weight'];
-      }
-    }
-
-    $defaults = skinr_skin_default();
-
-    foreach ($skinr_info as $id => $skin) {
-      if (!is_array($skin)) {
-        continue;
-      }
-      $skinset['skins'][$id] = array(
-        'title' => isset($skin['title']) ? $skin['title'] : $defaults['title'],
-        'type' => isset($skin['type']) ? $skin['type'] : $defaults['type'],
-        'description' => isset($skin['description']) ? $skin['description'] : $defaults['description'],
-        'features' => isset($skin['features']) ? $skin['features'] : $defaults['features'],
-        'group' => !empty($skin['group']) && !empty($skinset['options']['groups'][$skin['group']]) ? $skin['group'] : $defaults['group'],
-        'options' => isset($skin['options']) ? $skin['options'] : $defaults['options'],
-        'stylesheets' => isset($skin['stylesheets']) ? $skin['stylesheets'] : $defaults['stylesheets'],
-        'scripts' => isset($skin['scripts']) ? $skin['scripts'] : $defaults['scripts'],
-        'weight' => isset($skin['weight']) ? $skin['weight'] : $defaults['weight'],
-      );
-
-      // Give the stylesheets proper path information.
-      $skinset['skins'][$id]['stylesheets'] = _skinr_add_path_to_files($skinset['skins'][$id]['stylesheets'], $path_root, 'css');
-
-      // Give the scripts proper path information.
-      $skinset['skins'][$id]['scripts'] = _skinr_add_path_to_files($skinset['skins'][$id]['scripts'], $path_root, 'js');
-
-      foreach ($skinset['skins'][$id]['options'] as $oid => $option) {
-        if (isset($option['stylesheets'])) {
-          $skinset['skins'][$id]['options'][$oid]['stylesheets'] = _skinr_add_path_to_files($option['stylesheets'], $path_root, 'css');
-        }
-        if (isset($option['scripts'])) {
-          $skinset['skins'][$id]['options'][$oid]['scripts'] = _skinr_add_path_to_files($option['scripts'], $path_root, 'js');
-        }
-      }
+function skinr_skin_info_status_default($default_status = 0) {
+  $status = array();
+  foreach (list_themes() as $theme_name => $theme) {
+    if (!$theme->status) {
+      continue;
     }
+    $status[$theme_name] = $default_status;
   }
+  return $status;
+}
 
-  return $skinset;
+/**
+ * Get a list of plugin hooks.
+ *
+ * @return
+ *   An array of hook details keyed by hook name. The hook details contain the
+ *   following keys:
+ *   - 'type': Available options are 'module' or 'theme'.
+ *   - 'name': The name of the owner module or theme of this plugin.
+ *   - 'plugin': The name of the skins plugin.
+ *   - 'path': This plugin's path.
+ */
+function skinr_plugin_hooks() {
+  $hooks = array();
+  return $hooks;
 }
 
 /**
- * Helper function to prepend a path to an array of stylesheets or scripts in a
- * .info file.
+ * Helper function to prepend a path to an array of stylesheets or scripts
+ * in a .info file. If the url is absolute (e.g. the url start with 'http://')
+ * the path does not get prepended.
  *
  * @param $files
  *   A an array of filenames that need the path prepended.
+ *   @todo Adjust docs to account for arrays instead of filenames.
  * @param $path
  *   The path to prepend.
- * @param $type
- *   Either 'css' or 'js', depending on which files you wish to retrieve from
- *   these skins.
- *
- * @return
- *    An array of files with the root path added.
  */
-function _skinr_add_path_to_files($files, $path, $type) {
-  if ($type == 'css') {
-    $pathed_stylesheets = array();
-    foreach ($files as $media => $stylesheets) {
-      foreach ($stylesheets as $stylesheet) {
-        $pathed_stylesheets[$media][$stylesheet] = $path . '/' . $stylesheet;
+function _skinr_add_path_to_files(&$files, $path) {
+  foreach ($files as $key => $file) {
+    if (is_array($file)) {
+      if (strpos($file[0], 'http://') === 0) {
+        continue;
       }
+      $files[$key][0] = $path . '/' . $file[0];
     }
-    return $pathed_stylesheets;
-  }
-  elseif ($type == 'js') {
-    $pathed_scripts = array();
-    foreach ($files as $script) {
-      $pathed_scripts[$script] = $path . '/' . $script;
+    else {
+      if (strpos($file, 'http://') === 0) {
+        continue;
+      }
+      $files[$key] = $path . '/' . $file;
     }
-    return $pathed_scripts;
   }
-
-  return FALSE;
 }
 
 /**
- * Helper function to process an array of skins.
+ * Parse a skin_infos array as returned from a skins plugin.
  *
- * @return
- *    An array of skins.
+ * This function inserts any missing defaults and updates the stylesheet and
+ * script paths to be relative to drupal's root.
+ *
+ * @param $skin_infos
+ *   A skins array as returned from a skins plugin.
+ * @param $source
+ *   An array with the following keys:
+ *   - 'type': Available options are 'module' or 'theme'.
+ *   - 'name': The name of the owner module or theme of this plugin.
+ *   - 'plugin': The name of the skins plugin.
+ *   - 'path': This plugin's path.
  */
-function skinr_skinsets() {
-  $skinsets = &drupal_static(__FUNCTION__, array());
-
-  if (!empty($skinsets)) {
-    $result = db_query("SELECT * FROM {skinr_skinsets}");
-    foreach ($result as $skinset) {
-      if (file_exists($skinset->filename)) {
-        $skinset->info = unserialize($skinset->info);
-        $skinsets[$skinset->name] = $skinset;
-      }
-    }
+function skinr_skin_info_process(&$skin_infos, $source) {
+  foreach ($skin_infos as $skin_name => $skin_info) {
+    // Merge in defaults.
+    $skin_infos[$skin_name] = array_merge(skinr_skin_info_default(), $skin_infos[$skin_name]);
 
-    $themes = list_themes();
-    $default_status = array();
-    foreach ($themes as $theme) {
-      $default_status[$theme->name] = $theme->name;
-    }
+    // Merge in name.
+    $skin_infos[$skin_name]['name'] = $skin_name;
 
-    foreach ($skinsets as $key => $skinset) {
-      if (isset($themes[$key])) {
-        $skinset->type = 'theme';
-        $skinset->status = !empty($theme->status) ? 1 : 0;
-      }
-      else {
-        $skinset->type = 'skinset';
-      }
+    // Merge in source information.
+    $skin_infos[$skin_name]['source'] = $source;
+
+    // Merge in default statuses for all themes.
+    $skin_infos[$skin_name]['status'] = array_merge(skinr_skin_info_status_default($skin_infos[$skin_name]['default_status']), $skin_infos[$skin_name]['status']);
 
-      // @todo Allow skins to inherit from other skins.
+    // @todo Apply overridden statuses. This will need to be loaded from
+    //   database.
 
-      $additional = _skinr_skinset($skinset);
-      $skinset->options = $additional['options'];
-      $skinset->skins = $additional['skins'];
+    // Add path to stylesheets.
+    _skinr_add_path_to_files($skin_infos[$skin_name]['attached']['css'], $source['path']);
+    // Add path to scripts.
+    _skinr_add_path_to_files($skin_infos[$skin_name]['attached']['js'], $source['path']);
+
+    foreach ($skin_infos[$skin_name]['options'] as $option_name => $options) {
+      // Add path to stylesheets.
+      if (isset($option['attached']['css'])) {
+        _skinr_add_path_to_files($skin_infos[$skin_name]['options'][$option_name]['attached']['css'], $source['path']);
+      }
+      // Add path to scripts.
+      if (isset($option['attached']['js'])) {
+        _skinr_add_path_to_files($skin_infos[$skin_name]['options'][$option_name]['attached']['js'], $source['path']);
+      }
 
-      $statuses = skinr_skinset_statuses($skinset->name);
-      foreach ($skinset->skins as $skin_name => $skin) {
-        $skinset->skins[$skin_name]['status'] = !empty($statuses[$skin_name]) ? $statuses[$skin_name] : $default_status;
+      // Validate class by running it through drupal_html_class().
+      if (!is_array($skin_infos[$skin_name]['options'][$option_name]['class'])) {
+        $skin_infos[$skin_name]['options'][$option_name]['class'] = array($skin_infos[$skin_name]['options'][$option_name]['class']);
+      }
+      foreach ($skin_infos[$skin_name]['options'][$option_name]['class'] as $key => $class) {
+        $skin_infos[$skin_name]['options'][$option_name]['class'][$key] = drupal_html_class($class);
       }
     }
   }
-
-  return $skinsets;
 }
 
 /**
- * Return an array of statuses for each skin in a skinset for each theme.
- *
- * @param $skinset_name
- *   The name of the skinset for which to load the statuses.
+ * Retrieves a list of all available skins.
  *
  * @return
- *   Array of statuses for individual skins in a skinset.
+ *    An array of skins.
  */
-function skinr_skinset_statuses($skinset_name) {
-  $statuses = &drupal_static(__FUNCTION__, array());
+function skinr_get_skin_info() {
+  $skin_infos = &drupal_static(__FUNCTION__);
+
+  if (!isset($skin_infos)) {
+    // Set skins to an array to avoid errors down the line if no skins
+    // are found.
+    $skin_infos = array();
+
+    // Load skins from hook_skinr_skins().
+    $hooks = skinr_plugin_hooks();
+    foreach ($hooks as $hook => $source) {
+      // @todo Update the hook name once we settle on one.
+      $function = $hook . '_skinr_skin_info';
+      $result = $function();
+      if (isset($result)) {
+        if (!is_array($result)) {
+          $result = array($result);
+        }
 
-  if (empty($statuses[$skinset_name])) {
-    $statuses[$skinset_name] = array();
+        // Make any programatic changes.
+        skinr_skin_info_process($result, $source);
 
-    $result = db_query("SELECT * FROM {skinr_skins} WHERE name = :name", array(':name' => $skinset_name));
-    foreach ($result as $skinr_skin) {
-      $statuses[$skinset_name][$skinr_skin->skin] = unserialize($skinr_skin->status);
+        $skin_infos = array_merge_recursive($skin_infos, $result);
+      }
     }
+
+    // Allow modules to alter skin infos through hook_skinr_skin_info_alter().
+    drupal_alter('skinr_skin_info', $skin_infos);
   }
 
-  return $statuses[$skinset_name];
+  return $skin_infos;
 }
 
 /**
- * Processes and compiles a list of all skins.
+ * Retrieves a list of all available groups.
  *
  * @return
- *    An array of skinsets keyed by themename.
- *
- * @todo Use DB caching. No need to keep processing things every page load.
+ *    An array of groups.
  */
-function skinr_skin_data() {
-  $cache = &drupal_static(__FUNCTION__);
-
-  if (is_null($cache)) {
-    $skinsets = skinr_skinsets();
-
-    // Need to merge all skins skinsets into a single list of skins.
-    // Also merge in the groups information.
-    $additional_skins = array();
-    $groups = array();
-    foreach ($skinsets as $key => $skinset) {
-      if ($skinset->type == 'skinset') {
-        if (!empty($skinset->skins) && $skinset->status == 1) {
-          $additional_skins += $skinset->skins;
-        }
-        if (!empty($skinset->options['groups'])) {
-          $groups += $skinset->options['groups'];
+function skinr_get_group_info() {
+  $group_infos = &drupal_static(__FUNCTION__);
+
+  if (!isset($group_infos)) {
+    // Set groups to an array to avoid errors down the line if no groups
+    // are found.
+    $group_infos = array();
+
+    // Load skins from hook_skinr_groups().
+    $hooks = skinr_plugin_hooks();
+    foreach ($hooks as $hook => $source) {
+      // @todo Update the hook name once we settle on one.
+      $function = $hook . '_skinr_group_info';
+      $result = $function();
+      if (isset($result)) {
+        if (!is_array($result)) {
+          $result = array($result);
         }
-      }
-    }
 
-    // Merge the additional skins into each theme, even if that theme has no
-    // skinr data.
-    $themes = list_themes();
-    foreach ($themes as $theme) {
-      if ($theme->status != 1) {
-        continue;
-      }
+        // Make any programatic changes.
+        // Merge in defaults.
+        foreach ($result as $group_name => $group_info) {
+          $result[$group_name] = array_merge(skinr_group_info_default(), $group_info);
+        }
 
-      if (!empty($skinsets[$theme->name])) {
-        $cache[$theme->name] = $skinsets[$theme->name];
-        $cache[$theme->name]->skins += $additional_skins;
-        $cache[$theme->name]->options['groups'] += $groups;
-      }
-      else {
-        $cache[$theme->name] = new stdClass();
-        $cache[$theme->name]->name = $theme->name;
-        $cache[$theme->name]->status = 1;
-        $cache[$theme->name]->type = 'theme';
-        $cache[$theme->name]->skins = $additional_skins;
-        $cache[$theme->name]->options = array('groups' => $groups);
+        $group_infos = array_merge_recursive($group_infos, $result);
       }
     }
+
+    // Allow modules to alter groups through hook_skinr_group_info_alter().
+    drupal_alter('skinr_group_info', $group_infos);
   }
 
-  return $cache;
+  return $group_infos;
 }
 
 /**
- * Fetch Skinr configuration data from Skinr functionality plugins.
+ * Fetch Skinr configuration data from functionality plugins.
  *
  * @return
  *   An array of all configuration data.
  */
-function skinr_fetch_config() {
-  $cache = &drupal_static(__FUNCTION__);
+function skinr_get_config_info() {
+  $config = &drupal_static(__FUNCTION__);
 
-  if (is_null($cache)) {
-    $cache = module_invoke_all('skinr_config');
-    foreach (module_implements('skinr_config_alter') as $module) {
-      $function = $module . '_skinr_config_alter';
-      $function($cache);
-    }
+  if (is_null($config)) {
+    $config = module_invoke_all('skinr_config_info');
+    drupal_alter('skinr_config_info', $config);
   }
 
-  return $cache;
+  return $config;
 }
 
 /**
- * Fetch default configuration data for Skinr functionality plugins.
- *
- * @param @setting
- *   The value 'form'. There are no other valid options.
- *
- * @return
- *   Returns an array of default values.
- *
- * @todo Remove the $setting parameter. There is only ever one option used:
- *  'form'.
+ * Prepare default configuration data for modules.
  */
-function _skinr_fetch_config_defaults($setting) {
-  switch ($setting) {
-    case 'form':
-      $data = array(
-        'access_handler' => 'skinr_access_handler',
-        'index_handler' => 'skinr_index_handler',
-        'data_handler' => 'skinr_data_handler',
-        'submit_handler' => 'skinr_submit_handler',
-        'submit_handler_attach_to' => array('#submit'),
-        'skinr_title' => t('Skinr'),
-        'skinr_weight' => 1,
-        'title' => '',
-        'description' => t('Manage which skins you want to apply to the hooks'),
-        'collapsed' => TRUE,
-        'weight' => 0,
-      );
-      return $data;
-  }
+function skinr_config_info_default() {
+  return array(
+    'access_handler' => 'skinr_access_handler',
+    'index_handler' => 'skinr_index_handler',
+    'data_handler' => 'skinr_data_handler',
+    'submit_handler' => 'skinr_submit_handler',
+    'submit_handler_attach_to' => array('#submit'),
+    'skinr_title' => t('Skinr'),
+    'skinr_weight' => 1,
+    'title' => '',
+    'description' => t('Manage which skins you want to apply to the hooks'),
+    'collapsed' => TRUE,
+    'weight' => 0,
+  );
 }
 
 /**
diff --git skinr_ui.admin.inc skinr_ui.admin.inc
index 54f069b..3b088ae 100644
--- skinr_ui.admin.inc
+++ skinr_ui.admin.inc
@@ -44,7 +44,7 @@ function skinr_ui_filters() {
   );
 
   // Type filter.
-  $config = skinr_fetch_config();
+  $config = skinr_get_config_info();
 
   $options = array('[any]' => t('any'));
   foreach ($config as $type => $data) {
@@ -254,13 +254,13 @@ function skinr_ui_admin_skins() {
       continue;
     }
     if (empty($type)) {
-      $skinrs = skinr_get($theme->name);
+      $skins = skinr_skin_load($theme->name);
     }
     else {
-      $skinrs = array($type => skinr_get($theme->name, $type));
+      $skins = array($type => skinr_skin_load($theme->name, $type));
     }
 
-    foreach ($skinrs as $module => $elements) {
+    foreach ($skins as $module => $elements) {
       foreach ($elements as $sid => $skin) {
         $operations = array(
           'edit' => array(
@@ -389,13 +389,13 @@ function skinr_ui_multiple_delete_confirm_submit($form, &$form_state) {
     foreach ($form_state['values']['skins'] as $skin => $value) {
       $parts = explode('__', $skin, 3);
 
-      $skinr = new StdClass();
-      $skinr->theme = $parts[0];
-      $skinr->module = $parts[1];
-      $skinr->sid = $parts[2];
-      $skinr->skins = array();
+      $skin = new StdClass();
+      $skin->theme = $parts[0];
+      $skin->module = $parts[1];
+      $skin->sid = $parts[2];
+      $skin->skins = array();
 
-      skinr_set($skinr);
+      skinr_skin_save($skin);
     }
 
     $count = count($form_state['values']['skins']);
@@ -452,57 +452,60 @@ function skinr_ui_settings_validate(&$form, &$form_state) {
 }
 
 /**
- * Form builder for the non-theme skinsets listing form.
+ * Form builder for the skin info listing form.
  *
  * @ingroup forms
- * @see skinr_ui_admin_skinsets_submit()
+ * @see skinr_ui_admin_skin_infos_submit()
  */
-function skinr_ui_admin_skinsets($form, $form_state) {
+function skinr_ui_admin_skin_infos($form, $form_state) {
   $form = array();
 
-  // @todo Add API function to retrieve D7 skins.
-  $skinsets = array();
-  if (empty($skinsets)) {
-    $form['skinsets_empty'] = array(
+  $skins = skinr_get_skin_info();
+  if (empty($skins)) {
+    $form['skins_empty'] = array(
       '#markup' => t('You do not currently have any skin sets to manage.'),
     );
     return $form;
   }
 
-  uasort($skinsets, 'skinr_ui_sort_by_info_name');
-  $form['skinsets'] = array('#tree' => TRUE);
+  uasort($skins, 'skinr_ui_sort_by_title');
+  $form['skins'] = array('#tree' => TRUE);
 
-  // Iterate through each of the skinsets.
-  foreach ($skinsets as $name => $skinset) {
+  // Iterate through each of the skins.
+  foreach ($skins as $name => $skin) {
     $extra = array();
-    $extra['enabled'] = (bool) $skinset->status;
+    // @todo Status for skins is now per theme; either figure out a better way to display, or delete the status row.
+    $extra['enabled'] = TRUE;
 
-    // Generate link for skinset's configuration page
+    // Generate link for skin's configuration page
     $configure_link = menu_get_item('admin/appearance/skinr/skins/settings/'. $name);
     if ($configure_link['access']) {
       $extra['links']['configure'] = array(
         '#type' => 'link',
         '#title' => t('Configure'),
         '#href' => $configure_link['href'],
-        '#options' => array('attributes' => array('class' => array('skinset-link', 'skinset-link-configure'), 'title' => $configure_link['description'])),
+        '#options' => array('attributes' => array('class' => array('skin-link', 'skin-link-configure'), 'title' => $configure_link['description'])),
       );
     }
 
-    // Create a row entry for this skinset.
-    $form['skinsets'][$skinset->info['package']][$skinset->name] = _skinr_ui_admin_skinsets_build_row($skinset->info, $extra);
+    // Create a row entry for this skin.
+    $form['skins'][$skin['group']][$name] = _skinr_ui_admin_skin_infos_build_row($skin, $extra);
   }
 
   // Add basic information to the fieldsets.
-  foreach (element_children($form['skinsets']) as $package) {
-    $form['skinsets'][$package] += array(
+  foreach (element_children($form['skins']) as $package) {
+    $form['skins'][$package] += array(
       '#type' => 'fieldset',
       '#title' => t($package),
       '#collapsible' => TRUE,
-      '#theme' => 'skinr_ui_admin_skinsets_fieldset',
+      '#theme' => 'skinr_ui_admin_skin_infos_fieldset',
       '#header' => array(
-        t('Screenshot'),
         t('Name'),
-        t('Version'),
+        t('Source type'),
+        t('Source name'),
+        t('Source version'),
+        t('Source plug-in'),
+        t('Theme hooks'),
         array('data' => t('Enabled'), 'class' => array('checkbox')),
         array('data' => t('Operations'), 'colspan' => 3),
       ),
@@ -520,9 +523,9 @@ function skinr_ui_admin_skinsets($form, $form_state) {
 }
 
 /**
- * Build a table row for the skinsets page.
+ * Build a table row for the skin info listing page.
  */
-function _skinr_ui_admin_skinsets_build_row($info, $extra) {
+function _skinr_ui_admin_skin_infos_build_row($skin, $extra) {
   // Add in the defaults.
   $extra += array(
     'enabled' => FALSE,
@@ -532,45 +535,49 @@ function _skinr_ui_admin_skinsets_build_row($info, $extra) {
   $form = array(
     '#tree' => TRUE,
   );
-  // Set the basic properties.
-  $form['screenshot'] = array(
-    '#markup' => file_exists($info['screenshot']) ? theme('image', array('path' => $info['screenshot'], 'alt' => t('Screenshot for %theme theme', array('%theme' => $info['name'])), 'attributes' => array('class' => 'screenshot'), 'getsize' => FALSE)) : t('no screenshot'),
-  );
 
   $form['name'] = array(
-    '#markup' => $info['name'],
+    '#markup' => $skin['title'],
   );
   $form['description'] = array(
-    '#markup' => t($info['description']),
+    '#markup' => t($skin['description']),
   );
-  $form['version'] = array(
+
+
+  // Grab source info.
+  $info = system_get_info($skin['source']['type'], $skin['source']['name']);
+
+  $form['source type'] = array(
+    '#markup' => $skin['source']['type'],
+  );
+  $form['source name'] = array(
+    '#markup' => $info['name'],
+  );
+  $form['source version'] = array(
     '#markup' => $info['version'],
   );
+  $form['source plugin'] = array(
+    '#markup' => $skin['source']['plugin'],
+  );
+
+  $theme_hooks = array();
+  foreach ($skin['theme hooks'] as $theme_hook) {
+    $theme_hooks[] = $theme_hook == '*' ? t('all hooks') : $theme_hook;
+  }
+  $form['theme hooks'] = array(
+    '#markup' => implode('<br />', $theme_hooks),
+  );
 
   // Check the compatibilities.
   $compatible = TRUE;
   $status_short = '';
   $status_long = '';
 
-  // Check the core compatibility.
-  if (!isset($info['core']) || $info['core'] != DRUPAL_CORE_COMPATIBILITY) {
-    $compatible = FALSE;
-    $status_short .= t('Incompatible with this version of Drupal core. ');
-    $status_long .= t('This version is not compatible with Drupal !core_version and should be replaced.', array('!core_version' => DRUPAL_CORE_COMPATIBILITY));
-  }
-
-  // Ensure this skinset is compatible with the currently installed version of PHP.
-  if (version_compare(phpversion(), $info['php']) < 0) {
-    $compatible = FALSE;
-    $status_short .= t('Incompatible with this version of PHP');
-    if (substr_count($info['php'], '.') < 2) {
-      $php_required .= '.*';
-    }
-    $status_long .= t('This module requires PHP version @php_required and is incompatible with PHP version !php_version.', array('@php_required' => $php_required, '!php_version' => phpversion()));
-  }
+  // @todo Check for Skinr API compatibility.
+  $compatible = TRUE;
 
-  // If this skinset is compatible, present a checkbox indicating
-  // this skinset may be installed. Otherwise, show a big red X.
+  // If this skin is compatible, present a checkbox indicating
+  // this skin may be installed. Otherwise, show a big red X.
   if ($compatible) {
     $form['enable'] = array(
       '#type' => 'checkbox',
@@ -585,7 +592,7 @@ function _skinr_ui_admin_skinsets_build_row($info, $extra) {
     $form['enable'] = array(
       '#markup' =>  theme('image', array('path' => 'misc/watchdog-error.png', 'alt' => t('incompatible'), 'title' => $status_short)),
     );
-    $form['name']['#markup'] .= theme('theme_skinr_ui_admin_skinsets_incompatible', array('message' => $status_long));
+    $form['name']['#markup'] .= theme('theme_skinr_ui_admin_skin_infos_incompatible', array('message' => $status_long));
   }
 
   // Build operation links.
@@ -595,34 +602,37 @@ function _skinr_ui_admin_skinsets_build_row($info, $extra) {
 }
 
 /**
- * Helper function to sort skinsets by the name in their .info file.
+ * Sort skin infos by title.
  *
  * @param $a
- *   The first skinset to compare.
+ *   The first skin info to compare.
  * @param $b
- *   The second skinset to compare.
+ *   The second skin info to compare.
  *
  * @return
  *   Returns < 0 if $a is less than $b; > 0 if $a is greater than $b, and 0
  *   if they are equal.
  */
-function skinr_ui_sort_by_info_name($a, $b) {
-  return strcasecmp($a->info['name'], $b->info['name']);
+function skinr_ui_sort_by_title($a, $b) {
+  return strcasecmp($a['title'], $b['title']);
 }
 
 /**
- * Form submission handler for skinr_ui_admin_skinsets().
+ * Form submission handler for skinr_ui_admin_skin_infos().
+ *
+ * @todo Update status storage code.
  */
-function skinr_ui_admin_skinsets_submit($form, &$form_state) {
+function skinr_ui_admin_skin_infos_submit($form, &$form_state) {
   // Store list of previously enabled themes and disable all themes.
-  $old_skinset_list = $new_skinset_list = array();
-  foreach (skinr_skinsets() as $skinset) {
-    if ($skinset->status) {
-      $old_skinset_list[] = $skinset->name;
+  $old_skin_infos = $new_skin_infos = array();
+  foreach (skinr_get_skin_info() as $skin_info) {
+    if ($skin_info->status) {
+      $old_skin_infos[] = $skin_info->name;
     }
   }
   db_query("UPDATE {skinr_skinsets} SET status = 0");
 
+  // Set status for all
   foreach ($form_state['values']['skinsets'] as $category) {
     foreach ($category as $name => $choice) {
       if ($choice['enable']) {
@@ -636,9 +646,7 @@ function skinr_ui_admin_skinsets_submit($form, &$form_state) {
   }
 
   // Refresh skinsets from DB.
-  drupal_static_reset('skinr_skinsets');
-
-  // @todo Disable any skins from skinsets that are now disabled.
+  drupal_static_reset('skinr_get_skin_info');
 
   drupal_set_message(t('The configuration options have been saved.'));
 
@@ -646,7 +654,7 @@ function skinr_ui_admin_skinsets_submit($form, &$form_state) {
 }
 
 /**
- * Returns HTML for the skinsets form.
+ * Returns HTML for the skin info listing form.
  *
  * @param $variables
  *   An associative array containing:
@@ -654,42 +662,41 @@ function skinr_ui_admin_skinsets_submit($form, &$form_state) {
  *
  * @ingroup themeable
  */
-function theme_skinr_ui_admin_skinsets_fieldset($variables) {
+function theme_skinr_ui_admin_skin_infos_fieldset($variables) {
   $form = $variables['form'];
 
   // Individual table headers.
   $rows = array();
   // Iterate through all the modules, which are
   // children of this fieldset.
-  foreach (element_children($form) as $key) {
+  foreach (element_children($form) as $skin_name) {
     // Stick it into $skinset for easier accessing.
-    $skinset = $form[$key];
+    $skin_info = $form[$skin_name];
 
     $row = array();
 
-    // Screenshot.
-    $row[] = array('data' => $skinset['screenshot'], 'class' => array('screenshot'));
-
     // Name.
-    $row[] = theme('skinr_ui_admin_skinsets_info', array(
-      'name' => drupal_render($skinset['name']),
-      'description' => drupal_render($skinset['description'])
+    $row[] = theme('skinr_ui_admin_skin_infos_summary', array(
+      'name' => drupal_render($skin_info['name']),
+      'description' => drupal_render($skin_info['description']),
     ));
 
-    // Version.
-    $row[] = drupal_render($skinset['version']);
+    // Source.
+    $row[] = drupal_render($skin_info['source type']);
+    $row[] = drupal_render($skin_info['source name']);
+    $row[] = drupal_render($skin_info['source version']);
+    $row[] = drupal_render($skin_info['source plugin']);
 
-    // Add the description, along with any modules it requires.
-    $description = drupal_render($skinset['description']);
-    //$row[] = array('data' => $description, 'class' => array('description'));
+    // Theme hooks.
+    $row[] = drupal_render($skin_info['theme hooks']);
 
     // Enabled.
-    unset($skinset['enable']['#title']);
-    $row[] = array('class' => array('checkbox'), 'data' => drupal_render($skinset['enable']));
+    unset($skin_info['enable']['#title']);
+    $row[] = array('class' => array('checkbox'), 'data' => drupal_render($skin_info['enable']));
 
     // Display links (such as help or permissions) in their own columns.
     foreach (array('help', 'permissions', 'configure') as $key) {
-      $row[] = array('data' => drupal_render($skinset['links'][$key]), 'class' => array($key));
+      $row[] = array('data' => drupal_render($skin_info['links'][$key]), 'class' => array($key));
     }
     $rows[] = $row;
   }
@@ -706,8 +713,8 @@ function theme_skinr_ui_admin_skinsets_fieldset($variables) {
  *
  * @ingroup themeable
  */
-function theme_skinr_ui_admin_skinsets_info($variables) {
-  return '<div class="skinset-info"><h2>'. $variables['name'] .'</h2><div class="description">'. $variables['description'] .'</div></div>';
+function theme_skinr_ui_admin_skin_infos_summary($variables) {
+  return '<div class="skin-infos-summary"><h2>'. $variables['name'] .'</h2><div class="description">'. $variables['description'] .'</div></div>';
 }
 
 /**
@@ -719,7 +726,7 @@ function theme_skinr_ui_admin_skinsets_info($variables) {
  *
  * @ingroup themeable
  */
-function theme_skinr_ui_admin_skinsets_incompatible($variables) {
+function theme_skinr_ui_admin_skin_infos_incompatible($variables) {
   return '<div class="incompatible">' . $variables['message'] . '</div>';
 }
 
@@ -728,14 +735,14 @@ function theme_skinr_ui_admin_skinsets_incompatible($variables) {
  * to enable or disable them individually for each theme.
  *
  * @ingroup forms
- * @see skinr_ui_admin_skinsets_settings_submit()
+ * @see skinr_ui_admin_skin_infos_settings_submit()
  */
-function skinr_ui_admin_skinsets_settings($form, $form_state, $skinset_name) {
+function skinr_ui_admin_skin_infos_settings($form, $form_state, $skinset_name) {
   $form = array();
 
-  $skinsets = skinr_skinsets();
-  if (!empty($skinsets[$skinset_name])) {
-    $skinset = $skinsets[$skinset_name];
+  $skin_infos = skinr_get_skin_info();
+  if (!empty($skin_infos[$skinset_name])) {
+    $skin_info = $skin_infos[$skinset_name];
 
     $themes = list_themes();
     ksort($themes);
@@ -743,14 +750,14 @@ function skinr_ui_admin_skinsets_settings($form, $form_state, $skinset_name) {
     $form['skins'] = array('#tree' => TRUE);
 
     // Iterate through each of the skinsets.
-    foreach ($skinset->skins as $name => $skin) {
+    foreach ($skin_info->skins as $name => $skin) {
       foreach ($themes as $theme) {
         if (!$theme->status) {
           continue;
         }
 
         // Create a row entry for this skinset.
-        $form['skins'][$theme->name][$name] = _skinr_ui_admin_skinsets_settings_build_row($skin, $theme->name);
+        $form['skins'][$theme->name][$name] = _skinr_ui_admin_skin_infos_settings_build_row($skin, $theme->name);
       }
     }
 
@@ -762,7 +769,7 @@ function skinr_ui_admin_skinsets_settings($form, $form_state, $skinset_name) {
         '#title' => t($themes[$theme_name]->info['name']),
         '#collapsible' => TRUE,
         '#collapsed' => ($theme_name != $current_theme),
-        '#theme' => 'skinr_ui_admin_skinsets_settings_fieldset',
+        '#theme' => 'skinr_ui_admin_skin_infos_settings_fieldset',
         '#header' => array(
           t('Enabled'),
           t('Name'),
@@ -791,7 +798,7 @@ function skinr_ui_admin_skinsets_settings($form, $form_state, $skinset_name) {
 /**
  * Build a table row for the skinset settings page.
  */
-function _skinr_ui_admin_skinsets_settings_build_row($skin, $theme_name) {
+function _skinr_ui_admin_skin_infos_settings_build_row($skin, $theme_name) {
   $form['enable'] = array(
     '#type' => 'checkbox',
     '#title' => t('Enable'),
@@ -799,11 +806,11 @@ function _skinr_ui_admin_skinsets_settings_build_row($skin, $theme_name) {
   );
 
   // The hooks this skin is working with.
-  $features = array();
-  foreach ($skin['features'] as $feature) {
-    $features[] = $feature == '*' ? t('all hooks') : $feature;
+  $theme_hooks = array();
+  foreach ($skin['theme hooks'] as $theme_hook) {
+    $theme_hooks[] = $theme_hook == '*' ? t('all hooks') : $theme_hook;
   }
-  $features = t('Used by: !features', array('!features' => implode(', ', $features)));
+  $features = t('Used by: !theme_hooks', array('!theme_hooks' => implode(', ', $theme_hooks)));
 
   $form['name'] = array(
     '#markup' => t($skin['title']),
@@ -827,7 +834,7 @@ function _skinr_ui_admin_skinsets_settings_build_row($skin, $theme_name) {
  *
  * @ingroup themeable
  */
-function theme_skinr_ui_admin_skinsets_settings_fieldset($variables) {
+function theme_skinr_ui_admin_skin_infos_settings_fieldset($variables) {
   $form = $variables['form'];
 
   // Individual table headers.
@@ -845,10 +852,10 @@ function theme_skinr_ui_admin_skinsets_settings_fieldset($variables) {
     $row[] = array('class' => array('checkbox'), 'data' => drupal_render($skin['enable']));
 
     // Name.
-    $row[] = theme('skinr_ui_admin_skinsets_settings_info', array(
+    $row[] = theme('skinr_ui_admin_skin_infos_settings_summary', array(
       'name' => drupal_render($skin['name']),
       'description' => drupal_render($skin['description']),
-      'features' => drupal_render($skin['features'])
+      'theme hooks' => drupal_render($skin['theme hooks'])
     ));
 
     $rows[] = $row;
@@ -868,14 +875,14 @@ function theme_skinr_ui_admin_skinsets_settings_fieldset($variables) {
  *
  * @ingroup themeable
  */
-function theme_skinr_ui_admin_skinsets_settings_info($variables) {
-  return '<div class="skin-info"><h2>'. $variables['name'] .'</h2><div class="description">'. $variables['description'] .'</div><div class="features">'. $variables['features'] .'</div></div>';
+function theme_skinr_ui_admin_skin_infos_settings_summary($variables) {
+  return '<div class="skin-info"><h2>'. $variables['name'] .'</h2><div class="description">'. $variables['description'] .'</div><div class="theme-hooks">'. $variables['theme hooks'] .'</div></div>';
 }
 
 /**
- * Process skinr_ui_admin_skinsets_settings() form submissions.
+ * Process skinr_ui_admin_skin_infos_settings() form submissions.
  */
-function skinr_ui_admin_skinsets_settings_submit($form, &$form_state) {
+function skinr_ui_admin_skin_infos_settings_submit($form, &$form_state) {
   if ($form_state['values']['op'] == t('Save configuration')) {
     $statuses = array();
     foreach ($form_state['values']['skins'] as $theme => $skins) {
@@ -936,16 +943,16 @@ function skinr_ui_export_form($form, &$form_state, $theme = NULL) {
   if ($theme) {
     // Export an individual theme.
     $theme = str_replace('-', '_', $theme);
-    $skinrs = skinr_get($theme);
+    $skins = skinr_skin_load($theme);
 
     // Convert classes to arrays.
-    foreach ($skinrs as $module => $data) {
-      foreach ($data as $sid => $skinr) {
-        $skinrs[$module][$sid] = (array) $skinrs[$module][$sid];
+    foreach ($skins as $module => $data) {
+      foreach ($data as $sid => $skin) {
+        $skins[$module][$sid] = (array) $skins[$module][$sid];
       }
     }
 
-    $code = '$skinrs = '. var_export($skinrs, TRUE) .';';
+    $code = '$skins = '. var_export($skins, TRUE) .';';
     $lines = substr_count($code, "\n") + 1;
 
     $form['theme'] = array(
@@ -1081,25 +1088,25 @@ function skinr_ui_import_form_validate(&$form, &$form_state) {
     return;
   }
 
-  $skinrs = '';
+  $skins = '';
   ob_start();
   eval($form_state['values']['skinr_settings']);
   ob_end_clean();
 
-  foreach ($skinrs as $module => $ignored) {
-    if (!is_array($skinrs[$module])) {
+  foreach ($skins as $module => $ignored) {
+    if (!is_array($skins[$module])) {
       // Error.
       form_error($form['skinr_settings'], t('These are not valid Skinr settings.'));
     }
-    foreach ($skinrs[$module] as $sid => $ignored) {
-      if (!is_array($skinrs[$module][$sid])) {
+    foreach ($skins[$module] as $sid => $ignored) {
+      if (!is_array($skins[$module][$sid])) {
         // Error.
         form_error($form['skinr_settings'], t('These are not valid Skinr settings.'));
       }
 
       // Cast skinr array to object so we can actually use it.
-      $skinrs[$module][$sid] = (object) $skinrs[$module][$sid];
-      if (!skinr_validate($skinrs[$module][$sid])) {
+      $skins[$module][$sid] = (object) $skins[$module][$sid];
+      if (!skinr_validate($skins[$module][$sid])) {
         // Error.
         form_error($form['skinr_settings'], t('These are not valid Skinr settings.'));
       }
@@ -1110,16 +1117,16 @@ function skinr_ui_import_form_validate(&$form, &$form_state) {
     form_error($form['theme'], t('The theme name must be alphanumeric and can contain underscores only.'));
   }
 
-  $form_state['skinrs'] = &$skinrs;
+  $form_state['skinrs'] = &$skins;
 }
 
 /**
  * Form submission handler for skinr_ui_import_form().
  */
 function skinr_ui_import_form_submit(&$form, &$form_state) {
-  foreach ($form_state['skinrs'] as $module => $skinrs) {
-    foreach ($skinrs as $sid => $skinr) {
-      if (!skinr_set($skinr)) {
+  foreach ($form_state['skinrs'] as $module => $skins) {
+    foreach ($skins as $sid => $skin) {
+      if (!skinr_skin_save($skin)) {
         drupal_set_message(t('Skinr settings for the theme %theme could not be saved!', array('%theme' => $form_state['values']['theme'])), 'error');
       }
     }
@@ -1171,14 +1178,14 @@ function skinr_ui_delete_confirm($form, &$form_state, $theme, $module, $sid) {
  */
 function skinr_ui_delete_confirm_submit($form, &$form_state) {
   if ($form_state['values']['confirm']) {
-    $skinr = new stdClass();
-    $skinr->theme = $form_state['values']['theme'];
-    $skinr->module = $form_state['values']['module'];
-    $skinr->sid = $form_state['values']['sid'];
-    $skinr->skins = array();
-    $skinr->settings = array();
-
-    skinr_set($skinr);
+    $skin = new stdClass();
+    $skin->theme = $form_state['values']['theme'];
+    $skin->module = $form_state['values']['module'];
+    $skin->sid = $form_state['values']['sid'];
+    $skin->skins = array();
+    $skin->settings = array();
+
+    skinr_skin_save($skin);
   }
 
   $form_state['redirect'] = 'admin/appearance/skinr';
diff --git skinr_ui.module skinr_ui.module
index 1136a5a..e62ef14 100644
--- skinr_ui.module
+++ skinr_ui.module
@@ -52,7 +52,7 @@ function skinr_ui_menu() {
     'title' => 'Skins',
     'description' => 'Manage which skins are available when changing Skinr settings.',
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('skinr_ui_admin_skinsets'),
+    'page arguments' => array('skinr_ui_admin_skin_infos'),
     'access arguments' => array('administer site configuration'),
     'file' => 'skinr_ui.admin.inc',
     'type' => MENU_LOCAL_TASK,
@@ -68,20 +68,20 @@ function skinr_ui_menu() {
   // drupal_uninstall_modules() invokes hook_menu() in disabled modules and does
   // not respect module dependencies. Therefore, uninstalling both Skinr UI and
   // Skinr at the same time is leading to a database error, since
-  // skinr_skinsets() tries to load data from tables that have been deleted
+  // skinr_get_skin_info() tries to load data from tables that have been deleted
   // already.
   // @see http://drupal.org/node/151452
   // @see http://drupal.org/node/320303
-  $skinsets = array();
+  $skin_infos = array();
   if (in_array('skinr', module_list())) {
-    $skinsets = skinr_skinsets();
+    $skin_infos = skinr_get_skin_info();
   }
-  foreach ($skinsets as $skinset) {
-    $items['admin/appearance/skinr/skins/settings/' . $skinset->name] = array(
-      'title' => $skinset->info['name'],
+  foreach ($skin_infos as $skin_info) {
+    $items['admin/appearance/skinr/skins/settings/' . $skin_info['name']] = array(
+      'title' => $skin_info['title'],
       'description' => 'Manage which options are available for each Skin when changing Skinr settings.',
       'page callback' => 'drupal_get_form',
-      'page arguments' => array('skinr_ui_admin_skinsets_settings', $skinset->name),
+      'page arguments' => array('skinr_ui_admin_skin_infos_settings', $skin_info['name']),
       'access arguments' => array('administer site configuration'),
       'file' => 'skinr_ui.admin.inc',
       'type' => MENU_LOCAL_TASK,
@@ -217,24 +217,24 @@ if (!function_exists('dialog_js_load')) {
  */
 function skinr_ui_theme() {
   return array(
-    'skinr_ui_admin_skinsets_fieldset' => array(
+    'skinr_ui_admin_skin_infos_fieldset' => array(
       'render element' => 'form',
       'file' => 'skinr_ui.admin.inc',
     ),
-    'skinr_ui_admin_skinsets_info' => array(
+    'skinr_ui_admin_skin_infos_summary' => array(
       'variables' => array('name' => NULL, 'description' => NULL),
       'file' => 'skinr_ui.admin.inc',
     ),
-    'skinr_ui_admin_skinsets_incompatible' => array(
+    'skinr_ui_admin_skin_infos_incompatible' => array(
       'variables' => array('message' => NULL),
       'file' => 'skinr_ui.admin.inc',
     ),
-    'skinr_ui_admin_skinsets_settings_fieldset' => array(
+    'skinr_ui_admin_skin_infos_settings_fieldset' => array(
       'render element' => 'form',
       'file' => 'skinr_ui.admin.inc',
     ),
-    'skinr_ui_admin_skinsets_settings_info' => array(
-      'variables' => array('name' => NULL, 'description' => NULL, 'features' => NULL),
+    'skinr_ui_admin_skin_infos_settings_summary' => array(
+      'variables' => array('name' => NULL, 'description' => NULL, 'theme hooks' => NULL),
       'file' => 'skinr_ui.admin.inc',
     ),
   );
@@ -266,27 +266,6 @@ function skinr_ui_help($path, $arg) {
 }
 
 /**
- * Checks if overlay functionality is enabled.
- *
- * @return
- *   TRUE if enabled, FALE otherwise.
- */
-function skinr_ui_overlay_enabled() {
-  static $warned = FALSE;
-
-  if (!module_exists('dialog') && !$warned) {
-    // Ensure that dialog module is enabled, else functionality will be crippled.
-    $message = 'The dialog module is now required by skinr to function properly. Please enable this module.';
-    drupal_set_message(t($message), 'error', FALSE);
-    watchdog('skinr', $message, array(), WATCHDOG_CRITICAL);
-
-    $warned = TRUE;
-  }
-
-  return module_exists('dialog');
-}
-
-/**
  * Menu title callback; sets the title for a Skinr settings form page.
  *
  * @param $module
@@ -398,17 +377,18 @@ function skinr_ui_form_alter(&$form, $form_state, $form_id) {
   if ($form_id == 'update_script_selection_form') {
     return;
   }
+  
+  $config = skinr_get_config_info();
+  $skin_infos = skinr_get_skin_info();
+  $groups = skinr_get_group_info();
 
-  $skinr_config = skinr_fetch_config();
-  $info = skinr_skin_data();
-
-  foreach ($skinr_config as $module => $settings) {
-    if (isset($settings['form'][$form_id])) {
+  foreach ($config as $module => $module_settings) {
+    if (isset($module_settings['form'][$form_id])) {
       if (!empty($form['skinr']) && $form['skinr']['module']['#value'] !== $module) {
         continue;
       }
 
-      $form_settings = array_merge(_skinr_fetch_config_defaults('form'), $settings['form'][$form_id]);
+      $form_settings = array_merge(skinr_config_info_default(), $module_settings['form'][$form_id]);
 
       // Check for access.
       if (!skinr_handler('access_handler', 'access skinr', $form_settings['access_handler'], $form, $form_state)) {
@@ -454,9 +434,9 @@ function skinr_ui_form_alter(&$form, $form_state, $form_id) {
         }
 
         if (!$form_state['submitted']) {
-          if ($skinr = skinr_handler('data_handler', 'form', $form_settings['data_handler'], $form, $form_state, $theme->name, $module, $form_settings)) {
-            $defaults  = $skinr->skins;
-            $additional_default = isset($skinr->skins['_additional']) ? $skinr->skins['_additional'] : '';
+          if ($skin = skinr_handler('data_handler', 'form', $form_settings['data_handler'], $form, $form_state, $theme->name, $module, $form_settings)) {
+            $defaults  = $skin->skins['_options'];
+            $additional_default = isset($skin->skins['_additional']) ? $skin->skins['_additional'] : '';
           }
           else {
             $defaults  = array();
@@ -495,69 +475,71 @@ function skinr_ui_form_alter(&$form, $form_state, $form_id) {
         }
 
         // Create individual widgets for each skin.
-        if (isset($info[$theme->name]->skins)) {
-          foreach ($info[$theme->name]->skins as $skin_id => $skin) {
-            // Check if this skin is disabled.
-            if (empty($skin['status'][$theme->name])) {
-              continue;
-            }
+        foreach ($skin_infos as $skin_name => $skin_info) {
+          // Check if this skin is disabled.
+          if (empty($skin_info['status'][$theme->name])) {
+            continue;
+          }
 
-            // Check if this skin applies to this hook.
-            if (!is_array($skin['features']) || (!in_array('*', $skin['features']) && !_skinr_is_featured($preprocess_hooks, $skin['features']))) {
-              continue;
-            }
+          // Check if this skin applies to this hook.
+          if (!is_array($skin_info['theme hooks']) || (!in_array('*', $skin_info['theme hooks']) && !_skinr_is_featured($preprocess_hooks, $skin_info['theme hooks']))) {
+            continue;
+          }
 
-            // Create widget.
-            switch ($skin['type']) {
+          // Create widget.
+          if (!empty($skin_info['form callback']) && function_exists($skin_info['form callback'])) {
+            // @todo Allow for custom form callbacks.
+            $field = array();
+          }
+          else {
+            switch ($skin_info['type']) {
               case 'checkboxes':
                 $field = array(
                   '#type' => 'checkboxes',
                   '#multiple' => TRUE,
-                  '#title' => t($skin['title']),
-                  '#options' => skinr_ui_info_options_to_form_options($skin['options']),
-                  '#default_value' => isset($defaults[$skin_id]) ? $defaults[$skin_id] : array(),
-                  '#description' => t($skin['description']),
-                  '#weight' => isset($skin['weight']) ? $skin['weight'] : NULL,
+                  '#title' => t($skin_info['title']),
+                  '#options' => skinr_ui_info_options_to_form_options($skin_info['options']),
+                  '#default_value' => isset($defaults[$skin_name]) ? $defaults[$skin_name] : array(),
+                  '#description' => t($skin_info['description']),
+                  '#weight' => isset($skin_info['weight']) ? $skin_info['weight'] : NULL,
                 );
                 break;
               case 'radios':
                 $field = array(
                   '#type' => 'radios',
-                  '#title' => t($skin['title']),
-                  '#options' => array_merge(array('' => '&lt;none&gt;'), skinr_ui_info_options_to_form_options($skin['options'])),
-                  '#default_value' => isset($defaults[$skin_id]) ? $defaults[$skin_id] : '',
-                  '#description' => t($skin['description']),
-                  '#weight' => isset($skin['weight']) ? $skin['weight'] : NULL,
+                  '#title' => t($skin_info['title']),
+                  '#options' => array_merge(array('' => '&lt;none&gt;'), skinr_ui_info_options_to_form_options($skin_info['options'])),
+                  '#default_value' => isset($defaults[$skin_name]) ? $defaults[$skin_name] : '',
+                  '#description' => t($skin_info['description']),
+                  '#weight' => isset($skin_info['weight']) ? $skin_info['weight'] : NULL,
                 );
                 break;
               case 'select':
                 $field = array(
                   '#type' => 'select',
-                  '#title' => t($skin['title']),
-                  '#options' => array_merge(array('' => '<none>'), skinr_ui_info_options_to_form_options($skin['options'])),
-                  '#default_value' => isset($defaults[$skin_id]) ? $defaults[$skin_id] : '',
-                  '#description' => t($skin['description']),
-                  '#weight' => isset($skin['weight']) ? $skin['weight'] : NULL,
+                  '#title' => t($skin_info['title']),
+                  '#options' => array_merge(array('' => '<none>'), skinr_ui_info_options_to_form_options($skin_info['options'])),
+                  '#default_value' => isset($defaults[$skin_name]) ? $defaults[$skin_name] : '',
+                  '#description' => t($skin_info['description']),
+                  '#weight' => isset($skin_info['weight']) ? $skin_info['weight'] : NULL,
                 );
                 break;
             }
-            if (empty($skin['group'])) {
-              $form['skinr_settings'][$module . '_group'][$theme->name]['widgets'][$skin_id] = $field;
-            }
-            else {
-              if (!isset($form['skinr_settings'][$module . '_group'][$theme->name]['widgets'][$skin['group']])) {
-                $group = $info[$theme->name]->options['groups'][$skin['group']];
-                $form['skinr_settings'][$module . '_group'][$theme->name]['widgets'][$skin['group']] = array(
-                  '#type' => 'fieldset',
-                  '#title' => t($group['title']),
-                  '#description' => t($group['description']),
-                  '#collapsible' => $group['collapsible'],
-                  '#collapsed' => $group['collapsed'],
-                  '#weight' => isset($group['weight']) ? $group['weight'] : NULL,
-                );
-              }
-              $form['skinr_settings'][$module . '_group'][$theme->name]['widgets'][$skin['group']][$skin_id] = $field;
+          }
+          if (empty($skin_info['group'])) {
+            $form['skinr_settings'][$module . '_group'][$theme->name]['widgets'][$skin_name] = $field;
+          }
+          else {
+            if (!isset($form['skinr_settings'][$module . '_group'][$theme->name]['widgets'][$skin_info['group']])) {
+              $group = $groups[$skin_info['group']];
+              $form['skinr_settings'][$module . '_group'][$theme->name]['widgets'][$skin_info['group']] = array(
+                '#type' => 'fieldset',
+                '#title' => t($group['title']),
+                '#description' => t($group['description']),
+                '#weight' => isset($group['weight']) ? $group['weight'] : NULL,
+              );
             }
+            $form['skinr_settings'][$module . '_group'][$theme->name]['widgets'][$skin_info['group']][$skin_name] = $field;
           }
         }
 
@@ -606,14 +588,14 @@ function skinr_ui_form_alter(&$form, $form_state, $form_id) {
  */
 function skinr_ui_form_validate($form, &$form_state) {
   $form_id = $form_state['values']['form_id'];
-  $skinr_config = skinr_fetch_config();
+  $config = skinr_get_config_info();
 
   $error = FALSE;
-  foreach ($skinr_config as $module => $settings) {
-    if (isset($settings['form'][$form_id]) && isset($form_state['values']['skinr_settings'][$module . '_group'])) {
+  foreach ($config as $module => $module_settings) {
+    if (isset($module_settings['form'][$form_id]) && isset($form_state['values']['skinr_settings'][$module . '_group'])) {
       foreach ($form_state['values']['skinr_settings'][$module . '_group'] as $theme_name => $theme) {
         if (isset($theme['_additional'])) {
-          $form_settings = array_merge(_skinr_fetch_config_defaults('form'), $settings['form'][$form_id]);
+          $form_settings = array_merge(skinr_config_info_default(), $module_settings['form'][$form_id]);
 
           // Validate additional classes field.
           if (preg_match('/[^a-zA-Z0-9\-\_\s]/', $theme['_additional'])) {
@@ -629,15 +611,11 @@ function skinr_ui_form_validate($form, &$form_state) {
 
   // Undo any grouping to ease processing on submit.
   if (!$error) {
-    $info = skinr_skin_data();
-    foreach ($skinr_config as $module => $settings) {
-      if (isset($settings['form'][$form_id]) && isset($form_state['values']['skinr_settings'][$module . '_group'])) {
+    $groups = skinr_get_group_info();
+    foreach ($config as $module => $module_settings) {
+      if (isset($module_settings['form'][$form_id]) && isset($form_state['values']['skinr_settings'][$module . '_group'])) {
         foreach ($form_state['values']['skinr_settings'][$module . '_group'] as $theme_name => $theme) {
-          if (empty($info[$theme_name]->options['groups'])) {
-            continue;
-          }
-
-          foreach ($info[$theme_name]->options['groups'] as $group_name => $group) {
+          foreach ($groups as $group_name => $group) {
             if (!empty($theme['widgets'][$group_name]) && is_array($theme['widgets'][$group_name])) {
               $group_values = $theme['widgets'][$group_name];
               unset($form_state['values']['skinr_settings'][$module . '_group'][$theme_name]['widgets'][$group_name]);
@@ -655,12 +633,12 @@ function skinr_ui_form_validate($form, &$form_state) {
  */
 function skinr_ui_form_submit($form, &$form_state) {
   $form_id = $form_state['values']['form_id'];
-  $skinr_config = skinr_fetch_config();
+  $config = skinr_get_config_info();
   $current_theme = skinr_current_theme(TRUE);
 
-  foreach ($skinr_config as $module => $settings) {
-    if (isset($settings['form'][$form_id])) {
-      $form_settings = array_merge(_skinr_fetch_config_defaults('form'), $settings['form'][$form_id]);
+  foreach ($config as $module => $module_settings) {
+    if (isset($module_settings['form'][$form_id])) {
+      $form_settings = array_merge(skinr_config_info_default(), $module_settings['form'][$form_id]);
       skinr_handler('submit_handler', '', $form_settings['submit_handler'], $form, $form_state, $module, $form_settings);
 
       // Keep looping, there might be other modules that implement the same form_id.
@@ -672,19 +650,19 @@ function skinr_ui_form_submit($form, &$form_state) {
  * Implements hook_preprocess().
  */
 function skinr_ui_preprocess(&$variables, $hook) {
-  $skinr_config = skinr_fetch_config();
+  $config = skinr_get_config_info();
 
   $original_hook = $hook;
   if (isset($theme_registry[$hook]['original hook'])) {
     $original_hook = $theme_registry[$hook]['original hook'];
   }
 
-  foreach ($skinr_config as $module => $settings) {
-    if (!empty($settings['preprocess'][$original_hook])) {
+  foreach ($config as $module => $module_settings) {
+    if (!empty($module_settings['preprocess'][$original_hook])) {
 
       // Set contextual links.
-      if (!empty($settings['contextual_links'][$original_hook])) {
-        if ($contextual_links = skinr_handler('contextual_links', '', $settings['contextual_links'][$original_hook]['contextual_links_handler'], $variables)) {
+      if (!empty($module_settings['contextual_links'][$original_hook])) {
+        if ($contextual_links = skinr_handler('contextual_links', '', $module_settings['contextual_links'][$original_hook]['contextual_links_handler'], $variables)) {
           skinr_ui_contextual_links($variables, $original_hook, $contextual_links);
         }
       }
@@ -761,15 +739,17 @@ function _skinr_ui_set_contextual_links($hook = NULL, $links = NULL) {
  *
  * @param $preprocess_hooks
  *   An array of theme hooks available to this element.
- * @param $features
+ * @param $theme_hooks
  *   An array of allowed theme hooks.
  *
  * @return
  *   TRUE if an overlap is found, FALSE otherwise.
+ *
+ * @todo Rename function to be more descriptive.
  */
-function _skinr_is_featured($preprocess_hooks, $features) {
+function _skinr_is_featured($preprocess_hooks, $theme_hooks) {
   foreach ($preprocess_hooks as $preprocess_hook) {
-    if (in_array($preprocess_hook, $features)) {
+    if (in_array($preprocess_hook, $theme_hooks)) {
       return TRUE;
     }
   }
@@ -781,6 +761,9 @@ function _skinr_is_featured($preprocess_hooks, $features) {
  *
  * @return
  *   A unique ID number.
+ *
+ * @todo Evaluate the usefulness of this function. Should it go into
+ *   a UI front-end specific file?
  */
 function _skinr_ui_ajax_id() {
   static $skinr_id = 0;
@@ -796,11 +779,13 @@ function _skinr_ui_ajax_id() {
  *
  * @return
  *   A Form API compatible array of options.
+ *
+ * @todo Rename function to be more descriptive.
  */
 function skinr_ui_info_options_to_form_options($options) {
   $form_options = array();
-  foreach ($options as $option) {
-    $form_options[$option['class']] = t($option['label']);
+  foreach ($options as $option_name => $option) {
+    $form_options[$option_name] = t($option['title']);
   }
   return $form_options;
 }
