diff --git a/src/sakia/app.py b/src/sakia/app.py
index a49bb3556d404621d55f6e90a5e1807428398df3..aa1f9358c675beeadab3f2945c826adfdc8ab947 100644
--- a/src/sakia/app.py
+++ b/src/sakia/app.py
@@ -15,9 +15,10 @@ from duniterpy.api.bma import API
 from . import __version__
 from .options import SakiaOptions
 from sakia.data.connectors import BmaConnector
-from sakia.services import NetworkService, BlockchainService, IdentitiesService
+from sakia.services import NetworkService, BlockchainService, IdentitiesService, SourcesServices
 from sakia.data.repositories import SakiaDatabase
-from sakia.data.processors import BlockchainProcessor, NodesProcessor, IdentitiesProcessor, CertificationsProcessor
+from sakia.data.processors import BlockchainProcessor, NodesProcessor, IdentitiesProcessor, \
+    CertificationsProcessor, SourcesProcessor
 from sakia.data.files import AppDataFile, UserParametersFile
 from sakia.decorators import asyncify
 from sakia.money import Relative
@@ -85,11 +86,13 @@ class Application(QObject):
         bma_connector = BmaConnector(nodes_processor)
         identities_processor = IdentitiesProcessor(self.db.identities_repo, self.db.blockchains_repo, bma_connector)
         certs_processor = CertificationsProcessor(self.db.certifications_repo, bma_connector)
-        blockchain_processor = BlockchainProcessor(self.db.blockchains_repo, bma_connector)
+        blockchain_processor = BlockchainProcessor.instanciate(self)
+        sources_processor = SourcesProcessor.instanciate(self)
 
         self.blockchain_services = {}
         self.network_services = {}
         self.identities_services = {}
+        self.sources_services = {}
         for currency in self.db.connections_repo.get_currencies():
             self.identities_services[currency] = IdentitiesService(currency, identities_processor,
                                                                    certs_processor, blockchain_processor,
@@ -98,6 +101,7 @@ class Application(QObject):
                                                                    self.identities_services[currency])
             self.network_services[currency] = NetworkService.load(currency, nodes_processor,
                                                                   self.blockchain_services[currency])
+            self.sources_services[currency] = SourcesServices(currency, sources_processor, bma_connector)
 
     def set_proxy(self):
         if self.preferences['enable_proxy'] is True:
diff --git a/src/sakia/data/processors/blockchain.py b/src/sakia/data/processors/blockchain.py
index fb67afc682ccb2a21ff86933f48ebd1a9ecf6a7d..569ae051e31ef7f2b41f908350c5beff732d63d8 100644
--- a/src/sakia/data/processors/blockchain.py
+++ b/src/sakia/data/processors/blockchain.py
@@ -27,42 +27,49 @@ class BlockchainProcessor:
         Get the local current blockuid
         :rtype: duniterpy.documents.BlockUID
         """
-        return self._repo.get_one({'currency': currency}).current_buid
+        return self._repo.get_one(currency=currency).current_buid
 
     def time(self, currency):
         """
         Get the local current median time
         :rtype: int
         """
-        return self._repo.get_one({'currency': currency}).median_time
+        return self._repo.get_one(currency=currency).median_time
 
     def parameters(self, currency):
         """
         Get the parameters of the blockchain
         :rtype: sakia.data.entities.BlockchainParameters
         """
-        return self._repo.get_one({'currency': currency}).parameters
+        return self._repo.get_one(currency=currency).parameters
 
-    def monetary_mass(self, currency):
+    def current_mass(self, currency):
         """
         Get the local current monetary mass
         :rtype: int
         """
-        return self._repo.get_one({'currency': currency}).monetary_mass
+        return self._repo.get_one(currency=currency).current_mass
 
-    def members_count(self, currency):
+    def current_members_count(self, currency):
         """
         Get the number of members in the blockchain
         :rtype: int
         """
-        return self._repo.get_one({'currency': currency}).members_count
+        return self._repo.get_one(currency=currency).current_members_count
+
+    def last_members_count(self, currency):
+        """
+        Get the last ud value and base
+        :rtype: int, int
+        """
+        return self._repo.get_one(currency=currency).last_members_count
 
     def last_ud(self, currency):
         """
         Get the last ud value and base
         :rtype: int, int
         """
-        blockchain = self._repo.get_one({'currency': currency})
+        blockchain = self._repo.get_one(currency=currency)
         return blockchain.last_ud, blockchain.last_ud_base
 
     def last_ud_time(self, currency):
@@ -70,7 +77,7 @@ class BlockchainProcessor:
         Get the last ud time
         :rtype: int
         """
