diff --git a/Makefile b/Makefile
index 8b32683716defe381731a2670463cc466af1d670..e03fe7177da8dd11288f7a26fc8dc623500b2f37 100644
--- a/Makefile
+++ b/Makefile
@@ -13,8 +13,6 @@
 
 .EXPORT_ALL_VARIABLES:
 
-.PHONY: sounds clean clean-depend dist-clean all depend
-
 # Create OPTIONS variable
 OPTIONS=
 
@@ -273,6 +271,7 @@ SUBDIRS_CLEAN_DEPEND:=$(SUBDIRS:%=%-clean-depend)
 MOD_SUBDIRS_DEPEND:=$(MOD_SUBDIRS:%=%-depend)
 OTHER_SUBDIRS_DEPEND:=$(OTHER_SUBDIRS:%=%-depend)
 SUBDIRS_DEPEND:=$(MOD_SUBDIRS_DEPEND) $(OTHER_SUBDIRS_DEPEND)
+SUBDIRS_UNINSTALL:=$(SUBDIRS:%=%-uninstall)
 
 OBJS=io.o sched.o logger.o frame.o loader.o config.o channel.o \
 	translate.o file.o pbx.o cli.o md5.o term.o \
@@ -371,10 +370,10 @@ _all: all
 
 all: cleantest config.status menuselect.makeopts depend asterisk $(SUBDIRS)
 
-$(MOD_SUBDIRS): FORCE
+$(MOD_SUBDIRS):
 	@CFLAGS="$(MOD_SUBDIR_CFLAGS)$(ASTCFLAGS)" $(MAKE) -C $@
 
-$(OTHER_SUBDIRS): FORCE 
+$(OTHER_SUBDIRS):
 	@CFLAGS="$(OTHER_SUBDIR_CFLAGS)$(ASTCFLAGS)" $(MAKE) -C $@
 
 config.status: configure
@@ -816,8 +815,6 @@ TAGS: .tags-depend .tags-sources
 
 etags: TAGS
 
-FORCE:
-
 %_env:
 	$(MAKE) -C $(shell echo $@ | sed "s/_env//g") env
 
@@ -837,7 +834,10 @@ cleantest:
 		$(MAKE) defaults.h;\
 	fi
 
