diff --git a/tests/scripts/thread-cert/Cert_5_5_08_SplitRoutersLostLeader.py b/tests/scripts/thread-cert/Cert_5_5_08_SplitRoutersLostLeader.py
deleted file mode 100755
index a25aef2..0000000
--- a/tests/scripts/thread-cert/Cert_5_5_08_SplitRoutersLostLeader.py
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/env python3
-#
-#  Copyright (c) 2016, The OpenThread Authors.
-#  All rights reserved.
-#
-#  Redistribution and use in source and binary forms, with or without
-#  modification, are permitted provided that the following conditions are met:
-#  1. Redistributions of source code must retain the above copyright
-#     notice, this list of conditions and the following disclaimer.
-#  2. Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in the
-#     documentation and/or other materials provided with the distribution.
-#  3. Neither the name of the copyright holder nor the
-#     names of its contributors may be used to endorse or promote products
-#     derived from this software without specific prior written permission.
-#
-#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-#  POSSIBILITY OF SUCH DAMAGE.
-#
-
-import unittest
-
-import thread_cert
-
-LEADER1 = 1
-ROUTER1 = 2
-ROUTER2 = 3
-ROUTER3 = 4
-ED1 = 5
-
-
-class Cert_5_5_8_SplitRoutersLostLeader(thread_cert.TestCase):
-    TOPOLOGY = {
-        LEADER1: {
-            'mode': 'rsdn',
-            'panid': 0xface,
-            'router_selection_jitter': 1,
-            'whitelist': [ROUTER3]
-        },
-        ROUTER1: {
-            'mode': 'rsdn',
-            'panid': 0xface,
-            'router_selection_jitter': 1,
-            'whitelist': [ROUTER3, ROUTER2, ED1]
-        },
-        ROUTER2: {
-            'mode': 'rsdn',
-            'panid': 0xface,
-            'router_selection_jitter': 1,
-            'whitelist': [ROUTER3, ROUTER1]
-        },
-        ROUTER3: {
-            'mode': 'rsdn',
-            'panid': 0xface,
-            'router_selection_jitter': 1,
-            'whitelist': [LEADER1, ROUTER2, ROUTER1]
-        },
-        ED1: {
-            'is_mtd': True,
-            'mode': 'rsn',
-            'panid': 0xface,
-            'whitelist': [ROUTER1]
-        },
-    }
-
-    def _setUpRouter3(self):
-        self.nodes[ROUTER3].add_whitelist(self.nodes[LEADER1].get_addr64())
-        self.nodes[ROUTER3].add_whitelist(self.nodes[ROUTER2].get_addr64())
-        self.nodes[ROUTER3].add_whitelist(self.nodes[ROUTER1].get_addr64())
-        self.nodes[ROUTER3].enable_whitelist()
-        self.nodes[ROUTER3].set_router_selection_jitter(1)
-
-    def test(self):
-        self.nodes[LEADER1].start()
-        self.simulator.go(5)
-        self.assertEqual(self.nodes[LEADER1].get_state(), 'leader')
-
-        self.nodes[ROUTER3].start()
-        self.simulator.go(5)
-        self.assertEqual(self.nodes[ROUTER3].get_state(), 'router')
-
-        self.nodes[ROUTER2].start()
-        self.simulator.go(5)
-        self.assertEqual(self.nodes[ROUTER2].get_state(), 'router')
-
-        self.nodes[ROUTER1].start()
-        self.simulator.go(5)
-        self.assertEqual(self.nodes[ROUTER1].get_state(), 'router')
-
-        self.nodes[ED1].start()
-        self.simulator.go(5)
-        self.assertEqual(self.nodes[ED1].get_state(), 'child')
-
-        addrs = self.nodes[ED1].get_addrs()
-        for addr in addrs:
-            if addr[0:4] != 'fe80':
-                self.assertTrue(self.nodes[LEADER1].ping(addr))
-
-        self.nodes[ROUTER3].reset()
-        self._setUpRouter3()
-        self.simulator.go(140)
-
-        self.nodes[ROUTER3].start()
-        self.simulator.go(60)
-
-        addrs = self.nodes[ED1].get_addrs()
-        for addr in addrs:
-            if addr[0:4] != 'fe80':
-                self.assertTrue(self.nodes[LEADER1].ping(addr))
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/tests/scripts/thread-cert/Cert_5_6_08_ContextManagement.py b/tests/scripts/thread-cert/Cert_5_6_08_ContextManagement.py
deleted file mode 100755
index 827a201..0000000
--- a/tests/scripts/thread-cert/Cert_5_6_08_ContextManagement.py
+++ /dev/null
@@ -1,132 +0,0 @@
-#!/usr/bin/env python3
-#
-#  Copyright (c) 2016, The OpenThread Authors.
-#  All rights reserved.
-#
-#  Redistribution and use in source and binary forms, with or without
-#  modification, are permitted provided that the following conditions are met:
-#  1. Redistributions of source code must retain the above copyright
-#     notice, this list of conditions and the following disclaimer.
-#  2. Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in the
-#     documentation and/or other materials provided with the distribution.
-#  3. Neither the name of the copyright holder nor the
-#     names of its contributors may be used to endorse or promote products
-#     derived from this software without specific prior written permission.
-#
-#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-#  POSSIBILITY OF SUCH DAMAGE.
-#
-
-import unittest
-
-import thread_cert
-
-LEADER = 1
-ROUTER = 2
-ED = 3
-
-
-class Cert_5_6_8_ContextManagement(thread_cert.TestCase):
-    TOPOLOGY = {
-        LEADER: {
-            'context_reuse_delay': 10,
-            'mode': 'rsdn',
-            'panid': 0xface,
-            'whitelist': [ROUTER, ED]
-        },
-        ROUTER: {
-            'mode': 'rsdn',
-            'panid': 0xface,
-            'router_selection_jitter': 1,
-            'whitelist': [LEADER]
-        },
-        ED: {
-            'is_mtd': True,
-            'mode': 'rsn',
-            'panid': 0xface,
-            'whitelist': [LEADER]
-        },
-    }
-
-    def test(self):
-        self.nodes[LEADER].start()
-        self.simulator.go(4)
-        self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
-
-        self.nodes[ROUTER].start()
-        self.simulator.go(5)
-        self.assertEqual(self.nodes[ROUTER].get_state(), 'router')
-
-        self.nodes[ED].start()
-        self.simulator.go(5)
-        self.assertEqual(self.nodes[ED].get_state(), 'child')
-
-        self.nodes[ROUTER].add_prefix('2001:2:0:1::/64', 'paros')
-        self.nodes[ROUTER].register_netdata()
-
-        # Set lowpan context of sniffer
-        self.simulator.set_lowpan_context(1, '2001:2:0:1::/64')
-
-        self.simulator.go(2)
-
-        addrs = self.nodes[LEADER].get_addrs()
-        self.assertTrue(any('2001:2:0:1' in addr[0:10] for addr in addrs))
-        for addr in addrs:
-            if addr[0:3] == '200':
-                self.assertTrue(self.nodes[ED].ping(addr))
-
-        self.nodes[ROUTER].remove_prefix('2001:2:0:1::/64')
-        self.nodes[ROUTER].register_netdata()
-        self.simulator.go(5)
-
-        addrs = self.nodes[LEADER].get_addrs()
-        self.assertFalse(any('2001:2:0:1' in addr[0:10] for addr in addrs))
-        for addr in addrs:
-            if addr[0:3] == '200':
-                self.assertTrue(self.nodes[ED].ping(addr))
-
-        self.nodes[ROUTER].add_prefix('2001:2:0:2::/64', 'paros')
-        self.nodes[ROUTER].register_netdata()
-
-        # Set lowpan context of sniffer
-        self.simulator.set_lowpan_context(2, '2001:2:0:2::/64')
-
-        self.simulator.go(5)
-
-        addrs = self.nodes[LEADER].get_addrs()
-        self.assertFalse(any('2001:2:0:1' in addr[0:10] for addr in addrs))
-        self.assertTrue(any('2001:2:0:2' in addr[0:10] for addr in addrs))
-        for addr in addrs:
-            if addr[0:3] == '200':
-                self.assertTrue(self.nodes[ED].ping(addr))
-
-        self.simulator.go(5)
-        self.nodes[ROUTER].add_prefix('2001:2:0:3::/64', 'paros')
-        self.nodes[ROUTER].register_netdata()
-
-        # Set lowpan context of sniffer
-        self.simulator.set_lowpan_context(3, '2001:2:0:3::/64')
-
-        self.simulator.go(5)
-
-        addrs = self.nodes[LEADER].get_addrs()
-        self.assertFalse(any('2001:2:0:1' in addr[0:10] for addr in addrs))
-        self.assertTrue(any('2001:2:0:2' in addr[0:10] for addr in addrs))
-        self.assertTrue(any('2001:2:0:3' in addr[0:10] for addr in addrs))
-        for addr in addrs:
-            if addr[0:3] == '200':
-                self.assertTrue(self.nodes[ED].ping(addr))
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/tests/scripts/thread-cert/Cert_5_8_01_KeySynchronization.py b/tests/scripts/thread-cert/Cert_5_8_01_KeySynchronization.py
deleted file mode 100755
index 2068990..0000000
--- a/tests/scripts/thread-cert/Cert_5_8_01_KeySynchronization.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env python3
-#
-#  Copyright (c) 2016, The OpenThread Authors.
-#  All rights reserved.
-#
-#  Redistribution and use in source and binary forms, with or without
-#  modification, are permitted provided that the following conditions are met:
-#  1. Redistributions of source code must retain the above copyright
-#     notice, this list of conditions and the following disclaimer.
-#  2. Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in the
-#     documentation and/or other materials provided with the distribution.
-#  3. Neither the name of the copyright holder nor the
-#     names of its contributors may be used to endorse or promote products
-#     derived from this software without specific prior written permission.
-#
-#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-#  POSSIBILITY OF SUCH DAMAGE.
-#
-
-import unittest
-
-import thread_cert
-
-LEADER = 1
-ED = 2
-
-
-class Cert_5_8_1_KeySynchronization(thread_cert.TestCase):
-    TOPOLOGY = {
-        LEADER: {
-            'key_switch_guardtime': 0,
-            'mode': 'rsdn',
-            'panid': 0xface,
-            'whitelist': [ED]
-        },
-        ED: {
-            'is_mtd': True,
-            'key_switch_guardtime': 0,
-            'mode': 'rsn',
-            'panid': 0xface,
-            'whitelist': [LEADER]
-        },
-    }
-
-    def test(self):
-        self.nodes[LEADER].start()
-        self.simulator.go(4)
-        self.assertEqual(self.nodes[LEADER].get_state(), 'leader')
-
-        self.nodes[ED].start()
-        self.simulator.go(5)
-        self.assertEqual(self.nodes[ED].get_state(), 'child')
-
-        addrs = self.nodes[LEADER].get_addrs()
-        for addr in addrs:
-            if 'ff:fe00' not in addr:
-                self.assertTrue(self.nodes[ED].ping(addr))
-
-        key_sequence_counter = self.nodes[ED].get_key_sequence_counter()
-        self.nodes[ED].set_key_sequence_counter(key_sequence_counter + 10)
-
-        addrs = self.nodes[LEADER].get_addrs()
-        for addr in addrs:
-            if 'ff:fe00' not in addr:
-                self.assertFalse(self.nodes[ED].ping(addr))
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/tests/scripts/thread-cert/Makefile.am b/tests/scripts/thread-cert/Makefile.am
index a0b25c9..bf923fd 100644
--- a/tests/scripts/thread-cert/Makefile.am
+++ b/tests/scripts/thread-cert/Makefile.am
@@ -68,7 +68,6 @@
     Cert_5_5_04_SplitMergeRouters.py                                 \
     Cert_5_5_05_SplitMergeREED.py                                    \
     Cert_5_5_07_SplitMergeThreeWay.py                                \
