diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index 2c912a3f36bda167922aaab44318b5a0516fd052..fa75335cd20bdbeff77ff129d922e640d9c16035 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -6,15 +6,14 @@ AUTOMAKE_OPTIONS = foreign
 INCLUDES     = -I$(top_srcdir) $(SSL_CPPFLAGS) 
 
 if WITH_ELAN
-elan_sources = qsw.c qsw.h
+elan_sources = qsw.c qsw.h elanhosts.c elanhosts.h
 else
 elan_sources = 
 endif
 
-noinst_LTLIBRARIES = 	\
-	libcommon.la 	\
-	libdaemonize.la \
-	libhostlist.la	\
+noinst_LTLIBRARIES = 			\
+	libcommon.la 			\
+	libdaemonize.la 		\
 	libeio.la  	
 
 
@@ -56,24 +55,21 @@ libcommon_la_SOURCES = 			\
 	slurm_jobcomp.c slurm_jobcomp.h	\
 	arg_desc.c arg_desc.h		\
 	macros.h			\
+	hostlist.c hostlist.h		\
 	$(elan_sources) 
 
-libdaemonize_la_SOURCES =  \
-	daemonize.c        \
-	daemonize.h        \
+libdaemonize_la_SOURCES =  		\
+	daemonize.c       	 	\
+	daemonize.h        		\
 	fd.c fd.h
 
-
-libhostlist_la_SOURCES   = \
-	hostlist.c hostlist.h
-
-libeio_la_SOURCES = 	   \
-	eio.c eio.h	   \
+libeio_la_SOURCES = 	   		\
+	eio.c eio.h	   		\
 	io_hdr.c io_hdr.h
 
-
-EXTRA_libcommon_la_SOURCES = \
-	qsw.c qsw.h
+EXTRA_libcommon_la_SOURCES =    	\
+	qsw.c qsw.h          		\
+	elanhosts.c elanhosts.h
 
 libcommon_la_LIBADD   = $(SSL_LIBS) $(ELAN_LIBS) -ldl
 libcommon_la_LDFLAGS  = $(SSL_LDFLAGS)	
diff --git a/src/common/qsw.c b/src/common/qsw.c
index f0e6febb3320df9d081811b46d74d207c5459817..e942834f5318e78f33e645fceaabd579446b6fd3 100644
--- a/src/common/qsw.c
+++ b/src/common/qsw.c
@@ -47,6 +47,7 @@
 #include <limits.h>	/* INT_MAX */
 #include <stdio.h>
 
+
 #if HAVE_LIBELANCTRL
 # include <elan/elanctrl.h>
 # include <elan/capability.h>
@@ -81,6 +82,9 @@
 
 #include <slurm/slurm_errno.h>
 
+#include "src/common/elanhosts.h"
+#include "src/common/xassert.h"
+#include "src/common/strlcpy.h"
 #include "src/common/bitstring.h"
 #include "src/common/log.h"
 #include "src/common/pack.h"
@@ -149,6 +153,7 @@ struct qsw_jobinfo {
  */
 static qsw_libstate_t qsw_internal_state = NULL;
 static pthread_mutex_t qsw_lock = PTHREAD_MUTEX_INITIALIZER;
+static elanhost_config_t elanconf = NULL;
 
 
 /*
@@ -821,6 +826,7 @@ qsw_setcap(qsw_jobinfo_t jobinfo, int procnum)
 	return 0;
 }
 
+
 /*
  * Return the local elan address (for rail 0) or -1 on failure.
  */
@@ -854,44 +860,64 @@ qsw_getnodeid(void)
 
 }
 