-        blockchain = self._repo.get_one({'currency': currency})
+        blockchain = self._repo.get_one(currency=currency)
         return blockchain.last_ud_time
 
     def previous_monetary_mass(self, currency):
@@ -78,21 +85,21 @@ class BlockchainProcessor:
         Get the local current monetary mass
         :rtype: int
         """
-        return self._repo.get_one({'currency': currency}).previous_mass
+        return self._repo.get_one(currency=currency).previous_mass
 
     def previous_members_count(self, currency):
         """
         Get the local current monetary mass
         :rtype: int
         """
-        return self._repo.get_one({'currency': currency}).previous_members_count
+        return self._repo.get_one(currency=currency).previous_members_count
 
     def previous_ud(self, currency):
         """
         Get the previous ud value and base
         :rtype: int, int
         """
-        blockchain = self._repo.get_one({'currency': currency})
+        blockchain = self._repo.get_one(currency=currency)
         return blockchain.previous_ud, blockchain.previous_ud_base
 
     def previous_ud_time(self, currency):
@@ -100,7 +107,7 @@ class BlockchainProcessor:
         Get the previous ud time
         :rtype: int
         """
-        blockchain = self._repo.get_one({'currency': currency})
+        blockchain = self._repo.get_one(currency=currency)
         return blockchain.previous_ud_time
 
     async def new_blocks_with_identities(self, currency):
@@ -175,6 +182,7 @@ class BlockchainProcessor:
                 block = Block.from_signed_raw(signed_raw)
                 blockchain.current_buid = block.blockUID
                 blockchain.median_time = block.mediantime
+                blockchain.current_members_count = block.members_count
             except errors.DuniterError as e:
                 if e.ucode != errors.NO_CURRENT_BLOCK:
                     raise
@@ -191,11 +199,11 @@ class BlockchainProcessor:
                     block_with_ud = await self._bma_connector.get(currency, bma.blockchain.Block,
                                                                   req_args={'number': block_number})
                     if block_with_ud:
+                        blockchain.last_members_count = block_with_ud['membersCount']
                         blockchain.last_ud = block_with_ud['dividend']
                         blockchain.last_ud_base = block_with_ud['unitbase']
                         blockchain.last_ud_time = block_with_ud['medianTime']
                         blockchain.current_mass = block_with_ud['monetaryMass']
-                        blockchain.nb_members = block_with_ud['membersCount']
                 except errors.DuniterError as e:
                     if e.ucode != errors.NO_CURRENT_BLOCK:
                         raise
@@ -207,6 +215,10 @@ class BlockchainProcessor:
                     block_with_ud = await self._bma_connector.get(currency, bma.blockchain.Block,
                                                                   req_args={'number': block_number})
                     blockchain.previous_mass = block_with_ud['monetaryMass']
+                    blockchain.previous_members_count = block_with_ud['membersCount']
+                    blockchain.previous_ud = block_with_ud['dividend']
+                    blockchain.previous_ud_base = block_with_ud['unitbase']
+                    blockchain.previous_ud_time = block_with_ud['medianTime']
                 except errors.DuniterError as e:
                     if e.ucode != errors.NO_CURRENT_BLOCK:
                         raise
