--- iptables/Makefile.am
+++ iptables/Makefile.am
@@ -14,7 +14,7 @@
 libxtables_la_LIBADD  =
 endif
 
-xtables_multi_SOURCES  = xtables-multi.c iptables-xml.c
+xtables_multi_SOURCES  = xtables-multi.c
 xtables_multi_CFLAGS   = ${AM_CFLAGS} -DIPTABLES_MULTI
 xtables_multi_LDFLAGS  = -rdynamic
 xtables_multi_LDADD    = ../extensions/libext.a
@@ -22,32 +22,53 @@
 xtables_multi_CFLAGS  += -DALL_INCLUSIVE
 endif
 if ENABLE_IPV4
-xtables_multi_SOURCES += iptables-save.c iptables-restore.c \
-                         iptables-standalone.c iptables.c
+xtables_multi_SOURCES += iptables-standalone.c iptables.c
 xtables_multi_CFLAGS  += -DENABLE_IPV4
 xtables_multi_LDADD   += ../libiptc/libip4tc.la ../extensions/libext4.a
 endif
 if ENABLE_IPV6
-xtables_multi_SOURCES += ip6tables-save.c ip6tables-restore.c \
-                          ip6tables-standalone.c ip6tables.c
+xtables_multi_SOURCES += ip6tables-standalone.c ip6tables.c
 xtables_multi_CFLAGS  += -DENABLE_IPV6
 xtables_multi_LDADD   += ../libiptc/libip6tc.la ../extensions/libext6.a
 endif
 xtables_multi_SOURCES += xshared.c
 xtables_multi_LDADD   += libxtables.la -lm
 
+if ENABLE_XML
+xtables_multi_CFLAGS  += -DENABLE_XML
+xtables_multi_SOURCES += iptables-xml.c
+endif
+
+if ENABLE_SAVE_RESTORE
+xtables_multi_CFLAGS  += -DENABLE_SAVE_RESTORE
+if ENABLE_IPV4
+xtables_multi_SOURCES += iptables-save.c iptables-restore.c
+endif
+if ENABLE_IPV6
+xtables_multi_SOURCES += ip6tables-save.c ip6tables-restore.c
+endif
+endif
+
 sbin_PROGRAMS    = xtables-multi
 man_MANS         = iptables.8 iptables-restore.8 iptables-save.8 \
                    iptables-xml.1 ip6tables.8 ip6tables-restore.8 \
                    ip6tables-save.8
 CLEANFILES       = iptables.8 ip6tables.8
 
+if ENABLE_XML
 vx_bin_links   = iptables-xml
+endif
 if ENABLE_IPV4
-v4_sbin_links  = iptables iptables-restore iptables-save
+v4_sbin_links  = iptables
+if ENABLE_SAVE_RESTORE
+v4_sbin_links +=  iptables-restore iptables-save
+endif
 endif
 if ENABLE_IPV6
-v6_sbin_links  = ip6tables ip6tables-restore ip6tables-save
+v6_sbin_links  = ip6tables
+if ENABLE_SAVE_RESTORE
+v6_sbin_links  += ip6tables-restore ip6tables-save
+endif
 endif
 
 iptables.8: ${srcdir}/iptables.8.in ../extensions/matches4.man ../extensions/targets4.man
--- iptables/Makefile.in
+++ iptables/Makefile.in
@@ -38,17 +38,20 @@
 build_triplet = @build@
 host_triplet = @host@
 @ENABLE_STATIC_TRUE@am__append_1 = -DALL_INCLUSIVE
-@ENABLE_IPV4_TRUE@am__append_2 = iptables-save.c iptables-restore.c \
-@ENABLE_IPV4_TRUE@                         iptables-standalone.c iptables.c
-
+@ENABLE_IPV4_TRUE@am__append_2 = iptables-standalone.c iptables.c
 @ENABLE_IPV4_TRUE@am__append_3 = -DENABLE_IPV4
 @ENABLE_IPV4_TRUE@am__append_4 = ../libiptc/libip4tc.la ../extensions/libext4.a