-/*
- * XXX - note qsw_getnodeid_byhost and qsw_gethost_bynodeid:
- * Eventually provide an autoconf option to look up mappings from a flat
- * file, or use the slurm.conf.  For now, assume that all QsNet systems
- * conform to RMS's hostname requirements.  They are:
- * 1) all hostnames with an elan adapter have a numerical suffix that 
- *    corresponds to the elanid.
- * 2) numerical suffixes never have leading zeros
- * 3) all hostnames without an elan adapter have a single character suffix.
- */
+static int 
+_read_elanhost_config (void)
+{
+	int rc;
+
+	if (!(elanconf = elanhost_config_create ()))
+		return (-1);
+
+	if ((rc = elanhost_config_read (elanconf, NULL)) < 0) {
+		error ("Unable to read Elan config: %s", 
+		       elanhost_config_err (elanconf));
+		elanhost_config_destroy (elanconf);
+		elanconf = NULL;
+		return (-1);
+	}
+
+	return (0);
+}
+
+int
+qsw_maxnodeid(void)
+{
+	int maxid = -1;
+
+	_lock_qsw();
+	if (!elanconf && (_read_elanhost_config() < 0))
+		goto done;
+
+	maxid = elanhost_config_maxid (elanconf);
+
+    done:
+	_unlock_qsw();
+	return maxid;
+}
 
 /*
  * Given a hostname, return the elanid or -1 on error.  
- * XXX - assumes RMS style hostnames (see above)
+ *  Initializes the elanconfig from the default /etc/elanhosts
+ *  config file.
  */
 int
 qsw_getnodeid_byhost(char *host)
 {
-	char *p, *q, tmp[8];
 	int id = -1;
 
-	/* position p over last character to scan */
-	if ((p = strchr(host, '.')))
-		p--;
-	else
-		p = host + strlen(host) - 1;
+	if (host == NULL)
+		return (-1);
+
+	_lock_qsw();
+	if (!elanconf && (_read_elanhost_config() < 0))
+		goto done;
 
-	/* copy numerical suffix to tmp */
-	tmp[sizeof(tmp) - 1] = '\0';
-	q = &tmp[sizeof(tmp) - 2];
-	while (q >= tmp && p >= host && isdigit(*p))
-		*q-- = *p--;
+	xassert (elanconf != NULL);
 
-	if (q < &tmp[sizeof(tmp) - 2])
-		id = atoi(q + 1);
+	id = elanhost_host2elanid (elanconf, host);
 
-	if (id == -1)
-		slurm_seterrno(EGETNODEID_BYHOST);
+    done:
+	_unlock_qsw();
 	return id;
 }
 
@@ -903,36 +929,25 @@ qsw_getnodeid_byhost(char *host)
 int
 qsw_gethost_bynodeid(char *buf, int len, int id)
 {
-	char name[MAXHOSTNAMELEN];
-	char *domainname;
-	char *p;
-	int res;
-
-	if (id == -1)
-		slurm_seterrno_ret(EGETHOST_BYNODEID);
-
-	/* use the local hostname to determine 'base' name */
-	if (gethostname(name, MAXHOSTNAMELEN) < 0)
-		return -1; /* sets errno */
-	if ((domainname = strchr(name, '.')))		
-		*domainname++ = '\0';		/* save domainname for later */
-
-	/* extract the 'base' name */
-	if (qsw_getnodeid_byhost(name) == -1)	/* no numerical suffix */
-		name[strlen(name) - 1] = '\0';	/*   assume one char suffix */
-	else {					/* numerical suffix */
-		p = name + strlen(name) - 1;
-		while (p >= name && isdigit(*p))
-			*p-- = '\0';
-	}
+	int rc = -1;
+	char *hostp;
 
-	/* construct the new name from the id and the 'base' name. */
-	if (domainname)
-		res = snprintf(buf, len, "%s%d.%s", name, id, domainname);
-	else
-		res = snprintf(buf, len, "%s%d", name, id);
+	if (id < 0) slurm_seterrno_ret(EGETHOST_BYNODEID);
+
+	_lock_qsw();
+	if (!elanconf && (_read_elanhost_config() < 0))
+		goto done;
 
-	return res;
+	if (!(hostp = elanhost_elanid2host (elanconf, ELANHOST_EIP, id))) {
+		slurm_seterrno (EGETHOST_BYNODEID);
+		goto done;
+	}
+	
+	rc = strlcpy (buf, hostp, len);
+
+    done:
+	_unlock_qsw();
+	return (rc);
 }
 
 /*
diff --git a/src/common/qsw.h b/src/common/qsw.h
index 8477473d2788860896af77306e9529ea750a44b6..21f722d583968fe9bbb1534cafc779cc546065d3 100644
--- a/src/common/qsw.h
+++ b/src/common/qsw.h
@@ -87,6 +87,9 @@ int 		qsw_setcap(qsw_jobinfo_t jobinfo, int procnum);
 int		qsw_prgsignal(qsw_jobinfo_t jobinfo, int signum); 
 		/* was qsw_signal_job */
 
