diff --git a/includes/registration.forms.inc b/includes/registration.forms.inc
index 7a613fc..5f44d47 100644
--- a/includes/registration.forms.inc
+++ b/includes/registration.forms.inc
@@ -17,7 +17,8 @@ function registration_form($form, &$form_state, Registration $registration) {
   $user = $wrapper->user->value();
   $host = $wrapper->entity->value();
   $state = $wrapper->state->value();
-
+  $type = $wrapper->type->value();
+  
   $form_state['registration'] = $registration;
 
   $who_options = registration_access_people($registration);
@@ -115,7 +116,7 @@ function registration_form($form, &$form_state, Registration $registration) {
     '#element_validate' => array('element_validate_integer_positive', '_registration_validate_space_request'),
   );
 
-  $default_state = registration_get_default_state();
+  $default_state = registration_get_default_state($type);
   $states = registration_get_states_options(array('show_on_form' => TRUE));
 
   $form['state'] = array(
diff --git a/includes/registration_type.admin.inc b/includes/registration_type.admin.inc
index fe342c3..c391f15 100644
--- a/includes/registration_type.admin.inc
+++ b/includes/registration_type.admin.inc
@@ -14,6 +14,8 @@ function registration_type_form($form, &$form_state, $registration_type, $op = '
     $registration_type->name = '';
   }
 
+  dpm($registration_type);
+  
   $form['label'] = array(
     '#title' => t('Label'),
     '#type' => 'textfield',
@@ -34,6 +36,16 @@ function registration_type_form($form, &$form_state, $registration_type, $op = '
     ),
     '#description' => t('A unique machine-readable name for this registration type. It must only contain lowercase letters, numbers, and underscores.'),
   );
+  
+  $state_options = registration_get_states_options();
+
+  $form['default_state'] = array(
+    '#title' => 'Default state',
+    '#type' => 'select',
+    '#description' => t('The default state for this registration type. Overrides the global default state.'),
+    '#default_value' => isset($registration_type->default_state) ? $registration_type->default_state : 0,
+    '#options' => array('none' => 'None') + $state_options,
+  );
 
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array(
@@ -59,6 +71,11 @@ function registration_type_form($form, &$form_state, $registration_type, $op = '
  * Form API submit callback for the type form.
  */
 function registration_type_form_submit(&$form, &$form_state) {
+  
+  if ($form_state['values']['default_state'] == 'none') {
+    $form_state['values']['default_state'] = NULL;
+  }
+  
   $registration_type = entity_ui_form_submit_build_entity($form, $form_state);
   $registration_type->save();
   $form_state['redirect'] = 'admin/structure/registration/registration_types';
diff --git a/lib/registration.entity.inc b/lib/registration.entity.inc
index bcc48af..81cc77a 100644
--- a/lib/registration.entity.inc
+++ b/lib/registration.entity.inc
@@ -123,8 +123,9 @@ class Registration extends Entity {
     // Set a default state if not provided.
     $wrapper = entity_metadata_wrapper('registration', $this);
     $state = $wrapper->state->value();
+    registration_get_types();
     if (!$state) {
-      $default_state = registration_get_default_state();
+      $default_state = registration_get_default_state($type);
       if ($default_state) {
         $this->state = $default_state->identifier();
       }
diff --git a/lib/registration_type.entity.inc b/lib/registration_type.entity.inc
index 54a2a48..206c2a5 100644
--- a/lib/registration_type.entity.inc
+++ b/lib/registration_type.entity.inc
@@ -7,6 +7,7 @@ class RegistrationType extends Entity {
 
   public $name;
   public $label;
+  public $default_state;
   public $locked;
 
   public function __construct($values = array()) {
diff --git a/registration.install b/registration.install
index 1503fc3..9675685 100644
--- a/registration.install
+++ b/registration.install
@@ -215,6 +215,12 @@ function registration_schema() {
         'default' => 0,
         'size' => 'tiny',
       ),
+      'default_state' => array(
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => FALSE,
+        'description' => 'The machine name of the default registration state.',
+      ),
       'data' => array(
         'type' => 'text',
         'not null' => FALSE,
diff --git a/registration.module b/registration.module
index 65f1541..9ef8f53 100644
--- a/registration.module
+++ b/registration.module
@@ -1469,8 +1469,16 @@ function registration_get_active_states() {
  *
  * @return array
  */
-function registration_get_default_state() {
-  $states = registration_states(array('default_state' => 1));
+function registration_get_default_state($type = NULL) {
+  
+  $states_query = array('default_state' => 1);
+  
+  if (isset($type)) {
+    $reg_type = registration_get_types($type);
+    $states_query = isset($reg_type->default_state) ? array('name' => $reg_type->default_state) : $states_query;
+  }
+  
+  $states = registration_states($states_query);
   return !empty($states) ? reset($states) : NULL;
 }
 
