diff --git a/src/cutecoin/core/community.py b/src/cutecoin/core/community.py
index 5ccf5d0e06cc62a0dc7fb66be0745fba7cc15060..5138b40576df28cf5b0c6603f6ec6cab105bb268 100644
--- a/src/cutecoin/core/community.py
+++ b/src/cutecoin/core/community.py
@@ -9,6 +9,7 @@ from ucoinpy import PROTOCOL_VERSION
 from ucoinpy.documents.peer import Peer, Endpoint, BMAEndpoint
 from ucoinpy.documents.block import Block
 import logging
+import time
 
 
 class Community(object):
@@ -21,6 +22,8 @@ class Community(object):
         '''
         self.currency = currency
         self.peers = peers
+        self.requests_cache = None
+        self.last_block = None
 
     @classmethod
     def create(cls, currency, peer):
@@ -100,9 +103,41 @@ class Community(object):
         logging.debug("Peers : {0}".format(self.peers))
         for peer in self.peers:
             e = next(e for e in peer.endpoints if type(e) is BMAEndpoint)
-            logging.debug("Trying to connect to : " + peer.pubkey)
-            req = request(e.conn_handler(), **req_args)
-            data = req.get(**get_args)
+            # We request the current block every five minutes
+            # If a new block is mined we reset the cache
+            if self.last_block is None:
+                block = bma.blockchain.Current(e.conn_handler()).get()
+                self.last_block = {"request_ts": time.time(),
+                                   "number": block['number']}
+            elif self.last_block["request_ts"] < time.time() - 300:
+                block = bma.blockchain.Current(e.conn_handler()).get()
+                self.last_block = {"request_ts": time.time(),
+                                   "number": block['number']}
+                self.requests_cache = None
+
+            cache_key = (hash(request),
+                         hash(tuple(frozenset(sorted(req_args.keys())))),
+                         hash(tuple(frozenset(sorted(req_args.items())))),
+                         hash(tuple(frozenset(sorted(get_args.keys())))),
+                         hash(tuple(frozenset(sorted(get_args.items())))))
+
+            # If the cache was cleared, let's initialize a new one
+            if self.requests_cache is None:
+                req = request(e.conn_handler(), **req_args)
+                data = req.get(**get_args)
+                self.requests_cache = {cache_key: data}
+            else:
+                if cache_key in self.requests_cache.keys():
+                    logging.debug("Cache : {0} : {1}".format(cache_key,
+                                                             self.requests_cache[cache_key]))
+                    return self.requests_cache[cache_key]
+                # If we cant find it, we request for it
+                else:
+                    logging.debug("Connecting to {0}:{1}".format(e.server,
+                                                                 e.port))
+                    req = request(e.conn_handler(), **req_args)
+                    data = req.get(**get_args)
+                    self.requests_cache[cache_key] = data
             return data
 
     def post(self, request, req_args={}, post_args={}):
diff --git a/src/cutecoin/core/wallet.py b/src/cutecoin/core/wallet.py
index 9fd274fbdbcc5023bfc9bf42287897523abf370e..f833d2e641e87a10198623a55cbbdff0c920f501 100644
--- a/src/cutecoin/core/wallet.py
+++ b/src/cutecoin/core/wallet.py
@@ -14,7 +14,6 @@ import base64
 
 
 class Wallet(object):
-
     '''
     A wallet is used to manage money with a unique key.
     '''