diff --git a/.gitignore b/.gitignore
index bade6d8b3da5e3e54693addfd5ba1ac7cc31a051..94e928d681b452d3d24e1cd325da9ff0d4482468 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,6 @@
 build
 repo
+source
+source.tar
 stage
 stage.tar
diff --git a/cook.sh b/cook.sh
index 3ecfa4aee7f1de763156c761e67f124b62430cd0..9a20c173aea9b21da5616a3cacca441207e5ac93 100755
--- a/cook.sh
+++ b/cook.sh
@@ -13,7 +13,6 @@ export BINDIR=bin
 export CARGOFLAGS=
 
 set -e
-shopt -s nullglob
 
 function usage {
     echo "cook.sh $1 <op>" >&2
@@ -49,40 +48,44 @@ function op {
             op $1 unfetch
             ;;
         fetch)
-            if [ -z "$GIT" ]
+            if [ -n "$TAR" ]
             then
-                if [ ! -f "$(basename "$SRC")" ]
+                if [ ! -f source.tar ]
                 then
-                    wget "$SRC"
+                    wget "$TAR" -O source.tar
+                fi
+
+                if [ ! -d source ]
+                then
+                    mkdir source
+                    tar xvf source.tar -C source --strip-components 1
                 fi
 
                 rm -rf build
-                tar xvf "$(basename "$SRC")"
-                mv "$DIR" build
-	    else
-                if [ ! -d build ]
+                cp -r source build
+            elif [ -n "$GIT" ]
+            then
+                if [ ! -d source ]
                 then
-                    git clone --recursive "$GIT" build
+                    git clone --recursive "$GIT" source
                 fi
 
-                pushd build > /dev/null
+                pushd source > /dev/null
                 git pull
                 git submodule sync
                 git submodule update --init --recursive
                 popd > /dev/null
-            fi
 
-            for patch in *.patch
-            do
-	        patch -p1 -d build < "$patch"
-            done
+                rm -rf build
+                cp -r source build
+            fi
 
             ;;
         unfetch)
-            rm -rfv build
-            if [ ! -z "$SRC" ]
+            rm -rfv build source
+            if [ -n "$TAR" ]
             then
-                rm -f "$(basename "$SRC")"
+                rm -f source.tar
             fi
             ;;
         version)
diff --git a/recipes/lua/recipe.sh b/recipes/lua/recipe.sh
index bdac657dd5019963a496ba573165cc9d00731c75..453c9e04910ffc84d437119a257508cabb559e9f 100644
--- a/recipes/lua/recipe.sh
+++ b/recipes/lua/recipe.sh
@@ -1,6 +1,5 @@
 VERSION=5.3.1
-SRC=http://www.lua.org/ftp/lua-$VERSION.tar.gz
-DIR=lua-$VERSION
+TAR=http://www.lua.org/ftp/lua-$VERSION.tar.gz
 
 function recipe_version {
     echo "$VERSION"