diff --git a/openwrt/include/kernel-build.mk b/openwrt/include/kernel-build.mk
index 0f29a306bf7b8e3c5aa15747fa805e69eed626b0..9af1142d331171b4fbe1dea612c1c033b850f419 100644
--- a/openwrt/include/kernel-build.mk
+++ b/openwrt/include/kernel-build.mk
@@ -34,7 +34,7 @@ $(LINUX_DIR)/.unpacked: $(DL_DIR)/$(LINUX_SOURCE)
 ifeq ($(KERNEL),2.4)
 $(LINUX_DIR)/.configured: $(LINUX_DIR)/.patched
 	$(SED) "s,\-mcpu=,\-mtune=,g;" $(LINUX_DIR)/arch/mips/Makefile
-	PATH="$(TARGET_PATH)" $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(TARGET_CC)" ARCH=$(LINUX_KARCH) oldconfig include/linux/compile.h include/linux/version.h
+	$(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(TARGET_CC)" ARCH=$(LINUX_KARCH) oldconfig include/linux/compile.h include/linux/version.h
 	touch $@
 
 $(LINUX_DIR)/.depend_done: $(LINUX_DIR)/.configured
@@ -44,7 +44,7 @@ $(LINUX_DIR)/.depend_done: $(LINUX_DIR)/.configured
 $(LINUX_DIR)/vmlinux: $(LINUX_DIR)/.depend_done
 else
 $(LINUX_DIR)/.configured: $(LINUX_DIR)/.patched
-	PATH="$(TARGET_PATH)" $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(TARGET_CC)" ARCH=$(LINUX_KARCH) oldconfig prepare scripts
+	$(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(TARGET_CC)" ARCH=$(LINUX_KARCH) oldconfig prepare scripts
 	touch $@
 endif
 
@@ -63,16 +63,16 @@ else
 endif
 
 $(LINUX_DIR)/vmlinux: $(LINUX_DIR)/.linux-compile pkg-install ramdisk-config
-	PATH="$(TARGET_PATH)" $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(TARGET_CC)" ARCH=$(LINUX_KARCH)
+	$(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(TARGET_CC)" ARCH=$(LINUX_KARCH)
 
 $(LINUX_KERNEL): $(LINUX_DIR)/vmlinux
-	PATH="$(TARGET_PATH)" $(KERNEL_CROSS)objcopy -O binary -R .reginfo -R .note -R .comment -R .mdebug -S $< $@
+	$(KERNEL_CROSS)objcopy -O binary -R .reginfo -R .note -R .comment -R .mdebug -S $< $@
 	touch -c $(LINUX_KERNEL)
 
 $(LINUX_DIR)/.modules_done:
 	rm -rf $(KERNEL_BUILD_DIR)/modules
-	PATH="$(TARGET_PATH)" $(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(TARGET_CC)" ARCH=$(LINUX_KARCH) modules
-	PATH="$(TARGET_PATH)" $(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(TARGET_CC)" ARCH=$(LINUX_KARCH) DEPMOD=true INSTALL_MOD_PATH=$(KERNEL_BUILD_DIR)/modules modules_install
+	$(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(TARGET_CC)" ARCH=$(LINUX_KARCH) modules
+	$(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(TARGET_CC)" ARCH=$(LINUX_KARCH) DEPMOD=true INSTALL_MOD_PATH=$(KERNEL_BUILD_DIR)/modules modules_install
 	touch $(LINUX_DIR)/.modules_done
 
 modules: $(LINUX_DIR)/.modules_done
diff --git a/openwrt/include/package.mk b/openwrt/include/package.mk
index 79c29bccf67fd6851949c2a3a74db7a6d2214cac..385a84653741e1f24995bab3823f1980b63655fe 100644
--- a/openwrt/include/package.mk
+++ b/openwrt/include/package.mk
@@ -251,11 +251,11 @@ endef
 define Build/Configure/Default
 	@(cd $(PKG_BUILD_DIR)/$(3); \
 	[ -x configure ] && \
-		$(2) \
 		$(TARGET_CONFIGURE_OPTS) \
 		CFLAGS="$(TARGET_CFLAGS)" \
 		CPPFLAGS="-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include" \
 		LDFLAGS="-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib" \
+		$(2) \
 		./configure \
 		--target=$(GNU_TARGET_NAME) \
 		--host=$(GNU_TARGET_NAME) \
@@ -283,7 +283,7 @@ define Build/Configure
 endef
 
 define Build/Compile/Default
-	PATH=$(TARGET_PATH) $(MAKE) -C $(PKG_BUILD_DIR) \
+	$(MAKE) -C $(PKG_BUILD_DIR) \
 		$(TARGET_CONFIGURE_OPTS) \
 		CROSS="$(TARGET_CROSS)" \
 		EXTRA_CFLAGS="$(TARGET_CFLAGS) -I$(STAGING_DIR)/include -I$(STAGING_DIR)/usr/include" \
diff --git a/openwrt/package/busybox/Makefile b/openwrt/package/busybox/Makefile
index 67f7ce1816a12414d74680109258d239566e27cc..6a359688a5621d2599a058d0f8ac4e55456f4d0e 100644
--- a/openwrt/package/busybox/Makefile
+++ b/openwrt/package/busybox/Makefile
@@ -38,12 +38,12 @@ endef
 
 define Build/Configure
 	$(SCRIPT_DIR)/gen_busybox_config.pl $(TOPDIR)/.config > $(PKG_BUILD_DIR)/.config
-	yes '' | PATH="$(TARGET_PATH)" $(MAKE) CC="$(TARGET_CC)" CROSS="$(TARGET_CROSS)" \
+	yes '' | $(MAKE) CC="$(TARGET_CC)" CROSS="$(TARGET_CROSS)" \
 	-C $(PKG_BUILD_DIR) oldconfig
 endef
 
 define Package/busybox/install
-	PATH="$(TARGET_PATH)" $(MAKE) CC="$(TARGET_CC)" CROSS="$(TARGET_CROSS)" \
+	$(MAKE) CC="$(TARGET_CC)" CROSS="$(TARGET_CROSS)" \
 	PREFIX="$(1)" EXTRA_CFLAGS="$(TARGET_CFLAGS)" -C $(PKG_BUILD_DIR) install
 	-rm -rf $(1)/lib64
 endef
diff --git a/openwrt/package/diag/Makefile b/openwrt/package/diag/Makefile
index 024426f8b1e339131cc649a31b3aa3f8988a1c2e..3ffd2f460ff9f0f8336435811aca464ef170d3b0 100644
--- a/openwrt/package/diag/Makefile
+++ b/openwrt/package/diag/Makefile
@@ -35,7 +35,6 @@ define Build/Compile
 	$(MAKE) -C "$(LINUX_DIR)" \
 		CROSS_COMPILE="$(TARGET_CROSS)" \
 		ARCH="$(LINUX_KARCH)" \
-		PATH="$(TARGET_PATH)" \
 		SUBDIRS="$(PKG_BUILD_DIR)" \
 		EXTRA_CFLAGS="-DBCMDRIVER -I$(LINUX_DIR)/arch/mips/bcm947xx/include" \
 		modules
diff --git a/openwrt/package/fuse/Makefile b/openwrt/package/fuse/Makefile
index f690f56fa7a0ed7fda27707091a1b716a032dc4a..fd55c71dc70752fd9817602326a9ed3b81d7ca83 100644
--- a/openwrt/package/fuse/Makefile
+++ b/openwrt/package/fuse/Makefile
@@ -82,7 +82,6 @@ define Build/Compile
 	$(MAKE) -C $(PKG_BUILD_DIR) \
 		ARCH="$(LINUX_KARCH)" \
 		CROSS_COMPILE="$(TARGET_CROSS)" \
-		PATH="$(TARGET_PATH)" \
 		DESTDIR="$(PKG_INSTALL_DIR)" \
 		all install
 endef
diff --git a/openwrt/package/iptables/Makefile b/openwrt/package/iptables/Makefile
index bf8124084c384a99af7d3d54dd3694cefe964f52..8d77fb43f475ed4274f9f2011b8afd6510afe0c4 100644
--- a/openwrt/package/iptables/Makefile
+++ b/openwrt/package/iptables/Makefile
@@ -161,9 +161,9 @@ endef
 define Build/Compile
 	chmod a+x $(PKG_BUILD_DIR)/extensions/.*-test*
 	mkdir -p $(PKG_INSTALL_DIR)
-	PATH="$(TARGET_PATH)" $(MAKE) -C $(PKG_BUILD_DIR) \
+	$(MAKE) -C $(PKG_BUILD_DIR) \
 		$(TARGET_CONFIGURE_OPTS) \
-		CC="$(TARGET_CC)" COPT_FLAGS="$(TARGET_CFLAGS)" \
+		COPT_FLAGS="$(TARGET_CFLAGS)" \
 		KERNEL_DIR="$(LINUX_DIR)" PREFIX=/usr \
 		DESTDIR="$(PKG_INSTALL_DIR)" \
 		all install install-devel
@@ -171,9 +171,9 @@ endef
 
 
 define Build/InstallDev
-	PATH="$(TARGET_PATH)" $(MAKE) -C $(PKG_BUILD_DIR) \
+	$(MAKE) -C $(PKG_BUILD_DIR) \
 		$(TARGET_CONFIGURE_OPTS) \
-		CC="$(TARGET_CC)" COPT_FLAGS="$(TARGET_CFLAGS)" \
+		COPT_FLAGS="$(TARGET_CFLAGS)" \
 		KERNEL_DIR="$(LINUX_DIR)" PREFIX=/usr \
 		DESTDIR="$(STAGING_DIR)" \
 		install install-devel
diff --git a/openwrt/package/libpcap/Makefile b/openwrt/package/libpcap/Makefile
index 155748a4728fdefb4fcd01d38b4711beb890124d..1d9d4371fb3f34fe6d0f31ec749916b6634d96ab 100644
--- a/openwrt/package/libpcap/Makefile
+++ b/openwrt/package/libpcap/Makefile
@@ -71,7 +71,6 @@ define Build/Compile
 	mkdir -p $(PKG_INSTALL_DIR)
 	$(MAKE) -C $(PKG_BUILD_DIR) \
 		CCOPT="$(TARGET_CFLAGS) -I$(BUILD_DIR)/linux/include" \
-		PATH=$(TARGET_PATH) \
 		DESTDIR="$(PKG_INSTALL_DIR)" \
 		all install
 endef
diff --git a/openwrt/package/madwifi/Makefile b/openwrt/package/madwifi/Makefile
index 96ca1baf36021b2bfdb3b9c4b3c2b71312797102..380ec4ad611e4fcadc45e27816025fa399302dfd 100644
--- a/openwrt/package/madwifi/Makefile
+++ b/openwrt/package/madwifi/Makefile
@@ -50,7 +50,6 @@ ifeq ($(findstring PCI,$(BUS)),PCI)
 endif
 
 MADWIFI_MAKEOPTS= -C $(PKG_BUILD_DIR) \
-		PATH="$(TARGET_PATH)" \
 		ARCH="$(LINUX_KARCH)" \
 		CROSS_COMPILE="$(TARGET_CROSS)" \
 		CC="$(TARGET_CC)" \
diff --git a/openwrt/package/mini_fo/Makefile b/openwrt/package/mini_fo/Makefile
index 6cba9db170efcafdfbf40746476a742e8af7917e..2e98efffda884f7a473f760f11e7ee5598e65878 100644
--- a/openwrt/package/mini_fo/Makefile
+++ b/openwrt/package/mini_fo/Makefile
@@ -33,7 +33,6 @@ endef
 
 define Build/Compile
 	$(MAKE) -C $(PKG_BUILD_DIR) \
-		PATH="$(TARGET_PATH)" \
 		ARCH="$(LINUX_KARCH)" \
 		CROSS_COMPILE="$(TARGET_CROSS)" \
 		KERNELVERSION="$(KERNEL)" \
diff --git a/openwrt/package/openssl/Makefile b/openwrt/package/openssl/Makefile
index bbbd2073ed4586cb66ac3017dabfbbc76ac2f983..be5b4a6d06bd7ed66123770235b0ad1196e01b73 100644
--- a/openwrt/package/openssl/Makefile
+++ b/openwrt/package/openssl/Makefile
@@ -52,7 +52,6 @@ define Build/Configure
 	$(SED) 's,/CFLAG=,/CFLAG= $(TARGET_SOFT_FLOAT) ,g' $(PKG_BUILD_DIR)/Configure
 	$(SED) s/OPENWRT_OPTIMIZATION_FLAGS/$(BR2_TARGET_OPTIMIZATION)/g $(PKG_BUILD_DIR)/Configure
 	(cd $(PKG_BUILD_DIR); \
-		PATH=$(TARGET_PATH) \
 		./Configure linux-openwrt \
 		  --prefix=/usr \
 		  --openssldir=/etc/ssl \
diff --git a/openwrt/package/shfs/Makefile b/openwrt/package/shfs/Makefile
index 63a1108e6fad1de97b58e08a8a03cdae57ce7919..dbaca66913ab9cfeebc9acc6b21922a97a964de5 100644
--- a/openwrt/package/shfs/Makefile
+++ b/openwrt/package/shfs/Makefile
@@ -43,7 +43,6 @@ define Build/Compile
 	$(MAKE) -C $(PKG_BUILD_DIR) \
 		ARCH="$(LINUX_KARCH)" \
 		CROSS_COMPILE="$(TARGET_CROSS)" \
-		PATH="$(TARGET_PATH)" \
 		OFLAGS="$(TARGET_CFLAGS)" \
 		CC="$(TARGET_CC)" \
 		LINKER="$(TARGET_CC)" \
diff --git a/openwrt/package/switch/Makefile b/openwrt/package/switch/Makefile
index 860e530c4c972c14cc27ba3d4a6f93d4cf4ad7d0..8b5e7b324cd4f8e2b6260bc0e4a0f9932da0dacd 100644
--- a/openwrt/package/switch/Makefile
+++ b/openwrt/package/switch/Makefile
@@ -35,7 +35,6 @@ define Build/Compile
 	$(MAKE) -C "$(LINUX_DIR)" \
 		CROSS_COMPILE="$(TARGET_CROSS)" \
 		ARCH="$(LINUX_KARCH)" \
-		PATH="$(TARGET_PATH)" \
 		SUBDIRS="$(PKG_BUILD_DIR)" \
 		EXTRA_CFLAGS="-DBCMGPIO2" \
 		modules
diff --git a/openwrt/package/wlcompat/Makefile b/openwrt/package/wlcompat/Makefile
index a42cdd20503d7338e887bc9c5cd87126d9f72358..d3ccf881018ed8b2ec5d7efc16d763cfbbe2576e 100644
--- a/openwrt/package/wlcompat/Makefile
+++ b/openwrt/package/wlcompat/Makefile
@@ -46,7 +46,6 @@ define Build/Compile
 	$(MAKE) -C "$(LINUX_DIR)" \
 		CROSS_COMPILE="$(TARGET_CROSS)" \
 		ARCH="$(LINUX_KARCH)" \
-		PATH="$(TARGET_PATH)" \
 		SUBDIRS="$(PKG_BUILD_DIR)" \
 		EXTRA_CFLAGS="-DDEBUG -I$(LINUX_DIR)/arch/mips/bcm947xx/include -I$(PKG_BUILD_DIR)/include" \
 		modules
@@ -54,7 +53,6 @@ define Build/Compile
 	$(MAKE) -C "$(LINUX_DIR)" \
 		CROSS_COMPILE="$(TARGET_CROSS)" \
 		ARCH="$(LINUX_KARCH)" \
-		PATH="$(TARGET_PATH)" \
 		SUBDIRS="$(PKG_BUILD_DIR)" \
 		EXTRA_CFLAGS="-I$(LINUX_DIR)/arch/mips/bcm947xx/include -I$(PKG_BUILD_DIR)/include" \
 		modules
diff --git a/openwrt/rules.mk b/openwrt/rules.mk
index 2cd8ea9b25a6c76520c42a31dbabd816374f8f4b..6c770c48a793cd9499d19d021ce3c676ef058665 100644
--- a/openwrt/rules.mk
+++ b/openwrt/rules.mk
@@ -39,9 +39,11 @@ KERNEL_CROSS:=$(OPTIMIZE_FOR_CPU)-linux-uclibc-
 TARGET_CROSS:=$(OPTIMIZE_FOR_CPU)-linux-uclibc-
 IMAGE:=$(BUILD_DIR)/root_fs_$(ARCH)
 
-TARGET_PATH:=$(STAGING_DIR)/usr/bin:$(STAGING_DIR)/bin:/bin:/sbin:/usr/bin:/usr/sbin
+TARGET_PATH:=$(STAGING_DIR)/usr/bin:$(STAGING_DIR)/bin:$(PATH)
 TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)
 
+export PATH:=$(TARGET_PATH)
+
 LINUX_DIR:=$(BUILD_DIR)/linux
 LINUX_HEADERS_DIR:=$(TOOL_BUILD_DIR)/linux
 
@@ -54,7 +56,9 @@ SED:=$(STAGING_DIR)/bin/sed -i -e
 CP:=cp -fpR
 
 ifneq ($(CONFIG_CCACHE),)
-  TARGET_CC:=CCACHE_DIR=$(TOPDIR)/ccache_$(ARCH) ccache $(TARGET_CC)
+  # FIXME: move this variable to a better location
+  export CCACHE_DIR=$(TOPDIR)/ccache_$(ARCH)
+  TARGET_CC:= ccache $(TARGET_CC)
 endif
 
 HOST_ARCH:=$(shell $(HOSTCC) -dumpmachine | sed -e s'/-.*//' \
@@ -73,9 +77,8 @@ HOST_ARCH:=$(shell $(HOSTCC) -dumpmachine | sed -e s'/-.*//' \
 GNU_HOST_NAME:=$(HOST_ARCH)-pc-linux-gnu
 
 TARGET_CONFIGURE_OPTS:= \
-  PATH=$(TARGET_PATH) \
   AR=$(TARGET_CROSS)ar \
-  AS=$(TARGET_CROSS)as \
+  AS="$(TARGET_CC) -c $(TARGET_CFLAGS)" \
   LD=$(TARGET_CROSS)ld \
   NM=$(TARGET_CROSS)nm \
   CC="$(TARGET_CC)" \
@@ -88,7 +91,6 @@ TARGET_CONFIGURE_OPTS:= \
 RSTRIP:= \
   STRIP="$(STRIP)" \
   STRIP_KMOD="$(TARGET_CROSS)strip --strip-unneeded --remove-section=.comment" \
-  PATH=$(TARGET_PATH) \
   $(SCRIPT_DIR)/rstrip.sh
 
 # where to build (and put) .ipk packages
@@ -101,7 +103,7 @@ IPKG:= \
 
 # invoke ipkg-build with some default options
 IPKG_BUILD:= \
-  PATH="$(TARGET_PATH)" ipkg-build -c -o root -g root
+  ipkg-build -c -o root -g root
 
 ifeq ($(CONFIG_ENABLE_LOCALE),true)
   DISABLE_NLS:=
diff --git a/openwrt/toolchain/gcc/Makefile b/openwrt/toolchain/gcc/Makefile
index a13ab2ebf76b72aef529b5024a0d809ce21330ee..85691e6a8ef3e3ccb930c127e5f16e7b9f280387 100644
--- a/openwrt/toolchain/gcc/Makefile
+++ b/openwrt/toolchain/gcc/Makefile
@@ -48,7 +48,7 @@ BUILD_DIR2:=$(TOOL_BUILD_DIR)/gcc-$(PKG_VERSION)-final
 
 define Stage1/Configure
 	mkdir -p $(BUILD_DIR1)
-	(cd $(BUILD_DIR1); rm -f config.cache; PATH=$(TARGET_PATH) \
+	(cd $(BUILD_DIR1); rm -f config.cache; \
 		$(PKG_BUILD_DIR)/configure \
 		--prefix=$(STAGING_DIR) \
 		--build=$(GNU_HOST_NAME) \
@@ -64,10 +64,10 @@ define Stage1/Configure
 	);
 endef
 define Stage1/Compile
-	PATH=$(TARGET_PATH) $(MAKE) -C $(BUILD_DIR1) all-gcc
+	$(MAKE) -C $(BUILD_DIR1) all-gcc
 endef
 define Stage1/Install
-	PATH=$(TARGET_PATH) $(MAKE) -C $(BUILD_DIR1) install-gcc
+	$(MAKE) -C $(BUILD_DIR1) install-gcc
 endef
 
 define Stage2/Configure
@@ -77,7 +77,7 @@ define Stage2/Configure
 	ln -sf ../include $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/sys-include
 	rm -rf $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib
 	ln -sf ../lib $(STAGING_DIR)/$(REAL_GNU_TARGET_NAME)/lib
-	(cd $(BUILD_DIR2); rm -f config.cache; PATH=$(TARGET_PATH) \
+	(cd $(BUILD_DIR2); rm -f config.cache; \
 		$(PKG_BUILD_DIR)/configure \
 		--prefix=$(STAGING_DIR) \
 		--build=$(GNU_HOST_NAME) \
@@ -92,10 +92,10 @@ define Stage2/Configure
 	);
 endef
 define Stage2/Compile
-	PATH=$(TARGET_PATH) $(MAKE) -C $(BUILD_DIR2) all
+	$(MAKE) -C $(BUILD_DIR2) all
 endef
 define Stage2/Install
-	PATH=$(TARGET_PATH) $(MAKE) -C $(BUILD_DIR2) install
+	$(MAKE) -C $(BUILD_DIR2) install
 	echo $(PKG_VERSION) > $(STAGING_DIR)/gcc_version
 	# Set up the symlinks to enable lying about target name.
 	set -e; \
diff --git a/openwrt/toolchain/libnotimpl/Makefile b/openwrt/toolchain/libnotimpl/Makefile
index 214f51c5dc77bbdf52ed2a367cd117f5668d7e1a..bc515ca0800df470494876a99a6ff4b75d889384 100644
--- a/openwrt/toolchain/libnotimpl/Makefile
+++ b/openwrt/toolchain/libnotimpl/Makefile
@@ -12,7 +12,7 @@ PKG_BUILD_DIR := $(TOOL_BUILD_DIR)/libnotimpl
 include $(INCLUDE_DIR)/host-build.mk
 
 define cc
-	PATH="$(TARGET_PATH)" $(TARGET_CC) $(TARGET_CFLAGS) -c src/$(1).c -o $(PKG_BUILD_DIR)/$(1).o
+	$(TARGET_CC) $(TARGET_CFLAGS) -c src/$(1).c -o $(PKG_BUILD_DIR)/$(1).o
 endef
 
 define Build/Prepare
@@ -22,7 +22,7 @@ endef
 
 define Build/Compile
 	$(call cc,math)
-	PATH="$(TARGET_PATH)" $(TARGET_CROSS)ar rc $(PKG_BUILD_DIR)/libnotimpl.a $(PKG_BUILD_DIR)/*.o
+	$(TARGET_CROSS)ar rc $(PKG_BUILD_DIR)/libnotimpl.a $(PKG_BUILD_DIR)/*.o
 endef
 
 define Build/Install