diff --git a/src/cutecoin/core/app.py b/src/cutecoin/core/app.py
index f081ebce08c04df507951c7d0f3fdda0d54bf3ff..8ff973b70f8014c27b1f301e6417d53b34f9fb93 100644
--- a/src/cutecoin/core/app.py
+++ b/src/cutecoin/core/app.py
@@ -57,7 +57,10 @@ class Application(object):
         self.accounts.remove(account)
 
     def change_current_account(self, account):
+        if self.current_account is not None:
+            self.save_cache(self.current_account)
         self.current_account = account
+        self.load_cache(account)
 
     def load(self):
         if not os.path.exists(config.parameters['home']):
@@ -76,7 +79,17 @@ class Application(object):
                                             account_name, 'properties')
                 json_data = open(account_path, 'r')
                 data = json.load(json_data)
-                self.accounts.append(Account.load(data))
+                account = Account.load(data)
+                self.accounts.append(account)
+
+    def load_cache(self, account):
+        for wallet in account.wallets:
+            wallet_path = os.path.join(config.parameters['home'],
+                                        account.name, wallet.pubkey)
+            if os.path.exists(wallet_path):
+                json_data = open(wallet_path, 'r')
+                data = json.load(json_data)
+                wallet.cache.load_from_json(data)
 
     def save(self, account):
         with open(config.parameters['data'], 'w') as outfile:
@@ -87,6 +100,13 @@ class Application(object):
         with open(account_path, 'w') as outfile:
             json.dump(account.jsonify(), outfile, indent=4, sort_keys=True)
 
+    def save_cache(self, account):
+        for wallet in account.wallets:
+            wallet_path = os.path.join(config.parameters['home'],
+                                        account.name, wallet.pubkey)
+            with open(wallet_path, 'w') as outfile:
+                json.dump(wallet.cache.jsonify(), outfile, indent=4, sort_keys=True)
+
     def import_account(self, file, name):
         with tarfile.open(file, "r") as tar:
             path = os.path.join(config.parameters['home'],
diff --git a/src/cutecoin/core/wallet.py b/src/cutecoin/core/wallet.py
index 92f41a39907fb4df9c83fe468604a726497940f1..4aebe4998b39bc2dd8d839d2100c6495f44c8a11 100644
--- a/src/cutecoin/core/wallet.py
+++ b/src/cutecoin/core/wallet.py
@@ -20,15 +20,27 @@ class Cache():
         self.tx_sent = []
         self.tx_received = []
 
-    def from_json(self, data):
-        pass
+    def load_from_json(self, data):
+        self.tx_received = []
+        self.tx_sent = []
+        data_received = data['received']
+        for r in data_received:
+            self.tx_received.append(Transaction.from_signed_raw(r['raw']))
+        data_sent = data['sent']
+        for s in data_sent:
+            self.tx_sent.append(Transaction.from_signed_raw(s['raw']))
+        self.latest_block = data['latest_block']
 
-    def to_json(self):
+    def jsonify(self):
         data_received = []
         for r in self.tx_received:
-            data_received.append({'amount': r.amount,
-                                  'pubkey': r.pubkey})
-        return {'received': data_received}
+            data_received.append({'raw': r.signed_raw()})
+        data_sent = []
+        for s in self.tx_sent:
+            data_sent.append({'raw': s.signed_raw()})
+        return {'latest_block': self.latest_block,
+                'received': data_received,
+                'sent': data_sent}
 
     def latest_sent(self, community):
         self._refresh(community)
diff --git a/src/cutecoin/gui/mainwindow.py b/src/cutecoin/gui/mainwindow.py
index d41a105579fe7d5b7b29305a06b5d5f4cf577921..2ca1c3a13b50155e0401a0835a9836746e0baecf 100644
--- a/src/cutecoin/gui/mainwindow.py
+++ b/src/cutecoin/gui/mainwindow.py
@@ -38,8 +38,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
         dialog.exec_()
 
     def action_change_account(self, account_name):
-        self.app.current_account = self.app.get_account(account_name)
-        logging.info('Changing account to ' + self.app.current_account.name)
+        self.app.change_current_account(self.app.get_account(account_name))
         self.refresh()
 
     def open_transfer_money_dialog(self):
@@ -116,3 +115,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
         else:
             path = selected_file[0] + ".acc"
         self.app.export_account(path, self.app.current_account)
+
+    def closeEvent(self, event):
+        self.app.save_cache(self.app.current_account)
+        super().closeEvent(event)
+