diff --git a/META b/META
index 04e43caa0b8bc724af77abf56f88721ac6a364cc..4221e7c1d64c8bec4aa3ff736c074b249f440ff1 100644
--- a/META
+++ b/META
@@ -3,9 +3,9 @@
   Api_revision:  0
   Major:         2
   Meta:          1
-  Micro:         5
+  Micro:         7
   Minor:         0
   Name:          slurm
   Release:       1
   Release_tags:  dist
-  Version:       2.0.5
+  Version:       2.0.7
diff --git a/NEWS b/NEWS
index 55e1b1b0d5264347db3d4a40346d77f53182a8cf..7ab950bb3e501e28e1af5ca18267bd8c41e7bb2b 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,47 @@
 This file describes changes in recent versions of SLURM. It primarily
 documents those changes that are of interest to users and admins.
 
+* Changes in SLURM 2.0.7
+========================
+ -- Fix bug in select/cons_res when nodes are configured in more than one 
+    partition and those partitions have different priorities and sched/gang
+    is not configured. CPUs were previously over-allocated.
+ -- Fix core of smap when specifying -i option with invalid argument.
+ -- Fix issue when using srun --test-only to not put an entry of test 
+    job into accounting.
+ -- For OpenMPI use of SLURM reserved ports. If any of the tasks fails to 
+    acquire a reserved port and has an exit code of 108 then srun will 
+    kill all remaining tasks and respawn the tasks. Previous code waited 
+    for tasks to exit.
+ -- MySQL plugin - When doing archiving we now get a correct end time.  
+    Previously it would grab an extra day to archive.
+ -- BLUEGENE - Handle initial state correctly, previously was setting initial 
+    state to IDLE if UNKNOWN which would make it not set a registration 
+    message to accounting, which could lead to nodes not being listed as up 
+    when they really were.
+ -- Fixed buffer size issue with scontrol show hostlist.
+ -- Fixed issue with copy in smap -Dc previously command wouldn't work.
+ -- BLUEGENE - Update documentation about small blocks in the bluegene.conf 
+    file.
+ -- In sched/wiki plugin (for Maui) fix possible message truncation on very 
+    large cluster.
+ -- BLUEGENE - Fix for handling undocumented Deallocating to Configuring to 
+    Free block transition state.
+ -- BLUEGENE - Fix for overlap mode loading blocks when midplane is in an
+    error state.
+ -- Add range check for SuspendTime configuration parameter.
+ -- Moved unzipped python-hostname tarball out and the tarball in.
+ -- BLUEGENE - Patched memory leak when running state test.
+ -- BLUEGENE - fixed slow down generated by slow call rm_get_BG 
+    and polling thread.
+
+* Changes in SLURM 2.0.6
+========================
+ -- Fixed seg fault when "scontrol listpids" is invoked for a specific job step
+    on a node on which a stepd is not running.
+ -- Fix bug in sched/backfill which could result in invalid memory reference 
+    when trying to schedule jobs submitted with --exclude option.
+
 * Changes in SLURM 2.0.5
 ========================
  -- BLUEGENE - Added support for emulating systems with a X-dimension of 4.
@@ -64,7 +105,7 @@ documents those changes that are of interest to users and admins.
  -- BLUEGENE - Added SLURM_BG_NUM_NODES with cnode count of allocation, 
     SLURM_JOB_NUM_NODES represents midplane counts until 2.1.
  -- BLUEGENE - Added fix for if a block is in error state and the midplane 
-    containning the block is also set to drain/down.  This previously 
+    containing the block is also set to drain/down.  This previously 
     prevented dynamic creation of new blocks when this state was present.
  -- Fixed bug where a users association limits were not enforced, only 
     parent limits were being enforced.
@@ -4315,4 +4356,4 @@ documents those changes that are of interest to users and admins.
  -- Change directory to /tmp in slurmd if daemonizing.
  -- Logfiles are reopened on reconfigure.
  
-$Id: NEWS 18691 2009-09-11 22:41:00Z jette $
+$Id: NEWS 18901 2009-10-14 22:34:30Z da $
diff --git a/configure b/configure
index 8545d4906737e150f4c000fc2f9bc932eec4f6fa..00457ede222d8c9fdb5ca4aeae5510dc12795f0f 100755
--- a/configure
+++ b/configure
@@ -23644,7 +23644,7 @@ fi
 
 
 
-ac_config_files="$ac_config_files Makefile config.xml auxdir/Makefile contribs/Makefile contribs/perlapi/Makefile contribs/perlapi/libslurm-perl/Makefile.PL contribs/torque/Makefile contribs/phpext/Makefile contribs/phpext/slurm_php/config.m4 contribs/python/Makefile contribs/python/hostlist/Makefile contribs/python/hostlist/test/Makefile contribs/slurmdb-direct/Makefile src/Makefile src/api/Makefile src/common/Makefile src/database/Makefile src/sacct/Makefile src/sacctmgr/Makefile src/sreport/Makefile src/sstat/Makefile src/sshare/Makefile src/salloc/Makefile src/sbatch/Makefile src/sattach/Makefile src/sprio/Makefile src/srun/Makefile src/srun_cr/Makefile src/slurmd/Makefile src/slurmd/slurmd/Makefile src/slurmd/slurmstepd/Makefile src/slurmdbd/Makefile src/slurmctld/Makefile src/sbcast/Makefile src/scontrol/Makefile src/scancel/Makefile src/squeue/Makefile src/sinfo/Makefile src/smap/Makefile src/strigger/Makefile src/sview/Makefile src/plugins/Makefile src/plugins/accounting_storage/Makefile src/plugins/accounting_storage/filetxt/Makefile src/plugins/accounting_storage/mysql/Makefile src/plugins/accounting_storage/pgsql/Makefile src/plugins/accounting_storage/none/Makefile src/plugins/accounting_storage/slurmdbd/Makefile src/plugins/auth/Makefile src/plugins/auth/authd/Makefile src/plugins/auth/munge/Makefile src/plugins/auth/none/Makefile src/plugins/checkpoint/Makefile src/plugins/checkpoint/aix/Makefile src/plugins/checkpoint/none/Makefile src/plugins/checkpoint/ompi/Makefile src/plugins/checkpoint/xlch/Makefile src/plugins/checkpoint/blcr/Makefile src/plugins/checkpoint/blcr/cr_checkpoint.sh src/plugins/checkpoint/blcr/cr_restart.sh src/plugins/crypto/Makefile src/plugins/crypto/munge/Makefile src/plugins/crypto/openssl/Makefile src/plugins/jobacct_gather/Makefile src/plugins/jobacct_gather/linux/Makefile src/plugins/jobacct_gather/aix/Makefile src/plugins/jobacct_gather/none/Makefile src/plugins/jobcomp/Makefile src/plugins/jobcomp/filetxt/Makefile src/plugins/jobcomp/none/Makefile src/plugins/jobcomp/script/Makefile src/plugins/jobcomp/mysql/Makefile src/plugins/jobcomp/pgsql/Makefile src/plugins/priority/Makefile src/plugins/priority/basic/Makefile src/plugins/priority/multifactor/Makefile src/plugins/proctrack/Makefile src/plugins/proctrack/aix/Makefile src/plugins/proctrack/pgid/Makefile src/plugins/proctrack/linuxproc/Makefile src/plugins/proctrack/rms/Makefile src/plugins/proctrack/sgi_job/Makefile src/plugins/sched/Makefile src/plugins/sched/backfill/Makefile src/plugins/sched/builtin/Makefile src/plugins/sched/gang/Makefile src/plugins/sched/hold/Makefile src/plugins/sched/wiki/Makefile src/plugins/sched/wiki2/Makefile src/plugins/select/Makefile src/plugins/select/bluegene/Makefile src/plugins/select/bluegene/block_allocator/Makefile src/plugins/select/bluegene/plugin/Makefile src/plugins/select/cons_res/Makefile src/plugins/select/linear/Makefile src/plugins/switch/Makefile src/plugins/switch/elan/Makefile src/plugins/switch/none/Makefile src/plugins/switch/federation/Makefile src/plugins/mpi/Makefile src/plugins/mpi/mpich1_p4/Makefile src/plugins/mpi/mpich1_shmem/Makefile src/plugins/mpi/mpichgm/Makefile src/plugins/mpi/mpichmx/Makefile src/plugins/mpi/mvapich/Makefile src/plugins/mpi/lam/Makefile src/plugins/mpi/none/Makefile src/plugins/mpi/openmpi/Makefile src/plugins/task/Makefile src/plugins/task/affinity/Makefile src/plugins/task/none/Makefile src/plugins/topology/Makefile src/plugins/topology/3d_torus/Makefile src/plugins/topology/none/Makefile src/plugins/topology/tree/Makefile doc/Makefile doc/man/Makefile doc/html/Makefile doc/html/configurator.html testsuite/Makefile testsuite/expect/Makefile testsuite/slurm_unit/Makefile testsuite/slurm_unit/api/Makefile testsuite/slurm_unit/api/manual/Makefile testsuite/slurm_unit/common/Makefile testsuite/slurm_unit/slurmctld/Makefile testsuite/slurm_unit/slurmd/Makefile testsuite/slurm_unit/slurmdbd/Makefile"
+ac_config_files="$ac_config_files Makefile config.xml auxdir/Makefile contribs/Makefile contribs/perlapi/Makefile contribs/perlapi/libslurm-perl/Makefile.PL contribs/torque/Makefile contribs/phpext/Makefile contribs/phpext/slurm_php/config.m4 contribs/python/Makefile contribs/slurmdb-direct/Makefile src/Makefile src/api/Makefile src/common/Makefile src/database/Makefile src/sacct/Makefile src/sacctmgr/Makefile src/sreport/Makefile src/sstat/Makefile src/sshare/Makefile src/salloc/Makefile src/sbatch/Makefile src/sattach/Makefile src/sprio/Makefile src/srun/Makefile src/srun_cr/Makefile src/slurmd/Makefile src/slurmd/slurmd/Makefile src/slurmd/slurmstepd/Makefile src/slurmdbd/Makefile src/slurmctld/Makefile src/sbcast/Makefile src/scontrol/Makefile src/scancel/Makefile src/squeue/Makefile src/sinfo/Makefile src/smap/Makefile src/strigger/Makefile src/sview/Makefile src/plugins/Makefile src/plugins/accounting_storage/Makefile src/plugins/accounting_storage/filetxt/Makefile src/plugins/accounting_storage/mysql/Makefile src/plugins/accounting_storage/pgsql/Makefile src/plugins/accounting_storage/none/Makefile src/plugins/accounting_storage/slurmdbd/Makefile src/plugins/auth/Makefile src/plugins/auth/authd/Makefile src/plugins/auth/munge/Makefile src/plugins/auth/none/Makefile src/plugins/checkpoint/Makefile src/plugins/checkpoint/aix/Makefile src/plugins/checkpoint/none/Makefile src/plugins/checkpoint/ompi/Makefile src/plugins/checkpoint/xlch/Makefile src/plugins/checkpoint/blcr/Makefile src/plugins/checkpoint/blcr/cr_checkpoint.sh src/plugins/checkpoint/blcr/cr_restart.sh src/plugins/crypto/Makefile src/plugins/crypto/munge/Makefile src/plugins/crypto/openssl/Makefile src/plugins/jobacct_gather/Makefile src/plugins/jobacct_gather/linux/Makefile src/plugins/jobacct_gather/aix/Makefile src/plugins/jobacct_gather/none/Makefile src/plugins/jobcomp/Makefile src/plugins/jobcomp/filetxt/Makefile src/plugins/jobcomp/none/Makefile src/plugins/jobcomp/script/Makefile src/plugins/jobcomp/mysql/Makefile src/plugins/jobcomp/pgsql/Makefile src/plugins/priority/Makefile src/plugins/priority/basic/Makefile src/plugins/priority/multifactor/Makefile src/plugins/proctrack/Makefile src/plugins/proctrack/aix/Makefile src/plugins/proctrack/pgid/Makefile src/plugins/proctrack/linuxproc/Makefile src/plugins/proctrack/rms/Makefile src/plugins/proctrack/sgi_job/Makefile src/plugins/sched/Makefile src/plugins/sched/backfill/Makefile src/plugins/sched/builtin/Makefile src/plugins/sched/gang/Makefile src/plugins/sched/hold/Makefile src/plugins/sched/wiki/Makefile src/plugins/sched/wiki2/Makefile src/plugins/select/Makefile src/plugins/select/bluegene/Makefile src/plugins/select/bluegene/block_allocator/Makefile src/plugins/select/bluegene/plugin/Makefile src/plugins/select/cons_res/Makefile src/plugins/select/linear/Makefile src/plugins/switch/Makefile src/plugins/switch/elan/Makefile src/plugins/switch/none/Makefile src/plugins/switch/federation/Makefile src/plugins/mpi/Makefile src/plugins/mpi/mpich1_p4/Makefile src/plugins/mpi/mpich1_shmem/Makefile src/plugins/mpi/mpichgm/Makefile src/plugins/mpi/mpichmx/Makefile src/plugins/mpi/mvapich/Makefile src/plugins/mpi/lam/Makefile src/plugins/mpi/none/Makefile src/plugins/mpi/openmpi/Makefile src/plugins/task/Makefile src/plugins/task/affinity/Makefile src/plugins/task/none/Makefile src/plugins/topology/Makefile src/plugins/topology/3d_torus/Makefile src/plugins/topology/none/Makefile src/plugins/topology/tree/Makefile doc/Makefile doc/man/Makefile doc/html/Makefile doc/html/configurator.html testsuite/Makefile testsuite/expect/Makefile testsuite/slurm_unit/Makefile testsuite/slurm_unit/api/Makefile testsuite/slurm_unit/api/manual/Makefile testsuite/slurm_unit/common/Makefile testsuite/slurm_unit/slurmctld/Makefile testsuite/slurm_unit/slurmd/Makefile testsuite/slurm_unit/slurmdbd/Makefile"
 
 
 cat >confcache <<\_ACEOF
