diff --git a/ndn/experiments/convergence_experiment.py b/ndn/experiments/convergence_experiment.py
new file mode 100644
index 0000000..451ff35
--- /dev/null
+++ b/ndn/experiments/convergence_experiment.py
@@ -0,0 +1,37 @@
+# -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2015-2017 The University of Memphis,
+#                         Arizona Board of Regents,
+#                         Regents of the University of California.
+#
+# This file is part of Mini-NDN.
+# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
+#
+# Mini-NDN is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mini-NDN is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mini-NDN, e.g., in COPYING.md file.
+# If not, see <http://www.gnu.org/licenses/>.
+
+from ndn.experiments.experiment import Experiment
+
+class ConvergenceExperiment(Experiment):
+
+    def __init__(self, args):
+        Experiment.__init__(self, args)
+
+    def setup(self):
+        self.checkConvergence()
+
+    def run(self):
+        pass
+
+Experiment.register("convergence", ConvergenceExperiment)
diff --git a/ndn/experiments/experiment.py b/ndn/experiments/experiment.py
index a107905..d13f088 100644
--- a/ndn/experiments/experiment.py
+++ b/ndn/experiments/experiment.py
@@ -1,8 +1,8 @@
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2015 The University of Memphis,
-#                    Arizona Board of Regents,
-#                    Regents of the University of California.
+# Copyright (C) 2015-2017 The University of Memphis,
+#                         Arizona Board of Regents,
+#                         Regents of the University of California.
 #
 # This file is part of Mini-NDN.
 # See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
@@ -40,7 +40,6 @@
         # Used to restart pings on the recovered node if any
         self.pingedDict = {}
 
-
     def start(self):
         self.setup()
         self.run()
@@ -56,9 +55,15 @@
             # Create folder to store ping data
             host.cmd("mkdir ping-data")
 
+        self.checkConvergence()
+
+    def checkConvergence(self, convergenceTime = None):
+        if convergenceTime is None:
+            convergenceTime = self.convergenceTime
+
         # Wait for convergence time period
-        print "Waiting " + str(self.convergenceTime) + " seconds for convergence..."
-        time.sleep(self.convergenceTime)
+        print "Waiting " + str(convergenceTime) + " seconds for convergence..."
+        time.sleep(convergenceTime)
         print "...done"
 
         # To check whether all the nodes of NLSR have converged
diff --git a/ndn/experiments/mcn_failure_convergence_experiment.py b/ndn/experiments/mcn_failure_convergence_experiment.py
new file mode 100644
index 0000000..942d151
--- /dev/null
+++ b/ndn/experiments/mcn_failure_convergence_experiment.py
@@ -0,0 +1,51 @@
+# -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2015-2017 The University of Memphis,
+#                         Arizona Board of Regents,
+#                         Regents of the University of California.
+#
+# This file is part of Mini-NDN.
+# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
+#
+# Mini-NDN is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mini-NDN is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mini-NDN, e.g., in COPYING.md file.
+# If not, see <http://www.gnu.org/licenses/>.
+
+from ndn.experiments.experiment import Experiment
+from ndn.experiments.mcn_failure_experiment import MCNFailureExperiment
+
+import time
+
+class MCNFailureConvergenceExperiment(MCNFailureExperiment):
+
+    def __init__(self, args):
+        MCNFailureExperiment.__init__(self, args)
+
+    def run(self):
+        mostConnectedNode = self.getMostConnectedNode()
+
+        # After the pings are scheduled, collect pings for 1 minute
+        time.sleep(self.PING_COLLECTION_TIME_BEFORE_FAILURE)
+
+        # Bring down MCN
+        self.failNode(mostConnectedNode)
+
+        # MCN is down for 2 minutes
+        time.sleep(120)
+
+        # Bring MCN back up
+        self.recoverNode(mostConnectedNode)
+
+        self.checkConvergence()
+
+Experiment.register("mcn-failure-convergence", MCNFailureConvergenceExperiment)
diff --git a/ndn/experiments/mcn_failure_experiment.py b/ndn/experiments/mcn_failure_experiment.py
index cc3fa09..e5bd462 100644
--- a/ndn/experiments/mcn_failure_experiment.py
+++ b/ndn/experiments/mcn_failure_experiment.py
@@ -1,8 +1,8 @@
 # -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 #
-# Copyright (C) 2015 The University of Memphis,
-#                    Arizona Board of Regents,
-#                    Regents of the University of California.
+# Copyright (C) 2015-2017 The University of Memphis,
+#                         Arizona Board of Regents,
+#                         Regents of the University of California.
 #
 # This file is part of Mini-NDN.
 # See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
@@ -22,11 +22,10 @@
 # If not, see <http://www.gnu.org/licenses/>.
 
 from ndn.experiments.experiment import Experiment
-from ndn.nlsr import Nlsr
 
 import time
 
-class FailureExperiment(Experiment):
+class MCNFailureExperiment(Experiment):
 
     def __init__(self, args):
         args["nPings"] = 300
@@ -64,4 +63,4 @@
         # Collect pings for more seconds after MCN is up
         time.sleep(self.PING_COLLECTION_TIME_AFTER_RECOVERY)
 
-Experiment.register("failure-mcn", FailureExperiment)
+Experiment.register("failure-mcn", MCNFailureExperiment)
