diff --git a/beem/cli.py b/beem/cli.py
index 5bd0d58f943df341ee068d8e8aeda14c7d9277bc..999a27eb25b10cf1c764f7197a41b2df13dae2d1 100644
--- a/beem/cli.py
+++ b/beem/cli.py
@@ -40,6 +40,7 @@ from timeit import default_timer as timer
 from beembase import operations
 from beemgraphenebase.account import PrivateKey, PublicKey
 from beemgraphenebase.base58 import Base58
+from beem.nodelist import NodeList
 
 
 click.disable_unicode_literals_warning = True
@@ -388,6 +389,46 @@ def currentnode(version, url):
     print(t)
 
 
+@cli.command()
+@click.option(
+    '--show', '-s', is_flag=True, default=False,
+    help="Prints the updated nodes")
+@click.option(
+    '--test', '-t', is_flag=True, default=False,
+    help="Do change the node list, only print the newest nodes setup.")
+@click.option(
+    '--only-https', '-h', is_flag=True, default=False,
+    help="Use only https nodes.")
+@click.option(
+    '--only-wss', '-w', is_flag=True, default=False,
+    help="Use only websocket nodes.")
+@click.option(
+    '--only-appbase', '-a', is_flag=True, default=False,
+    help="Use only appbase nodes")
+@click.option(
+    '--only-non-appbase', '-n', is_flag=True, default=False,
+    help="Use only non-appbase nodes")
+def updatenodes(show, test, only_https, only_wss, only_appbase, only_non_appbase):
+    """ Update the nodelist from @fullnodeupdate
+    """
+    stm = shared_steem_instance()
+    if stm.rpc is not None:
+        stm.rpc.rpcconnect()
+    t = PrettyTable(["node", "Version", "score"])
+    t.align = "l"
+    nodelist = NodeList()
+    nodelist.update_nodes(steem_instance=stm)
+    nodes = nodelist.get_nodes(normal=not only_appbase, appbase=not only_non_appbase, wss=not only_https, https=not only_wss)
+    if show or test:
+        sorted_nodes = sorted(nodelist, key=lambda node: node["score"], reverse=True)
+        for node in sorted_nodes:
+            score = float("{0:.1f}".format(node["score"]))
+            t.add_row([node["url"], node["version"], score])
+        print(t)
+    if not test:
+        stm.set_default_nodes(nodes)
+
+
 @cli.command()
 def config():
     """ Shows local configuration
diff --git a/beem/nodelist.py b/beem/nodelist.py
index 7b206439e152a065bffd509168af9f19ef504dc6..e260caeda741872c745bd2db0d5b10bbac25a012 100644
--- a/beem/nodelist.py
+++ b/beem/nodelist.py
@@ -7,6 +7,11 @@ from builtins import next
 import re
 import time
 import math
+import json
+from beem.instance import shared_steem_instance
+from beem.account import Account
+import logging
+log = logging.getLogger(__name__)
 
 
 class NodeList(list):
@@ -226,7 +231,40 @@ class NodeList(list):
             }]
         super(NodeList, self).__init__(nodes)
 
-    def get_nodes(self, normal=True, appbase=True, dev=False, testnet=False):
+    def update_nodes(self, steem_instance=None):
+        """ Reads metadata from fullnodeupdate"""
+        steem = steem_instance or shared_steem_instance()
+        account = Account("fullnodeupdate", steem_instance=steem)
+        metadata = json.loads(account["json_metadata"])
+        report = metadata["report"]
+        failing_nodes = metadata["failing_nodes"]
+        parameter = metadata["parameter"]
+        benchmarks = parameter["benchmarks"]
+        max_score = len(report) + 1
+        new_nodes = []
+        for node in self:
+            new_node = node.copy()
+            for report_node in report:
+                if node["url"] == report_node["node"]:
+                    new_node["version"] = report_node["version"]
+                    ranks = []
+                    for benchmark in benchmarks:
+                        result = report_node[benchmark]
+                        rank = result["rank"]
+                        if not result["ok"]:
+                            rank = max_score + 1
+                        ranks.append(rank)
+                    sum_rank = 0
+                    for rank in ranks:
+                        sum_rank += rank
+                    new_node["score"] = ((3 * max_score) - sum_rank) / len(ranks) * 10
+            for node_failing in failing_nodes:
+                if node["url"] == node_failing:
+                    new_node["score"] = -1
+            new_nodes.append(new_node)
+        super(NodeList, self).__init__(new_nodes)
+
+    def get_nodes(self, normal=True, appbase=True, dev=False, testnet=False, wss=True, https=True):
         """ Returns nodes as list
 
             :param bool normal: when True, nodes with version 0.19.2 or 0.19.3 are included
@@ -246,8 +284,13 @@ class NodeList(list):
         if testnet:
             node_type_list.append("testnet")
         for node in self:
-            if node["type"] in node_type_list:
+            if node["type"] in node_type_list and node["score"] >= 0:
+                if not https and node["url"][:5] == 'https':
+                    continue
+                if not wss and node["url"][:3] == 'wss':
+                    continue
                 node_list.append(node)