@@ -24800,8 +24800,6 @@ do
     "contribs/phpext/Makefile") CONFIG_FILES="$CONFIG_FILES contribs/phpext/Makefile" ;;
     "contribs/phpext/slurm_php/config.m4") CONFIG_FILES="$CONFIG_FILES contribs/phpext/slurm_php/config.m4" ;;
     "contribs/python/Makefile") CONFIG_FILES="$CONFIG_FILES contribs/python/Makefile" ;;
-    "contribs/python/hostlist/Makefile") CONFIG_FILES="$CONFIG_FILES contribs/python/hostlist/Makefile" ;;
-    "contribs/python/hostlist/test/Makefile") CONFIG_FILES="$CONFIG_FILES contribs/python/hostlist/test/Makefile" ;;
     "contribs/slurmdb-direct/Makefile") CONFIG_FILES="$CONFIG_FILES contribs/slurmdb-direct/Makefile" ;;
     "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
     "src/api/Makefile") CONFIG_FILES="$CONFIG_FILES src/api/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index ae2e82c4ece7e4c04467f4020c81c93cb7a63fcc..6f4899019162e11192554f42ccd3ab7579e87606 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-# $Id: configure.ac 16996 2009-03-24 20:21:41Z jette $
+# $Id: configure.ac 18850 2009-10-08 22:23:44Z da $
 # This file is to be processed with autoconf to generate a configure script
 
 dnl Prologue