-@ENABLE_IPV6_TRUE@am__append_5 = ip6tables-save.c ip6tables-restore.c \
-@ENABLE_IPV6_TRUE@                          ip6tables-standalone.c ip6tables.c
-
+@ENABLE_IPV6_TRUE@am__append_5 = ip6tables-standalone.c ip6tables.c
 @ENABLE_IPV6_TRUE@am__append_6 = -DENABLE_IPV6
 @ENABLE_IPV6_TRUE@am__append_7 = ../libiptc/libip6tc.la ../extensions/libext6.a
+@ENABLE_XML_TRUE@am__append_8 = -DENABLE_XML
+@ENABLE_XML_TRUE@am__append_9 = iptables-xml.c
+@ENABLE_SAVE_RESTORE_TRUE@am__append_10 = -DENABLE_SAVE_RESTORE
+@ENABLE_IPV4_TRUE@@ENABLE_SAVE_RESTORE_TRUE@am__append_11 = iptables-save.c iptables-restore.c
+@ENABLE_IPV6_TRUE@@ENABLE_SAVE_RESTORE_TRUE@am__append_12 = ip6tables-save.c ip6tables-restore.c
 sbin_PROGRAMS = xtables-multi$(EXEEXT)
+@ENABLE_IPV4_TRUE@@ENABLE_SAVE_RESTORE_TRUE@am__append_13 = iptables-restore iptables-save
+@ENABLE_IPV6_TRUE@@ENABLE_SAVE_RESTORE_TRUE@am__append_14 = ip6tables-restore ip6tables-save
 subdir = iptables
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 	$(srcdir)/xtables.pc.in
@@ -101,18 +104,19 @@
 	iptables.c ip6tables-save.c ip6tables-restore.c \
 	ip6tables-standalone.c ip6tables.c xshared.c
 @ENABLE_IPV4_TRUE@am__objects_1 =  \
-@ENABLE_IPV4_TRUE@	xtables_multi-iptables-save.$(OBJEXT) \
-@ENABLE_IPV4_TRUE@	xtables_multi-iptables-restore.$(OBJEXT) \
 @ENABLE_IPV4_TRUE@	xtables_multi-iptables-standalone.$(OBJEXT) \
 @ENABLE_IPV4_TRUE@	xtables_multi-iptables.$(OBJEXT)
-@ENABLE_IPV6_TRUE@am__objects_2 =  \
-@ENABLE_IPV6_TRUE@	xtables_multi-ip6tables-save.$(OBJEXT) \
-@ENABLE_IPV6_TRUE@	xtables_multi-ip6tables-restore.$(OBJEXT) \
-@ENABLE_IPV6_TRUE@	xtables_multi-ip6tables-standalone.$(OBJEXT) \
+@ENABLE_IPV6_TRUE@am__objects_2 = xtables_multi-ip6tables-standalone.$(OBJEXT) \
 @ENABLE_IPV6_TRUE@	xtables_multi-ip6tables.$(OBJEXT)
+@ENABLE_XML_TRUE@am__objects_3 = xtables_multi-iptables-xml.$(OBJEXT)
+@ENABLE_IPV4_TRUE@@ENABLE_SAVE_RESTORE_TRUE@am__objects_4 = xtables_multi-iptables-save.$(OBJEXT) \
+@ENABLE_IPV4_TRUE@@ENABLE_SAVE_RESTORE_TRUE@	xtables_multi-iptables-restore.$(OBJEXT)
+@ENABLE_IPV6_TRUE@@ENABLE_SAVE_RESTORE_TRUE@am__objects_5 = xtables_multi-ip6tables-save.$(OBJEXT) \
+@ENABLE_IPV6_TRUE@@ENABLE_SAVE_RESTORE_TRUE@	xtables_multi-ip6tables-restore.$(OBJEXT)
 am_xtables_multi_OBJECTS = xtables_multi-xtables-multi.$(OBJEXT) \