+		/* return max ElanID in configuration */
+int             qsw_maxnodeid(void);
+
 int		qsw_getnodeid(void);
 int		qsw_getnodeid_byhost(char *host);
 int		qsw_gethost_bynodeid(char *host, int len, int elanid);
diff --git a/src/scontrol/Makefile.am b/src/scontrol/Makefile.am
index 61374c178bcef86f04a47dab6252de0aff40ae0d..858c07f1635e6a4169f3f1a363d480e22559639f 100644
--- a/src/scontrol/Makefile.am
+++ b/src/scontrol/Makefile.am
@@ -9,7 +9,6 @@ bin_PROGRAMS = scontrol
 
 LDADD = 					  \
 	$(top_builddir)/src/common/libcommon.la   \
-	$(top_builddir)/src/common/libhostlist.la \
 	$(top_builddir)/src/api/libslurm.la       \
 	$(READLINE_LIBS)
 
diff --git a/src/sinfo/Makefile.am b/src/sinfo/Makefile.am
index 9fc5557ec8476694d33e0b5877f46ae0eb1dde4c..963529ba6af11c437cb2f45399754386ac6ba0c9 100644
--- a/src/sinfo/Makefile.am
+++ b/src/sinfo/Makefile.am
@@ -9,7 +9,6 @@ bin_PROGRAMS = sinfo
 
 sinfo_LDADD =					  \
 	$(top_builddir)/src/common/libcommon.la   \
-	$(top_builddir)/src/common/libhostlist.la \
 	$(top_builddir)/src/api/libslurm.la
 
 noinst_HEADERS = sinfo.h print.h
diff --git a/src/slurmctld/Makefile.am b/src/slurmctld/Makefile.am
index 21f3906d06aae5e0594f54962a718e35d8aa3f82..cb3ae26ea8f26e14434c2d062913dc8bbc95cdab 100644
--- a/src/slurmctld/Makefile.am
+++ b/src/slurmctld/Makefile.am
@@ -11,7 +11,6 @@ sbin_PROGRAMS = slurmctld
 
 slurmctld_LDADD = 					\
 	$(top_builddir)/src/common/libcommon.la    	\
-	$(top_builddir)/src/common/libhostlist.la      	\
 	$(top_builddir)/src/common/libdaemonize.la 
 
 
diff --git a/src/slurmd/Makefile.am b/src/slurmd/Makefile.am
index e35b325ce0cbc5de5703f3f8b23a177363e2104c..6c0e827f352585061781a9f1e4b9b620fd580eaf 100644
--- a/src/slurmd/Makefile.am
+++ b/src/slurmd/Makefile.am
@@ -9,7 +9,7 @@ sbin_PROGRAMS = slurmd
 INCLUDES = -I$(top_srcdir) $(SSL_CPPFLAGS)
 
 if WITH_ELAN
-interconnect_sources = elan_interconnect.c elanhosts.c elanhosts.h
+interconnect_sources = elan_interconnect.c 
 else
 interconnect_sources = no_interconnect.c
 endif
@@ -17,7 +17,6 @@ endif
 slurmd_LDADD = 					   \
         $(top_builddir)/src/common/libcommon.la    \
 	$(top_builddir)/src/common/libdaemonize.la \
-	$(top_builddir)/src/common/libhostlist.la  \
 	$(top_builddir)/src/common/libeio.la       \
 	$(SSL_LIBS) 
 
@@ -46,8 +45,7 @@ slurmd_LDFLAGS = -export-dynamic
 
 EXTRA_slurmd_SOURCES = \
 	no_interconnect.c 	\
