diff --git a/hg b/hg
index 06bc1ef248a6e92eeaf1fe246d980a6b6e47379d_aGc=..8ff4532376a41375b54ffade603d524c706606b4_aGc= 100644
--- a/hg
+++ b/hg
@@ -129,12 +129,6 @@
 if os.getcwd() != repo.root:
     relpath = os.getcwd()[len(repo.root) + 1: ]
 
-if cmd == "checkout" or cmd == "co":
-    node = repo.changelog.tip()
-    if args:
-        node = repo.lookup(args[0])
-    repo.checkout(node)
-
 elif cmd == "add":
     repo.add(args)
 
diff --git a/mercurial/commands.py b/mercurial/commands.py
index 06bc1ef248a6e92eeaf1fe246d980a6b6e47379d_bWVyY3VyaWFsL2NvbW1hbmRzLnB5..8ff4532376a41375b54ffade603d524c706606b4_bWVyY3VyaWFsL2NvbW1hbmRzLnB5 100644
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -68,5 +68,5 @@
     # this should eventually support remote repos
     os.system("cp -al %s/.hg .hg" % path)
 
-def checkout(u, repo, changeset=None):
+def checkout(ui, repo, changeset=None):
     '''checkout a given changeset or the current tip'''
@@ -72,4 +72,9 @@
     '''checkout a given changeset or the current tip'''
+    (c, a, d) = repo.diffdir(repo.root, repo.current)
+    if c:
+        ui.warn("aborting (outstanding changes in working directory)\n")
+        sys.exit(1)
+
     node = repo.changelog.tip()
     if changeset:
         node = repo.lookup(changeset)