diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java
index 893f3a0ac9477681f093d9ac8ad0b33e67806510..64469c9a6a1e3f344225d90e6dddd5ff25a551db 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java
@@ -22,10 +22,13 @@
  */
 package com.oracle.truffle.r.nodes.builtin.base;
 
+import com.oracle.truffle.api.*;
 import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.frame.*;
 import com.oracle.truffle.r.nodes.*;
 import com.oracle.truffle.r.nodes.access.*;
 import com.oracle.truffle.r.nodes.builtin.*;
+import com.oracle.truffle.r.nodes.unary.*;
 import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.*;
 import com.oracle.truffle.r.runtime.data.model.*;
@@ -35,8 +38,69 @@ public abstract class AsVector extends RBuiltinNode {
 
     private static final String[] PARAMETER_NAMES = new String[]{"x", "mode"};
 
-    // @Child protected AsComplex asComplex;
-    // @Child protected AsLogical asLogical;
+    @Child private CastIntegerNode castInteger;
+    @Child private CastDoubleNode castDouble;
+    @Child private CastComplexNode castComplex;
+    @Child private CastLogicalNode castLogical;
+    @Child private CastStringNode castString;
+    @Child private CastRawNode castRaw;
+    @Child private CastListNode castList;
+
+    private RIntVector castInteger(VirtualFrame frame, Object operand) {
+        if (castInteger == null) {
+            CompilerDirectives.transferToInterpreter();
+            castInteger = adoptChild(CastIntegerNodeFactory.create(null, false, false));
+        }
+        return (RIntVector) castInteger.executeIntVector(frame, operand);
+    }
+
+    private RDoubleVector castDouble(VirtualFrame frame, Object operand) {
+        if (castDouble == null) {
+            CompilerDirectives.transferToInterpreter();
+            castDouble = adoptChild(CastDoubleNodeFactory.create(null, false, false));
+        }
+        return (RDoubleVector) castDouble.executeDoubleVector(frame, operand);
+    }
+
+    private RComplexVector castComplex(VirtualFrame frame, Object operand) {
+        if (castComplex == null) {
+            CompilerDirectives.transferToInterpreter();
+            castComplex = adoptChild(CastComplexNodeFactory.create(null, false, false));
+        }
+        return (RComplexVector) castComplex.executeComplexVector(frame, operand);
+    }
+
+    private RLogicalVector castLogical(VirtualFrame frame, Object operand) {
+        if (castLogical == null) {
+            CompilerDirectives.transferToInterpreter();
+            castLogical = adoptChild(CastLogicalNodeFactory.create(null, false, false));
+        }
+        return (RLogicalVector) castLogical.executeLogicalVector(frame, operand);
+    }
+
+    private RStringVector castString(VirtualFrame frame, Object operand) {
+        if (castString == null) {
+            CompilerDirectives.transferToInterpreter();
+            castString = adoptChild(CastStringNodeFactory.create(null, false, false, false));
+        }
+        return (RStringVector) castString.executeStringVector(frame, operand);
+    }
+
+    private RRawVector castRaw(VirtualFrame frame, Object operand) {
+        if (castRaw == null) {
+            CompilerDirectives.transferToInterpreter();
+            castRaw = adoptChild(CastRawNodeFactory.create(null, false, false));
+        }
+        return (RRawVector) castRaw.executeRawVector(frame, operand);
+    }
+
+    private RList castList(VirtualFrame frame, Object operand) {
+        if (castList == null) {
+            CompilerDirectives.transferToInterpreter();
+            castList = adoptChild(CastListNodeFactory.create(null, true, false));
+        }
+        return castList.executeList(frame, operand);
+    }
 
     @Override
     public Object[] getParameterNames() {
@@ -53,48 +117,86 @@ public abstract class AsVector extends RBuiltinNode {
         return x;
     }
 
-    @Specialization(order = 20, guards = "modeIsAnyOrMatches")
+    @Specialization(order = 100, guards = "castToInt")
+    public RAbstractVector asVectorInt(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
+        return castInteger(frame, x);
+    }
+
+    @Specialization(order = 200, guards = "castToDouble")
+    public RAbstractVector asVectorDouble(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
+        return castDouble(frame, x);
+    }
+
+    @Specialization(order = 300, guards = "castToComplex")
+    public RAbstractVector asVectorComplex(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
+        return castComplex(frame, x);
+    }
+
+    @Specialization(order = 400, guards = "castToLogical")
+    public RAbstractVector asVectorLogical(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
+        return castLogical(frame, x);
+    }
+
+    @Specialization(order = 500, guards = "castToString")
+    public RAbstractVector asVectorString(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
+        return castString(frame, x);
+    }
+
+    @Specialization(order = 600, guards = "castToRaw")
+    public RAbstractVector asVectorRaw(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
+        return castRaw(frame, x);
+    }
+
+    @Specialization(order = 700, guards = "castToList")
+    public RAbstractVector asVectorList(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
+        return castList(frame, x);
+    }
+
+    @Specialization(order = 1000)
+    public RAbstractVector asVector(RList x, @SuppressWarnings("unused") String mode) {
+        RList result = x.copyWithNewDimensions(null);
+        result.copyNamesFrom(x);
+        return result;
+    }
+
+    @Specialization(order = 1001, guards = "modeIsAnyOrMatches")
     public RAbstractVector asVector(RAbstractVector x, @SuppressWarnings("unused") String mode) {
         return x.copyWithNewDimensions(null);
     }
 
-    // FIXME comment these in (and extend) once polymorphic nodes are supported
-
-    // @Specialization(order = 40, guards = "castToLogical")
-    // public RLogicalVector asVectorLogical(VirtualFrame frame, RAbstractVector x,
-    // @SuppressWarnings("unused") String mode) {
-    // if (asLogical == null) {
-    // CompilerDirectives.transferToInterpreter();
-    // asLogical = adoptChild(AsLogicalFactory.create(new RNode[1], getContext(), getBuiltin()));
-    // }
-    // try {
-    // return asLogical.executeRLogicalVector(frame, x).copyWithNewDimensions(null);
-    // } catch (UnexpectedResultException ure) {
-    // throw new IllegalStateException(ure);
-    // }
-    // }
-
-    // @Specialization(order = 60, guards = "castToComplex")
-    // public RComplexVector asVectorComplex(VirtualFrame frame, RAbstractVector x,
-    // @SuppressWarnings("unused") String mode) {
-    // if (asComplex == null) {
-    // CompilerDirectives.transferToInterpreter();
-    // asComplex = adoptChild(AsComplexFactory.create(new RNode[1], getContext(), getBuiltin()));
-    // }
-    // try {
-    // return asComplex.executeRComplexVector(frame, x).copyWithNewDimensions(null);
-    // } catch (UnexpectedResultException ure) {
-    // throw new IllegalStateException(ure);
-    // }
-    // }
-
-    // protected boolean castToLogical(RAbstractVector x, String mode) {
-    // return x.getElementClass() != RLogical.class && RRuntime.TYPE_LOGICAL.equals(mode);
-    // }
-
-    // protected boolean castToComplex(RAbstractVector x, String mode) {
-    // return x.getElementClass() != RComplex.class && RRuntime.TYPE_COMPLEX.equals(mode);
-    // }
+    @SuppressWarnings("unused")
+    @Specialization(order = 1002, guards = "!modeIsAnyOrMatches")
+    public RAbstractVector asVectorWrongMode(RAbstractVector x, String mode) {
+        throw RError.getInvalidMode(getSourceSection());
+    }
+
+    protected boolean castToInt(RAbstractVector x, String mode) {
+        return x.getElementClass() != RInt.class && RRuntime.TYPE_INTEGER.equals(mode);
+    }
+
+    protected boolean castToDouble(RAbstractVector x, String mode) {
+        return x.getElementClass() != RDouble.class && (RRuntime.TYPE_NUMERIC.equals(mode) || RRuntime.TYPE_DOUBLE.equals(mode));
+    }
+
+    protected boolean castToComplex(RAbstractVector x, String mode) {
+        return x.getElementClass() != RComplex.class && RRuntime.TYPE_COMPLEX.equals(mode);
+    }
+
+    protected boolean castToLogical(RAbstractVector x, String mode) {
+        return x.getElementClass() != RLogical.class && RRuntime.TYPE_LOGICAL.equals(mode);
+    }
+
+    protected boolean castToString(RAbstractVector x, String mode) {
+        return x.getElementClass() != RString.class && RRuntime.TYPE_CHARACTER.equals(mode);
+    }
+
+    protected boolean castToRaw(RAbstractVector x, String mode) {
+        return x.getElementClass() != RRaw.class && RRuntime.TYPE_RAW.equals(mode);
+    }
+
+    protected boolean castToList(@SuppressWarnings("unused") RAbstractVector x, String mode) {
+        return mode.equals("list");
+    }
 
     protected boolean modeIsAnyOrMatches(RAbstractVector x, String mode) {
         return RRuntime.TYPE_ANY.equals(mode) || RRuntime.classToString(x.getElementClass()).equals(mode) || x.getElementClass() == RDouble.class && RRuntime.TYPE_DOUBLE.equals(mode);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SApply.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SApply.java
index 58d99dccd12e7166937c7a51a9a68a550d18ec8c..eeab41abd7293f1327db281a30fd37a5b2329d1d 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SApply.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SApply.java
@@ -235,7 +235,7 @@ public abstract class SApply extends RBuiltinNode {
             CompilerDirectives.transferToInterpreter();
             castString = adoptChild(CastStringNodeFactory.create(null, false, true, false));
         }
-        return (RStringVector) castString.executeString(frame, value);
+        return (RStringVector) castString.executeStringVector(frame, value);
     }
 
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
index 518762f22c61515eb8d872bd69a9757f1a3215d7..b0f9c9ad0a32c689286ad71af9183ed5ae1ef6ac 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
@@ -44,7 +44,7 @@ public abstract class UpdateDimNames extends RBuiltinNode {
             CompilerDirectives.transferToInterpreter();
             castStringNode = adoptChild(CastStringNodeFactory.create(null, true, true, false));
         }
-        return castStringNode.executeStringVector(frame, o);
+        return castStringNode.executeCast(frame, o);
     }
 
     public abstract Object executeList(VirtualFrame frame, RAbstractVector vector, Object o);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java
index 4786dc93ad18b81e768d0fa63fb8d79b1d070c86..1410099d1670868cebe7bac62c4f1886bf0d54d5 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java
@@ -238,7 +238,7 @@ public abstract class CastDoubleNode extends CastNode {
     }
 
     @Generic
-    public int doOther(Object operand) {
+    public double doOther(Object operand) {
         CompilerDirectives.transferToInterpreter();
         throw new ConversionFailedException(operand.getClass().getName());
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
index 18c6f6335ea7dd35125b5b807462b8864926c384..85d01f2de1aaea41a48d7a244b7ac70240805c7e 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
@@ -2623,6 +2623,104 @@ out-of-range values treated as 0 in coercion to raw
 Warning message:
 out-of-range values treated as 0 in coercion to raw
 
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#x<-c(a=1.1, b=2.2); as.vector(x, "raw")
+[1] 01 02
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#x<-c(a=1L, b=2L); as.vector(x, "complex")
+[1] 1+0i 2+0i
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ as.vector("foo") }
+[1] "foo"
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ as.vector("foo", "bar") }
+Error in as.vector(x, mode) : invalid 'mode' argument
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ as.vector("foo", "character") }
+[1] "foo"
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ as.vector("foo", "double") }
+[1] NA
+Warning message:
+In as.vector("foo", "double") : NAs introduced by coercion
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ as.vector("foo", "integer") }
+[1] NA
+Warning message:
+In as.vector("foo", "integer") : NAs introduced by coercion
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ as.vector("foo", "list") }
+[[1]]
+[1] "foo"
+
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ as.vector("foo", "logical") }
+[1] NA
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ as.vector("foo", "numeric") }
+[1] NA
+Warning message:
+In as.vector("foo", "numeric") : NAs introduced by coercion
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ as.vector("foo", "raw") }
+[1] 00
+Warning messages:
+1: In as.vector("foo", "raw") : NAs introduced by coercion
+2: In as.vector("foo", "raw") :
+  out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ as.vector(c("foo", "bar"), "raw") }
+[1] 00 00
+Warning messages:
+1: In as.vector(c("foo", "bar"), "raw") : NAs introduced by coercion
+2: In as.vector(c("foo", "bar"), "raw") :
+  out-of-range values treated as 0 in coercion to raw
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ x<-1:4; dim(x)<-c(2, 2); dimnames(x)<-list(c("a", "b"), c("c", "d")); y<-as.vector(x, "list"); y }
+[[1]]
+[1] 1
+
+[[2]]
+[1] 2
+
+[[3]]
+[1] 3
+
+[[4]]
+[1] 4
+
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ x<-c(a=1, b=2); as.vector(x, "list") }
+$a
+[1] 1
+
+$b
+[1] 2
+
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ x<-c(a=FALSE, b=TRUE); attr(x, "foo")<-"foo"; y<-as.vector(x); attributes(y) }
+NULL
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAsVector
+#{ x<-c(a=FALSE, b=TRUE); attr(x, "foo")<-"foo"; y<-as.vector(x, "list"); attributes(y) }
+$names
+[1] "a" "b"
+
+
 ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testAttributes
 #{ x <- 1 ; attributes(x) <- list(hi=3, hello=2) ; x }
 [1] 1