@@ -286,8 +286,6 @@ AC_CONFIG_FILES([Makefile
 		 contribs/phpext/Makefile
 		 contribs/phpext/slurm_php/config.m4
 		 contribs/python/Makefile
-		 contribs/python/hostlist/Makefile
-		 contribs/python/hostlist/test/Makefile
 		 contribs/slurmdb-direct/Makefile
 		 src/Makefile 
 		 src/api/Makefile 
diff --git a/contribs/python/Makefile.am b/contribs/python/Makefile.am
index 60fb9a0773af421aec5c0d79f4f6cb49c5747925..741f8508560924ad28c333eab697148b64166adc 100644
--- a/contribs/python/Makefile.am
+++ b/contribs/python/Makefile.am
@@ -1 +1 @@
-SUBDIRS = hostlist
+SUBDIRS =
diff --git a/contribs/python/Makefile.in b/contribs/python/Makefile.in
index 77d7279115f72d479108a3bf11fd1a5959a20a83..fd738022623ff0e3b0f4ac377393acaeea286771 100644
--- a/contribs/python/Makefile.in
+++ b/contribs/python/Makefile.in
@@ -268,7 +268,7 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = hostlist
+SUBDIRS = 
 all: all-recursive
 
 .SUFFIXES:
diff --git a/contribs/python/hostlist/CHANGES b/contribs/python/hostlist/CHANGES
deleted file mode 100644
index 86f30ec84aba058c2e47355dd23698b7d3f95296..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/CHANGES
+++ /dev/null
@@ -1,46 +0,0 @@
-Version 1.5 (2009-02-22)
-
-    Make each "-" on the command line count as one hostlist argument.
-    If multiple hostslists are given on stdin they are combined to a
-    union hostlist before being used in the way requested by the
-    options.
-
-    Add hostgrep utility to search for lines matching a hostlist.
-
-    Make the build system (used when building tar.gz and RPMs from the
-    source code held in git) smarter.
-
-Version 1.4 (2008-12-28)
-
-    Support Python 3.
-
-    Import reduce from functools if possible.
-    Use Python 2/3 installation trick from .../Demo/distutils/test2to3
-
-Version 1.3 (2008-09-30)
-
-    Add -s/--separator, -p/--prepend, -a/--append and --version
-    options contributed by Pär Andersson at NSC.
-
-    Let -e be the short form of the --expand option (-w is now
-    deprecated).
-
-    Add a manual page for hostlist(1).
-
-Version 1.2 (2008-09-18)
-
-    Add "--prefix /usr" in the installation script of the spec file
-    (needed on SUSE Linux where the default is /usr/local).
-
-Version 1.1 (2008-09-17)
-
-    Move the command line utility to a separate 'hostlist' command.
-
-    Provide a python-hostlist.spec file to build RPM packages.
-    Inspired by a contribution by Dr. Holger Obermaier at
-    Rechenzentrum, Universität Karlsruhe.
-
-Version 1.0 (2008-07-25)
-
-    Initial version.
-
diff --git a/contribs/python/hostlist/COPYING b/contribs/python/hostlist/COPYING
deleted file mode 100644
index d511905c1647a1e311e8b20d5930a37a9c2531cd..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program 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.
-
-    This program 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 this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/contribs/python/hostlist/Makefile.am b/contribs/python/hostlist/Makefile.am
deleted file mode 100644
index 72676f515afa567c6bb725de453fd7482d20a3dc..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-SUBDIRS = test
-
-EXTRA_DIST = 			\
-	CHANGES			\
-	COPYING			\
-	hostlist.py		\
-	PKG-INFO		\
-	python-hostlist.spec	\
-	README			\
-	setup.py
diff --git a/contribs/python/hostlist/Makefile.in b/contribs/python/hostlist/Makefile.in
deleted file mode 100644
index d16ae1485f39fa85ef63d3da4bedc70329f193e3..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/Makefile.in
+++ /dev/null
@@ -1,596 +0,0 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-subdir = contribs/python/hostlist
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	COPYING
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.m4 \
-	$(top_srcdir)/auxdir/libtool.m4 \
-	$(top_srcdir)/auxdir/ltoptions.m4 \
-	$(top_srcdir)/auxdir/ltsugar.m4 \
-	$(top_srcdir)/auxdir/ltversion.m4 \
-	$(top_srcdir)/auxdir/lt~obsolete.m4 \
-	$(top_srcdir)/auxdir/slurm.m4 \
-	$(top_srcdir)/auxdir/x_ac__system_configuration.m4 \
-	$(top_srcdir)/auxdir/x_ac_affinity.m4 \
-	$(top_srcdir)/auxdir/x_ac_aix.m4 \
-	$(top_srcdir)/auxdir/x_ac_blcr.m4 \
-	$(top_srcdir)/auxdir/x_ac_bluegene.m4 \
-	$(top_srcdir)/auxdir/x_ac_cflags.m4 \
-	$(top_srcdir)/auxdir/x_ac_cray.m4 \
-	$(top_srcdir)/auxdir/x_ac_databases.m4 \
-	$(top_srcdir)/auxdir/x_ac_debug.m4 \
-	$(top_srcdir)/auxdir/x_ac_elan.m4 \
-	$(top_srcdir)/auxdir/x_ac_env.m4 \
-	$(top_srcdir)/auxdir/x_ac_federation.m4 \
-	$(top_srcdir)/auxdir/x_ac_gpl_licensed.m4 \
-	$(top_srcdir)/auxdir/x_ac_gtk.m4 \
-	$(top_srcdir)/auxdir/x_ac_iso.m4 \
-	$(top_srcdir)/auxdir/x_ac_munge.m4 \
-	$(top_srcdir)/auxdir/x_ac_ncurses.m4 \
-	$(top_srcdir)/auxdir/x_ac_pam.m4 \
-	$(top_srcdir)/auxdir/x_ac_ptrace.m4 \
-	$(top_srcdir)/auxdir/x_ac_readline.m4 \
-	$(top_srcdir)/auxdir/x_ac_setpgrp.m4 \
-	$(top_srcdir)/auxdir/x_ac_setproctitle.m4 \
-	$(top_srcdir)/auxdir/x_ac_sgi_job.m4 \
-	$(top_srcdir)/auxdir/x_ac_slurm_ssl.m4 \
-	$(top_srcdir)/auxdir/x_ac_sun_const.m4 \
-	$(top_srcdir)/auxdir/x_ac_xcpu.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/slurm/slurm.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTHD_CFLAGS = @AUTHD_CFLAGS@
-AUTHD_LIBS = @AUTHD_LIBS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BG_INCLUDES = @BG_INCLUDES@
-BLCR_CPPFLAGS = @BLCR_CPPFLAGS@
-BLCR_HOME = @BLCR_HOME@
-BLCR_LDFLAGS = @BLCR_LDFLAGS@
-BLCR_LIBS = @BLCR_LIBS@
-BLUEGENE_LOADED = @BLUEGENE_LOADED@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CMD_LDFLAGS = @CMD_LDFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-ELAN_LIBS = @ELAN_LIBS@
-EXEEXT = @EXEEXT@
-FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
-FGREP = @FGREP@
-GREP = @GREP@
-GTK2_CFLAGS = @GTK2_CFLAGS@
-GTK2_LIBS = @GTK2_LIBS@
-HAVEMYSQLCONFIG = @HAVEMYSQLCONFIG@
-HAVEPGCONFIG = @HAVEPGCONFIG@
-HAVEPKGCONFIG = @HAVEPKGCONFIG@
-HAVE_AIX = @HAVE_AIX@
-HAVE_ELAN = @HAVE_ELAN@
-HAVE_FEDERATION = @HAVE_FEDERATION@
-HAVE_OPENSSL = @HAVE_OPENSSL@
-HAVE_SOME_CURSES = @HAVE_SOME_CURSES@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIB_LDFLAGS = @LIB_LDFLAGS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MUNGE_CPPFLAGS = @MUNGE_CPPFLAGS@
-MUNGE_LDFLAGS = @MUNGE_LDFLAGS@
-MUNGE_LIBS = @MUNGE_LIBS@
-MYSQL_CFLAGS = @MYSQL_CFLAGS@
-MYSQL_LIBS = @MYSQL_LIBS@
-NCURSES = @NCURSES@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUMA_LIBS = @NUMA_LIBS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PAM_LIBS = @PAM_LIBS@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PGSQL_CFLAGS = @PGSQL_CFLAGS@
-PGSQL_LIBS = @PGSQL_LIBS@
-PLPA_LIBS = @PLPA_LIBS@
-PROCTRACKDIR = @PROCTRACKDIR@
-PROJECT = @PROJECT@
-PTHREAD_CC = @PTHREAD_CC@
-PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-RANLIB = @RANLIB@
-READLINE_LIBS = @READLINE_LIBS@
-RELEASE = @RELEASE@
-SED = @SED@
-SEMAPHORE_LIBS = @SEMAPHORE_LIBS@
-SEMAPHORE_SOURCES = @SEMAPHORE_SOURCES@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SLURMCTLD_PORT = @SLURMCTLD_PORT@
-SLURMDBD_PORT = @SLURMDBD_PORT@
-SLURMD_PORT = @SLURMD_PORT@
-SLURM_API_AGE = @SLURM_API_AGE@
-SLURM_API_CURRENT = @SLURM_API_CURRENT@
-SLURM_API_MAJOR = @SLURM_API_MAJOR@
-SLURM_API_REVISION = @SLURM_API_REVISION@
-SLURM_API_VERSION = @SLURM_API_VERSION@
-SLURM_MAJOR = @SLURM_MAJOR@
-SLURM_MICRO = @SLURM_MICRO@
-SLURM_MINOR = @SLURM_MINOR@
-SLURM_PREFIX = @SLURM_PREFIX@
-SLURM_VERSION = @SLURM_VERSION@
-SO_LDFLAGS = @SO_LDFLAGS@
-SSL_CPPFLAGS = @SSL_CPPFLAGS@
-SSL_LDFLAGS = @SSL_LDFLAGS@
-SSL_LIBS = @SSL_LIBS@
-STRIP = @STRIP@
-UTIL_LIBS = @UTIL_LIBS@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_vendor = @target_vendor@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = test
-EXTRA_DIST = \
-	CHANGES			\
-	COPYING			\
-	hostlist.py		\
-	PKG-INFO		\
-	python-hostlist.spec	\
-	README			\
-	setup.py
-
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  contribs/python/hostlist/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  contribs/python/hostlist/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	    distdir=`$(am__cd) $(distdir) && pwd`; \
-	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-	    (cd $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$top_distdir" \
-	        distdir="$$distdir/$$subdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-info: install-info-recursive
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-ps: install-ps-recursive
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
-	install-strip
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive distclean 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-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/contribs/python/hostlist/PKG-INFO b/contribs/python/hostlist/PKG-INFO
deleted file mode 100644
index f66980ccb6add624183e107b75a7121e52ec9f39..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/PKG-INFO
+++ /dev/null
@@ -1,18 +0,0 @@
-Metadata-Version: 1.0
-Name: python-hostlist
-Version: 1.5
-Summary: Python module for hostlist handling
-Home-page: http://www.nsc.liu.se/~kent/python-hostlist/
-Author: Kent Engström
-Author-email: kent@nsc.liu.se
-License: GPL2+
-Description: The hostlist.py module knows how to expand and collect hostlist expressions.
-Platform: UNKNOWN
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Intended Audience :: Science/Research
-Classifier: Intended Audience :: System Administrators
-Classifier: License :: OSI Approved :: GNU General Public License (GPL)
-Classifier: Topic :: System :: Clustering
-Classifier: Topic :: System :: Systems Administration
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 3
diff --git a/contribs/python/hostlist/README b/contribs/python/hostlist/README
deleted file mode 100644
index ebb9d52780a5d0de5bf0393b6aca511c544a499b..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/README
+++ /dev/null
@@ -1,67 +0,0 @@
-INTRODUCTION
-============
-
-The Python module hostlist.py knows how to expand and collect hostlist
-expressions. Example:
-
-  % python
-  Python 2.5.1 (r251:54863, Jul 10 2008, 17:24:48) 
-  [GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2
-  Type "help", "copyright", "credits" or "license" for more information.
-  >>> import hostlist
-  >>> hosts = hostlist.expand_hostlist("n[1-10,17]")
-  >>> hosts
-  ['n1', 'n2', 'n3', 'n4', 'n5', 'n6', 'n7', 'n8', 'n9', 'n10', 'n17']
-  >>> hostlist.collect_hostlist(hosts)
-  'n[1-10,17]'
-  >>> hostlist.collect_hostlist(["x1y1","x2y2", "x1y2", "x2y1"])
-  'x[1-2]y[1-2]'
-
-Bad hostlists or hostnames will result in the hostlist.BadHostlist
-exception being raised.
-
-The 'hostlist' command is provided to expand/collect hostlists and
-perform set operations on them. Example:
-
-  % hostlist n[1-10] n[5-20]
-  n[1-20]
-  % hostlist --difference n[1-10] n[5-20]
-  n[1-4]
-  % hostlist --expand --intersection n[1-10] n[5-20] 
-  n5
-  n6
-  n7
-  n8
-  n9
-  n10
-
-
-BUILDING
-========
-
-Build RPM packages from the tar.gz archive by running:
-
-  rpmbuild -ta python-hostlist-1.5.tar.gz
-
-If you do not have the tar archive, create it first:
-
-  python setup.py sdist
-  rpmbuild -ta dist/python-hostlist-1.5.tar.gz
-
-You may also install directly by running:
-
-  python setup.py build   (as yourself)
-  python setup.py install (as root) 
-
-
-RELEASES AND FEEDBACK
-=====================
-
-You will find new releases at:
-
-  http://www.nsc.liu.se/~kent/python-hostlist/
-
-If you have questions, suggestions, bug reports or patches, please
-send them to:
-
-  kent@nsc.liu.se.
diff --git a/contribs/python/hostlist/hostlist.py b/contribs/python/hostlist/hostlist.py
deleted file mode 100755
index b3b520336261c19eec0b8c7f25dce3bf50d3bcde..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/hostlist.py
+++ /dev/null
@@ -1,362 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# Hostlist library
-#
-# Copyright (C) 2008 Kent Engström <kent@nsc.liu.se>,
-#                    Thomas Bellman <bellman@nsc.liu.se> and
-#                    Pär Andersson <paran@nsc.liu.se>,
-#                    National Supercomputer Centre
-# 
-# This program 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.
-# 
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-"""Handle hostlist expressions.
-
-This module provides operations to expand and collect hostlist
-expressions.
-
-The hostlist expression syntax is the same as in several programs
-developed at LLNL (https://computing.llnl.gov/linux/). However in
-corner cases the behaviour of this module have not been compared for
-compatibility with pdsh/dshbak/SLURM et al.
-"""
-
-__version__ = "1.5"
-
-import re
-import itertools
-
-# Exception used for error reporting to the caller
-class BadHostlist(Exception): pass
-
-# Configuration to guard against ridiculously long expanded lists
-MAX_SIZE = 100000
-
-# Hostlist expansion
-
-def expand_hostlist(hostlist, allow_duplicates=False, sort=False):
-    """Expand a hostlist expression string to a Python list.
-
-    Example: expand_hostlist("n[9-11],d[01-02]") ==> 
-             ['n9', 'n10', 'n11', 'd01', 'd02']
-
-    Unless allow_duplicates is true, duplicates will be purged
-    from the results. If sort is true, the output will be sorted.
-    """
-
-    results = []
-    bracket_level = 0
-    part = ""
-    
-    for c in hostlist + ",":
-        if c == "," and bracket_level == 0:
-            # Comma at top level, split!
-            if part: results.extend(expand_part(part))
-            part = ""
-            bad_part = False
-        else:
-            part += c
-
-        if c == "[": bracket_level += 1
-        elif c == "]": bracket_level -= 1
-
-        if bracket_level > 1:
-            raise BadHostlist, "nested brackets"
-        elif bracket_level < 0:
-            raise BadHostlist, "unbalanced brackets"
-
-    if bracket_level > 0:
-        raise BadHostlist, "unbalanced brackets"
-
-    if not allow_duplicates:
-        results = remove_duplicates(results)
-    if sort:
-        results = numerically_sorted(results)
-    return results
-
-def expand_part(s):
-    """Expand a part (e.g. "x[1-2]y[1-3][1-3]") (no outer level commas)."""
-
-    # Base case: the empty part expand to the singleton list of ""
-    if s == "":
-        return [""]
-
-    # Split into:
-    # 1) prefix string (may be empty)
-    # 2) rangelist in brackets (may be missing)
-    # 3) the rest
-
-    m = re.match(r'([^,\[]*)(\[[^\]]*\])?(.*)', s)
-    (prefix, rangelist, rest) = m.group(1,2,3)
-
-    # Expand the rest first (here is where we recurse!)
-    rest_expanded = expand_part(rest)
-
-    # Expand our own part
-    if not rangelist:
-        # If there is no rangelist, our own contribution is the prefix only
-        us_expanded = [prefix]
-    else:
-        # Otherwise expand the rangelist (adding the prefix before)
-        us_expanded = expand_rangelist(prefix, rangelist[1:-1])
-
-    # Combine our list with the list from the expansion of the rest
-    # (but guard against too large results first)
-    if len(us_expanded) * len(rest_expanded) > MAX_SIZE:
-        raise BadHostlist, "results too large"
-
-    return [us_part + rest_part
-            for us_part in us_expanded
-            for rest_part in rest_expanded]
-
-def expand_rangelist(prefix, rangelist):
-    """ Expand a rangelist (e.g. "1-10,14"), putting a prefix before."""
-    
-    # Split at commas and expand each range separately
-    results = []
-    for range_ in rangelist.split(","):
-        results.extend(expand_range(prefix, range_))
-    return results
-
-def expand_range(prefix, range_):
-    """ Expand a range (e.g. 1-10 or 14), putting a prefix before."""
-
-    # Check for a single number first
-    m = re.match(r'^[0-9]+$', range_)
-    if m:
-        return ["%s%s" % (prefix, range_)]
-
-    # Otherwise split low-high
-    m = re.match(r'^([0-9]+)-([0-9]+)$', range_)
-    if not m:
-        raise BadHostlist, "bad range"
-
-    (s_low, s_high) = m.group(1,2)
-    low = int(s_low)
-    high = int(s_high)
-    width = len(s_low)
-
-    if high < low:
-        raise BadHostlist, "start > stop"
-    elif high - low > MAX_SIZE:
-        raise BadHostlist, "range too large"
-
-    results = []
-    for i in xrange(low, high+1):
-        results.append("%s%0*d" % (prefix, width, i))
-    return results
-
-def remove_duplicates(l):
-    """Remove duplicates from a list (but keep the order)."""
-    seen = set()
-    results = []
-    for e in l:
-        if e not in seen:
-            results.append(e)
-            seen.add(e)
-    return results
-
-# Hostlist collection
-
-def collect_hostlist(hosts, silently_discard_bad = False):
-    """Collect a hostlist string from a Python list of hosts.
-
-    We start grouping from the rightmost numerical part.
-    Duplicates are removed.
-
-    A bad hostname raises an exception (unless silently_discard_bad
-    is true causing the bad hostname to be silently discarded instead).
-    """
-
-    # Split hostlist into a list of (host, "") for the iterative part.
-    # (Also check for bad node names now)
-    # The idea is to move already collected numerical parts from the
-    # left side (seen by each loop) to the right side (just copied).
-
-    left_right = []
-    for host in hosts:
-        # We remove leading and trailing whitespace first, and skip empty lines
-        host = host.strip()
-        if host == "": continue
-
-        # We cannot accept a host containing any of the three special
-        # characters in the hostlist syntax (comma and flat brackets)
-        if re.search(r'[][,]', host):
-            if silently_discard_bad:
-                continue
-            else:
-                raise BadHostlist, "forbidden character"
-
-        left_right.append((host, ""))
-
-    # Call the iterative function until it says it's done
-    looping = True
-    while looping:
-        left_right, looping = collect_hostlist_1(left_right)
-    return ",".join([left + right for left, right in left_right])
-
-def collect_hostlist_1(left_right):
-    """Collect a hostlist string from a list of hosts (left+right).
-
-    The input is a list of tuples (left, right). The left part
-    is analyzed, while the right part is just passed along
-    (it can contain already collected range expressions).
-    """
-
-    # Scan the list of hosts (left+right) and build two things:
-    # *) a set of all hosts seen (used later)
-    # *) a list where each host entry is preprocessed for correct sorting
-
-    sortlist = []
-    remaining = set()
-    for left, right in left_right:
-        host = left + right
-        remaining.add(host)
-
-        # Match the left part into parts
-        m = re.match(r'^(.*?)([0-9]+)?([^0-9]*)$', left)
-        (prefix, num_str, suffix) = m.group(1,2,3)
-
-        # Add the right part unprocessed to the suffix.
-        # This ensures than an already computed range expression
-        # in the right part is not analyzed again.
-        suffix = suffix + right 
-
-        if num_str is None:
-            # A left part with no numeric part at all gets special treatment!
-            # The regexp matches with the whole string as the suffix,
-            # with nothing in the prefix or numeric parts.
-            # We do not want that, so we move it to the prefix and put
-            # None as a special marker where the suffix should be.
-            assert prefix == ""
-            sortlist.append(((host, None), None, None, host))
-        else:
-            # A left part with at least an numeric part
-            # (we care about the rightmost numeric part)
-            num_int = int(num_str)
-            num_width = len(num_str) # This width includes leading zeroes
-            sortlist.append(((prefix, suffix), num_int, num_width, host))
-
-    # Sort lexicographically, first on prefix, then on suffix, then on
-    # num_int (numerically), then...
-    # This determines the order of the final result.
-
-    sortlist.sort()
-
-    # We are ready to collect the result parts as a list of new (left,
-    # right) tuples.
-
-    results = []
-    needs_another_loop = False 
-
-    # Now group entries with the same prefix+suffix combination (the
-    # key is the first element in the sortlist) to loop over them and
-    # then to loop over the list of hosts sharing the same
-    # prefix+suffix combination.
-
-    for ((prefix, suffix), group) in itertools.groupby(sortlist,
-                                                       key=lambda x:x[0]):
-
-        if suffix is None:
-            # Special case: a host with no numeric part
-            results.append(("", prefix)) # Move everything to the right part
-            remaining.remove(prefix)
-        else:
-            # The general case. We prepare to collect a list of
-            # ranges expressed as (low, high, width) for later
-            # formatting.
-            range_list = []
-    
-            for ((prefix2, suffix2), num_int, num_width, host) in group:
-                if host not in remaining:
-                    # Below, we will loop internally to enumate a whole range
-                    # at a time. We then remove the covered hosts from the set.
-                    # Therefore, skip the host here if it is gone from the set.
-                    continue
-                assert num_int is not None
-
-                # Scan for a range starting at the current host
-                low = num_int
-                while True:
-                    host = "%s%0*d%s" % (prefix, num_width, num_int, suffix)
-                    if host in remaining:
-                        remaining.remove(host)
-                        num_int += 1
-                    else:
-                        break
-                high = num_int - 1
-                assert high >= low
-                range_list.append((low, high, num_width))
-
-            # We have a list of ranges to format. We make sure
-            # we move our handled numerical part to the right to
-            # stop it from being processed again.
-            needs_another_loop = True
-            if len(range_list) == 1 and range_list[0][0] == range_list[0][1]:
-                # Special case to make sure that n1 is not shown as n[1] etc
-                results.append((prefix,
-                                "%0*d%s" % 
-                               (range_list[0][2], range_list[0][0], suffix)))
-            else:
-                # General case where high > low
-                results.append((prefix, "[" + \
-                                   ",".join([format_range(l, h, w)
-                                             for l, h, w in range_list]) + \
-                                   "]" + suffix))
-
-    # At this point, the set of remaining hosts should be empty and we
-    # are ready to return the result, together with the flag that says
-    # if we need to loop again (we do if we have added something to a
-    # left part).
-    assert not remaining
-    return results, needs_another_loop
-
-def format_range(low, high, width):
-    """Format a range from low to high inclusively, with a certain width."""
-
-    if low == high:
-        return "%0*d" % (width, low)
-    else:
-        return "%0*d-%0*d" % (width, low, width, high)
-
-# Sort a list of hosts numerically
-
-def numerically_sorted(l):
-    """Sort a list of hosts numerically.
-
-    E.g. sorted order should be n1, n2, n10; not n1, n10, n2.
-    """
-
-    return sorted(l, key=numeric_sort_key)
-
-def int_if_possible(x):
-    try:
-        return int(x)
-    except:
-        return x
-
-def numeric_sort_key(x):
-    return [int_if_possible(n) for n in re.findall("([0-9]+|[^0-9]+)", x)]
-
-    
-#
-# Keep this part to tell users where the command line interface went
-#
-
-if __name__ == '__main__':
-    import os, sys
-    sys.stderr.write("The command line utility has been moved to a separate 'hostlist' program.\n")
-    sys.exit(os.EX_USAGE)
diff --git a/contribs/python/hostlist/python-hostlist-1.6.tar.gz b/contribs/python/hostlist/python-hostlist-1.6.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..82faea290b2ca0355ade5c5e27a451d1fa012580
Binary files /dev/null and b/contribs/python/hostlist/python-hostlist-1.6.tar.gz differ
diff --git a/contribs/python/hostlist/python-hostlist.spec b/contribs/python/hostlist/python-hostlist.spec
deleted file mode 100644
index 9c2ce0df12ed3831f0beaf596e8689d169ffecb3..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/python-hostlist.spec
+++ /dev/null
@@ -1,51 +0,0 @@
-%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
-
-Name:           python-hostlist
-Version:        1.5
-Release:        1
-Summary:        Python module for hostlist handling
-Vendor:         NSC
-
-Group:          Development/Languages
-License:        GPL2+
-URL:            http://www.nsc.liu.se/~kent/python-hostlist/
-Source0:        http://www.nsc.liu.se/~kent/python-hostlist/%{name}-%{version}.tar.gz
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-
-BuildArch:      noarch
-BuildRequires:  python-devel
-
-%description
-The hostlist.py module knows how to expand and collect hostlist
-expressions. The package also includes the 'hostlist' binary which can
-be used to collect/expand hostlists and perform set operations on
-them.
-
-%prep
-%setup -q
-
-
-%build
-%{__python} setup.py build
-
-
-%install
-rm -rf $RPM_BUILD_ROOT
-%{__python} setup.py install -O1 --skip-build --prefix /usr --root $RPM_BUILD_ROOT
-
- 
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-
-%files
-%defattr(-,root,root,-)
-%doc README
-%doc COPYING
-%doc CHANGES
-%{python_sitelib}/*
-/usr/bin/hostlist
-/usr/bin/hostgrep
-/usr/share/man/man1/hostlist.1.gz
-/usr/share/man/man1/hostgrep.1.gz
-%changelog
diff --git a/contribs/python/hostlist/setup.py b/contribs/python/hostlist/setup.py
deleted file mode 100644
index 57199e70754092c3c7552df04def48f5870914a9..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/setup.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from distutils.core import setup
-
-# Python 2/3 installation trick from .../Demo/distutils/test2to3
-try:
-    from distutils.command.build_py import build_py_2to3 as build_py
-except ImportError:
-    from distutils.command.build_py import build_py
-
-try:
-    from distutils.command.build_scripts import build_scripts_2to3 as build_scripts
-except ImportError:
-    from distutils.command.build_scripts import build_scripts
-
-# Version
-VERSION = "1.5"
-if "#" in VERSION:
-    import sys
-    sys.stderr.write("Bad version %s\n" % VERSION)
-    sys.exit(1)
-
-
-setup(name         = "python-hostlist",
-      version      = VERSION,
-      description  = "Python module for hostlist handling",
-      long_description = "The hostlist.py module knows how to expand and collect hostlist expressions.",
-      author       = "Kent Engström",
-      author_email = "kent@nsc.liu.se",
-      url          = "http://www.nsc.liu.se/~kent/python-hostlist/",
-      license      = "GPL2+",
-      classifiers  = ['Development Status :: 5 - Production/Stable',
-                      'Intended Audience :: Science/Research',
-                      'Intended Audience :: System Administrators',
-                      'License :: OSI Approved :: GNU General Public License (GPL)',
-                      'Topic :: System :: Clustering',
-                      'Topic :: System :: Systems Administration',
-                      'Programming Language :: Python :: 2',
-                      'Programming Language :: Python :: 3',
-                      ],
-      py_modules   = ["hostlist"],
-      scripts      = ["hostlist", "hostgrep"],
-      data_files   = [("share/man/man1", ["hostlist.1",
-                                          "hostgrep.1"])],
-      cmdclass     = {'build_py':build_py,
-                      'build_scripts':build_scripts,
-                      }
-      )
diff --git a/contribs/python/hostlist/test/Makefile.am b/contribs/python/hostlist/test/Makefile.am
deleted file mode 100644
index c795271fb0b6294ebd9c72016d66d57ac359b381..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/test/Makefile.am
+++ /dev/null
@@ -1,2 +0,0 @@
-EXTRA_DIST = 		\
-	test_hostlist.py
diff --git a/contribs/python/hostlist/test/Makefile.in b/contribs/python/hostlist/test/Makefile.in
deleted file mode 100644
index f6afe23be57b0b4fdad729869e1102cb99d4a26c..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/test/Makefile.in
+++ /dev/null
@@ -1,430 +0,0 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-subdir = contribs/python/hostlist/test
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.m4 \
-	$(top_srcdir)/auxdir/libtool.m4 \
-	$(top_srcdir)/auxdir/ltoptions.m4 \
-	$(top_srcdir)/auxdir/ltsugar.m4 \
-	$(top_srcdir)/auxdir/ltversion.m4 \
-	$(top_srcdir)/auxdir/lt~obsolete.m4 \
-	$(top_srcdir)/auxdir/slurm.m4 \
-	$(top_srcdir)/auxdir/x_ac__system_configuration.m4 \
-	$(top_srcdir)/auxdir/x_ac_affinity.m4 \
-	$(top_srcdir)/auxdir/x_ac_aix.m4 \
-	$(top_srcdir)/auxdir/x_ac_blcr.m4 \
-	$(top_srcdir)/auxdir/x_ac_bluegene.m4 \
-	$(top_srcdir)/auxdir/x_ac_cflags.m4 \
-	$(top_srcdir)/auxdir/x_ac_cray.m4 \
-	$(top_srcdir)/auxdir/x_ac_databases.m4 \
-	$(top_srcdir)/auxdir/x_ac_debug.m4 \
-	$(top_srcdir)/auxdir/x_ac_elan.m4 \
-	$(top_srcdir)/auxdir/x_ac_env.m4 \
-	$(top_srcdir)/auxdir/x_ac_federation.m4 \
-	$(top_srcdir)/auxdir/x_ac_gpl_licensed.m4 \
-	$(top_srcdir)/auxdir/x_ac_gtk.m4 \
-	$(top_srcdir)/auxdir/x_ac_iso.m4 \
-	$(top_srcdir)/auxdir/x_ac_munge.m4 \
-	$(top_srcdir)/auxdir/x_ac_ncurses.m4 \
-	$(top_srcdir)/auxdir/x_ac_pam.m4 \
-	$(top_srcdir)/auxdir/x_ac_ptrace.m4 \
-	$(top_srcdir)/auxdir/x_ac_readline.m4 \
-	$(top_srcdir)/auxdir/x_ac_setpgrp.m4 \
-	$(top_srcdir)/auxdir/x_ac_setproctitle.m4 \
-	$(top_srcdir)/auxdir/x_ac_sgi_job.m4 \
-	$(top_srcdir)/auxdir/x_ac_slurm_ssl.m4 \
-	$(top_srcdir)/auxdir/x_ac_sun_const.m4 \
-	$(top_srcdir)/auxdir/x_ac_xcpu.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/slurm/slurm.h
-CONFIG_CLEAN_FILES =
-SOURCES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTHD_CFLAGS = @AUTHD_CFLAGS@
-AUTHD_LIBS = @AUTHD_LIBS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BG_INCLUDES = @BG_INCLUDES@
-BLCR_CPPFLAGS = @BLCR_CPPFLAGS@
-BLCR_HOME = @BLCR_HOME@
-BLCR_LDFLAGS = @BLCR_LDFLAGS@
-BLCR_LIBS = @BLCR_LIBS@
-BLUEGENE_LOADED = @BLUEGENE_LOADED@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CMD_LDFLAGS = @CMD_LDFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-ELAN_LIBS = @ELAN_LIBS@
-EXEEXT = @EXEEXT@
-FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
-FGREP = @FGREP@
-GREP = @GREP@
-GTK2_CFLAGS = @GTK2_CFLAGS@
-GTK2_LIBS = @GTK2_LIBS@
-HAVEMYSQLCONFIG = @HAVEMYSQLCONFIG@
-HAVEPGCONFIG = @HAVEPGCONFIG@
-HAVEPKGCONFIG = @HAVEPKGCONFIG@
-HAVE_AIX = @HAVE_AIX@
-HAVE_ELAN = @HAVE_ELAN@
-HAVE_FEDERATION = @HAVE_FEDERATION@
-HAVE_OPENSSL = @HAVE_OPENSSL@
-HAVE_SOME_CURSES = @HAVE_SOME_CURSES@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIB_LDFLAGS = @LIB_LDFLAGS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-MUNGE_CPPFLAGS = @MUNGE_CPPFLAGS@
-MUNGE_LDFLAGS = @MUNGE_LDFLAGS@
-MUNGE_LIBS = @MUNGE_LIBS@
-MYSQL_CFLAGS = @MYSQL_CFLAGS@
-MYSQL_LIBS = @MYSQL_LIBS@
-NCURSES = @NCURSES@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUMA_LIBS = @NUMA_LIBS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PAM_LIBS = @PAM_LIBS@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PGSQL_CFLAGS = @PGSQL_CFLAGS@
-PGSQL_LIBS = @PGSQL_LIBS@
-PLPA_LIBS = @PLPA_LIBS@
-PROCTRACKDIR = @PROCTRACKDIR@
-PROJECT = @PROJECT@
-PTHREAD_CC = @PTHREAD_CC@
-PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-RANLIB = @RANLIB@
-READLINE_LIBS = @READLINE_LIBS@
-RELEASE = @RELEASE@
-SED = @SED@
-SEMAPHORE_LIBS = @SEMAPHORE_LIBS@
-SEMAPHORE_SOURCES = @SEMAPHORE_SOURCES@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SLURMCTLD_PORT = @SLURMCTLD_PORT@
-SLURMDBD_PORT = @SLURMDBD_PORT@
-SLURMD_PORT = @SLURMD_PORT@
-SLURM_API_AGE = @SLURM_API_AGE@
-SLURM_API_CURRENT = @SLURM_API_CURRENT@
-SLURM_API_MAJOR = @SLURM_API_MAJOR@
-SLURM_API_REVISION = @SLURM_API_REVISION@
-SLURM_API_VERSION = @SLURM_API_VERSION@
-SLURM_MAJOR = @SLURM_MAJOR@
-SLURM_MICRO = @SLURM_MICRO@
-SLURM_MINOR = @SLURM_MINOR@
-SLURM_PREFIX = @SLURM_PREFIX@
-SLURM_VERSION = @SLURM_VERSION@
-SO_LDFLAGS = @SO_LDFLAGS@
-SSL_CPPFLAGS = @SSL_CPPFLAGS@
-SSL_LDFLAGS = @SSL_LDFLAGS@
-SSL_LIBS = @SSL_LIBS@
-STRIP = @STRIP@
-UTIL_LIBS = @UTIL_LIBS@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_vendor = @target_vendor@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-EXTRA_DIST = \
-	test_hostlist.py
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  contribs/python/hostlist/test/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  contribs/python/hostlist/test/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/contribs/python/hostlist/test/test_hostlist.py b/contribs/python/hostlist/test/test_hostlist.py
deleted file mode 100644
index d539742df392842dc18f0d3b6511492b64b12125..0000000000000000000000000000000000000000
--- a/contribs/python/hostlist/test/test_hostlist.py
+++ /dev/null
@@ -1,123 +0,0 @@
-from hostlist import expand_hostlist, collect_hostlist, BadHostlist
-import unittest
-
-class TestExpand1(unittest.TestCase):
-
-    def expand_eq(self, hostlist, expanded_list):
-        self.assertEqual(expand_hostlist(hostlist), expanded_list)
-
-    def expand_sort_eq(self, hostlist, expanded_list):
-        self.assertEqual(expand_hostlist(hostlist, sort=True), expanded_list)
-
-    def expand_length(self, hostlist, expanded_length):
-        self.assertEqual(len(expand_hostlist(hostlist)), expanded_length)
-
-    def expand_bad(self, hostlist):
-        self.assertRaises(BadHostlist, expand_hostlist,  hostlist)
-
-    def test_expand(self):
-        self.expand_eq("n[9-11]", ["n9", "n10", "n11"])
-        self.expand_sort_eq("n[9-11]", ["n9", "n10", "n11"])
-        self.expand_eq("n[09-11]", ["n09", "n10", "n11"])
-        self.expand_eq("n[009-11]", ["n009", "n010", "n011"])
-        self.expand_sort_eq("n[009-11]", ["n009", "n010", "n011"])
-        self.expand_eq("n[009-011]", ["n009", "n010", "n011"])
-
-        self.expand_eq("n[17-17]", ["n17"])
-        self.expand_eq("n1,n3", ["n1", "n3"])
-        self.expand_sort_eq("n1,n3", ["n1", "n3"])
-        self.expand_eq("n3,n1", ["n3", "n1"])
-        self.expand_sort_eq("n3,n1", ["n1", "n3"])
-        self.expand_eq("n1,n3,n1", ["n1", "n3"])
-        self.expand_sort_eq("n1,n3,n1", ["n1", "n3"])
-        self.expand_eq("n3,n1,n3", ["n3", "n1"])
-        self.expand_sort_eq("n3,n1,n3", ["n1", "n3"])
-
-        self.expand_eq("n[1],n3", ["n1", "n3"])
-        self.expand_eq("n[1,3]", ["n1", "n3"])
-        self.expand_eq("n[3,1]", ["n3", "n1"])
-        self.expand_sort_eq("n[3,1]", ["n1", "n3"])
-        self.expand_eq("n[1,3,1]", ["n1", "n3"])
-
-        self.expand_eq("n1,n2,n[9-11],n3", ["n1", "n2", "n9", "n10", "n11", "n3"])
-
-        self.expand_eq("n[1-3]m[4-6]", ["n1m4", "n1m5", "n1m6",
-                                        "n2m4", "n2m5", "n2m6",
-                                        "n3m4", "n3m5", "n3m6"])
-        self.expand_eq("n[1-2][4-5]m", ["n14m", "n15m",
-                                        "n24m", "n25m"])
-        self.expand_eq("[1-2][4-5]", ["14", "15",
-                                      "24", "25"])
-
-        self.expand_length("n[1-100]m[1-100]", 100*100)
-        self.expand_length("[1-10][1-10][1-10]", 10*10*10)
-
-        self.expand_eq("n[1-5,3-8]", ["n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8"])
-        self.expand_eq("n[3-8,1-5]", ["n3", "n4", "n5", "n6", "n7", "n8", "n1", "n2"])
-        self.expand_sort_eq("n[3-8,1-5]", ["n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8"])
-
-        self.expand_eq("", [])
-
-        self.expand_bad("n[]")
-        self.expand_bad("n[-]")
-        self.expand_bad("n[1-]")
-        self.expand_bad("n[-1]")
-        self.expand_bad("n[1,]")
-        self.expand_bad("n[,1]")
-        self.expand_bad("n[1-3,]")
-        self.expand_bad("n[,1-3]")
-        self.expand_bad("n[3-1]")
-        self.expand_bad("n[")
-        self.expand_bad("n]")
-        self.expand_bad("n[[]]")
-        self.expand_bad("n[1,[]]")
-        self.expand_bad("n[x]")
-        self.expand_bad("n[1-10x]")
-
-        self.expand_bad("n[1-1000000]")
-        self.expand_bad("n[1-1000][1-1000]")
-
-    def collect_eq(self, hostlist, expanded_list):
-        # Note the order of the arguments! This makes it easier to
-        # copy tests between the expand and collect parts!
-        self.assertEqual(hostlist, collect_hostlist(expanded_list))
-
-    def test_collect(self):
-        self.collect_eq("n[9-11]", ["n9", "n10", "n11"])
-        self.collect_eq("n[09-11]", ["n09", "n10", "n11"])
-        self.collect_eq("n[009-011]", ["n009", "n010", "n011"])
-
-        self.collect_eq("n[1-3,9-11]", ["n1", "n2", "n9", "n10", "n11", "n3"])
-
-        self.collect_eq("m1,n[9-11],p[7-8]", ["n9", "n10", "p7", "m1", "n11", "p8"])
-
-        self.collect_eq("x[1-2]y[4-5]", ["x1y4", "x1y5",
-                                         "x2y4", "x2y5"])
-        self.collect_eq("[1-2]y[4-5]z", ["1y4z", "1y5z",
-                                         "2y4z", "2y5z"])
-
-        self.collect_eq("x1y[4-5],x2y4", ["x1y4", "x1y5", "x2y4"])
-        self.collect_eq("x1y5,x2y[4-5]", ["x1y5", "x2y4", "x2y5"])
-        self.collect_eq("x1y5,x2y4", ["x1y5", "x2y4"])
-
-        self.collect_eq("", [""])
-
-        self.collect_eq("n[9,09]", ["n09","n9"])
-        self.collect_eq("n[9,09]", ["n9","n09"])
-        self.collect_eq("n[9-10]", ["n9","n10"])
-        self.collect_eq("n[09-10]", ["n09","n10"])
-        self.collect_eq("n[009,10]", ["n009","n10"])
-
-        self.collect_eq("x", ["x"])
-        self.collect_eq("x", ["x", "x"])
-        self.collect_eq("x,y", ["x", "y", "x"])
-
-        self.collect_eq("n1", ["n1"])
-        self.collect_eq("n1", ["n1", "n1"])
-        self.collect_eq("n[1-2]", ["n1", "n2", "n1"])
-
-        self.collect_eq("x,y[10-12],z", ["z","y10","y12", "x", "y11"])
-
-    
-if __name__ == '__main__':
-    unittest.main()
diff --git a/doc/html/configurator.html.in b/doc/html/configurator.html.in
index c1a22288f71e320d9ff4b9d7e0e114fbde34e0c5..6619d7f8a3a5c873201fdc4af8aa1860ccfa3e03 100644
--- a/doc/html/configurator.html.in
+++ b/doc/html/configurator.html.in
@@ -162,7 +162,7 @@ function displayfile()
    "#MailProg=/bin/mail <br>" +
    "#MaxJobCount=5000 <br>" +
    "MpiDefault=" + get_radio_value(document.config.mpi_default) + "<br>" +
-   "#MpiParams=ports:#-# <br>" +
+   "#MpiParams=ports=#-# <br>" +
    "#PluginDir= <br>" +
    "#PlugStackConfig= <br>" +
    "#PrivateData=jobs <br>" +
diff --git a/doc/man/man1/sacct.1 b/doc/man/man1/sacct.1
index a1821d37b9cf94fd5589e1570ad26df85c627531..a67e5db4cdf2bbc20973781973f5aaac52348b0c 100644
--- a/doc/man/man1/sacct.1
+++ b/doc/man/man1/sacct.1
@@ -242,7 +242,7 @@ NOTE: When using the format option for listing various fields you can put a
 %NUMBER afterwards to specify how many characters should be printed.
 
 i.e. format=name%30 will print 30 characters of field name right
-justified.  A -30 will print 30 characters left justified.  
+justified.  A \-30 will print 30 characters left justified.  
 .IP 
 
 .TP 
diff --git a/doc/man/man1/sacctmgr.1 b/doc/man/man1/sacctmgr.1
index 8d88b7b7c558f3796ea1c411d11f4a77fba787ac..c4abf11065a831dc35fd153da2bac2f0a2256f0e 100644
--- a/doc/man/man1/sacctmgr.1
+++ b/doc/man/man1/sacctmgr.1
@@ -686,7 +686,7 @@ When using the format option for listing various fields you can put a
 %NUMBER afterwards to specify how many characters should be printed.
 
 i.e. format=name%30 will print 30 characters of field name right
-justified.  A -30 will print 30 characters left justified.  
+justified.  A \-30 will print 30 characters left justified.  
 
 .SH "FLAT FILE DUMP AND LOAD"
 sacctmgr has the capability to load and dump SLURM association data to and
diff --git a/doc/man/man1/smap.1 b/doc/man/man1/smap.1
index c0522ab6c7604c8a17d226db189a3071953a22c9..44b20942b881ced763db9fc529f82a864c5c3aba 100644
--- a/doc/man/man1/smap.1
+++ b/doc/man/man1/smap.1
@@ -269,8 +269,12 @@ The default value is TORUS.
 \fBSmall\fR
 Equivalent to "Connection=Small".
 If a small connection is specified the base partition chosen will create 
-smaller partitions based on options \fBNodeCards\fR and \fBQuarters\fR
-within the base partition.  These number will be altered to take up the 
+smaller partitions based on options \fB32CNBlocks\fR and 
+\fB128CNBlocks\fR respectively for a Bluegene L system.  
+\fB16CNBlocks\fR, \fB64CNBlocks\fR, and \fB256CNBlocks\fR are also
+available for Bluegene P systems.  Keep in mind you 
+must have enough ionodes to make all these configurations possible.
+  These number will be altered to take up the 
 entire base partition. Size does not need to be specified with a small 
 request, we will always default to 1 base partition for allocation.
 .TP
diff --git a/doc/man/man1/sreport.1 b/doc/man/man1/sreport.1
index ba5d2224d41762d6326d2a023c742159c625f62e..e4c071972fdb29dbb09bf683f76d9734dce8716d 100644
--- a/doc/man/man1/sreport.1
+++ b/doc/man/man1/sreport.1
@@ -227,7 +227,7 @@ When using the format option for listing various fields you can put a
 %NUMBER afterwards to specify how many characters should be printed.
 
 i.e. format=name%30 will print 30 characters of field name right
-justified.  A -30 will print 30 characters left justified.  
+justified.  A \-30 will print 30 characters left justified.  
 
 .TP
 .B Start=<OPT>
diff --git a/doc/man/man5/bluegene.conf.5 b/doc/man/man5/bluegene.conf.5
index 484360c5112e4c18050680505100fecab7625a0a..41973e3ffb74e9f18ec07d8bd78a8780212316bb 100644
--- a/doc/man/man5/bluegene.conf.5
+++ b/doc/man/man5/bluegene.conf.5
@@ -198,8 +198,12 @@ The default value is TORUS.
 .TP
 \fBSMALL\fR: The base partition is divided into more than one bgblock.
 The administrator should define the number of single node cards and 
-quarter base partition blocks using the options \fBNodeCards\fR and 
-\fBQuarters\fR respectively. 
+quarter base partition blocks using the options \fB32CNBlocks\fR and 
+\fB128CNBlocks\fR respectively for a Bluegene L system.  \fB16CNBlocks\fR, 
+\fB64CNBlocks\fR, and \fB256CNBlocks\fR are also available for 
+Bluegene P systems.  Keep in mind you 
+must have enough ionodes to make all these configurations possible.
+
 The total number of c\-nodes in defined blocks must not exceed
 \fBBasePartitionNodeCnt\fR.
 If not specified, the base partition will be divided into four 
@@ -259,9 +263,9 @@ BPs=[320x323] Type=TORUS          # 1x1x4 =  4
 .br
 BPs=[330x331] Type=TORUS          # 1x1x2 =  2
 .br
-BPs=[332x332] Type=TORUS          # 1x1x1 =  1
+BPs=[332] Type=TORUS          # 1x1x1 =  1
 .br
-BPs=[333x333] Type=SMALL NodeCards=4 Quarters=3 # 1/16 * 4 + 1/4 * 3
+BPs=[333] Type=SMALL 32CNBlocks=4 128CNBlocks=3 # 1/16 * 4 + 1/4 * 3
 
 .SH "COPYING"
 Copyright (C) 2006 The Regents of the University of California.
diff --git a/doc/man/man5/slurm.conf.5 b/doc/man/man5/slurm.conf.5
index 1fc3d6d6ceb82567029b85ff8d24ef54a0c26203..089c2d479d531fe96629e2061c819edaef5f0dcf 100644
--- a/doc/man/man5/slurm.conf.5
+++ b/doc/man/man5/slurm.conf.5
@@ -566,13 +566,13 @@ Also see \fBDefaultStorageUser\fR.
 \fBJobCredentialPrivateKey\fR
 Fully qualified pathname of a file containing a private key used for 
 authentication by SLURM daemons.
-This parameter is ignored if \fBCryptType=munge\fR.
+This parameter is ignored if \fBCryptoType=crypto/munge\fR.
 
 .TP
 \fBJobCredentialPublicCertificate\fR
 Fully qualified pathname of a file containing a public key used for 
 authentication by SLURM daemons.
-This parameter is ignored if \fBCryptType=munge\fR.
+This parameter is ignored if \fBCryptoType=crypto/munge\fR.
 
 .TP
 \fBJobFileAppend\fR
@@ -1467,6 +1467,7 @@ Related configuration options include \fBResumeTimeout\fR, \fBResumeProgram\fR,
 Nodes which remain idle for this number of seconds will be placed into 
 power save mode by \fBSuspendProgram\fR. 
 A value of \-1 disables power save mode and is the default.
+The maximum value is 65534 (18.2 hours).
 Related configuration options include \fBResumeTimeout\fR, \fBResumeProgram\fR, 
 \fBResumeRate\fR, \fBSuspendProgram\fR, \fBSuspendRate\fR, \fBSuspendTimeout\fR, 
 \fBSuspendExcNodes\fR, and \fBSuspendExcParts\fR.
diff --git a/slurm.spec b/slurm.spec
index 6c870083098d31b001a59dc3436878e1d7b9e121..18f5691cb9bd4cec6462e7f54b6f1356a7662795 100644
--- a/slurm.spec
+++ b/slurm.spec
@@ -75,14 +75,14 @@
 %endif
 
 Name:    slurm
-Version: 2.0.5
+Version: 2.0.7
 Release: 1%{?dist}
 
 Summary: Simple Linux Utility for Resource Management
 
 License: GPL 
 Group: System Environment/Base
-Source: slurm-2.0.5.tar.bz2
+Source: slurm-2.0.7.tar.bz2
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
 URL: https://computing.llnl.gov/linux/slurm/
 
@@ -269,7 +269,7 @@ SLURM process tracking plugin for SGI job containers.
 #############################################################################
 
 %prep
-%setup -n slurm-2.0.5
+%setup -n slurm-2.0.7
 
 %build
 %configure --program-prefix=%{?_program_prefix:%{_program_prefix}} \
diff --git a/src/common/read_config.c b/src/common/read_config.c
index ec6e36d768009f1d2ca3d8831ceed72d1c8ff1b4..f8e396aa962ad94463e6650971f29b83dee95e2f 100644
--- a/src/common/read_config.c
+++ b/src/common/read_config.c
@@ -2378,9 +2378,16 @@ _validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	s_p_get_string(&conf->suspend_program, "SuspendProgram", hashtbl);
 	if (!s_p_get_uint16(&conf->suspend_rate, "SuspendRate", hashtbl))
 		conf->suspend_rate = DEFAULT_SUSPEND_RATE;
-	if (s_p_get_long(&long_suspend_time, "SuspendTime", hashtbl))
-		conf->suspend_time = long_suspend_time + 1;
-	else
+	if (s_p_get_long(&long_suspend_time, "SuspendTime", hashtbl)) {
+		if (long_suspend_time >= 0xfffe) {
+			error("SuspendTime value (%ld) is greater than 65534",
+			      long_suspend_time);
+		} else if (long_suspend_time < -1) {
+			error("SuspendTime value (%ld) is less than -1",
+			      long_suspend_time);
+		} else
+			conf->suspend_time = long_suspend_time + 1;
+	} else
 		conf->suspend_time = 0;
 	if (!s_p_get_uint16(&conf->suspend_timeout, "SuspendTimeout", hashtbl))
 		conf->suspend_timeout = DEFAULT_SUSPEND_TIMEOUT;
diff --git a/src/common/stepd_api.c b/src/common/stepd_api.c
index 939974569740e57eda3196b0b3f6f498ff6abfe3..0c446152d5841aa3e4e294e2a5fbd3efcdf7d9d8 100644
--- a/src/common/stepd_api.c
+++ b/src/common/stepd_api.c
@@ -1,6 +1,6 @@
 /*****************************************************************************\
  *  src/common/stepd_api.c - slurmstepd message API
- *  $Id: stepd_api.c 16867 2009-03-12 16:35:42Z jette $
+ *  $Id: stepd_api.c 18732 2009-09-21 21:34:51Z lipari $
  *****************************************************************************
  *  Copyright (C) 2005-2007 The Regents of the University of California.
  *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
@@ -203,7 +203,8 @@ stepd_connect(const char *directory, const char *nodename,
 	int len;
 
 	if (nodename == NULL) {
-		nodename = _guess_nodename();
+		if (!(nodename = _guess_nodename()))
+			return -1;
 	}
 	if (directory == NULL) {
 		slurm_ctl_conf_t *cf;
diff --git a/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c b/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c
index 938c163ee2220490d4661c3fc7b8c1deddcf3132..1a679da662460eac7d14a0a92367ee4412f83e88 100644
--- a/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c
+++ b/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c
@@ -1640,6 +1640,9 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 			      last_submit);
 			return SLURM_ERROR;
 		}
+		time_tm.tm_sec = 0;
+		time_tm.tm_min = 0;
+		time_tm.tm_hour = 0;
 		time_tm.tm_mday = 1;
 		time_tm.tm_mon -= arch_cond->purge_event;
 		time_tm.tm_isdst = -1;
@@ -1724,6 +1727,9 @@ exit_events:
 			      last_submit);
 			return SLURM_ERROR;
 		}
+		time_tm.tm_sec = 0;
+		time_tm.tm_min = 0;
+		time_tm.tm_hour = 0;
 		time_tm.tm_mday = 1;
 		time_tm.tm_mon -= arch_cond->purge_suspend;
 		time_tm.tm_isdst = -1;
@@ -1807,6 +1813,10 @@ exit_suspend:
 			      last_submit);
 			return SLURM_ERROR;
 		}
+		time_tm.tm_sec = 0;
+		time_tm.tm_min = 0;
+		time_tm.tm_hour = 0;
+		time_tm.tm_mday = 1;
 		time_tm.tm_mon -= arch_cond->purge_step;
 		time_tm.tm_isdst = -1;
 		curr_end = mktime(&time_tm);
@@ -1891,6 +1901,9 @@ exit_steps:
 			      last_submit);
 			return SLURM_ERROR;
 		}
+		time_tm.tm_sec = 0;
+		time_tm.tm_min = 0;
+		time_tm.tm_hour = 0;
 		time_tm.tm_mday = 1;
 		time_tm.tm_mon -= arch_cond->purge_job;
 		time_tm.tm_isdst = -1;
diff --git a/src/plugins/sched/backfill/backfill.c b/src/plugins/sched/backfill/backfill.c
index 730247c93d61ce58ed23fd30d648125d63ae1b01..fde0b4696ab6961c0861bae0e2bf25bc70df91f5 100644
--- a/src/plugins/sched/backfill/backfill.c
+++ b/src/plugins/sched/backfill/backfill.c
@@ -386,7 +386,7 @@ static void _attempt_backfill(void)
 		if ((part_ptr->root_only) && filter_root)
 			continue;
 
-		if ((!job_independent(job_ptr)) ||
+		if ((!job_independent(job_ptr, 0)) ||
 		    (license_job_test(job_ptr) != SLURM_SUCCESS))
 			continue;
 
@@ -438,8 +438,8 @@ static void _attempt_backfill(void)
 		bit_and(avail_bitmap, up_node_bitmap);
 		for (j=0; ; ) {
 			if (node_space[j].end_time < start_res)
-				continue;
-			if (node_space[j].begin_time <= end_time) {
+				;
+			else if (node_space[j].begin_time <= end_time) {
 				bit_and(avail_bitmap, 
 					node_space[j].avail_bitmap);
 			} else
@@ -534,7 +534,7 @@ static int _start_job(struct job_record *job_ptr, bitstr_t *resv_bitmap)
 	static uint32_t fail_jobid = 0;
 
 	if (job_ptr->details->exc_node_bitmap) {
-		orig_exc_nodes = job_ptr->details->exc_node_bitmap;
+		orig_exc_nodes = bit_copy(job_ptr->details->exc_node_bitmap);
 		bit_or(job_ptr->details->exc_node_bitmap, resv_bitmap);
 	} else
 		job_ptr->details->exc_node_bitmap = bit_copy(resv_bitmap);
diff --git a/src/plugins/sched/wiki/get_jobs.c b/src/plugins/sched/wiki/get_jobs.c
index 3362472cb56a12e234211f9d03138721ddcc794e..b428234e8ccec2cbd01a8a133b545d30a8e0e07e 100644
--- a/src/plugins/sched/wiki/get_jobs.c
+++ b/src/plugins/sched/wiki/get_jobs.c
@@ -2,7 +2,7 @@
  *  get_jobs.c - Process Wiki get job info request
  *****************************************************************************
  *  Copyright (C) 2006-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
  *  CODE-OCEC-09-009. All rights reserved.
@@ -240,9 +240,9 @@ static char *	_dump_job(struct job_record *job_ptr, time_t update_time)
 		}
 	} else if (!IS_JOB_FINISHED(job_ptr)) {
 		char *hosts = _task_list(job_ptr);
-		snprintf(tmp, sizeof(tmp),
-			"TASKLIST=%s;", hosts);
-		xstrcat(buf, tmp);
+		xstrcat(buf,"TASKLIST=");
+		xstrcat(buf, hosts);
+		xstrcat(buf, ";");
 		xfree(hosts);
 	}
 
diff --git a/src/plugins/select/bluegene/block_allocator/block_allocator.c b/src/plugins/select/bluegene/block_allocator/block_allocator.c
index 90d70127497188343f5462d1fe05e90c6ead9568..a2b8719d4c4708106b07e5d30f5c049136764b4e 100644
--- a/src/plugins/select/bluegene/block_allocator/block_allocator.c
+++ b/src/plugins/select/bluegene/block_allocator/block_allocator.c
@@ -1,7 +1,7 @@
 /*****************************************************************************\
  *  block_allocator.c - Assorted functions for layout of bluegene blocks, 
  *	 wiring, mapping for smap, etc.
- *  $Id: block_allocator.c 18612 2009-09-02 19:00:21Z da $
+ *  $Id: block_allocator.c 18838 2009-10-08 16:59:14Z da $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
@@ -1839,9 +1839,8 @@ extern int reset_all_removed_bps()
 		int y, z;
 		for (y = 0; y < DIM_SIZE[Y]; y++)
 			for (z = 0; z < DIM_SIZE[Z]; z++) 
-				if(ba_system_ptr->grid[x][y][z].used == 2) {
+				if(ba_system_ptr->grid[x][y][z].used == 2)
 					ba_system_ptr->grid[x][y][z].used = 0;
-				}
 #else
 		if(ba_system_ptr->grid[x].used == 2)
 			ba_system_ptr->grid[x].used = 0;
@@ -1851,10 +1850,11 @@ extern int reset_all_removed_bps()
 }
 
 /*
- * IN: hostlist of midplanes we do not want
+ * IN: hostlist of midplanes we want to be able to use, mark all
+ *     others as used.
  * RET: SLURM_SUCCESS on success, or SLURM_ERROR on error
  *
- * Need to call rest_all_removed_bps before starting another
+ * Need to call reset_all_removed_bps before starting another
  * allocation attempt if possible use removable_set_bps since it is
  * faster. It does basically the opposite of this function. If you
  * have to come up with this list though it is faster to use this
@@ -1894,22 +1894,13 @@ extern int set_all_bps_except(char *bps)
 		y = temp;
 		temp = start % HOSTLIST_BASE;
 		z = temp;
-		if(ba_system_ptr->grid[x][y][z].state != NODE_STATE_IDLE) {
-			error("we can't use this node %c%c%c",	
-			      alpha_num[x],
-			      alpha_num[y],
-			      alpha_num[z]);
-
-			return SLURM_ERROR;
-		}
-		ba_system_ptr->grid[x][y][z].state = NODE_STATE_END;
+		if((ba_system_ptr->grid[x][y][z].state == NODE_STATE_UNKNOWN)
+		   || (ba_system_ptr->grid[x][y][z].state == NODE_STATE_IDLE)) 
+			ba_system_ptr->grid[x][y][z].state = NODE_STATE_END;
 #else
-		if(ba_system_ptr->grid[x].state != NODE_STATE_IDLE) {
-			error("we can't use this node %d", x);
-
-			return SLURM_ERROR;
-		}
-		ba_system_ptr->grid[x].state = NODE_STATE_END;
+		if((ba_system_ptr->grid[x].state == NODE_STATE_UNKNOWN)
+		   || (ba_system_ptr->grid[x].state == NODE_STATE_IDLE)) 
+			ba_system_ptr->grid[x].state = NODE_STATE_END;
 #endif
 		free(host);
 	}
diff --git a/src/plugins/select/bluegene/block_allocator/bridge_linker.c b/src/plugins/select/bluegene/block_allocator/bridge_linker.c
index 43ef5210fdfd9dd1ce8a1b6eb11c7e83c60aafa3..5b386bc44a4567333c716ae2cf20e4d848719a82 100644
--- a/src/plugins/select/bluegene/block_allocator/bridge_linker.c
+++ b/src/plugins/select/bluegene/block_allocator/bridge_linker.c
@@ -223,12 +223,14 @@ extern int bridge_init()
 		"setSayMessageParams"
 	};
 #endif
-	int n_syms = sizeof( syms ) / sizeof( char * );
+	int n_syms;
 	int rc;
 
 	if(initialized)
 		return 1;
 
+	n_syms = sizeof( syms ) / sizeof( char * );
+
 	initialized = true;
 	if(!_get_syms(n_syms, syms, (void **) &bridge_api))
 		return 0;
@@ -249,8 +251,9 @@ extern int bridge_fini()
 {
 	if(handle)
 		dlclose(handle);
-
-	return SLURM_ERROR;
+	initialized = false;
+	
+	return SLURM_SUCCESS;
 }
 
 extern status_t bridge_get_bg(my_bluegene_t **bg)
@@ -298,8 +301,19 @@ extern status_t bridge_get_block_info(pm_partition_id_t pid,
 	int rc = CONNECTION_ERROR;
 	if(!bridge_init())
 		return rc;
+
+	/* this is here to make sure we don't lock up things with
+	   polling and the long running get_BG call */
+	rc = pthread_mutex_trylock(&api_file_mutex);
+	if (rc == EBUSY) 
+		return rc;
+	else if(rc) {
+		errno = rc;
+		error("%s:%d %s: pthread_mutex_trylock(): %m",
+		      __FILE__, __LINE__, __CURRENT_FUNC__);     
+	}
 	
-	slurm_mutex_lock(&api_file_mutex);
+	//slurm_mutex_lock(&api_file_mutex);
 	rc = (*(bridge_api.get_partition_info))(pid, partition);
 	slurm_mutex_unlock(&api_file_mutex);
 	return rc;
diff --git a/src/plugins/select/bluegene/plugin/bg_block_info.c b/src/plugins/select/bluegene/plugin/bg_block_info.c
index cec58fa4d7b2f44aad3a4646e4a5f31b7fbe26dd..0d9c33c455a61999f9c60265126188cc93fbb726 100644
--- a/src/plugins/select/bluegene/plugin/bg_block_info.c
+++ b/src/plugins/select/bluegene/plugin/bg_block_info.c
@@ -1,7 +1,7 @@
 /*****************************************************************************\
  *  bg_block_info.c - bluegene block information from the db2 database.
  *
- *  $Id: bg_block_info.c 18147 2009-07-15 16:25:53Z da $
+ *  $Id: bg_block_info.c 18904 2009-10-15 15:52:20Z da $
  *****************************************************************************
  *  Copyright (C) 2004-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
@@ -278,6 +278,16 @@ extern int update_block_list()
 					break;
 				}
 			}
+
+			/* If the call was busy, just skip this
+			   iteration.  It usually means something like
+			   rm_get_BG was called which can be a very
+			   long call */
+			if(rc == EBUSY) {
+				debug5("lock was busy, aborting");
+				break;
+			}
+
 			error("bridge_get_block_info(%s): %s", 
 			      name, 
 			      bg_err_str(rc));
@@ -357,6 +367,7 @@ extern int update_block_list()
 			  //plugin set error
 			  && bg_record->state != state) {
 			int skipped_dealloc = 0;
+
 			debug("state of Block %s was %d and now is %d",
 			      bg_record->bg_block_id, 
 			      bg_record->state, 
@@ -382,8 +393,18 @@ extern int update_block_list()
 				xfree(bg_record->target_name);
 				bg_record->target_name =
 					xstrdup(bg_record->user_name);
-			}
-
+			} else if((bg_record->state 
+				   == RM_PARTITION_DEALLOCATING)
+				  && (state == RM_PARTITION_CONFIGURING)) 
+				/* This is a funky state IBM says
+				   isn't a bug, but all their
+				   documentation says this doesn't
+				   happen, but IBM says oh yeah, you
+				   weren't really suppose to notice
+				   that. So we will just skip this
+				   state and act like this didn't happen. */
+				goto nochange_state;
+			
 			bg_record->state = state;
 
 			if(bg_record->state == RM_PARTITION_DEALLOCATING
@@ -402,7 +423,7 @@ extern int update_block_list()
 					xstrdup(bg_record->user_name);
 			}
 #endif
-			else if(bg_record->state == RM_PARTITION_CONFIGURING) 
+			else if(bg_record->state == RM_PARTITION_CONFIGURING)
 				bg_record->boot_state = 1;
 			else if(bg_record->state == RM_PARTITION_FREE) {
 				if(remove_from_bg_list(bg_lists->job_running, 
@@ -425,8 +446,8 @@ extern int update_block_list()
 				trigger_block_error();
 			}
 			updated = 1;
-			
 		}
+	nochange_state:
 
 		/* check the boot state */
 		debug3("boot state for block %s is %d",
@@ -600,6 +621,15 @@ extern int update_freeing_block_list()
 					break;
 				}
 			}
+			/* If the call was busy, just skip this
+			   iteration.  It usually means something like
+			   rm_get_BG was called which can be a very
+			   long call */
+			if(rc == EBUSY) {
+				debug5("lock was busy, aborting");
+				break;
+			}
+
 			error("bridge_get_block_info(%s): %s", 
 			      name, 
 			      bg_err_str(rc));
diff --git a/src/plugins/select/bluegene/plugin/bluegene.c b/src/plugins/select/bluegene/plugin/bluegene.c
index 867e2099d252347ec5f31a43b11418ecab461bfd..024098f54f6118b4d1acc1bfc885225a8e7656c6 100644
--- a/src/plugins/select/bluegene/plugin/bluegene.c
+++ b/src/plugins/select/bluegene/plugin/bluegene.c
@@ -1,7 +1,7 @@
 /*****************************************************************************\
  *  bluegene.c - blue gene node configuration processing module. 
  *
- *  $Id: bluegene.c 17982 2009-06-26 16:25:33Z da $
+ *  $Id: bluegene.c 18897 2009-10-14 19:09:10Z da $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
@@ -41,9 +41,10 @@
 #include "defined_block.h"
 #include <stdio.h>
 
-#define MMCS_POLL_TIME 30	/* poll MMCS for down switches and nodes 
-				 * every 120 secs */
-#define BG_POLL_TIME 0	        /* poll bg blocks every 3 secs */
+#define MMCS_POLL_TIME 30	/* seconds between poll of MMCS for
+				 * down switches and nodes */
+#define BG_POLL_TIME 1	        /* seconds between poll of state
+				 * change in bg blocks */
 
 #define _DEBUG 0
 
@@ -359,7 +360,6 @@ extern void *block_agent(void *args)
 
 	last_bg_test = now - BG_POLL_TIME;
 	while (!agent_fini) {
-
 		if (difftime(now, last_bg_test) >= BG_POLL_TIME) {
 			if (agent_fini)		/* don't bother */
 				break;	/* quit now */
@@ -378,10 +378,10 @@ extern void *block_agent(void *args)
 						      "update_block_list 2");
 				}
 			}
-			now = time(NULL);
 		}
 		
 		sleep(1);
+		now = time(NULL);
 	}
 	return NULL;
 }
