diff --git a/GNUmakefile.in b/GNUmakefile.in
index 6b1412558cc838eea4c5e4a3bc2d0af639e1f156..0b9068c840cdfde6d3f5b873279465e7d97f2f16 100644
--- a/GNUmakefile.in
+++ b/GNUmakefile.in
@@ -207,9 +207,9 @@ endif
 
 client-install: client client-mkdirs
 	@$(MAKE) -C lib client-install
+	@$(MAKE) -C clientside client-install
 ifeq ($(EVENTSYS),1)
 	@$(MAKE) -C event client-install
-	@$(MAKE) -C clientside client-install
 endif
 	@$(MAKE) -C os client-install
 ifneq ($(SYSTEM),CYGWIN_NT-5.1)
@@ -224,6 +224,7 @@ subboss: client
 	@$(MAKE) -C utils subboss
 
 subboss-install: subboss
+	@$(MAKE) -C clientside client-install
 ifeq ($(EVENTSYS),1)
 	@$(MAKE) -C event client-install
 endif
diff --git a/clientside/GNUmakefile.in b/clientside/GNUmakefile.in
index 6aa4b73d1a1c8e730bf6c6c37a6aacd482fe0ae2..61e0fd117c31c3b3627a38b1a2649e844ff6e60e 100644
--- a/clientside/GNUmakefile.in
+++ b/clientside/GNUmakefile.in
@@ -20,7 +20,7 @@ ifeq ($(WITH_EMULAB),0)
 SUBDIRS	       += lib
 endif
 # These must be after lib.
-SUBDIRS	       += event tools
+SUBDIRS	       += event tools os
 
 ifeq ($(WITH_EMULAB),1)
 all:	all-subdirs
@@ -32,6 +32,8 @@ include $(TESTBED_SRCDIR)/GNUmakerules
 client:		client-subdirs
 client-install: client client-install-subdirs
 control-install: control-install-subdirs
+subboss:	subboss-subdirs
+subboss-install: client subboss-install-subdirs
 post-install:	post-install-subdirs
 clean:		clean-subdirs
 distclean:	distclean-subdirs
diff --git a/clientside/configure b/clientside/configure
index 7b5fd088f8d593768e5db18b9cd409f793ded002..d7732ceddc86f30ac6ce304aacaf2ce632d9f973 100755
--- a/clientside/configure
+++ b/clientside/configure
@@ -4827,7 +4827,9 @@ outfiles="Makeconf GNUmakefile \
 	  event/GNUmakefile \
 	  event/program-agent/GNUmakefile \
 	  tools/GNUmakefile \
-	  tools/pcapper/GNUmakefile"
+	  tools/pcapper/GNUmakefile \
+	  os/GNUmakefile os/syncd/GNUmakefile \
+	  os/dijkstra/GNUmakefile os/genhostsfile/GNUmakefile"
 
 #
 # When building as part of a full emulab build, a few things come
diff --git a/clientside/configure.in b/clientside/configure.in
index 7e6b75b41fbad4061c859584eff290f58d3d5aab..b0497f187dbf67b904e2e2ba3ae2075510ae1f6a 100644
--- a/clientside/configure.in
+++ b/clientside/configure.in
@@ -155,7 +155,9 @@ outfiles="Makeconf GNUmakefile \
 	  event/GNUmakefile \
 	  event/program-agent/GNUmakefile \
 	  tools/GNUmakefile \
-	  tools/pcapper/GNUmakefile"
+	  tools/pcapper/GNUmakefile \
+	  os/GNUmakefile os/syncd/GNUmakefile \
+	  os/dijkstra/GNUmakefile os/genhostsfile/GNUmakefile"
 
 #
 # When building as part of a full emulab build, a few things come
