diff --git a/src/api/Makefile.am b/src/api/Makefile.am
index 374b0b8197cc6a40d1ab8c97500dd802e1688a4c..41baf9761768e918c13d24a0081eb2b55fbfc45c 100644
--- a/src/api/Makefile.am
+++ b/src/api/Makefile.am
@@ -40,10 +40,14 @@ current = $(SLURM_API_CURRENT)
 age     = $(SLURM_API_AGE)
 rev     = $(SLURM_API_REVISION)
 
-lib_LTLIBRARIES = libslurm.la \
-	libpmi.la
+lib_LTLIBRARIES = libslurm.la libpmi.la
 
-libslurm_la_SOURCES =    \
+# Note that libslurmhelper is mostly the same as libslurm, except that
+# it exports ALL symbols, including those from libcommon, libeio, etc.
+# Also, libslurmhelper is a convenience library, it is not installed.
+noinst_LTLIBRARIES = libslurmhelper.la
+
+slurmapi_src =           \
 	allocate.c       \
 	cancel.c         \
 	checkpoint.c     \
@@ -67,6 +71,8 @@ libslurm_la_SOURCES =    \
 	reconfigure.c    \
 	update_config.c
 
+libslurm_la_SOURCES = $(slurmapi_src)
+libslurmhelper_la_SOURCES = $(slurmapi_src)
 libpmi_la_SOURCES = pmi.c
 
 BUILT_SOURCES = 	\
@@ -74,18 +80,25 @@ BUILT_SOURCES = 	\
 
 common_dir = $(top_builddir)/src/common
 
-libslurm_la_LIBADD	= 		\
+slurmapi_add = 				\
 	$(common_dir)/libcommon.la	\
 	$(common_dir)/libspank.la       \
 	$(common_dir)/libeio.la		\
 	-lpthread
 
+libslurm_la_LIBADD = $(slurmapi_add)
+libslurmhelper_la_LIBADD = $(slurmapi_add)
+
 libpmi_la_LIBADD	= libslurm.la 
 
 libslurm_la_LDFLAGS        = \
 	$(LIB_LDFLAGS)       \
 	-version-info $(current):$(rev):$(age) \
 	$(OTHER_FLAGS)
+libslurmhelper_la_LDFLAGs = \
+	$(LIB_LDFLAGS) \
+	-version-info $(current):$(rev):$(age)
+
 libpmi_la_LBFLAGS = $(LIB_LDFLAGS)
 
 force:
diff --git a/src/api/Makefile.in b/src/api/Makefile.in
index 9f1b76112d3df8bce6519f7627433c4158ab8e35..e0ac72d4e3c04ea9fd51583ad0c39e20cefb57cf 100644
--- a/src/api/Makefile.in
+++ b/src/api/Makefile.in
@@ -17,7 +17,7 @@
 #
 # Makefile for slurm API library
 
-SOURCES = $(libpmi_la_SOURCES) $(libslurm_la_SOURCES)
+SOURCES = $(libpmi_la_SOURCES) $(libslurm_la_SOURCES) $(libslurmhelper_la_SOURCES)
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
@@ -76,19 +76,24 @@ am__vpath_adj = case $$p in \
 am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
 am__installdirs = "$(DESTDIR)$(libdir)"
 libLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(lib_LTLIBRARIES)
+LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
 libpmi_la_DEPENDENCIES = libslurm.la
 am_libpmi_la_OBJECTS = pmi.lo
 libpmi_la_OBJECTS = $(am_libpmi_la_OBJECTS)
-libslurm_la_DEPENDENCIES = $(common_dir)/libcommon.la \
+am__DEPENDENCIES_1 = $(common_dir)/libcommon.la \
 	$(common_dir)/libspank.la $(common_dir)/libeio.la
-am_libslurm_la_OBJECTS = allocate.lo cancel.lo checkpoint.lo \
-	complete.lo config_info.lo init_msg.lo job_info.lo \
-	job_step_info.lo node_info.lo node_select_info.lo \
-	partition_info.lo signal.lo slurm_pmi.lo spawn.lo step_ctx.lo \
-	step_io.lo step_launch.lo step_pmi.lo submit.lo suspend.lo \
-	reconfigure.lo update_config.lo
+libslurm_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__objects_1 = allocate.lo cancel.lo checkpoint.lo complete.lo \
+	config_info.lo init_msg.lo job_info.lo job_step_info.lo \
+	node_info.lo node_select_info.lo partition_info.lo signal.lo \
+	slurm_pmi.lo spawn.lo step_ctx.lo step_io.lo step_launch.lo \
+	step_pmi.lo submit.lo suspend.lo reconfigure.lo \
+	update_config.lo
+am_libslurm_la_OBJECTS = $(am__objects_1)
 libslurm_la_OBJECTS = $(am_libslurm_la_OBJECTS)