+
         return [node["url"] for node in sorted(node_list, key=lambda self: self['score'], reverse=True)]
 
     def get_testnet(self):
diff --git a/beemapi/graphenerpc.py b/beemapi/graphenerpc.py
index bf8a7012df55fbeded786bda3fb62e17cddb96ad..8d9328a7ed0171f05b3d270e69f75bc949fdb920 100644
--- a/beemapi/graphenerpc.py
+++ b/beemapi/graphenerpc.py
@@ -328,7 +328,7 @@ class GrapheneRPC(object):
         if self.nodes.working_nodes_count == 0:
             raise WorkingNodeMissing
         if self.url is None:
-            self.rpcconnect()
+            raise RPCConnection("RPC is not connected!")
         reply = {}
         while True:
             self.nodes.increase_error_cnt_call()
diff --git a/beemapi/steemnoderpc.py b/beemapi/steemnoderpc.py
index 59b5265d6d644432852451d5e236cbbd334ba810..f1b2d5eb47f04b781520d5036cd3ec1944f7bf9e 100644
--- a/beemapi/steemnoderpc.py
+++ b/beemapi/steemnoderpc.py
@@ -54,6 +54,8 @@ class SteemNodeRPC(GrapheneRPC):
             :raises ValueError: if the server does not respond in proper JSON format
             :raises RPCError: if the server returns an error
         """
+        if self.url is None:
+            raise exceptions.RPCConnection("RPC is not connected!")
         doRetry = True
         maxRetryCountReached = False
         while doRetry and not maxRetryCountReached:
diff --git a/tests/beem/test_account.py b/tests/beem/test_account.py
index 22964e39b30a5caf238528a3a1974a9deb87bb54..c0ca6e7feed7b6132c26395cbbd0e7f630563944 100644
--- a/tests/beem/test_account.py
+++ b/tests/beem/test_account.py
@@ -27,6 +27,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(normal=True, appbase=False),
             nobroadcast=True,
@@ -277,11 +278,12 @@ class Testcases(unittest.TestCase):
     ])
     def test_history_block_num(self, node_param):
         if node_param == "non_appbase":
-            account = self.account
+            stm = self.bts
             zero_element = 0
         else:
-            account = self.account_appbase
+            stm = self.appbase
             zero_element = 0  # bug in steem
+        account = Account("fullnodeupdate", steem_instance=stm)
         h_all_raw = []
         for h in account.history_reverse(raw_output=True):
             h_all_raw.append(h)
diff --git a/tests/beem/test_amount.py b/tests/beem/test_amount.py
index 05b4aa32735e53b381c7c2fc62ff844e50408f63..abde3a1147be46a8ef4c3699cb890af652fdf916 100644
--- a/tests/beem/test_amount.py
+++ b/tests/beem/test_amount.py
@@ -16,6 +16,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
diff --git a/tests/beem/test_asset.py b/tests/beem/test_asset.py
index e41f2426a24835e9414165adacd15dee0627f3aa..7be22de43b0252ec0eed31ce8ca1b384e2f0d1e8 100644
--- a/tests/beem/test_asset.py
+++ b/tests/beem/test_asset.py
@@ -17,6 +17,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
diff --git a/tests/beem/test_base_objects.py b/tests/beem/test_base_objects.py
index f5de5526ecc9ba668abb60bad8c58ed6d205c735..3ffb6a24b94b7727674e159120799dbf590ec9e9 100644
--- a/tests/beem/test_base_objects.py
+++ b/tests/beem/test_base_objects.py
@@ -15,6 +15,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
diff --git a/tests/beem/test_block.py b/tests/beem/test_block.py
index 5456f1fa3c443bb6fe12193c0089257005403cb8..6b354c29fecb812db1e099129ef2061608a1a13e 100644
--- a/tests/beem/test_block.py
+++ b/tests/beem/test_block.py
@@ -20,6 +20,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
diff --git a/tests/beem/test_blockchain.py b/tests/beem/test_blockchain.py
index 3b9ad761650df3834c90631b3a4a38342c3e4a4e..82bd2ca86fddb47b29c0ce524a863c91a8c94165 100644
--- a/tests/beem/test_blockchain.py
+++ b/tests/beem/test_blockchain.py
@@ -23,6 +23,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
diff --git a/tests/beem/test_blockchain_batch.py b/tests/beem/test_blockchain_batch.py
index 5eab09002d399f6e5e3ddbe5e248d6c44ec19675..b376068a04bcd3fc322df61345450c68802fcc44 100644
--- a/tests/beem/test_blockchain_batch.py
+++ b/tests/beem/test_blockchain_batch.py
@@ -23,6 +23,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(normal=False, appbase=True, dev=True),
             nobroadcast=True,
diff --git a/tests/beem/test_blockchain_threading.py b/tests/beem/test_blockchain_threading.py
index e234d91c5ecded41c0434dfa2a4773a7e73ca479..83256f45f27df088dd1c48d6317f9cbbc6a28cd3 100644
--- a/tests/beem/test_blockchain_threading.py
+++ b/tests/beem/test_blockchain_threading.py
@@ -22,6 +22,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
diff --git a/tests/beem/test_cli.py b/tests/beem/test_cli.py
index 0c9d56443fe190af2121da26502cfada9758800e..35d394442579bfa1c3f3d2bb9220bcfd32615b9b 100644
--- a/tests/beem/test_cli.py
+++ b/tests/beem/test_cli.py
@@ -27,7 +27,8 @@ pub_key = "STX52xMqKegLk4tdpNcUXU9Rw5DtdM9fxf3f12Gp55v1UjLX3ELZf"
 class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
-        nodelist = NodeList()
+        cls.nodelist = NodeList()
+        cls.nodelist.update_nodes(steem_instance=Steem(node=cls.nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         stm = shared_steem_instance()
         stm.config.refreshBackup()
         runner = CliRunner()
@@ -37,7 +38,7 @@ class Testcases(unittest.TestCase):
         result = runner.invoke(cli, ['-o', 'set', 'default_account', 'beem'])
         if result.exit_code != 0:
             raise AssertionError(str(result))
-        result = runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        result = runner.invoke(cli, ['-o', 'set', 'nodes', str(cls.nodelist.get_testnet())])
         if result.exit_code != 0:
             raise AssertionError(str(result))
         result = runner.invoke(cli, ['createwallet', '--wipe'], input="test\ntest\n")
@@ -60,15 +61,13 @@ class Testcases(unittest.TestCase):
 
     def test_balance(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['balance', 'beem', 'beem1'])
         self.assertEqual(result.exit_code, 0)
 
     def test_interest(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['interest', 'beem', 'beem1'])
         self.assertEqual(result.exit_code, 0)
 
@@ -112,8 +111,7 @@ class Testcases(unittest.TestCase):
 
     def test_info(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['info'])
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['info', 'beem'])
@@ -127,15 +125,14 @@ class Testcases(unittest.TestCase):
 
     def test_info2(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['info', '--', '-1:1'])
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['info', 'gtg'])
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['info', "@gtg/witness-gtg-log"])
         self.assertEqual(result.exit_code, 0)
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
 
     def test_changepassword(self):
         runner = CliRunner()
@@ -172,22 +169,19 @@ class Testcases(unittest.TestCase):
 
     def test_transfer(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['transfer', 'beem1', '1', 'SBD', 'test'], input="test\n")
         self.assertEqual(result.exit_code, 0)
 
     def test_powerdownroute(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['powerdownroute', 'beem1'], input="test\n")
         self.assertEqual(result.exit_code, 0)
 
     def test_convert(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['convert', '1'], input="test\n")
         self.assertEqual(result.exit_code, 0)
 
@@ -198,8 +192,7 @@ class Testcases(unittest.TestCase):
 
     def test_powerdown(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['powerdown', '1e3'], input="test\n")
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['powerdown', '0'], input="test\n")
@@ -207,8 +200,7 @@ class Testcases(unittest.TestCase):
 
     def test_updatememokey(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['-d', 'updatememokey'], input="test\ntest\ntest\n")
         self.assertEqual(result.exit_code, 0)
 
@@ -219,36 +211,31 @@ class Testcases(unittest.TestCase):
 
     def test_follower(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['follower', 'beem2'])
         self.assertEqual(result.exit_code, 0)
 
     def test_following(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['following', 'beem'])
         self.assertEqual(result.exit_code, 0)
 
     def test_muter(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['muter', 'beem2'])
         self.assertEqual(result.exit_code, 0)
 
     def test_muting(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['muting', 'beem'])
         self.assertEqual(result.exit_code, 0)
 
     def test_allow_disallow(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['-d', 'allow', '--account', 'beem', '--permission', 'posting', 'beem1'], input="test\n")
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['-d', 'disallow', '--account', 'beem', '--permission', 'posting', 'beem1'], input="test\n")
@@ -261,32 +248,28 @@ class Testcases(unittest.TestCase):
 
     def test_votes(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['votes', '--direction', 'out', 'test'])
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['votes', '--direction', 'in', 'test'])
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         self.assertEqual(result.exit_code, 0)
 
     def test_approvewitness(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['-o', 'approvewitness', 'beem1'], input="test\n")
         self.assertEqual(result.exit_code, 0)
 
     def test_disapprovewitness(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['-o', 'disapprovewitness', 'beem1'], input="test\n")
         self.assertEqual(result.exit_code, 0)
 
     def test_newaccount(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['-d', 'newaccount', 'beem3'], input="test\ntest\ntest\n")
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['-d', 'newaccount', '--fee', '6 STEEM', 'beem3'], input="test\ntest\ntest\n")
@@ -294,8 +277,7 @@ class Testcases(unittest.TestCase):
 
     def test_importaccount(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['importaccount', '--roles', '["owner", "active", "posting", "memo"]', 'beem2'], input="test\ntest\n")
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['delkey', '--confirm', 'STX7mLs2hns87f7kbf3o2HBqNoEaXiTeeU89eVF6iUCrMQJFzBsPo'], input="test\n")
@@ -309,14 +291,13 @@ class Testcases(unittest.TestCase):
 
     def test_orderbook(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['orderbook'])
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['orderbook', '--show-date'])
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['orderbook', '--chart'])
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         self.assertEqual(result.exit_code, 0)
 
     def test_buy(self):
@@ -358,8 +339,7 @@ class Testcases(unittest.TestCase):
 
     def test_follow_unfollow(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['follow', 'beem1'], input="test\n")
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['unfollow', 'beem1'], input="test\n")
@@ -367,8 +347,7 @@ class Testcases(unittest.TestCase):
 
     def test_mute_unmute(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['mute', 'beem1'], input="test\n")
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['unfollow', 'beem1'], input="test\n")
@@ -376,14 +355,13 @@ class Testcases(unittest.TestCase):
 
     def test_witnesscreate(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         result = runner.invoke(cli, ['-d', 'witnesscreate', 'beem', pub_key], input="test\n")
         self.assertEqual(result.exit_code, 0)
 
     def test_witnessupdate(self):
         runner = CliRunner()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['-o', 'nextnode'])
         runner.invoke(cli, ['-o', 'witnessupdate', 'gtg', '--maximum_block_size', 65000, '--account_creation_fee', 0.1, '--sbd_interest_rate', 0, '--url', 'https://google.de', '--signing_key', wif])
         self.assertEqual(result.exit_code, 0)
@@ -407,11 +385,10 @@ class Testcases(unittest.TestCase):
 
     def test_nextnode(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['-o', 'nextnode'])
         self.assertEqual(result.exit_code, 0)
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
 
     def test_pingnode(self):
         runner = CliRunner()
@@ -420,38 +397,41 @@ class Testcases(unittest.TestCase):
         result = runner.invoke(cli, ['pingnode', '--raw'])
         self.assertEqual(result.exit_code, 0)
 
+    def test_updatenodes(self):
+        runner = CliRunner()
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
+        result = runner.invoke(cli, ['updatenodes', '--test'])
+        self.assertEqual(result.exit_code, 0)
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
+
     def test_currentnode(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['currentnode'])
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['currentnode', '--url'])
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['currentnode', '--version'])
         self.assertEqual(result.exit_code, 0)
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
 
     def test_ticker(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['ticker'])
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         self.assertEqual(result.exit_code, 0)
 
     def test_pricehistory(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['pricehistory'])
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         self.assertEqual(result.exit_code, 0)
 
     def test_pending(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['pending', 'test'])
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['pending', '--post', '--comment', '--curation', 'test'])
@@ -464,12 +444,11 @@ class Testcases(unittest.TestCase):
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['pending', '--post', '--comment', '--curation', '--author', '--permlink', '--length', '30', 'test'])
         self.assertEqual(result.exit_code, 0)
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
 
     def test_rewards(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['rewards', 'test'])
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['rewards', '--post', '--comment', '--curation', 'test'])
@@ -482,28 +461,25 @@ class Testcases(unittest.TestCase):
         self.assertEqual(result.exit_code, 0)
         result = runner.invoke(cli, ['rewards', '--post', '--comment', '--curation', '--author', '--permlink', '--length', '30', 'test'])
         self.assertEqual(result.exit_code, 0)
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
 
     def test_curation(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['curation', "@gtg/witness-gtg-log"])
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         self.assertEqual(result.exit_code, 0)
 
     def test_verify(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['verify', '--trx', '0'])
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         self.assertEqual(result.exit_code, 0)
 
     def test_tradehistory(self):
         runner = CliRunner()
-        nodelist = NodeList()
-        runner.invoke(cli, ['-o', 'set', 'nodes', ''])
+        runner.invoke(cli, ['-o', 'set', 'nodes', self.nodelist.get_nodes()])
         result = runner.invoke(cli, ['tradehistory'])
-        runner.invoke(cli, ['-o', 'set', 'nodes', str(nodelist.get_testnet())])
+        runner.invoke(cli, ['-o', 'set', 'nodes', str(self.nodelist.get_testnet())])
         self.assertEqual(result.exit_code, 0)
diff --git a/tests/beem/test_comment.py b/tests/beem/test_comment.py
index f5767a7f18b710cc136b3e09818568a4dc350766..2b8c425596cd6c345fa63f56bbcc1e9f4633e00f 100644
--- a/tests/beem/test_comment.py
+++ b/tests/beem/test_comment.py
@@ -20,6 +20,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             use_condenser=True,
diff --git a/tests/beem/test_connection.py b/tests/beem/test_connection.py
index 1e9c04aab265af98da37b17adc003a56b0b25f8c..6356ad8c595c75caadc9640b97d756c5c2151a1e 100644
--- a/tests/beem/test_connection.py
+++ b/tests/beem/test_connection.py
@@ -13,6 +13,7 @@ class Testcases(unittest.TestCase):
 
     def test_stm1stm2(self):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         b1 = Steem(
             node=nodelist.get_testnet(),
             nobroadcast=True,
@@ -29,6 +30,7 @@ class Testcases(unittest.TestCase):
 
     def test_default_connection(self):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         b1 = Steem(
             node=nodelist.get_testnet(),
             nobroadcast=True,
diff --git a/tests/beem/test_constants.py b/tests/beem/test_constants.py
index 99f3ecd1cab9efd0c07d0241170d899fe72ca07d..9e2f5638161670935f1cfd095c31390f7b13cbdd 100644
--- a/tests/beem/test_constants.py
+++ b/tests/beem/test_constants.py
@@ -21,6 +21,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
diff --git a/tests/beem/test_discussions.py b/tests/beem/test_discussions.py
index ba8419cec95fd0dd9c2dad04d5c0ebe1a22d4716..742673dca170861f5b953cb3149ba29365e30cf2 100644
--- a/tests/beem/test_discussions.py
+++ b/tests/beem/test_discussions.py
@@ -25,6 +25,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             use_condenser=True,
diff --git a/tests/beem/test_instance.py b/tests/beem/test_instance.py
index eec91a37b19a996289b66c13ac648a7a31af7a2d..5f82d9cd6cb653e4153ec507c97c900bd3a11fb2 100644
--- a/tests/beem/test_instance.py
+++ b/tests/beem/test_instance.py
@@ -38,13 +38,14 @@ core_unit = "STM"
 class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
-        nodelist = NodeList()
-        stm = Steem(node=nodelist.get_nodes())
+        cls.nodelist = NodeList()
+        cls.nodelist.update_nodes(steem_instance=Steem(node=cls.nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
+        stm = Steem(node=cls.nodelist.get_nodes())
         stm.config.refreshBackup()
         stm.set_default_nodes(["xyz"])
         del stm
 
-        cls.urls = nodelist.get_nodes()
+        cls.urls = cls.nodelist.get_nodes()
         cls.bts = Steem(
             node=cls.urls,
             nobroadcast=True,
@@ -54,8 +55,7 @@ class Testcases(unittest.TestCase):
 
     @classmethod
     def tearDownClass(cls):
-        nodelist = NodeList()
-        stm = Steem(node=nodelist.get_nodes())
+        stm = Steem(node=cls.nodelist.get_nodes())
         stm.config.recover_with_latest_backup()
 
     @parameterized.expand([
diff --git a/tests/beem/test_market.py b/tests/beem/test_market.py
index 306983b1cd5998e8437568c581f9027f7677a8d2..4916562545db9ef941e0d1d5294678dc9a1d8e97 100644
--- a/tests/beem/test_market.py
+++ b/tests/beem/test_market.py
@@ -22,6 +22,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
diff --git a/tests/beem/test_message.py b/tests/beem/test_message.py
index a9ab4e8f673d3c5c934ee38d819ad08070a1d9aa..53dae03bf406109afc6277381a69593b29ee28f9 100644
--- a/tests/beem/test_message.py
+++ b/tests/beem/test_message.py
@@ -5,20 +5,20 @@ from beem import Steem
 from beem.message import Message
 from beem.account import Account
 from beem.instance import set_shared_steem_instance
+from beem.nodelist import NodeList
 
 wif = "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"
 core_unit = "STM"
-nodes = ["wss://steemd.pevo.science", "wss://gtg.steem.house:8090", "wss://rpc.steemliberator.com", "wss://rpc.buildteam.io",
-         "wss://rpc.steemviz.com", "wss://seed.bitcoiner.me", "wss://node.steem.ws", "wss://steemd.steemgigs.org", "wss://steemd.steemit.com",
-         "wss://steemd.minnowsupportproject.org"]
 
 
 class Testcases(unittest.TestCase):
 
     @classmethod
     def setUpClass(cls):
+        nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
-            node=nodes,
+            node=nodelist.get_nodes(),
             nobroadcast=True,
             keys=[wif],
             num_retries=10
diff --git a/tests/beem/test_nodelist.py b/tests/beem/test_nodelist.py
new file mode 100644
index 0000000000000000000000000000000000000000..c318f19afa76d4d156b53d1b1852e51133971d6a
--- /dev/null
+++ b/tests/beem/test_nodelist.py
@@ -0,0 +1,36 @@
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+from builtins import super
+import unittest
+from beem import Steem, exceptions
+from beem.instance import set_shared_steem_instance
+from beem.account import Account
+from beem.nodelist import NodeList
+
+
+class Testcases(unittest.TestCase):
+    @classmethod
+    def setUpClass(cls):
+        nodelist = NodeList()
+        cls.bts = Steem(
+            node=nodelist.get_nodes(appbase=False),
+            nobroadcast=True,
+            num_retries=10
+        )
+        set_shared_steem_instance(cls.bts)
+
+    def test_get_nodes(self):
+        nodelist = NodeList()
+        all_nodes = nodelist.get_nodes(normal=True, appbase=True, dev=True, testnet=True)
+        self.assertEqual(len(nodelist), len(all_nodes))
+        https_nodes = nodelist.get_nodes(wss=False)
+        self.assertEqual(https_nodes[0][:5], 'https')
+
+    def test_nodes_update(self):
+        nodelist = NodeList()
+        all_nodes = nodelist.get_nodes(normal=True, appbase=True, dev=True, testnet=True)
+        nodelist.update_nodes(steem_instance=self.bts)
+        nodes = nodelist.get_nodes()
+        self.assertIn(nodes[0], all_nodes)
diff --git a/tests/beem/test_notify.py b/tests/beem/test_notify.py
index 1a483a338b0e625311c39681dff6cb84cc342586..39c7f8ad0294fa4c72edb9952280d7b5b39f2c99 100644
--- a/tests/beem/test_notify.py
+++ b/tests/beem/test_notify.py
@@ -39,6 +39,7 @@ class Testcases(unittest.TestCase):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         self.bts = Steem(
             node=nodelist.get_nodes(),
             nobroadcast=True,
diff --git a/tests/beem/test_price.py b/tests/beem/test_price.py
index 1cf88da4faa65f9747f5b27b0fc0591f66dffa7f..14beb82f9a5dbf99476a86d9a38a619015c28da7 100644
--- a/tests/beem/test_price.py
+++ b/tests/beem/test_price.py
@@ -15,6 +15,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         steem = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
diff --git a/tests/beem/test_steem.py b/tests/beem/test_steem.py
index f8f8621d1a5feaca83f7f9aa130bdebec50416ed..43c9a8f960cab819168eff8c21b618dfacff4029 100644
--- a/tests/beem/test_steem.py
+++ b/tests/beem/test_steem.py
@@ -31,16 +31,17 @@ class Testcases(unittest.TestCase):
 
     @classmethod
     def setUpClass(cls):
-        nodelist = NodeList()
+        cls.nodelist = NodeList()
+        cls.nodelist.update_nodes(steem_instance=Steem(node=cls.nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
-            node=nodelist.get_nodes(appbase=False),
+            node=cls.nodelist.get_nodes(appbase=False),
             nobroadcast=True,
             unsigned=True,
             data_refresh_time_seconds=900,
             keys={"active": wif, "owner": wif, "memo": wif},
             num_retries=10)
         cls.appbase = Steem(
-            node=nodelist.get_nodes(normal=False, appbase=True),
+            node=cls.nodelist.get_nodes(normal=False, appbase=True),
             nobroadcast=True,
             unsigned=True,
             data_refresh_time_seconds=900,
@@ -82,16 +83,15 @@ class Testcases(unittest.TestCase):
         ("appbase"),
     ])
     def test_create_account(self, node_param):
-        nodelist = NodeList()
         if node_param == "non_appbase":
-            bts = Steem(node=nodelist.get_nodes(appbase=False),
+            bts = Steem(node=self.nodelist.get_nodes(appbase=False),
                         nobroadcast=True,
                         unsigned=True,
                         data_refresh_time_seconds=900,
                         keys={"active": wif, "owner": wif, "memo": wif},
                         num_retries=10)
         elif node_param == "appbase":
-            bts = Steem(node=nodelist.get_nodes(normal=False, appbase=True),
+            bts = Steem(node=self.nodelist.get_nodes(normal=False, appbase=True),
                         nobroadcast=True,
                         unsigned=True,
                         data_refresh_time_seconds=900,
@@ -163,16 +163,15 @@ class Testcases(unittest.TestCase):
         ("appbase"),
     ])
     def test_create_account_password(self, node_param):
-        nodelist = NodeList()
         if node_param == "non_appbase":
-            bts = Steem(node=nodelist.get_nodes(appbase=False),
+            bts = Steem(node=self.nodelist.get_nodes(appbase=False),
                         nobroadcast=True,
                         unsigned=True,
                         data_refresh_time_seconds=900,
                         keys={"active": wif, "owner": wif, "memo": wif},
                         num_retries=10)
         elif node_param == "appbase":
-            bts = Steem(node=nodelist.get_nodes(normal=False, appbase=True),
+            bts = Steem(node=self.nodelist.get_nodes(normal=False, appbase=True),
                         nobroadcast=True,
                         unsigned=True,
                         data_refresh_time_seconds=900,
@@ -227,16 +226,15 @@ class Testcases(unittest.TestCase):
         ("appbase"),
     ])
     def test_create_account_with_delegation(self, node_param):
-        nodelist = NodeList()
         if node_param == "non_appbase":
-            bts = Steem(node=nodelist.get_nodes(appbase=False),
+            bts = Steem(node=self.nodelist.get_nodes(appbase=False),
                         nobroadcast=True,
                         unsigned=True,
                         data_refresh_time_seconds=900,
                         keys={"active": wif, "owner": wif, "memo": wif},
                         num_retries=10)
         elif node_param == "appbase":
-            bts = Steem(node=nodelist.get_nodes(normal=False, appbase=True),
+            bts = Steem(node=self.nodelist.get_nodes(normal=False, appbase=True),
                         nobroadcast=True,
                         unsigned=True,
                         data_refresh_time_seconds=900,
@@ -521,8 +519,7 @@ class Testcases(unittest.TestCase):
         self.assertFalse(bts.get_blockchain_version() == '0.0.0')
 
     def test_offline(self):
-        nodelist = NodeList()
-        bts = Steem(node=nodelist.get_nodes(appbase=False),
+        bts = Steem(node=self.nodelist.get_nodes(appbase=False),
                     offline=True,
                     data_refresh_time_seconds=900,
                     keys={"active": wif, "owner": wif, "memo": wif})
@@ -551,15 +548,14 @@ class Testcases(unittest.TestCase):
         ("appbase"),
     ])
     def test_properties(self, node_param):
-        nodelist = NodeList()
         if node_param == "non_appbase":
-            bts = Steem(node=nodelist.get_nodes(appbase=False),
+            bts = Steem(node=self.nodelist.get_nodes(appbase=False),
                         nobroadcast=True,
                         data_refresh_time_seconds=900,
                         keys={"active": wif, "owner": wif, "memo": wif},
                         num_retries=10)
         elif node_param == "appbase":
-            bts = Steem(node=nodelist.get_nodes(normal=False, appbase=True),
+            bts = Steem(node=self.nodelist.get_nodes(normal=False, appbase=True),
                         nobroadcast=True,
                         data_refresh_time_seconds=900,
                         keys={"active": wif, "owner": wif, "memo": wif},
diff --git a/tests/beem/test_steemconnect.py b/tests/beem/test_steemconnect.py
index 818ae1ec13996cd693bc12d1de77fcef12a1aedc..e5cdb03a1f26146cf20fec0460f4908c64a99e51 100644
--- a/tests/beem/test_steemconnect.py
+++ b/tests/beem/test_steemconnect.py
@@ -32,6 +32,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
diff --git a/tests/beem/test_storage.py b/tests/beem/test_storage.py
index e68cd7e832baf9d12c121aff80984bbcf4e41fe0..314da3aa8304b9da94e96cba64976badc031d396 100644
--- a/tests/beem/test_storage.py
+++ b/tests/beem/test_storage.py
@@ -33,6 +33,7 @@ class Testcases(unittest.TestCase):
         stm = shared_steem_instance()
         stm.config.refreshBackup()
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
 
         cls.stm = Steem(
             node=nodelist.get_nodes(appbase=False),
diff --git a/tests/beem/test_txbuffers.py b/tests/beem/test_txbuffers.py
index 458ac61d8811ed544003927c4cb846c648ecb511..7763cc1ad2fe2b1409abcd8331450612d92da539 100644
--- a/tests/beem/test_txbuffers.py
+++ b/tests/beem/test_txbuffers.py
@@ -32,6 +32,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.stm = Steem(
             node=nodelist.get_nodes(appbase=False),
             keys={"active": wif, "owner": wif, "memo": wif},
diff --git a/tests/beem/test_vote.py b/tests/beem/test_vote.py
index 259298b2fa0fa155cf78d4a0c7c6e06c9f939575..8bae9f54d11169e20371b4a4d1a13186d7d74c58 100644
--- a/tests/beem/test_vote.py
+++ b/tests/beem/test_vote.py
@@ -21,6 +21,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
@@ -40,7 +41,7 @@ class Testcases(unittest.TestCase):
 
         acc = Account("holger80", steem_instance=cls.bts)
         votes = acc.get_account_votes()
-        last_vote = votes[0]
+        last_vote = votes[-1]
 
         cls.authorpermvoter = '@' + last_vote['authorperm'] + '|' + acc["name"]
         [author, permlink, voter] = resolve_authorpermvoter(cls.authorpermvoter)
diff --git a/tests/beem/test_wallet.py b/tests/beem/test_wallet.py
index 8bb5b0df71be963b54c39faca34c78395c38657b..a3213b7981353118766eb8b782ab18107dd28cf1 100644
--- a/tests/beem/test_wallet.py
+++ b/tests/beem/test_wallet.py
@@ -24,6 +24,7 @@ class Testcases(unittest.TestCase):
         stm = shared_steem_instance()
         stm.config.refreshBackup()
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
 
         cls.stm = Steem(
             node=nodelist.get_nodes(appbase=False),
diff --git a/tests/beem/test_witness.py b/tests/beem/test_witness.py
index 9ad9958a29cc995d995f2ea43b816328d14d386c..5eb482a739f9b01a903a85002a4381e83e5a3daf 100644
--- a/tests/beem/test_witness.py
+++ b/tests/beem/test_witness.py
@@ -18,6 +18,7 @@ class Testcases(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         cls.bts = Steem(
             node=nodelist.get_nodes(appbase=False),
             nobroadcast=True,
diff --git a/tests/beemapi/test_steemnoderpc.py b/tests/beemapi/test_steemnoderpc.py
index d9c4df99f2ed01c49a0569895742bc0b6d14bc76..3ea0d22f632e0f2ee3ca752583b788c8a26d9758 100644
--- a/tests/beemapi/test_steemnoderpc.py
+++ b/tests/beemapi/test_steemnoderpc.py
@@ -17,40 +17,37 @@ from beemapi.websocket import SteemWebsocket
 from beemapi import exceptions
 from beemapi.exceptions import NumRetriesReached, CallRetriesReached
 from beem.instance import set_shared_steem_instance
+from beem.nodelist import NodeList
 # Py3 compatibility
 import sys
 
 wif = "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"
 core_unit = "STM"
-nodes = ["wss://steemd.pevo.science", "wss://gtg.steem.house:8090", "wss://rpc.steemliberator.com", "wss://rpc.buildteam.io",
-         "wss://rpc.steemviz.com", "wss://seed.bitcoiner.me", "wss://node.steem.ws", "wss://steemd.steemgigs.org", "wss://steemd.steemit.com",
-         "wss://steemd.minnowsupportproject.org"]
-nodes_https = ['https://api.steemit.com', 'https://steemd.privex.io', 'https://steemd.pevo.science', 'https://rpc.steemliberator.com',
-               'https://rpc.buildteam.io', 'https://steemd.minnowsupportproject.org', 'https://gtg.steem.house:8090', 'https://seed.bitcoiner.me']
-nodes_appbase = ["https://api.steemit.com", "wss://appbasetest.timcliff.com"]
-test_list = ["wss://steemd.doesnot.exists", "wss://api.steemit.com", "wss://steemd.pevo.science", "wss://gtg.steem.house:8090",
-             "https://api.steemit.com", "wss://appbasetest.timcliff.com", 'https://steemd.privex.io',
-             'https://steemd.pevo.science', 'https://rpc.steemliberator.com',
-             'https://rpc.buildteam.io', 'https://steemd.minnowsupportproject.org', 'https://gtg.steem.house:8090', 'https://seed.bitcoiner.me']
 
 
 class Testcases(unittest.TestCase):
 
     @classmethod
     def setUpClass(cls):
+        nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
+        cls.nodes = nodelist.get_nodes(https=False, appbase=False)
+        cls.nodes_https = nodelist.get_nodes(wss=False, appbase=False)
+        cls.nodes_appbase = nodelist.get_nodes(normal=False)
+        cls.test_list = nodelist.get_nodes()
         cls.bts = Steem(
-            node=nodes,
+            node=cls.nodes,
             nobroadcast=True,
             keys={"active": wif, "owner": wif, "memo": wif},
             num_retries=10
         )
         cls.appbase = Steem(
-            node=nodes_appbase,
+            node=cls.nodes_appbase,
             nobroadcast=True,
             keys={"active": wif, "owner": wif, "memo": wif},
             num_retries=10
         )
-        cls.rpc = SteemNodeRPC(urls=test_list)
+        cls.rpc = SteemNodeRPC(urls=cls.test_list)
         # from getpass import getpass
         # self.bts.wallet.unlock(getpass())
         set_shared_steem_instance(cls.bts)
@@ -87,30 +84,30 @@ class Testcases(unittest.TestCase):
 
     def test_connect_test_node(self):
         rpc = self.rpc
-        self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https)
+        self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https)
         rpc.rpcclose()
         rpc.rpcconnect()
-        self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https)
+        self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https)
 
     def test_connect_test_node2(self):
         rpc = self.rpc
-        self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https)
+        self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https)
         rpc.next()
-        self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https)
+        self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https)
 
     def test_connect_test_str_list(self):
         str_list = "wss://steemd.pevo.science;wss://gtg.steem.house:8090;wss://rpc.steemliberator.com;wss://rpc.buildteam.io"
         rpc = SteemNodeRPC(urls=str_list)
-        self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https)
+        self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https)
         rpc.next()
-        self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https)
+        self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https)
 
     def test_connect_test_str_list2(self):
         str_list = "wss://steemd.pevo.science, wss://gtg.steem.house:8090, wss://rpc.steemliberator.com, wss://rpc.buildteam.io"
         rpc = SteemNodeRPC(urls=str_list)
-        self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https)
+        self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https)
         rpc.next()
-        self.assertIn(rpc.url, nodes + nodes_appbase + nodes_https)
+        self.assertIn(rpc.url, self.nodes + self.nodes_appbase + self.nodes_https)
 
     def test_server_error(self):
         rpc = self.rpc
@@ -189,7 +186,7 @@ class Testcases(unittest.TestCase):
             SteemNodeRPC(urls=nodes, num_retries=0, num_retries_call=0, timeout=1)
 
     def test_error_handling(self):
-        rpc = SteemNodeRPC(urls=nodes, num_retries=2, num_retries_call=3)
+        rpc = SteemNodeRPC(urls=self.nodes, num_retries=2, num_retries_call=3)
         with self.assertRaises(
             exceptions.NoMethodWithName
         ):
@@ -200,7 +197,7 @@ class Testcases(unittest.TestCase):
             rpc.get_accounts("test")
 
     def test_error_handling_appbase(self):
-        rpc = SteemNodeRPC(urls=nodes_appbase, num_retries=2, num_retries_call=3)
+        rpc = SteemNodeRPC(urls=self.nodes_appbase, num_retries=2, num_retries_call=3)
         with self.assertRaises(
             exceptions.NoMethodWithName
         ):
diff --git a/tests/beemapi/test_websocket.py b/tests/beemapi/test_websocket.py
index 9b314bf54537a5d1309cfb8b5f9856ccd9aa7ce3..0b2bb21cb66b19d40bad6ca9ad75903a46db0eaf 100644
--- a/tests/beemapi/test_websocket.py
+++ b/tests/beemapi/test_websocket.py
@@ -26,6 +26,7 @@ class Testcases(unittest.TestCase):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         nodelist = NodeList()
+        nodelist.update_nodes(steem_instance=Steem(node=nodelist.get_nodes(normal=True, appbase=True), num_retries=10))
         stm = Steem(node=nodelist.get_nodes(appbase=False))
 
         self.ws = SteemWebsocket(