diff --git a/skinr_converter/skinr_converter.info b/skinr_converter/skinr_converter.info
new file mode 100644
index 0000000000000000000000000000000000000000..3666f13890b8a72a07559e162435024d76fa252b
--- /dev/null
+++ b/skinr_converter/skinr_converter.info
@@ -0,0 +1,6 @@
+name = Skinr Converter
+description = "Provides tools to convert skins from drupal 6 to 7."
+core = 7.x
+package = Skinr
+dependencies[] = skinr
+dependencies[] = skinr_ui
\ No newline at end of file
diff --git a/skinr_converter/skinr_converter.module b/skinr_converter/skinr_converter.module
new file mode 100644
index 0000000000000000000000000000000000000000..196ef1fd0ff0a440d39381ab408e8e9a005147e9
--- /dev/null
+++ b/skinr_converter/skinr_converter.module
@@ -0,0 +1,480 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * This is the main nodule file for Skinr Converter.
+ */
+define('SKINR_CONVERTER_DEFAULT_PATH', 'sites/all/files/skin_conversion');
+
+/**
+ * Implementation of hook_menu().
+ */
+function skinr_converter_menu() {
+  // Skin Converter Page.
+  $items['admin/structure/skinr/skinr_converter'] = array(
+    'title' => 'Converter',
+    'description' => 'Use to convert Skins',
+    'access arguments' => array('administer skinr'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('skinr_converter_form'),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => '5',
+  );
+  
+  return $items;
+}
+
+/**
+ * Implements hook_help().
+ */
+function skinr_creator_help($path, $arg) {
+  switch ($path) {
+    case 'admin/structure/skinr/skinr_converter':
+      return t('Use this page to convert and export a skin to a compressed tar file. Uncompress the file to your theme in folder called skins.', array('@skinr-help' => url('admin/advanced_help/skinr')));
+      break;
+  }
+}
+
+/**
+ * Read in the skins from a folder. 
+ */
+function skinr_converter_form($form) {
+  // $infos runs ...parse_info_files function and generates an array for each
+  // theme.  key = theme_name & value = array(theme_info)
+  $infos = skinr_converter_parse_info_files();
+
+  // $options is an array whose values come from looping through the $infos
+  // and setting $options' keys to the theme_names and its values name.
+  $options = array();  
+  foreach($infos as $name => $info){
+    if(isset($info['skinr'])){
+      $options[$name] = $info['name'];
+    }
+  }
+  asort($options);
+
+  $form = array();
+  $form['files'] = array(
+    '#type' => 'radios',
+    '#title' => t('Theme'),
+    '#description' => t('Select the theme to create a skin for.  Only .info files with valid skin configurations will be listed.'),
+    '#options' => $options,
+    '#required' => TRUE,
+  );
+  $form['submit'] = array('#type' => 'submit', '#value' => t('Convert'));
+
+  return $form;
+}
+
+/**
+ * Parse .info files.
+ */
+function skinr_converter_parse_info_files() {
+  // This variable calls a system function that reads in the .info files.
+  // $files is an array whose values are classes containing URI, filename, and
+  // the name of the .info files
+  $files = drupal_system_listing("/\.info$/", DRUPAL_ROOT . '/' . variable_get('skin_creator_path', SKINR_CONVERTER_DEFAULT_PATH), 'name', 0);
+
+  $info = array();
+  foreach($files as $name => $file) {
+    $info[$name] = drupal_parse_info_file($file->uri);
+    $info[$name]['filepath'] = $file->uri;
+  }
+  // $info is an array whose keys are the machine names of the themes and the
+  // values are arrays from the parse containing the info of each theme.
+  return $info;
+}
+
+/**
+ * Processes to be run after convert is clicked.  Takes parsed files and packs
+ * them in .tar file.
+ */
+function skinr_converter_form_submit($form, &$form_state, $converted = NULL) {
+  // $infos is an array whose keys are the machine names of the themes and the 
+  // values are arrays from the parse containing the info of each theme.
+  $infos = skinr_converter_parse_info_files();
+  
+  if (!empty($form_state['values']['files'])) {
+    $theme_name = $form_state['values']['files'];
+    $data = skinr_converter_convert_info($theme_name, $infos[$theme_name]['skinr']);
+    if ($data !== FALSE) {
+      $files = skinr_converter_get_files($data['skins']);
+      $converted = skinr_converter_skin_plugin_generate($theme_name, $data['groups'], $data['skins']);
+      skinr_creator_make_file($theme_name, $converted, $files);
+    }
+  }
+$form_state['rebuild'] = TRUE;
+}
+
+/**
+ * Traverses arrays to find the attached files for JS and CSS.
+ */
+function skinr_converter_get_files($skins) {
+  $files = array();
+
+  foreach ($skins as $skin) {
+    if (!empty($skin['attached'])) {
+      foreach ($skin['attached'] as $type => $entries) {
+        if ($type == 'css' || $type == 'js') {
+          foreach ($entries as $entry) {
+            if (is_array($entry)) {
+              $files[] = $entry[0];
+            }
+            else {
+              $files[] = $entry;
+            }
+          }
+        }
+      }
+    }
+    foreach ($skin['options'] as $option) {
+      if (!empty($option['attached'])) {
+        foreach ($option['attached'] as $type => $entries) {
+          if ($type == 'css' || $type == 'js') {
+            foreach ($entries as $entry) {
+              if (is_array($entry)) {
+                $files[] = $entry[0];
+              }
+              else {
+                $files[] = $entry;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  $files = array_unique($files);
+  return $files;
+}
+
+/**
+ * Convert the array from the 6.x .info file to a php skin.
+ */
+function skinr_converter_convert_info($theme_name, $info) {
+  $error = FALSE;
+  $skins = array();
+  $groups = array();
+
+  foreach ($info as $skin_name => $old_skin) {
+
+    if (!is_array($old_skin)) {
+      continue;
+    }
+
+    if ($skin_name == 'options'){
+			if (!empty($old_skin['groups'])) {
+	      foreach ($old_skin['groups'] as $group_name => $old_group) {
+	        $group = array(
+	          'title' => $old_group['title'],
+	          'description' => 'Please enter a description for this group.',
+	        );
+	        $groups[$group_name] = $group;
+	      }
+			}
+      continue;
+    }
+
+    $skin = array();
+
+    if (empty($old_skin['title'])) {
+      $error = TRUE;
+      drupal_set_message(t('Title for skin %skin_name is required.', array('%skin_name' => $skin_name)), 'warning');
+    }
+    else {
+      $skin['title'] = $old_skin['title'];
+    }
+  
+    if (!empty($old_skin['description'])) {
+      $skin['description'] = $old_skin['description'];
+    }
+    
+    if (!empty($old_skin['select'])){
+      $skin['type'] = $old_skin['select'];
+    }
+    
+    if (!empty($old_skin['features'])){
+      $skin['theme hooks'] = $old_skin['features'];
+    }
+    
+    if (!empty($old_skin['group'])){
+      $skin['group'] = $old_skin['group'];
+    }
+
+    if (!empty($old_skin['stylesheets']) || !empty($old_skin['scripts'])) {
+      $attached = array();
+      if (!empty($old_skin['stylesheets'])) {
+        $attached['css'] = array();
+        foreach ($old_skin['stylesheets'] as $css_key => $paths) {
+          if ($css_key == 'all') {
+            $attached['css'] += $old_skin['stylesheets'][$css_key];
+          }
+          else {
+            foreach ($paths as $path) {
+              $attached['css'][] = array($path, array('media' => $css_key));
+            }
+          }
+        }
+      }
+      // This is working but not for the proper level
+      if (!empty($old_skin['scripts'])) {
+        $attached['js'] = $old_skin['scripts'];
+      }
+      $skin['attached'] = $attached;
+    }
+
+    $skin['default status'] = 0;
+    $skin['status'] = array($theme_name => 1);
+    
+    if (!empty($old_skin['weight'])) {
+      $skin['weight'] = $old_skin['weight'];
+    }
+    
+    if (empty($old_skin['options'])){
+      $error = TRUE;
+      drupal_set_message(t('Options for skin %skin_name are required.', array('%skin_name' => $skin_name)), 'warning');      
+    } 
+    else {
+      $skin['options'] = array();
+      
+      foreach ($old_skin['options'] as $option_key => $option) {
+        $skin['options'][$skin_name . '_' . $option_key] = array(
+          'title' => $option['label'],
+          'class' => $option['class'],
+        );
+
+        if (!empty($option['stylesheets']) || !empty($option['scripts'])) {
+          $attached = array();
+          if (!empty($option['stylesheets'])) {
+            $attached['css'] = array();
+            foreach ($option['stylesheets'] as $css_key => $paths) {
+              if ($css_key == 'all') {
+                $attached['css'] += $option['stylesheets'][$css_key];
+              }
+              else {
+                foreach ($paths as $path) {
+                  $attached['css'][] = array($path, array('media' => $css_key));
+                }
+              }
+            }
+          }
+          if (!empty($option['scripts'])) {
+            $attached['js'] = $option['scripts'];
+          }
+          $skin['options'][$skin_name . '_' . $option_key]['attached'] = $attached;
+        }
+      }
+    }
+    $skins[$skin_name] = $skin;
+  }
+
+  if ($error) { 
+    return FALSE;
+  }
+  else {
+    return array('groups' => $groups, 'skins' => $skins);
+  }
+}
+
+/**
+ * Adds the opening PHP tag, DOXYGEN Info, hook info and runs skinr_var_export
+ * creating a properly formatted string.
+ */
+function skinr_converter_skin_plugin_generate($theme_name, $groups, $skins) {
+  $group_output = '';
+  foreach ($groups as $name => $group) {
+    $group_output .= "  \$groups['{$name}'] = " . skinr_creator_var_export($group, '  ') . ";\n\n";
+  }
+
+  $skin_output = '';
+  foreach ($skins as $name => $skin) {
+    $skin_output .= "  \$skins['{$name}'] = " . skinr_creator_var_export($skin, '  ') . ";\n\n";
+  }
+
+  $converted = <<<END
+<?php
+
+/**
+* @file
+* MODIFY THIS INFO TO DESCRIBE THE FILE.
+*/
+
+/**
+* Implements hook_skinr_group_plugin_info().
+*/
+function {$theme_name}_skinr_group_{$theme_name}_info() {
+{$group_output}  return \$groups;
+}
+
+/**
+* Implements hook_skinr_skin_plugin_info().
+*/
+function {$theme_name}_skinr_skin_{$theme_name}_info() {
+{$skin_output}  return \$skins;
+}
+END;
+
+  return $converted;
+}
+
+/**
+ * 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 skinr_creator_var_export($var, $prefix = '', $force_newline = FALSE) {
+
+  if (is_array($var)) {
+    if (empty($var)) {
+      $output = 'array()';
+    }
+    else {
+      $numkeyed = is_numeric(key($var));
+      // This only appears in attached.
+      $inline = (key($var) == 'media');
+      if (!$force_newline && ($numkeyed || $inline)) {
+        $output = 'array(';
+      }
+      else {
+        $output = "array(\n";
+      }
+      $counter = 0;
+      foreach ($var as $key => $value) {
+        if (in_array($key, array('title', 'description')) && $key !== 0) {
+
+          $output .= $prefix . "  " . skinr_creator_var_export($key) . " => t(" . skinr_creator_var_export($value, $prefix . '  ') . "),\n";
+        }
+        elseif ($numkeyed && $force_newline) {
+          $output .= $prefix . "  " . skinr_creator_var_export($value) . ",\n";
+        }
+        elseif ($numkeyed) {
+          $output .= ($key == 0 ? '' : ', ') . skinr_creator_var_export($value);
+        }
+        elseif ($inline) {
+          $output .= ($counter == 0 ? '' : ', ') . skinr_creator_var_export($key) . " => " . skinr_creator_var_export($value);
+        }
+        else {
+          $next_newline =  (in_array($key, array('css', 'js')) && is_array($value) && count($value) > 1);
+          $output .= $prefix . "  " . skinr_creator_var_export($key) . " => " . skinr_creator_var_export($value, $prefix . '  ', $next_newline) . ",\n";
+        }
+        $counter++;
+      }
+      if (!$force_newline && ($numkeyed || $inline)) {
+        $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) ' . skinr_creator_var_export((array) $var);
+  }
+  elseif (is_bool($var)) {
+    $output = $var ? 'TRUE' : 'FALSE';
+  }
+  else {
+    $output = var_export($var, TRUE);
+  }
+
+  return $output;
+}
+
+/**
+ * This function is used to gather the files that will be passed to the
+ * function skinr_creator_tar_create.
+ */
+function skinr_creator_make_file($theme_name, $skins, $files){
+  if (!empty($skins)) {
+    // Clear out output buffer to remove any garbage from tar output.
+    if (ob_get_level()) {
+      ob_end_clean();
+    }
+
+    $infos = skinr_converter_parse_info_files();
+    $theme_path = dirname($infos[$theme_name]['filepath']);
+
+    drupal_add_http_header('Content-type', 'application/x-tar');
+    drupal_add_http_header('Content-Disposition', 'attachment; filename="'. $theme_name . '.tar' .'"');
+    drupal_send_headers();
+
+    $extension = 'inc';
+    $path = $theme_name;
+    print skinr_creator_tar_create("$path/$theme_name.$extension", $skins);
+
+    foreach ($files as $file) {
+    dpm($file);
+      $contents = @file_get_contents($theme_path . '/' . $file);
+        if ($contents === FALSE) {
+          drupal_set_message(t('This is a problem file: %file', array('%file' => $file)), 'warning');
+        }
+        if (empty($contents)) {
+          $contents = "/*\n * This file was empty or did not exist.\n */\n";
+        }
+
+      print skinr_creator_tar_create("$path/$file", $contents);
+      unset($contents);
+    }
+
+    // Adds 1024 byte footer at the end of the tar file.
+    print pack("a1024","");
+  }
+}
+
+/**
+ * Tar creation function. Written by dmitrig01.
+ *
+ * @param $name
+ *   Filename of the file to be tarred.
+ * @param $contents
+ *   String contents of the file.
+ *
+ * @return
+ *   A string of the tar file contents.
+ *
+ * @todo If $contents is an empty string, the tar file will not be generated
+ *   properly.
+ */
+function skinr_creator_tar_create($name, $contents) {
+
+  $tar = '';
+  $binary_data_first = pack("a100a8a8a8a12A12",
+    $name,
+    '100644 ', // File permissions
+    '   765 ', // UID,
+    '   765 ', // GID,
+    sprintf("%11s ", decoct(strlen($contents))), // Filesize,
+    sprintf("%11s", decoct(REQUEST_TIME)) // Creation time
+  );
+  $binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", '', '', 'ustar ', ' ', '', '', '', '', '', '');
+
+  $checksum = 0;
+  for ($i = 0; $i < 148; $i++) {
+    $checksum += ord(substr($binary_data_first, $i, 1));
+  }
+  for ($i = 148; $i < 156; $i++) {
+    $checksum += ord(' ');
+  }
+  for ($i = 156, $j = 0; $i < 512; $i++, $j++) {
+    $checksum += ord(substr($binary_data_last, $j, 1));
+  }
+
+  $tar .= $binary_data_first;
+  $tar .= pack("a8", sprintf("%06s ", decoct($checksum)));
+  $tar .= $binary_data_last;
+
+  $buffer = str_split($contents, 512);
+  foreach ($buffer as $item) {
+    $tar .= pack("a512", $item);
+  }
+  return $tar;
+}
\ No newline at end of file
