diff --git a/banking-client/src/main/java/ufrn/imd/controller/Controller.java b/banking-client/src/main/java/ufrn/imd/controller/Controller.java
index 580d6e5bd0706569fec236bf1337a7adbf06e7f8..b096e53ac2b72da6bd16bab300631399a7a479f8 100644
--- a/banking-client/src/main/java/ufrn/imd/controller/Controller.java
+++ b/banking-client/src/main/java/ufrn/imd/controller/Controller.java
@@ -1,10 +1,13 @@
 package ufrn.imd.controller;
 
 import ufrn.imd.domain.Client;
+import ufrn.imd.utils.ServerResponse;
 
 import java.rmi.Remote;
 import java.rmi.RemoteException;
 
 public interface Controller extends Remote {
     public void registerClient(Client client) throws RemoteException;
+
+    public ServerResponse getResponse(Object client) throws RemoteException;
 }
diff --git a/banking-client/src/main/java/ufrn/imd/utils/MachineState.java b/banking-client/src/main/java/ufrn/imd/utils/MachineState.java
index 961c800225f721bcf2322dd1f46e137808598db9..975d268b2ebda092b909bd8c0bf19ef69a5bb142 100644
--- a/banking-client/src/main/java/ufrn/imd/utils/MachineState.java
+++ b/banking-client/src/main/java/ufrn/imd/utils/MachineState.java
@@ -2,7 +2,10 @@ package ufrn.imd.utils;
 
 import lombok.Data;
 import ufrn.imd.controller.Controller;
+import ufrn.imd.domain.Account;
 import ufrn.imd.domain.Client;
+import ufrn.imd.utils.message.DepositMessage;
+import ufrn.imd.utils.message.WithdrawalMessage;
 
 import java.net.MalformedURLException;
 import java.rmi.Naming;
@@ -10,6 +13,7 @@ import java.rmi.NotBoundException;
 import java.rmi.RemoteException;
 import java.util.Scanner;
 
+import static ufrn.imd.utils.NameSpace.HOST_BALANCE_SERVICE;
 import static ufrn.imd.utils.NameSpace.HOST_DEPOSIT_SERVICE;
 import static ufrn.imd.utils.NameSpace.HOST_WITHDRAWAL_SERVICE;
 
