diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFrame.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFrame.java
index 5b83186b0534f96d2a776ba19cb6911c6a2e4cc3..bc87049e1bde8f8de4be1ece6de7f893508d3d28 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFrame.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFrame.java
@@ -97,6 +97,11 @@ public final class RDataFrame implements RShareable, RAbstractContainer {
         return null;
     }
 
+    @Override
+    public void setDimensions(int[] newDimensions) {
+        Utils.nyi("data frame's dimensions need to be set using builtins");
+    }
+
     @Override
     public Class<?> getElementClass() {
         return RDataFrame.class;
@@ -121,17 +126,32 @@ public final class RDataFrame implements RShareable, RAbstractContainer {
         return vector.getNames(attrProfiles);
     }
 
+    @Override
+    public void setNames(RStringVector newNames) {
+        vector.setNames(newNames);
+    }
+
     @Override
     public RList getDimNames() {
         Utils.nyi("data frame's dimnames needs to be obtained using builtins");
         return null;
     }
 
+    @Override
+    public void setDimNames(RList newDimNames) {
+        vector.setDimNames(newDimNames);
+    }
+
     @Override
     public Object getRowNames(RAttributeProfiles attrProfiles) {
         return vector.getRowNames(attrProfiles);
     }
 
+    @Override
+    public void setRowNames(RAbstractVector rowNames) {
+        vector.setRowNames(rowNames);
+    }
+
     @Override
     public RStringVector getClassHierarchy() {
         return vector.getClassHierarchy();
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RExpression.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RExpression.java
index b886be702fdf78e3e27b32cd6d3fe010b45432f9..d6e0c6109909bf2654b5cf36aed00560ff144b89 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RExpression.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RExpression.java
@@ -69,6 +69,11 @@ public class RExpression implements RShareable, RAbstractContainer {
         return data.getDimensions();
     }
 
+    @Override
+    public void setDimensions(int[] newDimensions) {
+        data.setDimensions(newDimensions);
+    }
+
     public Class<?> getElementClass() {
         return RExpression.class;
     }
@@ -81,19 +86,36 @@ public class RExpression implements RShareable, RAbstractContainer {
         return data.getDataAtAsObject(index);
     }
 
+    @Override
     public RStringVector getNames(RAttributeProfiles attrProfiles) {
         return data.getNames(attrProfiles);
     }
 
+    @Override
+    public void setNames(RStringVector newNames) {
+        data.setNames(newNames);
+    }
+
+    @Override
     public RList getDimNames() {
         return data.getDimNames();
     }
 
+    @Override
+    public void setDimNames(RList newDimNames) {
+        data.setDimNames(newDimNames);
+    }
+
     @Override
     public Object getRowNames(RAttributeProfiles attrProfiles) {
         return data.getRowNames(attrProfiles);
     }
 
+    @Override
+    public void setRowNames(RAbstractVector rowNames) {
+        data.setRowNames(rowNames);
+    }
+
     public RStringVector getClassHierarchy() {
         return data.getClassHierarchy();
     }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RFactor.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RFactor.java
index 89dda737a0c507650e07f633ca05d1c2b9f62d39..243cc4483c9b6a45ea69a1766b0bcb133be551df 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RFactor.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RFactor.java
@@ -98,6 +98,11 @@ public final class RFactor implements RShareable, RAbstractContainer {
         return vector.getDimensions();
     }
 
+    @Override
+    public void setDimensions(int[] newDimensions) {
+        vector.setDimensions(newDimensions);
+    }
+
     @Override
     public Class<?> getElementClass() {
         return RFactor.class;
@@ -122,16 +127,31 @@ public final class RFactor implements RShareable, RAbstractContainer {
         return vector.getNames(attrProfiles);
     }
 
+    @Override
+    public void setNames(RStringVector newNames) {
+        vector.setNames(newNames);
+    }
+
     @Override
     public RList getDimNames() {
         return vector.getDimNames();
     }
 
+    @Override
+    public void setDimNames(RList newDimNames) {
+        vector.setDimNames(newDimNames);
+    }
+
     @Override
     public Object getRowNames(RAttributeProfiles attrProfiles) {
         return vector.getRowNames(attrProfiles);
     }
 
+    @Override
+    public void setRowNames(RAbstractVector rowNames) {
+        vector.setRowNames(rowNames);
+    }
+
     @Override
     public RStringVector getClassHierarchy() {
         return vector.getClassHierarchy();
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 c7f1926a1bb6935a69c572f931873ae8c4d9efe0..cb3933d8e74b682e41336e9052138b0c72e20976 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
@@ -72,8 +72,7 @@ public class RLanguage extends RLanguageRep implements RAbstractContainer, RAttr
     }
 
     public boolean isComplete() {
-        assert false;
-        return false;
+        throw RInternalError.shouldNotReachHere();
     }
 
     public int getLength() {
@@ -93,18 +92,21 @@ public class RLanguage extends RLanguageRep implements RAbstractContainer, RAttr
         return null;
     }
 
+    @Override
+    public void setDimensions(int[] newDimensions) {
+        throw RInternalError.unimplemented();
+    }
+
     public Class<?> getElementClass() {
         return RLanguage.class;
     }
 
     public RVector materializeNonSharedVector() {
-        assert false;
-        return null;
+        throw RInternalError.shouldNotReachHere();
     }
 
     public RShareable materializeToShareable() {
-        assert false;
-        return null;
+        throw RInternalError.shouldNotReachHere();
     }
 
     public Object getDataAtAsObject(int index) {
@@ -116,16 +118,31 @@ public class RLanguage extends RLanguageRep implements RAbstractContainer, RAttr
         return (RStringVector) getAttr(attrProfiles, RRuntime.NAMES_ATTR_KEY);
     }
 
+    @Override
+    public void setNames(RStringVector newNames) {
+        setAttr(RRuntime.NAMES_ATTR_KEY, newNames);
+    }
+
     @Override
     public RList getDimNames() {
         return (RList) getAttr(localAttrProfiles, RRuntime.DIMNAMES_ATTR_KEY);
     }
 
+    @Override
+    public void setDimNames(RList newDimNames) {
+        setAttr(RRuntime.DIMNAMES_ATTR_KEY, newDimNames);
+    }
+
     @Override
     public Object getRowNames(RAttributeProfiles attrProfiles) {
         return getAttr(attrProfiles, RRuntime.ROWNAMES_ATTR_KEY);
     }
 
+    @Override
+    public void setRowNames(RAbstractVector rowNames) {
+        setAttr(RRuntime.ROWNAMES_ATTR_KEY, rowNames);
+    }
+
     public RStringVector getClassHierarchy() {
         return RDataFactory.createStringVector(RRuntime.CLASS_LANGUAGE);
     }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java
index acd47e767aa6a51f070458e43c169b3ce32c70eb..13f963239b14cbef1a1fd9bf51e514d00730d914 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java
@@ -129,6 +129,11 @@ public class RPairList extends RAttributeStorage implements RAttributable, RAbst
         return new int[]{1};
     }
 
+    @Override
+    public void setDimensions(int[] newDimensions) {
+        throw RInternalError.shouldNotReachHere();
+    }
+
     public Class<?> getElementClass() {
         return null;
     }
@@ -153,6 +158,7 @@ public class RPairList extends RAttributeStorage implements RAttributable, RAbst
         return pl.car;
     }
 
+    @Override
     public RStringVector getNames(RAttributeProfiles attrProfiles) {
         int l = getLength();
         String[] data = new String[l];
@@ -173,12 +179,29 @@ public class RPairList extends RAttributeStorage implements RAttributable, RAbst
         return RDataFactory.createStringVector(data, complete);
     }
 
+    @Override
+    public void setNames(RStringVector newNames) {
+        throw RInternalError.shouldNotReachHere();
+    }
+
+    @Override
     public RList getDimNames() {
-        return null;
+        throw RInternalError.shouldNotReachHere();
     }
 
+    @Override
+    public void setDimNames(RList newDimNames) {
+        throw RInternalError.shouldNotReachHere();
+    }
+
+    @Override
     public Object getRowNames(RAttributeProfiles attrProfiles) {
-        return null;
+        throw RInternalError.shouldNotReachHere();
+    }
+
+    @Override
+    public void setRowNames(RAbstractVector rowNames) {
+        throw RInternalError.shouldNotReachHere();
     }
 
     public RStringVector getClassHierarchy() {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RSequence.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RSequence.java
index 70573b296eb97c1c4a764440830e0efaa83ac8b6..a8eb66ce8badf0993dd533e09d30a35a0a74edd3 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RSequence.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RSequence.java
@@ -50,6 +50,12 @@ public abstract class RSequence extends RBounded implements RAbstractVector {
         return null;
     }
 
+    @Override
+    public void setDimensions(int[] newDimensions) {
+        // should only be used on materialized sequence
+        throw RInternalError.shouldNotReachHere();
+    }
+
     public final RVector createVector() {
         return internalCreateVector();
     }
@@ -76,21 +82,37 @@ public abstract class RSequence extends RBounded implements RAbstractVector {
         return null;
     }
 
+    @Override
+    public void setNames(RStringVector newNames) {
+        // should only be used on materialized sequence
+        throw RInternalError.shouldNotReachHere();
+    }
+
     @Override
     public final RList getDimNames() {
         return null;
     }
 
+    @Override
+    public void setDimNames(RList newDimNames) {
+        // should only be used on materialized sequence
+        throw RInternalError.shouldNotReachHere();
+    }
+
     @Override
     public final Object getRowNames(RAttributeProfiles attrProfiles) {
         return RNull.instance;
     }
 
+    @Override
+    public void setRowNames(RAbstractVector rowNames) {
+        // should only be used on materialized sequence
+        throw RInternalError.shouldNotReachHere();
+    }
+
     @Override
     public final RAttributes initAttributes() {
-        // TODO implement
-        assert false;
-        return null;
+        throw RInternalError.shouldNotReachHere();
     }
 
     @Override
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToVectorClosure.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToVectorClosure.java
index e977dd5da3fd1bc6041a414883efc37070b6a698..c632afb30b605af64dc39eb00ccbd3e0c8de5646 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToVectorClosure.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToVectorClosure.java
@@ -43,14 +43,21 @@ public abstract class RToVectorClosure implements RAbstractVector {
         return vector.isComplete();
     }
 
+    @Override
     public boolean hasDimensions() {
         return vector.hasDimensions();
     }
 
+    @Override
     public int[] getDimensions() {
         return vector.getDimensions();
     }
 
+    @Override
+    public void setDimensions(int[] newDimensions) {
+        vector.setDimensions(newDimensions);
+    }
+
     @Override
     public final void verifyDimensions(int[] newDimensions, SourceSection sourceSection) {
         vector.verifyDimensions(newDimensions, sourceSection);
@@ -61,16 +68,31 @@ public abstract class RToVectorClosure implements RAbstractVector {
         return vector.getNames(attrProfiles);
     }
 
+    @Override
+    public void setNames(RStringVector newNames) {
+        vector.setNames(newNames);
+    }
+
     @Override
     public RList getDimNames() {
         return vector.getDimNames();
     }
 
+    @Override
+    public void setDimNames(RList newDimNames) {
+        vector.setDimNames(newDimNames);
+    }
+
     @Override
     public Object getRowNames(RAttributeProfiles attrProfiles) {
         return vector.getRowNames(attrProfiles);
     }
 
+    @Override
+    public void setRowNames(RAbstractVector rowNames) {
+        vector.setRowNames(rowNames);
+    }
+
     @Override
     public RAttributes initAttributes() {
         return vector.initAttributes();
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractContainer.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractContainer.java
index 0e0a46a4214e10e0749a332186296c2484d2f97f..2c487978638193bbaa218ea8bf8ce6e97ea4c898 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractContainer.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractContainer.java
@@ -34,6 +34,8 @@ public interface RAbstractContainer extends RAttributable, RClassHierarchy, RTyp
 
     int[] getDimensions();
 
+    void setDimensions(int[] newDimensions);
+
     Class<?> getElementClass();
 
     RVector materializeNonSharedVector();
@@ -44,10 +46,16 @@ public interface RAbstractContainer extends RAttributable, RClassHierarchy, RTyp
 
     RStringVector getNames(RAttributeProfiles attrProfiles);
 
+    void setNames(RStringVector newNames);
+
     RList getDimNames();
 
+    void setDimNames(RList newDimNames);
+
     Object getRowNames(RAttributeProfiles attrProfiles);
 
+    void setRowNames(RAbstractVector rowNames);
+
     /**
      * Returns {@code true} if and only if the value has a {@code class} attribute added explicitly.
      * When {@code true}, it is possible to call {@link RClassHierarchy#getClassHierarchy()}.
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractVector.java
index d118ff88be5a01c33f52089ddec7e2307e9b0d33..6455555482eca6ab6899ce4d0abecce1ac02401b 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/model/RAbstractVector.java
@@ -28,10 +28,6 @@ import com.oracle.truffle.r.runtime.data.*;
 
 public interface RAbstractVector extends RAbstractContainer {
 
-    boolean hasDimensions();
-
-    int[] getDimensions();
-
     /**
      * Creates a copy of the vector. This copies all of the contained data as well. If the data in
      * the vector is to be updated upon copying, the corresponding {@code copyResetData()} method
@@ -58,8 +54,6 @@ public interface RAbstractVector extends RAbstractContainer {
 
     RVector materialize();
 
-    RList getDimNames();
-
     boolean isMatrix();
 
     boolean isArray();