diff --git a/voipnode.admin.inc b/voipnode.admin.inc
index 26127dc..40e2b76 100644
--- a/voipnode.admin.inc
+++ b/voipnode.admin.inc
@@ -16,20 +16,20 @@ function voipnode_admin_settings() {
     '#type' => 'checkboxes',
     '#options' => VoipScript::getScriptNames(),
     '#default_value' => variable_get('voipnode_valid_script_names', array()),
-    '#description' => t('Scripts that will be available for VoIP nodes. You can select multiple scripts.'),
+    '#description' => t('Scripts that will be available for VoIP nodes. You can select multiple scripts. If none are selected all will be available.'),
   );
   $form['voipnode_default_script_name'] = array(
     '#title' => t('Default script'),
     '#type' => 'select',
     '#options' => VoipScript::getScriptNames(),
-    '#default_value' => variable_get('voipnode_default_script_name', ''),
+    '#default_value' => voipnode_default_script(FALSE, TRUE),
     '#description' => t('The script, of those valid, that will be used by default.'),
   );
   $form['voipnode_default_extension_status'] = array(
     '#type' => 'checkbox',
     '#title' => t('Listed'),
     '#description' => t('The default setting for if the extension is listed in a directory.'),
-    '#default_value' => variable_get('voipnode_default_extension_status', 0),
+    '#default_value' => voipnode_default_status(),
     '#return_value' => 1,
   );
   $form['array_filter'] = array('#type' => 'hidden');