@@ -402,9 +402,12 @@ extern void *state_agent(void *args)
 			if (agent_fini)		/* don't bother */
 				break; 	/* quit now */
 			if(blocks_are_created) {
-				last_mmcs_test = now;
-				/* can run for a while */
+				/* can run for a while so set the
+				 * time after the call so there is
+				 * always MMCS_POLL_TIME between
+				 * calls */
 				test_mmcs_failures();
+				last_mmcs_test = time(NULL);
 			}
 		} 	
 				
diff --git a/src/plugins/select/bluegene/plugin/sfree.c b/src/plugins/select/bluegene/plugin/sfree.c
index c8460347d6c908b57d253b74b6a7b0b9c34e8f2a..84919d1d88de12da301352effccb7a9231e2f556 100644
--- a/src/plugins/select/bluegene/plugin/sfree.c
+++ b/src/plugins/select/bluegene/plugin/sfree.c
@@ -1,6 +1,6 @@
 /*****************************************************************************\
  *  sfree.c - free specified block or all blocks.
- *  $Id: sfree.c 18185 2009-07-17 19:02:22Z da $
+ *  $Id: sfree.c 18904 2009-10-15 15:52:20Z da $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
@@ -364,6 +364,15 @@ static int _update_bg_record_state()
 				continue;
 			}
 			
+			/* If the call was busy, just skip this
+			   iteration.  It usually means something like
+			   rm_get_BG was called which can be a very
+			   long call */
+			if(rc == EBUSY) {
+				debug5("lock was busy, aborting");
+				break;
+			}
+
 			error("bridge_get_block_info(%s): %s", 
 			      name, 
 			      _bg_err_str(rc));
