for i in xrange(np):
                 testsys.cpu[i].max_insts_any_thread = offset
 
-    m5.instantiate()
-
+    checkpoint_dir = None
     if options.checkpoint_restore != None:
         from os.path import isdir, exists
         from os import listdir
                                       "cpt.%s.%s" % (options.bench, inst))
             if not exists(checkpoint_dir):
                 fatal("Unable to find checkpoint directory %s", checkpoint_dir)
-
-            print "Restoring checkpoint ..."
-            m5.restoreCheckpoint(checkpoint_dir)
-            print "Done."
         else:
             dirs = listdir(cptdir)
             expr = re.compile('cpt\.([0-9]*)')
 
             ## Adjust max tick based on our starting tick
             maxtick = maxtick - int(cpts[cpt_num - 1])
+            checkpoint_dir = joinpath(cptdir, "cpt.%s" % cpts[cpt_num - 1])
 
-            ## Restore the checkpoint
-            m5.restoreCheckpoint(joinpath(cptdir,
-                                          "cpt.%s" % cpts[cpt_num - 1]))
+    m5.instantiate(checkpoint_dir)
 
     if options.standard_switch or cpu_class:
         if options.standard_switch:
 
 
 # The final hook to generate .ini files.  Called from the user script
 # once the config is built.
-def instantiate():
+def instantiate(ckpt_dir=None):
     root = objects.Root.getInstance()
 
     if not root:
     # We're done registering statistics.  Enable the stats package now.
     stats.enable()
 
+    # Restore checkpoint (if any)
+    if ckpt_dir:
+        internal.core.unserializeAll(ckpt_dir)
+        need_resume.append(root)
+
     # Reset to put the stats in a consistent state.
     stats.reset()
 
     internal.core.serializeAll(dir)
     resume(root)
 
-def restoreCheckpoint(dir):
-    root = objects.Root.getInstance()
-    print "Restoring from checkpoint"
-    internal.core.unserializeAll(dir)
-    need_resume.append(root)
-    stats.reset()
-
 def changeToAtomic(system):
     if not isinstance(system, (objects.Root, objects.System)):
         raise TypeError, "Parameter of type '%s'.  Must be type %s or %s." % \