diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py
index c98162aca749bc9bad77ea2f906550b8b108fe28..5f6350c8e8500c63e375b410a15ba94871599df5 100644
--- a/lib/spack/spack/cmd/create.py
+++ b/lib/spack/spack/cmd/create.py
@@ -36,7 +36,7 @@
 import spack.cmd.checksum
 import spack.package
 import spack.url
-from spack.util.naming import mod_to_class
+from spack.util.naming import *
 import spack.util.crypto as crypto
 
 from spack.util.executable import which
@@ -128,21 +128,22 @@ def create(parser, args):
     url = args.url
 
     # Try to deduce name and version of the new package from the URL
-    name, version = spack.url.parse_name_and_version(url)
-
-    # Use a user-supplied name if one is present
-    name = kwargs.get(args, 'alternate_name', False)
-    if args.name:
-        name = args.name
-
+    version = spack.url.parse_version(url)
     if not version:
         tty.die("Couldn't guess a version string from %s." % url)
 
-    if not name:
-        tty.die("Couldn't guess a name for this package. Try running:", "",
-                "spack create --name <name> <url>")
-
-    if not spack.db.valid_name(name):
+    # Try to guess a name.  If it doesn't work, allow the user to override.
+    if args.alternate_name:
+        name = args.alternate_name
+    else:
+        try:
+            name = spack.url.parse_name(url, version)
+        except spack.url.UndetectableNameError, e:
+            # Use a user-supplied name if one is present
+            tty.die("Couldn't guess a name for this package. Try running:", "",
+                    "spack create --name <name> <url>")
+
+    if not valid_module_name(name):
         tty.die("Package name can only contain A-Z, a-z, 0-9, '_' and '-'")
 
     tty.msg("This looks like a URL for %s version %s." % (name, version))