diff --git a/contrib/debugshell.py b/contrib/debugshell.py
new file mode 100644
--- /dev/null
+++ b/contrib/debugshell.py
@@ -0,0 +1,21 @@
+# debugshell extension
+"""a python shell with repo, changelog & manifest objects"""
+
+import mercurial
+import code
+
+def debugshell(ui, repo, **opts):
+    objects = {
+        'mercurial': mercurial,
+        'repo': repo,
+        'cl': repo.changelog,
+        'mf': repo.manifest,
+    }
+    bannermsg = "loaded repo : %s\n" \
+                "using source: %s" % (repo.root,
+                                      mercurial.__path__[0])
+    code.interact(bannermsg, local=objects)
+
+cmdtable = {
+    "debugshell|dbsh": (debugshell, [])
+}