diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb
index fa42cc83a80934220a166e33dcbf3b32667979ef..8379686158b0cc7a4acda38481ff349fb4472eb0 100644
--- a/Library/Homebrew/keg.rb
+++ b/Library/Homebrew/keg.rb
@@ -217,10 +217,6 @@ class Keg
     true
   end
 
-  def require_relocation?
-    false
-  end
-
   def linked?
     linked_keg_record.symlink? &&
       linked_keg_record.directory? &&
diff --git a/Library/Homebrew/test/bottle_test.rb b/Library/Homebrew/test/bottle_test.rb
index 7981ccf79af4f33ab1168782371f1bf7fd7ca01e..c10746e098d4e59af25ab67af2395364fd6c66ac 100644
--- a/Library/Homebrew/test/bottle_test.rb
+++ b/Library/Homebrew/test/bottle_test.rb
@@ -14,7 +14,7 @@ class IntegrationCommandTestBottle < IntegrationCommandTestCase
       FileUtils.ln_s "not-exist", "symlink"
     end
     assert_match(/testball-0\.1.*\.bottle\.tar\.gz/,
-                  cmd("bottle", "--no-rebuild", "testball"))
+                  cmd_output("bottle", "--no-rebuild", "testball"))
   ensure
     FileUtils.rm_f Dir["testball-0.1*.bottle.tar.gz"]
   end
diff --git a/Library/Homebrew/test/options_test.rb b/Library/Homebrew/test/options_test.rb
index 09ea14180e970e53ec8253b5228475c545e79ba4..f38ec441546e7675dfdbe281ca2689e48ff08e58 100644
--- a/Library/Homebrew/test/options_test.rb
+++ b/Library/Homebrew/test/options_test.rb
@@ -9,7 +9,7 @@ class IntegrationCommandTestOptions < IntegrationCommandTestCase
     EOS
 
     assert_equal "--with-foo\n\tBuild with foo\n--without-bar\n\tBuild without bar support",
-      cmd("options", "testball").chomp
+      cmd_output("options", "testball").chomp
   end
 end
 
diff --git a/Library/Homebrew/test/support/helper/integration_command_test_case.rb b/Library/Homebrew/test/support/helper/integration_command_test_case.rb
index 45e73757a16531dbfa87a0a5821cba5100852e02..a36b5669161033e8411f323b5ecf8162d3d40a72 100644
--- a/Library/Homebrew/test/support/helper/integration_command_test_case.rb
+++ b/Library/Homebrew/test/support/helper/integration_command_test_case.rb
@@ -3,7 +3,6 @@ require "fileutils"
 require "pathname"
 require "formula"
 require "test/support/helper/test_case"
-require "open3"
 
 class IntegrationCommandTestCase < Homebrew::TestCase
   def setup
@@ -29,34 +28,57 @@ class IntegrationCommandTestCase < Homebrew::TestCase
   end
 
   def cmd_output(*args)
+    # 1.8-compatible way of writing def cmd_output(*args, **env)
     env = args.last.is_a?(Hash) ? args.pop : {}
-
-    env.merge!(
-      "HOMEBREW_BREW_FILE" => HOMEBREW_PREFIX/"bin/brew",
-      "HOMEBREW_INTEGRATION_TEST" => cmd_id_from_args(args),
-      "HOMEBREW_TEST_TMPDIR" => TEST_TMPDIR,
-      "HOMEBREW_DEVELOPER" => ENV["HOMEBREW_DEVELOPER"]
-    )
-
-    ruby_args = [
-      "-W0",
-      "-I", "#{HOMEBREW_LIBRARY_PATH}/test/support/lib",
-      "-I", HOMEBREW_LIBRARY_PATH.to_s,
-      "-rconfig"
+    cmd_args = %W[
+      -W0
+      -I#{HOMEBREW_LIBRARY_PATH}/test/support/lib
+      -I#{HOMEBREW_LIBRARY_PATH}
+      -rconfig
     ]
-    ruby_args << "-rsimplecov" if ENV["HOMEBREW_TESTS_COVERAGE"]
-    ruby_args << "-rtest/support/helper/integration_mocks"
-    ruby_args << (HOMEBREW_LIBRARY_PATH/"brew.rb").resolved_path.to_s
-
+    if ENV["HOMEBREW_TESTS_COVERAGE"]
+      # This is needed only because we currently use a patched version of
+      # simplecov, and gems installed through git are not available without
+      # requiring bundler/setup first. See also the comment in test/Gemfile.
+      # Remove this line when we'll switch back to a stable simplecov release.
+      cmd_args << "-rbundler/setup"
+      cmd_args << "-rsimplecov"
+    end
+    cmd_args << "-rtest/support/helper/integration_mocks"
+    cmd_args << (HOMEBREW_LIBRARY_PATH/"brew.rb").resolved_path.to_s
+    cmd_args += args
+    developer = ENV["HOMEBREW_DEVELOPER"]
     Bundler.with_original_env do
-      output, status = Open3.capture2e(env, RUBY_PATH, *ruby_args, *args)
-      [output.chomp, status]
+      ENV["HOMEBREW_BREW_FILE"] = HOMEBREW_PREFIX/"bin/brew"
+      ENV["HOMEBREW_INTEGRATION_TEST"] = cmd_id_from_args(args)
+      ENV["HOMEBREW_TEST_TMPDIR"] = TEST_TMPDIR
+      ENV["HOMEBREW_DEVELOPER"] = developer
+      env.each_pair do |k, v|
+        ENV[k] = v
+      end
+
+      read, write = IO.pipe
+      begin
+        pid = fork do
+          read.close
+          $stdout.reopen(write)
+          $stderr.reopen(write)
+          write.close
+          exec RUBY_PATH, *cmd_args
+        end
+        write.close
+        read.read.chomp
+      ensure
+        Process.wait(pid)
+        read.close
+      end
     end
   end
 
   def cmd(*args)
-    output, status = cmd_output(*args)
-    assert status.success?, <<-EOS.undent
+    output = cmd_output(*args)
+    status = $?.exitstatus
+    assert_equal 0, status, <<-EOS.undent
       `brew #{args.join " "}` exited with non-zero status!
       #{output}
     EOS
@@ -64,8 +86,9 @@ class IntegrationCommandTestCase < Homebrew::TestCase
   end
 
   def cmd_fail(*args)
-    output, status = cmd_output(*args)
-    refute status.success?, <<-EOS.undent
+    output = cmd_output(*args)
+    status = $?.exitstatus
+    refute_equal 0, status, <<-EOS.undent
       `brew #{args.join " "}` exited with zero status!
       #{output}
     EOS