diff --git a/com.oracle.truffle.r.native/llvm_tools/llvm-c++ b/com.oracle.truffle.r.native/llvm_tools/llvm-c++
index cd595e9cfe5099ce61321ea3abc55d04851bcb92..a6cd013f896c514a70b4a2138ab77fff7ddf0719 100755
--- a/com.oracle.truffle.r.native/llvm_tools/llvm-c++
+++ b/com.oracle.truffle.r.native/llvm_tools/llvm-c++
@@ -53,9 +53,9 @@ else
   get_llvm_tool
   unamestr=`uname`
   if [[ "$unamestr" == 'Linux' ]]; then
-    llvm_args="-stdlib=libc++ -I/usr/include/libcxxabi $llvm_args"
+    llvm_args="-stdlib=libc++ -I/usr/include/libcxxabi ${llvm_args[@]}"
   fi
-  runit $llvm_tool_bin $llvm_args
+  runit $llvm_tool_bin "${llvm_args[@]}"
   ecode=$?
   if [[ $ecode -ne 0 ]]; then
     exit $ecode
diff --git a/com.oracle.truffle.r.native/llvm_tools/llvm-cc b/com.oracle.truffle.r.native/llvm_tools/llvm-cc
index 6534f76c0f66231e5822cff1dfa92e1f4c780ac5..8b83f95858b8f5c9fc5723aab602983755376fb0 100755
--- a/com.oracle.truffle.r.native/llvm_tools/llvm-cc
+++ b/com.oracle.truffle.r.native/llvm_tools/llvm-cc
@@ -51,7 +51,7 @@ then
 else
   llvm_tool=clang
   get_llvm_tool
-  runit $llvm_tool_bin $llvm_args
+  runit $llvm_tool_bin "${llvm_args[@]}"
   ecode=$?
   if [[ $ecode -ne 0 ]]; then
     exit $ecode
diff --git a/com.oracle.truffle.r.native/llvm_tools/llvm-fc b/com.oracle.truffle.r.native/llvm_tools/llvm-fc
index 2ee09e49c9fb6dfef2c30e5b32c4afe392439af6..7a6bfea588bf29ad8206ff9b34922307c553853a 100755
--- a/com.oracle.truffle.r.native/llvm_tools/llvm-fc
+++ b/com.oracle.truffle.r.native/llvm_tools/llvm-fc
@@ -69,7 +69,7 @@ function ll_to_bc() {
   llvm_ir_bc_file=${d}/${f%%.*}.bc
 }
 
-runit $FASTR_LLVM_GFORTRAN -fplugin=$FASTR_LLVM_DRAGONEGG -fplugin-arg-dragonegg-emit-ir $llvm_args
+runit $FASTR_LLVM_GFORTRAN -fplugin=$FASTR_LLVM_DRAGONEGG -fplugin-arg-dragonegg-emit-ir "${llvm_args[@]}"
 ll_to_bc
 runit $FASTR_LLVM_GFORTRAN_LLVM_AS $llvm_ir_file -o $llvm_ir_bc_file
 runit rm $llvm_ir_file
diff --git a/com.oracle.truffle.r.native/llvm_tools/llvm-helper b/com.oracle.truffle.r.native/llvm_tools/llvm-helper
index 86338524120e4b401df12df3c7ef01305caf426c..7164390ac123dcffe911b2375db8493824d828e1 100644
--- a/com.oracle.truffle.r.native/llvm_tools/llvm-helper
+++ b/com.oracle.truffle.r.native/llvm_tools/llvm-helper
@@ -33,13 +33,13 @@ fi
 function runit() {
   if [ $run_mode == "echo" ]
   then
-    echo $@
+    echo "$@"
   elif [ $run_mode == "echorun" ]
   then
-    echo $@
-    $@
+    echo "$@"
+    "$@"
   else
-    $@
+    "$@"
   fi
 }
 
@@ -50,7 +50,8 @@ function runit() {
 # llvm_args: processed arguments to pass to llvm tool, e.g. clang
 
 function analyze_args() {
-  llvm_args="-g "
+  llvm_args_tmp=()	
+  llvm_args_tmp+=("-g")
   if [ $fortran -eq 1 ]
   then
     llvm_file_ext='.ll'
@@ -59,9 +60,9 @@ function analyze_args() {
   fi
 
   is_link=0
-  out_file_opt=""
+  out_file_opt=()
   llvm_ir_file=""
-  llvm_ir_file_opt=""
+  llvm_ir_file_opt=()
   c_opt_found=0
 
   while [[ $# -gt 0 ]]
@@ -69,7 +70,7 @@ function analyze_args() {
     case $1 in
       -c)
         c_opt_found=1
-        llvm_args+="$1 "
+        llvm_args_tmp+=("$1")
       ;;
       -o)
         shift
@@ -84,35 +85,42 @@ function analyze_args() {
 		then
 			llvm_ir_file=${d}/${f%%.*}
 		    llvm_ir_file="${llvm_ir_file}${llvm_file_ext}"
-         	llvm_ir_file_opt="-o ${llvm_ir_file}"
+         	llvm_ir_file_opt=("-o" $llvm_ir_file)
         else
-          out_file_opt="-o $p"
+          out_file_opt=("-o" "$p")
         fi
       ;;
       *)
-        llvm_args+="$1 "
+        llvm_args_tmp+=("$1")
       ;;
     esac
     shift
   done
 
+  llvm_args=()
   if [ $fortran -eq 1 ]
   then
     if [ $c_opt_found -eq 1 ]
     then
-      llvm_args="-S $llvm_ir_file_opt $llvm_args "
+      llvm_args+=("-S") 
+      llvm_args+=("${llvm_ir_file_opt[@]}")
+      llvm_args+=("${llvm_args_tmp[@]}")
     else
-      llvm_args="$out_file_opt $llvm_args "
+      llvm_args+=("${out_file_opt[@]}")
+      llvm_args+=("${llvm_args_tmp[@]}")
     fi
   else
     if [ $c_opt_found -eq 1 ]
     then
-      llvm_args="-emit-llvm $llvm_ir_file_opt $llvm_args "
+      llvm_args+=("-emit-llvm") 
+      llvm_args+=("${llvm_ir_file_opt[@]}")
+	  llvm_args+=("${llvm_args_tmp[@]}")
     else
-      llvm_args="$out_file_opt $llvm_args "
+      llvm_args+=("${out_file_opt[@]}")
+      llvm_args+=("${llvm_args_tmp[@]}")
     fi
   fi
-
+  
 }
 
 # Input arguments: