diff --git a/main.cpp b/main.cpp
index 1473889c72c5a104c98fdd6f67179da3436e562f..0eefe5f69ccc6aa9112bdd551acdef879cf1ae01 100644
--- a/main.cpp
+++ b/main.cpp
@@ -9,10 +9,27 @@ using namespace std;
 
 typedef enum {
   START,
+  LISTUSERS,
+  QUERYFEES,
+  PAYFEES,
   FINISH
 } states;
 
 
+int show_options () {
+  int option;
+  cout << endl;
+  cout << "> Entre com um comando:" << endl;
+  cout << "1 - Listar usuarios" << endl;
+  cout << "2 - Consultar Multas" << endl;
+  cout << "3 - Pagar Multa" << endl;
+  cout << "4 - Finalizar" << endl;
+  cout << "> ";
+
+  cin >> option;
+  return option;
+}
+
 
 int main(){
   // Cria Usuarios
@@ -20,38 +37,78 @@ int main(){
   ControladorUsuarios contUsuarios;
 
   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.mostrarDetalhes();
-
-  // Cria Obras
-  cout << "> Instanciando Controlador de Obras" << endl;
-  ControladorObras contObras;
-
-  cout << "> Criando Obras" << endl;
-  string titulo, tipo; int ano, qtDisp, total;
-  for (int i=0; i<3 ;i++){
-    cout << "Entre com o titulo da obra: ";           cin >> titulo;
-    cout << "Entre com o ano da obra: ";              cin >> ano;
-    cout << "Entre com o tipo da obra: ";             cin >> tipo;
-    cout << "Entre com a quantidade Disponivel: ";    cin >> qtDisp;
-    cout << "Entre com a quantidade Total: ";         cin >> total;
-    
-    DescricaoObra descricao(titulo, ano);
-    contObras.adicionarObra(tipo, descricao);
+  //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");
+
+  // Interation Loop
+  int option = START;
+  while (option != FINISH) {
+    option = show_options();
+    string userCPF; int valor;
+
+    switch (option) {
+      case LISTUSERS:
+        contUsuarios.mostrarDetalhes();
+        break;
+
+      case QUERYFEES:
+        cout << "Entre com o CPF do usuário: ";   cin >> userCPF;
+        valor = contUsuarios.recuperarMultas(userCPF);
+        if (valor > 0) {
+          cout << "\nUsuario: " << userCPF << endl;
+          cout << "Valor a pagar: " << valor << endl;
+        }
+        break;
+
+      case PAYFEES:
+        cout << "Entre com o CPF do usuário: ";   cin >> userCPF;
+        cout << "Entre com o valor a pagar: ";    cin >> valor;
+        contUsuarios.registrarMultaPaga(userCPF, valor);
+        break;
+
+      case FINISH:
+        cout << "> Finalizando programa!" << endl;
+        return 0;
+    }
   }
 
+  return 0;
+}
+
+
+
+  //// Cria Obras
+  //cout << "> Instanciando Controlador de Obras" << endl;
+  //ControladorObras contObras;
+
+  //cout << "> Criando Obras" << endl;
+  //string titulo, tipo; int ano, qtDisp, total;
+  //for (int i=0; i<3 ;i++){
+  //  cout << "Entre com o titulo da obra: ";           cin >> titulo;
+  //  cout << "Entre com o ano da obra: ";              cin >> ano;
+  //  cout << "Entre com o tipo da obra: ";             cin >> tipo;
+  //  cout << "Entre com a quantidade Disponivel: ";    cin >> qtDisp;
+  //  cout << "Entre com a quantidade Total: ";         cin >> total;
+  //  
+  //  DescricaoObra descricao(titulo, ano);
+  //  contObras.adicionarObra(tipo, descricao);
+  //}
+
   //cout << "==> Instanciando uma Descricao de Obra: " << endl;
   //DescricaoObra desc("Mochileiro das galáxias", 1999);
   //desc.mostrarDetalhes();
@@ -76,5 +133,3 @@ int main(){
   //cout << "==> Instanciando o Controlador de Obras: " << endl;
   //ControladorObras obras;
 
-  return 0;
-}
diff --git a/sources/ControladorUsuarios.cpp b/sources/ControladorUsuarios.cpp
index 9e393bec822ee0435f12ba353bdb2ac835cc5cee..36b48ecd867bc87366b0a9dbc7db0403cef39903 100644
--- a/sources/ControladorUsuarios.cpp
+++ b/sources/ControladorUsuarios.cpp
@@ -1,6 +1,8 @@
 #include <iostream>
+#include <algorithm>
 
 #include "./ControladorUsuarios.hpp"
+#include "Usuario.hpp"
 
 using namespace std;
 
@@ -20,11 +22,13 @@ void ControladorUsuarios::mostrarDetalhes() const {
 bool ControladorUsuarios::adicionarUsuario(string nome, string CPF, string endereco, 
     string telefone, string email){
   // Check if the user does not exist
-  for (auto& usuario: this->usuarios) {
-    if (usuario.getCPF() == CPF){
-      cout << "Erro: Usuario com esse CPF já existe, ignorando inserção" << endl;
-      return false;
-    }
+  auto it = find_if(this->usuarios.begin(), this->usuarios.end(), [CPF](Usuario& u) {
+      return u.getCPF() == CPF;
+    });
+
+  if (it != this->usuarios.end()){
+    cout << "> Erro: Usuario com esse CPF já existe, ignorando inserção" << endl;
+    return false;
   }
 
   // Create and add a new user
@@ -47,12 +51,31 @@ int ControladorUsuarios::retornarEmprestimo(string CPF, DescricaoObra descricao)
 
 int ControladorUsuarios::recuperarMultas(string CPF){
 
+  // Search for user
+  auto it = find_if(usuarios.begin(), usuarios.end(), [CPF](Usuario& u) {
+      return u.getCPF() == CPF;
+    });
 
-  return 0;
+  if (it == usuarios.end()) {
+    cout << "> Erro: Usuario não encontrado" << endl;
+    return -1;
+  }
+
+  return it->getMulta();
 }
 
 
 bool ControladorUsuarios::registrarMultaPaga(string CPF, int valor){
 
-  return true;
+  // 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 false;
+  }
+
+  return it->pagarMulta(valor);
 }
diff --git a/sources/Usuario.cpp b/sources/Usuario.cpp
index 37a137a9c0e3cda46ed0b6075038b3484d99474b..1b323714c6ca4d3304e167039e05a675eeba29fc 100644
--- a/sources/Usuario.cpp
+++ b/sources/Usuario.cpp
@@ -8,7 +8,7 @@ using namespace std;
 Usuario::Usuario(const string& nome, const string& cpf, const string& end,
     const string& tel, const string&email)
   : nome(nome), CPF(cpf), endereco(end), telefone(tel), email(email) {
-    this->multas = 0;
+    this->multas = 10;
 }
 
 void Usuario::mostrarDetalhes() const {
@@ -32,6 +32,7 @@ bool Usuario::devolver(DescricaoObra descricao){
   return 0;
 }
 
+// Increase fees
 int Usuario::atualizarMulta(int valor){
 
   return 0;
@@ -42,12 +43,26 @@ string Usuario::getCPF(){
 }
 
 int Usuario::getMulta(){
-
-  return 0;
+  return this->multas;
 }
 
 bool Usuario::pagarMulta(int valor){
-
-  return 0;
+  // Check if the user has fees
+  if (this->multas <= 0) {
+    cout << "> Aviso: Usuario não possui multas!" << endl;
+    return false;
+  }
+
+  // Check if the value is suficient
+  if (this->multas > valor) {
+    cout << "> Error: Valor insuficiente para pagar as multas!" << endl;
+    return false;
+  }
+
+  cout << "> Pagamento de multas realizado!" << endl;
+  cout << "Troco: " << (valor - this->multas) << " R$" << endl;
+
+  this->multas = 0;
+  return true;
 }
 
diff --git a/sources/Usuario.hpp b/sources/Usuario.hpp
index 978addab26dfd025dcc6b17300289df699a315a3..99b7c8119037f7d125a57eb0f61899f2d58a4560 100644
--- a/sources/Usuario.hpp
+++ b/sources/Usuario.hpp
@@ -27,7 +27,7 @@ class Usuario {
     // Methods
     bool emprestar(DescricaoObra descricao);
     bool devolver(DescricaoObra descricao);
-    int atualizarMulta(int valor);
+    int atualizarMulta(int valor);    // Increase fee
     string getCPF();
     int getMulta();
     bool pagarMulta(int valor);