diff --git a/mx.fastr/mx_fastr.py b/mx.fastr/mx_fastr.py
index 424c5057371abdfc34e6ce8c098acd2c367e6635..4c5a3178e44663e77b49531002ed98169248a731 100644
--- a/mx.fastr/mx_fastr.py
+++ b/mx.fastr/mx_fastr.py
@@ -486,23 +486,6 @@ def rcmplib(args):
     cp = mx.classpath([pcp.name for pcp in mx.projects_opt_limit_to_suites()])
     mx.run_java(['-cp', cp, 'com.oracle.truffle.r.test.tools.cmpr.CompareLibR'] + cmpArgs)
 
-def _cran_test_project():
-    return 'com.oracle.truffle.r.test.cran'
-
-def _cran_test_project_dir():
-    return mx.project(_cran_test_project()).dir
-
-def installpkgs(args):
-    _installpkgs(args)
-
-def _installpkgs_script():
-    cran_test = _cran_test_project_dir()
-    return join(cran_test, 'r', 'install.cran.packages.R')
-
-def _installpkgs(args, **kwargs):
-    script = _installpkgs_script()
-    return rscript([script] + args, **kwargs)
-
 _commands = {
     'r' : [rshell, '[options]'],
     'R' : [rshell, '[options]'],
@@ -520,12 +503,11 @@ _commands = {
     'rbcheck' : [rbcheck, '--filter [gnur-only,fastr-only,both,both-diff]'],
     'rbdiag' : [rbdiag, '(builtin)* [-v] [-n] [-m] [--sweep | --sweep-lite | --sweep-total'],
     'rcmplib' : [rcmplib, ['options']],
-    'pkgtest' : [mx_fastr_pkgs.pkgtest, ['options']],
     'rrepl' : [rrepl, '[options]'],
     'rembed' : [rembed, '[options]'],
-    'installpkgs' : [installpkgs, '[options]'],
-    'installcran' : [installpkgs, '[options]'],
     'r-cp' : [r_classpath, '[options]'],
+    'pkgtest' : [mx_fastr_pkgs.pkgtest, ['options']],
+    'installpkgs' : [mx_fastr_pkgs.installpkgs, '[options]'],
     }
 
 mx.update_commands(_fastr_suite, _commands)
diff --git a/mx.fastr/mx_fastr_pkgs.py b/mx.fastr/mx_fastr_pkgs.py
index 334b4c3e9a4b935b38cb3e0ec3e621c681c5be02..acde4d86b1b9fd5e027b1502cef15f4d20494bb9 100644
--- a/mx.fastr/mx_fastr_pkgs.py
+++ b/mx.fastr/mx_fastr_pkgs.py
@@ -49,6 +49,40 @@ def _log_step(state, step, rvariant):
     if not quiet:
         print "{0} {1} with {2}".format(state, step, rvariant)
 
+def _cran_test_project():
+    return 'com.oracle.truffle.r.test.cran'
+
+def _cran_test_project_dir():
+    return mx.project(_cran_test_project()).dir
+
+def installpkgs(args):
+    _installpkgs(args)
+
+def _installpkgs_script():
+    cran_test = _cran_test_project_dir()
+    return join(cran_test, 'r', 'install.cran.packages.R')
+
+def _is_graalvm():
+    return os.environ.has_key('GRAALVM_FASTR')
+
+def _graalvm():
+    return os.environ['GRAALVM_FASTR']
+
+def _installpkgs(args, **kwargs):
+    '''
+    Runs the R script that does package/installation and testing.
+    If we are running in a binary graalvm environment, which is indicated
+    by the GRAALVM_FASTR environment variable, we can't use mx to invoke
+    FastR, but instead have to invoke the command directly.
+    '''
+    script = _installpkgs_script()
+    if _is_graalvm():
+        rscript = join(_graalvm(), 'bin', 'rscript')
+        return mx.run([rscript, script] + args, **kwargs)
+    else:
+        return mx_fastr.rscript([script] + args, **kwargs)
+
+
 def pkgtest(args):
     '''
     Package installation/testing.
@@ -56,7 +90,11 @@ def pkgtest(args):
     '''
 
     libinstall, install_tmp = _create_libinstall(mx.suite('fastr'))
-    stacktrace_args = ['--J', '@-DR:-PrintErrorStacktracesToFile -DR:+PrintErrorStacktraces']
+
+    if _is_graalvm():
+        stacktrace_args = ['-J:-DR:-PrintErrorStacktracesToFile', '-J:-DR:+PrintErrorStacktraces']
+    else:
+        stacktrace_args = ['--J', '@-DR:-PrintErrorStacktracesToFile -DR:+PrintErrorStacktraces']
     if "--quiet" in args:
         global quiet
         quiet = True
@@ -133,7 +171,7 @@ def pkgtest(args):
 
     _log_step('BEGIN', 'install/test', 'FastR')
     # Currently installpkgs does not set a return code (in install.cran.packages.R)
-    rc = mx_fastr._installpkgs(stacktrace_args + install_args, nonZeroIsFatal=False, env=env, out=out, err=out)
+    rc = _installpkgs(stacktrace_args + install_args, nonZeroIsFatal=False, env=env, out=out, err=out)
     if rc == 100:
         # fatal error connecting to package repo
         mx.abort(rc)
@@ -217,7 +255,7 @@ def _install_vignette_support(rvariant, env):
     _log_step('END', 'install vignette support', rvariant)
 
 def _gnur_installpkgs(args, env, **kwargs):
-    return mx.run(['Rscript', mx_fastr._installpkgs_script()] + args, env=env, **kwargs)
+    return mx.run(['Rscript', _installpkgs_script()] + args, env=env, **kwargs)
 
 def _gnur_install_test(pkgs):
     gnur_packages = join(_mx_gnur().dir, 'gnur.packages')
@@ -226,9 +264,9 @@ def _gnur_install_test(pkgs):
             f.write(pkg)
             f.write('\n')
     # clone the cran test project into gnur
-    gnur_cran_test_project_dir = join(_mx_gnur().dir, mx_fastr._cran_test_project())
+    gnur_cran_test_project_dir = join(_mx_gnur().dir, _cran_test_project())
     if not exists(gnur_cran_test_project_dir):
-        shutil.copytree(mx_fastr._cran_test_project_dir(), gnur_cran_test_project_dir)
+        shutil.copytree(_cran_test_project_dir(), gnur_cran_test_project_dir)
     gnur_libinstall, gnur_install_tmp = _create_libinstall(_mx_gnur())
     env = os.environ.copy()
     gnur = _mx_gnur().extensions