diff --git a/Rakefile b/Rakefile
index 2e068315f4e5135f8d24ef244dcaeb547a74a43d..45f11605bc5fc423a2a6084402715c4acba8872d 100755
--- a/Rakefile
+++ b/Rakefile
@@ -5,6 +5,18 @@ require 'rake/extensiontask'
 require './lib/fox16/version.rb'
 load 'Rakefile.cross'
 
+# Use forked process for chdir'ed environment, to allow parallel execution with drake
+module FileUtils
+  alias old_fileutils_cd cd
+  def cd(dir, options={}, &block)
+    raise "forked_chdir called without block" unless block_given?
+    Process.waitpid(fork{ old_fileutils_cd(dir, options, &block) })
+  end
+  module_function :cd
+  alias chdir cd
+  module_function :chdir
+end
+
 # Some constants we'll need
 PKG_VERSION = Fox.fxrubyversion
 FXSCINTILLA_INSTALL_DIR = Pathname( "build/builds/fxscintilla-#{LIBFXSCINTILLA_VERSION}" ).expand_path
diff --git a/Rakefile.cross b/Rakefile.cross
old mode 100644
new mode 100755
index 9fcba7a5bae9eab378654b78590c333a63ee0515..ae4275abe70c6cdaace16c077925a158cbb8ecf7
--- a/Rakefile.cross
+++ b/Rakefile.cross
@@ -93,7 +93,6 @@ CLEAN.include( STATIC_BUILDDIR.to_s )
 ### C R O S S - C O M P I L A T I O N - T A S K S
 #####################################################################
 
-
 directory STATIC_SOURCESDIR.to_s
 
 #
@@ -123,7 +122,7 @@ LIBZ_ENV = [
 
 # generate the makefile in a clean build location
 file LIBZ_MAKEFILE => [STATIC_LIBZ_BUILDDIR] do |t|
-  Dir.chdir( STATIC_LIBZ_BUILDDIR ) do
+  chdir( STATIC_LIBZ_BUILDDIR ) do
     options = [
       "--prefix=#{STATIC_INSTALLDIR}",
     ]
@@ -135,7 +134,7 @@ end
 
 # generate the makefile in a clean build location
 task LIBZ_A => LIBZ_MAKEFILE do |t|
-  Dir.chdir( STATIC_LIBZ_BUILDDIR ) do
+  chdir( STATIC_LIBZ_BUILDDIR ) do
     sh "make -j#{NUM_CPUS} install 'LDSHAREDLIBC=-lmsvcrt'"
   end
 end
@@ -164,7 +163,7 @@ LIBPNG_ENV = [
 ]
 # generate the makefile in a clean build location
 file LIBPNG_MAKEFILE => [STATIC_LIBPNG_BUILDDIR, LIBZ_A] do |t|
-  Dir.chdir( STATIC_LIBPNG_BUILDDIR ) do
+  chdir( STATIC_LIBPNG_BUILDDIR ) do
     options = [
       "--target=#{CROSS_PREFIX}",
       "--host=#{CROSS_PREFIX}",
@@ -180,7 +179,7 @@ end
 
 # generate the makefile in a clean build location
 task LIBPNG_A => [LIBPNG_MAKEFILE, LIBZ_A] do |t|
-  Dir.chdir( STATIC_LIBPNG_BUILDDIR ) do
+  chdir( STATIC_LIBPNG_BUILDDIR ) do
     sh "make -j#{NUM_CPUS} install"
   end
 end
@@ -205,7 +204,7 @@ end
 
 # generate the makefile in a clean build location
 file LIBJPEG_MAKEFILE => STATIC_LIBJPEG_BUILDDIR do |t|
-  Dir.chdir( STATIC_LIBJPEG_BUILDDIR ) do
+  chdir( STATIC_LIBJPEG_BUILDDIR ) do
     options = [
       "--target=#{CROSS_PREFIX}",
       "--host=#{CROSS_PREFIX}",
@@ -222,7 +221,7 @@ end
 
 # build libjpeg.a
 task LIBJPEG_A => [LIBJPEG_MAKEFILE] do |t|
-  Dir.chdir( STATIC_LIBJPEG_BUILDDIR ) do
+  chdir( STATIC_LIBJPEG_BUILDDIR ) do
     sh "make -j#{NUM_CPUS} install"
   end
 end
@@ -252,7 +251,7 @@ LIBTIFF_ENV = [
 
 # generate the makefile in a clean build location
 file LIBTIFF_MAKEFILE => [STATIC_LIBTIFF_BUILDDIR, LIBJPEG_A, LIBZ_A] do |t|
-  Dir.chdir( STATIC_LIBTIFF_BUILDDIR ) do
+  chdir( STATIC_LIBTIFF_BUILDDIR ) do
     options = [
       "--target=#{CROSS_PREFIX}",
       "--host=#{CROSS_PREFIX}",
@@ -272,7 +271,7 @@ end
 
 # build libtiff.a
 task LIBTIFF_A => [LIBTIFF_MAKEFILE] do |t|
-  Dir.chdir( STATIC_LIBTIFF_BUILDDIR ) do
+  chdir( STATIC_LIBTIFF_BUILDDIR ) do
     sh "make -j#{NUM_CPUS} install"
   end
 end
@@ -303,7 +302,7 @@ LIBFOX_ENV = [
 
 # generate the makefile in a clean build location
 file LIBFOX_MAKEFILE => [STATIC_LIBFOX_BUILDDIR, LIBJPEG_A, LIBZ_A] do |t|
-  Dir.chdir( STATIC_LIBFOX_BUILDDIR ) do
+  chdir( STATIC_LIBFOX_BUILDDIR ) do
     options = [
       "--target=#{CROSS_PREFIX}",
       "--host=#{CROSS_PREFIX}",
@@ -321,7 +320,7 @@ end
 
 # build libfox.a
 task LIBFOX_A => [LIBFOX_MAKEFILE] do |t|
-  Dir.chdir( STATIC_LIBFOX_BUILDDIR ) do
+  chdir( STATIC_LIBFOX_BUILDDIR ) do
     sh "make -j#{NUM_CPUS} #{FOX_ENV.join(" ")} install"
   end
 end
@@ -354,8 +353,8 @@ FOX_ENV = [
 ]
 
 # generate the makefile in a clean build location
-file LIBFXSCINTILLA_MAKEFILE => [STATIC_LIBFXSCINTILLA_BUILDDIR, LIBJPEG_A, LIBZ_A] do |t|
-  Dir.chdir( STATIC_LIBFXSCINTILLA_BUILDDIR ) do
+file LIBFXSCINTILLA_MAKEFILE => [STATIC_LIBFXSCINTILLA_BUILDDIR, LIBFOX_A] do |t|
+  chdir( STATIC_LIBFXSCINTILLA_BUILDDIR ) do
     options = [
       "--target=#{CROSS_PREFIX}",
       "--host=#{CROSS_PREFIX}",
@@ -371,7 +370,7 @@ end
 
 # build libfxscintilla.a
 task LIBFXSCINTILLA_A => [LIBFXSCINTILLA_MAKEFILE] do |t|
-  Dir.chdir( STATIC_LIBFXSCINTILLA_BUILDDIR ) do
+  chdir( STATIC_LIBFXSCINTILLA_BUILDDIR ) do
     sh "make -j#{NUM_CPUS} #{FOX_ENV.join(" ")} install"
   end
 end