-	elan_interconnect.c	\
-	elanhosts.c elanhosts.h
+	elan_interconnect.c	
 
 force:
 $(slurmd_LDADD) : force
diff --git a/src/slurmd/elan_interconnect.c b/src/slurmd/elan_interconnect.c
index 9408a52b292795e3bb2753328b394341fed3e2e5..ecf503ef6754fee4c15cc4067343367e791f32d2 100644
--- a/src/slurmd/elan_interconnect.c
+++ b/src/slurmd/elan_interconnect.c
@@ -45,18 +45,17 @@
 #include "src/common/hostlist.h"
 #include "src/common/qsw.h"
 #include "src/common/slurm_protocol_api.h"
+#include "src/common/elanhosts.h"
 
 #include "src/slurmd/interconnect.h"
 #include "src/slurmd/setenvpf.h"
-#include "src/slurmd/elanhosts.h"
 
 #ifdef HAVE_LIBELAN3
-#  include <elan3/elan3.h>
+#include <elan3/elan3.h>
 /*
  * Static prototypes for network error resolver creation:
  */
-static int   set_elan_ids(elanhost_config_t ec);
-static int   load_neterr_data(void);
+static int   set_elan_ids(void);
 static void *neterr_thr(void *arg);
 
 static int             neterr_retval = 0;
@@ -87,7 +86,7 @@ int interconnect_node_init(void)
 	/*
 	 *  Load neterr elanid/hostname values into kernel 
 	 */
-	if (load_neterr_data() < 0)
+	if (set_elan_ids() < 0)
 		return SLURM_FAILURE;
 
 	if ((err = pthread_attr_init(&attr)))
@@ -166,30 +165,6 @@ static void *neterr_thr(void *arg)
 
 	return NULL;
 }
-
-/*
- *  Parse an ElanId config file and load elanid,hostname pairs
- *   into the kernel.
- */
-static int 
-load_neterr_data(void)
-{
-	elanhost_config_t ec = elanhost_config_create();
-	int rc;
-
-	if ((rc = elanhost_config_read(ec, NULL)) < 0) {
-		error("unable to read elan config: %s", 
-		      elanhost_config_err(ec));
-		goto done;
-	}
-
-	rc = set_elan_ids(ec);
-	elanhost_config_destroy(ec);
-
-    done:
-	return rc < 0 ? SLURM_FAILURE :  SLURM_SUCCESS;
-}
-
 #endif /* HAVE_LIBELAN3 */
 
 
@@ -328,13 +303,13 @@ interconnect_attach(slurmd_job_t *job, int procid)
 #if HAVE_LIBELAN3
 
 static int
