diff --git a/src/main/java/leon/codegen/runtime/CaseClass.java b/src/main/java/leon/codegen/runtime/CaseClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..ea27c7853b4fb0f9a2eae287d186a00f73353e42
--- /dev/null
+++ b/src/main/java/leon/codegen/runtime/CaseClass.java
@@ -0,0 +1,5 @@
+package leon.codegen.runtime;
+
+public interface CaseClass {
+    public abstract Object[] productElements();
+}
diff --git a/src/main/scala/leon/codegen/CodeGeneration.scala b/src/main/scala/leon/codegen/CodeGeneration.scala
index a036dd71b1d6051bcb1578f2af83ff65bf6fe959..031494b1cae80d0f27bd54134fcb9ea63e930acc 100644
--- a/src/main/scala/leon/codegen/CodeGeneration.scala
+++ b/src/main/scala/leon/codegen/CodeGeneration.scala
@@ -229,6 +229,8 @@ object CodeGeneration {
       CLASS_ACC_ABSTRACT
     ).asInstanceOf[U2])
 
+    cf.addInterface("leon/codegen/runtime/CaseClass")
+
     cf.addDefaultConstructor
 
     cf.writeToFile(cName + ".class")
@@ -280,6 +282,30 @@ object CodeGeneration {
       cch.freeze
     }
 
+    locally {
+      val pem = cf.addMethod("[java/lang/Object;", "productElements")
+      pem.setFlags((
+        METHOD_ACC_PUBLIC |
+        METHOD_ACC_FINAL
+      ).asInstanceOf[U2])
+
+      val pech = pem.codeHandler
+
+      pech << Ldc(ccd.fields.size)
+      pech << NewArray("java/lang/Object")
+
+      for ((f, i) <- ccd.fields.zipWithIndex) {
+        pech << DUP
+        pech << Ldc(i)
+        pech << ALoad(0)
+        pech << GetField(cName, f.id.name, typeToJVM(f.tpe))
+        pech << AASTORE
+      }
+
+      pech << ARETURN
+      pech.freeze
+    }
+
     // definition of equals
     locally {
       val emh = cf.addMethod("Z", "equals", "Ljava/lang/Object;")
diff --git a/unmanaged/32/cafebabe_2.9.2-1.2.jar b/unmanaged/32/cafebabe_2.9.2-1.2.jar
index 66e18c2577b7570e01e67c4f8cdb94eafd934682..419228d2998d13301a9d6594316d2e773b3d0296 100644
Binary files a/unmanaged/32/cafebabe_2.9.2-1.2.jar and b/unmanaged/32/cafebabe_2.9.2-1.2.jar differ
diff --git a/unmanaged/64/cafebabe_2.9.2-1.2.jar b/unmanaged/64/cafebabe_2.9.2-1.2.jar
index 66e18c2577b7570e01e67c4f8cdb94eafd934682..47ba4d4848e69cb70792570da656c576701949b6 100644
Binary files a/unmanaged/64/cafebabe_2.9.2-1.2.jar and b/unmanaged/64/cafebabe_2.9.2-1.2.jar differ