diff --git a/clientside/event/GNUmakefile.in b/clientside/event/GNUmakefile.in
index 5afd09c5cb04570bc6330130f9a3c366a298ba3a..bf90832125d580abc98caf31fc23f6e562e1169c 100644
--- a/clientside/event/GNUmakefile.in
+++ b/clientside/event/GNUmakefile.in
@@ -19,6 +19,8 @@ include $(TESTBED_SRCDIR)/GNUmakerules
 client:		client-subdirs
 client-install: client client-install-subdirs
 control-install: control-install-subdirs
+subboss:
+subboss-install:
 post-install:	post-install-subdirs
 clean:		clean-subdirs
 distclean:	distclean-subdirs
diff --git a/clientside/os/GNUmakefile.in b/clientside/os/GNUmakefile.in
new file mode 100644
index 0000000000000000000000000000000000000000..05b851f02b059ad99fba8af665f8c7554a3c2131
--- /dev/null
+++ b/clientside/os/GNUmakefile.in
@@ -0,0 +1,66 @@
+#
+# EMULAB-COPYRIGHT
+# Copyright (c) 2000-2011 University of Utah and the Flux Group.
+# All rights reserved.
+#
+SRCDIR		= @srcdir@
+TESTBED_SRCDIR	= @top_srcdir@
+OBJDIR		= @top_builddir@
+SUBDIR		= $(subst $(TESTBED_SRCDIR)/,,$(SRCDIR))
+SYSTEM	       := $(shell uname -s)
+LBINDIR		= $(DESTDIR)/usr/local/bin
+SYSTEM	       := $(shell uname -s)
+
+include $(OBJDIR)/Makeconf
+
+SUBDIRS	= syncd dijkstra genhostsfile
+
+all:	all-subdirs
+
+include $(TESTBED_SRCDIR)/GNUmakerules
+
+install:
+	-mkdir -p $(INSTALL_DIR)/opsdir/man/man1
+	$(INSTALL) -m 644 $(SRCDIR)/install-tarfile.1 \
+		$(INSTALL_DIR)/opsdir/man/man1/install-tarfile.1
+
+control-install: 
+
+client:
+	$(MAKE) -C syncd client
+	$(MAKE) -C dijkstra client
+	$(MAKE) -C genhostsfile client
+
+client-install: client
+	-mkdir -p $(LBINDIR)
+	$(INSTALL_PROGRAM) $(SRCDIR)/install-tarfile $(LBINDIR)/install-tarfile
+	-mkdir -p $(DESTDIR)$(CLIENT_MANDIR)/man1
+	$(INSTALL) -m 644 $(SRCDIR)/install-tarfile.1 $(DESTDIR)$(CLIENT_MANDIR)/man1/install-tarfile.1
+	$(INSTALL_PROGRAM) $(SRCDIR)/install-rpm $(LBINDIR)/install-rpm
+	$(MAKE) -C syncd client-install
+	$(MAKE) -C dijkstra client-install
+	$(MAKE) -C genhostsfile client-install
+
+subboss: client
+
+subboss-install: subboss client-install
+
+remote-install: 
+	-mkdir -p $(LBINDIR)
+	$(INSTALL_PROGRAM) $(SRCDIR)/install-tarfile $(LBINDIR)/install-tarfile
+	$(INSTALL_PROGRAM) $(SRCDIR)/install-rpm $(LBINDIR)/install-rpm
+
+clean:		clean-subdirs
+distclean:	subdir-distclean
+
+subdir-distclean:
+	@$(MAKE) -C imagezip distclean
+
+# How to recursively descend into subdirectories to make general
+# targets such as `all'.
+%.MAKE:
+	@$(MAKE) -C $(dir $@) $(basename $(notdir $@))
+%-subdirs: $(addsuffix /%.MAKE,$(SUBDIRS)) ;
+
+.PHONY:	$(SUBDIRS)
+
diff --git a/clientside/os/dijkstra/GNUmakefile.in b/clientside/os/dijkstra/GNUmakefile.in
index dd6ca5abd0777353b96269ea39f8f9c5d84991dd..2a6f236dac8d47fd281c9820da222f872a61de62 100644
--- a/clientside/os/dijkstra/GNUmakefile.in
+++ b/clientside/os/dijkstra/GNUmakefile.in
@@ -1,13 +1,12 @@
 #
 # EMULAB-COPYRIGHT
