diff --git a/project.api.php b/project.api.php
index f8e9c96..7c427b9 100644
--- a/project.api.php
+++ b/project.api.php
@@ -119,3 +119,54 @@ function hook_project_maintainer_project_load($nid, &$maintainers) {
     $maintainers[$maintainer->uid]['permissions']['some project permission'] = $maintainer->some_project_permission;
   }
 }
+
+/**
+ * Populate project-specific settings for the node type edit form.
+ *
+ * There is a top-level set of radio buttons to determine how the node type
+ * behaves with respect to the Project* system (is it a project, an issue, a
+ * release, etc). So one job of this hook is to provide a label for the radio
+ * button for the module implementing the hook. That's defined in the
+ * '#behavior_label' key in the returned array.
+ *
+ * If there are any module-specific settings that need to happen once we know
+ * how a node type should behave for Project*, those are also defined
+ * here. The spot where this hook is invoked will automatically populate the
+ * #states value for these form elements to only appear if the behavior
+ * setting radio for this module is selected. Since this is all ultimately
+ * impacting a node_type edit form, the keys of these form elements will be
+ * used to automatically call variable_set() with the node type machine name
+ * appended as a suffix.
+ *
+ * @param array $form
+ *   The node type edit form. Of particular interest, the machine name for the
+ *   node type being edited lives in $form['#node_type']->type and you need
+ *   that for properly defining the #default_value on any settings you provide.
+ *
+ * @return array
+ *   An array of form elements to use for project-specific settings for the
+ *   given node type. The special key '#behavior_label' is required to ensure
+ *   we have a sane human-readable label on the project behavior radio button
+ *   for the implementing module.
+ *
+ * @see node_type_form_submit()
+ */
+function hook_project_node_type_settings($form) {
+  $node_type = $form['#node_type']->type;
+  return array(
+    // Define the label on the project behavior radio button for this module.
+    '#behavior_label' => t('Used for project milestones'),
+    // Provide a form element that will eventually be saved as 
+    // 'project_milestone_color_[node-type]'.
+    'project_milestone_color' => array(
+      '#type' => 'select',
+      '#title' => t('What color should these milestones be?'),
+      '#options' => array(
+        'red' => t('Red'),
+        'green' => t('Green'),
+        'blue' => t('Blue'),
+      ),
+      '#default_value' => variable_get('project_milestone_color_' . $node_type, 'blue');
+    ),
+  );
+}
diff --git a/project.install b/project.install
index b1a86d0..79d35eb 100644
--- a/project.install
+++ b/project.install
@@ -40,6 +40,11 @@ function project_uninstall() {
   project_uninstall_default_project_node_type();
   field_delete_field('field_project_type');
   watchdog('project', 'Deleted the :field_name field from all content type instances.', array(':field_name' => 'field_project_type'));
+
+  // Delete the project_behavior settings for all node types.
+  foreach (node_type_get_types() as $type) {
+    variable_del('project_behavior_' . $type->type);
+  }
 }
 
 /**
diff --git a/project.module b/project.module
index d021445..5fb05d8 100644
--- a/project.module
+++ b/project.module
@@ -382,13 +382,21 @@ function project_maintainer_project_load($nid) {
 }
 
 /**
- * Adds a project issue checkbox.
+ * Implements hook_FORM_ID_form_alter().
+ *
+ * This adds a 'Project settings' vertical tab to the node_type_form and the
+ * initial choice of what behavior a given node type should have relative to
+ * the Project* suite. This also invokes a hook that allows other Project*
+ * modules to inject their own node-type-specific settings and form elements.
+ *
+ * @see hook_project_node_type_settings()
+ * @see node_type_form_submit()
  */
 function project_form_node_type_form_alter(&$form) {
-  $node_type = isset($form['#node_type']->type) ? $form['#node_type']->type : '';
-  $node_project_type = 'not_project';  // TODO: Set to function to determine what kind of projet node type it is.
-  $options = array(
-    'not_project' => 'Not Project',
+  $node_type = $form['#node_type']->type;
+  $project_behavior = variable_get('project_behavior_' . $node_type, 'none');
+  $behavior_options = array(
+    'none' => 'Not related to projects',
   );
 
   $form['project'] = array(
@@ -396,73 +404,47 @@ function project_form_node_type_form_alter(&$form) {
     '#title' => t('Project settings'),
     '#collapsible' => TRUE,
     '#group' => 'additional_settings',
-    '#description' => t('Change additional settings for Project Issue tracking.'),
   );
 
-  $form['project']['is_project'] = array(
-    '#title' => t('Is this node type part of the Project system?'),
-    '#description' => t('Select what part of the project module this node type relates to.'),
+  $form['project']['project_behavior'] = array(
+    '#title' => t('How does this content type relate to the Project system?'),
     '#type' => 'radios',
-    '#default_value' => $node_project_type,
+    '#default_value' => $project_behavior,
   );
 
-  $form['project']['was_project'] = array(
-    '#type' => 'value',
-    '#value' => $node_project_type,
-  );
-
-  $hook_return = module_invoke_all('project_add_node_settings', $form);
-
-  foreach ($hook_return as $module => $form_elements) {
-    $options[$module] = isset($form_elements['#name']) ? $form_elements['#name'] : $module;
+  // @todo: This is stupid. We want something like module_collate_info().
+  // @see http://drupal.org/node/890660
+  foreach (module_implements('project_node_type_settings') as $module) {
+    $function = "{$module}_project_node_type_settings";
+    $form_elements = $function($form);
+    $behavior_options[$module] = isset($form_elements['#behavior_label']) ? $form_elements['#behavior_label'] : $module;
 
-    $form['project'][$module] = array(
-      '#type' => 'fieldset',
-      '#collapsible' => FALSE,
-      '#states' => array(
-      // Only show this fieldset when the right option is picked.
+    foreach (element_children($form_elements) as $key) {
+      $form_elements[$key]['#states'] = array(
         'visible' => array(
-          ':input[name="is_project"]' => array('value' => $module),
+          ':input[name="project_behavior"]' => array('value' => $module),
         ),
-      ),
-    );
-    $form['project'][$module] = array_merge_recursive($form['project'][$module], $form_elements);
+      );
+      $form['project'][$module][$key] = $form_elements[$key];
+    }
   }
 
-  $form['project']['is_project']['#options'] = $options;
-
-
-  $form['#validate'][] = 'project_node_type_validate';
-  $form['#submit'][] = 'project_node_type_submit';
-}
-
-function project_node_type_validate(&$form, &$form_state) {
-  // TODO: Do we need this validate function here?
-}
-
-function project_node_type_submit(&$form, &$form_state) {
-  // TODO: Add settings here to make node a project node.
+  $form['project']['project_behavior']['#options'] = $behavior_options;
 }
 
 /**
- * Implements hook_project_add_node_settings().
+ * Implements hook_project_node_type_settings().
  *
- * This function returns the specific settings for a node type to be added to
- * the node type page. Ensure that the proper return is made, and note the
- * $form element is not passed by reference.
+ * For now, there are no project-specific settings, we only care about the
+ * label for the project behavior setting itself.
  *
- * @param $form
- *   A node object before project-specific settings are added.
- *
- * @return
- *   Array of form elements, keyed to the module name.
+ * @return array
+ *   Form elements to use for project-specific settings. The special key
+ *   '#behavior_label' is used for the radio button label on the 'Project
+ *   behavior' setting.
  */
-function project_project_add_node_settings($form) {
-  $return = array(
-    '#name' => t('Project'),
-    '#title' => t('Project settings'),
-    '#description' => t('There are no settings'),
+function project_project_node_type_settings($form) {
+  return array(
+    '#behavior_label' => t('Used for projects'),
   );
-
-  return array('project' => $return);
 }
