diff --git a/manifest_xml.py b/manifest_xml.py
index c9e5c40..9189eec 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -228,11 +228,7 @@
   @property
   def manifest_server(self):
     self._Load()
-
-    if self._manifest_server:
-      return self._manifest_server
-
-    return self.manifestProject.config.GetString('repo.manifest-server')
+    return self._manifest_server
 
   @property
   def IsMirror(self):
diff --git a/repo b/repo
index 0b20a9b..2a13af5 100755
--- a/repo
+++ b/repo
@@ -28,7 +28,7 @@
 del magic
 
 # increment this whenever we make important changes to this script
-VERSION = (1, 14)
+VERSION = (1, 13)
 
 # increment this if the MAINTAINER_KEYS block is modified
 KEYRING_VERSION = (1,0)
@@ -154,7 +154,7 @@
   """Installs repo by cloning it over the network.
   """
   opt, args = init_optparse.parse_args(args)
-  if args:
+  if args or not opt.manifest_url:
     init_optparse.print_usage()
     sys.exit(1)
 
diff --git a/subcmds/init.py b/subcmds/init.py
index a653c80..1cba366 100644
--- a/subcmds/init.py
+++ b/subcmds/init.py
@@ -23,7 +23,6 @@
 from project import SyncBuffer
 from git_config import GitConfig
 from git_command import git_require, MIN_GIT_VERSION
-from git_config import GitConfig
 
 class Init(InteractiveCommand, MirrorSafeCommand):
   common = True
@@ -37,20 +36,6 @@
 from the server and is installed in the .repo/ directory in the
 current working directory.
 
-The optional -u argument can be used to specify a URL to the
-manifest project. It is also possible to have a git configuration
-section as below to use 'identifier' as argument to -u:
-
-  [repo-manifest "identifier"]
-    url = ...
-    server = ...
-    reference = ...
-
-Only the url is required - the others are optional.
-
-If no -u argument is specified, the 'repo-manifest' section named
-'default' will be used if present.
-
 The optional -b argument can be used to select the manifest branch
 to checkout and use.  If no branch is specified, master is assumed.
 
@@ -84,7 +69,7 @@
     # Manifest
     g = p.add_option_group('Manifest options')
     g.add_option('-u', '--manifest-url',
-                 dest='manifest_url', default='default',
+                 dest='manifest_url',
                  help='manifest repository location', metavar='URL')
     g.add_option('-b', '--manifest-branch',
                  dest='manifest_branch',
@@ -123,25 +108,10 @@
   def _SyncManifest(self, opt):
     m = self.manifest.manifestProject
     is_new = not m.Exists
-    manifest_server = None
-
-    # The manifest url may point out a manifest section in the config
-    key = 'repo-manifest.%s.' % opt.manifest_url
-    if GitConfig.ForUser().GetString(key + 'url'):
-      opt.manifest_url = GitConfig.ForUser().GetString(key + 'url')
-
-      # Also copy other options to the manifest config if not specified already.
-      if not opt.reference:
-        opt.reference = GitConfig.ForUser().GetString(key + 'reference')
-      manifest_server = GitConfig.ForUser().GetString(key + 'server')
 
     if is_new:
-      if not opt.manifest_url or opt.manifest_url == 'default':
-        print >>sys.stderr, """\
-fatal: missing manifest url (-u) and no default found.
-
-  tip: The global git configuration key 'repo-manifest.default.url' can
-       be used to specify a default url."""
+      if not opt.manifest_url:
+        print >>sys.stderr, 'fatal: manifest url (-u) is required.'
         sys.exit(1)
 
       if not opt.quiet:
@@ -165,9 +135,6 @@
       r.ResetFetch()
       r.Save()
 
-    if manifest_server:
-      m.config.SetString('repo.manifest-server', manifest_server)
-
     if opt.reference:
       m.config.SetString('repo.reference', opt.reference)
 
