diff --git a/package/Makefile.in b/package/Makefile.in
index f8557f7007..531f8de1fd 100644
--- a/package/Makefile.in
+++ b/package/Makefile.in
@@ -111,3 +111,16 @@ ifeq ($(BR2_INSTALL_LIBSTDCPP),)
 TARGET_CONFIGURE_OPTS+=CXX=""
 endif
 
+# X Windowing system
+
+XSERVER:=
+ifeq ($(strip $(BR2_PACKAGE_TINYX)),y)
+XSERVER+=tinyx
+endif
+ifeq ($(strip $(BR2_PACKAGE_XORG)),y)
+XSERVER+=xorg
+endif
+ifeq ($(strip $(BR2_PACKAGE_XGGI)),y)
+XSERVER+=xggi
+endif
+
diff --git a/package/cairo/cairo.mk b/package/cairo/cairo.mk
index 523c51acbe..47b06ec55f 100644
--- a/package/cairo/cairo.mk
+++ b/package/cairo/cairo.mk
@@ -134,7 +134,7 @@ $(TARGET_DIR)/lib/libcairo.so.2.9.3: $(STAGING_DIR)/lib/$(CAIRO_BINARY)
 	$(STRIP) --strip-unneeded $(TARGET_DIR)/lib/libcairo.so.2.*
 	touch -c $(TARGET_DIR)/lib/libcairo.so.2.9.3
 
-cairo: uclibc gettext libintl pkgconfig libglib2 xorg $(TARGET_DIR)/lib/libcairo.so.2.9.3
+cairo: uclibc gettext libintl pkgconfig libglib2 $(XSERVER) $(TARGET_DIR)/lib/libcairo.so.2.9.3
 
 cairo-clean:
 	rm -f $(TARGET_DIR)/lib/$(CAIRO_BINARY)
diff --git a/package/dillo/dillo.mk b/package/dillo/dillo.mk
index 9ee724c09e..3b70bb1a92 100644
--- a/package/dillo/dillo.mk
+++ b/package/dillo/dillo.mk
@@ -38,7 +38,7 @@ $(DILLO_DIR)/.installed: $(DILLO_DIR)/src/dillo
 	$(MAKE) -C $(DILLO_DIR) DESTDIR=$(TARGET_DIR) install
 	touch $(DILLO_DIR)/.installed
 
-dillo:	uclibc xorg libglib12 libgtk12 jpeg libpng $(DILLO_DIR)/.installed
+dillo:	uclibc $(XSERVER) libglib12 libgtk12 jpeg libpng $(DILLO_DIR)/.installed
 
 dillo-source: $(DL_DIR)/$(DILLO_SOURCE)
 
diff --git a/package/libgtk12/libgtk12.mk b/package/libgtk12/libgtk12.mk
index a96971a8d3..28e9f62369 100644
--- a/package/libgtk12/libgtk12.mk
+++ b/package/libgtk12/libgtk12.mk
@@ -85,7 +85,7 @@ $(TARGET_DIR)/lib/libgtk-1.2.so.0.9.1: $(STAGING_DIR)/lib/$(LIBGTK12_BINARY)
 	$(STRIP) --strip-unneeded $(TARGET_DIR)/lib/libgdk-1.2.so.0.9.1
 	touch -c $(TARGET_DIR)/lib/libgtk-1.2.so.0.9.1
 
-libgtk12: uclibc libglib12 xorg $(TARGET_DIR)/lib/libgtk-1.2.so.0.9.1
+libgtk12: uclibc libglib12 $(XSERVER) $(TARGET_DIR)/lib/libgtk-1.2.so.0.9.1
 
 libgtk12-clean:
 	rm -f $(TARGET_DIR)/lib/libgtk* $(TARGET_DIR)/lib/libgdk*
diff --git a/package/libgtk2/libgtk2.mk b/package/libgtk2/libgtk2.mk
index 0c5f4813f5..9cc9f77b31 100644
--- a/package/libgtk2/libgtk2.mk
+++ b/package/libgtk2/libgtk2.mk
@@ -150,7 +150,7 @@ $(TARGET_DIR)/lib/libgtk-x11-2.0.so.0: $(STAGING_DIR)/lib/$(LIBGTK2_BINARY)
 	cp package/libgtk2/gtk.immodules $(TARGET_DIR)/etc/gtk-2.0
 	touch -c $(TARGET_DIR)/lib/libgtk-x11-2.0.so.0
 
-libgtk2: uclibc png jpeg tiff xorg libglib2 \
+libgtk2: uclibc png jpeg tiff $(XSERVER) libglib2 \
 	cairo pango atk $(TARGET_DIR)/lib/libgtk-x11-2.0.so.0
 
 libgtk2-clean:
diff --git a/package/metacity/metacity.mk b/package/metacity/metacity.mk
index e618873a33..123605cc00 100644
--- a/package/metacity/metacity.mk
+++ b/package/metacity/metacity.mk
@@ -138,7 +138,7 @@ $(TARGET_DIR)/lib/*metacity*.so: $(STAGING_DIR)/lib/*metacity*.so
 	(cd $(TARGET_DIR)/usr/share/themes; rm -rf Atlanta; ln -s Clearlooks Atlanta)
 	cp -a package/metacity/Xsession $(TARGET_DIR)/etc/X11/
 
-metacity: uclibc zlib xorg libgtk2 $(TARGET_DIR)/lib/*metacity*.so
+metacity: uclibc zlib $(XSERVER) libgtk2 $(TARGET_DIR)/lib/*metacity*.so
 
 metacity-clean:
 	-$(MAKE) -C $(METACITY_DIR) clean
diff --git a/package/pango/pango.mk b/package/pango/pango.mk
index df308e4d68..26ae3e89fa 100644
--- a/package/pango/pango.mk
+++ b/package/pango/pango.mk
@@ -154,7 +154,7 @@ $(TARGET_DIR)/lib/libpango-1.0.so.0: $(STAGING_DIR)/lib/$(PANGO_BINARY)
 	cp package/pango/pangox.aliases $(TARGET_DIR)/etc/pango/
 	touch -c $(TARGET_DIR)/lib/libpango-1.0.so.0
 
-pango: uclibc gettext libintl pkgconfig libglib2 xorg cairo \
+pango: uclibc gettext libintl pkgconfig libglib2 $(XSERVER) cairo \
 	$(TARGET_DIR)/lib/libpango-1.0.so.0
 
 pango-clean:
diff --git a/package/rdesktop/rdesktop.mk b/package/rdesktop/rdesktop.mk
index cefa21f15d..20e8a7cc3c 100644
--- a/package/rdesktop/rdesktop.mk
+++ b/package/rdesktop/rdesktop.mk
@@ -38,7 +38,7 @@ $(RDESKTOP_DIR)/.installed: $(RDESKTOP_DIR)/rdesktop
 	cp $(RDESKTOP_DIR)/rdesktop $(TARGET_DIR)/usr/bin
 	touch $(RDESKTOP_DIR)/.installed
 
-rdesktop: uclibc xorg openssl $(RDESKTOP_DIR)/.installed
+rdesktop: uclibc openssl $(XSERVER) $(RDESKTOP_DIR)/.installed
 
 rdesktop-source: $(DL_DIR)/$(RDESKTOP_SOURCE)
 
diff --git a/package/rxvt/rxvt.mk b/package/rxvt/rxvt.mk
index 80b86b8438..9468ba4ebb 100644
--- a/package/rxvt/rxvt.mk
+++ b/package/rxvt/rxvt.mk
@@ -63,12 +63,7 @@ $(TARGET_DIR)/usr/X11R6/bin/rxvt: $(RXVT_BINARY)
 	cp -f $(RXVT_BINARY) $(TARGET_DIR)/usr/X11R6/bin
 	(cd $(TARGET_DIR)/usr/X11R6/bin; ln -fs rxvt xterm)
 
-ifeq ($(strip $(BR2_PACKAGE_TINYX)),y)
-rxvt: tinyx $(TARGET_DIR)/usr/X11R6/bin/rxvt
-endif
-ifeq ($(strip $(BR2_PACKAGE_XORG)),y)
-rxvt: xorg $(TARGET_DIR)/usr/X11R6/bin/rxvt
-endif
+rxvt: $(XSERVER) $(TARGET_DIR)/usr/X11R6/bin/rxvt
 
 rxvt-clean:
 	rm -f $(TARGET_DIR)/usr/X11R6/bin/rxvt
diff --git a/package/xorg/xorg.mk b/package/xorg/xorg.mk
index b0c4bc94ff..6dc3b04618 100644
--- a/package/xorg/xorg.mk
+++ b/package/xorg/xorg.mk
@@ -44,9 +44,9 @@ DEJAVU_SITE=http://$(BR2_SOURCEFORGE_MIRROR).dl.sourceforge.net/sourceforge/deja
 DEJAVU_DIR:=$(BUILD_DIR)/dejavu-ttf-$(DEJAVU_VERSION)
 
 # Install Xorg xserver
-XSERVER:=Xorg
-XORG_XSERVER:=$(XORG_DIR)/programs/Xserver/$(XSERVER)
-TARGET_XSERVER:=$(XORG_BINX)/$(XSERVER)
+XSERVER_BINARY:=Xorg
+XORG_XSERVER:=$(XORG_DIR)/programs/Xserver/$(XSERVER_BINARY)
+TARGET_XSERVER:=$(XORG_BINX)/$(XSERVER_BINARY)
 
 # figure out Xorg's idea of corresponding architecture name
 ifeq ($(BR2_alpha),y)
@@ -127,7 +127,7 @@ $(TARGET_XSERVER): $(XORG_XSERVER)
 		$(STRIP) $(XORG_PROGS)/$$file || /bin/true ; \
 	done
 	cp $(XORG_XSERVER) $(TARGET_XSERVER)
-	(cd $(XORG_BINX); ln -snf $(XSERVER) X)
+	(cd $(XORG_BINX); ln -snf $(XSERVER_BINARY) X)
 	$(STRIP) $(TARGET_XSERVER)
 	mkdir -p $(XORG_LIBX)/modules
 	cp -LRf $(XORG_DIR)/exports/lib/modules/ $(XORG_LIBX)/