diff --git a/noblogsmv/main.py b/noblogsmv/main.py
index a0175707da6b75f8d1d28875d9daecec10ffbdaf..a760ba7acfbccec7b887d63fe0fc71aa8f03437b 100644
--- a/noblogsmv/main.py
+++ b/noblogsmv/main.py
@@ -8,7 +8,7 @@ import collections
 
 from noblogsmv import state
 from noblogsmv import webapp
-
+from functools import partial
 
 BLOGS_DIR = '/opt/noblogs/www/wp-content/blogs.dir'
 MYSQL_URI_RE = re.compile(
@@ -17,7 +17,7 @@ MYSQL_URI_RE = re.compile(
 log = logging.getLogger(__name__)
 
 
-def execute(cmd, dry_run = NoblogsStateMachine.dry_run):
+def execute_gen(cmd, dry_run = False):
     if dry_run:
         log.info("[DR] %s" % cmd)
         return ''
@@ -167,7 +167,7 @@ def process_rm_data(blog_id, value, progress):
 
 
 class NoblogsStateMachine(state.StateMachine):
-    dry_run = None
+    pass
 
 class NoblogsMoveStateMachine(NoblogsStateMachine):
 
@@ -214,7 +214,7 @@ use the `--recover' option.
                       default=20,
                       help='Number of workers (default: %default)')
     parser.add_option('--dry-run', dest='dry_run', action='store_true',
-                      help='Do not really perform the migration.')
+                      default=False, help='Do not really perform the migration.')
     parser.add_option('--recover', dest='recover', action='store_true',
                       help='Recover a previous run')
     parser.add_option('--noexit', action='store_true',
@@ -230,8 +230,8 @@ use the `--recover' option.
     logging.basicConfig(
         level=(logging.DEBUG if opts.debug else logging.INFO))
 
-    if opts.dry_run:
-        NoblogsStateMachine.dry_run = True
+
+    execute = partial(execute_gen, dry_run = opts.dry_run)
 
     if opts.clean:
         statemachine = NoblogsCleanStateMachine