diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ROptions.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ROptions.java
index 05c614c25acbde2a40fb38145f061baccf255cd9..8d5c70e8c0b217218f24bdf35ff30b62e553c64f 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ROptions.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ROptions.java
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1995-2012, The R Core Team
  * Copyright (c) 2003, The R Foundation
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -238,20 +238,15 @@ public class ROptions {
             }
 
             case "editor":
+                if (value instanceof RFunction || value instanceof RNull) {
+                    break;
+                }
+                coercedValue = coerceStringVector(value, name);
+                break;
+
             case "continue":
             case "prompt": {
-                Object valueAbs = RRuntime.asAbstractVector(value);
-                // TODO supposed to be coerced
-                if (valueAbs instanceof RStringVector) {
-                    String p = ((RStringVector) valueAbs).getDataAt(0);
-                    if (p.length() == 0 || RRuntime.isNA(p)) {
-                        throw OptionsException.createInvalid(name);
-                    } else {
-                        coercedValue = valueAbs;
-                    }
-                } else {
-                    throw OptionsException.createInvalid(name);
-                }
+                coercedValue = coerceStringVector(value, name);
                 break;
             }
 
@@ -379,4 +374,19 @@ public class ROptions {
         }
         return coercedValue;
     }
+
+    private static Object coerceStringVector(Object value, String name) throws OptionsException {
+        Object valueAbs = RRuntime.asAbstractVector(value);
+        // TODO supposed to be coerced
+        if (valueAbs instanceof RStringVector) {
+            String p = ((RStringVector) valueAbs).getDataAt(0);
+            if (p.length() == 0 || RRuntime.isNA(p)) {
+                throw OptionsException.createInvalid(name);
+            } else {
+                return valueAbs;
+            }
+        } else {
+            throw OptionsException.createInvalid(name);
+        }
+    }
 }
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 9eceeafd7c2beebadca1ddfafe8ca60b63d6887d..56bce3bc119bc4027798338a14af68e23e6d0538 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
@@ -38353,6 +38353,26 @@ FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 #argv <- list(150000, 3e+09);`<=`(argv[[1]],argv[[2]]);
 [1] TRUE
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testContinue#
+#{ options(continue="abc"); identical(getOption("continue"), "abc") }
+[1] TRUE
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testContinue#Ignored.WrongCaller#
+#{ options(continue=NULL) }
+Error in options(continue = NULL) : invalid value for 'continue'
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testEditor#
+#{ f<-function(){}; options(editor=f); identical(getOption("editor"), f) }
+[1] TRUE
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testEditor#
+#{ options(editor="vi"); identical(getOption("editor"), "vi") }
+[1] TRUE
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testEditor#
+#{ options(editor=NULL); identical(getOption("editor"), NULL) }
+[1] TRUE
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testOptions#
 #{ getOption(NULL) }
 Error in getOption(NULL) : 'x' must be a character string
@@ -38370,6 +38390,14 @@ $width
 [1] 80
 
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testPrompt#
+#{ options(prompt="abc"); identical(getOption("prompt"), "abc") }
+[1] TRUE
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testPrompt#Ignored.WrongCaller#
+#{ options(prompt=NULL) }
+Error in options(prompt = NULL) : invalid value for 'prompt'
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_options.testoptions1#
 #argv <- list('survfit.print.n'); .Internal(options(argv[[1]]))
 $survfit.print.n
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java
index fcdff56933fddd01069b518af04d50d582e6407e..175a144bc53168546d920c487663124cadc29601 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2014, Purdue University
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -48,4 +48,24 @@ public class TestBuiltin_options extends TestBase {
         assertEval("{ getOption(character()) }");
         assertEval("{ options(\"timeout\", \"width\") }");
     }
+
+    @Test
+    public void testEditor() {
+        assertEval("{ f<-function(){}; options(editor=f); identical(getOption(\"editor\"), f) }");
+        assertEval("{ options(editor=\"vi\"); identical(getOption(\"editor\"), \"vi\") }");
+        assertEval("{ options(editor=NULL); identical(getOption(\"editor\"), NULL) }");
+        assertEval(Ignored.WrongCaller, "{ options(editor=\"\") }");
+    }
+
+    @Test
+    public void testPrompt() {
+        assertEval(Ignored.WrongCaller, "{ options(prompt=NULL) }");
+        assertEval("{ options(prompt=\"abc\"); identical(getOption(\"prompt\"), \"abc\") }");
+    }
+
+    @Test
+    public void testContinue() {
+        assertEval(Ignored.WrongCaller, "{ options(continue=NULL) }");
+        assertEval("{ options(continue=\"abc\"); identical(getOption(\"continue\"), \"abc\") }");
+    }
 }