diff --git a/src/plugins/select/bluegene/plugin/state_test.c b/src/plugins/select/bluegene/plugin/state_test.c
index 2c636d91f2bd0d29fb6377ce42da24651fc9aa94..2b2042107035e236912158fb79a4efe69724eff2 100644
--- a/src/plugins/select/bluegene/plugin/state_test.c
+++ b/src/plugins/select/bluegene/plugin/state_test.c
@@ -2,7 +2,7 @@
  *  state_test.c - Test state of Bluegene base partitions and switches. 
  *  DRAIN nodes in SLURM that are not usable. 
  *
- *  $Id: state_test.c 17317 2009-04-21 21:39:50Z da $
+ *  $Id: state_test.c 18875 2009-10-12 20:34:17Z da $
  *****************************************************************************
  *  Copyright (C) 2004-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
@@ -351,6 +351,8 @@ static int _test_down_nodecards(rm_BP_t *bp_ptr)
 /* 	} */
 	
 clean_up:
+	if(ncard_list)
+		bridge_free_nodecard_list(ncard_list);
 	xfree(node_name);
 /* 	if(ionode_bitmap) */
 /* 		FREE_NULL_BITMAP(ionode_bitmap); */
diff --git a/src/plugins/select/cons_res/job_test.c b/src/plugins/select/cons_res/job_test.c
index b219e2266915f4cda4dee98cb498165102bbd249..b090dde51fb3eede5fe4866fb6993b5185878c36 100644
--- a/src/plugins/select/cons_res/job_test.c
+++ b/src/plugins/select/cons_res/job_test.c
@@ -1201,7 +1201,7 @@ static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *bitmap,
 	bitstr_t  *avail_nodes_bitmap = NULL;	/* nodes on any switch */
 	bitstr_t  *req_nodes_bitmap   = NULL;
 	int rem_cpus, rem_nodes;	/* remaining resources desired */
