diff --git a/src/main/scala/leon/codegen/CodeGeneration.scala b/src/main/scala/leon/codegen/CodeGeneration.scala
index 9030ba304b3f5bbe58fb1f4b8e3415abd33db5d0..4cfbc037c1054b2c7c408ac8202ab0ea2598a873 100644
--- a/src/main/scala/leon/codegen/CodeGeneration.scala
+++ b/src/main/scala/leon/codegen/CodeGeneration.scala
@@ -682,6 +682,11 @@ trait CodeGeneration {
         load(monitorID, ch)
 
         ch << Ldc(id)
+        if (tfd.fd.tparams.nonEmpty) {
+          loadTypes(tfd.tps, ch)
+        } else {
+          ch << Ldc(0) << NewArray.primitive("T_INT")
+        }
 
         ch << Ldc(as.size)
         ch << NewArray(ObjectClass)
diff --git a/src/test/scala/leon/integration/evaluators/EvaluatorSuite.scala b/src/test/scala/leon/integration/evaluators/EvaluatorSuite.scala
index 84b0087caee305b66e16d82ad2adcd9f4b10e06d..812cf88eac2508814b1218eeb85a787bcad2d4ff 100644
--- a/src/test/scala/leon/integration/evaluators/EvaluatorSuite.scala
+++ b/src/test/scala/leon/integration/evaluators/EvaluatorSuite.scala
@@ -369,28 +369,11 @@ class EvaluatorSuite extends LeonTestSuiteWithProgram with ExpressionsDSL {
   }
 
   test("Lambda functions") { implicit fix =>
-    def checkLambda(e: Evaluator, in: Expr, out: PartialFunction[Expr, Boolean]) {
-      val res = eval(e, in).success
-      if (!out.isDefinedAt(res) || !out(res))
-        throw new AssertionError(s"Evaluation of '$in' with evaluator '${e.name}' produced invalid '$res'.")
-    }
-
-    val ONE = bi(1)
-    val TWO = bi(2)
-
     for(e <- allEvaluators) {
-      checkLambda(e, fcall("Lambda.foo1")(), {
-        case Lambda(Seq(vd), Variable(id)) if vd.id == id => true 
-      })
-      checkLambda(e, fcall("Lambda.foo2")(), {
-        case Lambda(Seq(vd), Plus(ONE, Variable(id))) if vd.id == id => true
-      })
-      checkLambda(e, fcall("Lambda.foo3")(), {
-        case Lambda(Seq(vx, vy), Plus(Plus(Variable(x), ONE), Plus(Variable(y), TWO))) if vx.id == x && vy.id == y => true 
-      })
-      checkLambda(e, fcall("Lambda.foo4")(TWO), {
-        case Lambda(Seq(vd), Plus(Variable(id), TWO)) if vd.id == id => true 
-      })
+      eval(e, Application(fcall("Lambda.foo1")(), Seq(bi(1))))        === bi(1)
+      eval(e, Application(fcall("Lambda.foo2")(), Seq(bi(1))))        === bi(2)
+      eval(e, Application(fcall("Lambda.foo3")(), Seq(bi(1), bi(2)))) === bi(6)
+      eval(e, Application(fcall("Lambda.foo4")(bi(2)), Seq(bi(1))))   === bi(3)
     }
   }