-	xtables_multi-iptables-xml.$(OBJEXT) $(am__objects_1) \
-	$(am__objects_2) xtables_multi-xshared.$(OBJEXT)
+	$(am__objects_1) $(am__objects_2) \
+	xtables_multi-xshared.$(OBJEXT) $(am__objects_3) \
+	$(am__objects_4) $(am__objects_5)
 xtables_multi_OBJECTS = $(am_xtables_multi_OBJECTS)
 xtables_multi_DEPENDENCIES = ../extensions/libext.a $(am__append_4) \
 	$(am__append_7) libxtables.la
@@ -281,10 +285,12 @@
 @ENABLE_SHARED_TRUE@libxtables_la_CFLAGS = ${AM_CFLAGS}
 @ENABLE_SHARED_FALSE@libxtables_la_LIBADD = 
 @ENABLE_SHARED_TRUE@libxtables_la_LIBADD = -ldl
-xtables_multi_SOURCES = xtables-multi.c iptables-xml.c $(am__append_2) \
-	$(am__append_5) xshared.c
+xtables_multi_SOURCES = xtables-multi.c $(am__append_2) \
+	$(am__append_5) xshared.c $(am__append_9) $(am__append_11) \
+	$(am__append_12)
 xtables_multi_CFLAGS = ${AM_CFLAGS} -DIPTABLES_MULTI $(am__append_1) \
-	$(am__append_3) $(am__append_6)
+	$(am__append_3) $(am__append_6) $(am__append_8) \
+	$(am__append_10)
 xtables_multi_LDFLAGS = -rdynamic
 xtables_multi_LDADD = ../extensions/libext.a $(am__append_4) \
 	$(am__append_7) libxtables.la -lm
@@ -293,9 +299,9 @@
                    ip6tables-save.8
 
 CLEANFILES = iptables.8 ip6tables.8
-vx_bin_links = iptables-xml
-@ENABLE_IPV4_TRUE@v4_sbin_links = iptables iptables-restore iptables-save
-@ENABLE_IPV6_TRUE@v6_sbin_links = ip6tables ip6tables-restore ip6tables-save
+@ENABLE_XML_TRUE@vx_bin_links = iptables-xml
+@ENABLE_IPV4_TRUE@v4_sbin_links = iptables $(am__append_13)
+@ENABLE_IPV6_TRUE@v6_sbin_links = ip6tables $(am__append_14)
 pkgconfig_DATA = xtables.pc
 all: all-am
 
--- iptables/xtables-multi.c
+++ iptables/xtables-multi.c
@@ -3,7 +3,9 @@
 #include <string.h>
 #include "xshared.h"
 
+#ifdef ENABLE_XML
 #include "xtables-multi.h"
+#endif
 
 #ifdef ENABLE_IPV4
 #include "iptables-multi.h"
@@ -17,21 +19,27 @@
 #ifdef ENABLE_IPV4
 	{"iptables",            iptables_main},
 	{"main4",               iptables_main},
+#ifdef ENABLE_SAVE_RESTORE
 	{"iptables-save",       iptables_save_main},
 	{"save4",               iptables_save_main},
 	{"iptables-restore",    iptables_restore_main},
 	{"restore4",            iptables_restore_main},
 #endif
+#endif
+#ifdef ENABLE_XML
 	{"iptables-xml",        iptables_xml_main},
 	{"xml",                 iptables_xml_main},
+#endif
 #ifdef ENABLE_IPV6
 	{"ip6tables",           ip6tables_main},
 	{"main6",               ip6tables_main},