-set_elan_ids(elanhost_config_t ec)
+set_elan_ids(void)
 {
 	int i;
 
-	for (i = 0; i <= elanhost_config_maxid(ec); i++) {
-		char *host = elanhost_elanid2host(ec, ELANHOST_EIP, i);
-		if (host == NULL)
+	for (i = 0; i <= qsw_maxnodeid(); i++) {
+		char host[256]; 
+		if (qsw_gethost_bynodeid(host, 256, i) < 0)
 			continue;
 			
 		if (elan3_load_neterr_svc(i, host) < 0)
diff --git a/src/slurmd/elanhosts.c b/src/slurmd/elanhosts.c
deleted file mode 100644
index 47fcda1c210af6fc466dd8221dd4e4c0d8544797..0000000000000000000000000000000000000000
--- a/src/slurmd/elanhosts.c
+++ /dev/null
@@ -1,387 +0,0 @@
-/*****************************************************************************\
- *  $Id$
- *****************************************************************************
- *  Copyright (C) 2001-2002 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  UCRL-CODE-2003-005.
- *  
- *  This file is part of Pdsh, a parallel remote shell program.
- *  For details, see <http://www.llnl.gov/linux/pdsh/>.
- *  
- *  Pdsh is free software; you can redistribute it and/or modify it under
- *  the terms of the GNU General Public License as published by the Free
- *  Software Foundation; either version 2 of the License, or (at your option)
- *  any later version.
- *  
- *  Pdsh is distributed in the hope that it will be useful, but WITHOUT ANY
- *  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- *  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
- *  details.
- *  
- *  You should have received a copy of the GNU General Public License along
- *  with Pdsh; if not, write to the Free Software Foundation, Inc.,
- *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
-\*****************************************************************************/
-
-#if     HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <assert.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-#include "src/common/list.h"
-#include "src/common/hostlist.h"
-#include "elanhosts.h"
-
-/* Default ElanId config file */
-#define ELANID_CONFIG_FILE "/etc/elanhosts"
-
-/* 
- * Error strings for error codes returned by parse_elanid_config()
- */
-static char *errstr[] = 
-{ "No error", 
-  "Out of memory!",
-  "Parse error", 
-  "Number of ElanIds specified != number of hosts",
-  "Type must be \"eip\" \"eth\" or \"other\"",
-  NULL
-};
-
-/*
- *  Container for converting hostnames to ElanIDs
- */
-struct elan_info {
-    elanhost_type_t type;     /* type of entry                              */
-    int             elanid;   /* ElanID corresponding to this hostname      */
-    char           *hostname; /* Resolveable hostname                       */
-};
-
-struct elanhost_config {
-#ifndef NDEBUG
-    int magic;
-#   define ELANHOST_CONFIG_MAGIC 0xe100e100
-#endif
-    int maxid;         /* Storage for max ElanID in config                   */
-	List elanid_list;  /* List of elan_info objects describing configuration */
-    char errstr[1024]; /* String describing last error from this object      */
-};
-
-
-/* 
- * Static Prototypes:
- */
-static elanhost_config_t _elanhost_config_alloc(void);
-static void _elanhost_err(elanhost_config_t ec, const char *fmt, ...);
-static int _find_host(struct elan_info *ei, char *key);
-static int _parse_elanid_config(elanhost_config_t ec, const char *path);
-static int _parse_elanid_line(elanhost_config_t ec, char *buf); 
-static struct elan_info * _elan_info_create(elanhost_type_t type, 
-                                            int elanid, char *hostname);
-static void _elan_info_destroy(struct elan_info *ei);
-
-
-elanhost_config_t elanhost_config_create()
-{
-    return _elanhost_config_alloc();
-}
-
-
-int elanhost_config_read(elanhost_config_t ec, const char *filename)
-{
-    assert(ec != NULL);
-    assert(ec->magic == ELANHOST_CONFIG_MAGIC);
-    assert(ec->elanid_list != NULL);
-
-    if (filename == NULL)
-        filename = ELANID_CONFIG_FILE;
-
-    if (_parse_elanid_config(ec, filename) < 0) 
-        return(-1);
-
-    return(0);
-}
-
-void elanhost_config_destroy(elanhost_config_t ec)
-{
-    assert(ec != NULL);
-    assert(ec->magic == ELANHOST_CONFIG_MAGIC);
-    list_destroy(ec->elanid_list);
-    assert(ec->magic = ~ELANHOST_CONFIG_MAGIC);
-    free(ec);
-}
-
-int elanhost_config_maxid(elanhost_config_t ec)
-{
-    assert(ec != NULL);
-    assert(ec->magic == ELANHOST_CONFIG_MAGIC);
-
-    return ec->maxid;
-}
-
-int elanhost_host2elanid(elanhost_config_t ec, char *host)
-{
-    struct elan_info *ei;
-
-    assert(ec != NULL);
-    assert(host != NULL);
-    assert(ec->magic == ELANHOST_CONFIG_MAGIC);
-
-    ei = list_find_first(ec->elanid_list, (ListFindF) _find_host, host);
-
-    if (!ei) {
-        _elanhost_err(ec, "Unable to find host \"%s\" in configuration", host);
-        return -1;
-    }
-
-    return ei->elanid;
-}
-
-const char *elanhost_config_err(elanhost_config_t ec)
-{
-    return ec->errstr;
-}
-
-
-struct elanid_find_arg {
-    elanhost_type_t type;
-    int elanid;
-};
-
-static int _find_elanid(struct elan_info *ei, struct elanid_find_arg *arg)
-{ 
-    if (ei->type != arg->type)
-        return 0;
-
-    if (ei->elanid != arg->elanid)
-        return 0;
-
-    return 1;
-}
-
-char *elanhost_elanid2host(elanhost_config_t ec, elanhost_type_t type, int eid)
-{
-    struct elan_info *ei;
-    struct elanid_find_arg arg;
-
-    assert(ec != NULL);
-    assert(eid >= 0);
-    assert(ec->magic == ELANHOST_CONFIG_MAGIC);
-
-    arg.type = type;
-    arg.elanid = eid;
-
-    ei = list_find_first(ec->elanid_list, (ListFindF) _find_elanid, &arg);
-
-    if (!ei) {
-        _elanhost_err(ec, "Unable to find host with type=%d elanid=%d", 
-                         type, eid);
-        return(NULL);
-    }
-
-    return ei->hostname;
-}
-
-static elanhost_config_t _elanhost_config_alloc(void)
-{
-    elanhost_config_t new = malloc(sizeof(*new));
-
-    new->maxid = -1;
-    new->elanid_list = list_create((ListDelF) _elan_info_destroy);
-
-    assert(new->magic = ELANHOST_CONFIG_MAGIC);
-
-    return new;
-}
-
-static void _elanhost_err(elanhost_config_t ec, const char *fmt, ...)
-{
-    va_list ap;
-
-    assert(ec != NULL);
-    assert(fmt != NULL);
-
-    va_start(ap, fmt);
-    vsnprintf(ec->errstr, 1024, fmt, ap);
-    va_end(ap);
-
-    return;
-}
-
-/*
- * Parse the "elanhosts" config file which has the form
- * 
- *   ElanIds  Hostnames
- *   [n-m]    host_n,...,host_m
- *   [n-m]    host[n-m]
- *   etc.
- *
- * and which maps ElanIds to hostnames on the cluster.
- * The results are stored in the config object's elanid_list member. 
- *
- * Returns 0 on Success, and an error code < 0 on failure.
- */
-static int _parse_elanid_config(elanhost_config_t ec, const char *path)
-{
-	char  buf[4096];
-	int   line;
-	FILE *fp;
-
-	if (!(fp = fopen(path, "r"))) {
-		_elanhost_err(ec, "failed to open %s\n",  path);
-		return -1;
-	}
-
-	line = 1;
-	while (fgets(buf, 4096, fp)) {
-		int rc;
-		if ((rc = _parse_elanid_line(ec, buf)) < 0) {
-			_elanhost_err(ec, "%s: line %d: %s", path, line, errstr[-rc]);
-			return -1;
-		}
-		line++;
-	}
-
-	if (fclose(fp) < 0)
-		_elanhost_err(ec, "close(%s): %m", path);
-
-	return 0;
-}
-
-
-/*
- *  Translate type strings "eip," "eth," or "other" into their
- *   corresponding elanhost_type_t number
- */
-static elanhost_type_t _get_type_num(char *type)
-{
-    if (strcasecmp(type, "eip") == 0)
-        return ELANHOST_EIP;
-    else if (strcasecmp(type, "eth") == 0)
-        return ELANHOST_ETH;
-    else if (strcasecmp(type, "other") == 0)
-        return ELANHOST_OTHER;
-    else
-        return -1;
-}
-
-/*
- *  Parse one line of elanId list appending results to list "eil"
- *
- *  Returns -1 for parse error, -2 if the number of elanids specified
- *  doesn't equal the number of hosts.
- *
- *  Returns 0 on success
- */
-static int 
-_parse_elanid_line(elanhost_config_t ec, char *buf)
-{
-	hostlist_t  el, hl;
-	const char *separators = " \t\n";
-    char       *type;
-	char       *elanids;
-	char       *hosts;
-	char       *sp, *s;
-	int         rc = 0;
-    int         typenum;
-
-	/* 
-	 *  Nullify any comments
-	 */
-	if ((s = strchr(buf, '#')))
-		*s = '\0';
-
-    if (!(type = strtok_r(buf, separators, &sp)))
-        return 0;
-
-	if (!(elanids = strtok_r(NULL, separators, &sp)))
-		return -1;
-
-	if (!(hosts = strtok_r(NULL, separators, &sp)))
-		return -2;
-
-	el = hostlist_create(NULL);
-	hl = hostlist_create(NULL);
-
-	if (!el || !hl) {
-		rc = -1;
-		goto done;
-	}
-
-	if (hostlist_push(el, elanids) != hostlist_push(hl, hosts)) {
-		rc = -3; 
-		goto done;
-	}
-
-    if ((typenum = _get_type_num(type)) < 0)
-        return -4;
-
-	while ((s = hostlist_shift(el))) {
-		char *eptr;
-		int   elanid = (int) strtoul(s, &eptr, 10);
-
-		if (*eptr != '\0') {
-			rc = -2;
-			goto done;
-		}
-
-		free(s);
-		if (!(s = hostlist_shift(hl))) {
-			rc = -1;
-			goto done;
-		}
-
-        if (elanid > ec->maxid)
-            ec->maxid = elanid;
-
-		list_append(ec->elanid_list, _elan_info_create(typenum, elanid, s));
-	}
-
-    done:
-	hostlist_destroy(el);
-	hostlist_destroy(hl);
-
-	return rc;
-}
-
-static struct elan_info *
-_elan_info_create(elanhost_type_t type, int elanid, char *hostname)
-{
-	struct elan_info *ei = (struct elan_info *) malloc(sizeof(*ei));
-    ei->type     = type;
-	ei->elanid   = elanid;
-	ei->hostname = hostname;
-	return ei;
-}
-
-static void
-_elan_info_destroy(struct elan_info *ei)
-{
-	if (ei->hostname)
-		free(ei->hostname);
-	free(ei);
-}
-
-
-/*
- *  List Find function for mapping hostname to an ElanId
- */
-static int _find_host(struct elan_info *ei, char *key)
-{
-    if (strcmp(ei->hostname, key) != 0)
-        return 0;
-    else
-        return 1;
-}
-
-
-/*
- * vi:tabstop=4 shiftwidth=4 expandtab
- */
-
diff --git a/src/slurmd/elanhosts.h b/src/slurmd/elanhosts.h
deleted file mode 100644
index d5cb0bb6526fb379e7fb6a1a16d51978d689e685..0000000000000000000000000000000000000000
--- a/src/slurmd/elanhosts.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*****************************************************************************\
- *  $Id$
- *****************************************************************************
- *  Copyright (C) 2001-2002 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  UCRL-CODE-2003-005.
- *  
- *  This file is part of Pdsh, a parallel remote shell program.
- *  For details, see <http://www.llnl.gov/linux/pdsh/>.
- *  
- *  Pdsh is free software; you can redistribute it and/or modify it under
- *  the terms of the GNU General Public License as published by the Free
- *  Software Foundation; either version 2 of the License, or (at your option)
- *  any later version.
- *  
- *  Pdsh is distributed in the hope that it will be useful, but WITHOUT ANY
- *  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- *  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
- *  details.
- *  
- *  You should have received a copy of the GNU General Public License along
- *  with Pdsh; if not, write to the Free Software Foundation, Inc.,
- *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
-\*****************************************************************************/
-
-#ifndef _ELANHOSTS_H
-#define _ELANHOSTS_H
-
-/*
- * Type of Elan "hostname" 
- *   Hostname corresponds to the eip adapter, an ethernet adapter, or "other"
- */
-typedef enum {
-	ELANHOST_EIP,
-	ELANHOST_ETH,
-	ELANHOST_OTHER
-} elanhost_type_t;
-
-/*  Opaque type which holds the elanhost configuration
- */
-typedef struct elanhost_config * elanhost_config_t;
-
-
-/*
- *  Functions
- */
-
-/*
- * Create an empty Elanhost config object
- */
-elanhost_config_t elanhost_config_create(void);
-
-/*
- *  Read elanhosts configuration from `file'  
- *    (Default /etc/elanhosts)
- *
- *  Config file format is as follows:
- *
- *    Type  ElanIDs  Hostnames
- *
- *  The "type" field may be "eip" for eip interface,  "eth" for an
- *    ethernet interface, or "other" for anything else. ("eth" and
- *    "other" are equivalent at this time)
- *
- *  The "ElanIDs" field consists of a list of one or more ElanIDs in
- *    the form "[i-j,n-m,..]" or just "N" for a single ElanID.
- *
- *  The "Hostname" field consists of the hostnames which correspond
- *    to the ElanIDs. If the hostnames have a numeric suffix a bracketed
- *    hostlist is allowed (see hostlist.[ch]) 
- *
- *  For Example:
- *
- *    Type  ElanIDs  Hostnames
- *    eip   [0-10]   host[0-10]
- *    eth   [0-10]   ehost[0-10]
- *    eth   [0,1]    host0-eth1,host1-eth1
- *
- *  Returns 0 on succes, -1 for failure.
- *
- */
-int elanhost_config_read(elanhost_config_t ec, const char *filename);
-
-
-/*
- *  Destroy an elanhost configuration object.
- */
-void elanhost_config_destroy(elanhost_config_t conf);
-
-
-/*
- *  Given a hostname, return the corresponding ElanID
- *
- *  Returns the ElanId on success, -1 if no host matching "hostname"
- *    was found in the configuration.
- *
- */
-int elanhost_host2elanid(elanhost_config_t ec, char *host);
-
-
-/*
- *  Given an ElanId and adapter type, return the first matching hostname
- *    from the configuration.
- */
-char *elanhost_elanid2host(elanhost_config_t ec, 
-		           elanhost_type_t type, int elanid);
-
-
-/* 
- *  Returns the max ElanID from the configuration
- */
-int elanhost_config_maxid(elanhost_config_t ec);
-
-
-/*
- *  Returns the last error string generated for the elan config obj `ec'
- */
-const char *elanhost_config_err(elanhost_config_t ec);
-
-#endif
diff --git a/src/squeue/Makefile.am b/src/squeue/Makefile.am
index 04c3aa1ce098b6072fbc0e1bb7ffa35d49b7e050..e65d0d20cc06e47976ff7ccddd2fe8fb77492abc 100644
--- a/src/squeue/Makefile.am
+++ b/src/squeue/Makefile.am
@@ -9,7 +9,6 @@ INCLUDES = -I$(top_srcdir)
 bin_PROGRAMS = squeue
 
 LDADD = $(top_builddir)/src/common/libcommon.la 	\
-	$(top_builddir)/src/common/libhostlist.la	\
 	$(top_builddir)/src/api/libslurm.la
 
 noinst_HEADERS = squeue.h print.h
diff --git a/src/srun/Makefile.am b/src/srun/Makefile.am
index 61dbb868043aa4b1b5436b5925b36f3fbfa5224e..0ee22cd47682f426c9a2658848585cdfe85e7fa6 100644
--- a/src/srun/Makefile.am
+++ b/src/srun/Makefile.am
@@ -37,7 +37,6 @@ srun_SOURCES = \
 
 convenience_libs =  \
 	$(top_builddir)/src/common/libcommon.la   \
-	$(top_builddir)/src/common/libhostlist.la \
 	$(top_builddir)/src/common/libeio.la      \
 	$(top_builddir)/src/api/libslurm.la
 
diff --git a/src/srun/launch.c b/src/srun/launch.c
index 02292a20cedbbbd335051bc7e268951d2159a28d..449f8ebcb748facabfc543d50a1bb8c1504da31a 100644
--- a/src/srun/launch.c
+++ b/src/srun/launch.c
@@ -283,7 +283,7 @@ static int _check_pending_threads(thd_t *thd, int count)
 
 	for (i = 0; i < count; i++) {
 		thd_t *tp = &thd[i];
-		if ((tp->state == DSH_ACTIVE) && ((now - tp->tstart) >= 2) ) {
+		if ((tp->state == DSH_ACTIVE) && ((now - tp->tstart) >= 10) ) {
 			debug2("sending SIGALRM to thread %lu", 
 				(unsigned long) tp->thread);
 			/*