diff --git a/pkg/pkg.mk b/pkg/pkg.mk
index 2d95474c84071282cffeb54348fa251338afe52a..fa8e5a9ddd63b0ad75a0e6594d19b5fd85d525eb 100644
--- a/pkg/pkg.mk
+++ b/pkg/pkg.mk
@@ -4,13 +4,20 @@
 PKG_DIR?=$(CURDIR)
 PKG_BUILDDIR?=$(BINDIRBASE)/pkg/$(BOARD)/$(PKG_NAME)
 
-.PHONY: git-download
+.PHONY: git-download clean
 
+ifneq (,$(wildcard $(PKG_DIR)/patches))
+git-download: $(PKG_BUILDDIR)/.git-patched
+else
 git-download: $(PKG_BUILDDIR)/.git-downloaded
+endif
 
-GIT_APPLY_PATCHES:=if test -d "$(PKG_DIR)"/patches; then \
-	git -C "$(PKG_BUILDDIR)" am --ignore-whitespace "$(PKG_DIR)"/patches/*.patch; \
-	fi
+ifneq (,$(wildcard $(PKG_DIR)/patches))
+$(PKG_BUILDDIR)/.git-patched: $(PKG_BUILDDIR)/.git-downloaded $(PKG_DIR)/Makefile $(PKG_DIR)/patches/*.patch
+	git -C $(PKG_BUILDDIR) checkout -f $(PKG_VERSION)
+	git -C $(PKG_BUILDDIR) am --ignore-whitespace "$(PKG_DIR)"/patches/*.patch
+	touch $@
+endif
 
 $(PKG_BUILDDIR)/.git-downloaded:
 	rm -Rf $(PKG_BUILDDIR)
@@ -21,9 +28,10 @@ $(PKG_BUILDDIR)/.git-downloaded:
 
 clean::
 	@test -d $(PKG_BUILDDIR) && { \
+		rm $(PKG_BUILDDIR)/.git-patched ; \
 		git -C $(PKG_BUILDDIR) clean -f ; \
 		git -C $(PKG_BUILDDIR) checkout "$(PKG_VERSION)"; \
-		$(GIT_APPLY_PATCHES) ; \
+		make $(PKG_BUILDDIR)/.git-patched ; \
 		touch $(PKG_BUILDDIR)/.git-downloaded ; \
 	} > /dev/null 2>&1 || true