diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java
index 595323f56d658ae8c66a99db43938e9b149dc1d9..f8c5cfe98d48a033d057efc83cdc2865c5c7625d 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java
@@ -145,8 +145,7 @@ public final class RASTUtils {
             return RDataFactory.createSymbol(id);
         } else {
             assert element instanceof RSyntaxCall || element instanceof RSyntaxFunction;
-            Closure closure = RContext.getInstance().languageClosureCache.getOrCreateLanguageClosure(((RSyntaxNode) element).asRNode());
-            return RDataFactory.createLanguage(closure);
+            return RDataFactory.createLanguage(Closure.createLanguageClosure(((RSyntaxNode) element).asRNode()));
         }
     }
 
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLanguage.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLanguage.java
index 7e7ac0239fa4eeda84f436fb925526ead6417855..7fa8714d7a91980ce6aa176867b37e4e7bbedcef 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLanguage.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLanguage.java
@@ -87,11 +87,7 @@ public final class RLanguage extends RSharingAttributeStorage implements RAbstra
         return RContext.getRRuntimeASTAccess().createLanguageFromList(l, type);
     }
 
-    public Closure getClosure() {
-        return closure;
-    }
-
-    public RBaseNode getRep() {
+    private void regenerateFromList() {
         if (list != null) {
             // we could rest rep but we keep it around to remember type of the language object
             assert closure.getExpr() != null;
@@ -99,10 +95,20 @@ public final class RLanguage extends RSharingAttributeStorage implements RAbstra
             RPairList oldList = this.list;
             this.list = null;
             RLanguage newLang = (RLanguage) fromList(oldList, RContext.getRRuntimeASTAccess().getRepType(this));
-            this.closure = newLang.getClosure();
+            assert newLang.list == null;
+            this.closure = newLang.closure;
             this.length = newLang.length;
             this.attributes = newLang.attributes;
         }
+    }
+
+    public Closure getClosure() {
+        regenerateFromList();
+        return closure;
+    }
+
+    public RBaseNode getRep() {
+        regenerateFromList();
         return closure.getExpr();
     }