diff --git a/src/sakia/data/processors/sources.py b/src/sakia/data/processors/sources.py
index 0268e54d52ad84c5adbdc505cdedfd3340d5d5d8..2e248348dae50b707da8c94ebed5d003abaf1a8e 100644
--- a/src/sakia/data/processors/sources.py
+++ b/src/sakia/data/processors/sources.py
@@ -45,3 +45,13 @@ class SourcesProcessor:
                     log_stream("{0}/{1} sources".format(i, len(sources_data['sources'])))
             except errors.DuniterError as e:
                 raise
+
+    def amount(self, currency, pubkey):
+        """
+        Get the amount value of the sources for a given pubkey
+        :param str currency: the currency of the sources
+        :param str pubkey: the pubkey owning the sources
+        :return:
+        """
+        sources = self._repo.get_all(currency=currency, pubkey=pubkey)
+        return sum([s.amount * (10**s.base) for s in sources])
diff --git a/src/sakia/services/__init__.py b/src/sakia/services/__init__.py
index 2c5869f54cae9a872309cb779f6e553fbdfd8999..d98cc6ea4caff14eada3c1535061ec9d972fedf8 100644
--- a/src/sakia/services/__init__.py
+++ b/src/sakia/services/__init__.py
@@ -2,3 +2,4 @@ from .network import NetworkService
 from .identities import IdentitiesService
 from .blockchain import BlockchainService
 from .documents import DocumentsService
+from .sources import SourcesServices
diff --git a/src/sakia/services/blockchain.py b/src/sakia/services/blockchain.py
index f48d3df14932da90b9119d23d74a2ed8b4057551..a777546a1d8831636768fe28e440a9488ed12266 100644
--- a/src/sakia/services/blockchain.py
+++ b/src/sakia/services/blockchain.py
@@ -37,15 +37,18 @@ class BlockchainService(QObject):
     def parameters(self):
         return self._blockchain_processor.parameters(self.currency)
 
-    def members_count(self):
-        return self._blockchain_processor.members_count(self.currency)
+    def current_members_count(self):
+        return self._blockchain_processor.current_members_count(self.currency)
 
-    def monetary_mass(self):
-        return self._blockchain_processor.monetary_mass(self.currency)
+    def current_mass(self):
+        return self._blockchain_processor.current_mass(self.currency)
 
     def last_ud(self):
         return self._blockchain_processor.last_ud(self.currency)
 
+    def last_members_count(self):
+        return self._blockchain_processor.last_members_count(self.currency)
+
     def last_ud_time(self):
         return self._blockchain_processor.last_ud_time(self.currency)
 
