diff --git a/mx.fastr/mx_fastr.py b/mx.fastr/mx_fastr.py
index 9c32408af000218333c29fb4377ba389afbecc88..d5b3f03b8e1e02bf9589a4b67e325a7aa6a1407d 100644
--- a/mx.fastr/mx_fastr.py
+++ b/mx.fastr/mx_fastr.py
@@ -30,40 +30,17 @@ import os
 
 '''
 This is the launchpad for all the functions available for building/running/testing/analyzing
-FastR. Ideally this code would be completely VM agnostic, i.e., be able to build/run with a variety
-of VMs without change. That is currently not feasible due to the requirement that building
-must use an pre-existing VM and running (for performance testing) must use a Graal-enabled VM.
-It would require separate build/run steps to finesse this. However, running under a standards
-VM is supported by dynamically checking if the jvmci suite is available
+FastR. FastR can run with or without the Graal compiler enabled. As a convenience if the
+graal-core suite is detected then the use of the Graal compiler is enabled without any
+additional command line options being required to the mx command, i.e. it is as if --jdk jvmci
+was passed as an mx global option.
 '''
 
 _fastr_suite = mx.suite('fastr')
 '''
 If this is None, then we run under the standard VM in interpreted mode only.
-Even if this is not None the global mx option --vm original forces interpreted mode
 '''
-_mx_jvmci = mx.suite("jvmci", fatalIfMissing=False)
-
-class FakeJVMCI:
-    def get_vm(self):
-        # should only happen if jvmci vm selected
-        mx.abort('FakeJVMCI.get_vm called')
-
-    def get_jvmci_jdk(self):
-        return mx.get_jdk()
-
-    def build(self, args):
-        return mx.build(args)
-
-def mx_jvm():
-    '''
-    Check if the jvmci suite is available and if not return a fake one
-    that uses the standard vm
-    '''
-    if not _mx_jvmci:
-        return FakeJVMCI()
-    else:
-        return _mx_jvmci.extensions
+_mx_graal = mx.suite("graal-core", fatalIfMissing=False)
 
 _r_command_project = 'com.oracle.truffle.r.engine'
 _repl_command = 'com.oracle.truffle.tools.debug.shell.client.SimpleREPLClient'
@@ -78,6 +55,13 @@ def r_version():
     # Could figure this out dynamically
     return 'R-3.2.4'
 
+def get_default_jdk():
+    if _mx_graal:
+        tag = 'jvmci'
+    else:
+        tag = None
+    return mx.get_jdk(tag=tag)
+
 def do_run_r(args, command, extraVmArgs=None, jdk=None, **kwargs):
     '''
     This is the basic function that runs a FastR process, where args have already been parsed.
@@ -110,35 +94,12 @@ def do_run_r(args, command, extraVmArgs=None, jdk=None, **kwargs):
     if extraVmArgs:
         vmArgs += extraVmArgs
 
-    vmArgs = _sanitize_vmArgs(jdk, vmArgs)
     if command:
         vmArgs.append(_command_class_dict[command.lower()])
     return mx.run_java(vmArgs + args, jdk=jdk, **kwargs)
 
-def _sanitize_vmArgs(jdk, vmArgs):
-    '''
-    jdk/vm dependent analysis of vmArgs to remove those that are not appropriate for the
-    chosen jdk/vm. It is easier to allow clients to set anything they want and filter them
-    out here.
-    '''
-    if jdk.tag == 'jvmci':
-        vm = mx_jvm().get_vm()
-    else:
-        vm = None
-    xargs = []
-    i = 0
-    while i < len(vmArgs):
-        vmArg = vmArgs[i]
-        if 'graal' in vmArg or 'JVMCI' in vmArg:
-            if vm and vm == "original":
-                i = i + 1
-                continue
-        xargs.append(vmArg)
-        i = i + 1
-    return xargs
-
 def _graal_options(nocompile=False):
-    if _mx_jvmci and not mx_jvm().get_vm().endswith('nojvmci'):
+    if _mx_graal:
         result = ['-Dgraal.InliningDepthError=500', '-Dgraal.EscapeAnalysisIterations=3', '-XX:JVMCINMethodSizeLimit=1000000']
         if nocompile:
             result += ['-Dgraal.TruffleCompilationThreshold=100000']
@@ -188,15 +149,6 @@ def setREnvironment(env=None):
 
         env[lib_env] = lib_value
 
-def get_default_jdk():
-    '''
-    Returns the (default) jdk under which to run.
-    N.B. The jvmci jdk actually comes in three variants and the choice
-    is controlled either by the DEFAULT_VM environment variable (recommended) or
-    the --vm global option to mx.
-    '''
-    return mx_jvm().get_jvmci_jdk()
-
 def run_r(args, command, parser=None, extraVmArgs=None, jdk=None, **kwargs):
     '''
     Common function for running either R, Rscript (or rrepl).
@@ -239,16 +191,6 @@ def rrepl(args, nonZeroIsFatal=True, extraVmArgs=None):
     '''run R repl'''
     run_r(args, 'rrepl')
 
-def build(args):
-    '''FastR build'''
-    # workaround for Hotspot Mac OS X build problem
-    osname = platform.system()
-    if osname == 'Darwin':
-        os.environ['COMPILER_WARNINGS_FATAL'] = 'false'
-        os.environ['USE_CLANG'] = 'true'
-        os.environ['LFLAGS'] = '-Xlinker -lstdc++'
-    return mx_jvm().build(args)
-
 def _fastr_gate_runner(args, tasks):
     # Until fixed, we call Checkstyle here and limit to primary
     with mx_gate.Task('Checkstyle check', tasks) as t:
@@ -262,11 +204,6 @@ def _fastr_gate_runner(args, tasks):
             if mx.checkcopyrights(['--primary']) != 0:
                 t.abort('copyright errors')
 
-    # build the native projects (GnuR/VM)
-    with mx_gate.Task('BuildNative', tasks) as t:
-        if t:
-            build([])
-
     # check that the expected test output file is up to date
     with mx_gate.Task('UnitTests: ExpectedTestOutput file check', tasks) as t:
         if t:
@@ -515,7 +452,6 @@ _commands = {
     'Rscript' : [rscript, '[options]'],
     'rtestgen' : [testgen, ''],
     'originalgate' : [original_gate, '[options]'],
-    'build' : [build, ''],
     'gate' : [gate, ''],
     'junit' : [junit, ['options']],
     'junitsimple' : [junit_simple, ['options']],