-_uninstall:
+$(SUBDIRS_UNINSTALL):
+	@$(MAKE) -C $(@:-uninstall=) uninstall
+
+_uninstall: $(SUBDIRS_UNINSTALL)
 	rm -f $(DESTDIR)$(MODULES_DIR)/*
 	rm -f $(DESTDIR)$(ASTSBINDIR)/*asterisk*
 	rm -f $(DESTDIR)$(ASTSBINDIR)/astgenkey
@@ -845,7 +845,6 @@ _uninstall:
 	rm -rf $(DESTDIR)$(ASTHEADERDIR)
 	rm -rf $(DESTDIR)$(ASTDATADIR)/firmware
 	rm -rf $(DESTDIR)$(ASTMANDIR)/man8
-	for x in $(SUBDIRS); do $(MAKE) -C $$x uninstall || exit 1 ; done
 	$(MAKE) -C sounds uninstall
 
 uninstall: _uninstall
@@ -883,3 +882,5 @@ mxml/libmxml.a:
 makeopts.xml: $(foreach dir,$(MOD_SUBDIRS),$(dir)/*.c) build_tools/cflags.xml sounds/sounds.xml
 	@echo "Generating list of available modules ..."
 	@build_tools/prep_moduledeps > $@
+
+.PHONY: sounds clean clean-depend dist-clean all _all depend cleantest uninstall _uninstall uninstall-all dont-optimize valgrind $(SUBDIRS_INSTALL) $(SUBDIRS_CLEAN) $(SUBDIRS_CLEAN_DEPEND) $(SUBDIRS_DEPEND) $(SUBDIRS_UNINSTALL)
diff --git a/agi/Makefile b/agi/Makefile
index d73f2382cc69f63f2e1e2c6f9d39e8a1e53c8fa1..e7a2107429b4753d2b8806a6635df99d1f547cb4 100644
--- a/agi/Makefile
+++ b/agi/Makefile
@@ -11,7 +11,7 @@
 # the GNU General Public License
 #
 
-.PHONY: clean clean-depend all depend
+.PHONY: clean clean-depend all depend uninstall
 
 AGIS=agi-test.agi eagi-test eagi-sphinx-test jukebox.agi
 
diff --git a/apps/Makefile b/apps/Makefile
index 012858202138c7c132c082a31052a688d4dbb11e..3601da45c69c4a85909197546d0e13fab2c09335 100644
--- a/apps/Makefile
+++ b/apps/Makefile
@@ -11,7 +11,7 @@
 # the GNU General Public License
 #
 
-.PHONY: clean clean-depend all depend
+.PHONY: clean clean-depend all depend uninstall
 
 ifneq ($(wildcard ../menuselect.makeopts),)
   include ../menuselect.makeopts
diff --git a/cdr/Makefile b/cdr/Makefile
index 1b4df79785d598586dfdea5dfb33f709f637f580..cfc6fbfa5be853eaf92fed8dfd3d5a9e9696f619 100644
--- a/cdr/Makefile
+++ b/cdr/Makefile
@@ -11,7 +11,7 @@
 # the GNU General Public License
 #
 
-.PHONY: clean clean-depend all depend
+.PHONY: clean clean-depend all depend uninstall
 
 ifneq ($(wildcard ../menuselect.makeopts),)
   include ../menuselect.makeopts
diff --git a/channels/Makefile b/channels/Makefile
index 93429b6b422a8bfe23a37476e9d84a3b6841c48c..a231ded1f53b55d3598a28ab81d8dbb2270eca6f 100644
--- a/channels/Makefile
+++ b/channels/Makefile
@@ -11,7 +11,7 @@
 # the GNU General Public License
 #
 
-.PHONY: clean clean-depend all depend
+.PHONY: clean clean-depend all depend uninstall
 
 ifneq ($(wildcard ../menuselect.makeopts),)
   include ../menuselect.makeopts
diff --git a/codecs/Makefile b/codecs/Makefile
index 1528ee374f1eac692e064f83ed2ccf0dabffbb12..d6e304be204ce816453ef74692b9871b8a829709 100644
--- a/codecs/Makefile
+++ b/codecs/Makefile
@@ -11,7 +11,7 @@
 # the GNU General Public License
 #
 
-.PHONY: clean clean-depend all depend
+.PHONY: clean clean-depend all depend uninstall
 
 ifneq ($(wildcard ../menuselect.makeopts),)
   include ../menuselect.makeopts
diff --git a/formats/Makefile b/formats/Makefile
index 1a306d2f2635e92d28afb2c224acfc5cd72ae974..8440aa0dd70c14fe049ea7405cd4acf19e926140 100644
--- a/formats/Makefile
+++ b/formats/Makefile
@@ -11,7 +11,7 @@
 # the GNU General Public License
 #
 
-.PHONY: clean clean-depend all depend
+.PHONY: clean clean-depend all depend uninstall
 
 ifneq ($(wildcard ../menuselect.makeopts),)
   include ../menuselect.makeopts
diff --git a/funcs/Makefile b/funcs/Makefile
index b4310f9bf8bae1e1a0d347468db52bb26d2ad71d..6172ed3185b6966b0b4f02e8f4f5cc06bcc0bec7 100644
--- a/funcs/Makefile
+++ b/funcs/Makefile
@@ -11,7 +11,7 @@
 # the GNU General Public License
 #
 
-.PHONY: clean clean-depend all depend
+.PHONY: clean clean-depend all depend uninstall
 
 ifneq ($(wildcard ../menuselect.makeopts),)
   include ../menuselect.makeopts
diff --git a/pbx/Makefile b/pbx/Makefile
index 795911c94e1421fd665aff73bfb59c38e79eca24..74168c0700a62db39841c17fd5fd76a280a28641 100644
--- a/pbx/Makefile
+++ b/pbx/Makefile
@@ -11,7 +11,7 @@
 # the GNU General Public License
 #
 
-.PHONY: clean clean-depend all depend
+.PHONY: clean clean-depend all depend uninstall
 
 ifneq ($(wildcard ../menuselect.makeopts),)
   include ../menuselect.makeopts
diff --git a/res/Makefile b/res/Makefile
index 6b7dd3b0c5f013849d611ad2ea1de8c150c2fae7..9ee5a2e62bc3c70b21d9af08a6e25635d2958c00 100644
--- a/res/Makefile
+++ b/res/Makefile
@@ -11,7 +11,7 @@
 # the GNU General Public License
 #
 
-.PHONY: clean clean-depend all depend
+.PHONY: clean clean-depend all depend uninstall
 
 ifneq ($(wildcard ../menuselect.makeopts),)
   include ../menuselect.makeopts
diff --git a/utils/Makefile b/utils/Makefile
index 2432ad2febec9e84ed4c5eeab2fe4fb1738c5965..4e3aa5e83e988ba056ec080a8f48d657f7987408 100644
--- a/utils/Makefile
+++ b/utils/Makefile
@@ -11,7 +11,7 @@
 # the GNU General Public License
 #
 
-.PHONY: clean clean-depend all depend
+.PHONY: clean clean-depend all depend uninstall
 
 UTILS:=astman smsq stereorize streamplayer aelparse