-	int avail_cpus, alloc_cpus = 0;
+	int avail_cpus;
 	int i, j, rc = SLURM_SUCCESS;
 	int best_fit_inx, first, last;
 	int best_fit_nodes, best_fit_cpus;
@@ -1289,7 +1289,6 @@ static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *bitmap,
 			avail_cpus = _get_cpu_cnt(job_ptr, i, cpu_cnt,
 						  freq, size);
 			rem_cpus   -= avail_cpus;
-			alloc_cpus += avail_cpus;
 			for (j=0; j<switch_record_cnt; j++) {
 				if (!bit_test(switches_bitmap[j], i))
 					continue;
@@ -1327,7 +1326,6 @@ static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *bitmap,
 				avail_cpus = _get_cpu_cnt(job_ptr, i, cpu_cnt,
 							  freq, size);
 				rem_cpus   -= avail_cpus;
-				alloc_cpus += avail_cpus;
 			}
 		}
 		if ((rem_nodes <= 0) && (rem_cpus <= 0))
@@ -1456,7 +1454,6 @@ static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *bitmap,
 			rem_nodes--;
 			max_nodes--;
 			rem_cpus   -= avail_cpus;
-			alloc_cpus += avail_cpus;
 			if ((max_nodes <= 0) || 
 			    ((rem_nodes <= 0) && (rem_cpus <= 0)))
 				break;