-# Copyright (c) 2000-2007 University of Utah and the Flux Group.
+# Copyright (c) 2000-2011 University of Utah and the Flux Group.
 # All rights reserved.
 #
-
 SRCDIR		= @srcdir@
 TESTBED_SRCDIR	= @top_srcdir@
-OBJDIR		= ../..
-SUBDIR		= os/dijkstra
+OBJDIR		= @top_builddir@
+SUBDIR		= $(subst $(TESTBED_SRCDIR)/,,$(SRCDIR))
 
 include $(OBJDIR)/Makeconf
 
diff --git a/clientside/os/genhostsfile/GNUmakefile.in b/clientside/os/genhostsfile/GNUmakefile.in
index 83dbf8ac76ad322f01aa6fbe7ae646def0bbcea8..2ac8da1d66bc93635344e8a3b166a7199bbc32b8 100644
--- a/clientside/os/genhostsfile/GNUmakefile.in
+++ b/clientside/os/genhostsfile/GNUmakefile.in
@@ -1,13 +1,12 @@
 #
 # EMULAB-COPYRIGHT
-# Copyright (c) 2000-2005, 2007 University of Utah and the Flux Group.
+# Copyright (c) 2000-2011 University of Utah and the Flux Group.
 # All rights reserved.
 #
-
 SRCDIR		= @srcdir@
 TESTBED_SRCDIR	= @top_srcdir@
-OBJDIR		= ../..
-SUBDIR		= os/genhostsfile
+OBJDIR		= @top_builddir@
+SUBDIR		= $(subst $(TESTBED_SRCDIR)/,,$(SRCDIR))
 
 include $(OBJDIR)/Makeconf
 
diff --git a/clientside/os/syncd/GNUmakefile.in b/clientside/os/syncd/GNUmakefile.in
index d408c6a1a118f2188e192e949247770657e119d9..47e5f48c5c698236a2dc891498ea7a41e02f498a 100644
--- a/clientside/os/syncd/GNUmakefile.in
+++ b/clientside/os/syncd/GNUmakefile.in
@@ -1,13 +1,12 @@
 #
 # EMULAB-COPYRIGHT
-# Copyright (c) 2000-2005, 2007 University of Utah and the Flux Group.
+# Copyright (c) 2000-2011 University of Utah and the Flux Group.
 # All rights reserved.
 #
-
 SRCDIR		= @srcdir@
 TESTBED_SRCDIR	= @top_srcdir@
-OBJDIR		= ../..
-SUBDIR		= os/syncd
+OBJDIR		= @top_builddir@
+SUBDIR		= $(subst $(TESTBED_SRCDIR)/,,$(SRCDIR))
 
 include $(OBJDIR)/Makeconf
 
diff --git a/clientside/tools/GNUmakefile.in b/clientside/tools/GNUmakefile.in
index 08bd601b40a35bb3b9ff87b91294ef0bd3ba2fa6..aa456bf28f32b4179cbdb60ff3e7bbc4b9fc87ce 100644
--- a/clientside/tools/GNUmakefile.in
+++ b/clientside/tools/GNUmakefile.in
@@ -19,6 +19,8 @@ include $(TESTBED_SRCDIR)/GNUmakerules
 client:		client-subdirs
 client-install: client client-install-subdirs
 control-install: control-install-subdirs
+subboss:
+subboss-install:
 post-install:	post-install-subdirs
 clean:		clean-subdirs
 distclean:	distclean-subdirs
