diff --git a/tools/burnin b/tools/burnin
index c60e6a477eb816d43a336b3378c62fd206f1b1d9..aeeb79290e7909ea3e891d486fc4196ca5db241e 100755
--- a/tools/burnin
+++ b/tools/burnin
@@ -23,6 +23,7 @@
 
 """
 
+import os
 import sys
 import optparse
 from itertools import izip, islice, cycle
@@ -121,6 +122,9 @@ class Burner(object):
     parser.add_option("--no-failover", dest="do_failover",
                       help="Skip instance failovers", action="store_false",
                       default=True)
+    parser.add_option("--no-importexport", dest="do_importexport",
+                      help="Skip instance export/import", action="store_false",
+                      default=True)
     parser.add_option("-t", "--disk-template", dest="disk_template",
                       choices=("plain", "remote_raid1", "drbd"),
                       default="remote_raid1",
@@ -258,6 +262,51 @@ class Burner(object):
       Log("- Failover instance %s" % (instance))
       self.ExecOp(op)
 
+  def ImportExport(self):
+    """Export the instance, delete it, and import it back.
+
+    """
+
+    mytor = izip(cycle(self.nodes),
+                 islice(cycle(self.nodes), 1, None),
+                 islice(cycle(self.nodes), 2, None),
+                 self.instances)
+
+    for pnode, snode, enode, instance in mytor:
+      exp_op = opcodes.OpExportInstance(instance_name=instance,
+                                           target_node=enode,
+                                           shutdown=True)
+      rem_op = opcodes.OpRemoveInstance(instance_name=instance)
+      nam_op = opcodes.OpQueryInstances(output_fields=["name"],
+                                           names=[instance])
+      full_name = self.ExecOp(nam_op)[0][0]
+      imp_dir = os.path.join(constants.EXPORT_DIR, full_name)
+      imp_op = opcodes.OpCreateInstance(instance_name=instance,
+                                        mem_size=128,
+                                        disk_size=self.opts.os_size,
+                                        swap_size=self.opts.swap_size,
+                                        disk_template=self.opts.disk_template,
+                                        mode=constants.INSTANCE_IMPORT,
+                                        src_node=enode,
+                                        src_path=imp_dir,
+                                        pnode=pnode,
+                                        snode=snode,
+                                        vcpus=1,
+                                        start=True,
+                                        ip_check=True,
+                                        wait_for_sync=True,
+                                        mac="auto")
+
+      Log("- Export instance %s to node %s" % (instance, enode))
+      self.ExecOp(exp_op)
+      Log("- Remove instance %s" % (instance))
+      self.ExecOp(rem_op)
+      self.to_rem.remove(instance)
+      Log("- Import instance %s from node %s to node %s" %
+          (instance, enode, pnode))
+      self.ExecOp(imp_op)
+      self.to_rem.append(instance)
+
   def StopStart(self):
     """Stop/start the instances."""
     for instance in self.instances:
@@ -307,6 +356,9 @@ class Burner(object):
       if opts.do_failover and opts.disk_template in constants.DTS_NET_MIRROR:
         self.Failover()
 
+      if opts.do_importexport:
+        self.ImportExport()
+
       self.StopStart()
       has_err = False
     finally: