diff --git a/beem/blockchain.py b/beem/blockchain.py
index 72638b8a3f4a36ae81ce0fb1d59299fdc3c2edbb..cd364283bf5499461012b2d3fd1c512c8c53bda0 100644
--- a/beem/blockchain.py
+++ b/beem/blockchain.py
@@ -221,7 +221,7 @@ class Blockchain(object):
             if kwargs.get("steem_instance"):
                 blockchain_instance = kwargs["steem_instance"]
             elif kwargs.get("hive_instance"):
-                blockchain_instance = kwargs["hive_instance"]        
+                blockchain_instance = kwargs["hive_instance"]
         self.blockchain = blockchain_instance or shared_blockchain_instance()
 
         if mode == "irreversible":
@@ -313,7 +313,7 @@ class Blockchain(object):
                       when instantiating from this class.
 
             .. code-block:: python
-        
+
                 >>> from beem.blockchain import Blockchain
                 >>> from datetime import datetime
                 >>> blockchain = Blockchain()
@@ -339,10 +339,10 @@ class Blockchain(object):
             if block_number > last_block.identifier:
                 block_number = last_block.identifier
             block_time_diff = timedelta(seconds=10)
-            
+
             last_block_time_diff_seconds = 10
             second_last_block_time_diff_seconds = 10
-            
+
             while block_time_diff.total_seconds() > self.block_interval or block_time_diff.total_seconds() < -self.block_interval:
                 block = BlockHeader(block_number, blockchain_instance=self.blockchain)
                 second_last_block_time_diff_seconds = last_block_time_diff_seconds
@@ -518,54 +518,43 @@ class Blockchain(object):
                     # Get full block
                     if (head_block - blocknumblock) < batches:
                         batches = head_block - blocknumblock + 1
-                    for blocknum in range(blocknumblock, blocknumblock + batches - 1):
-                        if only_virtual_ops:
-                            if self.blockchain.rpc.get_use_appbase():
-                                # self.blockchain.rpc.get_ops_in_block({"block_num": blocknum, 'only_virtual': only_virtual_ops}, api="account_history", add_to_queue=True)
-                                self.blockchain.rpc.get_ops_in_block(blocknum, only_virtual_ops, add_to_queue=True)
-                            else:
-                                self.blockchain.rpc.get_ops_in_block(blocknum, only_virtual_ops, add_to_queue=True)
+                    # add up to 'batches' calls to the queue
+                    block_batch = []
+                    for blocknum in range(blocknumblock, blocknumblock + batches):
+                        if blocknum == blocknumblock + batches - 1:
+                            add_to_queue = False  # execute the call with the last request
                         else:
-                            if self.blockchain.rpc.get_use_appbase():
-                                self.blockchain.rpc.get_block({"block_num": blocknum}, api="block", add_to_queue=True)
-                            else:
-                                self.blockchain.rpc.get_block(blocknum, add_to_queue=True)
-                        latest_block = blocknum
-                    if batches >= 1:
-                        latest_block += 1
-                    if latest_block <= head_block:
+                            add_to_queue = True  # append request to the queue w/o executing
                         if only_virtual_ops:
                             if self.blockchain.rpc.get_use_appbase():
-                                # self.blockchain.rpc.get_ops_in_block({"block_num": blocknum, 'only_virtual': only_virtual_ops}, api="account_history", add_to_queue=False)
-                                block_batch = self.blockchain.rpc.get_ops_in_block(blocknum, only_virtual_ops, add_to_queue=False)
+                                block_batch = self.blockchain.rpc.get_ops_in_block({"block_num": blocknum, 'only_virtual': only_virtual_ops}, api="account_history", add_to_queue=add_to_queue)
                             else:
-                                block_batch = self.blockchain.rpc.get_ops_in_block(blocknum, only_virtual_ops, add_to_queue=False)
+                                block_batch = self.blockchain.rpc.get_ops_in_block(blocknum, only_virtual_ops, add_to_queue=add_to_queue)
                         else:
                             if self.blockchain.rpc.get_use_appbase():
-                                block_batch = self.blockchain.rpc.get_block({"block_num": latest_block}, api="block", add_to_queue=False)
+                                block_batch = self.blockchain.rpc.get_block({"block_num": blocknum}, api="block", add_to_queue=add_to_queue)
                             else:
-                                block_batch = self.blockchain.rpc.get_block(latest_block, add_to_queue=False)
-                        if not bool(block_batch):
-                            raise BatchedCallsNotSupported()
-                        blocknum = latest_block - len(block_batch) + 1
-                        if not isinstance(block_batch, list):
-                            block_batch = [block_batch]
-                        for block in block_batch:
-                            if not bool(block):
-                                continue
-                            if self.blockchain.rpc.get_use_appbase():
-                                if only_virtual_ops:
-                                    block = {'block': block[0]["block"],
-                                             'timestamp': block[0]["timestamp"],
-                                             'id': block[0]['block'],
-                                             'operations': block}
-                                else:
-                                    block = block["block"]
-                            block = Block(block, only_ops=only_ops, only_virtual_ops=only_virtual_ops, blockchain_instance=self.blockchain)
-                            block["id"] = block.block_num
-                            block.identifier = block.block_num
-                            yield block
-                            blocknum = block.block_num
+                                block_batch = self.blockchain.rpc.get_block(blocknum, add_to_queue=add_to_queue)
+
+                    if not bool(block_batch):
+                        raise BatchedCallsNotSupported()
+                    if not isinstance(block_batch, list):
+                        block_batch = [block_batch]
+                    for block in block_batch:
+                        if not bool(block):
+                            continue
+                        if self.blockchain.rpc.get_use_appbase():
+                            if only_virtual_ops:
+                                block = {'block': block['ops'][0]["block"],
+                                         'timestamp': block['ops'][0]["timestamp"],
+                                         'id': block['ops'][0]['block'],
+                                         'operations': block['ops']}
+                            else:
+                                block = block["block"]
+                        block = Block(block, only_ops=only_ops, only_virtual_ops=only_virtual_ops, blockchain_instance=self.blockchain)
+                        block["id"] = block.block_num
+                        block.identifier = block.block_num
+                        yield block
             else:
                 # Blocks from start until head block
                 for blocknum in range(start, head_block + 1):