diff --git a/sources/ControladorObras.cpp b/sources/ControladorObras.cpp
index 7449a1eff0c080c5b9fbcbb1ddbd59c3ae17bdfe..0cee3026758609c96279363f584dabe97336a7c8 100644
--- a/sources/ControladorObras.cpp
+++ b/sources/ControladorObras.cpp
@@ -13,19 +13,19 @@ ControladorObras::ControladorObras() {}
 void ControladorObras::mostrarDetalhes() const {
     for (const auto& obra : this->obras) {
         obra.mostrarDetalhes();
+        cout << endl;
     }
 }
 
 // Methods
-pair<int, int> ControladorObras::pesquisarObra(DescricaoObra descricao){
+pair<int, int> ControladorObras::pesquisarObra(DescricaoObra& descricao){
   pair <int, int> p = make_pair(0, 0);
 
   auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) {
-        d.mostrarDetalhes();
-        return descricao == d.getDescricaoObra();
+        return descricao.getTitulo() == d.getTitulo();
       });
 
-  if (it_obra != this->obras.end()) {
+  if (it_obra == this->obras.end()) {
     cout << "> Erro: Obra não encontrada" << endl;
   } else {
     p = make_pair(it_obra->getTotal(), it_obra->getDisponiveis());
@@ -34,9 +34,9 @@ pair<int, int> ControladorObras::pesquisarObra(DescricaoObra descricao){
   return p;
 }
 
-void ControladorObras::adicionarObra(DescricaoObra descricao){
+void ControladorObras::adicionarObra(DescricaoObra& descricao){
   auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) {
-        return descricao == d.getDescricaoObra();
+        return descricao.getTitulo() == d.getTitulo();
       });
 
   if (it_obra == this->obras.end()) {
@@ -47,13 +47,13 @@ void ControladorObras::adicionarObra(DescricaoObra descricao){
   }
 }
 
-bool ControladorObras::solicitarEmprestimo(DescricaoObra descricao){
+bool ControladorObras::solicitarEmprestimo(DescricaoObra& descricao){
 
   return true;
 }
 
 
-bool ControladorObras::devolverEmprestimo(DescricaoObra descricao){
+bool ControladorObras::devolverEmprestimo(DescricaoObra& descricao){
 
   return true;
 }
diff --git a/sources/ControladorObras.hpp b/sources/ControladorObras.hpp
index 82958e76242fc100225426bd57c686e9895e1554..10a8fa0152e3e3dc2b85217b7fe98dc0184f17d4 100644
--- a/sources/ControladorObras.hpp
+++ b/sources/ControladorObras.hpp
@@ -19,10 +19,10 @@ class ControladorObras {
     void mostrarDetalhes() const;
 
     // Methods
-    pair<int, int> pesquisarObra(DescricaoObra descricao);
-    void adicionarObra(DescricaoObra descricao);
-    bool solicitarEmprestimo(DescricaoObra descricao);
-    bool devolverEmprestimo(DescricaoObra descricao);
+    pair<int, int> pesquisarObra(DescricaoObra& descricao);
+    void adicionarObra(DescricaoObra& descricao);
+    bool solicitarEmprestimo(DescricaoObra& descricao);
+    bool devolverEmprestimo(DescricaoObra& descricao);
 
 };
 
diff --git a/sources/ControladorObras.o b/sources/ControladorObras.o
deleted file mode 100644
index 908ec4754d9bc2991fa28aca9bb1c84aded298be..0000000000000000000000000000000000000000
Binary files a/sources/ControladorObras.o and /dev/null differ
diff --git a/sources/DescricaoObra.hpp b/sources/DescricaoObra.hpp
index 738ece8156600221299dd1ddec7ca62c37085814..b290b38ad5b0d4c7f5ebf650f8cc884f5fc11bad 100644
--- a/sources/DescricaoObra.hpp
+++ b/sources/DescricaoObra.hpp
@@ -17,7 +17,7 @@ class DescricaoObra {
     // Contructor
     DescricaoObra();
     DescricaoObra(const string& tipo, const string& titulo, int ano);
-    virtual void mostrarDetalhes() const;
+    virtual void mostrarDetalhes() const = 0;
 
     // Operators
     bool operator==(const DescricaoObra& other) const;
diff --git a/sources/DescricaoObra.o b/sources/DescricaoObra.o
deleted file mode 100644
index 8a180334ad540b9d1c4abe036f150cdf7b5ce5f2..0000000000000000000000000000000000000000
Binary files a/sources/DescricaoObra.o and /dev/null differ
diff --git a/sources/Livro.o b/sources/Livro.o
deleted file mode 100644
index e2a8e858996ace76a6dbe9851711ee800ca7d531..0000000000000000000000000000000000000000
Binary files a/sources/Livro.o and /dev/null differ
diff --git a/sources/Obra.cpp b/sources/Obra.cpp
index e42f919f2bf8ba3f1703126cb373e48f2e6fbe83..3a967a149a03199311dcd39f62551f884594b6be 100644
--- a/sources/Obra.cpp
+++ b/sources/Obra.cpp
@@ -6,7 +6,7 @@
 #include "./Periodico.hpp"
 
 // Constructor
-Obra::Obra(DescricaoObra descricao)
+Obra::Obra(DescricaoObra& descricao)
   : descricao(descricao), disponiveis(1), total(1) {}
 
 void Obra::mostrarDetalhes() const {
@@ -29,14 +29,8 @@ void Obra::adicionarObra(){
   this->disponiveis++;
 }
 
-DescricaoObra Obra::getDescricaoObra() {
-  if (this->descricao.getTipo() == "livro") {
-    Livro l = static_cast<Livro&>(this->descricao);
-    return Livro(l.getTitulo(), l.getAnoPublicacao(), l.getAutor(), l.getEditora());
-  } else {
-    Periodico p = static_cast<Periodico&>(this->descricao);
-    return Periodico(p.getTitulo(), p.getAnoPublicacao(), p.getVolume(), p.getMes());
-  }
+string Obra::getTitulo() {
+  return this->descricao.getTitulo();
 }
 
 int Obra::getDisponiveis(){
diff --git a/sources/Obra.hpp b/sources/Obra.hpp
index f550c6aa3e07b7ca73da6cc8d10bb777adaeff4f..22971ccd019999a37d984ef80e63247c01d1e7cf 100644
--- a/sources/Obra.hpp
+++ b/sources/Obra.hpp
@@ -5,21 +5,21 @@
 
 class Obra {
   private:
-    DescricaoObra descricao;
+    DescricaoObra& descricao;
     int disponiveis;
     int total;
 
   public:
     // Contructor
     Obra();
-    Obra(DescricaoObra descricao);
+    Obra(DescricaoObra& descricao);
     virtual void mostrarDetalhes() const;
 
     // Methods
     bool emprestar();
     void devolver();
     void adicionarObra();
-    DescricaoObra getDescricaoObra();
+    string getTitulo();
     int getDisponiveis();
     int getTotal();
 
diff --git a/sources/Obra.o b/sources/Obra.o
deleted file mode 100644
index 98833e4698d1967dcbd20e21b94a2e47ce8bb644..0000000000000000000000000000000000000000
Binary files a/sources/Obra.o and /dev/null differ
diff --git a/sources/Periodico.o b/sources/Periodico.o
deleted file mode 100644
index e8d98d8378267cd2fc90b85ef330841542419b1b..0000000000000000000000000000000000000000
Binary files a/sources/Periodico.o and /dev/null differ
diff --git a/tdd/obras-test.cpp b/tdd/obras-test.cpp
index 40cb268f8cf7692afdf5b700e1cbf20ddf29de79..b5feaf36fd92d32ef0fa4badf3fc7b718922d5be 100644
--- a/tdd/obras-test.cpp
+++ b/tdd/obras-test.cpp
@@ -1,11 +1,12 @@
 #include <iostream>
+#include <tuple>
 #include "doctest.h"
 #include "../sources/ControladorObras.hpp"
 #include "../sources/Livro.hpp"
 #include "../sources/Periodico.hpp"
 
-TEST_CASE("Adicionar Periodico") {
-  cout << "==================> Adicionar Periodico <==================" << endl;
+TEST_CASE("Adicionar Obras") {
+  cout << "==================> Adicionar Obras <==================" << endl;
   cout << "> Instanciando o Controlador de Obras" << endl;
   ControladorObras contObras;
 
@@ -21,20 +22,35 @@ TEST_CASE("Adicionar Periodico") {
   cout << "==> Adicionando a obra" << endl;
   contObras.adicionarObra(p);
   contObras.mostrarDetalhes();
-  cout << endl;
 
   auto [total, disponiveis] = contObras.pesquisarObra(p);
   CHECK (1 == total);
   CHECK (1 == disponiveis);
-  cout << "======================================================" << endl;
 
-  //adicionar um que ja existe, incrementar
-}
+  cout << "==> Adicionando mais uma unidade da obra" << endl;
+  contObras.adicionarObra(p);
+  contObras.mostrarDetalhes();
+
+  tie(total, disponiveis) = contObras.pesquisarObra(p);
+  CHECK (2 == total);
+  CHECK (2 == disponiveis);
+
+  cout << "=> Instanciando um Livro: " << endl;
+  Livro l("C++ Programming", 2022, "John Doe", "Tech Books");
+  l.mostrarDetalhes();
+  cout << endl;
 
-//cadastrar periodico
-  // cout << "==> Instanciando um Livro: " << endl;
-  // Livro l("C++ Programming", 2022, "John Doe", "Tech Books");
-  // l.mostrarDetalhes();
-  // contObras.adicionarObra("livro", l);
-  // cout << endl;
+  CHECK ("C++ Programming" == l.getTitulo());
+  CHECK (2022 == l.getAnoPublicacao());
+  CHECK ("John Doe" == l.getAutor());
+  CHECK ("Tech Books" == l.getEditora());
 
+  cout << "==> Adicionando a obra" << endl;
+  contObras.adicionarObra(l);
+  contObras.mostrarDetalhes();
+
+  tie(total, disponiveis) = contObras.pesquisarObra(l);
+  CHECK (1 == total);
+  CHECK (1 == disponiveis);
+  cout << "======================================================" << endl;
+}