diff --git a/src/cutecoin/models/coin/__init__.py b/src/cutecoin/models/coin/__init__.py
index 22407fbd85a8491de9487b6ab8291cc2693bdd2e..5c31cd0239c5ee954fbeb73f91d3fb9f21099117 100644
--- a/src/cutecoin/models/coin/__init__.py
+++ b/src/cutecoin/models/coin/__init__.py
@@ -7,7 +7,8 @@ Created on 2 févr. 2014
 import re
 import math
 import logging
-import ucoin
+import importlib
+from cutecoin.tools.exceptions import AlgorithmNotImplemented
 
 
 class Coin(object):
@@ -22,7 +23,7 @@ class Coin(object):
         self.coin_number = coin_number
 
     @classmethod
-    def from_id(cls, coin_id):
+    def from_id(cls, wallet, coin_id):
         # Regex to parse the coin id
         regex = "^([A-Z\d]{40})-(\d+)-(\d+)$"
         m = re.search(regex, coin_id)
@@ -35,9 +36,20 @@ class Coin(object):
         return self.get_id() == other.get_id()
 
     def value(self, wallet):
-        amendment_request = ucoin.hdc.amendments.view.Self(self.am_number)
-        amendment = wallet.request(amendment_request)
-        return wallet.coin_algo(amendment, self.coin_number)
+        amendment = wallet.get_amendment(self.am_number)
+        if 'CoinAlgo' in amendment:
+            coin_algo_name = self.amendment['CoinAlgo']
+        else:
+            coin_algo_name = 'Base2Draft'
+
+        try:
+            module = importlib.import_module("cutecoin.models.coin.algorithms")
+            coin_algo_class = getattr(module, coin_algo_name)
+            coin_algo = coin_algo_class({})
+        except AttributeError:
+            raise AlgorithmNotImplemented(coin_algo_name)
+
+        return coin_algo(amendment, self.coin_number)
 
     def get_id(self):
         return self.issuer + "-" \
diff --git a/src/cutecoin/models/coin/algorithms.py b/src/cutecoin/models/coin/algorithms.py
index 13a4c7d4bf2911f9f984addd276554003a7b84dd..0888d262927be70b3ac40a935c6e6fdba44e6ee9 100644
--- a/src/cutecoin/models/coin/algorithms.py
+++ b/src/cutecoin/models/coin/algorithms.py
@@ -6,6 +6,7 @@ Created on 21 mai 2014
 
 import math
 
+
 class Algorithm(object):
     '''
     classdocs
@@ -16,18 +17,18 @@ class Algorithm(object):
         '''
         self.parameters = parameters
 
-    def coin_value(self, amendement, coin_number):
+    def __call__(self, amendment, coin_number):
         pass
 
 
 class Base2Draft(Algorithm):
 
     def __init__(self, parameters):
-        super.__init__(parameters)
+        super().__init__(parameters)
 
-    def coin_value(self, amendment, coin_number):
-        coin_base = amendment['CoinBase']
-        coins_list = amendment['CoinsList']
+    def __call__(self, amendment, coin_number):
+        coin_base = amendment['coinBase']
+        coins_list = amendment['coinList']
         i = 0
         while coin_number > coins_list[i]:
             coin_number -= coins_list[i]
diff --git a/src/cutecoin/models/wallet/__init__.py b/src/cutecoin/models/wallet/__init__.py
index 18d33999936ebcc134eb868c7485232d91b96ca1..57ea71402cba04ee60c7ee795a953406f811c308 100644
--- a/src/cutecoin/models/wallet/__init__.py
+++ b/src/cutecoin/models/wallet/__init__.py
@@ -35,7 +35,7 @@ class Wallet(object):
         self.name = name
         self.nodes = nodes
         self.required_trusts = required_trusts
-        self.coin_algo = None
+        self.amendments_cache = {}
 
     @classmethod
     def create(cls, keyid, currency, node, required_trusts, name):
@@ -65,27 +65,16 @@ class Wallet(object):
     def value(self):
         value = 0
         for coin in self.coins:
-            value += coin.value(self.coin_algo)
+            value += coin.value(self)
         return value
 
+    #TODO: Enhance this code. Loading the amendment each time we load a coin is bad
     def refresh_coins(self):
         coins_list_request = ucoin.hdc.coins.List(self.fingerprint())
         data = self.request(coins_list_request)
         for coin_data in data['coins']:
-            coin = Coin.from_id(coin_data)
+            coin = Coin.from_id(self, coin_data)
             self.coins.append(coin)
-        node_parameters = self.request(ucoin.registry.Parameters())
-
-        if 'CoinAlgo' in node_parameters:
-            coin_algo_name = node_parameters['CoinAlgo']
-        else:
-            coin_algo_name = 'Base2Draft'
-
-        try:
-            module = importlib.import_module("cutecoin.models.coin.algorithm")
-            self.coin_algo = module.getattr(module, coin_algo_name)
-        except AttributeError:
-            raise AlgorithmNotImplemented(coin_algo_name)
 
     def transactions_received(self):
         received = []
@@ -202,6 +191,15 @@ Hosters:
     def hosters(self):
         return [node for node in self.nodes if node.hoster]
 
+    def get_amendment(self, am_number):
+        if am_number in self.amendments_cache:
+            return self.amendments_cache[am_number]
+        else:
+            amendment_req = ucoin.hdc.amendments.Promoted(am_number)
+            new_am = self.request(amendment_req)
+            self.amendments_cache[am_number] = new_am
+            return new_am
+
     def fingerprint(self):
         gpg = gnupg.GPG()
         available_keys = gpg.list_keys()
diff --git a/src/cutecoin/tools/exceptions.py b/src/cutecoin/tools/exceptions.py
index 96403b03891404f2fe39c9a24d7c718ccaefe454..c40723ccf8a2067fa3cc1251a00591bf22ea2b94 100644
--- a/src/cutecoin/tools/exceptions.py
+++ b/src/cutecoin/tools/exceptions.py
@@ -60,7 +60,7 @@ class AlgorithmNotImplemented(Error):
         Constructor
         '''
         super(AlgorithmNotImplemented, self) \
-            .__init("Algorithm " + algo_name + " not implemented.")
+            .__init__("Algorithm " + algo_name + " not implemented.")
 
 
 class KeyAlreadyUsed(Error):
@@ -79,8 +79,7 @@ class KeyAlreadyUsed(Error):
             self) .__init__(
             "Cannot add account " +
             new_account.name +
-            " : "
-            " the pgpKey " +
+            " : the pgpKey " +
             keyid +
             " is already used by " +
             found_account.name)