diff --git a/src/main/java/leon/codegen/runtime/Tuple.java b/src/main/java/leon/codegen/runtime/Tuple.java
index 93ed1403275bfb1c4962f65ea0c7b763fe015b6f..c8f46923bdd47184264cf8ac73ce5a6b757de4fd 100644
--- a/src/main/java/leon/codegen/runtime/Tuple.java
+++ b/src/main/java/leon/codegen/runtime/Tuple.java
@@ -7,8 +7,8 @@ public final class Tuple {
   private Object[] elements;
 
   // You may think that using varargs here would show less of the internals,
-  // however the bytecode to generate is exactly the same, so let's reflect
-  // the reality instead.
+  // however the bytecode is exactly the same, so let's reflect the reality
+  // instead.
   public Tuple(int arity, Object[] elements) {
     this.arity = arity;
     this.elements = Arrays.copyOf(elements, elements.length);
diff --git a/src/main/scala/leon/codegen/CodeGeneration.scala b/src/main/scala/leon/codegen/CodeGeneration.scala
index 422e17778530083135c2216710687ad1c494c3db..b585b5b1c36573d939be3b499379d59be3c19f94 100644
--- a/src/main/scala/leon/codegen/CodeGeneration.scala
+++ b/src/main/scala/leon/codegen/CodeGeneration.scala
@@ -79,6 +79,24 @@ object CodeGeneration {
         ch << instr
         mkExpr(b, ch)(env.withVars(Map(i -> slot)))
 
+      case LetTuple(is,d,b) =>
+        mkExpr(d, ch) // the tuple
+        var count = 0
+        val withSlots = is.map(i => (i, ch.getFreshVar))
+        for((i,s) <- withSlots) {
+          ch << DUP
+          ch << Ldc(count)
+          ch << InvokeVirtual(TupleClass, "get", "(I)Ljava/lang/Object;")
+          mkUnbox(i.getType, ch)
+          val instr = i.getType match {
+            case Int32Type | BooleanType => IStore(s)
+            case _ => AStore(s)
+          }
+          ch << instr
+          count += 1
+        }
+        mkExpr(b, ch)(env.withVars(withSlots.toMap))
+
       case IntLiteral(v) =>
         ch << Ldc(v)
 
diff --git a/src/test/resources/regression/codegen/purescala/Prog003.scala b/src/test/resources/regression/codegen/purescala/Prog003.scala
index 69236b64e2cdc59502125fbd8e78346ba6405323..82958305781e8e1efad738720f0cf5f30ff0e6b0 100644
--- a/src/test/resources/regression/codegen/purescala/Prog003.scala
+++ b/src/test/resources/regression/codegen/purescala/Prog003.scala
@@ -5,4 +5,10 @@ object Prog003 {
   def fst(t : (Int,Boolean)) : Int = t._1
 
   def snd(t : (Int,Boolean)) : Boolean = t._2
+
+  def swap(t : (Int,Boolean)) : (Boolean,Int) = {
+    val (i,b) = t
+
+    (b,i)
+  }
 }