diff --git project.inc project.inc
index 94b5b57..d9d6c98 100644
--- project.inc
+++ project.inc
@@ -129,6 +129,19 @@ function project_project_form($node, $form_state) {
   // concerned, but the value shows up in the $node->project array for
   // validation and submission as far as FAPI is concerned.
   $form['project_node']['project'] = array('#tree' => TRUE);
+
+  $sandbox_value = isset($node->project['sandbox']) ? $node->project['sandbox'] : variable_get('project_sandbox_default', FALSE);
+  $form['project_node']['project']['sandbox'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Sandbox'),
+    '#default_value' => $sandbox_value,
+    '#description' => t(''),
+  );
+  // User is not allowed to alter the sandbox status
+  if (variable_get('project_sandbox_permission', FALSE) && !user_access('administer projects')) {
+    $form['project_node']['project']['sandbox']['#disabled'] = TRUE;
+  }
+
   $form['project_node']['project']['uri'] = array(
     '#type' => 'textfield',
     '#title' => t('Short project name'),
@@ -136,7 +149,6 @@ function project_project_form($node, $form_state) {
     '#size' => 40,
     '#maxlength' => 50,
     '#description' => (variable_get('project_enable_alias', TRUE)) ? t('This will be used to generate a /project/&lt;shortname&gt;/ URL for your project.') : '',
-    '#required' => TRUE,
   );
   // Updating of the uri has been disabled.
   if (!variable_get('project_allow_uri_update', TRUE)) {
@@ -155,6 +167,19 @@ function project_project_form($node, $form_state) {
     }
   }
 
+  // Auto generate shortname for sandboxes, so disable the form, or simply list
+  // the value if present
+  if (variable_get('project_sandbox_numeric_uri', FALSE) && $sandbox_value) {
+    if (empty($node->nid)) {
+      $form['project_node']['project']['uri']['#disabled'] = TRUE;
+    }
+    else {
+      // @TODO, would be nice if this was just a disabled item, so that the js could toggle this when the sandbox is checked off
+      $form['project_node']['project']['uri']['#disabled'] = TRUE;
+    }
+  }
+  drupal_add_js(array('project' => array('project_sandbox_numeric_uri' => variable_get('project_sandbox_numeric_uri', FALSE))), 'setting');
+
   $form['project_node']['body_field'] = node_body_field($node, t('Full description'), 1);
 
   $form['project'] = array(
@@ -245,7 +270,12 @@ function project_project_validate(&$node) {
 
   // Validate uri.
   if (empty($node->project['uri'])) {
-    form_set_error('project][uri', t('A short project name is required.'));
+    if (variable_get('project_sandbox_numeric_uri', FALSE) && $node->project['sandbox']) {
+      $node->project['uri'] = '';
+    }
+    else {
+      form_set_error('project][uri', t('A short project name is required.'));
+    }
   }
   else {
     // Make sure uri only includes valid characters
@@ -427,14 +457,20 @@ function project_project_nodeapi(&$node, $op, $arg) {
 }
 
 function project_project_insert($node) {
-  db_query("INSERT INTO {project_projects} (nid, uri, homepage, changelog, cvs, demo, screenshots, documentation, license) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", $node->nid, $node->project['uri'], $node->project['homepage'], $node->project['changelog'], $node->project['cvs'], $node->project['demo'], $node->project['screenshots'], $node->project['documentation'], $node->project['license']);
+  if (variable_get('project_sandbox_numeric_uri', FALSE) && $node->project['sandbox']) {
+    $node->project['uri'] = $node->nid;
+  }
+  db_query("INSERT INTO {project_projects} (nid, uri, homepage, changelog, cvs, demo, screenshots, documentation, license, sandbox) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)", $node->nid, $node->project['uri'], $node->project['homepage'], $node->project['changelog'], $node->project['cvs'], $node->project['demo'], $node->project['screenshots'], $node->project['documentation'], $node->project['license'], $node->project['sandbox']);
 //  project_release_scan_directory($node->project['uri']);
   $perms = array_fill_keys(array_keys(project_permission_load()), 1);
   project_maintainer_save($node->nid, $node->uid, $perms);
 }
 
 function project_project_update($node) {
-  db_query("UPDATE {project_projects} SET uri = '%s', homepage = '%s', changelog = '%s', cvs = '%s', demo = '%s', screenshots = '%s', documentation = '%s', license = '%s' WHERE nid = %d", $node->project['uri'], $node->project['homepage'], $node->project['changelog'], $node->project['cvs'], $node->project['demo'], $node->project['screenshots'], $node->project['documentation'], $node->project['license'], $node->nid);
+  if (variable_get('project_sandbox_numeric_uri', FALSE) && $node->project['sandbox']) {
+    $node->project['uri'] = $node->nid;
+  }
+  db_query("UPDATE {project_projects} SET uri = '%s', homepage = '%s', changelog = '%s', cvs = '%s', demo = '%s', screenshots = '%s', documentation = '%s', license = '%s', sandbox = %d WHERE nid = %d", $node->project['uri'], $node->project['homepage'], $node->project['changelog'], $node->project['cvs'], $node->project['demo'], $node->project['screenshots'], $node->project['documentation'], $node->project['license'], $node->project['sandbox'], $node->nid);
 //  project_release_scan_directory($node->project['uri']);
   $perms = array_fill_keys(array_keys(project_permission_load()), 1);
   project_maintainer_save($node->nid, $node->uid, $perms);
diff --git project.install project.install
index 45c5eaa..2f10d28 100644
--- project.install
+++ project.install
@@ -98,6 +98,12 @@ function project_schema() {
         'not null' => TRUE,
         'default' => '',
       ),
+      'sandbox' => array(
+        'description' => 'Indicate whether or not this project is sandboxed.',
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
     ),
     'primary key' => array('nid'),
     'indexes' => array(
@@ -227,3 +233,20 @@ function project_update_6002() {
 
   return $ret;
 }
+
+/**
+ * Add {project_projects}.sandbox column.
+ */
+function project_update_6003() {
+  $ret = array();
+
+  $field = array(
+    'description' => 'Indicate whether or not this project is sandboxed.',
+    'type' => 'int',
+    'not null' => TRUE,
+    'default' => 0,
+  );
+  db_add_field($ret, 'project_projects', 'sandbox', $field);
+
+  return $ret;
+}
diff --git project.js project.js
index 6660a48..9824aca 100644
--- project.js
+++ project.js
@@ -41,3 +41,29 @@ Drupal.projectSetTaxonomy = function (tid) {
     }
   });
 }
+
+Drupal.behaviors.projectSandboxShortname = function (context) {
+  if (Drupal.settings.project.project_sandbox_numeric_uri) {
+    $('div#edit-project-sandbox-wrapper input:not(.projectSandboxShortname-processed)', context).addClass('projectSandboxShortname-processed').each(function() {
+      $(this).click(function () {
+        if (this.checked) {
+          $('input#edit-project-uri').attr('disabled', 'disabled');
+          $('div#edit-project-uri-wrapper label span.form-required').hide();
+        }
+        else {
+          $('input#edit-project-uri').attr('disabled', false);
+          $('div#edit-project-uri-wrapper label span.form-required').show();
+        }
+      });
+    });
+    Drupal.projectMarkUriRequired();
+    if (!this.checked) {
+      $('div#edit-project-uri-wrapper label span.form-required').hide();
+    }
+  }
+}
+
+Drupal.projectMarkUriRequired = function() {
+  var required = Drupal.t('This field is required.')
+  $('div#edit-project-uri-wrapper label').append('<span title="' + required + '" class="form-required">*</span>');
+}
diff --git project.module project.module
index c548364..b12f07a 100644
--- project.module
+++ project.module
@@ -350,6 +350,32 @@ function project_settings_form() {
       '#default_value' => variable_get('project_solr_project_release_api_tids_alias', 'drupal_core'),
     );
   }
+
+  $form['sandbox'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Sandbox settings'),
+    '#collapsible' => TRUE,
+  );
+  $form['sandbox']['project_sandbox_default'] = array(
+    '#title' => t('Create new projects as sandboxes'),
+    '#type' => 'checkbox',
+    '#default_value' => variable_get('project_sandbox_default', FALSE),
+    '#description' => t('If checked, new projects will automatically be marked as sandboxes.'),
+  );
+  $form['sandbox']['project_sandbox_permission'] = array(
+    '#title' => t("Require 'administer projects' permission to change sandbox status"),
+    '#type' => 'checkbox',
+    '#default_value' => variable_get('project_sandbox_permission', FALSE),
+    '#description' => t("If checked, users will not be able to alter the sandbox status unless they have been assigned the 'administer projects' permission."),
+  );
+  $form['sandbox']['project_sandbox_numeric_uri'] = array(
+    '#title' => t('Auto generate short name for sandboxes.'),
+    '#type' => 'checkbox',
+    '#default_value' => variable_get('project_sandbox_numeric_uri', FALSE),
+    '#description' => t('If checked, projects marked as sandboxes will be have their shortname automatically generated.'),
+  );
+
+
   return system_settings_form($form);
 }
 
diff --git release/includes/project_edit_releases.inc release/includes/project_edit_releases.inc
index 9824b04..c984147 100644
--- release/includes/project_edit_releases.inc
+++ release/includes/project_edit_releases.inc
@@ -46,25 +46,35 @@ function project_release_project_edit_form($form_state, $node) {
     '#weight' => 5,
   );
 
-  $form['advanced']['releases'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Enable releases'),
-    '#return_value' => 1,
-    '#weight' => -10,
-    '#default_value' => isset($node->project_release['releases']) ? $node->project_release['releases'] : 1,
-    '#description' => t('Allow releases of this project with specific versions.'),
-  );
-
-  if (user_access('administer projects')) {
-    $form['advanced']['version_format'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Version format string'),
-      '#default_value' => $node->project_release['version_format'],
-      '#size' => 50,
-      '#maxlength' => 255,
-      '#description' => t('Customize the format of the version strings for releases of this project.') .' '. PROJECT_RELEASE_VERSION_FORMAT_HELP .' '. t('If blank, this project will use the site-wide default (currently set to: %default)', array('%default' => variable_get('project_release_default_version_format', PROJECT_RELEASE_DEFAULT_VERSION_FORMAT))),
+  if (variable_get('project_release_sandbox_disable_releases', FALSE) && $node->project['sandbox']) {
+    $form['advanced']['releases'] = array(
+      '#type' => 'markup',
+      // @TODO Make this message configurable for info on how to move a project from sandbox status?
+      '#value' => t('Project releases are not permitted for sandboxed projects.'),
     );
   }
+  else {
+    $form['advanced']['releases'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Enable releases'),
+      '#return_value' => 1,
+      '#weight' => -10,
+      '#default_value' => isset($node->project_release['releases']) ? $node->project_release['releases'] : 1,
+      '#description' => t('Allow releases of this project with specific versions.'),
+    );
+    if (user_access('administer projects')) {
+      $form['advanced']['version_format'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Version format string'),
+        '#default_value' => $node->project_release['version_format'],
+        '#size' => 50,
+        '#maxlength' => 255,
+        '#description' => t('Customize the format of the version strings for releases of this project.') .' '. PROJECT_RELEASE_VERSION_FORMAT_HELP .' '. t('If blank, this project will use the site-wide default (currently set to: %default)', array('%default' => variable_get('project_release_default_version_format', PROJECT_RELEASE_DEFAULT_VERSION_FORMAT))),
+      );
+    }
+  }
+
+
 
   $form['nid'] = array('#type' => 'value', '#value' => $node->nid);
   $form['submit'] = array(
diff --git release/project_release.module release/project_release.module
index c5bfcaa..80f7d20 100644
--- release/project_release.module
+++ release/project_release.module
@@ -801,6 +801,9 @@ function project_release_form_alter(&$form, &$form_state, $form_id) {
   if ($form_id == 'project_release_node_form') {
     return project_release_alter_release_form($form, $form_state);
   }
+  if ($form_id == 'project_settings_form') {
+    return project_release_project_settings_form($form, $form_state);
+  }
 }
 
 /**
@@ -880,6 +883,17 @@ function project_release_alter_release_form(&$form, &$form_state) {
   $form['buttons']['submit']['#submit'][] = 'project_release_node_submit';
 }
 
+/**
+ * Alters the project settings form.
+ */
+function project_release_project_settings_form(&$form, &$form_state) {
+  $form['sandbox']['project_release_sandbox_disable_releases'] = array(
+    '#title' => t('Disable releases for sandboxed projects.'),
+    '#type' => 'checkbox',
+    '#default_value' => variable_get('project_release_sandbox_disable_releases', FALSE),
+    '#description' => t('If checked, projects marked as sandboxes will not be able to have releases associated with them.'),
+  );
+}
 
 /**
  * @defgroup project_release_nodeapi Node API hooks
@@ -909,6 +923,7 @@ function project_release_nodeapi(&$node, $op, $arg) {
  * @see project_release_nodeapi().
  */
 function project_release_project_nodeapi(&$node, $op, $arg) {
+  // @TODO Add an item here for 'update' to check sandbox status and disable releases?
   switch ($op) {
     case 'load':
       project_release_project_nodeapi_load($node);
@@ -944,7 +959,12 @@ function project_release_project_nodeapi_load(&$node) {
  * Insert release information about a project node.
  */
 function project_release_project_nodeapi_insert(&$node) {
-  db_query("INSERT INTO {project_release_projects} (nid, releases, version_format) VALUES (%d, %d, '%s')", $node->nid, 1, '');
+  if (variable_get('project_release_sandbox_disable_releases', FALSE) && $node->project['sandbox']) {
+    db_query("INSERT INTO {project_release_projects} (nid, releases, version_format) VALUES (%d, %d, '%s')", $node->nid, 0, '');
+  }
+  else {
+    db_query("INSERT INTO {project_release_projects} (nid, releases, version_format) VALUES (%d, %d, '%s')", $node->nid, 1, '');
+  }
 }
 
 /**
diff --git views/project.views.inc views/project.views.inc
index b9c6f98..2a466e6 100644
--- views/project.views.inc
+++ views/project.views.inc
@@ -189,6 +189,26 @@ function project_views_data() {
     ),
   );
 
+  // sandbox
+  $data['project_projects']['sandbox'] = array(
+    'title' => t('Sandbox'),
+    'help' => t('Indicate whether or not this project is a sandbox.'),
+    'field' => array(
+      'group' => t('Project'),
+      'handler' => 'views_handler_field_boolean',
+      'click sortable' => TRUE,
+     ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_boolean_operator ',
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_numeric',
+    ),
+  );
+
   return $data;
 }
 
