diff --git a/src/main/scala/leon/datagen/NaiveDataGen.scala b/src/main/scala/leon/datagen/NaiveDataGen.scala
index d65e5ce1d7fb1312f3009b600eaae79dc82f0324..212b3ba226bee348ad4a4cc6c0eaa957fe39afff 100644
--- a/src/main/scala/leon/datagen/NaiveDataGen.scala
+++ b/src/main/scala/leon/datagen/NaiveDataGen.scala
@@ -57,7 +57,10 @@ class NaiveDataGen(ctx: LeonContext, p: Program, evaluator: Evaluator, _bounds :
         // generating lists.
         val ccChildren = act.knownCCDescendents
 
-        val (leafs,conss) = ccChildren.partition(_.fields.size == 0)
+        val (leafs,conss) = ccChildren.partition(_.fields.isEmpty)
+        
+        // FIXME: Will not work for mutually recursive types
+        val sortedConss = conss sortBy { _.fields.count{ _.getType.isInstanceOf[ClassType]}}
 
         // The stream for leafs...
         val leafsStream = leafs.toStream.flatMap { cct =>
@@ -65,7 +68,7 @@ class NaiveDataGen(ctx: LeonContext, p: Program, evaluator: Evaluator, _bounds :
         }
 
         // ...to which we append the streams for constructors.
-        leafsStream.append(interleave(conss.map { cct =>
+        leafsStream.append(interleave(sortedConss.map { cct =>
           generate(cct)
         }))