diff --git a/configure b/configure
index aa8f78fb629309eec404995b3c9d9ef853cbd12f..d16a5f24804ff487872d78723b4bd7ad3df47500 100755
--- a/configure
+++ b/configure
@@ -7024,8 +7024,7 @@ outfiles="$outfiles Makeconf GNUmakefile \
 	os/imagezip/ffs/GNUmakefile os/imagezip/extfs/GNUmakefile os/imagezip/ext4fs/GNUmakefile \
 	os/imagezip/hashmap/GNUmakefile \
 	os/frisbee.redux/GNUmakefile os/growdisk/GNUmakefile \
-        os/syncd/GNUmakefile os/dijkstra/GNUmakefile \
-	os/genhostsfile/GNUmakefile os/zapdisk/GNUmakefile \
+        os/zapdisk/GNUmakefile \
 	pxe/GNUmakefile pxe/bootinfo.restart \
 	security/GNUmakefile security/lastlog_daemon \
         sensors/GNUmakefile sensors/slothd/GNUmakefile \
@@ -7228,7 +7227,9 @@ outfiles="$outfiles Makeconf GNUmakefile \
 outfiles="$outfiles clientside/GNUmakefile \
  clientside/GNUmakefile clientside/event/GNUmakefile \
  clientside/event/program-agent/GNUmakefile \
- clientside/tools/GNUmakefile clientside/tools/pcapper/GNUmakefile"
+ clientside/tools/GNUmakefile clientside/tools/pcapper/GNUmakefile \
+ clientside/os/GNUmakefile clientside/os/syncd/GNUmakefile \
+ clientside/os/dijkstra/GNUmakefile clientside/os/genhostsfile/GNUmakefile"
 
 #
 # Do this for easy distclean.
diff --git a/configure.in b/configure.in
index 3b4c704bf106b25dc446e6d52eb538cf2f619cfd..3cc5e2d0f225d6aa2b1ec3d380b45e4fd59c6bcf 100755
--- a/configure.in
+++ b/configure.in
@@ -889,8 +889,7 @@ outfiles="$outfiles Makeconf GNUmakefile \
 	os/imagezip/ffs/GNUmakefile os/imagezip/extfs/GNUmakefile os/imagezip/ext4fs/GNUmakefile \
 	os/imagezip/hashmap/GNUmakefile \
 	os/frisbee.redux/GNUmakefile os/growdisk/GNUmakefile \
-        os/syncd/GNUmakefile os/dijkstra/GNUmakefile \
-	os/genhostsfile/GNUmakefile os/zapdisk/GNUmakefile \
+        os/zapdisk/GNUmakefile \
 	pxe/GNUmakefile pxe/bootinfo.restart \
 	security/GNUmakefile security/lastlog_daemon \
         sensors/GNUmakefile sensors/slothd/GNUmakefile \
@@ -1093,7 +1092,9 @@ outfiles="$outfiles Makeconf GNUmakefile \
 outfiles="$outfiles clientside/GNUmakefile \
  clientside/GNUmakefile clientside/event/GNUmakefile \
  clientside/event/program-agent/GNUmakefile \
- clientside/tools/GNUmakefile clientside/tools/pcapper/GNUmakefile"
+ clientside/tools/GNUmakefile clientside/tools/pcapper/GNUmakefile \
+ clientside/os/GNUmakefile clientside/os/syncd/GNUmakefile \
+ clientside/os/dijkstra/GNUmakefile clientside/os/genhostsfile/GNUmakefile"
 
 #
 # Do this for easy distclean.
diff --git a/lib/GNUmakefile.in b/lib/GNUmakefile.in
index 953f344ef198807aa86fe08f718dbbdbc4b66eed..28aeaa8607172c30de0d56e9585256bf5741dc6a 100644
--- a/lib/GNUmakefile.in
+++ b/lib/GNUmakefile.in
@@ -17,15 +17,12 @@ all:	all-subdirs
 include $(TESTBED_SRCDIR)/GNUmakerules
 
 client: client-subdirs
-
 install: install-subdirs
-
 control-install: control-install-subdirs
-
 client-install: client-install-subdirs