@@ -1469,11 +1466,7 @@ static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *bitmap,
 	} else
 		rc = SLURM_ERROR;
 
- fini:	if (rc == SLURM_SUCCESS) {
-		/* Job's total_procs is needed for SELECT_MODE_WILL_RUN */
-		job_ptr->total_procs = alloc_cpus;
-	}
-	FREE_NULL_BITMAP(avail_nodes_bitmap);
+ fini:	FREE_NULL_BITMAP(avail_nodes_bitmap);
 	FREE_NULL_BITMAP(req_nodes_bitmap);
 	for (i=0; i<switch_record_cnt; i++)
 		bit_free(switches_bitmap[i]);
@@ -1753,8 +1746,7 @@ extern int cr_job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 		       "insufficient resources");
 		return SLURM_ERROR;
 	} else if (test_only) {
-		/* FIXME: does "test_only" expect struct_job_res
-		 * to be filled out? For now we assume NO */
+		/* Note: "test_only" does not need struct_job_res */
 		FREE_NULL_BITMAP(orig_map);
 		FREE_NULL_BITMAP(free_cores);
 		FREE_NULL_BITMAP(avail_cores);
@@ -1776,7 +1768,10 @@ extern int cr_job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 	 * of resources for this job. Here is the procedure:
 	 *
 	 * Step 1: Seek idle nodes across all partitions. If successful then
-	 *         place job and exit. If not successful, then continue:
+	 *         place job and exit. If not successful, then continue. Two
+	 *         related items to note:
+	 *          1. Jobs that don't share CPUs finish with step 1.
+	 *          2. The remaining steps assume sharing or preemption.
 	 *
 	 * Step 2: Remove resources that are in use by higher-pri partitions,
 	 *         and test that job can still succeed. If not then exit.
@@ -1829,6 +1824,16 @@ extern int cr_job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 	debug3("cons_res: cr_job_test: test 1 fail - "
 	       "not enough idle resources");
 
+	/* If no sched/gang, then check for Shared=NO (NODE_CR_ONE_ROW). Note
+	 * that Shared=EXCLUSIVE was already addressed in _verify_node_state().
+	 */
+	if (!cr_priority_selection_enabled() &&
+	    job_node_req == NODE_CR_ONE_ROW) {
+		/* this job CANNOT share CPUs regardless of priority,
+		 * so we fail here */
+		goto alloc_job;
+	}
+
 	/*** Step 2 ***/
 	bit_copybits(bitmap, orig_map);
 	bit_copybits(free_cores, avail_cores);
@@ -2007,6 +2012,12 @@ alloc_job:
 
 	if ((mode != SELECT_MODE_WILL_RUN) && (job_ptr->part_ptr == NULL))
 		error_code = EINVAL;
+	if ((error_code == SLURM_SUCCESS) && (mode == SELECT_MODE_WILL_RUN)) {
+		/* Set a reasonable value for the number of allocated CPUs.
+		 * Without computing task distribution this is only a guess */
+		job_ptr->total_procs = MAX(job_ptr->num_procs,
+					   job_ptr->details->min_nodes);
+	}
 	if ((error_code != SLURM_SUCCESS) || (mode != SELECT_MODE_RUN_NOW)) {
 		FREE_NULL_BITMAP(free_cores);
 		xfree(cpu_count);
diff --git a/src/scontrol/info_job.c b/src/scontrol/info_job.c
index 41553593450bc276f9c9fc2c703ec522f199b2ba..291f699a84fe7561b8ebddd5ed5d8db535ed632f 100644
--- a/src/scontrol/info_job.c
+++ b/src/scontrol/info_job.c
@@ -650,7 +650,7 @@ extern int
 scontrol_encode_hostlist(char *hostlist)
 {
 	char *io_buf = NULL, *tmp_list, *ranged_string;
-	int buf_size = 0;
+	int buf_size = 1024 * 1024;
 	hostlist_t hl;
 
 	if (!hostlist) {
@@ -665,7 +665,6 @@ scontrol_encode_hostlist(char *hostlist)
 			fprintf(stderr, "Can not open %s\n", hostlist);
 			return SLURM_ERROR;
 		}
-		buf_size = 1024 * 1024;
 		io_buf = xmalloc(buf_size);
 		buf_read = read(fd, io_buf, buf_size);
 		close(fd);
@@ -680,9 +679,12 @@ scontrol_encode_hostlist(char *hostlist)
 	} else
 		tmp_list = hostlist;
 
-	buf_size = strlen(tmp_list) + 1;
-	ranged_string = xmalloc(buf_size);
 	hl = hostlist_create(tmp_list);
+	if (hl == NULL) {
+		fprintf(stderr, "Invalid hostlist: %s\n", tmp_list);
+		return SLURM_ERROR;
+	}
+	ranged_string = xmalloc(buf_size);
 	hostlist_ranged_string(hl, buf_size, ranged_string);
 	printf("%s\n", ranged_string);
 	hostlist_destroy(hl);
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 34bc923ad83421b4516622fc5cc3a63dfc1f6766..3672874680f15d4052179432a17ae05a04732c42 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -1770,7 +1770,7 @@ extern int job_allocate(job_desc_msg_t * job_specs, int immediate,
 		return error_code;
 	}
 	xassert(job_ptr);
-	independent = job_independent(job_ptr);
+	independent = job_independent(job_ptr, will_run);
 	/* priority needs to be calculated after this since we set a
 	   begin time in job_independent and that lets us know if the
 	   job is eligible.
@@ -4473,7 +4473,7 @@ static bool _top_priority(struct job_record *job_ptr)
 				continue;
 			if (job_ptr2->job_state != JOB_PENDING)
 				continue;
-			if (!job_independent(job_ptr2))
+			if (!job_independent(job_ptr2, 0))
 				continue;
 			if ((job_ptr2->resv_name && (!job_ptr->resv_name)) ||
 			    ((!job_ptr2->resv_name) && job_ptr->resv_name))
@@ -5956,7 +5956,7 @@ extern void job_completion_logger(struct job_record  *job_ptr)
  * IN job_ptr - pointer to job being tested
  * RET - true if job no longer must be defered for another job
  */
-extern bool job_independent(struct job_record *job_ptr)
+extern bool job_independent(struct job_record *job_ptr, int will_run)
 {
 	struct job_details *detail_ptr = job_ptr->details;
 	time_t now = time(NULL);
@@ -5989,7 +5989,7 @@ extern bool job_independent(struct job_record *job_ptr)
 			xfree(job_ptr->state_desc);
 			send_acct_rec = true;
 		}
-		if (send_acct_rec) {
+		if (send_acct_rec && !will_run) {
 			/* We want to record when a job becomes eligible in
 			 * order to calculate reserved time (a measure of
 			 * system over-subscription), job really is not
diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c
index 3bd46a2b2d5a3e146458cbcbf9afdd3ef335a369..29d87ff64471507e509f5cfad4233dbccd5ad345 100644
--- a/src/slurmctld/job_scheduler.c
+++ b/src/slurmctld/job_scheduler.c
@@ -155,7 +155,7 @@ extern int build_job_queue(struct job_queue **job_queue)
 		    (job_ptr->job_state &  JOB_COMPLETING) ||
 		    (job_ptr->priority == 0))	/* held */
 			continue;
-		if (!job_independent(job_ptr))	/* can not run now */
+		if (!job_independent(job_ptr, 0))	/* can not run now */
 			continue;
 		if (job_buffer_size <= job_queue_size) {
 			job_buffer_size += 200;
@@ -237,7 +237,7 @@ extern void set_job_elig_time(void)
 		     (job_ptr->details->min_nodes > part_ptr->max_nodes)))
 			continue;
 		/* Job's eligible time is set in job_independent() */
-		if (!job_independent(job_ptr))
+		if (!job_independent(job_ptr, 0))
 			continue;
 	}
 	list_iterator_destroy(job_iterator);
diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c
index f6a8f949a2eb29b8c2733ef1d98c59f256c9a380..ee553d5781eec254479966e8cf77d436e20ceff9 100644
--- a/src/slurmctld/node_mgr.c
+++ b/src/slurmctld/node_mgr.c
@@ -583,20 +583,10 @@ extern int load_all_node_state ( bool state_only )
 			node_ptr->last_idle	= now;
 		}
 		xfree (node_name);
-		if(node_ptr) {
-			/* If the state is UNKNOWN we will assume IDLE
-			   until the nodes check in.  This is needed
-			   for bluegene to set up drained nodes
-			   correctly. */
-			if((node_ptr->node_state & NODE_STATE_BASE)
-			   == NODE_STATE_UNKNOWN) 
-				node_ptr->node_state |= NODE_STATE_IDLE;
-
+		if(node_ptr) 
 			select_g_update_node_state(
 				(node_ptr - node_record_table_ptr), 
 				node_ptr->node_state);
-		}
-
 	}
 
 fini:	info("Recovered state of %d nodes", node_cnt);
diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c
index 6708561648f3d2d87fee7cf09a55aa75c0879313..8fa9c1eae9126821a19f84fbe4d950a7a877b303 100644
--- a/src/slurmctld/proc_req.c
+++ b/src/slurmctld/proc_req.c
@@ -2642,11 +2642,16 @@ static void _slurm_rpc_job_ready(slurm_msg_t * msg)
 	int error_code, result;
 	job_id_msg_t *id_msg = (job_id_msg_t *) msg->data;
 	DEF_TIMERS;
+	/* Locks: read job */
+	slurmctld_lock_t job_read_lock = { 
+		NO_LOCK, READ_LOCK, NO_LOCK, NO_LOCK };
 	slurm_msg_t response_msg;
 	return_code_msg_t rc_msg;
 
 	START_TIMER;
+	lock_slurmctld(job_read_lock);
 	error_code = job_node_ready(id_msg->job_id, &result);
+	unlock_slurmctld(job_read_lock);
 	END_TIMER2("_slurm_rpc_job_ready");
 
 	if (error_code) {
diff --git a/src/slurmctld/slurmctld.h b/src/slurmctld/slurmctld.h
index 2cadba0b37699e205f90fcb4ca6b2551933c321b..59d7b64469286a0fd8d49e375d9f8c690fbbf13e 100644
--- a/src/slurmctld/slurmctld.h
+++ b/src/slurmctld/slurmctld.h
@@ -1069,9 +1069,10 @@ extern int job_complete (uint32_t job_id, uid_t uid, bool requeue,
  * job_independent - determine if this job has a depenentent job pending
  *	or if the job's scheduled begin time is in the future
  * IN job_ptr - pointer to job being tested
+ * IN will_run - is this a test for will_run or not
  * RET - true if job no longer must be defered for another job
  */
-extern bool job_independent(struct job_record *job_ptr);
+extern bool job_independent(struct job_record *job_ptr, int will_run);
 
 /*
  * job_req_node_filter - job reqeust node filter.
diff --git a/src/smap/configure_functions.c b/src/smap/configure_functions.c
index 35bd8dfc5448b23dfd17a0f6c267e2f71cab7b82..5495e671a49ceaad640a0c6335d727da40462767 100644
--- a/src/smap/configure_functions.c
+++ b/src/smap/configure_functions.c
@@ -797,7 +797,7 @@ static int _remove_allocation(char *com, List allocated_blocks)
 {
 	ListIterator results_i;
 	allocated_block_t *allocated_block = NULL;
-	int i=6, found=0;
+	int i=1, found=0;
 	int len = strlen(com);
 	char letter;
 
@@ -890,17 +890,15 @@ static int _copy_allocation(char *com, List allocated_blocks)
 	allocated_block_t *temp_block = NULL;
 	ba_request_t *request = NULL; 
 	
-	int i=0;
+	int i=1;
 	int len = strlen(com);
 	char letter = '\0';
 	int count = 1;
 	int *geo = NULL, *geo_ptr = NULL;
 			
-	while(i<=len) {
-		if((i>0) && (com[i-1] != ' '))
-			break;
+	/* look for the space after copy */
+	while(com[i-1]!=' ' && i<len) 
 		i++;
-	}
 	
 	if(i<=len) {
 		/* Here we are looking for a real number for the count
diff --git a/src/smap/opts.c b/src/smap/opts.c
index 6c7b395713cf7c6cfc45fc357be2310ee8965733..10827917ea3e995dbafbc17e26eeadfce31d596d 100644
--- a/src/smap/opts.c
+++ b/src/smap/opts.c
@@ -95,7 +95,7 @@ extern void parse_command_line(int argc, char *argv[])
 		case (int) 'i':
 			params.iterate = atoi(optarg);
 			if (params.iterate <= 0) {
-				error("Error: --iterate=%s");
+				error("Error: --iterate=%s", optarg);
 				exit(1);
 			}
 			break;
diff --git a/src/srun/srun.c b/src/srun/srun.c
index 9698b78ddacda0965f5019ac216e02a1d6fd5e01..6f2b0eaaa99e222ebad4440a161ac38f7ecc2db1 100644
--- a/src/srun/srun.c
+++ b/src/srun/srun.c
@@ -1091,20 +1091,26 @@ _is_openmpi_port_error(int errcode)
 }
 
 static void
-_handle_openmpi_port_error(const char *tasks, const char *hosts)
+_handle_openmpi_port_error(const char *tasks, const char *hosts,
+			   slurm_step_ctx_t *step_ctx)
 {
+	uint32_t job_id, step_id;
 	char *msg = "retrying";
 
 	if (!retry_step_begin) {
 		retry_step_begin = true;
 		retry_step_cnt++;
 	}
-	if (retry_step_cnt >= MAX_STEP_RETRIES) {
+
+	if (retry_step_cnt >= MAX_STEP_RETRIES)
 		msg = "aborting";
-		opt.kill_bad_exit = true;
-	}
 	error("%s: tasks %s unable to claim reserved port, %s.",
 	      hosts, tasks, msg);
+
+	slurm_step_ctx_get(step_ctx, SLURM_STEP_CTX_JOBID, &job_id);
+	slurm_step_ctx_get(step_ctx, SLURM_STEP_CTX_STEPID, &step_id);
+	info("Terminating job step %u.%u", job_id, step_id);
+	slurm_kill_job_step(job_id, step_id, SIGKILL);
 }
 
 static void
@@ -1128,11 +1134,13 @@ _task_finish(task_exit_msg_t *msg)
 			verbose("%s: %s %s: Completed", hosts, task_str, tasks);
 			normal_exit = 1;
 		}
-		else if (_is_openmpi_port_error(rc))
-			_handle_openmpi_port_error(tasks, hosts);
-		else
+		else if (_is_openmpi_port_error(rc)) {
+			_handle_openmpi_port_error(tasks, hosts, 
+						   job->step_ctx);
+		} else {
 			error("%s: %s %s: Exited with exit code %d",
 			      hosts, task_str, tasks, rc);
+		}
 		if (!WIFEXITED(global_rc) || (rc > WEXITSTATUS(global_rc)))
 			global_rc = msg->return_code;
 	}
diff --git a/src/sview/block_info.c b/src/sview/block_info.c
index 412b95efe7dd8106ed9493f25b5623f0892937ed..1e1fcdbc1cb144b2441349ea1916d7cfd08abf6e 100644
--- a/src/sview/block_info.c
+++ b/src/sview/block_info.c
@@ -136,7 +136,7 @@ static display_data_t options_data_block[] = {
 	{G_TYPE_STRING, JOB_PAGE, "Jobs", TRUE, BLOCK_PAGE},
 	{G_TYPE_STRING, PART_PAGE, "Partition", TRUE, BLOCK_PAGE},
 	{G_TYPE_STRING, NODE_PAGE, "Base Partitions", TRUE, BLOCK_PAGE},
-	{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, BLOCK_PAGE},
+	//{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, BLOCK_PAGE},
 	{G_TYPE_STRING, RESV_PAGE, "Reservation", TRUE, BLOCK_PAGE},
 	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
diff --git a/src/sview/job_info.c b/src/sview/job_info.c
index f2c1188d089b104546a115aed4c3285fa0e1ca25..c76e6a05facc9e0de99cf40a73a94a1dd152bfda 100644
--- a/src/sview/job_info.c
+++ b/src/sview/job_info.c
@@ -3111,14 +3111,6 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id)
 			snprintf(title, 100, "Block with job %d.%d",
 				 jobid, stepid);
 		break;
-	case SUBMIT_PAGE: 
-		if(stepid == NO_VAL)
-			snprintf(title, 100, "Submit job on job %d", jobid);
-		else
-			snprintf(title, 100, "Submit job on job %d.%d",
-				 jobid, stepid);
-			
-		break;
 	case INFO_PAGE: 
 		if(stepid == NO_VAL)
 			snprintf(title, 100, "Full info for job %d", jobid);
diff --git a/src/sview/node_info.c b/src/sview/node_info.c
index 1942dd6bb8edaa752bfa36e165ebc576e953491c..e682f2e5a01053eb5cb5bba6915f796b38be6f90 100644
--- a/src/sview/node_info.c
+++ b/src/sview/node_info.c
@@ -108,7 +108,7 @@ static display_data_t options_data_node[] = {
 #endif
 	{G_TYPE_STRING, PART_PAGE, "Partition", TRUE, NODE_PAGE},
 	{G_TYPE_STRING, RESV_PAGE, "Reservation", TRUE, NODE_PAGE},
-	{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, NODE_PAGE},
+	//{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, NODE_PAGE},
 	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
 
diff --git a/src/sview/part_info.c b/src/sview/part_info.c
index e442b458049d7a489cc66e6d6ad54f2b3bfbd496..cef05a735fff41102198c18032fb8a4ba0d38f31 100644
--- a/src/sview/part_info.c
+++ b/src/sview/part_info.c
@@ -193,7 +193,7 @@ static display_data_t options_data_part[] = {
 #else
 	{G_TYPE_STRING, NODE_PAGE, "Nodes", TRUE, PART_PAGE},
 #endif
-	{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, PART_PAGE},
+	//{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, PART_PAGE},
 	{G_TYPE_STRING, RESV_PAGE, "Reservations", TRUE, PART_PAGE},
 	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
diff --git a/testsuite/expect/test1.59 b/testsuite/expect/test1.59
index c6ee7cd315f806e46e0ae5365f03427dbbc5daf6..6ad5da11376e79ef7d419eeb69fc6995e689c2cf 100755
--- a/testsuite/expect/test1.59
+++ b/testsuite/expect/test1.59
@@ -117,7 +117,7 @@ for {set i 0} {$i<4} {incr i} {
 				previous srun\n"
 			exit 1
 		}
-		send "export SLURM_HOSTFILE=$hostfile\n"
+		send "export SLURM_HOSTFILE=$hostfile\r"
 		expect {
 			-re $prompt {
 				#send_user "srun completed\n"
@@ -175,7 +175,7 @@ for {set i 0} {$i<4} {incr i} {
 	#
 	# execute srun with a specific node count
 	#
-	send "$srun -l $extra -O $bin_printenv SLURMD_NODENAME\n"
+	send "$srun -l $extra -O $bin_printenv SLURMD_NODENAME\r"
 	expect {
 		-re "($number): ($alpha_numeric_under)" {
 			set task_id $expect_out(1,string)
@@ -256,7 +256,7 @@ for {set i 0} {$i<4} {incr i} {
 		}
 	}
 }
-send "unset SLURM_HOSTFILE\n"
+send "unset SLURM_HOSTFILE\r"
 expect {
 	-re $prompt {
 		#send_user "srun completed\n"
@@ -327,7 +327,7 @@ for {set i 0} {$i<5} {incr i} {
 	# execute srun with a specific node count
 	#
 	
-	send "$srun -l $extra -O $bin_printenv SLURMD_NODENAME\n"
+	send "$srun -l $extra -O $bin_printenv SLURMD_NODENAME\r"
 	
 	expect {
 		-re "($number): ($alpha_numeric_under)" {
@@ -406,7 +406,7 @@ for {set i 0} {$i<5} {incr i} {
 	}
 }
 
-send "exit\n"
+send "exit\r"
 expect {
 	-re "error.*Exit 1" {
 		send_user "This error is expected, no worries\n"
diff --git a/testsuite/expect/test7.3.prog.c b/testsuite/expect/test7.3.prog.c
index bab653f8f582820c3e808d71c899af8d737dc8ee..6b597b8c27c642b928a26e2ada530a20b93b7169 100644
--- a/testsuite/expect/test7.3.prog.c
+++ b/testsuite/expect/test7.3.prog.c
@@ -69,10 +69,11 @@ int main (int argc, char *argv[])
 
 	/* Create a job allocation */
 	slurm_init_job_desc_msg( &job_req );
-	job_req.min_nodes = min_nodes;
-	job_req.max_nodes = max_nodes;
-	job_req.user_id   = getuid();
-	job_req.group_id  = getgid();
+	job_req.min_nodes  = min_nodes;
+	job_req.max_nodes  = max_nodes;
+	job_req.user_id    = getuid();
+	job_req.group_id   = getgid();
+	job_req.time_limit = 1;
 	if (slurm_allocate_resources(&job_req, &job_resp)) {
 		slurm_perror ("slurm_allocate_resources");
 		exit(0);