diff --git a/token.tokens.inc b/token.tokens.inc
index 2f8ec1b..d5870c8 100644
--- a/token.tokens.inc
+++ b/token.tokens.inc
@@ -218,7 +218,7 @@ function token_token_info() {
   $info['types']['url'] = array(
     'name' => t('URL'),
     'description' => t('Tokens related to URLs.'),
-    'needs-data' => 'path',
+    'needs-data' => 'url',
   );
   $info['tokens']['url']['path'] = array(
     'name' => t('Internal path'),
@@ -338,7 +338,7 @@ function token_tokens($type, $tokens, array $data = array(), array $options = ar
       $replacements += token_generate('node', $source_tokens, array('node' => $source_node), $options);
     }
     if (($node_type_tokens = token_find_with_prefix($tokens, 'content-type')) && $node_type = node_type_load($node->type)) {
-      $replacements += token_generate('content-type', $node_type_tokens, array('node_type' => $node_type), $options);
+      $replacements += token_generate('content-type', $node_type_tokens, array('content-type' => $node_type), $options);
     }
     if (($url_tokens = token_find_with_prefix($tokens, 'url'))) {
       $replacements += token_generate('url', $url_tokens, entity_uri('node', $node), $options);
@@ -346,8 +346,8 @@ function token_tokens($type, $tokens, array $data = array(), array $options = ar
   }
 
   // Content type tokens.
-  if ($type == 'content-type' && !empty($data['node_type'])) {
-    $node_type = $data['node_type'];
+  if ($type == 'content-type' && !empty($data['content-type'])) {
+    $node_type = $data['content-type'];
 
     foreach ($tokens as $name => $original) {
       switch ($name) {
@@ -673,6 +673,13 @@ function token_tokens($type, $tokens, array $data = array(), array $options = ar
     $replacements += module_invoke_all('tokens', $type, $tokens, $data, $options);
   }
 
+  // If the token type specifics a 'needs-data' value, and the value is not
+  // present in $data, then throw an error.
+  $type_info = token_get_info($type);
+  if (!empty($type_info['needs-data']) && !isset($data[$type_info['needs-data']])) {
+    trigger_error(t('Attempting to perform token replacement for token type %type without required data', array('%type' => $type)), E_USER_WARNING);
+  }
+
   return $replacements;
 }
 