@@ -17,14 +21,12 @@ import static ufrn.imd.utils.NameSpace.HOST_WITHDRAWAL_SERVICE;
 public class MachineState {
 
     public static final String INITIAL= "INITIAL";
-    public static final String RENDER = "RENDER";
-    public static final String UPDATE_STATE = "UPDATE_STATE";
     public static final String READ = "READ";
     public static final String DEPOSIT = "DEPOSIT";
     public static final String BALANCE = "BALANCE";
     public static final String WITHDRAWAL = "WITHDRAWAL";
 
-    public static final String HELP = "HELP";
+    public static final String START = "START";
     public static final String INVALID_INPUT = "INVALID_INPUT";
     public static final String QUIT = "QUIT";
 
@@ -44,40 +46,84 @@ public class MachineState {
 
     public void update() {
         if(state.equals(INITIAL)) {
-            state = HELP;
-        } else if(state.equals(HELP)) {
+            state = START;
+        } else if(state.equals(START)) {
             state = READ;
         } else if(state.equals(READ)) {
             state = inputValue;
         } else if(state.equals(INVALID_INPUT)) {
-            state = HELP;
+            state = START;
         } else if(state.equals(DEPOSIT)) {
-            state = HELP;
+            state = START;
+        } else if(state.equals(BALANCE)) {
+            state = START;
         } else if(state.equals(WITHDRAWAL)) {
-            state = HELP;
+            state = START;
         }
     }
 
     public void processEvents() throws MalformedURLException, NotBoundException, RemoteException {
         if(state.equals(READ)) {
-            inputValue = new String();
             inputValue = sc.nextLine().trim().toUpperCase();
-            System.out.println(String.format(">>> input value: %s", inputValue));
-            if(!inputValue.equals(DEPOSIT) && !inputValue.equals(BALANCE) && !inputValue.equals(WITHDRAWAL) ){
+            if(!inputValue.isEmpty() &&
+                    !inputValue.equals(QUIT) &&
+                    !inputValue.equals(DEPOSIT) &&
+                    !inputValue.equals(BALANCE) &&
+                    !inputValue.equals(WITHDRAWAL)) {
                 inputValue = INVALID_INPUT;
             }
         } else if(state.equals(DEPOSIT)) {
-            double v = sc.nextDouble();
-            System.out.println(String.format(">>> input value: %.2f", v));
+            String v = sc.nextLine();
             Client client = new Client(1);
+            DepositMessage depositMessage = new DepositMessage(client, Double.parseDouble(v));
             Controller server = (Controller) Naming.lookup(HOST_DEPOSIT_SERVICE);
-            server.registerClient(client);
+            ServerResponse response = server.getResponse(depositMessage);
+            if(response.getStatus() == 200) {
+                System.out.println(
+                        String.format(">>> Your balance is: %.2f", ((Account)response.getBody()).getBalance())
+                );
+            }
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+
+        } else if(state.equals(BALANCE)) {
+            Client client = new Client(1);
+            Controller server = (Controller) Naming.lookup(HOST_BALANCE_SERVICE);
+            ServerResponse response = server.getResponse(client);
+            if(response.getStatus() == 200) {
+                System.out.println(
+                        String.format(">>> Your balance is: %.2f", ((Account)response.getBody()).getBalance())
+                );
+            }
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+
         } else if(state.equals(WITHDRAWAL)) {
-            double v = sc.nextDouble();
-            System.out.println(String.format(">>> input value: %.2f", v));
+            String v = sc.nextLine();
             Client client = new Client(1);
+            WithdrawalMessage withdrawalMessage = new WithdrawalMessage(client, Double.parseDouble(v));
             Controller server = (Controller) Naming.lookup(HOST_WITHDRAWAL_SERVICE);
-            server.registerClient(client);
+            ServerResponse response = server.getResponse(withdrawalMessage);
+            if(response.getStatus() == 200) {
+                System.out.println(
+                        String.format(">>> Your balance is: %.2f", ((Account)response.getBody()).getBalance())
+                );
+            } else if(response.getStatus() == 500) {
+                System.out.println(
+                        String.format(">>> %s", response.getMessage())
+                );
+            }
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
         }
     }
 
@@ -86,7 +132,7 @@ public class MachineState {
             if(state.equals(INITIAL)) {
                 System.out.println(">>> Initializing...");
                 Thread.sleep(1000);
-            } else if(state.equals(HELP)) {
+            } else if(state.equals(START)) {
                 System.out.println("These are the avaliable operations");
                 System.out.println("---------------------------------");
                 System.out.println(" - deposit \t - balance");
diff --git a/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java b/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java
index 25c6d983740bed909d65dfff4eb3034af0524f61..68378ddd071645b9312f191151677cb136ac9273 100644
--- a/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java
+++ b/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java
@@ -1,9 +1,10 @@
 package ufrn.imd.utils;
 
 public class NameSpace {
-    public static final Integer PORT_DEPOSIT_SERVICE = 1907;
-    public static final String HOST_DEPOSIT_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_DEPOSIT_SERVICE, "deposit");
-
     public final static Integer PORT_WITHDRAWAL_SERVICE = 1906;
+    public static final Integer PORT_DEPOSIT_SERVICE = 1907;
+    public static final Integer PORT_BALANCE_SERVICE = 1908;
     public final static String HOST_WITHDRAWAL_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_WITHDRAWAL_SERVICE, "withdrawal");
+    public static final String HOST_DEPOSIT_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_DEPOSIT_SERVICE, "deposit");
+    public static final String HOST_BALANCE_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_BALANCE_SERVICE, "balance");
 }
diff --git a/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java b/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c1115b4648ee5503d0ebdb68cc5982e97f96794
--- /dev/null
+++ b/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java
@@ -0,0 +1,20 @@
+package ufrn.imd.utils;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@Builder
+public class ServerResponse implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Integer status;
+    private String message;
+    private Object body;
+}
diff --git a/banking-client/src/main/java/ufrn/imd/utils/message/DepositMessage.java b/banking-client/src/main/java/ufrn/imd/utils/message/DepositMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b6e3da72f55566ba318c15e0595d2329171c904
--- /dev/null
+++ b/banking-client/src/main/java/ufrn/imd/utils/message/DepositMessage.java
@@ -0,0 +1,17 @@
+package ufrn.imd.utils.message;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import ufrn.imd.domain.Client;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+public class DepositMessage implements Serializable {
+
+    private static final long serialVersionUID = 2L;
+
+    private Client client;
+    private Double value;
+}
diff --git a/banking-client/src/main/java/ufrn/imd/utils/message/WithdrawalMessage.java b/banking-client/src/main/java/ufrn/imd/utils/message/WithdrawalMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..fbf69894a42e545ed176cf34623b8ce26f12c3b8
--- /dev/null
+++ b/banking-client/src/main/java/ufrn/imd/utils/message/WithdrawalMessage.java
@@ -0,0 +1,16 @@
+package ufrn.imd.utils.message;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import ufrn.imd.domain.Client;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+public class WithdrawalMessage implements Serializable {
+    private static final long serialVersionUID = 2L;
+
+    private Client client;
+    private Double value;
+}
diff --git a/banking-server/src/main/java/ufrn/imd/BankingServerApp.java b/banking-server/src/main/java/ufrn/imd/BankingServerApp.java
index 38a2056f1e54ebf485d815de51434dd4866283d8..4332c2c16d20ca96e4716a2b290aeb84f9bcc151 100644
--- a/banking-server/src/main/java/ufrn/imd/BankingServerApp.java
+++ b/banking-server/src/main/java/ufrn/imd/BankingServerApp.java
@@ -15,14 +15,13 @@ import java.rmi.RemoteException;
 
 public class BankingServerApp {
     public static void main(String[] args) throws RemoteException, MalformedURLException, AlreadyBoundException {
-
-        DepositServiceImpl depositService = new DepositServiceImpl(new ClientRepository());
-        BalanceServiceImpl balanceService = new BalanceServiceImpl(new ClientRepository());
-        WithdrawalServiceImpl withdrawalService = new WithdrawalServiceImpl(new ClientRepository());
+        ClientRepository clientRepository = new ClientRepository();
+        DepositServiceImpl depositService = new DepositServiceImpl(clientRepository);
+        BalanceServiceImpl balanceService = new BalanceServiceImpl(clientRepository);
+        WithdrawalServiceImpl withdrawalService = new WithdrawalServiceImpl(clientRepository);
 
         Controller depositController = new DepositControllerImpl(depositService);
         Controller balanceController = new BalanceControllerImpl(balanceService);
         Controller withdrawalController = new WithdrawalControllerImpl(withdrawalService);
-
     }
 }
