diff --git a/main.cpp b/main.cpp
index 0eefe5f69ccc6aa9112bdd551acdef879cf1ae01..7d830a6e39c81d2d607fec198189036284e1fa39 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,8 +1,7 @@
+#include <cstdlib>
 #include <iostream>
 
-#include "./sources/ControladorUsuarios.hpp"
-#include "./sources/ControladorObras.hpp"
-#include "./sources/DescricaoObra.hpp"
+#include "./sources/Biblioteca.hpp"
 
 using namespace std;
 
@@ -25,32 +24,23 @@ int show_options () {
   cout << "3 - Pagar Multa" << endl;
   cout << "4 - Finalizar" << endl;
   cout << "> ";
-
   cin >> option;
+
   return option;
 }
 
 
 int main(){
+  system("clear");
+
+  // Cria Biblioteca
+  cout << "> Instanciando Biblioteca" << endl;
+  Biblioteca bib;
+
   // Cria Usuarios
-  cout << "> Instanciando Controlador de Usuarios" << endl;
-  ControladorUsuarios contUsuarios;
+  ControladorUsuarios contUsuarios = bib.getContUsuarios();
 
   cout << "> Criando Usuarios" << endl;
-  //string nome, CPF, endereco, telefone, email;
-  //for (int i=0; i<3 ;i++){
-  //  cout << "Entre com o nome: ";     cin >> nome;
-  //  cout << "Entre com o CPF: ";      cin >> CPF;
-  //  cout << "Entre com o endereco: "; cin >> endereco;
-  //  cout << "Entre com o telefone: "; cin >> telefone;
-  //  cout << "Entre com o email: ";    cin >> email;
-
-  //  if (contUsuarios.adicionarUsuario(nome, CPF, endereco, telefone, email))
-  //    cout << "> Usuario " << nome << " adicionado com sucesso" << endl;
-  //  else
-  //    cout << "> Falha ao adicionar o usuario " << nome << endl;
-  //}
-  
   contUsuarios.adicionarUsuario("Muriki", "12345", "Casa", "9999", "murikigy@gmail.com");
   contUsuarios.adicionarUsuario("Nico", "54321", "Apartamento", "8888", "nico@gmail.com");
   contUsuarios.adicionarUsuario("Marcus", "12345", "Casa", "9988", "marcus@gmail.com");
@@ -72,6 +62,8 @@ int main(){
         if (valor > 0) {
           cout << "\nUsuario: " << userCPF << endl;
           cout << "Valor a pagar: " << valor << endl;
+        } else {
+          cout << "Aviso: Usuario não possui multas" << endl;
         }
         break;
 
@@ -84,6 +76,10 @@ int main(){
       case FINISH:
         cout << "> Finalizando programa!" << endl;
         return 0;
+
+      default:
+        cout << "Comando não reconhecido!" << endl;
+        break;
     }
   }
 
diff --git a/sources/Biblioteca.cpp b/sources/Biblioteca.cpp
index 2e5e0dcb893caaf69ba30ba7a5b3c83892213a47..6b6322728518f01ab5398129f7f3d76233925777 100644
--- a/sources/Biblioteca.cpp
+++ b/sources/Biblioteca.cpp
@@ -1 +1,14 @@
 #include "./Biblioteca.hpp"
+
+// Constructor
+Biblioteca::Biblioteca() {}
+
+
+// Methods
+ControladorObras Biblioteca::getContObras(){
+  return this->contObras;
+}
+
+ControladorUsuarios Biblioteca::getContUsuarios(){
+  return this->contUsuarios;
+}
diff --git a/sources/Biblioteca.hpp b/sources/Biblioteca.hpp
index 091ed8af5210a62eee5031961db7fa771107dcf6..ebe965f78cc6589535a71c4568f6bee6de4c97cd 100644
--- a/sources/Biblioteca.hpp
+++ b/sources/Biblioteca.hpp
@@ -1,12 +1,23 @@
 #ifndef __BIBLIOTECA__
 #define __BIBLIOTECA__
 
+#include "./ControladorUsuarios.hpp"
+#include "./ControladorObras.hpp"
+
+using namespace std;
+
 class Biblioteca {
   private:
+    ControladorUsuarios contUsuarios;
+    ControladorObras contObras;
 
   public:
     // Construtor
+    Biblioteca();
 
+    // Methods
+    ControladorObras getContObras();
+    ControladorUsuarios getContUsuarios();
 
 };
 
diff --git a/sources/ControladorUsuarios.cpp b/sources/ControladorUsuarios.cpp
index 36b48ecd867bc87366b0a9dbc7db0403cef39903..82da897d96aab7dcf2bea856ce63047c0e27c5a7 100644
--- a/sources/ControladorUsuarios.cpp
+++ b/sources/ControladorUsuarios.cpp
@@ -38,13 +38,45 @@ bool ControladorUsuarios::adicionarUsuario(string nome, string CPF, string ender
 }
 
 
-void ControladorUsuarios::registrarEmprestimo(string CPF, DescricaoObra descricao){
+int ControladorUsuarios::registrarEmprestimo(string CPF, DescricaoObra descricao){
 
+  // Search for user
+  auto it = find_if(usuarios.begin(), usuarios.end(), [CPF](Usuario& u) {
+      return u.getCPF() == CPF;
+    });
+
+  if (it == usuarios.end()) {
+    cout << "> Erro: Usuario não encontrado" << endl;
+    return -1;
+  }
+
+  if (!it->emprestar(descricao)){
+    cout << "> Erro: Falha ao realizar um emprestimo" << endl;
+    return -1;
+  }
+
+  // Calcula data e retorna
+  return 0;
 }
 
 
 int ControladorUsuarios::retornarEmprestimo(string CPF, DescricaoObra descricao){
 
+  // Search for user
+  auto it = find_if(usuarios.begin(), usuarios.end(), [CPF](Usuario& u) {
+      return u.getCPF() == CPF;
+    });
+
+  if (it == usuarios.end()) {
+    cout << "> Erro: Usuario não encontrado" << endl;
+    return -1;
+  }
+
+  if (!it->devolver(descricao)){
+    cout << "> Erro: Falha ao realizar a devolução" << endl;
+    return -1;
+  }
+
   return 0;
 }
 
diff --git a/sources/ControladorUsuarios.hpp b/sources/ControladorUsuarios.hpp
index 9d7b728383b2731019b910be6bc344c3b4ec48a8..72f064ba34401ad8453307d87f04c958ee20801d 100644
--- a/sources/ControladorUsuarios.hpp
+++ b/sources/ControladorUsuarios.hpp
@@ -20,7 +20,7 @@ class ControladorUsuarios {
 
     // Methods
     bool adicionarUsuario(string nome, string CPF, string endereco, string telefone, string email);
-    void registrarEmprestimo(string CPF, DescricaoObra descricao);
+    int registrarEmprestimo(string CPF, DescricaoObra descricao);
     int retornarEmprestimo(string CPF, DescricaoObra descricao);
     int recuperarMultas(string CPF);
     bool registrarMultaPaga(string CPF, int valor);
diff --git a/sources/Usuario.cpp b/sources/Usuario.cpp
index 1b323714c6ca4d3304e167039e05a675eeba29fc..f53612757ceaac79b73c8bf06390a41410659aab 100644
--- a/sources/Usuario.cpp
+++ b/sources/Usuario.cpp
@@ -34,8 +34,8 @@ bool Usuario::devolver(DescricaoObra descricao){
 
 // Increase fees
 int Usuario::atualizarMulta(int valor){
-
-  return 0;
+  this->multas += valor;
+  return this->multas;
 }
 
 string Usuario::getCPF(){
@@ -49,13 +49,13 @@ int Usuario::getMulta(){
 bool Usuario::pagarMulta(int valor){
   // Check if the user has fees
   if (this->multas <= 0) {
-    cout << "> Aviso: Usuario não possui multas!" << endl;
+    cout << "> Aviso: Usuario não possui multas! Ignorando operação" << endl;
     return false;
   }
 
   // Check if the value is suficient
   if (this->multas > valor) {
-    cout << "> Error: Valor insuficiente para pagar as multas!" << endl;
+    cout << "> Erro: Valor insuficiente para pagar as multas!" << endl;
     return false;
   }