@@ -2782,6 +2880,10 @@ imaginary parts discarded in coercion
 #{ as.raw(as.logical(as.raw(c(1,2)))) }
 [1] 01 01
 
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts
+#{ as.vector(list(1,2,3), mode="integer") }
+[1] 1 2 3
+
 ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts
 #{ m <- matrix(1:6, nrow=2) ; as.double(m) }
 [1] 1 2 3 4 5 6
@@ -2818,10 +2920,22 @@ imaginary parts discarded in coercion
 #{ m<-matrix(c(1+1i,2+2i,3-3i,4-4i), nrow=2) ; as.vector(m) }
 [1] 1+1i 2+2i 3-3i 4-4i
 
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts
+#{ m<-matrix(c(1,0,1,0), nrow=2) ; as.vector(m, mode = "logical") }
+[1]  TRUE FALSE  TRUE FALSE
+
 ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts
 #{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m) }
 [1] 1 2 3 4
 
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts
+#{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = "character") }
+[1] "1" "2" "3" "4"
+
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts
+#{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = "complex") }
+[1] 1+0i 2+0i 3+0i 4+0i
+
 ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts
 #{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = "double") }
 [1] 1 2 3 4
@@ -2830,6 +2944,10 @@ imaginary parts discarded in coercion
 #{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = "numeric") }
 [1] 1 2 3 4
 
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts
+#{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = "raw") }
+[1] 01 02 03 04
+
 ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCasts
 #{ m<-matrix(c(TRUE,FALSE,FALSE,TRUE), nrow=2) ; as.vector(m) }
 [1]  TRUE FALSE FALSE  TRUE
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
index b7618104939fd6981536370a22e14d46c7db918f..f3c3f921d8ed2d88eec2961afef0f1bfcfdb87c9 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
@@ -4488,6 +4488,86 @@ public class AllTests extends TestBase {
         assertEvalWarning("{ as.raw(c(1L, -2L, NA)) }");
     }
 