+#ifdef ENABLE_SAVE_RESTORE
 	{"ip6tables-save",      ip6tables_save_main},
 	{"save6",               ip6tables_save_main},
 	{"ip6tables-restore",   ip6tables_restore_main},
 	{"restore6",            ip6tables_restore_main},
 #endif
+#endif
 	{NULL},
 };
 
--- configure.ac
+++ configure.ac
@@ -48,6 +48,10 @@
 	[enable_devel="$enableval"], [enable_devel="yes"])
 AC_ARG_ENABLE([libipq],
 	AS_HELP_STRING([--enable-libipq], [Build and install libipq]))
+AC_ARG_ENABLE([xml],
+	AS_HELP_STRING([--enable-xml], [Build with xml support]))
+AC_ARG_ENABLE([save-restore],
+	AS_HELP_STRING([--enable-save-restore], [Build with save/restore support]))
 AC_ARG_WITH([pkgconfigdir], AS_HELP_STRING([--with-pkgconfigdir=PATH],
 	[Path to the pkgconfig directory [[LIBDIR/pkgconfig]]]),
 	[pkgconfigdir="$withval"], [pkgconfigdir='${libdir}/pkgconfig'])
@@ -78,6 +82,8 @@
 AM_CONDITIONAL([ENABLE_LARGEFILE], [test "$enable_largefile" = "yes"])
 AM_CONDITIONAL([ENABLE_DEVEL], [test "$enable_devel" = "yes"])
 AM_CONDITIONAL([ENABLE_LIBIPQ], [test "$enable_libipq" = "yes"])
+AM_CONDITIONAL([ENABLE_XML], [test "$enable_xml" = "yes"])
+AM_CONDITIONAL([ENABLE_SAVE_RESTORE], [test "$enable_save_restore" = "yes"])
 
 PKG_CHECK_MODULES([libnfnetlink], [libnfnetlink >= 1.0],
 	[nfnetlink=1], [nfnetlink=0])
--- configure
+++ configure
@@ -775,6 +775,10 @@
 ENABLE_SHARED_TRUE
 ENABLE_STATIC_FALSE
 ENABLE_STATIC_TRUE
+ENABLE_XML_FALSE
+ENABLE_XML_TRUE
+ENABLE_SAVE_RESTORE_FALSE
+ENABLE_SAVE_RESTORE_TRUE
 blacklist_modules
 libiptc_LDFLAGS2
 CPP
@@ -901,6 +905,8 @@
 enable_largefile
 enable_devel
 enable_libipq
+enable_xml
+enable_save_restore
 with_pkgconfigdir
 '
       ac_precious_vars='build_alias
@@ -10681,6 +10687,19 @@
   pkgconfigdir='${libdir}/pkgconfig'
 fi
 
+# Check whether --enable-xml was given.
+if test "${enable_xml+set}" = set; then :
+  enableval=$enable_xml; enable_xml="$enableval"
+else
+  enable_xml="yes"
+fi
+
+# Check whether --enable-save-restore was given.
+if test "${enable_save_restore+set}" = set; then :
+  enableval=$enable_save_restore; enable_ipv4="$enableval"
+else
+  enable_save_restore="yes"
+fi
 
 libiptc_LDFLAGS2="";
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -Wl,--no-as-needed" >&5
@@ -10803,6 +10822,22 @@
   ENABLE_LIBIPQ_FALSE=
 fi
 
+ if test "$enable_xml" = "yes"; then
+  ENABLE_XML_TRUE=
+  ENABLE_XML_FALSE='#'
+else
+  ENABLE_XML_TRUE='#'
+  ENABLE_XML_FALSE=
+fi
+
+ if test "$enable_save_restore" = "yes"; then
+  ENABLE_SAVE_RESTORE_TRUE=
+  ENABLE_SAVE_RESTORE_FALSE='#'
+else
+  ENABLE_SAVE_RESTORE_TRUE='#'
+  ENABLE_SAVE_RESTORE_FALSE=
+fi
+
 
 
 