-    Cert_5_5_08_SplitRoutersLostLeader.py                            \
     Cert_5_6_01_NetworkDataRegisterBeforeAttachLeader.py             \
     Cert_5_6_02_NetworkDataRegisterBeforeAttachRouter.py             \
     Cert_5_6_03_NetworkDataRegisterAfterAttachLeader.py              \
@@ -76,10 +75,8 @@
     Cert_5_6_05_NetworkDataRegisterAfterAttachRouter.py              \
     Cert_5_6_06_NetworkDataExpiration.py                             \
     Cert_5_6_07_NetworkDataRequestREED.py                            \
-    Cert_5_6_08_ContextManagement.py                                 \
     Cert_5_6_09_NetworkDataForwarding.py                             \
     Cert_5_7_01_CoapDiagCommands_A.py                                \
-    Cert_5_8_01_KeySynchronization.py                                \
     Cert_5_8_02_KeyIncrement.py                                      \
     Cert_5_8_03_KeyIncrementRollOver.py                              \
     Cert_6_1_01_RouterAttach.py                                      \
@@ -223,7 +220,6 @@
     Cert_5_5_04_SplitMergeRouters.py                                 \
     Cert_5_5_05_SplitMergeREED.py                                    \
     Cert_5_5_07_SplitMergeThreeWay.py                                \
-    Cert_5_5_08_SplitRoutersLostLeader.py                            \
     Cert_5_6_01_NetworkDataRegisterBeforeAttachLeader.py             \
     Cert_5_6_02_NetworkDataRegisterBeforeAttachRouter.py             \
     Cert_5_6_03_NetworkDataRegisterAfterAttachLeader.py              \
@@ -231,10 +227,8 @@
     Cert_5_6_05_NetworkDataRegisterAfterAttachRouter.py              \
     Cert_5_6_06_NetworkDataExpiration.py                             \
     Cert_5_6_07_NetworkDataRequestREED.py                            \
-    Cert_5_6_08_ContextManagement.py                                 \
     Cert_5_6_09_NetworkDataForwarding.py                             \
     Cert_5_7_01_CoapDiagCommands_A.py                                \
-    Cert_5_8_01_KeySynchronization.py                                \
     Cert_5_8_02_KeyIncrement.py                                      \
     Cert_5_8_03_KeyIncrementRollOver.py                              \
     Cert_6_1_01_RouterAttach.py                                      \
