diff --git skin_creator/skin_creator.info skin_creator/skin_creator.info
new file mode 100644
index 0000000..9bb6054
--- /dev/null
+++ skin_creator/skin_creator.info
@@ -0,0 +1,8 @@
+; $Id$
+
+name = Skin Creator
+description = "Provides tools to generate skin plugins for Skinr."
+core = 7.x
+package = Skinr
+dependencies[] = skinr
+dependencies[] = skinr_ui
\ No newline at end of file
diff --git skin_creator/skin_creator.module skin_creator/skin_creator.module
new file mode 100644
index 0000000..3554170
--- /dev/null
+++ skin_creator/skin_creator.module
@@ -0,0 +1,367 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * This is the main nodule file for Skin Creator.
+ */
+define('SKIN_CREATOR_DEFAULT_THEME_HOOKS', "page\nnode\nregion\nblock\ncomment_wrapper\nviews_view\npanels_display\npanels_region\npanels_pane");
+
+/**
+ * Implementation of hook_menu().
+ */
+function skin_creator_menu() {
+  $items['admin/appearance/skinr/skincreator'] = array(
+    'title' => 'Skin Creator',
+    'description' => 'Use to create skins for Skinr',
+    'access arguments' => array('administer skinr'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('skin_creator_form'),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => '3',
+  );
+  $items['admin/appearance/skinr/skin_creator_settings'] = array(
+    'title' => 'Skin Creator Settings',
+    'description' => 'Use to configure settings for Skinr',
+    'access arguments' => array('administer skinr'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('skin_creator_settings_form'),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => '4',
+  );
+  return $items;
+}
+
+/**
+ * This is the main form that skin creator is using.
+ */
+function skin_creator_form($form, &$form_state, $generated = NULL) {
+
+  $form = array();
+
+  $form['theme_hook'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Theme Hook'),
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+  );
+
+  // Lists installed themes.
+  $themes = list_themes();
+  $options = array();
+
+  foreach ($themes as $theme) {
+    if (!empty($theme->info['hidden'])) {
+      continue;
+    }
+    if ($theme->status) {
+      $options[$theme->name] = t('!theme [enabled]', array('!theme' => $theme->info['name']));
+    }
+    else {
+      $options[$theme->name] = $theme->info['name'];
+    }
+  }
+
+  // Function elements.
+  $form['theme_hook']['source_name'] = array(
+    '#type' => 'select',
+    '#title' => t('Theme'),
+    '#description' => t('Select the theme to create a skin for.'),
+    '#options' => $options,
+    '#required' => TRUE,
+    '#default_value' => 'Bartik',
+  );
+
+  $form['theme_hook']['plugin_name'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Plugin name'),
+    '#description' => t('Enter a name for this plugin. ( a-z, 0-9, _ )'),
+    '#required' => TRUE,
+    '#default_value' => 'wires', 
+  );
+
+  // Skin elements.
+  $form['skins'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Skin Options'),
+    '#collapsible' => TRUE,
+    '#collapsed' => FALSE,
+  );
+
+  $form['skins']['status'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Status'),
+    '#description' => t('This property exists to allow themes to set the default status for a particular theme. !variable.', array('!variable' => l(t('More info'), 'http://skinr.org/skin-property-reference#property-status', array('attributes' => array('target' => '_blank'))))),
+    '#options' => $options,
+    '#required' => TRUE,
+    '#default_value' => array('bartik'),   
+  );
+
+  $form['skins']['skin_name'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Skin name'),
+    '#description' => t('Enter a machine_name for the skin. ( a-z, 0-9, _ )'),
+    '#required' => TRUE,
+    '#default_value' => 'wires', 
+  );
+
+  $form['skins']['skin_title'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Title'),
+    '#description' => t('The title of the skin. !variable.', array('!variable' => l(t('More info'), 'http://skinr.org/skin-property-reference#property-title', array('attributes' => array('target' => '_blank'))))),
+    '#required' => TRUE,
+    '#default_value' => 'wires',
+  );
+
+  $form['skins']['skin_description'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Description'),
+    '#description' => t('The form element description. !variable.', array('!variable' => l(t('More info'), 'http://skinr.org/skin-property-reference#property-description', array('attributes' => array('target' => '_blank'))))),
+    '#required' => TRUE,
+    '#default_value' => 'Adds wireframes to the skin.',
+  );
+
+  $form['skins']['skin_type'] = array(
+    '#type' => 'radios',
+    '#title' => t('Type'),
+    '#options' => array('checkboxes' => 'checkboxes', 'radios' => 'radios', 'select' => 'select'),
+    '#description' => t('The type of form element to use when displaying the options to the user in the settings form. !variable.', array('!variable' => l(t('More info'), 'http://skinr.org/skin-property-reference#property-type', array('attributes' => array('target' => '_blank'))))),
+    '#required' => TRUE,
+    '#default_value' => 'select',
+    );
+
+  //Lists the default theme hooks as well as user defined theme hooks.
+  $items = explode("\n", variable_get('skinr_creator_add_theme_hooks', SKIN_CREATOR_DEFAULT_THEME_HOOKS));
+  $items = array_map('trim', $items);
+  $items = array_filter($items, 'strlen');
+
+  $options = array();
+  foreach ($items as $item) {
+    $options[$item] = $item;
+  }
+
+  $form['skins']['skin_select_hooks'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Theme hooks'),
+    '#description' => t('The theme_hooks this skin will apply to. !variable.', array('!variable' => l(t('Add theme_hooks'), 'admin/appearance/skinr/skin_creator_settings'))),
+    '#options' => $options,
+    '#required' => TRUE,
+    '#default_value' => array('block'),
+  );
+
+  $form['skins']['skin_options_num'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Number of options:'),
+    '#description' => t('The number of options for this skin.'),
+    '#required' => TRUE,
+    '#default_value' => '3',
+  );
+
+  $form['skins']['skin_options_machine_name'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Machine name:'),
+    '#description' => t('This name will iterate according to the number of classes.'),
+    '#required' => TRUE,
+    '#default_value' => 'Wires',
+  );
+
+  $form['skins']['skin_css'] = array(
+    '#type' => 'textfield',
+    '#title' => t('CSS File'),
+    '#description' => t('This field is where you define your CSS file.'),
+    '#default_value' => 'mycss.css',  
+  );
+  
+  $form['skins']['skin_js'] = array(
+    '#type' => 'textfield',
+    '#title' => t('JS File'),
+    '#description' => t('This field is where you define your Javascript file.'),
+  );
+
+  $form['submit'] = array('#type' => 'submit', '#value' => t('Create'));
+
+  // Prevent browser caching by adding the timestamp to the field name.
+  $form['generated' . time()] = array(
+    '#type' => 'textarea',
+    '#default_value' => isset($form_state['generated']) ? $form_state['generated'] : '',
+    '#rows' => min(isset($form_state['generated']) ? substr_count($form_state['generated'], "\n") + 1 : 10, 150),
+    '#attributes' => array('readonly' => 'readonly'),
+  );
+
+  return $form;
+}
+
+/**
+ * Export a variable.
+ *
+ * This is a replacement for var_export(), allowing us to more nicely
+ * format exports. It will recurse down into arrays and will try to
+ * properly export bools when it can, though PHP has a hard time with
+ * this since they often end up as strings or ints.
+ */
+function skin_creator_var_export($var, $prefix = '') {
+  if (is_array($var)) {
+    if (empty($var)) {
+      $output = 'array()';
+    }
+    else {
+      $numkeyed = (is_numeric(key($var)) ? TRUE : FALSE);
+      if ($numkeyed) {
+        $output = 'array(';
+      }
+      else {
+        $output = "array(\n";
+      }
+      foreach ($var as $key => $value) {
+        if (in_array($key, array('title', 'description')) && $key !== 0) {
+          $output .= $prefix . "  " . skin_creator_var_export($key) . " => t(" . skin_creator_var_export($value, $prefix . '  ') . "),\n";
+        }
+        elseif ($numkeyed) {
+          $output .= ($key == 0 ? '' : ', ') . skin_creator_var_export($value);
+        }
+        else {
+          $output .= $prefix . "  " . skin_creator_var_export($key) . " => " . skin_creator_var_export($value, $prefix . '  ') . ",\n";
+        }
+      }
+      if ($numkeyed) {
+        $output .= ')';
+      }
+      else {
+        $output .= $prefix . ')';
+      }
+    }
+  }
+  elseif (is_object($var) && get_class($var) === 'stdClass') {
+    // var_export() will export stdClass objects using an undefined
+    // magic method __set_state() leaving the export broken. This
+    // workaround avoids this by casting the object as an array for
+    // export and casting it back to an object when evaluated.
+    $output .= '(object) ' . skin_creator_var_export((array) $var);
+  }
+  elseif (is_bool($var)) {
+    $output = $var ? 'TRUE' : 'FALSE';
+  }
+  else {
+    $output = var_export($var, TRUE);
+  }
+
+  return $output;
+}
+
+
+function skin_creator_form_validate($form, &$form_state) {
+  // Invalid Plugin Name.
+  if (!preg_match('!^[a-z0-9_]+$!', $form_state['values']['plugin_name'])) {
+    form_set_error('plugin_name', t('<em>Plugin name:</em> The name must include only lowercase unaccentuated letters, numbers, and underscores.'));
+  }
+  if (strlen($form_state['values']['plugin_name']) > 32) {
+    form_set_error('plugin_name', t('<em>Plugin name:</em> the plugin name %field_name is too long. The name is limited to 32 characters.', array('%field_name' => $form_state['values']['plugin_name'])));
+  }
+
+  // Invalid Skin Name.
+  if (!preg_match('!^[a-z0-9_]+$!', $form_state['values']['skin_name'])) {
+    form_set_error('skin_name', t('<em>Plugin name:</em> The name must include only lowercase unaccentuated letters, numbers, and underscores.'));
+  }
+  if (strlen($form_state['values']['skin_name']) > 32) {
+    form_set_error('skin_name', t('<em>Skin name:</em> the skin name %field_name is too long. The name is limited to 32 characters.', array('%field_name' => $form_state['values']['plugin_skin'])));
+  }  
+    
+  // Invalid Number of options.  
+  if (!is_numeric($form_state['values']['skin_options_num'])) {
+    form_set_error('skin_options_num', t('<em>Number of options:</em> must be a valid number'));
+  }
+}
+
+
+function skin_creator_form_submit(&$form, &$form_state) {
+
+  // If a theme is checkmarked assign it a value of 1 
+  $status = array_filter($form_state['values']['status']);
+  if (!empty($status)) {
+    foreach ($status as $key => $value) {
+      $status[$key] = 1;
+    }
+  }
+
+  // All themes that have a value of 0 in the array will be removed from the array.
+  $theme_hooks = _skinr_array_strip_empty($form_state['values']['skin_select_hooks']);
+
+  // Skin variable is defined here and then later passed into the function skin_creator_var_export.
+  $skin = array(
+    'status' => $status,
+    'title' => t($form_state['values']['skin_title']),
+    'description' => t($form_state['values']['skin_description']),
+    'type' => $form_state['values']['skin_type'],
+    'theme hooks' => array_keys($theme_hooks),
+    
+    // @todo Needs: Adding of group feature.
+    
+  );
+  
+  // Adds CSS and JS attached at the Skin level.
+  if (!empty($form_state['values']['skin_css']) || !empty($form_state['values']['skin_js'])) {
+    $skin['attached'] = array();  
+    if (!empty($form_state['values']['skin_css'])) {
+      $skin['attached']['css'] = array($form_state['values']['skin_css']);
+    }
+    if (!empty($form_state['values']['skin_js'])) {
+      $skin['attached']['js'] = array($form_state['values']['skin_js']);      
+    }
+  }
+  
+  // This variable is used to change underscores to dashes for CSS Compatiblity.
+  $clean_machine_name = str_replace('_', '-', $form_state['values']['skin_options_machine_name']);
+
+  // Skin options iterated here according to the user inputted number.
+  $skin['options'] = array();  
+  for ($i = 1; $i <= $form_state['values']['skin_options_num']; $i++) {
+    $skin['options'][$form_state['values']['skin_options_machine_name'] . '_' . $i] = array(
+      'class' => array($clean_machine_name . '-' . $i),
+      'title' => t('Please modify this human readable info for ' . $form_state['values']['skin_options_machine_name'] . '-' . $i),
+    );
+  }
+
+  // Opening skin info concatenated with var_exported skin.
+  $generated_skin = skin_creator_var_export($skin, '  ');
+
+  // Opening info for a skin.
+  $generated = <<<END
+<?php
+// \$Id\$
+
+/**
+ * @file
+ * MODIFY THIS INFO TO DESCRIBE THE FILE.
+ */
+
+/**
+ * Implements hook_skinr_skin_plugin_info().
+ */
+function {$form_state['values']['source_name']}_skinr_skin_{$form_state['values']['plugin_name']}_info() {
+  \$skins['{$form_state['values']['skin_name']}'] = $generated_skin;
+return \$skins;
+}
+END;
+
+  // Pass generated back to the textarea.
+  $form_state['generated'] = $generated;
+  $form_state['rebuild'] = TRUE;
+  $form_state['cache'] = FALSE;
+}
+
+
+/**
+ * This is the code for the settings page for Skin Creator.
+ */
+function skin_creator_settings_form() {
+  $form = array();
+
+  $form['skinr_creator_add_theme_hooks'] = array(
+    '#type' => 'textarea',
+    '#title' => 'Theme hooks',
+    '#default_value' => variable_get('skinr_creator_add_theme_hooks', SKIN_CREATOR_DEFAULT_THEME_HOOKS),
+    '#description' => 'This field contains theme hooks. Enter one value per line.',
+  );
+
+  return system_settings_form($form);
+}
\ No newline at end of file

