diff --git a/Library/Contributions/examples/brew-unpack.rb b/Library/Contributions/examples/brew-unpack.rb
index ab3438d1ae29f4df41d6ea708006958ec1be06ac..d0d505b0a0797c1b05eb86966f84c9dd24426be3 100755
--- a/Library/Contributions/examples/brew-unpack.rb
+++ b/Library/Contributions/examples/brew-unpack.rb
@@ -1,14 +1,56 @@
 require 'formula'
 
+require 'stringio'
+module ScriptDataReader
+  # This module contains a method for extracting the contents of DATA from a
+  # Ruby file other than the script containing the currently executing
+  # function.  Many thanks to Glenn Jackman's Stackoverflow answer which
+  # provided this code:
+  #
+  #   http://stackoverflow.com/questions/2156629/can-i-access-the-data-from-a-required-script-in-ruby/2157556#2157556
+  def self.load(filename)
+    data = StringIO.new
+    File.open(filename) do |f|
+      begin
+        line = f.gets
+      end until line.nil? or line.match(/^__END__$/)
+      while line = f.gets
+        data << line
+      end
+    end
+    data.rewind
+    data
+  end
+end
+
+# Need to tweak the Formula class slightly so that patching is option and `DATA`
+# patches work correctly.
+class Formula
+  # Create a reference to the original Formula.patch method and then override
+  # so that paching only happens if the user asks.
+  alias do_patch patch
+  def patch
+    if ARGV.include? '--patch'
+      # Yes Ruby, we are about to redefine a constant. Just breathe.
+      orig_v = $VERBOSE; $VERBOSE = nil
+      Formula.const_set 'DATA', ScriptDataReader.load(path)
+      $VERBOSE = orig_v
+
+      do_patch
+    end
+  end
+end
+
 module Homebrew extend self
   def unpack
     unpack_usage = <<-EOS
-Usage: brew unpack [--destdir=path/to/extract/in] <formulae ...>
+Usage: brew unpack [--patch] [--destdir=path/to/extract/in] <formulae ...>
 
 Unpack formulae source code for inspection.
 
 Formulae archives will be extracted to subfolders inside the current working
-directory or a directory specified by `--destdir`.
+directory or a directory specified by `--destdir`. If the `--patch` option is
+supplied, patches will also be downloaded and applied.
     EOS
 
     if ARGV.empty?
@@ -16,7 +58,7 @@ directory or a directory specified by `--destdir`.
       exit 0
     end
 
-    formulae = ARGV.named
+    formulae = ARGV.formulae
     raise FormulaUnspecifiedError if formulae.empty?
 
     unpack_dir = ARGV.options_only.select {|o| o.start_with? "--destdir="}
@@ -26,24 +68,18 @@ directory or a directory specified by `--destdir`.
       unpack_dir = Pathname.new(unpack_dir.first.split('=')[1]).realpath
       unpack_dir.mkpath unless unpack_dir.exist?
     end
+
     raise "Cannot write to #{unpack_dir}" unless unpack_dir.writable?
 
     formulae.each do |f|
-      f = Formula.factory(f)
+      # Create a nice name for the stage folder.
+      stage_dir = unpack_dir + [f.name, f.version].join('-')
+      raise "Destination #{stage_dir} allready exists!" if stage_dir.exist?
 
-      unless f.downloader.kind_of? CurlDownloadStrategy
-        stage_dir = unpack_dir + [f.name, f.version].join('-')
-        stage_dir.mkpath unless stage_dir.exist?
-      else
-        stage_dir = unpack_dir
+      f.brew do
+        oh1 "Unpacking #{f.name} to: #{stage_dir}"
+        cp_r Dir.getwd, stage_dir
       end
-
-      # Can't use a do block here without DownloadStrategy do blocks throwing:
-      #   warning: conflicting chdir during another chdir block
-      Dir.chdir stage_dir
-        f.downloader.fetch
-        f.downloader.stage
-      Dir.chdir unpack_dir
     end
   end
 end