diff --git a/banking/src/ufrn/imd/BankingServerApp.java b/banking/src/ufrn/imd/BankingServerApp.java
index d02eeed8352c7d4eeef9c1dc23733fa7192e5500..4fed7390ea3b7b3ab9901b8f402f99065adf9142 100644
--- a/banking/src/ufrn/imd/BankingServerApp.java
+++ b/banking/src/ufrn/imd/BankingServerApp.java
@@ -1,8 +1,11 @@
 package ufrn.imd;
 
 import ufrn.imd.controller.Controller;
+import ufrn.imd.controller.impl.BalanceControllerImpl;
 import ufrn.imd.controller.impl.DepositControllerImpl;
+import ufrn.imd.service.BalanceService;
 import ufrn.imd.service.DepositService;
+import ufrn.imd.service.impl.BalanceServiceImpl;
 import ufrn.imd.service.impl.DepositServiceImpl;
 
 import java.net.MalformedURLException;
@@ -13,7 +16,10 @@ public class BankingServerApp {
     public static void main(String[] args) throws RemoteException, MalformedURLException, AlreadyBoundException {
 
         DepositService depositService = new DepositServiceImpl();
+        BalanceService balanceService = new BalanceServiceImpl();
+
         Controller depositController = new DepositControllerImpl(depositService);
+        Controller balanceController = new BalanceControllerImpl(balanceService);
 
 
     }
diff --git a/banking/src/ufrn/imd/controller/Controller.java b/banking/src/ufrn/imd/controller/Controller.java
index ebdc052114a1ec006c253cdf5d043b3be3451176..36dc9b4c23f85da1774874073ce187064e596202 100644
--- a/banking/src/ufrn/imd/controller/Controller.java
+++ b/banking/src/ufrn/imd/controller/Controller.java
@@ -1,10 +1,12 @@
 package ufrn.imd.controller;
 
-import ufrn.imd.message.Client;
+import ufrn.imd.domain.Client;
 
 import java.rmi.Remote;
 import java.rmi.RemoteException;
+import java.util.List;
 
 public interface Controller extends Remote {
     public void registerClient(Client client) throws RemoteException;
+
 }
diff --git a/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java b/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java
index 74616ba5a8fc3f09a0b431588164daccb0ee93ae..4dd0bb54d3cfc7c01a7e6ee8efcf3b71adb573d8 100644
--- a/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java
+++ b/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java
@@ -1,2 +1,94 @@
-package ufrn.imd.controller.impl;public class BalanceControllerImpl {
+package ufrn.imd.controller.impl;
+
+import ufrn.imd.controller.Controller;
+import ufrn.imd.domain.Client;
+import ufrn.imd.service.BalanceService;
+import ufrn.imd.service.DepositService;
+import ufrn.imd.service.impl.BalanceServiceImpl;
+import ufrn.imd.utils.Log;
+
+import java.net.MalformedURLException;
+import java.rmi.AlreadyBoundException;
+import java.rmi.Naming;
+import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.server.UnicastRemoteObject;
+import java.util.ArrayList;
+import java.util.List;
+
+import static ufrn.imd.utils.NameSpace.*;
+
+public class BalanceControllerImpl extends UnicastRemoteObject implements Controller {
+
+    private volatile List<Client> clients = new ArrayList<>();
+
+    public BalanceControllerImpl(BalanceService service) throws RemoteException, MalformedURLException, AlreadyBoundException {
+        super();
+        Log.info(BalanceServiceImpl.class, "Starting Deposit service!");
+
+        new Notify(service).start();
+
+        Log.info(BalanceServiceImpl.class,
+                String.format("Initializing server in %s", HOST_BALANCE_SERVICE));
+
+        LocateRegistry.createRegistry(PORT_BALANCE_SERVICE);
+
+        Naming.bind(HOST_BALANCE_SERVICE, this);
+    }
+
+    @Override
+    public void registerClient(Client client) throws RemoteException {
+        clients.add(client);
+        Log.info(BalanceService.class, "new client registred");
+        Log.info(BalanceService.class, String.format("total users: %d", clients.size()));
+    }
+
+
+
+
+    private class Notify extends Thread{
+
+        private final BalanceService service;
+
+        public Notify(BalanceService service) {
+            super();
+            this.service = service;
+        }
+        public void run() {
+
+            for(;;) {
+                if(clients.size() > 0) {
+
+                    Log.info(
+                            BalanceService.class,
+                            "notyfing the clients!"
+                    );
+                    int i = 0;
+                    for (Client client : clients) {
+
+                        try {
+                            this.service.balance(client.getAccount());
+
+                        } catch (RemoteException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                    try {
+                        Thread.sleep(15 * 1000);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+                } else {
+                    try {
+                        Thread.sleep(15 * 1000);
+                    } catch (InterruptedException e) {
+                        throw new RuntimeException(e);
+                    }
+                    Log.info(BalanceService.class, "No there's clients!");
+                }
+
+            }
+
+        }
+    }
 }
diff --git a/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java b/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java
index ef27d6eac3fbff184401c19e0ca118e6ede7c68f..34cccd467fdc2a911cbb8f231d7651866b6d5c73 100644
--- a/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java
+++ b/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java
@@ -1,8 +1,8 @@
 package ufrn.imd.controller.impl;
 
 import ufrn.imd.controller.Controller;
-import ufrn.imd.log.Log;
-import ufrn.imd.message.Client;
+import ufrn.imd.utils.Log;
+import ufrn.imd.domain.Client;
 import ufrn.imd.service.DepositService;
 
 import java.net.MalformedURLException;
@@ -14,21 +14,22 @@ import java.rmi.server.UnicastRemoteObject;
 import java.util.ArrayList;
 import java.util.List;
 
-import static ufrn.imd.nameSpace.NameSpace.HOST_DEPOSIT_SERVICE;
-import static ufrn.imd.nameSpace.NameSpace.PORT_DEPOSIT_SERVICE;
+import static ufrn.imd.utils.NameSpace.HOST_DEPOSIT_SERVICE;
+import static ufrn.imd.utils.NameSpace.PORT_DEPOSIT_SERVICE;
 
 public class DepositControllerImpl extends UnicastRemoteObject implements Controller {
 
     private volatile List<Client> clients = new ArrayList<>();
-
     public DepositControllerImpl(DepositService service) throws RemoteException, MalformedURLException, AlreadyBoundException {
         super();
         Log.info(DepositControllerImpl.class, "Starting Deposit service!");
-        new Notify(service).start();
 
+        new Notify(service).start();
         Log.info(DepositControllerImpl.class,
                 String.format("Initializing server in %s", HOST_DEPOSIT_SERVICE));
+
         LocateRegistry.createRegistry(PORT_DEPOSIT_SERVICE);
+
         Naming.bind(HOST_DEPOSIT_SERVICE, this);
     }
 
@@ -40,6 +41,8 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro
     }
 
 
+
+
     private class Notify extends Thread{
 
         private final DepositService service;
@@ -63,17 +66,25 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro
 
                         try {
                             this.service.deposit(client.getBalance(), client.getAccount());
+
                         } catch (RemoteException e) {
                             e.printStackTrace();
                         }
                     }
-
-
                     try {
                         Thread.sleep(15 * 1000);
                     } catch (InterruptedException e) {
                         e.printStackTrace();
                     }
+                } else {
+                    try {
+                        Thread.sleep(15 * 1000);
+                    } catch (InterruptedException e) {
+                        throw new RuntimeException(e);
+                    }
+                    Log.info(DepositControllerImpl.class, "No there's clients!");
+
+
                 }
 
             }
diff --git a/banking/src/ufrn/imd/domain/Client.java b/banking/src/ufrn/imd/domain/Client.java
index 2243e6bdabce843b1359ba9d777bba437208eee6..7419ef5f21d81687463caca4520964d3f862bb66 100644
--- a/banking/src/ufrn/imd/domain/Client.java
+++ b/banking/src/ufrn/imd/domain/Client.java
@@ -1,4 +1,4 @@
-package ufrn.imd.message;
+package ufrn.imd.domain;
 
 import ufrn.imd.domain.Account;
 
@@ -7,7 +7,6 @@ import java.util.Optional;
 
 public class Client implements Serializable {
     private static final long serialVersionUID = 1L;
-
     private Account account;
     public Double getBalance() {
         return account.getBalance();
diff --git a/banking/src/ufrn/imd/service/BalanceService.java b/banking/src/ufrn/imd/service/BalanceService.java
index 2d9315cb86301d9188170ac76fcbceabdb37c1f6..b82470c15060014b18ce9c6323ca2a37a5268fee 100644
--- a/banking/src/ufrn/imd/service/BalanceService.java
+++ b/banking/src/ufrn/imd/service/BalanceService.java
@@ -4,8 +4,9 @@ import ufrn.imd.domain.Account;
 
 import java.rmi.Remote;
 import java.rmi.RemoteException;
+import java.util.Optional;
 
 public interface BalanceService extends Remote {
 
-    public void balance(Account account) throws RemoteException;
+    public void balance(Optional<Account> account) throws RemoteException;
 }
diff --git a/banking/src/ufrn/imd/service/DepositService.java b/banking/src/ufrn/imd/service/DepositService.java
index f85f98f67df1776750e48c57065b02823917b844..aab39ac63fd5da6827a9ee113ba692da9902459e 100644
--- a/banking/src/ufrn/imd/service/DepositService.java
+++ b/banking/src/ufrn/imd/service/DepositService.java
@@ -8,6 +8,6 @@ import java.util.Optional;
 
 public interface DepositService extends Remote {
 
-        public void deposit(Double value, Optional<Account> account) throws RemoteException;
+        public void deposit(Double value, Optional<Account> account) throws RemoteException, RuntimeException;
 
 }
diff --git a/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java b/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java
index 07a0ac2f115680d265ac48fa68a169b403c09a83..f550c9d9e0f97f3439028a8ba6b8137c91537600 100644
--- a/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java
+++ b/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java
@@ -1,2 +1,23 @@
-package ufrn.imd.service.impl;public class BalanceService {
+package ufrn.imd.service.impl;
+
+import ufrn.imd.domain.Account;
+
+import java.rmi.RemoteException;
+import java.util.Optional;
+
+import ufrn.imd.service.*;
+import ufrn.imd.utils.Log;
+
+public class BalanceServiceImpl implements BalanceService {
+
+
+    @Override
+    public void balance(Optional<Account> accOP) throws RemoteException {
+        Account account = accOP.orElseThrow(() -> new RuntimeException("Invalid account"));
+        Log.info(
+                BalanceServiceImpl.class,
+                String.format("Account Balance: R$ %f", account.getBalance())
+        );
+
+    }
 }
diff --git a/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java b/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java
index 7dfa731ebf41f795aa581b80f1e1d71395caca80..f7a1cb7d53f7d257d652df80008f3a8ddb9b5323 100644
--- a/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java
+++ b/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java
@@ -1,7 +1,7 @@
 package ufrn.imd.service.impl;
 
 import ufrn.imd.domain.Account;
-import ufrn.imd.log.Log;
+import ufrn.imd.utils.Log;
 import ufrn.imd.service.DepositService;
 
 import java.rmi.RemoteException;
@@ -15,11 +15,9 @@ public class DepositServiceImpl implements DepositService {
 
     public void deposit(Double value, Optional<Account> acOp) throws RemoteException, RuntimeException {
         Account account = acOp.orElseThrow(() -> new RuntimeException("Null User!"));
-        if(account.getBalance() < value)
-            throw new RuntimeException("There's no money!");
+        if(account.getBalance() < value) throw new RuntimeException("There's no money!");
         account.setBalance(account.getBalance() - value);
         Log.info(DepositServiceImpl.class, "deposit");
-
     }
 
 }
diff --git a/banking/src/ufrn/imd/utils/Log.java b/banking/src/ufrn/imd/utils/Log.java
index 673658f2be0cc76505a8047b6e19b0cd308cc364..38d3f87c29c5bba875697400c9d9fecad5cbe99a 100644
--- a/banking/src/ufrn/imd/utils/Log.java
+++ b/banking/src/ufrn/imd/utils/Log.java
@@ -1,4 +1,4 @@
-package ufrn.imd.utils.log;
+package ufrn.imd.utils;
 
 public class Log {
 
diff --git a/banking/src/ufrn/imd/utils/NameSpace.java b/banking/src/ufrn/imd/utils/NameSpace.java
index ace96ee331f4a5691d614745891549984ecd2cc6..bb5d5251a3090f100905b78e8f8fe9d47f290cb1 100644
--- a/banking/src/ufrn/imd/utils/NameSpace.java
+++ b/banking/src/ufrn/imd/utils/NameSpace.java
@@ -1,7 +1,11 @@
-package ufrn.imd.utils.nameSpace;
+package ufrn.imd.utils;
 
 public class NameSpace {
+
+    public final static Integer PORT_BALANCE_SERVICE = 1908;
     public final static Integer PORT_DEPOSIT_SERVICE = 1907;
     public final static String HOST_DEPOSIT_SERVICE =
             String.format("rmi://127.0.0.1:%d/%s", PORT_DEPOSIT_SERVICE, "deposit");
+    public final static String HOST_BALANCE_SERVICE =
+            String.format("rmi://127.0.0.1:%d/%s", PORT_BALANCE_SERVICE, "balance");
 }