diff --git a/Tools/pybench/Setup.py b/Tools/pybench/Setup.py
index f1417e6..21e654a 100644
--- a/Tools/pybench/Setup.py
+++ b/Tools/pybench/Setup.py
@@ -30,6 +30,10 @@
 from Tuples import *
 from Dict import *
 from Exceptions import *
+try:
+    from With import *
+except SyntaxError:
+    pass
 from Imports import *
 from Strings import *
 from Numbers import *
diff --git a/Tools/pybench/With.py b/Tools/pybench/With.py
new file mode 100644
index 0000000..3af24cc
--- /dev/null
+++ b/Tools/pybench/With.py
@@ -0,0 +1,190 @@
+from __future__ import with_statement
+from pybench import Test
+
+class WithFinally(Test):
+
+    version = 2.0
+    operations = 20
+    rounds = 80000
+
+    class ContextManager(object):
+        def __enter__(self):
+            pass
+        def __exit__(self, exc, val, tb):
+            pass
+
+    def test(self):
+
+        cm = self.ContextManager()
+
+        for i in xrange(self.rounds):
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+            with cm: pass
+
+    def calibrate(self):
+
+        cm = self.ContextManager()
+
+        for i in xrange(self.rounds):
+            pass
+
+
+class TryFinally(Test):
+
+    version = 2.0
+    operations = 20
+    rounds = 80000
+
+    class ContextManager(object):
+        def __enter__(self):
+            pass
+        def __exit__(self):
+            # "Context manager" objects used just for their cleanup
+            # actions in finally blocks usually don't have parameters.
+            pass
+
+    def test(self):
+
+        cm = self.ContextManager()
+
+        for i in xrange(self.rounds):
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+            cm.__enter__()
+            try: pass
+            finally: cm.__exit__()
+
+    def calibrate(self):
+
+        cm = self.ContextManager()
+
+        for i in xrange(self.rounds):
+            pass
+
+
+class WithRaiseExcept(Test):
+
+    version = 2.0
+    operations = 2 + 3 + 3
+    rounds = 100000
+
+    class BlockExceptions(object):
+        def __enter__(self):
+            pass
+        def __exit__(self, exc, val, tb):
+            return True
+
+    def test(self):
+
+        error = ValueError
+        be = self.BlockExceptions()
+
+        for i in xrange(self.rounds):
+            with be: raise error
+            with be: raise error
+            with be: raise error,"something"
+            with be: raise error,"something"
+            with be: raise error,"something"
+            with be: raise error("something")
+            with be: raise error("something")
+            with be: raise error("something")
+
+    def calibrate(self):
+
+        error = ValueError
+        be = self.BlockExceptions()
+
+        for i in xrange(self.rounds):
+            pass
