diff --git a/src/main/scala/leon/purescala/DefOps.scala b/src/main/scala/leon/purescala/DefOps.scala
index c6c51de132a8be00b0eeefd9e5bddbb83287ca9e..f81e5f44d593afbd97068db3aac4a0f72a8d3ca4 100644
--- a/src/main/scala/leon/purescala/DefOps.scala
+++ b/src/main/scala/leon/purescala/DefOps.scala
@@ -413,9 +413,9 @@ object DefOps {
       case e => None
     }(tt).asInstanceOf[T]
     
-    def duplicateClassDef(cd: ClassDef): Unit = {
+    def duplicateClassDef(cd: ClassDef): ClassDef = {
       cdMapCache.get(cd) match {
-        case Some(new_cd) => 
+        case Some(new_cd) => new_cd.get // None would have meant that this class would never be duplicated, which is not possible.
         case None =>
           val parent = cd.parent.map(duplicateAbstractClassType)
           val new_cd = cdMapF(cd).map(f => f(parent)).getOrElse{
@@ -425,6 +425,7 @@ object DefOps {
             }
           }
           cdMapCache += cd -> Some(new_cd)
+          new_cd
       }
     }