+    @Test
+    public void TestSimpleBuiltins_testAsVector_e84fd1b27fd6570ddd6a53234fde0ba0() {
+        assertEval("{ as.vector(\"foo\", \"logical\") }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_cb0809ef1d3ab2fc8312585316b3ff3f() {
+        assertEval("{ as.vector(\"foo\", \"character\") }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_ad178529ec6948277d4535f8ce4d1307() {
+        assertEval("{ as.vector(\"foo\", \"list\") }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_715c056f5c63c0038099fb48bed34bad() {
+        assertEval("{ as.vector(\"foo\") }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_7df3d852bd307ec74005874e9e6b860a() {
+        assertEval("x<-c(a=1.1, b=2.2); as.vector(x, \"raw\")");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_68bdfdc99e081735270c25dad5c6438c() {
+        assertEval("x<-c(a=1L, b=2L); as.vector(x, \"complex\")");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_35065e6784253d5d096669f4fee13932() {
+        assertEval("{ x<-c(a=FALSE, b=TRUE); attr(x, \"foo\")<-\"foo\"; y<-as.vector(x); attributes(y) }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_5b09e05fda45f41d37a149696f95babb() {
+        assertEval("{ x<-c(a=1, b=2); as.vector(x, \"list\") }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_824741c5ce8c39da5eb71c8a537981b6() {
+        assertEval("{ x<-c(a=FALSE, b=TRUE); attr(x, \"foo\")<-\"foo\"; y<-as.vector(x, \"list\"); attributes(y) }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_bfb16efc959f2032f3fd07f7282ad495() {
+        assertEval("{ x<-1:4; dim(x)<-c(2, 2); dimnames(x)<-list(c(\"a\", \"b\"), c(\"c\", \"d\")); y<-as.vector(x, \"list\"); y }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_8d0d1cdaff856d660d11866fa044397e() {
+        assertEvalError("{ as.vector(\"foo\", \"bar\") }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_e20c6558cca6aea70251347229e52bf5() {
+        assertEvalWarning("{ as.vector(\"foo\", \"integer\") }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_f66e36fa2296e57c288db82f5f8e9798() {
+        assertEvalWarning("{ as.vector(\"foo\", \"double\") }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_0a44fb77142709976b0a7a4642abaf1f() {
+        assertEvalWarning("{ as.vector(\"foo\", \"numeric\") }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_84c625ebcd4124d15ba6dbf9b32d8293() {
+        assertEvalWarning("{ as.vector(\"foo\", \"raw\") }");
+    }
+
+    @Test
+    public void TestSimpleBuiltins_testAsVector_73bc292dddea0adb6832fc9f79b8d507() {
+        assertEvalWarning("{ as.vector(c(\"foo\", \"bar\"), \"raw\") }");
+    }
+
     @Test
     public void TestSimpleBuiltins_testAttributes_7a7da0b52cfc6f6dbfdd195db4c141e9() {
         assertEval("{ x <- 1; attributes(x) }");
@@ -4729,27 +4809,27 @@ public class AllTests extends TestBase {
     }
 
     @Test
-    public void TestSimpleBuiltins_testCastsIgnore_97d4b6e51e8e88e14a04e0f452ea5159() {
+    public void TestSimpleBuiltins_testCasts_97d4b6e51e8e88e14a04e0f452ea5159() {
         assertEval("{ m<-matrix(c(1,0,1,0), nrow=2) ; as.vector(m, mode = \"logical\") }");
     }
 
     @Test
-    public void TestSimpleBuiltins_testCastsIgnore_5dd4341a59ca7d0e2ed6b0d084e792db() {
+    public void TestSimpleBuiltins_testCasts_5dd4341a59ca7d0e2ed6b0d084e792db() {
         assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"complex\") }");
     }
 
     @Test
-    public void TestSimpleBuiltins_testCastsIgnore_2313113d77f87db77406408465c55c7e() {
+    public void TestSimpleBuiltins_testCasts_2313113d77f87db77406408465c55c7e() {
         assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"character\") }");
     }
 
     @Test
-    public void TestSimpleBuiltins_testCastsIgnore_b6184a32a36c6baf7d41451b40d049ba() {
+    public void TestSimpleBuiltins_testCasts_b6184a32a36c6baf7d41451b40d049ba() {
         assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"raw\") }");
     }
 
     @Test
-    public void TestSimpleBuiltins_testCastsIgnore_5ecedc65b348c959e86222b948f34ce8() {
+    public void TestSimpleBuiltins_testCasts_5ecedc65b348c959e86222b948f34ce8() {
         assertEval("{ as.vector(list(1,2,3), mode=\"integer\") }");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/failing/FailingTests.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/failing/FailingTests.java
index db64573384d1020a39792c78b2b462b95015a5a1..fc2d9c356aab717b6eed88a0653f36ae765e1e42 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/failing/FailingTests.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/failing/FailingTests.java
@@ -1478,31 +1478,6 @@ public class FailingTests extends TestBase {
         assertEval("{ f <- function(a, b) { a + b } ; x <- 1 ; y <- 2 ; l <- call(\"f\", x, y) ; x <- 10 ; eval(l) }");
     }
 
-    @Ignore
-    public void TestSimpleBuiltins_testCastsIgnore_97d4b6e51e8e88e14a04e0f452ea5159() {
-        assertEval("{ m<-matrix(c(1,0,1,0), nrow=2) ; as.vector(m, mode = \"logical\") }");
-    }
-
-    @Ignore
-    public void TestSimpleBuiltins_testCastsIgnore_5dd4341a59ca7d0e2ed6b0d084e792db() {
-        assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"complex\") }");
-    }
-
-    @Ignore
-    public void TestSimpleBuiltins_testCastsIgnore_2313113d77f87db77406408465c55c7e() {
-        assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"character\") }");
-    }
-
-    @Ignore
-    public void TestSimpleBuiltins_testCastsIgnore_b6184a32a36c6baf7d41451b40d049ba() {
-        assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"raw\") }");
-    }
-
-    @Ignore
-    public void TestSimpleBuiltins_testCastsIgnore_5ecedc65b348c959e86222b948f34ce8() {
-        assertEval("{ as.vector(list(1,2,3), mode=\"integer\") }");
-    }
-
     @Ignore
     public void TestSimpleBuiltins_testCastsIgnore_bf55a9d7ec96d782af8d9529a2f38293() {
         assertEval("{ l <- list(1) ; attr(l, \"my\") <- 1; as.list(l) }");
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
index b49278cdf2409c732f63a1a9a0a211220bebe510..45a656b0fa79380ffbeb2c6c26783d7e3eaa5e89 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
@@ -431,6 +431,26 @@ public class TestSimpleBuiltins extends TestBase {
         assertEvalWarning("{ as.raw(c(1L, -2L, NA)) }");
     }
 
+    @Test
+    public void testAsVector() {
+        assertEvalWarning("{ as.vector(\"foo\", \"integer\") }");
+        assertEvalWarning("{ as.vector(\"foo\", \"double\") }");
+        assertEvalWarning("{ as.vector(\"foo\", \"numeric\") }");
+        assertEval("{ as.vector(\"foo\", \"logical\") }");
+        assertEvalWarning("{ as.vector(\"foo\", \"raw\") }");
+        assertEval("{ as.vector(\"foo\", \"character\") }");
+        assertEval("{ as.vector(\"foo\", \"list\") }");
+        assertEval("{ as.vector(\"foo\") }");
+        assertEvalError("{ as.vector(\"foo\", \"bar\") }");
+        assertEvalWarning("{ as.vector(c(\"foo\", \"bar\"), \"raw\") }");
+        assertEval("x<-c(a=1.1, b=2.2); as.vector(x, \"raw\")");
+        assertEval("x<-c(a=1L, b=2L); as.vector(x, \"complex\")");
+        assertEval("{ x<-c(a=FALSE, b=TRUE); attr(x, \"foo\")<-\"foo\"; y<-as.vector(x); attributes(y) }");
+        assertEval("{ x<-c(a=1, b=2); as.vector(x, \"list\") }");
+        assertEval("{ x<-c(a=FALSE, b=TRUE); attr(x, \"foo\")<-\"foo\"; y<-as.vector(x, \"list\"); attributes(y) }");
+        assertEval("{ x<-1:4; dim(x)<-c(2, 2); dimnames(x)<-list(c(\"a\", \"b\"), c(\"c\", \"d\")); y<-as.vector(x, \"list\"); y }");
+    }
+
     @Test
     public void testMatrix() {
         assertEval("{ matrix(c(1,2,3,4),2,2) }");
@@ -486,18 +506,18 @@ public class TestSimpleBuiltins extends TestBase {
         assertEval("{ x <- c(0,2); names(x) <- c(\"hello\",\"hi\") ; as.logical(x) }");
         assertEval("{ x <- 1:2; names(x) <- c(\"hello\",\"hi\") ; as.double(x) }");
         assertEval("{ x <- c(1,2); names(x) <- c(\"hello\",\"hi\") ; as.integer(x) }");
-    }
 
-    @Test
-    @Ignore
-    public void testCastsIgnore() {
         assertEval("{ m<-matrix(c(1,0,1,0), nrow=2) ; as.vector(m, mode = \"logical\") }");
         assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"complex\") }");
         assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"character\") }");
         assertEval("{ m<-matrix(c(1,2,3,4), nrow=2) ; as.vector(m, mode = \"raw\") }");
 
         assertEval("{ as.vector(list(1,2,3), mode=\"integer\") }");
+    }
 
+    @Test
+    @Ignore
+    public void testCastsIgnore() {
         assertEval("{ l <- list(1) ; attr(l, \"my\") <- 1; as.list(l) }");
         assertEval("{ l <- 1 ; attr(l, \"my\") <- 1; as.list(l) }");
         assertEval("{ l <- c(x=1) ; as.list(l) }");