diff --git a/src/cutecoin/core/app.py b/src/cutecoin/core/app.py
index 9734fc76942a3bd47ba8c8b5c2c045299bbf47e5..ec276baedc808e087cd770bfa70b6e03c9e321b5 100644
--- a/src/cutecoin/core/app.py
+++ b/src/cutecoin/core/app.py
@@ -92,9 +92,9 @@ class Application(object):
             if os.path.exists(wallet_path):
                 json_data = open(wallet_path, 'r')
                 data = json.load(json_data)
-                wallet.cache.load_from_json(data)
+                wallet.load_caches(data)
             for community in account.communities:
-                wallet.cache.refresh(community)
+                wallet.refresh_cache(community)
 
     def save(self, account):
         with open(config.parameters['data'], 'w') as outfile:
@@ -114,7 +114,7 @@ class Application(object):
             wallet_path = os.path.join(config.parameters['home'],
                                         account.name, '__cache__', wallet.pubkey)
             with open(wallet_path, 'w') as outfile:
-                json.dump(wallet.cache.jsonify(), outfile, indent=4, sort_keys=True)
+                json.dump(wallet.jsonify_caches(), outfile, indent=4, sort_keys=True)
 
     def import_account(self, file, name):
         with tarfile.open(file, "r") as tar:
diff --git a/src/cutecoin/core/wallet.py b/src/cutecoin/core/wallet.py
index 0b260dfe91680a84690d66c3ceeae08dbadc6781..b01501d4904793fa0a26f1efb06100911f0a24a0 100644
--- a/src/cutecoin/core/wallet.py
+++ b/src/cutecoin/core/wallet.py
@@ -17,6 +17,7 @@ class Cache():
     def __init__(self, wallet):
         self.latest_block = 0
         self.wallet = wallet
+
         self.tx_sent = []
         self.awaiting_tx = []
         self.tx_received = []
@@ -131,7 +132,7 @@ class Wallet(object):
         self.walletid = walletid
         self.pubkey = pubkey
         self.name = name
-        self.cache = Cache(self)
+        self.caches = {}
 
     @classmethod
     def create(cls, walletid, salt, password, name):
@@ -151,6 +152,20 @@ class Wallet(object):
     def __eq__(self, other):
         return (self.keyid == other.keyid)
 
+    def load_caches(self, json_data):
+        for currency in json_data:
+            self.caches[currency] = Cache(self)
+            self.caches[currency].load_from_json(json_data[currency])
+
+    def jsonify_caches(self):
+        for currency in self.caches:
+            return {currency: self.caches[currency].jsonify()}
+
+    def refresh_cache(self, community):
+        if community.currency not in self.caches:
+            self.caches[community.currency] = Cache(self)
+        self.caches[community.currency].refresh(community)
+
     def check_password(self, salt, password):
         key = None
         if self.walletid == 0:
@@ -174,16 +189,17 @@ class Wallet(object):
     def tx_inputs(self, amount, community):
         value = 0
         inputs = []
+        cache = self.caches[community.currency]
 
-        logging.debug("Available inputs : {0}".format(self.cache.available_sources))
-        buf_inputs = list(self.cache.available_sources)
-        for s in self.cache.available_sources:
+        logging.debug("Available inputs : {0}".format(cache.available_sources))
+        buf_inputs = list(cache.available_sources)
+        for s in cache.available_sources:
             value += s.amount
             s.index = 0
             inputs.append(s)
             buf_inputs.remove(s)
             if value >= amount:
-                self.cache.available_sources = buf_inputs
+                cache.available_sources = buf_inputs
                 return inputs
 
         raise NotEnoughMoneyError(value, community.currency,
@@ -226,7 +242,7 @@ class Wallet(object):
         try:
             community.broadcast(bma.tx.Process,
                         post_args={'transaction': tx.signed_raw()})
-            self.cache.awaiting_tx.append(tx)
+            self.caches[community.currency].awaiting_tx.append(tx)
         except:
             raise
 
@@ -239,13 +255,13 @@ class Wallet(object):
         return tx
 
     def transactions_awaiting(self, community):
-        return self.cache.awaiting(community)
+        return self.caches[community.currency].awaiting(community)
 
     def transactions_sent(self, community):
-        return self.cache.latest_sent(community)
+        return self.caches[community.currency].latest_sent(community)
 
     def transactions_received(self, community):
-        return self.cache.latest_received(community)
+        return self.caches[community.currency].latest_received(community)
 
     def get_text(self, community):
         return "%s : \n \