+libslurmhelper_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_libslurmhelper_la_OBJECTS = $(am__objects_1)
+libslurmhelper_la_OBJECTS = $(am_libslurmhelper_la_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/slurm
 depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
 am__depfiles_maybe = depfiles
@@ -100,8 +105,10 @@ LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
 CCLD = $(CC)
 LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libpmi_la_SOURCES) $(libslurm_la_SOURCES)
-DIST_SOURCES = $(libpmi_la_SOURCES) $(libslurm_la_SOURCES)
+SOURCES = $(libpmi_la_SOURCES) $(libslurm_la_SOURCES) \
+	$(libslurmhelper_la_SOURCES)
+DIST_SOURCES = $(libpmi_la_SOURCES) $(libslurm_la_SOURCES) \
+	$(libslurmhelper_la_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -314,10 +321,13 @@ INCLUDES = -I$(top_srcdir)
 current = $(SLURM_API_CURRENT)
 age = $(SLURM_API_AGE)
 rev = $(SLURM_API_REVISION)
-lib_LTLIBRARIES = libslurm.la \
-	libpmi.la
+lib_LTLIBRARIES = libslurm.la libpmi.la
 
-libslurm_la_SOURCES = \
+# Note that libslurmhelper is mostly the same as libslurm, except that
+# it exports ALL symbols, including those from libcommon, libeio, etc.
+# Also, libslurmhelper is a convenience library, it is not installed.
+noinst_LTLIBRARIES = libslurmhelper.la
+slurmapi_src = \
 	allocate.c       \
 	cancel.c         \
 	checkpoint.c     \
@@ -341,23 +351,31 @@ libslurm_la_SOURCES = \
 	reconfigure.c    \
 	update_config.c
 
+libslurm_la_SOURCES = $(slurmapi_src)
+libslurmhelper_la_SOURCES = $(slurmapi_src)
 libpmi_la_SOURCES = pmi.c
 BUILT_SOURCES = \
 	$(VERSION_SCRIPT)
 
 common_dir = $(top_builddir)/src/common
-libslurm_la_LIBADD = \
+slurmapi_add = \
 	$(common_dir)/libcommon.la	\
 	$(common_dir)/libspank.la       \
 	$(common_dir)/libeio.la		\
 	-lpthread
 
+libslurm_la_LIBADD = $(slurmapi_add)
+libslurmhelper_la_LIBADD = $(slurmapi_add)
 libpmi_la_LIBADD = libslurm.la 
 libslurm_la_LDFLAGS = \
 	$(LIB_LDFLAGS)       \
 	-version-info $(current):$(rev):$(age) \
 	$(OTHER_FLAGS)
 
+libslurmhelper_la_LDFLAGs = \
+	$(LIB_LDFLAGS) \
+	-version-info $(current):$(rev):$(age)
+
 libpmi_la_LBFLAGS = $(LIB_LDFLAGS)
 CLEANFILES = \
 	$(VERSION_SCRIPT)
@@ -426,10 +444,21 @@ clean-libLTLIBRARIES:
 	  echo "rm -f \"$${dir}/so_locations\""; \
 	  rm -f "$${dir}/so_locations"; \
 	done
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
 libpmi.la: $(libpmi_la_OBJECTS) $(libpmi_la_DEPENDENCIES) 
 	$(LINK) -rpath $(libdir) $(libpmi_la_LDFLAGS) $(libpmi_la_OBJECTS) $(libpmi_la_LIBADD) $(LIBS)
 libslurm.la: $(libslurm_la_OBJECTS) $(libslurm_la_DEPENDENCIES) 
 	$(LINK) -rpath $(libdir) $(libslurm_la_LDFLAGS) $(libslurm_la_OBJECTS) $(libslurm_la_LIBADD) $(LIBS)
+libslurmhelper.la: $(libslurmhelper_la_OBJECTS) $(libslurmhelper_la_DEPENDENCIES) 
+	$(LINK)  $(libslurmhelper_la_LDFLAGS) $(libslurmhelper_la_OBJECTS) $(libslurmhelper_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -606,7 +635,7 @@ maintainer-clean-generic:
 clean: clean-am
 
 clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
-	mostlyclean-am
+	clean-noinstLTLIBRARIES mostlyclean-am
 
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
@@ -655,17 +684,17 @@ ps-am:
 uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libLTLIBRARIES clean-libtool ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-exec \
-	install-exec-am install-info install-info-am \
-	install-libLTLIBRARIES install-man install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-info-am \
-	uninstall-libLTLIBRARIES
+	clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \
+	ctags distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-libLTLIBRARIES install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-info-am uninstall-libLTLIBRARIES
 
 
 force:
diff --git a/src/salloc/Makefile.am b/src/salloc/Makefile.am
index 023a2a2d579b840d0c122a71e1471011b242d95f..2b635d060a16f75a81609f9bb07512706ed65f9e 100644
--- a/src/salloc/Makefile.am
+++ b/src/salloc/Makefile.am
@@ -8,10 +8,7 @@ bin_PROGRAMS = salloc
 
 salloc_SOURCES = salloc.c opt.c opt.h msg.c msg.h
 
-convenience_libs = \
-	$(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/api/libslurm.la \
-	$(top_builddir)/src/common/libeio.la
+convenience_libs = $(top_builddir)/src/api/libslurmhelper.la
 
 salloc_LDADD = \
 	$(convenience_libs) 
diff --git a/src/salloc/Makefile.in b/src/salloc/Makefile.in
index af81fbcdfb9df5d02f1a234ee8b63d2b76ba1086..1c8f1df49adf96639f15c165f3e5a67bbc9d1e34 100644
--- a/src/salloc/Makefile.in
+++ b/src/salloc/Makefile.in
@@ -73,9 +73,7 @@ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
 am_salloc_OBJECTS = salloc.$(OBJEXT) opt.$(OBJEXT) msg.$(OBJEXT)
 salloc_OBJECTS = $(am_salloc_OBJECTS)
-am__DEPENDENCIES_1 = $(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/api/libslurm.la \
-	$(top_builddir)/src/common/libeio.la
+am__DEPENDENCIES_1 = $(top_builddir)/src/api/libslurmhelper.la
 salloc_DEPENDENCIES = $(am__DEPENDENCIES_1)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/slurm
 depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
@@ -269,11 +267,7 @@ target_vendor = @target_vendor@
 AUTOMAKE_OPTIONS = foreign
 INCLUDES = -I$(top_srcdir) 
 salloc_SOURCES = salloc.c opt.c opt.h msg.c msg.h
-convenience_libs = \
-	$(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/api/libslurm.la \
-	$(top_builddir)/src/common/libeio.la
-
+convenience_libs = $(top_builddir)/src/api/libslurmhelper.la
 salloc_LDADD = \
 	$(convenience_libs) 
 
diff --git a/src/sattach/Makefile.am b/src/sattach/Makefile.am
index 236d57f1d8f7b68bceb891a1f0a1e0b2c51f302a..f48897ae7ff363c566772b9d08fb0334f09d82bd 100644
--- a/src/sattach/Makefile.am
+++ b/src/sattach/Makefile.am
@@ -8,9 +8,7 @@ bin_PROGRAMS = sattach
 
 sattach_SOURCES = sattach.c opt.h opt.c
 
-convenience_libs = \
-	$(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/api/libslurm.la
+convenience_libs = $(top_builddir)/src/api/libslurmhelper.la
 
 sattach_LDADD = \
 	$(convenience_libs) 
diff --git a/src/sattach/Makefile.in b/src/sattach/Makefile.in
index eef93ada1894718a55d2db02b0e47d01d6d51284..5a82d3e9a5fb8f0a9504bbf133580359792b0332 100644
--- a/src/sattach/Makefile.in
+++ b/src/sattach/Makefile.in
@@ -73,8 +73,7 @@ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
 am_sattach_OBJECTS = sattach.$(OBJEXT) opt.$(OBJEXT)
 sattach_OBJECTS = $(am_sattach_OBJECTS)
-am__DEPENDENCIES_1 = $(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/api/libslurm.la
+am__DEPENDENCIES_1 = $(top_builddir)/src/api/libslurmhelper.la
 sattach_DEPENDENCIES = $(am__DEPENDENCIES_1)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/slurm
 depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
@@ -268,10 +267,7 @@ target_vendor = @target_vendor@
 AUTOMAKE_OPTIONS = foreign
 INCLUDES = -I$(top_srcdir) 
 sattach_SOURCES = sattach.c opt.h opt.c
-convenience_libs = \
-	$(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/api/libslurm.la
-
+convenience_libs = $(top_builddir)/src/api/libslurmhelper.la
 sattach_LDADD = \
 	$(convenience_libs) 
 
diff --git a/src/sbatch/Makefile.am b/src/sbatch/Makefile.am
index 02695ecc0453e1f51833c0f2a8fc7940f1384ff1..de93daff02fc4f3a53042c4d3a410a857a4455d6 100644
--- a/src/sbatch/Makefile.am
+++ b/src/sbatch/Makefile.am
@@ -8,9 +8,7 @@ bin_PROGRAMS = sbatch
 
 sbatch_SOURCES = sbatch.c opt.c opt.h
 
-convenience_libs = \
-	$(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/api/libslurm.la
+convenience_libs = $(top_builddir)/src/api/libslurmhelper.la
 
 sbatch_LDADD = \
 	$(convenience_libs) 
diff --git a/src/sbatch/Makefile.in b/src/sbatch/Makefile.in
index cb21706e9ff04920717b51353b15eee371eddd48..fe2b2c18b06106c7296bba2410df55c84fd515ec 100644
--- a/src/sbatch/Makefile.in
+++ b/src/sbatch/Makefile.in
@@ -73,8 +73,7 @@ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
 am_sbatch_OBJECTS = sbatch.$(OBJEXT) opt.$(OBJEXT)
 sbatch_OBJECTS = $(am_sbatch_OBJECTS)
-am__DEPENDENCIES_1 = $(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/api/libslurm.la
+am__DEPENDENCIES_1 = $(top_builddir)/src/api/libslurmhelper.la
 sbatch_DEPENDENCIES = $(am__DEPENDENCIES_1)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/slurm
 depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
@@ -268,10 +267,7 @@ target_vendor = @target_vendor@
 AUTOMAKE_OPTIONS = foreign
 INCLUDES = -I$(top_srcdir) 
 sbatch_SOURCES = sbatch.c opt.c opt.h
-convenience_libs = \
-	$(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/api/libslurm.la
-
+convenience_libs = $(top_builddir)/src/api/libslurmhelper.la
 sbatch_LDADD = \
 	$(convenience_libs) 
 
diff --git a/src/slaunch/Makefile.am b/src/slaunch/Makefile.am
index a70ad07df34e609ec5ea8d064373e2707c34bdc4..b44637681c2eaaaec94e13a2836c79eb78394919 100644
--- a/src/slaunch/Makefile.am
+++ b/src/slaunch/Makefile.am
@@ -20,11 +20,7 @@ slaunch_SOURCES = \
 	multi_prog.c multi_prog.h \
 	slaunch.wrapper.c
 
-convenience_libs = \
-	$(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/common/libspank.la \
-	$(top_builddir)/src/common/libeio.la \
-	$(top_builddir)/src/api/libslurm.la
+convenience_libs = $(top_builddir)/src/api/libslurmhelper.la
 
 slaunch_LDADD = \
 	$(convenience_libs) 
diff --git a/src/slaunch/Makefile.in b/src/slaunch/Makefile.in
index 5ab00747ef9ff923909c9108ec60809e3b09bac1..9eac82c7d467cd9b1f58b22b2da5355b54d70e80 100644
--- a/src/slaunch/Makefile.in
+++ b/src/slaunch/Makefile.in
@@ -75,10 +75,7 @@ am_slaunch_OBJECTS = slaunch.$(OBJEXT) opt.$(OBJEXT) attach.$(OBJEXT) \
 	fname.$(OBJEXT) sigstr.$(OBJEXT) core-format.$(OBJEXT) \
 	multi_prog.$(OBJEXT) slaunch.wrapper.$(OBJEXT)
 slaunch_OBJECTS = $(am_slaunch_OBJECTS)
-am__DEPENDENCIES_1 = $(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/common/libspank.la \
-	$(top_builddir)/src/common/libeio.la \
-	$(top_builddir)/src/api/libslurm.la
+am__DEPENDENCIES_1 = $(top_builddir)/src/api/libslurmhelper.la
 slaunch_DEPENDENCIES = $(am__DEPENDENCIES_1)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/slurm
 depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
@@ -285,12 +282,7 @@ slaunch_SOURCES = \
 	multi_prog.c multi_prog.h \
 	slaunch.wrapper.c
 
-convenience_libs = \
-	$(top_builddir)/src/common/libcommon.la \
-	$(top_builddir)/src/common/libspank.la \
-	$(top_builddir)/src/common/libeio.la \
-	$(top_builddir)/src/api/libslurm.la
-
+convenience_libs = $(top_builddir)/src/api/libslurmhelper.la
 slaunch_LDADD = \
 	$(convenience_libs)