diff --git a/fserver.drush.inc b/fserver.drush.inc
index dc75f1d..4f317e0 100644
--- a/fserver.drush.inc
+++ b/fserver.drush.inc
@@ -128,7 +128,7 @@ function _fserver_drush_get_projects() {
     $result = db_query("SELECT nid, title FROM {node} WHERE type = 'fserver_project' AND status = 1");
     while ($row = db_fetch_object($result)) {
       $node = node_load($row->nid);
-      $project = new FserverProject($node, $node->field_fserver_name[0]['value'], $node->field_fserver_method[0]['value'], $node->field_fserver_repository[0]['value']);
+      $project = new FserverProject($node, $node->field_fserver_name[0]['value'], $node->field_fserver_method[0]['value'], $node->field_fserver_repository[0]['value'], $node->field_fserver_repository_subdir[0]['value']);
       $projects[$project->name] = $project;
     }
   }
@@ -149,11 +149,12 @@ class FserverProject {
   /**
    * Constructor.
    */
-  function __construct($node, $name, $method, $repository) {
+  function __construct($node, $name, $method, $repository, $repo_subdir = '') {
     $this->node = $node;
     $this->name = $name;
     $this->method = $method;
     $this->repository = $repository;
+    $this->repo_subdir = $repo_subdir;
 
     // We try to create a backend for us to user later:
     $method_class = 'FserverProject_' . $this->method;
@@ -178,7 +179,7 @@ class FserverProject {
     $new_tags = array();
     $releases = $this->get_releases();
     foreach ($this->get_tags() as $tag_id => $tag) {
-      if (!isset($releases[$tag_id])) {
+      if (!isset($releases[$tag_id]) || $releases[$tag_id] == TRUE) {
         $new_tags[$tag_id] = $tag;
       }
     }
@@ -195,7 +196,13 @@ class FserverProject {
       while ($row = db_fetch_object($result)) {
         $node = node_load($row->nid);
         if ($node && isset($node->field_fserver_project[0]['nid']) && $node->field_fserver_project[0]['nid'] == $this->node->nid) {
-          $this->releases[fserver_generate_version($node, TRUE)] = $node;
+          $version= fserver_generate_version($node, TRUE);
+          $this->releases[$version]['node'] = $node;
+          $this->releases[$version]['dev'] = 0;
+          // mark dev versions
+          if (isset($node->field_fserver_dev_version[0]['value']) || $node->field_fserver_dev_version[0]['value'] == '1') {
+            $this->releases[$version]['dev'] = 1;
+          }
         }
       }
     }
@@ -224,36 +231,44 @@ class FserverProject {
   function create_release($tag_id) {
     $tag = $this->get_tag($tag_id);
     if ($tag && $file = $this->create_package($tag_id)) {
-      $node = new stdClass();
-      $node->type = 'fserver_release';
-      $node->status = 1;
-      $node->created = !empty($tag['timestamp']) ? $tag['timestamp'] : time();
-      $node->uid = $this->node->uid;
-      $node->title = "{$this->name} {$tag_id}";
-      $node->body = !empty($tag['message']) ? $tag['message'] : '';
-
-      $node->field_fserver_file = array(0 => (array) $file);
-      $node->field_fserver_project = array(0 => array('nid' => $this->node->nid));
-      $node->field_fserver_api = array(0 => array('value' => $tag['core']));
-      $node->field_fserver_versionmajor = array(0 => array('value' => $tag['major']));
-      $node->field_fserver_versionpatch = array(0 => array('value' => $tag['patch']));
-      $node->field_fserver_versionextra = array(0 => array('value' => $tag['extra']));
-
-      // Handle the release extra info
-      $extratype = FSERVER_EXTRATYPE_RELEASE;
-      $extranum = NULL;
-      if (!empty($tag['extra'])) {
-        $extratypes = fserver_cck_options('extratype');
-        $extratypes = array_flip($extratypes);
-        $extratype = array_key_exists($tag['extratype'], $extratypes) ? $extratypes[$tag['extratype']] : FSERVER_EXTRATYPE_OTHER;
-        $extranum = $tag['extranum'];
+      // check for dev version, only need to replace the file
+      if (isset($this->releases[$tag_id]) && $this->releases[$tag_id]['dev']) {
+        $node = node_load($this->releases[$tag_id]['node']->nid);
+        $node->field_fserver_file = array(0 => (array) $file);
       }
-      $node->field_fserver_versionextratype = array(0 => array('value' => $extratype));
-      $node->field_fserver_versionextranum = array(0 => array('value' => $extranum));
+      else {
+        $node = new stdClass();
+        $node->type = 'fserver_release';
+        $node->status = 1;
+        $node->created = !empty($tag['timestamp']) ? $tag['timestamp'] : time();
+        $node->uid = $this->node->uid;
+        $node->title = "{$this->name} {$tag_id}";
+        $node->body = !empty($tag['message']) ? $tag['message'] : '';
+
+        $node->field_fserver_file = array(0 => (array) $file);
+        $node->field_fserver_project = array(0 => array('nid' => $this->node->nid));
+        $node->field_fserver_api = array(0 => array('value' => $tag['core']));
+        $node->field_fserver_versionmajor = array(0 => array('value' => $tag['major']));
+        $node->field_fserver_versionpatch = array(0 => array('value' => $tag['patch']));
+        $node->field_fserver_versionextra = array(0 => array('value' => $tag['extra']));
+
+        // Handle the release extra info
+        $extratype = FSERVER_EXTRATYPE_RELEASE;
+        $extranum = NULL;
+        if (!empty($tag['extra'])) {
+          $extratypes = fserver_cck_options('extratype');
+          $extratypes = array_flip($extratypes);
+          $extratype = array_key_exists($tag['extratype'], $extratypes) ? $extratypes[$tag['extratype']] : FSERVER_EXTRATYPE_OTHER;
+          $extranum = $tag['extranum'];
+        }
+        $node->field_fserver_versionextratype = array(0 => array('value' => $extratype));
+        $node->field_fserver_versionextranum = array(0 => array('value' => $extranum));
 
-      // @TODO
-      $node->field_fserver_recommended = array(0 => array('value' => 1));
-      $node->field_fserver_security = array(0 => array('value' => 0));
+        // @TODO
+        $node->field_fserver_recommended = array(0 => array('value' => 1));
+        $node->field_fserver_dev_version = array(0 => array('value' => 0));
+        $node->field_fserver_security = array(0 => array('value' => 0));
+      }
       node_save($node);
     }
     return $node;
@@ -338,6 +353,8 @@ class FserverProject_git {
       _drush_shell_exec_output_set(' '); // Clear output cache.
       drush_op('drush_shell_exec', "git ls-remote --tags {$this->FserverProject->repository} | awk '{print $2;}'");
       $lines = drush_shell_exec_output();
+      drush_op('drush_shell_exec', "git ls-remote --heads {$this->FserverProject->repository} | awk '{print $2;}'");
+      $lines = array_merge($lines, drush_shell_exec_output());
       while ($line = array_shift($lines)) {
         $vc = array_pop(explode('/', $line));
         $parsed = fserver_parse_tag_name($vc);
@@ -358,7 +375,7 @@ class FserverProject_git {
 
       // Retrieve tag info
      _drush_shell_exec_output_set(' '); // Clear output cache.
-      drush_op('drush_shell_exec', "git --git-dir={$this->path}/.git log -1 --pretty=format:%ct {$vc}");
+      drush_op('drush_shell_exec', "git --git-dir={$this->path}/.git log -1 --pretty=format:%%ct {$vc}");
       $info = drush_shell_exec_output();
       $tag['timestamp'] = $info[0];
       drush_op('drush_shell_exec', "git --git-dir={$this->path}/.git tag -l {$vc} -n 1000");
@@ -384,7 +401,11 @@ class FserverProject_git {
           $vc = $tag['original'];
           drush_op('drush_shell_exec', "git --work-tree={$this->path} --git-dir={$this->path}/.git checkout {$vc}");
           $this->FserverProject->write_package_info($tag, array('.git'));
-          drush_op('drush_shell_exec', "tar -Pcf - --exclude='.git' --transform='s,{$this->path},{$this->FserverProject->name},' {$this->path} | gzip > {$file_path}/{$base}.tgz");
+          $path = $this->path;
+          if (!empty($this->FserverProject->repo_subdir)) {
+            $path .= '/' . $this->FserverProject->repo_subdir;
+          }
+          drush_op('drush_shell_exec', "tar -Pcf - --exclude='.git' --transform='s,$path,{$this->FserverProject->name},' $path | gzip > {$file_path}/{$base}.tgz");
 
           // @TODO
           // We need to properly chown and permission these directories.
diff --git a/fserver.features.content.inc b/fserver.features.content.inc
index 38994d2..358c1ba 100644
--- a/fserver.features.content.inc
+++ b/fserver.features.content.inc
@@ -112,7 +112,7 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_method',
     'type_name' => 'fserver_project',
     'display_settings' => array(
-      'weight' => '-2',
+      'weight' => '1',
       'parent' => '',
       'label' => array(
         'format' => 'hidden',
@@ -211,19 +211,20 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_redirect',
     'type_name' => 'fserver_project',
     'display_settings' => array(
+      'weight' => '3',
+      'parent' => '',
       'label' => array(
-        'format' => 'above',
-        'exclude' => 0,
+        'format' => 'inline',
       ),
-      '5' => array(
+      'teaser' => array(
         'format' => 'default',
         'exclude' => 0,
       ),
-      'teaser' => array(
+      'full' => array(
         'format' => 'default',
         'exclude' => 0,
       ),
-      'full' => array(
+      '5' => array(
         'format' => 'default',
         'exclude' => 0,
       ),
@@ -273,7 +274,7 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_repository',
     'type_name' => 'fserver_project',
     'display_settings' => array(
-      'weight' => '-1',
+      'weight' => '2',
       'parent' => '',
       'label' => array(
         'format' => 'inline',
@@ -319,12 +320,63 @@ function fserver_content_default_fields() {
     ),
   );
 
+  // Exported field: field_fserver_repository_subdir
+  $fields['fserver_project-field_fserver_repository_subdir'] = array(
+    'field_name' => 'field_fserver_repository_subdir',
+    'type_name' => 'fserver_project',
+    'display_settings' => array(
+      'weight' => '2',
+      'parent' => '',
+      'label' => array(
+        'format' => 'inline',
+      ),
+      'teaser' => array(
+        'format' => 'default',
+        'exclude' => 0,
+      ),
+      'full' => array(
+        'format' => 'default',
+        'exclude' => 0,
+      ),
+      '4' => array(
+        'format' => 'default',
+        'exclude' => 0,
+      ),
+    ),
+    'widget_active' => '1',
+    'type' => 'text',
+    'required' => '0',
+    'multiple' => '0',
+    'module' => 'text',
+    'active' => '1',
+    'text_processing' => '0',
+    'max_length' => '',
+    'allowed_values' => '',
+    'allowed_values_php' => '',
+    'widget' => array(
+      'rows' => 5,
+      'size' => '60',
+      'default_value' => array(
+        '0' => array(
+          'value' => '',
+          '_error_element' => 'default_value_widget][field_fserver_repository_subdir][0][value',
+        ),
+      ),
+      'default_value_php' => NULL,
+      'label' => 'Repo subdir',
+      'weight' => '2',
+      'description' => 'Specify the subdir for the project in the repository',
+      'type' => 'text_textfield',
+      'module' => 'text',
+    ),
+  );
+
   // Exported field: field_fserver_type
   $fields['fserver_project-field_fserver_type'] = array(
     'field_name' => 'field_fserver_type',
     'type_name' => 'fserver_project',
     'display_settings' => array(
-      'weight' => '-3',
+      'weight' => '-2',
       'parent' => '',
       'label' => array(
         'format' => 'hidden',
@@ -372,7 +424,7 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_api',
     'type_name' => 'fserver_release',
     'display_settings' => array(
-      'weight' => '-10',
+      'weight' => '-11',
       'parent' => '',
       'label' => array(
         'format' => 'hidden',
@@ -415,6 +467,54 @@ function fserver_content_default_fields() {
     ),
   );
 
+  // Exported field: field_fserver_dev_version
+  $fields['fserver_release-field_fserver_dev_version'] = array(
+    'field_name' => 'field_fserver_dev_version',
+    'type_name' => 'fserver_release',
+    'display_settings' => array(
+      'weight' => '-3',
+      'parent' => '',
+      'label' => array(
+        'format' => 'inline',
+      ),
+      'teaser' => array(
+        'format' => 'default',
+        'exclude' => 0,
+      ),
+      'full' => array(
+        'format' => 'default',
+        'exclude' => 0,
+      ),
+      '4' => array(
+        'format' => 'default',
+        'exclude' => 0,
+      ),
+    ),
+    'widget_active' => '1',
+    'type' => 'text',
+    'required' => '1',
+    'multiple' => '0',
+    'module' => 'text',
+    'active' => '1',
+    'text_processing' => '0',
+    'max_length' => '',
+    'allowed_values' => '',
+    'allowed_values_php' => 'return fserver_cck_options(\'dev_version\');',
+    'widget' => array(
+      'default_value' => array(
+        '0' => array(
+          'value' => NULL,
+        ),
+      ),
+      'default_value_php' => NULL,
+      'label' => 'Dev version',
+      'weight' => '-3',
+      'description' => '',
+      'type' => 'optionwidgets_onoff',
+      'module' => 'optionwidgets',
+    ),
+  );
+
   // Exported field: field_fserver_file
   $fields['fserver_release-field_fserver_file'] = array(
     'field_name' => 'field_fserver_file',
@@ -466,7 +566,7 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_project',
     'type_name' => 'fserver_release',
     'display_settings' => array(
-      'weight' => '-11',
+      'weight' => '-12',
       'parent' => '',
       'label' => array(
         'format' => 'hidden',
@@ -530,7 +630,7 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_recommended',
     'type_name' => 'fserver_release',
     'display_settings' => array(
-      'weight' => '-6',
+      'weight' => '-5',
       'parent' => '',
       'label' => array(
         'format' => 'hidden',
@@ -578,7 +678,7 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_security',
     'type_name' => 'fserver_release',
     'display_settings' => array(
-      'weight' => '-5',
+      'weight' => '-4',
       'parent' => '',
       'label' => array(
         'format' => 'hidden',
@@ -626,7 +726,7 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_versionextra',
     'type_name' => 'fserver_release',
     'display_settings' => array(
-      'weight' => '-7',
+      'weight' => '-8',
       'parent' => '',
       'label' => array(
         'format' => 'hidden',
@@ -677,9 +777,10 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_versionextranum',
     'type_name' => 'fserver_release',
     'display_settings' => array(
+      'weight' => '-6',
+      'parent' => '',
       'label' => array(
-        'format' => 'above',
-        'exclude' => 0,
+        'format' => 'inline',
       ),
       'teaser' => array(
         'format' => 'default',
@@ -730,9 +831,10 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_versionextratype',
     'type_name' => 'fserver_release',
     'display_settings' => array(
+      'weight' => '-7',
+      'parent' => '',
       'label' => array(
-        'format' => 'above',
-        'exclude' => 0,
+        'format' => 'inline',
       ),
       'teaser' => array(
         'format' => 'default',
@@ -783,7 +885,7 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_versionmajor',
     'type_name' => 'fserver_release',
     'display_settings' => array(
-      'weight' => '-9',
+      'weight' => '-10',
       'parent' => '',
       'label' => array(
         'format' => 'hidden',
@@ -833,7 +935,7 @@ function fserver_content_default_fields() {
     'field_name' => 'field_fserver_versionpatch',
     'type_name' => 'fserver_release',
     'display_settings' => array(
-      'weight' => '-8',
+      'weight' => '-9',
       'parent' => '',
       'label' => array(
         'format' => 'hidden',
@@ -852,15 +954,13 @@ function fserver_content_default_fields() {
       ),
     ),
     'widget_active' => '1',
-    'type' => 'number_integer',
+    'type' => 'text',
     'required' => '1',
     'multiple' => '0',
-    'module' => 'number',
+    'module' => 'text',
     'active' => '1',
-    'prefix' => '',
-    'suffix' => '',
-    'min' => '0',
-    'max' => '50',
+    'text_processing' => '',
+    'max_length' => '',
     'allowed_values' => '',
     'allowed_values_php' => 'return fserver_cck_options(\'patch\');',
     'widget' => array(
@@ -873,14 +973,15 @@ function fserver_content_default_fields() {
       'label' => 'Patch version',
       'weight' => '-9',
       'description' => '',
-      'type' => 'optionwidgets_select',
-      'module' => 'optionwidgets',
+      'type' => 'text_textfield',
+      'module' => 'text',
     ),
   );
 
   // Translatables
   // Included for use with string extractors like potx.
   t('Core compatibility');
+  t('Dev version');
   t('Drush Make Script');
   t('Extra version');
   t('Extra version number');
@@ -893,6 +994,7 @@ function fserver_content_default_fields() {
   t('Project');
   t('Recommended');
   t('Redirect URL (for legacy projects)');
+  t('Repo subdir');
   t('Repository URL');
   t('Security release');
   t('Type');
diff --git a/fserver.info b/fserver.info
index b6b4f26..2d0bee0 100644
--- a/fserver.info
+++ b/fserver.info
@@ -16,8 +16,10 @@ features[content][] = "fserver_project-field_fserver_method"
 features[content][] = "fserver_project-field_fserver_name"
 features[content][] = "fserver_project-field_fserver_redirect"
 features[content][] = "fserver_project-field_fserver_repository"
+features[content][] = "fserver_project-field_fserver_repository_subdir"
 features[content][] = "fserver_project-field_fserver_type"
 features[content][] = "fserver_release-field_fserver_api"
+features[content][] = "fserver_release-field_fserver_dev_version"
 features[content][] = "fserver_release-field_fserver_file"
 features[content][] = "fserver_release-field_fserver_project"
 features[content][] = "fserver_release-field_fserver_recommended"
@@ -36,6 +38,8 @@ features[node][] = "fserver_project"
 features[node][] = "fserver_release"
 features[variable][] = "content_extra_weights_fserver_project"
 features[variable][] = "content_extra_weights_fserver_release"
+features[variable][] = "node_options_fserver_release"
+features[variable][] = "upload_fserver_release"
 features[views][] = "fserver_projects"
 features[views][] = "fserver_release_lookup"
 features[views][] = "fserver_releases"
diff --git a/fserver.module b/fserver.module
index 417a981..d990459 100644
--- a/fserver.module
+++ b/fserver.module
@@ -120,10 +120,14 @@ function fserver_cck_options($type = 'core') {
       break;
     case 'patch':
       $result = range(0, 50);
+      $result['x'] = 'x';
       break;
     case 'recommended':
       $result =  array(t('Not recommended'), t('Recommended'));
       break;
+    case 'dev_version':
+      $result =  array(t('Normal version'), t('Development version'));
+      break;
     case 'security':
       $result =  array(t('Not a security release'), t('Security release'));
       break;
@@ -166,7 +170,7 @@ function fserver_cck_options($type = 'core') {
  */
 function fserver_parse_package_name($package_filename) {
   // example: fserver-6.x-2.0-rc3.tar.gz
-  if (preg_match('/^(?<project>\w+)-(?<core>\d+\.x)-(?<major>\d+)\.(?<patch>\d+)-?(?<extra>\w+)?\.(tar\.gz|tgz)$/', $package_filename, $matches)) {
+  if (preg_match('/^(?<project>\w+)-(?<core>\d+\.x)-(?<major>\d+)\.(?<patch>[\d|x]+)-?(?<extra>\w+)?\.(tar\.gz|tgz)$/', $package_filename, $matches)) {
     if (!empty($matches['extra']) && preg_match('/^(?P<extratype>[A-Za-z]+)(?P<extranum>\d+)?$/', $matches['extra'], $extra_matches)) {
       $matches = array_merge($matches, array_intersect_key($extra_matches, array('extratype' => '', 'extranum' => '')));
     }
@@ -181,10 +185,9 @@ function fserver_parse_package_name($package_filename) {
  * Supports CVS style drupal tags (drupal-6--1-0-alpha1) as well as git style tags (7.x-1.0-alpha1).
  */
 function fserver_parse_tag_name($tag) {
-
   $regex = (stripos($tag, 'drupal-') === 0)
               ? '/^(?P<project>\w+)-(?P<core>\d+)--(?P<major>\d+)-(?P<patch>\d+)-?(?P<extra>\w+)?$/'
-              : '/^(?P<core>\d+)\.x-(?P<major>\d+)\.(?P<patch>\d+)-?(?P<extra>\w+)?$/';
+              : '/^(?P<core>\d+)\.x-(?P<major>\d+)\.(?P<patch>[\d|x]+)-?(?P<extra>\w+)?$/';
 
   if (preg_match($regex, $tag, $matches)) {
     $parsed = array_intersect_key($matches, array('core' => '', 'major' => '', 'patch' => '', 'extra' => ''));
diff --git a/fserver.strongarm.inc b/fserver.strongarm.inc
index 37dea13..0dc84fa 100644
--- a/fserver.strongarm.inc
+++ b/fserver.strongarm.inc
@@ -11,11 +11,15 @@ function fserver_strongarm() {
   $strongarm->name = 'content_extra_weights_fserver_project';
   $strongarm->value = array(
     'title' => '-5',
-    'body_field' => '8',
-    'revision_information' => '10',
-    'menu' => '0',
-    'book' => '9',
-    'attachments' => '13',
+    'body_field' => '4',
+    'revision_information' => '5',
+    'author' => '7',
+    'options' => '8',
+    'comment_settings' => '10',
+    'menu' => '-1',
+    'taxonomy' => '-3',
+    'path' => '9',
+    'attachments' => '6',
   );
 
   $export['content_extra_weights_fserver_project'] = $strongarm;
@@ -24,15 +28,33 @@ function fserver_strongarm() {
   $strongarm->api_version = 1;
   $strongarm->name = 'content_extra_weights_fserver_release';
   $strongarm->value = array(
-    'title' => '-3',
-    'body_field' => '-1',
-    'revision_information' => '1',
-    'author' => '0',
-    'options' => '2',
-    'menu' => '-2',
-    'path' => '3',
+    'title' => '-2',
+    'body_field' => '0',
+    'revision_information' => '2',
+    'author' => '1',
+    'options' => '3',
+    'comment_settings' => '6',
+    'menu' => '-1',
+    'path' => '4',
+    'attachments' => '5',
   );
 
   $export['content_extra_weights_fserver_release'] = $strongarm;
+  $strongarm = new stdClass;
+  $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
+  $strongarm->api_version = 1;
+  $strongarm->name = 'node_options_fserver_release';
+  $strongarm->value = array(
+    0 => 'status',
+  );
+
+  $export['node_options_fserver_release'] = $strongarm;
+  $strongarm = new stdClass;
+  $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
+  $strongarm->api_version = 1;
+  $strongarm->name = 'upload_fserver_release';
+  $strongarm->value = '1';
+
+  $export['upload_fserver_release'] = $strongarm;
   return $export;
 }