@@ -125,9 +125,9 @@ function _voipnode_admin_reindex_batch($content_type, &$context) {
   $result = db_query_range("SELECT nid FROM {node} WHERE nid > %d AND type = '%s' ORDER BY nid ASC", $context['sandbox']['current_node'], $content_type, 0, $limit);
   while ($row = db_fetch_array($result)) {
     $node = node_load($row['nid'], NULL, TRUE);
-    $node->voipextension_listed = variable_get('voipnode_default_extension_status_'. $content_type, variable_get('voipnode_default_extension_status', 0));
-    $node->voipextension_script = variable_get('voipnode_default_script_name_'. $content_type, variable_get('voipnode_default_script_name',''));
-    // we only need our part of the hook_nodeapi
+    $node->voipextension_listed = voipnode_default_status($content_type);
+    $node->voipextension_script = voipnode_default_script($content_type, TRUE);
+    // We only need our part of the hook_nodeapi.
     voipnode_nodeapi($node, 'update');
     $context['sandbox']['progress']++;
     $context['sandbox']['current_node'] = $row['nid'];
@@ -207,20 +207,20 @@ function _voipnode_form_node_type_form_alter(&$form, &$form_state) {
     ),
   );
 
-  $default_script_name = variable_get('voipnode_default_script_name_'. $content_type, variable_get('voipnode_default_script_name',''));
+  $default_script_name = voipnode_default_script($content_type, TRUE);
   $form['voipnode']['voipnode_settings']['voipnode_default_script_name'] = array(
     '#type' => 'select',
     '#title' => t('Default Script Name'),
-    '#options' => variable_get('voipnode_valid_script_names', VoipScript::getScriptNames()),
+    '#options' => voipnode_valid_script_names(t('Site default')),
     '#default_value' => $default_script_name,
   );
 
-  $default_extension_status = variable_get('voipnode_default_extension_status_'. $content_type, variable_get('voipnode_default_extension_status', 0));
+  $default_extension_status = voipnode_default_status($content_type);
   $form['voipnode']['voipnode_settings']['voipnode_default_extension_status'] = array(
     '#type' => 'radios',
     '#title' => t('Default Extension status'),
     '#options' => array(1 => t('Listed in extension directories'), 0 => t('Not listed')),
-    '#default_value' => $default_extension_status ? $default_extension_status : 0
+    '#default_value' => $default_extension_status,
   );
 
   if (variable_get('voipnode_use_'. $content_type, FALSE)) {
diff --git a/voipnode.module b/voipnode.module
index 53cf65b..2272c33 100644
--- a/voipnode.module
+++ b/voipnode.module
@@ -32,7 +32,7 @@ function voipnode_menu() {
     'type' => MENU_LOCAL_TASK,
   );
   return $items;
-} 
+}
 
 /**
  * Implementation of hook_menu_alter().
@@ -208,15 +208,15 @@ function _voipnode_node_edit_form_alter(&$form, &$form_state, $form_id) {
     '#type' => 'select',
     '#title' => t('Script'),
     '#description' => t('VOIP script to use for this node.'),
-    '#options' => variable_get('voipnode_valid_script_names', VoipScript::getScriptNames()),
-    '#default_value' => (! empty($node->voipextension_script)) ? $node->voipextension_script : variable_get('voipnode_default_script_name_'. $content_type, variable_get('voipnode_default_script_name','')),
+    '#options' => voipnode_valid_script_names(),
+    '#default_value' => (empty($node->voipextension_script)) ? 'voipnode_default_script' : $node->voipextension_script,
   );
 
   $form['voipextension_listed'] = array(
     '#type' => 'checkbox',
     '#title' => t('Listed'),
     '#description' => t('List the extension in a directory.'),
-    '#default_value' => (isset($node->voipextension_listed)) ? $node->voipextension_listed : variable_get('voipnode_default_extension_status_'. $content_type, variable_get('voipnode_default_extension_status', 0)),
+    '#default_value' => (isset($node->voipextension_listed)) ? $node->voipextension_listed : voipnode_default_status($content_type),
     '#return_value' => 1,
   );
 }
@@ -272,6 +272,7 @@ function voipnode_preprocess_content_field_overview_form(&$variables) {
  * Implementation of hook_voipscript_load_script().
  */
 function voipnode_voipscript_load_script($script_name, $params = NULL) {
+  // Unlisted default 'script' handles choosing appropiate script.
   if ($script_name == 'voipnode_basic_script') {
     module_load_include('inc', 'voipnode', 'voipnode.script');
     $node = node_load($params['nid']);
@@ -324,10 +325,106 @@ function voipnode_voipextension_description_callback(&$extension) {
  */
 function voipnode_voipextension_script_callback(&$extension) {
   $extension['script_arguments']['nid'] = $extension['module_id'];
-  if (empty($extension['script'])) {
-    // fallback shouldn't be needed later.
-    return 'voipnode_basic';
+  $script_name = $extension['script'];
+  if ($script_name == '' || $script_name == 'voipnode_default_script') {
+    $node = node_load($extension['script_arguments']['nid']);
+    $script_name = voipnode_default_script($node->type);
+    return $script_name;
+  }
+  else {
+    return $script_name;
+  }
+}
+
+/**
+ * Get the name of the default script.
+ *
+ * @param string $type
+ *   Content type to get default for. Optional, if not present the module site
+ *   default will be returned.
+ * @param bool $listing
+ *   Optional. Default will return a runable script.
+ *   Set to true to return voipnode_default_script if no setting.
+ *
+ * @return string
+ *   Machine name of default script.
+ */
+function voipnode_default_script($type = FALSE, $listing = FALSE) {
+  $script = '';
+
+  if ($type) {
+    $script = variable_get('voipnode_default_script_name_' . $type, '');
+
+    // A value has been set for the content type, and this is for listing.
+    if ($script && $listing) {
+      return $script;
+    }
+  }
+
+  if (! $script || $script == 'voipnode_default_script') {
+    $script = variable_get('voipnode_default_script_name', '');
+  }
+
+  // If admin has never set a script, and this is not for
+  // an form listing return the default.
+  if (! $script && ! $listing) {
+    return 'voipnode_basic_script';
+  }
+
+  return $script;
+}
+
+/**
+ * Get the default extension status.
+ *
+ * Defaults to TRUE.
+ *
+ * @param string $type
+ *   Content type to get default for. Optional, if not present the global
+ *   default will be returned.
+ *
+ * @return bool
+ *   True if enabled by default.
+ */
+function voipnode_default_status($type = FALSE) {
+  $status = NULL;
+  if ($type) {
+    $status = variable_get('voipnode_default_extension_status_' . $type, NULL);
+  }
+
+  if (is_null($status)) {
+    variable_get('voipnode_default_extension_status', TRUE);
+  }
+
+  // Avoid minor oddness if variable_get
+  // voipnode_default_extension_staus = null.
+  if (is_null($status)) {
+    $status = TRUE;
+  }
+
+  return $status;
+}
+
+/**
+ * Return valid script names.
+ *
+ * Prepends the voipnode internal default script option.
+ *
+ * @param string $default_name
+ *   Optional description to use for the default script.
+ *
+ * @return array
+ *   FAPI options array of valid script names.
+ */
+function voipnode_valid_script_names($default_name = '') {
+  if (empty($default_name)) {
+    $default_name = t('Default');
   }
+
+  $scripts = variable_get('voipnode_valid_script_names', VoipScript::getScriptNames());
+  $scripts = array('voipnode_default_script' => $default_name) + $scripts;
+
+  return $scripts;
 }
 
 /****
