diff --git drush/module_builder.drush.inc drush/module_builder.drush.inc
index 75a5c1e..f9db800 100644
--- drush/module_builder.drush.inc
+++ drush/module_builder.drush.inc
@@ -241,11 +241,6 @@ function module_builder_callback_build() {
  * Helper function to build the array of module_data.
  */
 function module_builder_build_data($commands) {
-  // Heap of defaults. Later find some nice way of asking for these. 
-  //$data['module_readable_name'] = ucfirst($data['module_root_name']);
-  //$data['module_short_description'] = 'Description';
-  // todo: some function in common.inc to set defaults?
-  
   // Determine whether we're in interactive mode.
   $interactive = !drush_get_option(array('non-interactive', 'noi'));
 
@@ -267,10 +262,14 @@ function module_builder_build_data($commands) {
       'key' => 'name',
       'prompt' => dt('human readable name'),
       'required' => TRUE,
+      // A callback to generate the default value of this key.
+      // The signature is foo($commands, $module_data)
+      'default_callback' => 'module_builder_default_readable_name',
     ),
     'module_short_description' => array(
       'key' => 'desc',
       'prompt' => dt('description'),
+      'default' => 'TODO: Description of module',
     ),
     'module_help_text' => array(
       'key' => 'help',
@@ -316,6 +315,16 @@ function module_builder_build_data($commands) {
         $module_data[$name] = $value;
       }
     }
+    
+    // Third pass: set a default value from the definition or a callback.
+    if (isset($definition['default'])) {
+      $module_data[$name] = $definition['default'];
+    }
+    elseif (isset($definition['default_callback'])) {
+      $function = $definition['default_callback'];
+      $module_data[$name] = $function($commands, $module_data);
+    }
+    
   }
   
   // Extra processing for the hooks array (or not).
@@ -333,6 +342,13 @@ function module_builder_build_data($commands) {
 }
 
 /**
+ * Callback for generating default for module readable name. 
+ */
+function module_builder_default_readable_name($commands, $module_data) {
+  return ucfirst(str_replace('_', ' ', $module_data['module_root_name']));
+}
+
+/**
  * Generates and outputs module code.
  *
  * @param $commands
diff --git includes/generate_info_5.inc includes/generate_info_5.inc
index 092e80c..9433774 100644
--- includes/generate_info_5.inc
+++ includes/generate_info_5.inc
@@ -25,12 +25,6 @@
  *     - 'module_package': the module package.
  */
 function module_builder_generate_info($module_data) {
-  // Merge in defaults.
-  $module_data += array(
-    'module_short_description' => 'TODO: Description of module',
-    'module_readable_name'     => ucfirst(str_replace('_', ' ', $module_data['module_root_name'])),
-  );
-
   // The weird syntax stops this from getting mangled by CVS
   $info = '; $' . 'Id$' . "\n";
   $info .= 'name = ' . $module_data['module_readable_name'] . "\n";
diff --git includes/generate_info_6.inc includes/generate_info_6.inc
index 3026e3a..ce2e086 100644
--- includes/generate_info_6.inc
+++ includes/generate_info_6.inc
@@ -24,12 +24,6 @@
  *     - 'module_package': the module package.
  */
 function module_builder_generate_info($module_data) {
-  // Merge in defaults.
-  $module_data += array(
-    'module_short_description' => 'TODO: Description of module',
-    'module_readable_name'     => ucfirst(str_replace('_', ' ', $module_data['module_root_name'])),
-  );
-
   // The weird syntax stops this from getting mangled by CVS
   $info = '; $' . 'Id$' . "\n";
   $info .= 'name = ' . $module_data['module_readable_name'] . "\n";
diff --git includes/generate_info_7.inc includes/generate_info_7.inc
index 38ebe79..6c5fb21 100644
--- includes/generate_info_7.inc
+++ includes/generate_info_7.inc
@@ -25,12 +25,6 @@
  */
 function module_builder_generate_info($module_data) {
   //print_r($module_data);
-  
-  // Merge in defaults.
-  $module_data += array(
-    'module_short_description' => 'TODO: Description of module',
-    'module_readable_name'     => ucfirst(str_replace('_', ' ', $module_data['module_root_name'])),
-  );
 
   // The weird syntax stops this from getting mangled by CVS
   $info = '; $' . 'Id$' . "\n";