diff --git a/banking-server/src/main/java/ufrn/imd/controller/Controller.java b/banking-server/src/main/java/ufrn/imd/controller/Controller.java
index 824205a78effedd521e934e17809e5bfcc593a71..d5be018d3c01b6e18b13aa9d9028f66bb795589d 100644
--- a/banking-server/src/main/java/ufrn/imd/controller/Controller.java
+++ b/banking-server/src/main/java/ufrn/imd/controller/Controller.java
@@ -1,11 +1,12 @@
 package ufrn.imd.controller;
 
 import ufrn.imd.domain.Client;
+import ufrn.imd.utils.ServerResponse;
 
 import java.rmi.Remote;
 import java.rmi.RemoteException;
 
 public interface Controller extends Remote {
-    public void registerClient(Client client) throws RemoteException;
 
+    public ServerResponse getResponse(Object client) throws RemoteException;
 }
diff --git a/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java b/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java
index 0c51991cd1d1c609e46d4192e603a6ab4b568b83..50d9cb87a9e624e039f790f7cad9bfdb09e97fb4 100644
--- a/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java
+++ b/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java
@@ -3,6 +3,7 @@ package ufrn.imd.controller.impl;
 import ufrn.imd.controller.Controller;
 import ufrn.imd.domain.Client;
 import ufrn.imd.service.impl.BalanceServiceImpl;
+import ufrn.imd.utils.ServerResponse;
 
 import java.net.MalformedURLException;
 import java.rmi.AlreadyBoundException;