@@ -67,5 +70,5 @@ class BlockchainService(QObject):
         :rtype: int
         """
         parameters = self.parameters()
-        next_ud = parameters.c * self.monetary_mass() / self.nb_members()
+        next_ud = parameters.c * self.current_mass() / self.last_members_count()
         return math.ceil(next_ud)
diff --git a/src/sakia/services/sources.py b/src/sakia/services/sources.py
new file mode 100644
index 0000000000000000000000000000000000000000..5ef98b7a492897a8d26233500ba1743e3894a881
--- /dev/null
+++ b/src/sakia/services/sources.py
@@ -0,0 +1,27 @@
+from PyQt5.QtCore import QObject
+from duniterpy.api import bma
+import math
+import logging
+
+
+class SourcesServices(QObject):
+    """
+    Source service is managing sources received
+    to update data locally
+    """
+    def __init__(self, currency, sources_processor, bma_connector):
+        """
+        Constructor the identities service
+
+        :param str currency: The currency name of the community
+        :param sakia.data.processors.SourceProcessor sources_processor: the sources processor for given currency
+        :param sakia.data.connectors.BmaConnector bma_connector: The connector to BMA API
+        """
+        super().__init__()
+        self._sources_processor = sources_processor
+        self._bma_connector = bma_connector
+        self.currency = currency
+        self._logger = logging.getLogger('sakia')
+
+    def amount(self, pubkey):
+        return self._sources_processor.amount(self.currency, pubkey)
diff --git a/src/sakia/tests/unit/data/test_blockchains_repo.py b/src/sakia/tests/unit/data/test_blockchains_repo.py
index 51dbd074f50c7f86aed5b0c5a16644fdae6f3878..cdfd8662dc42dc392d58065d258c58be350d77a2 100644
--- a/src/sakia/tests/unit/data/test_blockchains_repo.py
+++ b/src/sakia/tests/unit/data/test_blockchains_repo.py
@@ -38,9 +38,10 @@ class TestBlockchainsRepo(unittest.TestCase):
                 10,
                 0.66),
             current_buid="20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
-            members_count = 10,
+            current_members_count = 10,
             current_mass = 1000000,
             median_time = 86400,
+            last_members_count = 5,
             last_ud = 100000,
             last_ud_base = 0,
             last_ud_time = 86400,
@@ -73,7 +74,7 @@ class TestBlockchainsRepo(unittest.TestCase):
         self.assertEqual(blockchain.current_buid, BlockUID(20,
                                                            "7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67")
                          )
-        self.assertEqual(blockchain.members_count, 10)
+        self.assertEqual(blockchain.current_members_count, 10)
 
         blockchains_repo.drop(blockchain)
         blockchain = blockchains_repo.get_one(currency="testcurrency")
@@ -101,9 +102,10 @@ class TestBlockchainsRepo(unittest.TestCase):
                 0.66),
 
             current_buid="20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
-            members_count = 10,
+            current_members_count = 10,
             current_mass = 1000000,
             median_time = 86400,
+            last_members_count = 5,
             last_ud = 100000,
             last_ud_base = 0,
             last_ud_time = 86400,
@@ -133,9 +135,10 @@ class TestBlockchainsRepo(unittest.TestCase):
                 10,
                 0.66),
             current_buid="20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
-            members_count = 20,
+            current_members_count = 20,
             current_mass = 1000000,
             median_time = 86400,
+            last_members_count = 5,
             last_ud = 100000,
             last_ud_base = 0,
             last_ud_time = 86400,
@@ -151,11 +154,11 @@ class TestBlockchainsRepo(unittest.TestCase):
         # result sorted by currency name by default
         self.assertEquals(86400, blockchains[0].parameters.dt)
         self.assertEquals("testcurrency", blockchains[0].currency)
-        self.assertEquals(10, blockchains[0].members_count)
+        self.assertEquals(10, blockchains[0].current_members_count)
 
         self.assertEquals(86400*365, blockchains[1].parameters.dt)
         self.assertEquals("testcurrency2", blockchains[1].currency)
-        self.assertEquals(20, blockchains[1].members_count)
+        self.assertEquals(20, blockchains[1].current_members_count)
 
     def test_add_update_blockchain(self):
         blockchains_repo = BlockchainsRepo(self.meta_repo.conn)
@@ -178,9 +181,10 @@ class TestBlockchainsRepo(unittest.TestCase):
                 10,
                 0.66),
             current_buid="20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
-            members_count = 10,
+            current_members_count = 10,
             current_mass = 1000000,
             median_time = 86400,
+            last_members_count = 5,
             last_ud = 100000,
             last_ud_base = 0,
             last_ud_time = 86400,
@@ -192,7 +196,7 @@ class TestBlockchainsRepo(unittest.TestCase):
             currency = "testcurrency"
         )
         blockchains_repo.insert(blockchain)
-        blockchain.members_count = 30
+        blockchain.current_members_count = 30
         blockchains_repo.update(blockchain)
         blockchain2 = blockchains_repo.get_one(currency="testcurrency")
-        self.assertEquals(30, blockchain2.members_count)
+        self.assertEquals(30, blockchain2.current_members_count)