diff --git a/dynare++/tl/cc/equivalence.cc b/dynare++/tl/cc/equivalence.cc
index 85d1a9fa6080f9474b8797c156d4454ba50333dd..070bf00a153d38094355064e8bc655d6f67b5aa5 100644
--- a/dynare++/tl/cc/equivalence.cc
+++ b/dynare++/tl/cc/equivalence.cc
@@ -400,13 +400,6 @@ EquivalenceBundle::EquivalenceBundle(int nmax)
   generateUpTo(nmax);
 }
 
-/* Destruct bundle. Just free all pointers. */
-EquivalenceBundle::~EquivalenceBundle()
-{
-  for (auto & i : bundle)
-    delete i;
-}
-
 /* Remember, that the first item is |EquivalenceSet(1)|. */
 const EquivalenceSet &
 EquivalenceBundle::get(int n) const
@@ -414,11 +407,11 @@ EquivalenceBundle::get(int n) const
   if (n > (int) (bundle.size()) || n < 1)
     {
       TL_RAISE("Equivalence set not found in EquivalenceBundle::get");
-      return *(bundle[0]);
+      return bundle[0];
     }
   else
     {
-      return *(bundle[n-1]);
+      return bundle[n-1];
     }
 }
 
@@ -430,5 +423,5 @@ EquivalenceBundle::generateUpTo(int nmax)
 {
   int curmax = bundle.size();
   for (int i = curmax+1; i <= nmax; i++)
-    bundle.push_back(new EquivalenceSet(i));
+    bundle.emplace_back(i);
 }
diff --git a/dynare++/tl/cc/equivalence.hh b/dynare++/tl/cc/equivalence.hh
index 6b9c2e917e5b6d65dc1c527e1c47683ea2d2e88f..3f81cae54f6efbe2e34ac30ea9d857fbdcfc566e 100644
--- a/dynare++/tl/cc/equivalence.hh
+++ b/dynare++/tl/cc/equivalence.hh
@@ -212,10 +212,10 @@ private:
 
 class EquivalenceBundle
 {
-  vector<EquivalenceSet *> bundle;
+  vector<EquivalenceSet> bundle;
 public:
   EquivalenceBundle(int nmax);
-  ~EquivalenceBundle();
+  ~EquivalenceBundle() = default;
   const EquivalenceSet&get(int n) const;
   void generateUpTo(int nmax);
 };