-
+subboss:
+subboss-install:
 clean:		clean-subdirs
-
 distclean:	distclean-subdirs
 
 # How to recursively descend into subdirectories to make general
diff --git a/os/GNUmakefile.in b/os/GNUmakefile.in
index 5ea46a887b94abcb65d4566caabce103fc06d075..1f54c6be3e54af546f7b3defde6d3383e3af2018 100644
--- a/os/GNUmakefile.in
+++ b/os/GNUmakefile.in
@@ -1,6 +1,6 @@
 #
 # EMULAB-COPYRIGHT
-# Copyright (c) 2000-2007 University of Utah and the Flux Group.
+# Copyright (c) 2000-2011 University of Utah and the Flux Group.
 # All rights reserved.
 #
 
@@ -14,7 +14,7 @@ SYSTEM	       := $(shell uname -s)
 
 include $(OBJDIR)/Makeconf
 
-SUBDIRS	= imagezip frisbee.redux syncd dijkstra genhostsfile
+SUBDIRS	= imagezip frisbee.redux 
 ifeq ($(SYSTEM),FreeBSD)
 SUBDIRS += growdisk 
 endif
@@ -28,9 +28,6 @@ install: $(INSTALL_SBINDIR)/split-image.sh
 	@$(MAKE) -C frisbee.redux install
 	$(INSTALL_PROGRAM) $(SRCDIR)/template_record \
 		$(INSTALL_DIR)/opsdir/bin/template_record
-	-mkdir -p $(INSTALL_DIR)/opsdir/man/man1
-	$(INSTALL) -m 644 $(SRCDIR)/install-tarfile.1 \
-		$(INSTALL_DIR)/opsdir/man/man1/install-tarfile.1
 
 control-install: 
 	@$(MAKE) -C imagezip install
@@ -40,26 +37,15 @@ client:
 ifeq ($(SYSTEM),FreeBSD)
 	$(MAKE) -C growdisk client
 endif
-	$(MAKE) -C syncd client
-	$(MAKE) -C dijkstra client
-	$(MAKE) -C genhostsfile client
 	$(MAKE) -C frisbee.redux client
 
 client-install: client
-	-mkdir -p $(LBINDIR)
-	$(INSTALL_PROGRAM) $(SRCDIR)/install-tarfile $(LBINDIR)/install-tarfile
-	-mkdir -p $(DESTDIR)$(CLIENT_MANDIR)/man1
-	$(INSTALL) -m 644 $(SRCDIR)/install-tarfile.1 $(DESTDIR)$(CLIENT_MANDIR)/man1/install-tarfile.1
-	$(INSTALL_PROGRAM) $(SRCDIR)/install-rpm $(LBINDIR)/install-rpm
 	$(INSTALL_PROGRAM) $(SRCDIR)/template_record $(LBINDIR)/template_record
 ifeq ($(SYSTEM),FreeBSD)
 	$(INSTALL_PROGRAM) $(SRCDIR)/create-image $(LBINDIR)/
 	$(INSTALL_PROGRAM) $(SRCDIR)/create-swapimage $(LBINDIR)/
 	$(MAKE) -C growdisk client-install
 endif
-	$(MAKE) -C syncd client-install
-	$(MAKE) -C dijkstra client-install
-	$(MAKE) -C genhostsfile client-install
 	$(MAKE) -C frisbee.redux client-install
 
 subboss: client
@@ -100,9 +86,6 @@ cdboot-install: mfs-install frisbee-mfs
 	$(MAKE) -e -C growdisk client-install
 
 remote-install: 
-	-mkdir -p $(LBINDIR)
-	$(INSTALL_PROGRAM) $(SRCDIR)/install-tarfile $(LBINDIR)/install-tarfile
-	$(INSTALL_PROGRAM) $(SRCDIR)/install-rpm $(LBINDIR)/install-rpm
 
 clean:		clean-subdirs
 distclean:	subdir-distclean