@@ -19,6 +20,7 @@ import static ufrn.imd.utils.NameSpace.PORT_BALANCE_SERVICE;
 public class BalanceControllerImpl extends UnicastRemoteObject implements Controller {
 
     private volatile Queue<Client> clients = new ArrayDeque<>();
+    private final BalanceServiceImpl service;
 
     public BalanceControllerImpl(BalanceServiceImpl service) throws RemoteException, MalformedURLException, AlreadyBoundException {
         super();
@@ -26,57 +28,14 @@ public class BalanceControllerImpl extends UnicastRemoteObject implements Contro
         LocateRegistry.createRegistry(PORT_BALANCE_SERVICE);
         Naming.bind(HOST_BALANCE_SERVICE, this);
         log.info("Starting Deposit service!");
-
-        new Notify(service).start();
+        this.service = service;
         log.info(String.format("Initializing server in %s", HOST_BALANCE_SERVICE));
 
     }
 
     @Override
-    public void registerClient(Client client) throws RemoteException {
-        clients.add(client);
-        log.info("new client registred");
-        log.info(String.format("total users: %d", clients.size()));
-    }
-
-
-
-
-    private class Notify extends Thread{
-
-        private final BalanceServiceImpl service;
-
-        public Notify(BalanceServiceImpl service) {
-            super();
-            this.service = service;
-        }
-        public void run() {
-
-            for(;;) {
-                if(clients.size() > 0) {
-
-                    log.info("notyfing the clients!");
-                    int i = 0;
-                    clients.stream().forEach(client -> {
-                        try {
-
-                            log.info(String.format("Clients waiting %d", clients.size()));
-                            this.service.balance(Optional.of(client));
-                            clients.remove();
-                            log.info(String.format("Clients waiting %d", clients.size()));
-                        } catch (RemoteException e) {
-                            e.printStackTrace();
-                        }
-                    });
-
-                    try {
-                        Thread.sleep(15 * 1000);
-                    } catch (InterruptedException e) {
-                        e.printStackTrace();
-                    }
-                }
-            }
-
-        }
+    public ServerResponse getResponse(Object obj) throws RemoteException {
+        Client client = (Client) obj;
+        return this.service.balance(Optional.of(client));
     }
 }
diff --git a/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java b/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java
index d9b3df5950323de0002ab2dd569206be9d510578..1e37f28ff725ffc585139f7bfe6f20e937c9c352 100644
--- a/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java
+++ b/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java
@@ -4,6 +4,8 @@ import lombok.extern.java.Log;
 import ufrn.imd.controller.Controller;
 import ufrn.imd.domain.Client;
 import ufrn.imd.service.impl.DepositServiceImpl;
+import ufrn.imd.utils.ServerResponse;
+import ufrn.imd.utils.message.DepositMessage;
 
 import java.net.MalformedURLException;
 import java.rmi.AlreadyBoundException;
@@ -20,63 +22,22 @@ import static ufrn.imd.utils.NameSpace.PORT_DEPOSIT_SERVICE;
 public class DepositControllerImpl extends UnicastRemoteObject implements Controller {
 
     private volatile Queue<Client> clients = new ArrayDeque<>();
+    private final DepositServiceImpl service;
+
+    private volatile Queue<ServerResponse> serverResponses = new ArrayDeque<>();
     public DepositControllerImpl(DepositServiceImpl service) throws RemoteException, MalformedURLException, AlreadyBoundException {
         super();
         log.info("Starting Deposit service!");
 
-        new Notify(service).start();
         log.info(String.format("Initializing server in %s", HOST_DEPOSIT_SERVICE));
-
+        this.service = service;
         LocateRegistry.createRegistry(PORT_DEPOSIT_SERVICE);
-
         Naming.bind(HOST_DEPOSIT_SERVICE, this);
     }
 
-    @Override
-    public void registerClient(Client client) throws RemoteException {
-        clients.add(client);
-        log.info("new client registred");
-        log.info(String.format("total users: %d", clients.size()));
+    public ServerResponse getResponse(Object obj) throws RemoteException {
+        DepositMessage depositMessage = (DepositMessage)obj;
+        return this.service.deposit(depositMessage.getValue(), Optional.of(depositMessage.getClient()));
     }
 
-
-
-
-    private class Notify extends Thread{
-
-        private final DepositServiceImpl service;
-
-        public Notify(DepositServiceImpl service) {
-            super();
-            this.service = service;
-        }
-        public void run() {
-
-            for(;;) {
-
-                if(clients.size() > 0) {
-
-                    log.info("notyfing the clients!");
-                    int i = 0;
-                    clients.stream().forEach(client -> {
-                        try {
-                            log.info(String.format("Clients waiting %d", clients.size()));
-                            this.service.deposit(200.00, Optional.of(client));
-                            clients.remove();
-                            log.info(String.format("Clients waiting %d", clients.size()));
-
-                        } catch (RemoteException e) {
-                            e.printStackTrace();
-                        }
-                    });
-                    try {
-                        Thread.sleep(15 * 1000);
-                    } catch (InterruptedException e) {
-                        e.printStackTrace();
-                    }
-                }
-            }
-
-        }
-    }
 }
diff --git a/banking-server/src/main/java/ufrn/imd/controller/impl/WithdrawalControllerImpl.java b/banking-server/src/main/java/ufrn/imd/controller/impl/WithdrawalControllerImpl.java
index 9bd03e2a55698094fe343716005ac804b4cf356b..986572becc26f20372aea2ce5193d21868bcd85b 100644
--- a/banking-server/src/main/java/ufrn/imd/controller/impl/WithdrawalControllerImpl.java
+++ b/banking-server/src/main/java/ufrn/imd/controller/impl/WithdrawalControllerImpl.java
@@ -2,8 +2,9 @@ package ufrn.imd.controller.impl;
 
 import lombok.extern.java.Log;
 import ufrn.imd.controller.Controller;
-import ufrn.imd.domain.Client;
 import ufrn.imd.service.impl.WithdrawalServiceImpl;
+import ufrn.imd.utils.ServerResponse;
+import ufrn.imd.utils.message.WithdrawalMessage;
 
 import java.net.MalformedURLException;
 import java.rmi.AlreadyBoundException;
@@ -11,65 +12,38 @@ import java.rmi.Naming;
 import java.rmi.RemoteException;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.server.UnicastRemoteObject;
-import java.util.ArrayDeque;
 import java.util.Optional;
-import java.util.Queue;
 
 import static ufrn.imd.utils.NameSpace.HOST_WITHDRAWAL_SERVICE;
 import static ufrn.imd.utils.NameSpace.PORT_WITHDRAWAL_SERVICE;
 
 @Log
 public class WithdrawalControllerImpl extends UnicastRemoteObject implements Controller {
-    private volatile Queue<Client> clients = new ArrayDeque<>();
+    private final WithdrawalServiceImpl service;
 
     public WithdrawalControllerImpl(WithdrawalServiceImpl service) throws RemoteException, MalformedURLException, AlreadyBoundException {
         super();
         log.info("Starting Withdrawal service!");
-        new Notify(service).start();
+        this.service = service;
         log.info(String.format("Initializing server in %s", HOST_WITHDRAWAL_SERVICE));
         LocateRegistry.createRegistry(PORT_WITHDRAWAL_SERVICE);
         Naming.bind(HOST_WITHDRAWAL_SERVICE, this);
     }
 
     @Override
-    public void registerClient(Client client) throws RemoteException {
-        clients.add(client);
-        log.info("new client registred");
-        log.info(String.format("total users: %d", clients.size()));
-    }
-
-    private class Notify extends Thread {
-        private final WithdrawalServiceImpl service;
-
-        public Notify(WithdrawalServiceImpl service) {
-            super();
-            this.service = service;
-        }
-
-        public void run() {
-            for(;;) {
-                if(clients.size() > 0) {
-                    log.info("notyfing the clients!");
-                    int i = 0;
-                    clients.stream().forEach(client -> {
-                        try {
-                            log.info(String.format("Clients waiting %d", clients.size()));
-                            this.service.withdraw(50.00, Optional.of(client));
-                        } catch (RemoteException | RuntimeException e) {
-                            e.printStackTrace();
-                        } finally {
-                            clients.remove();
-                            log.info(String.format("Clients waiting %d", clients.size()));
-                        }
-                    });
-
-                    try {
-                        Thread.sleep(15 * 1000);
-                    } catch (InterruptedException e) {
-                        e.printStackTrace();
-                    }
-                }
-            }
+    public ServerResponse getResponse(Object client) throws RemoteException {
+        WithdrawalMessage withdrawalMessage = (WithdrawalMessage) client;
+        ServerResponse response;
+        try {
+            response = this.service.withdraw(withdrawalMessage.getValue(), Optional.of(withdrawalMessage.getClient()));
+        } catch (RuntimeException e) {
+            e.printStackTrace();
+            response = ServerResponse.builder()
+                    .status(500)
+                    .message(e.getMessage())
+                    .body(withdrawalMessage.getClient())
+                    .build();
         }
+        return response;
     }
 }
diff --git a/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java b/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java
index 469601d1bb75fb17afbd2fe1c3d9a98dcd3afb2e..95e9373b04f05a6a480bb1db696ea8dba9a12c6f 100644
--- a/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java
+++ b/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java
@@ -6,6 +6,7 @@ import ufrn.imd.domain.Account;
 import ufrn.imd.domain.Client;
 import ufrn.imd.repository.Repository;
 import ufrn.imd.service.Service;
+import ufrn.imd.utils.ServerResponse;
 
 import java.rmi.RemoteException;
 import java.util.Optional;
@@ -17,7 +18,7 @@ public class BalanceServiceImpl implements Service {
 
     private final Repository<Client> clientRepository;
 
-    public void balance(Optional<Client> clientOptional) throws RemoteException {
+    public ServerResponse balance(Optional<Client> clientOptional) throws RemoteException {
         Client user = clientOptional
                 .orElseThrow(() -> new RuntimeException("NULL USER"));
         Client client = clientRepository.find(user.getId())
@@ -25,5 +26,10 @@ public class BalanceServiceImpl implements Service {
         Account account = client.getAccount();
         log.info(String.format("Account Balance: R$ %f", account.getBalance()));
 
+        return ServerResponse.builder()
+                .status(200)
+                .message("Operation sucessed!")
+                .body(account)
+                .build();
     }
 }
diff --git a/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java b/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java
index e7a86534678ccca34c0e0082c9bb92b2bfff00b5..83c894a8ff303a41d301feb7e19532417f07f66c 100644
--- a/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java
+++ b/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java
@@ -6,6 +6,7 @@ import ufrn.imd.domain.Account;
 import ufrn.imd.domain.Client;
 import ufrn.imd.repository.Repository;
 import ufrn.imd.service.Service;
+import ufrn.imd.utils.ServerResponse;
 
 import java.rmi.RemoteException;
 import java.util.Optional;
@@ -17,7 +18,7 @@ public class DepositServiceImpl implements Service {
 
     private final Repository<Client> repository;
 
-    public void deposit(Double value, Optional<Client> clientOptional) throws RemoteException, RuntimeException {
+    public ServerResponse deposit(Double value, Optional<Client> clientOptional) throws RemoteException, RuntimeException {
         Client user = clientOptional
                 .orElseThrow(() -> new RuntimeException("Null User!"));
         Client client = repository.find(user.getId())
@@ -26,6 +27,11 @@ public class DepositServiceImpl implements Service {
         account.setBalance(account.getBalance() + value);
         log.info(String.format("Deposit concluded!"));
         log.info(String.format("Total: %.2f", account.getBalance()));
+        return ServerResponse.builder()
+                .status(200)
+                .message("Operaiton sucessed!")
+                .body(account)
+                .build();
     }
 
 }
diff --git a/banking-server/src/main/java/ufrn/imd/service/impl/WithdrawalServiceImpl.java b/banking-server/src/main/java/ufrn/imd/service/impl/WithdrawalServiceImpl.java
index a22397cda066cdef5c7f656c3218073c736ce7c1..ff9ae1421d11a609a0c6775844a94718af290e62 100644
--- a/banking-server/src/main/java/ufrn/imd/service/impl/WithdrawalServiceImpl.java
+++ b/banking-server/src/main/java/ufrn/imd/service/impl/WithdrawalServiceImpl.java
@@ -6,6 +6,7 @@ import ufrn.imd.domain.Account;
 import ufrn.imd.domain.Client;
 import ufrn.imd.repository.Repository;
 import ufrn.imd.service.Service;
+import ufrn.imd.utils.ServerResponse;
 
 import java.rmi.RemoteException;
 import java.util.Optional;
@@ -16,7 +17,7 @@ public class WithdrawalServiceImpl implements Service {
 
     private final Repository<Client> clientRepository;
 
-    public void withdraw(Double value, Optional<Client> clientOptional) throws RemoteException, RuntimeException {
+    public ServerResponse withdraw(Double value, Optional<Client> clientOptional) throws RemoteException, RuntimeException {
         Client user = clientOptional
                 .orElseThrow(() -> new RuntimeException("Null user!"));
         Client client = clientRepository.find(user.getId())
@@ -28,5 +29,10 @@ public class WithdrawalServiceImpl implements Service {
         account.setBalance(account.getBalance() - value);
         log.info("Withdrawal concluded!");
         log.info(String.format("Account balance: R$ %.2f", account.getBalance()));
+        return ServerResponse.builder()
+                .status(200)
+                .message("Operation sucessed!")
+                .body(account)
+                .build();
     }
 }
diff --git a/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java b/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c1115b4648ee5503d0ebdb68cc5982e97f96794
--- /dev/null
+++ b/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java
@@ -0,0 +1,20 @@
+package ufrn.imd.utils;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@Builder
+public class ServerResponse implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Integer status;
+    private String message;
+    private Object body;
+}
diff --git a/banking-server/src/main/java/ufrn/imd/utils/message/DepositMessage.java b/banking-server/src/main/java/ufrn/imd/utils/message/DepositMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..2badcd3f628f1fceaf86549d8fe1b286b4738665
--- /dev/null
+++ b/banking-server/src/main/java/ufrn/imd/utils/message/DepositMessage.java
@@ -0,0 +1,16 @@
+package ufrn.imd.utils.message;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import ufrn.imd.domain.Client;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+public class DepositMessage implements Serializable {
+    private static final long serialVersionUID = 2L;
+
+    private Client client;
+    private Double value;
+}
diff --git a/banking-server/src/main/java/ufrn/imd/utils/message/WithdrawalMessage.java b/banking-server/src/main/java/ufrn/imd/utils/message/WithdrawalMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b72920199f7eb060ba5f976cf2afc4c647d049e
--- /dev/null
+++ b/banking-server/src/main/java/ufrn/imd/utils/message/WithdrawalMessage.java
@@ -0,0 +1,16 @@
+package ufrn.imd.utils.message;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import ufrn.imd.domain.Client;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+public class WithdrawalMessage implements Serializable {
+    private static final long serialVersionUID = 2L;
+
+    private Client client;
+    private Double value;
+}
\ No newline at end of file
diff --git a/banking-server/target/classes/ufrn/imd/BankingServerApp.class b/banking-server/target/classes/ufrn/imd/BankingServerApp.class
index 9507e12c0cbcbee3b1aa0bd24708c3ec90f1bb53..84bf69c80fd2cd8f90878db02bd5836285daeaba 100644
Binary files a/banking-server/target/classes/ufrn/imd/BankingServerApp.class and b/banking-server/target/classes/ufrn/imd/BankingServerApp.class differ
diff --git a/banking-server/target/classes/ufrn/imd/controller/Controller.class b/banking-server/target/classes/ufrn/imd/controller/Controller.class
index f430dd8e588b7787d3b1e57839844a0ca969b2ba..d963fb57c51b2717ad5df0b7a9c8b917478a9e46 100644
Binary files a/banking-server/target/classes/ufrn/imd/controller/Controller.class and b/banking-server/target/classes/ufrn/imd/controller/Controller.class differ
diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class
deleted file mode 100644
index 6f1fd296957eb44ef8553d3843aed5dde42adc51..0000000000000000000000000000000000000000
Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class and /dev/null differ
diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class
index 9f55bf8b7d1a386ab7716d59ba2a4476c94238ce..e990c821bbca67e3753e9d7b7726bf02f8827d69 100644
Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class and b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class differ
diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class
deleted file mode 100644
index b8477ef07534ba6cd062501ed1b04324a2d61879..0000000000000000000000000000000000000000
Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class and /dev/null differ
diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class
index 47a33bc2bcf84a94279a49f43193a5456f898b72..78b16605a3148faa5588123ef88a11f98ff3a3ce 100644
Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class and b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class differ
diff --git a/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class b/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class
index b4fa9209a9ee6e21b9c3435e2894b0809385ba08..57779ee31278c81ffb0caab53459b83b0f814be4 100644
Binary files a/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class and b/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class differ
diff --git a/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class b/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class
index cf644482cf2f5b0e07d532cd3dfeb33d543e52c6..7663a247d03d86603195f6987564d6775fa06d0b 100644
Binary files a/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class and b/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class differ