From 7e442b20e49179f8b41b5bb689a911fd01f21745 Mon Sep 17 00:00:00 2001
From: Mehdi Dogguy <mehdi@debian.org>
Date: Mon, 8 Sep 2014 21:32:22 +0200
Subject: [PATCH] Imported Upstream version 2.0.2

---
 AUTHORS                                       |    1 +
 BUILD.NOTES                                   |    7 +-
 DISCLAIMER                                    |    5 +-
 META                                          |   10 +-
 Makefile.in                                   |    8 +
 NEWS                                          |  418 +-
 RELEASE_NOTES                                 |  387 +-
 RELEASE_NOTES_LLNL                            |   36 +
 aclocal.m4                                    |    4 +
 auxdir/Makefile.am                            |    9 +-
 auxdir/Makefile.in                            |   15 +-
 auxdir/x_ac_affinity.m4                       |   21 +-
 auxdir/x_ac_aix.m4                            |    4 +-
 auxdir/x_ac_blcr.m4                           |   69 +
 auxdir/x_ac_bluegene.m4                       |    2 +-
 auxdir/x_ac_cray.m4                           |   50 +
 auxdir/x_ac_databases.m4                      |    4 +-
 auxdir/x_ac_debug.m4                          |    2 +-
 auxdir/x_ac_env.m4                            |   37 +
 auxdir/x_ac_gtk.m4                            |    1 -
 auxdir/x_ac_iso.m4                            |   34 +
 auxdir/x_ac_readline.m4                       |    4 +-
 config.h.in                                   |   20 +-
 configure                                     |  461 +-
 configure.ac                                  |   56 +-
 contribs/Makefile.am                          |    1 +
 contribs/Makefile.in                          |    9 +
 contribs/README                               |   12 +
 contribs/env_cache_builder.c                  |    5 +-
 contribs/make.slurm.patch                     |    2 +-
 contribs/mpich1.slurm.patch                   |    2 +-
 contribs/perlapi/Makefile.in                  |    8 +
 contribs/perlapi/libslurm-perl/Slurm.xs       |   63 +-
 contribs/perlapi/libslurm-perl/alloc.c        |    1 +
 contribs/perlapi/libslurm-perl/conf.c         |  117 +-
 contribs/perlapi/libslurm-perl/job.c          |  191 +-
 contribs/perlapi/libslurm-perl/launch.c       |   16 +-
 contribs/perlapi/libslurm-perl/msg.h          |   58 +-
 contribs/perlapi/libslurm-perl/node.c         |   23 +-
 contribs/perlapi/libslurm-perl/partition.c    |   70 +-
 contribs/phpext/Makefile.in                   |    8 +
 contribs/phpext/slurm_php/slurm_php.c         |    3 +-
 contribs/phpext/slurm_php/slurm_php.h         |    3 +-
 contribs/python/Makefile.in                   |    8 +
 contribs/python/hostlist/Makefile.in          |    8 +
 contribs/python/hostlist/test/Makefile.in     |    8 +
 contribs/skilling.c                           |  125 +
 contribs/slurmdb-direct/Makefile.in           |    8 +
 contribs/slurmdb-direct/moab_2_slurmdb.pl     |   13 +
 contribs/time_login.c                         |    5 +-
 contribs/torque/Makefile.in                   |    8 +
 contribs/torque/mpiexec.pl                    |    5 +-
 contribs/torque/pbsnodes.pl                   |    5 +-
 contribs/torque/qdel.pl                       |    5 +-
 contribs/torque/qhold.pl                      |    5 +-
 contribs/torque/qrls.pl                       |    5 +-
 contribs/torque/qstat.pl                      |   90 +-
 contribs/torque/qsub.pl                       |    5 +-
 doc/Makefile.in                               |    8 +
 doc/html/AllocationPies.gif                   |  Bin 0 -> 25681 bytes
 doc/html/ExampleUsage.gif                     |  Bin 0 -> 33966 bytes
 doc/html/Makefile.am                          |   19 +-
 doc/html/Makefile.in                          |   27 +-
 doc/html/UsagePies.gif                        |  Bin 0 -> 24376 bytes
 doc/html/accounting.shtml                     |    1 -
 doc/html/accounting_storageplugins.shtml      |   71 +-
 doc/html/api.shtml                            |   12 +-
 doc/html/authplugins.shtml                    |    4 +-
 doc/html/big_sys.shtml                        |    2 +-
 doc/html/bluegene.shtml                       |   30 +-
 doc/html/checkpoint_blcr.shtml                |  166 +
 doc/html/checkpoint_plugins.shtml             |   60 +-
 doc/html/configurator.html.in                 |   45 +-
 doc/html/cons_res.shtml                       |    2 +-
 doc/html/cons_res_share.shtml                 |   94 +-
 doc/html/cray.shtml                           |  145 +
 doc/html/crypto_plugins.shtml                 |    2 +-
 doc/html/dist_plane.shtml                     |   38 +-
 doc/html/documentation.shtml                  |   95 +-
 doc/html/download.shtml                       |   20 +-
 doc/html/faq.shtml                            |  235 +-
 doc/html/footer.txt                           |    2 +-
 doc/html/gang_scheduling.shtml                |   27 +-
 doc/html/header.txt                           |    4 +-
 doc/html/ibm.shtml                            |   10 +-
 doc/html/jobacct_gatherplugins.shtml          |    4 +-
 doc/html/jobcompplugins.shtml                 |    8 +-
 doc/html/maui.shtml                           |   28 +-
 doc/html/mc_support.shtml                     |    6 +-
 doc/html/moab.shtml                           |   25 +-
 doc/html/mpi_guide.shtml                      |  307 ++
 doc/html/mpiplugins.shtml                     |    8 +-
 doc/html/news.shtml                           |  108 +-
 doc/html/overview.shtml                       |   90 +-
 doc/html/plane_ex5.gif                        |  Bin 8653 -> 53486 bytes
 doc/html/platforms.shtml                      |   13 +-
 doc/html/plugins.shtml                        |    2 +-
 doc/html/power_save.shtml                     |  192 +-
 doc/html/preempt.shtml                        |  541 ++-
 doc/html/priority_multifactor.shtml           |  542 +++
 doc/html/priority_plugins.shtml               |  129 +
 doc/html/proctrack_plugins.shtml              |    2 +-
 doc/html/programmer_guide.shtml               |   48 +-
 doc/html/publications.shtml                   |   28 +-
 doc/html/quickstart.shtml                     |  229 +-
 doc/html/quickstart_admin.shtml               |  175 +-
 doc/html/reservations.shtml                   |  165 +
 doc/html/resource_limits.shtml                |  223 +
 doc/html/review_release.html                  |   13 +
 doc/html/sched_policy.shtml                   |  116 -
 doc/html/selectplugins.shtml                  |  289 +-
 doc/html/slurm.sc08.bof.pdf                   |  Bin 0 -> 1093598 bytes
 doc/html/slurm.sc08.status.pdf                |  Bin 0 -> 1221250 bytes
 doc/html/slurm.shtml                          |   74 +-
 doc/html/sun_const.shtml                      |  126 +
 doc/html/switchplugins.shtml                  |   16 +-
 doc/html/taskplugins.shtml                    |   22 +-
 doc/html/team.shtml                           |   15 +-
 doc/html/testimonials.shtml                   |   34 +-
 doc/html/topo_ex1.gif                         |  Bin 0 -> 12425 bytes
 doc/html/topo_ex2.gif                         |  Bin 0 -> 31415 bytes
 doc/html/topology.shtml                       |  112 +
 doc/html/topology_plugin.shtml                |   74 +
 doc/html/troubleshoot.shtml                   |    8 +-
 doc/man/Makefile.am                           |   23 +-
 doc/man/Makefile.in                           |   31 +-
 doc/man/man1/sacct.1                          |  703 ++-
 doc/man/man1/sacctmgr.1                       |  107 +-
 doc/man/man1/salloc.1                         |  540 ++-
 doc/man/man1/sattach.1                        |    4 +-
 doc/man/man1/sbatch.1                         |  643 ++-
 doc/man/man1/sbcast.1                         |    4 +-
 doc/man/man1/scancel.1                        |   32 +-
 doc/man/man1/scontrol.1                       |  241 +-
 doc/man/man1/sinfo.1                          |   20 +-
 doc/man/man1/slurm.1                          |   39 +-
 doc/man/man1/smap.1                           |   41 +-
 doc/man/man1/sprio.1                          |  221 +
 doc/man/man1/squeue.1                         |   23 +-
 doc/man/man1/sreport.1                        |  115 +-
 doc/man/man1/srun.1                           |  585 +--
 doc/man/man1/srun_cr.1                        |   73 +
 doc/man/man1/sshare.1                         |   95 +
 doc/man/man1/sstat.1                          |  305 +-
 doc/man/man1/strigger.1                       |    4 +-
 doc/man/man1/sview.1                          |    4 +-
 doc/man/man3/slurm_allocate_resources.3       |    2 +-
 doc/man/man3/slurm_checkpoint_error.3         |   55 +-
 doc/man/man3/slurm_checkpoint_tasks.3         |    1 +
 doc/man/man3/slurm_complete_job.3             |   39 +-
 doc/man/man3/slurm_complete_job_step.3        |    1 -
 doc/man/man3/slurm_create_partition.3         |    1 +
 doc/man/man3/slurm_create_reservation.3       |    1 +
 doc/man/man3/slurm_delete_reservation.3       |    1 +
 doc/man/man3/slurm_free_ctl_conf.3            |    2 +-
 doc/man/man3/slurm_free_job_info_msg.3        |    6 +-
 .../slurm_free_job_step_info_response_msg.3   |    2 +-
 doc/man/man3/slurm_free_node_info.3           |    2 +-
 doc/man/man3/slurm_free_partition_info.3      |   32 +-
 .../man3/slurm_free_reservation_info_msg.3    |    2 +
 doc/man/man3/slurm_get_errno.3                |    2 +-
 doc/man/man3/slurm_hostlist_create.3          |    2 +-
 doc/man/man3/slurm_init_resv_desc_msg.3       |    1 +
 doc/man/man3/slurm_init_update_node_msg.3     |    1 +
 doc/man/man3/slurm_job_step_create.3          |    2 +-
 doc/man/man3/slurm_kill_job.3                 |    2 +-
 doc/man/man3/slurm_load_reservations.3        |  216 +
 doc/man/man3/slurm_print_reservation_info.3   |    2 +
 .../man3/slurm_print_reservation_info_msg.3   |    2 +
 doc/man/man3/slurm_reconfigure.3              |  235 +-
 doc/man/man3/slurm_resume.3                   |    2 +-
 doc/man/man3/slurm_slurmd_status.3            |    2 +-
 doc/man/man3/slurm_sprint_reservation_info.3  |    2 +
 doc/man/man3/slurm_step_ctx_create.3          |    2 +-
 doc/man/man3/slurm_step_launch.3              |   10 +-
 doc/man/man3/slurm_takeover.3                 |    1 +
 doc/man/man3/slurm_trigger.3                  |    0
 doc/man/man3/slurm_update_reservation.3       |    1 +
 doc/man/man5/bluegene.conf.5                  |   16 +-
 doc/man/man5/slurm.conf.5                     |  843 +++-
 doc/man/man5/slurmdbd.conf.5                  |  128 +-
 doc/man/man5/topology.conf.5                  |   88 +
 doc/man/man5/wiki.conf.5                      |    4 +-
 doc/man/man8/slurmctld.8                      |    4 +-
 doc/man/man8/slurmd.8                         |   33 +-
 doc/man/man8/slurmdbd.8                       |    4 +-
 doc/man/man8/slurmstepd.8                     |    4 +-
 doc/man/man8/spank.8                          |   96 +-
 etc/bluegene.conf.example                     |    2 +
 etc/slurm.conf.example                        |   28 +-
 etc/slurm.epilog.clean                        |    4 +-
 slurm.spec                                    |   46 +-
 slurm/pmi.h                                   |    2 +-
 slurm/slurm.h.in                              |  678 ++-
 slurm/slurm_errno.h                           |   19 +-
 slurm/spank.h                                 |   70 +-
 src/Makefile.am                               |   10 +-
 src/Makefile.in                               |   18 +-
 src/api/Makefile.am                           |    3 +
 src/api/Makefile.in                           |   19 +-
 src/api/allocate.c                            |    8 +-
 src/api/allocate_msg.c                        |    5 +-
 src/api/cancel.c                              |    7 +-
 src/api/checkpoint.c                          |  173 +-
 src/api/complete.c                            |    7 +-
 src/api/config_info.c                         |  229 +-
 src/api/init_msg.c                            |   53 +-
 src/api/job_info.c                            |   75 +-
 src/api/job_info.h                            |    7 +-
 src/api/job_step_info.c                       |   18 +-
 src/api/node_info.c                           |   35 +-
 src/api/node_select_info.c                    |    7 +-
 src/api/node_select_info.h                    |   28 +-
 src/api/partition_info.c                      |   31 +-
 src/api/pmi.c                                 |   34 +-
 src/api/pmi_server.c                          |    7 +-
 src/api/pmi_server.h                          |    7 +-
 src/api/reconfigure.c                         |   24 +-
 src/api/reservation_info.c                    |  199 +
 src/api/signal.c                              |    7 +-
 src/api/slurm_hostlist.c                      |   96 +
 src/api/slurm_pmi.c                           |    5 +-
 src/api/slurm_pmi.h                           |    5 +-
 src/api/step_ctx.c                            |   35 +-
 src/api/step_ctx.h                            |    6 +-
 src/api/step_io.c                             |  151 +-
 src/api/step_io.h                             |    7 +-
 src/api/step_launch.c                         |  193 +-
 src/api/step_launch.h                         |    8 +-
 src/api/submit.c                              |    7 +-
 src/api/suspend.c                             |    7 +-
 src/api/topo_info.c                           |  164 +
 src/api/triggers.c                            |    5 +-
 src/api/update_config.c                       |   89 +-
 src/common/Makefile.am                        |   17 +-
 src/common/Makefile.in                        |   97 +-
 src/common/arg_desc.c                         |    5 +-
 src/common/arg_desc.h                         |    5 +-
 src/common/assoc_mgr.c                        | 1113 ++++-
 src/common/assoc_mgr.h                        |   83 +-
 src/common/basil_resv_conf.c                  |   85 +
 src/common/basil_resv_conf.h                  |   66 +
 src/common/bitstring.c                        |   43 +-
 src/common/bitstring.h                        |    5 +-
 src/common/checkpoint.c                       |  127 +-
 src/common/checkpoint.h                       |   37 +-
 src/common/daemonize.c                        |    7 +-
 src/common/daemonize.h                        |    7 +-
 src/common/eio.c                              |    5 +-
 src/common/eio.h                              |    5 +-
 src/common/env.c                              |  413 +-
 src/common/env.h                              |   29 +-
 src/common/forward.c                          |  239 +-
 src/common/forward.h                          |   21 +-
 src/common/hostlist.c                         |    9 +-
 src/common/hostlist.h                         |    7 +-
 src/common/io_hdr.c                           |    7 +-
 src/common/io_hdr.h                           |    7 +-
 src/common/job_options.c                      |    5 +-
 src/common/job_options.h                      |    5 +-
 src/common/jobacct_common.c                   |  265 +-
 src/common/jobacct_common.h                   |   36 +-
 src/common/log.c                              |   10 +-
 src/common/log.h                              |    2 +-
 src/common/macros.h                           |    7 +-
 src/common/mpi.c                              |    5 +-
 src/common/mpi.h                              |    5 +-
 src/common/net.c                              |    5 +-
 src/common/net.h                              |    5 +-
 src/common/node_select.c                      |  470 +-
 src/common/node_select.h                      |   35 +-
 src/common/optz.c                             |    5 +-
 src/common/optz.h                             |    5 +-
 src/common/pack.c                             |   57 +-
 src/common/pack.h                             |   23 +-
 src/common/parse_config.c                     |   11 +-
 src/common/parse_config.h                     |    7 +-
 src/common/parse_spec.c                       |   45 +-
 src/common/parse_spec.h                       |    5 +-
 src/common/parse_time.c                       |   88 +-
 src/common/parse_time.h                       |    6 +-
 src/common/plugin.c                           |  188 +-
 src/common/plugin.h                           |   22 +-
 src/common/plugrack.c                         |    9 +-
 src/common/plugrack.h                         |    5 +-
 src/common/plugstack.c                        |  404 +-
 src/common/plugstack.h                        |   27 +-
 src/common/print_fields.c                     |  161 +-
 src/common/print_fields.h                     |   16 +-
 src/common/proc_args.c                        |   27 +-
 src/common/proc_args.h                        |    3 +-
 src/common/read_config.c                      |  655 ++-
 src/common/read_config.h                      |   88 +-
 src/common/safeopen.c                         |    7 +-
 src/common/safeopen.h                         |    7 +-
 src/common/select_job_res.c                   |  924 ++++
 src/common/select_job_res.h                   |  233 +
 src/common/slurm_accounting_storage.c         | 3942 ++++++++++++-----
 src/common/slurm_accounting_storage.h         |  227 +-
 src/common/slurm_auth.c                       |    5 +-
 src/common/slurm_auth.h                       |    5 +-
 src/common/slurm_cred.c                       |  381 +-
 src/common/slurm_cred.h                       |   34 +-
 src/common/slurm_errno.c                      |   29 +-
 src/common/slurm_jobacct_gather.c             |    5 +-
 src/common/slurm_jobacct_gather.h             |    5 +-
 src/common/slurm_jobcomp.c                    |   14 +-
 src/common/slurm_jobcomp.h                    |    5 +-
 src/common/slurm_priority.c                   |  277 ++
 src/common/slurm_priority.h                   |   77 +
 src/common/slurm_protocol_api.c               |  720 ++-
 src/common/slurm_protocol_api.h               |  158 +-
 src/common/slurm_protocol_common.h            |   10 +-
 src/common/slurm_protocol_defs.c              |  437 +-
 src/common/slurm_protocol_defs.h              |  172 +-
 src/common/slurm_protocol_interface.h         |    5 +-
 src/common/slurm_protocol_mongo_common.h      |    5 +-
 src/common/slurm_protocol_pack.c              | 1426 ++++--
 src/common/slurm_protocol_pack.h              |   10 +-
 src/common/slurm_protocol_socket_common.h     |    5 +-
 .../slurm_protocol_socket_implementation.c    |    5 +-
 src/common/slurm_protocol_util.c              |   27 +-
 src/common/slurm_protocol_util.h              |    5 +-
 src/common/slurm_resource_info.c              |  409 +-
 src/common/slurm_resource_info.h              |   13 +-
 src/common/slurm_rlimits_info.c               |    3 +-
 src/common/slurm_rlimits_info.h               |    3 +-
 src/common/slurm_selecttype_info.c            |    5 +-
 src/common/slurm_selecttype_info.h            |    5 +-
 src/common/slurm_step_layout.c                |   90 +-
 src/common/slurm_step_layout.h                |   10 +-
 src/common/slurm_strcasestr.c                 |   66 +
 src/common/slurm_strcasestr.h                 |   46 +
 src/common/slurm_xlator.h                     |    5 +-
 src/common/slurmdbd_defs.c                    |  540 ++-
 src/common/slurmdbd_defs.h                    |   79 +-
 src/common/stepd_api.c                        |   32 +-
 src/common/stepd_api.h                        |    9 +-
 src/common/switch.c                           |   20 +-
 src/common/switch.h                           |   14 +-
 src/common/timers.c                           |    5 +-
 src/common/timers.h                           |    5 +-
 src/common/uid.c                              |    7 +-
 src/common/uid.h                              |    7 +-
 src/common/unsetenv.c                         |    5 +-
 src/common/unsetenv.h                         |    5 +-
 src/common/write_labelled_message.c           |  177 +
 src/common/write_labelled_message.h           |   65 +
 src/common/xassert.c                          |    7 +-
 src/common/xassert.h                          |    7 +-
 src/common/xmalloc.c                          |    7 +-
 src/common/xmalloc.h                          |    7 +-
 src/common/xsignal.c                          |    5 +-
 src/common/xsignal.h                          |    7 +-
 src/common/xstring.c                          |    5 +-
 src/common/xstring.h                          |    5 +-
 src/database/Makefile.am                      |   28 +-
 src/database/Makefile.in                      |   70 +-
 src/database/mysql_common.c                   |  121 +-
 src/database/mysql_common.h                   |   11 +-
 src/database/pgsql_common.c                   |    9 +-
 src/database/pgsql_common.h                   |    9 +-
 src/plugins/Makefile.am                       |    2 +-
 src/plugins/Makefile.in                       |   10 +-
 src/plugins/accounting_storage/Makefile.in    |    8 +
 .../accounting_storage/filetxt/Makefile.in    |    8 +
 .../filetxt/accounting_storage_filetxt.c      |   61 +-
 .../filetxt/filetxt_jobacct_process.c         |   24 +-
 .../filetxt/filetxt_jobacct_process.h         |    3 +-
 .../accounting_storage/mysql/Makefile.am      |    6 +
 .../accounting_storage/mysql/Makefile.in      |   62 +-
 .../mysql/accounting_storage_mysql.c          | 1615 +++++--
 .../mysql/mysql_jobacct_process.c             | 1096 +++--
 .../mysql/mysql_jobacct_process.h             |   37 +-
 .../accounting_storage/mysql/mysql_rollup.c   |  431 +-
 .../accounting_storage/mysql/mysql_rollup.h   |   27 +-
 .../accounting_storage/none/Makefile.in       |    8 +
 .../none/accounting_storage_none.c            |   36 +-
 .../accounting_storage/pgsql/Makefile.am      |    5 +
 .../accounting_storage/pgsql/Makefile.in      |   57 +-
 .../pgsql/accounting_storage_pgsql.c          |   82 +-
 .../pgsql/pgsql_jobacct_process.c             |   63 +-
 .../pgsql/pgsql_jobacct_process.h             |    3 +-
 .../accounting_storage/slurmdbd/Makefile.in   |    8 +
 .../slurmdbd/accounting_storage_slurmdbd.c    |  297 +-
 src/plugins/auth/Makefile.in                  |    8 +
 src/plugins/auth/authd/Makefile.in            |    8 +
 src/plugins/auth/authd/auth_authd.c           |    5 +-
 src/plugins/auth/munge/Makefile.in            |    8 +
 src/plugins/auth/munge/auth_munge.c           |    7 +-
 src/plugins/auth/none/Makefile.in             |    8 +
 src/plugins/auth/none/auth_none.c             |    5 +-
 src/plugins/checkpoint/Makefile.am            |    2 +-
 src/plugins/checkpoint/Makefile.in            |   10 +-
 src/plugins/checkpoint/aix/Makefile.in        |    8 +
 src/plugins/checkpoint/aix/checkpoint_aix.c   |   50 +-
 src/plugins/checkpoint/blcr/Makefile.am       |   22 +
 src/plugins/checkpoint/blcr/Makefile.in       |  607 +++
 src/plugins/checkpoint/blcr/checkpoint_blcr.c |  715 +++
 .../checkpoint/blcr/cr_checkpoint.sh.in       |    4 +
 src/plugins/checkpoint/blcr/cr_restart.sh.in  |    2 +
 src/plugins/checkpoint/none/Makefile.in       |    8 +
 src/plugins/checkpoint/none/checkpoint_none.c |   38 +-
 src/plugins/checkpoint/ompi/Makefile.in       |    8 +
 src/plugins/checkpoint/ompi/checkpoint_ompi.c |   39 +-
 src/plugins/checkpoint/xlch/Makefile.am       |    5 +-
 src/plugins/checkpoint/xlch/Makefile.in       |   17 +-
 src/plugins/checkpoint/xlch/checkpoint_xlch.c |  105 +-
 src/plugins/crypto/Makefile.in                |    8 +
 src/plugins/crypto/munge/Makefile.in          |    8 +
 src/plugins/crypto/munge/crypto_munge.c       |  130 +-
 src/plugins/crypto/openssl/Makefile.in        |    8 +
 src/plugins/crypto/openssl/crypto_openssl.c   |    9 +-
 src/plugins/jobacct_gather/Makefile.in        |    8 +
 src/plugins/jobacct_gather/aix/Makefile.in    |    8 +
 .../jobacct_gather/aix/jobacct_gather_aix.c   |    5 +-
 src/plugins/jobacct_gather/linux/Makefile.in  |    8 +
 .../linux/jobacct_gather_linux.c              |    5 +-
 src/plugins/jobacct_gather/none/Makefile.in   |    8 +
 .../jobacct_gather/none/jobacct_gather_none.c |    5 +-
 src/plugins/jobcomp/Makefile.in               |    8 +
 src/plugins/jobcomp/filetxt/Makefile.in       |    8 +
 .../jobcomp/filetxt/filetxt_jobcomp_process.c |    3 +-
 .../jobcomp/filetxt/filetxt_jobcomp_process.h |    3 +-
 src/plugins/jobcomp/filetxt/jobcomp_filetxt.c |   17 +-
 src/plugins/jobcomp/mysql/Makefile.am         |    6 +-
 src/plugins/jobcomp/mysql/Makefile.in         |   45 +-
 src/plugins/jobcomp/mysql/jobcomp_mysql.c     |   60 +-
 .../jobcomp/mysql/mysql_jobcomp_process.c     |    6 +-
 .../jobcomp/mysql/mysql_jobcomp_process.h     |    5 +-
 src/plugins/jobcomp/none/Makefile.in          |    8 +
 src/plugins/jobcomp/none/jobcomp_none.c       |    5 +-
 src/plugins/jobcomp/pgsql/Makefile.am         |    5 +
 src/plugins/jobcomp/pgsql/Makefile.in         |   45 +-
 src/plugins/jobcomp/pgsql/jobcomp_pgsql.c     |   55 +-
 .../jobcomp/pgsql/pgsql_jobcomp_process.c     |    6 +-
 .../jobcomp/pgsql/pgsql_jobcomp_process.h     |    5 +-
 src/plugins/jobcomp/script/Makefile.in        |    8 +
 src/plugins/jobcomp/script/jobcomp_script.c   |   62 +-
 src/plugins/mpi/Makefile.in                   |    8 +
 src/plugins/mpi/lam/Makefile.in               |    8 +
 src/plugins/mpi/lam/lam.h                     |    5 +-
 src/plugins/mpi/lam/mpi_lam.c                 |    5 +-
 src/plugins/mpi/mpich1_p4/Makefile.in         |    8 +
 src/plugins/mpi/mpich1_p4/mpich1_p4.c         |    5 +-
 src/plugins/mpi/mpich1_shmem/Makefile.in      |    8 +
 src/plugins/mpi/mpich1_shmem/mpich1_shmem.c   |    5 +-
 src/plugins/mpi/mpichgm/Makefile.in           |    8 +
 src/plugins/mpi/mpichgm/mpi_mpichgm.c         |    9 +-
 src/plugins/mpi/mpichgm/mpichgm.c             |    7 +-
 src/plugins/mpi/mpichgm/mpichgm.h             |    5 +-
 src/plugins/mpi/mpichmx/Makefile.in           |    8 +
 src/plugins/mpi/mpichmx/mpi_mpichmx.c         |    9 +-
 src/plugins/mpi/mpichmx/mpichmx.c             |    7 +-
 src/plugins/mpi/mpichmx/mpichmx.h             |    5 +-
 src/plugins/mpi/mvapich/Makefile.in           |    8 +
 src/plugins/mpi/mvapich/mpi_mvapich.c         |    6 +-
 src/plugins/mpi/mvapich/mvapich.c             |    9 +-
 src/plugins/mpi/mvapich/mvapich.h             |    5 +-
 src/plugins/mpi/none/Makefile.in              |    8 +
 src/plugins/mpi/none/mpi_none.c               |    5 +-
 src/plugins/mpi/openmpi/Makefile.in           |    8 +
 src/plugins/mpi/openmpi/mpi_openmpi.c         |    5 +-
 src/plugins/priority/Makefile.am              |    1 +
 src/plugins/priority/Makefile.in              |  574 +++
 src/plugins/priority/basic/Makefile.am        |   13 +
 src/plugins/priority/basic/Makefile.in        |  566 +++
 src/plugins/priority/basic/priority_basic.c   |  146 +
 src/plugins/priority/multifactor/Makefile.am  |   14 +
 src/plugins/priority/multifactor/Makefile.in  |  568 +++
 .../multifactor/priority_multifactor.c        | 1140 +++++
 src/plugins/proctrack/Makefile.in             |    8 +
 src/plugins/proctrack/aix/Makefile.in         |    8 +
 src/plugins/proctrack/aix/proctrack_aix.c     |    5 +-
 src/plugins/proctrack/linuxproc/Makefile.in   |    8 +
 src/plugins/proctrack/linuxproc/kill_tree.c   |    5 +-
 src/plugins/proctrack/linuxproc/kill_tree.h   |    5 +-
 .../proctrack/linuxproc/proctrack_linuxproc.c |    5 +-
 src/plugins/proctrack/pgid/Makefile.in        |    8 +
 src/plugins/proctrack/pgid/proctrack_pgid.c   |    5 +-
 src/plugins/proctrack/rms/Makefile.in         |    8 +
 src/plugins/proctrack/rms/proctrack_rms.c     |    5 +-
 src/plugins/proctrack/sgi_job/Makefile.in     |    8 +
 .../proctrack/sgi_job/proctrack_sgi_job.c     |    5 +-
 src/plugins/sched/Makefile.in                 |    8 +
 src/plugins/sched/backfill/Makefile.in        |    8 +
 src/plugins/sched/backfill/backfill.c         |  232 +-
 src/plugins/sched/backfill/backfill.h         |    5 +-
 src/plugins/sched/backfill/backfill_wrapper.c |   11 +-
 src/plugins/sched/builtin/Makefile.in         |    8 +
 src/plugins/sched/builtin/builtin_wrapper.c   |   11 +-
 src/plugins/sched/gang/Makefile.in            |    8 +
 src/plugins/sched/gang/gang.c                 |  588 +--
 src/plugins/sched/gang/gang.h                 |    5 +-
 src/plugins/sched/gang/sched_gang.c           |   11 +-
 src/plugins/sched/hold/Makefile.in            |    8 +
 src/plugins/sched/hold/hold_wrapper.c         |   11 +-
 src/plugins/sched/wiki/Makefile.in            |    8 +
 src/plugins/sched/wiki/cancel_job.c           |    5 +-
 src/plugins/sched/wiki/get_jobs.c             |   87 +-
 src/plugins/sched/wiki/get_nodes.c            |    9 +-
 src/plugins/sched/wiki/hostlist.c             |  101 +-
 src/plugins/sched/wiki/job_modify.c           |    5 +-
 src/plugins/sched/wiki/msg.c                  |   28 +-
 src/plugins/sched/wiki/msg.h                  |    9 +-
 src/plugins/sched/wiki/resume_job.c           |    5 +-
 src/plugins/sched/wiki/sched_wiki.c           |   15 +-
 src/plugins/sched/wiki/start_job.c            |    8 +-
 src/plugins/sched/wiki/suspend_job.c          |    5 +-
 src/plugins/sched/wiki2/Makefile.in           |    8 +
 src/plugins/sched/wiki2/cancel_job.c          |    5 +-
 src/plugins/sched/wiki2/event.c               |    5 +-
 src/plugins/sched/wiki2/get_jobs.c            |    7 +-
 src/plugins/sched/wiki2/get_nodes.c           |   14 +-
 src/plugins/sched/wiki2/hostlist.c            |   95 +-
 src/plugins/sched/wiki2/initialize.c          |    5 +-
 src/plugins/sched/wiki2/job_add_task.c        |    5 +-
 src/plugins/sched/wiki2/job_modify.c          |    5 +-
 src/plugins/sched/wiki2/job_notify.c          |    5 +-
 src/plugins/sched/wiki2/job_release_task.c    |    5 +-
 src/plugins/sched/wiki2/job_requeue.c         |    5 +-
 src/plugins/sched/wiki2/job_signal.c          |    5 +-
 src/plugins/sched/wiki2/job_will_run.c        |   33 +-
 src/plugins/sched/wiki2/msg.c                 |   26 +-
 src/plugins/sched/wiki2/msg.h                 |    9 +-
 src/plugins/sched/wiki2/resume_job.c          |    5 +-
 src/plugins/sched/wiki2/sched_wiki.c          |   20 +-
 src/plugins/sched/wiki2/start_job.c           |    8 +-
 src/plugins/sched/wiki2/suspend_job.c         |    5 +-
 src/plugins/select/Makefile.in                |    8 +
 src/plugins/select/bluegene/Makefile.in       |    8 +
 .../bluegene/block_allocator/Makefile.am      |   28 +-
 .../bluegene/block_allocator/Makefile.in      |   79 +-
 .../block_allocator/block_allocator.c         |  568 ++-
 .../block_allocator/block_allocator.h         |    8 +-
 .../bluegene/block_allocator/bridge_linker.c  |    3 +-
 .../bluegene/block_allocator/bridge_linker.h  |    3 +-
 .../bluegene/block_allocator/wire_test.c      |  201 +
 .../select/bluegene/plugin/Makefile.in        |    8 +
 .../select/bluegene/plugin/bg_block_info.c    |   47 +-
 .../select/bluegene/plugin/bg_block_info.h    |    3 +-
 .../select/bluegene/plugin/bg_boot_time.h     |    3 +-
 .../select/bluegene/plugin/bg_job_place.c     |  236 +-
 .../select/bluegene/plugin/bg_job_place.h     |    3 +-
 .../select/bluegene/plugin/bg_job_run.c       |  101 +-
 .../select/bluegene/plugin/bg_job_run.h       |    3 +-
 .../bluegene/plugin/bg_record_functions.c     |  273 +-
 .../bluegene/plugin/bg_record_functions.h     |    3 +-
 .../bluegene/plugin/bg_switch_connections.c   |   39 +-
 .../select/bluegene/plugin/block_sys.c        |  106 +-
 src/plugins/select/bluegene/plugin/bluegene.c |  816 ++--
 src/plugins/select/bluegene/plugin/bluegene.h |   93 +-
 .../select/bluegene/plugin/defined_block.c    |   42 +-
 .../select/bluegene/plugin/defined_block.h    |    3 +-
 .../select/bluegene/plugin/dynamic_block.c    |   46 +-
 .../select/bluegene/plugin/dynamic_block.h    |    8 +-
 .../select/bluegene/plugin/libsched_if64.c    |    3 +-
 src/plugins/select/bluegene/plugin/opts.c     |    7 +-
 .../select/bluegene/plugin/select_bluegene.c  |  351 +-
 src/plugins/select/bluegene/plugin/sfree.c    |   50 +-
 src/plugins/select/bluegene/plugin/sfree.h    |    5 +-
 .../select/bluegene/plugin/slurm_epilog.c     |   13 +-
 .../select/bluegene/plugin/slurm_prolog.c     |   11 +-
 .../select/bluegene/plugin/state_test.c       |   55 +-
 .../select/bluegene/plugin/state_test.h       |    5 +-
 src/plugins/select/cons_res/Makefile.am       |    3 +-
 src/plugins/select/cons_res/Makefile.in       |   15 +-
 src/plugins/select/cons_res/dist_tasks.c      |  774 ++--
 src/plugins/select/cons_res/dist_tasks.h      |   17 +-
 src/plugins/select/cons_res/job_test.c        | 2123 +++++++++
 src/plugins/select/cons_res/job_test.h        |   70 +
 src/plugins/select/cons_res/select_cons_res.c | 3552 +++++----------
 src/plugins/select/cons_res/select_cons_res.h |  135 +-
 src/plugins/select/linear/Makefile.in         |    8 +
 src/plugins/select/linear/select_linear.c     |  951 ++--
 src/plugins/select/linear/select_linear.h     |   16 +-
 src/plugins/switch/Makefile.in                |    8 +
 src/plugins/switch/elan/Makefile.in           |    8 +
 src/plugins/switch/elan/qsw.c                 |    7 +-
 src/plugins/switch/elan/qsw.h                 |    5 +-
 src/plugins/switch/elan/switch_elan.c         |   15 +-
 src/plugins/switch/federation/Makefile.in     |    8 +
 src/plugins/switch/federation/federation.c    |   11 +-
 src/plugins/switch/federation/federation.h    |    7 +-
 .../switch/federation/federation_keys.h       |    7 +-
 .../switch/federation/switch_federation.c     |   17 +-
 src/plugins/switch/none/Makefile.in           |    8 +
 src/plugins/switch/none/switch_none.c         |   13 +-
 src/plugins/task/Makefile.in                  |    8 +
 src/plugins/task/affinity/Makefile.in         |    8 +
 src/plugins/task/affinity/affinity.c          |  114 +-
 src/plugins/task/affinity/affinity.h          |   10 +-
 src/plugins/task/affinity/cpuset.c            |   57 +-
 src/plugins/task/affinity/dist_tasks.c        | 2286 ++++------
 src/plugins/task/affinity/dist_tasks.h        |   74 +-
 src/plugins/task/affinity/numa.c              |   87 +-
 src/plugins/task/affinity/schedutils.c        |    7 +-
 src/plugins/task/affinity/task_affinity.c     |  278 +-
 src/plugins/task/none/Makefile.in             |    8 +
 src/plugins/task/none/task_none.c             |   15 +-
 src/plugins/topology/3d_torus/Makefile.am     |   17 +
 src/plugins/topology/3d_torus/Makefile.in     |  574 +++
 .../topology/3d_torus}/hilbert.c              |    2 +-
 .../topology/3d_torus}/hilbert.h              |    0
 .../topology/3d_torus}/hilbert_slurm.c        |   30 +-
 .../topology/3d_torus/topology_3d_torus.c     |  113 +
 src/plugins/topology/Makefile.am              |    3 +
 src/plugins/topology/Makefile.in              |  576 +++
 src/plugins/topology/none/Makefile.am         |   13 +
 src/plugins/topology/none/Makefile.in         |  566 +++
 src/plugins/topology/none/topology_none.c     |  107 +
 src/plugins/topology/tree/Makefile.am         |   14 +
 src/plugins/topology/tree/Makefile.in         |  566 +++
 src/plugins/topology/tree/topology_tree.c     |  423 ++
 src/sacct/Makefile.am                         |    2 +-
 src/sacct/Makefile.in                         |   13 +-
 src/sacct/options.c                           |  641 ++-
 src/sacct/print.c                             | 2496 +++++------
 src/sacct/process.c                           |   24 +-
 src/sacct/sacct.c                             |  304 +-
 src/sacct/sacct.h                             |  144 +-
 src/sacct/sacct_stat.c                        |  201 -
 src/sacctmgr/Makefile.am                      |    1 +
 src/sacctmgr/Makefile.in                      |   14 +-
 src/sacctmgr/account_functions.c              |   48 +-
 src/sacctmgr/archive_functions.c              |   94 +-
 src/sacctmgr/association_functions.c          |   25 +-
 src/sacctmgr/cluster_functions.c              |  338 +-
 src/sacctmgr/common.c                         |   55 +-
 src/sacctmgr/config_functions.c               |  162 +
 src/sacctmgr/file_functions.c                 | 1111 ++---
 src/sacctmgr/qos_functions.c                  |   65 +-
 src/sacctmgr/sacctmgr.c                       |   72 +-
 src/sacctmgr/sacctmgr.h                       |    9 +-
 src/sacctmgr/txn_functions.c                  |   17 +-
 src/sacctmgr/user_functions.c                 |   78 +-
 src/sacctmgr/wckey_functions.c                |   17 +-
 src/salloc/Makefile.in                        |    8 +
 src/salloc/opt.c                              |  284 +-
 src/salloc/opt.h                              |   11 +-
 src/salloc/salloc.c                           |  133 +-
 src/salloc/salloc.h                           |    5 +-
 src/sattach/Makefile.in                       |    8 +
 src/sattach/attach.c                          |    7 +-
 src/sattach/opt.c                             |    7 +-
 src/sattach/opt.h                             |    7 +-
 src/sattach/sattach.c                         |   37 +-
 src/sbatch/Makefile.in                        |    8 +
 src/sbatch/opt.c                              |  473 +-
 src/sbatch/opt.h                              |   16 +-
 src/sbatch/sbatch.c                           |  103 +-
 src/sbcast/Makefile.am                        |    2 +-
 src/sbcast/Makefile.in                        |   10 +-
 src/sbcast/agent.c                            |    5 +-
 src/sbcast/opts.c                             |    5 +-
 src/sbcast/sbcast.c                           |    7 +-
 src/sbcast/sbcast.h                           |    5 +-
 src/scancel/Makefile.in                       |    8 +
 src/scancel/opt.c                             |   42 +-
 src/scancel/scancel.c                         |  294 +-
 src/scancel/scancel.h                         |    7 +-
 src/scontrol/Makefile.am                      |    4 +-
 src/scontrol/Makefile.in                      |   21 +-
 src/scontrol/create_res.c                     |  400 ++
 src/scontrol/info_job.c                       |    5 +-
 src/scontrol/info_node.c                      |   60 +-
 src/scontrol/info_part.c                      |    7 +-
 src/scontrol/info_res.c                       |  140 +
 src/scontrol/scontrol.c                       |  588 ++-
 src/scontrol/scontrol.h                       |   22 +-
 src/scontrol/update_job.c                     |  297 +-
 src/scontrol/update_node.c                    |  153 +-
 src/scontrol/update_part.c                    |  296 +-
 src/sinfo/Makefile.in                         |    8 +
 src/sinfo/opts.c                              |   68 +-
 src/sinfo/print.c                             |   45 +-
 src/sinfo/print.h                             |   13 +-
 src/sinfo/sinfo.c                             |  129 +-
 src/sinfo/sinfo.h                             |    8 +-
 src/sinfo/sort.c                              |    5 +-
 src/slurmctld/Makefile.am                     |   11 +-
 src/slurmctld/Makefile.in                     |   40 +-
 src/slurmctld/acct_policy.c                   |   89 +-
 src/slurmctld/acct_policy.h                   |    5 +-
 src/slurmctld/agent.c                         |  154 +-
 src/slurmctld/agent.h                         |   10 +-
 src/slurmctld/backup.c                        |  111 +-
 src/slurmctld/basil_interface.c               |  315 ++
 src/slurmctld/basil_interface.h               |   73 +
 src/slurmctld/controller.c                    |  277 +-
 src/slurmctld/job_mgr.c                       | 1805 ++++++--
 src/slurmctld/job_scheduler.c                 |  382 +-
 src/slurmctld/job_scheduler.h                 |   21 +-
 src/slurmctld/licenses.c                      |    5 +-
 src/slurmctld/licenses.h                      |    5 +-
 src/slurmctld/locks.c                         |    5 +-
 src/slurmctld/locks.h                         |    5 +-
 src/slurmctld/node_mgr.c                      |  391 +-
 src/slurmctld/node_scheduler.c                |  564 ++-
 src/slurmctld/node_scheduler.h                |    8 +-
 src/slurmctld/partition_mgr.c                 |  182 +-
 src/slurmctld/ping_nodes.c                    |   23 +-
 src/slurmctld/ping_nodes.h                    |    5 +-
 src/slurmctld/port_mgr.c                      |  319 ++
 src/slurmctld/port_mgr.h                      |   57 +
 src/slurmctld/power_save.c                    |  434 +-
 src/slurmctld/private.key                     |   15 -
 src/slurmctld/proc_req.c                      |  684 ++-
 src/slurmctld/proc_req.h                      |    5 +-
 src/slurmctld/read_config.c                   |  247 +-
 src/slurmctld/read_config.h                   |    5 +-
 src/slurmctld/reservation.c                   | 2560 +++++++++++
 src/slurmctld/reservation.h                   |  131 +
 src/slurmctld/sched_plugin.c                  |    5 +-
 src/slurmctld/sched_plugin.h                  |    5 +-
 src/slurmctld/slurmctld.h                     |  397 +-
 src/slurmctld/srun_comm.c                     |   55 +-
 src/slurmctld/srun_comm.h                     |   14 +-
 src/slurmctld/state_save.c                    |   32 +-
 src/slurmctld/state_save.h                    |   11 +-
 src/slurmctld/step_mgr.c                      | 1022 +++--
 src/slurmctld/topo_plugin.c                   |  251 ++
 src/slurmctld/topo_plugin.h                   |   71 +
 src/slurmctld/trigger_mgr.c                   |  155 +-
 src/slurmctld/trigger_mgr.h                   |    5 +-
 src/slurmd/Makefile.in                        |    8 +
 src/slurmd/common/proctrack.c                 |    5 +-
 src/slurmd/common/proctrack.h                 |    5 +-
 src/slurmd/common/reverse_tree.h              |    5 +-
 src/slurmd/common/run_script.c                |    5 +-
 src/slurmd/common/run_script.h                |    5 +-
 src/slurmd/common/set_oomadj.c                |   70 +
 src/slurmd/common/set_oomadj.h                |   47 +
 src/slurmd/common/setproctitle.c              |   25 +-
 src/slurmd/common/setproctitle.h              |    8 +-
 src/slurmd/common/slurmstepd_init.c           |    9 +-
 src/slurmd/common/slurmstepd_init.h           |    5 +-
 src/slurmd/common/task_plugin.c               |   25 +-
 src/slurmd/common/task_plugin.h               |   14 +-
 src/slurmd/slurmd/Makefile.am                 |    2 +
 src/slurmd/slurmd/Makefile.in                 |   27 +-
 src/slurmd/slurmd/get_mach_stat.c             |    5 +-
 src/slurmd/slurmd/get_mach_stat.h             |    5 +-
 src/slurmd/slurmd/read_proc.c                 |    5 +-
 src/slurmd/slurmd/req.c                       |  246 +-
 src/slurmd/slurmd/req.h                       |    7 +-
 src/slurmd/slurmd/reverse_tree_math.c         |    5 +-
 src/slurmd/slurmd/reverse_tree_math.h         |    5 +-
 src/slurmd/slurmd/slurmd.c                    |  146 +-
 src/slurmd/slurmd/slurmd.h                    |   17 +-
 src/slurmd/slurmd/xcpu.c                      |    5 +-
 src/slurmd/slurmd/xcpu.h                      |    5 +-
 src/slurmd/slurmstepd/Makefile.am             |    2 +
 src/slurmd/slurmstepd/Makefile.in             |   28 +-
 src/slurmd/slurmstepd/fname.c                 |    5 +-
 src/slurmd/slurmstepd/fname.h                 |    5 +-
 src/slurmd/slurmstepd/io.c                    |  427 +-
 src/slurmd/slurmstepd/io.h                    |   55 +-
 src/slurmd/slurmstepd/mgr.c                   |  280 +-
 src/slurmd/slurmstepd/mgr.h                   |    5 +-
 src/slurmd/slurmstepd/multi_prog.c            |    5 +-
 src/slurmd/slurmstepd/multi_prog.h            |    5 +-
 src/slurmd/slurmstepd/pam_ses.c               |    5 +-
 src/slurmd/slurmstepd/pam_ses.h               |    5 +-
 src/slurmd/slurmstepd/pdebug.c                |    5 +-
 src/slurmd/slurmstepd/pdebug.h                |    5 +-
 src/slurmd/slurmstepd/req.c                   |   51 +-
 src/slurmd/slurmstepd/req.h                   |    7 +-
 src/slurmd/slurmstepd/slurmstepd.c            |   22 +-
 src/slurmd/slurmstepd/slurmstepd.h            |    9 +-
 src/slurmd/slurmstepd/slurmstepd_job.c        |   57 +-
 src/slurmd/slurmstepd/slurmstepd_job.h        |   31 +-
 .../slurmstepd/step_terminate_monitor.c       |    5 +-
 .../slurmstepd/step_terminate_monitor.h       |    5 +-
 src/slurmd/slurmstepd/task.c                  |   44 +-
 src/slurmd/slurmstepd/task.h                  |    7 +-
 src/slurmd/slurmstepd/ulimits.c               |   19 +-
 src/slurmd/slurmstepd/ulimits.h               |    5 +-
 src/slurmdbd/Makefile.am                      |    2 +
 src/slurmdbd/Makefile.in                      |   16 +-
 src/slurmdbd/agent.c                          |    5 +-
 src/slurmdbd/agent.h                          |    5 +-
 src/slurmdbd/backup.c                         |  129 +
 src/slurmdbd/backup.h                         |   55 +
 src/slurmdbd/proc_req.c                       |  381 +-
 src/slurmdbd/proc_req.h                       |    5 +-
 src/slurmdbd/read_config.c                    |  371 +-
 src/slurmdbd/read_config.h                    |   29 +-
 src/slurmdbd/rpc_mgr.c                        |   29 +-
 src/slurmdbd/rpc_mgr.h                        |    7 +-
 src/slurmdbd/slurmdbd.c                       |  128 +-
 src/slurmdbd/slurmdbd.h                       |    7 +-
 src/smap/Makefile.am                          |    6 +-
 src/smap/Makefile.in                          |   24 +-
 src/smap/configure_functions.c                |    7 +-
 src/smap/grid_functions.c                     |    5 +-
 src/smap/job_functions.c                      |   48 +-
 src/smap/opts.c                               |   42 +-
 src/smap/partition_functions.c                |    7 +-
 src/smap/reservation_functions.c              |  255 ++
 src/smap/smap.c                               |   22 +-
 src/smap/smap.h                               |   18 +-
 src/sprio/Makefile.am                         |   20 +
 src/sprio/Makefile.in                         |  570 +++
 src/sprio/opts.c                              |  475 ++
 src/sprio/print.c                             |  438 ++
 src/sprio/print.h                             |  138 +
 src/sprio/sprio.c                             |  227 +
 src/sprio/sprio.h                             |   94 +
 src/squeue/Makefile.in                        |    8 +
 src/squeue/opts.c                             |   12 +-
 src/squeue/print.c                            |   73 +-
 src/squeue/print.h                            |    9 +-
 src/squeue/sort.c                             |   26 +-
 src/squeue/squeue.c                           |   11 +-
 src/squeue/squeue.h                           |    5 +-
 src/sreport/Makefile.am                       |    1 +
 src/sreport/Makefile.in                       |   12 +-
 src/sreport/assoc_reports.c                   |    5 +-
 src/sreport/assoc_reports.h                   |    5 +-
 src/sreport/cluster_reports.c                 |   97 +-
 src/sreport/cluster_reports.h                 |    5 +-
 src/sreport/common.c                          |   53 +-
 src/sreport/job_reports.c                     |   28 +-
 src/sreport/job_reports.h                     |    5 +-
 src/sreport/resv_reports.c                    |  562 +++
 src/sreport/resv_reports.h                    |   52 +
 src/sreport/sreport.c                         |   74 +-
 src/sreport/sreport.h                         |    7 +-
 src/sreport/user_reports.c                    |    9 +-
 src/sreport/user_reports.h                    |    5 +-
 src/srun/Makefile.am                          |    3 +-
 src/srun/Makefile.in                          |   14 +-
 src/srun/allocate.c                           |  246 +-
 src/srun/allocate.h                           |   23 +-
 src/srun/core-format.c                        |    7 +-
 src/srun/core-format.h                        |    7 +-
 src/srun/debugger.c                           |    5 +-
 src/srun/debugger.h                           |   14 +
 src/srun/fname.c                              |    5 +-
 src/srun/fname.h                              |    5 +-
 src/srun/multi_prog.c                         |    5 +-
 src/srun/multi_prog.h                         |    5 +-
 src/srun/opt.c                                |  641 +--
 src/srun/opt.h                                |   17 +-
 src/srun/srun.c                               |  462 +-
 src/srun/srun.h                               |    5 +-
 src/srun/srun_job.c                           |   25 +-
 src/srun/srun_job.h                           |    6 +-
 src/srun/srun_pty.c                           |    5 +-
 src/srun/srun_pty.h                           |    5 +-
 src/srun/task_state.c                         |  193 +
 src/srun/task_state.h                         |   66 +
 src/srun_cr/Makefile.am                       |   21 +
 src/srun_cr/Makefile.in                       |  568 +++
 src/srun_cr/srun_cr.c                         |  553 +++
 src/sshare/Makefile.am                        |   22 +
 src/sshare/Makefile.in                        |  574 +++
 src/sshare/process.c                          |  267 ++
 src/sshare/sshare.c                           |  420 ++
 src/sshare/sshare.h                           |  103 +
 src/sstat/Makefile.in                         |    8 +
 src/sstat/options.c                           |  159 +-
 src/sstat/print.c                             |  549 +--
 src/sstat/process.c                           |   24 +-
 src/sstat/sstat.c                             |   94 +-
 src/sstat/sstat.h                             |   59 +-
 src/strigger/Makefile.in                      |    8 +
 src/strigger/opts.c                           |    8 +-
 src/strigger/strigger.c                       |    9 +-
 src/strigger/strigger.h                       |    5 +-
 src/sview/Makefile.am                         |    4 +-
 src/sview/Makefile.in                         |   36 +-
 src/sview/admin_info.c                        |    5 +-
 src/sview/block_info.c                        |  106 +-
 src/sview/common.c                            |  109 +-
 src/sview/grid.c                              |  308 +-
 src/sview/job_info.c                          |  315 +-
 src/sview/node_info.c                         |   39 +-
 src/sview/part_info.c                         |  230 +-
 src/sview/popups.c                            |   62 +-
 src/sview/resv_info.c                         | 1419 ++++++
 src/sview/submit_info.c                       |    5 +-
 src/sview/sview.c                             |   17 +-
 src/sview/sview.h                             |   56 +-
 testsuite/Makefile.in                         |    8 +
 testsuite/expect/Makefile.am                  |   18 +-
 testsuite/expect/Makefile.in                  |   26 +-
 testsuite/expect/README                       |   46 +-
 testsuite/expect/globals                      |  420 +-
 testsuite/expect/globals_accounting           |   55 +-
 testsuite/expect/pkill                        |    5 +-
 testsuite/expect/regression                   |    5 +-
 testsuite/expect/regression.py                |    5 +-
 testsuite/expect/test1.1                      |    5 +-
 testsuite/expect/test1.10                     |    5 +-
 testsuite/expect/test1.11                     |    5 +-
 testsuite/expect/test1.12                     |   12 +-
 testsuite/expect/test1.13                     |    5 +-
 testsuite/expect/test1.14                     |    6 +-
 testsuite/expect/test1.15                     |   11 +-
 testsuite/expect/test1.16                     |    5 +-
 testsuite/expect/test1.17                     |    5 +-
 testsuite/expect/test1.18                     |    5 +-
 testsuite/expect/test1.19                     |    5 +-
 testsuite/expect/test1.2                      |    5 +-
 testsuite/expect/test1.20                     |    5 +-
 testsuite/expect/test1.21                     |    5 +-
 testsuite/expect/test1.22                     |    5 +-
 testsuite/expect/test1.23                     |    7 +-
 testsuite/expect/test1.24                     |    5 +-
 testsuite/expect/test1.25                     |    5 +-
 testsuite/expect/test1.26                     |   11 +-
 testsuite/expect/test1.27                     |    7 +-
 testsuite/expect/test1.28                     |    5 +-
 testsuite/expect/test1.29                     |    5 +-
 testsuite/expect/test1.29.prog.c              |    5 +-
 testsuite/expect/test1.3                      |    5 +-
 testsuite/expect/test1.30                     |    5 +-
 testsuite/expect/test1.31                     |    5 +-
 testsuite/expect/test1.32                     |    8 +-
 testsuite/expect/test1.32.prog.c              |    8 +-
 testsuite/expect/test1.33                     |    5 +-
 testsuite/expect/test1.34                     |    5 +-
 testsuite/expect/test1.34.prog.c              |    5 +-
 testsuite/expect/test1.35                     |    7 +-
 testsuite/expect/test1.36                     |    5 +-
 testsuite/expect/test1.37                     |    5 +-
 testsuite/expect/test1.38                     |    7 +-
 testsuite/expect/test1.39                     |    5 +-
 testsuite/expect/test1.39.prog.c              |    5 +-
 testsuite/expect/test1.4                      |    5 +-
 testsuite/expect/test1.40                     |    5 +-
 testsuite/expect/test1.41                     |    5 +-
 testsuite/expect/test1.42                     |    7 +-
 testsuite/expect/test1.43                     |   14 +-
 testsuite/expect/test1.44                     |    5 +-
 testsuite/expect/test1.45                     |  156 +
 testsuite/expect/test1.46                     |    5 +-
 testsuite/expect/test1.47                     |    7 +-
 testsuite/expect/test1.48                     |    5 +-
 testsuite/expect/test1.49                     |    5 +-
 testsuite/expect/test1.5                      |    5 +-
 testsuite/expect/test1.50                     |    5 +-
 testsuite/expect/test1.51                     |    5 +-
 testsuite/expect/test1.52                     |   45 +-
 testsuite/expect/test1.54                     |    5 +-
 testsuite/expect/test1.55                     |    5 +-
 testsuite/expect/test1.56                     |    5 +-
 testsuite/expect/test1.57                     |    5 +-
 testsuite/expect/test1.58                     |    5 +-
 testsuite/expect/test1.59                     |   15 +-
 testsuite/expect/test1.6                      |    5 +-
 testsuite/expect/test1.60                     |  204 +
 testsuite/expect/test1.7                      |   19 +-
 testsuite/expect/test1.8                      |    5 +-
 testsuite/expect/test1.80                     |    5 +-
 testsuite/expect/test1.81                     |    5 +-
 testsuite/expect/test1.82                     |    5 +-
 testsuite/expect/test1.83                     |   11 +-
 testsuite/expect/test1.84                     |   11 +-
 testsuite/expect/test1.86                     |    5 +-
 testsuite/expect/test1.87                     |    5 +-
 testsuite/expect/test1.88                     |   11 +-
 testsuite/expect/test1.88.prog.c              |    5 +-
 testsuite/expect/test1.89                     |    9 +-
 testsuite/expect/test1.89.prog.c              |    5 +-
 testsuite/expect/test1.9                      |    5 +-
 testsuite/expect/test1.90                     |    5 +-
 testsuite/expect/test1.90.prog.c              |    5 +-
 testsuite/expect/test1.91                     |   12 +-
 testsuite/expect/test1.91.prog.c              |    5 +-
 testsuite/expect/test1.92                     |   15 +-
 testsuite/expect/test1.93                     |    5 +-
 testsuite/expect/test10.1                     |    5 +-
 testsuite/expect/test10.10                    |    5 +-
 testsuite/expect/test10.11                    |    5 +-
 testsuite/expect/test10.12                    |    5 +-
 testsuite/expect/test10.13                    |    5 +-
 testsuite/expect/test10.2                     |    5 +-
 testsuite/expect/test10.3                     |    5 +-
 testsuite/expect/test10.4                     |    5 +-
 testsuite/expect/test10.5                     |    5 +-
 testsuite/expect/test10.6                     |    5 +-
 testsuite/expect/test10.7                     |    5 +-
 testsuite/expect/test10.8                     |    5 +-
 testsuite/expect/test10.9                     |    5 +-
 testsuite/expect/test11.1                     |    5 +-
 testsuite/expect/test11.2                     |    5 +-
 testsuite/expect/test11.3                     |    5 +-
 testsuite/expect/test11.4                     |    5 +-
 testsuite/expect/test11.5                     |    5 +-
 testsuite/expect/test11.6                     |    9 +-
 testsuite/expect/test11.7                     |    5 +-
 testsuite/expect/test12.1                     |   13 +-
 testsuite/expect/test12.2                     |   13 +-
 testsuite/expect/test12.2.prog.c              |    5 +-
 testsuite/expect/test12.4                     |  689 +++
 testsuite/expect/test12.5                     |  110 +
 testsuite/expect/test13.1                     |    5 +-
 testsuite/expect/test14.1                     |    5 +-
 testsuite/expect/test14.2                     |    5 +-
 testsuite/expect/test14.3                     |    5 +-
 testsuite/expect/test14.4                     |    9 +-
 testsuite/expect/test14.5                     |   36 +-
 testsuite/expect/test14.6                     |    5 +-
 testsuite/expect/test14.7                     |   12 +-
 testsuite/expect/test14.8                     |    9 +-
 testsuite/expect/test15.1                     |    5 +-
 testsuite/expect/test15.10                    |    5 +-
 testsuite/expect/test15.11                    |   10 +-
 testsuite/expect/test15.12                    |    5 +-
 testsuite/expect/test15.13                    |    7 +-
 testsuite/expect/test15.14                    |    8 +-
 testsuite/expect/test15.15                    |    5 +-
 testsuite/expect/test15.16                    |    5 +-
 testsuite/expect/test15.17                    |    6 +-
 testsuite/expect/test15.18                    |    5 +-
 testsuite/expect/test15.19                    |    5 +-
 testsuite/expect/test15.2                     |    5 +-
 testsuite/expect/test15.20                    |    7 +-
 testsuite/expect/test15.21                    |   12 +-
 testsuite/expect/test15.22                    |    5 +-
 testsuite/expect/test15.23                    |    5 +-
 testsuite/expect/test15.24                    |    5 +-
 testsuite/expect/test15.25                    |    5 +-
 testsuite/expect/test15.3                     |    5 +-
 testsuite/expect/test15.4                     |    5 +-
 testsuite/expect/test15.5                     |   33 +-
 testsuite/expect/test15.6                     |    5 +-
 testsuite/expect/test15.7                     |    5 +-
 testsuite/expect/test15.8                     |    5 +-
 testsuite/expect/test15.9                     |   13 +-
 testsuite/expect/test16.1                     |    5 +-
 testsuite/expect/test16.2                     |    5 +-
 testsuite/expect/test16.3                     |    5 +-
 testsuite/expect/test16.4                     |    5 +-
 testsuite/expect/test16.4.prog.c              |    5 +-
 testsuite/expect/test17.1                     |    5 +-
 testsuite/expect/test17.10                    |    5 +-
 testsuite/expect/test17.11                    |    5 +-
 testsuite/expect/test17.12                    |    5 +-
 testsuite/expect/test17.13                    |    5 +-
 testsuite/expect/test17.14                    |    5 +-
 testsuite/expect/test17.15                    |    5 +-
 testsuite/expect/test17.15.prog.c             |    5 +-
 testsuite/expect/test17.16                    |    5 +-
 testsuite/expect/test17.17                    |    7 +-
 testsuite/expect/test17.18                    |    5 +-
 testsuite/expect/test17.2                     |    5 +-
 testsuite/expect/test17.20                    |    5 +-
 testsuite/expect/test17.21                    |    5 +-
 testsuite/expect/test17.22                    |    5 +-
 testsuite/expect/test17.23                    |   11 +-
 testsuite/expect/test17.24                    |    5 +-
 testsuite/expect/test17.25                    |    5 +-
 testsuite/expect/test17.26                    |    5 +-
 testsuite/expect/test17.27                    |    5 +-
 testsuite/expect/test17.28                    |    5 +-
 testsuite/expect/test17.29                    |    5 +-
 testsuite/expect/test17.3                     |    5 +-
 testsuite/expect/test17.31                    |    5 +-
 testsuite/expect/test17.32                    |    5 +-
 testsuite/expect/test17.33                    |    5 +-
 testsuite/expect/test17.4                     |    5 +-
 testsuite/expect/test17.5                     |    5 +-
 testsuite/expect/test17.6                     |    5 +-
 testsuite/expect/test17.7                     |   22 +-
 testsuite/expect/test17.8                     |    5 +-
 testsuite/expect/test17.9                     |    5 +-
 testsuite/expect/test19.1                     |    5 +-
 testsuite/expect/test19.2                     |    5 +-
 testsuite/expect/test19.3                     |    5 +-
 testsuite/expect/test19.4                     |    5 +-
 testsuite/expect/test19.5                     |    9 +-
 testsuite/expect/test19.6                     |    5 +-
 testsuite/expect/test19.7                     |    5 +-
 testsuite/expect/test2.1                      |    5 +-
 testsuite/expect/test2.10                     |    5 +-
 testsuite/expect/test2.11                     |   11 +-
 testsuite/expect/{test17.19 => test2.12}      |  114 +-
 testsuite/expect/test2.2                      |    5 +-
 testsuite/expect/test2.3                      |    5 +-
 testsuite/expect/test2.4                      |    5 +-
 testsuite/expect/test2.5                      |    7 +-
 testsuite/expect/test2.6                      |    5 +-
 testsuite/expect/test2.7                      |    5 +-
 testsuite/expect/test2.8                      |    5 +-
 testsuite/expect/test2.9                      |    5 +-
 testsuite/expect/test20.1                     |    5 +-
 testsuite/expect/test20.2                     |    5 +-
 testsuite/expect/test20.3                     |    5 +-
 testsuite/expect/test20.4                     |    5 +-
 testsuite/expect/test21.1                     |    5 +-
 testsuite/expect/test21.10                    |    5 +-
 testsuite/expect/test21.11                    |    5 +-
 testsuite/expect/test21.12                    |    5 +-
 testsuite/expect/test21.13                    |    7 +-
 testsuite/expect/test21.14                    |    7 +-
 testsuite/expect/test21.15                    |    7 +-
 testsuite/expect/test21.16                    |    7 +-
 testsuite/expect/test21.17                    |    7 +-
 testsuite/expect/test21.18                    |    7 +-
 testsuite/expect/test21.19                    |    7 +-
 testsuite/expect/test21.2                     |    5 +-
 testsuite/expect/test21.20                    |    7 +-
 testsuite/expect/test21.21                    |    5 +-
 testsuite/expect/test21.22                    |  157 +-
 testsuite/expect/test21.23                    |   20 +-
 testsuite/expect/test21.24                    |   11 +-
 testsuite/expect/test21.25                    |   94 +
 testsuite/expect/test21.3                     |    5 +-
 testsuite/expect/test21.4                     |    5 +-
 testsuite/expect/test21.5                     |   23 +-
 testsuite/expect/test21.6                     |   21 +-
 testsuite/expect/test21.7                     |   29 +-
 testsuite/expect/test21.8                     |   43 +-
 testsuite/expect/test21.9                     |   43 +-
 testsuite/expect/test22.1                     | 1128 +++++
 testsuite/expect/test22.2                     |  324 ++
 testsuite/expect/test23.1                     |  260 ++
 testsuite/expect/test23.2                     |  126 +
 testsuite/expect/test23.3                     |  672 +++
 testsuite/expect/test24.1                     |  133 +
 testsuite/expect/test24.1.prog.c              |  270 ++
 testsuite/expect/test24.2                     |  430 ++
 testsuite/expect/test25.1                     |  690 +++
 testsuite/expect/test3.1                      |    5 +-
 testsuite/expect/test3.10                     |    5 +-
 testsuite/expect/test3.11                     |  525 +++
 testsuite/expect/test3.2                      |    5 +-
 testsuite/expect/test3.3                      |    5 +-
 testsuite/expect/test3.4                      |    9 +-
 testsuite/expect/test3.5                      |   17 +-
 testsuite/expect/test3.6                      |   20 +-
 testsuite/expect/test3.7                      |    5 +-
 testsuite/expect/test3.7.prog.c               |    5 +-
 testsuite/expect/test3.8                      |    7 +-
 testsuite/expect/test3.9                      |    5 +-
 testsuite/expect/test4.1                      |    5 +-
 testsuite/expect/test4.10                     |    5 +-
 testsuite/expect/test4.11                     |    5 +-
 testsuite/expect/test4.2                      |    5 +-
 testsuite/expect/test4.3                      |    5 +-
 testsuite/expect/test4.4                      |    5 +-
 testsuite/expect/test4.5                      |    5 +-
 testsuite/expect/test4.6                      |    5 +-
 testsuite/expect/test4.7                      |    5 +-
 testsuite/expect/test4.8                      |    5 +-
 testsuite/expect/test4.9                      |    5 +-
 testsuite/expect/test5.1                      |    5 +-
 testsuite/expect/test5.2                      |    5 +-
 testsuite/expect/test5.3                      |    5 +-
 testsuite/expect/test5.4                      |    5 +-
 testsuite/expect/test5.5                      |    5 +-
 testsuite/expect/test5.6                      |    5 +-
 testsuite/expect/test5.7                      |    5 +-
 testsuite/expect/test5.8                      |    5 +-
 testsuite/expect/test6.1                      |    5 +-
 testsuite/expect/test6.10                     |    5 +-
 testsuite/expect/test6.11                     |    5 +-
 testsuite/expect/test6.12                     |    5 +-
 testsuite/expect/test6.13                     |    3 +-
 testsuite/expect/test6.14                     |  195 +
 testsuite/expect/test6.2                      |    5 +-
 testsuite/expect/test6.3                      |    8 +-
 testsuite/expect/test6.4                      |    5 +-
 testsuite/expect/test6.5                      |    5 +-
 testsuite/expect/test6.6                      |    5 +-
 testsuite/expect/test6.7                      |    5 +-
 testsuite/expect/test6.8                      |    5 +-
 testsuite/expect/test6.9                      |    5 +-
 testsuite/expect/test7.1                      |   25 +-
 testsuite/expect/test7.10                     |    5 +-
 testsuite/expect/test7.11                     |  131 +-
 testsuite/expect/test7.11.prog.c              |   13 +-
 testsuite/expect/test7.2                      |    5 +-
 testsuite/expect/test7.2.prog.c               |   24 +-
 testsuite/expect/test7.3                      |    5 +-
 testsuite/expect/test7.3.io.c                 |    5 +-
 testsuite/expect/test7.3.prog.c               |    7 +-
 testsuite/expect/test7.4                      |   17 +-
 testsuite/expect/test7.4.prog.c               |    5 +-
 testsuite/expect/test7.6                      |   11 +-
 testsuite/expect/test7.6.prog.c               |    5 +-
 testsuite/expect/test7.7                      |    7 +-
 testsuite/expect/test7.7.prog.c               |    5 +-
 testsuite/expect/test7.8                      |    7 +-
 testsuite/expect/test7.8.prog.c               |    5 +-
 testsuite/expect/test7.9                      |    5 +-
 testsuite/expect/test7.9.prog.c               |    5 +-
 testsuite/expect/test8.1                      |    5 +-
 testsuite/expect/test8.2                      |    5 +-
 testsuite/expect/test8.3                      |    5 +-
 testsuite/expect/test8.4                      |    5 +-
 testsuite/expect/test8.4.prog.c               |    5 +-
 testsuite/expect/test8.5                      |  324 +-
 testsuite/expect/test8.6                      |  247 +-
 testsuite/expect/test8.7                      |    7 +-
 testsuite/expect/test8.7.prog.c               |    5 +-
 testsuite/expect/test9.1                      |    5 +-
 testsuite/expect/test9.2                      |    5 +-
 testsuite/expect/test9.3                      |    5 +-
 testsuite/expect/test9.4                      |    5 +-
 testsuite/expect/test9.5                      |    5 +-
 testsuite/expect/test9.6                      |    5 +-
 testsuite/expect/test9.7                      |    5 +-
 testsuite/expect/test9.7.bash                 |    5 +-
 testsuite/expect/test9.8                      |   52 +-
 testsuite/expect/usleep                       |    5 +-
 testsuite/slurm_unit/Makefile.in              |    8 +
 testsuite/slurm_unit/api/Makefile.in          |    8 +
 testsuite/slurm_unit/api/manual/Makefile.in   |    8 +
 testsuite/slurm_unit/api/manual/cancel-tst.c  |    5 +-
 .../slurm_unit/api/manual/complete-tst.c      |    5 +-
 .../slurm_unit/api/manual/job_info-tst.c      |    5 +-
 .../slurm_unit/api/manual/node_info-tst.c     |    5 +-
 .../api/manual/partition_info-tst.c           |    5 +-
 .../slurm_unit/api/manual/reconfigure-tst.c   |    5 +-
 testsuite/slurm_unit/api/manual/submit-tst.c  |    5 +-
 .../slurm_unit/api/manual/update_config-tst.c |    5 +-
 testsuite/slurm_unit/common/Makefile.in       |    8 +
 testsuite/slurm_unit/slurmctld/Makefile.in    |    8 +
 testsuite/slurm_unit/slurmd/Makefile.in       |    8 +
 testsuite/slurm_unit/slurmdbd/Makefile.in     |    8 +
 1225 files changed, 79365 insertions(+), 25389 deletions(-)
 create mode 100644 RELEASE_NOTES_LLNL
 create mode 100644 auxdir/x_ac_blcr.m4
 create mode 100644 auxdir/x_ac_cray.m4
 create mode 100644 auxdir/x_ac_env.m4
 create mode 100644 auxdir/x_ac_iso.m4
 create mode 100644 contribs/skilling.c
 create mode 100644 doc/html/AllocationPies.gif
 create mode 100644 doc/html/ExampleUsage.gif
 create mode 100644 doc/html/UsagePies.gif
 create mode 100644 doc/html/checkpoint_blcr.shtml
 create mode 100644 doc/html/cray.shtml
 create mode 100644 doc/html/mpi_guide.shtml
 create mode 100644 doc/html/priority_multifactor.shtml
 create mode 100644 doc/html/priority_plugins.shtml
 create mode 100644 doc/html/reservations.shtml
 create mode 100644 doc/html/resource_limits.shtml
 delete mode 100644 doc/html/sched_policy.shtml
 create mode 100644 doc/html/slurm.sc08.bof.pdf
 create mode 100644 doc/html/slurm.sc08.status.pdf
 create mode 100644 doc/html/sun_const.shtml
 create mode 100644 doc/html/topo_ex1.gif
 create mode 100644 doc/html/topo_ex2.gif
 create mode 100644 doc/html/topology.shtml
 create mode 100644 doc/html/topology_plugin.shtml
 create mode 100644 doc/man/man1/sprio.1
 create mode 100644 doc/man/man1/srun_cr.1
 create mode 100644 doc/man/man1/sshare.1
 create mode 100644 doc/man/man3/slurm_checkpoint_tasks.3
 delete mode 100644 doc/man/man3/slurm_complete_job_step.3
 create mode 100644 doc/man/man3/slurm_create_partition.3
 create mode 100644 doc/man/man3/slurm_create_reservation.3
 create mode 100644 doc/man/man3/slurm_delete_reservation.3
 create mode 100644 doc/man/man3/slurm_free_reservation_info_msg.3
 create mode 100644 doc/man/man3/slurm_init_resv_desc_msg.3
 create mode 100644 doc/man/man3/slurm_init_update_node_msg.3
 create mode 100644 doc/man/man3/slurm_load_reservations.3
 create mode 100644 doc/man/man3/slurm_print_reservation_info.3
 create mode 100644 doc/man/man3/slurm_print_reservation_info_msg.3
 create mode 100644 doc/man/man3/slurm_sprint_reservation_info.3
 create mode 100644 doc/man/man3/slurm_takeover.3
 delete mode 100644 doc/man/man3/slurm_trigger.3
 create mode 100644 doc/man/man3/slurm_update_reservation.3
 create mode 100644 doc/man/man5/topology.conf.5
 create mode 100644 src/api/reservation_info.c
 create mode 100644 src/api/slurm_hostlist.c
 create mode 100644 src/api/topo_info.c
 create mode 100644 src/common/basil_resv_conf.c
 create mode 100644 src/common/basil_resv_conf.h
 create mode 100644 src/common/select_job_res.c
 create mode 100644 src/common/select_job_res.h
 create mode 100644 src/common/slurm_priority.c
 create mode 100644 src/common/slurm_priority.h
 create mode 100644 src/common/slurm_strcasestr.c
 create mode 100644 src/common/slurm_strcasestr.h
 create mode 100644 src/common/write_labelled_message.c
 create mode 100644 src/common/write_labelled_message.h
 create mode 100644 src/plugins/checkpoint/blcr/Makefile.am
 create mode 100644 src/plugins/checkpoint/blcr/Makefile.in
 create mode 100644 src/plugins/checkpoint/blcr/checkpoint_blcr.c
 create mode 100644 src/plugins/checkpoint/blcr/cr_checkpoint.sh.in
 create mode 100644 src/plugins/checkpoint/blcr/cr_restart.sh.in
 create mode 100644 src/plugins/priority/Makefile.am
 create mode 100644 src/plugins/priority/Makefile.in
 create mode 100644 src/plugins/priority/basic/Makefile.am
 create mode 100644 src/plugins/priority/basic/Makefile.in
 create mode 100644 src/plugins/priority/basic/priority_basic.c
 create mode 100644 src/plugins/priority/multifactor/Makefile.am
 create mode 100644 src/plugins/priority/multifactor/Makefile.in
 create mode 100644 src/plugins/priority/multifactor/priority_multifactor.c
 create mode 100644 src/plugins/select/bluegene/block_allocator/wire_test.c
 create mode 100644 src/plugins/select/cons_res/job_test.c
 create mode 100644 src/plugins/select/cons_res/job_test.h
 create mode 100644 src/plugins/topology/3d_torus/Makefile.am
 create mode 100644 src/plugins/topology/3d_torus/Makefile.in
 rename src/{slurmctld => plugins/topology/3d_torus}/hilbert.c (98%)
 rename src/{slurmctld => plugins/topology/3d_torus}/hilbert.h (100%)
 rename src/{slurmctld => plugins/topology/3d_torus}/hilbert_slurm.c (87%)
 create mode 100644 src/plugins/topology/3d_torus/topology_3d_torus.c
 create mode 100644 src/plugins/topology/Makefile.am
 create mode 100644 src/plugins/topology/Makefile.in
 create mode 100644 src/plugins/topology/none/Makefile.am
 create mode 100644 src/plugins/topology/none/Makefile.in
 create mode 100644 src/plugins/topology/none/topology_none.c
 create mode 100644 src/plugins/topology/tree/Makefile.am
 create mode 100644 src/plugins/topology/tree/Makefile.in
 create mode 100644 src/plugins/topology/tree/topology_tree.c
 delete mode 100644 src/sacct/sacct_stat.c
 create mode 100644 src/sacctmgr/config_functions.c
 create mode 100644 src/scontrol/create_res.c
 create mode 100644 src/scontrol/info_res.c
 create mode 100644 src/slurmctld/basil_interface.c
 create mode 100644 src/slurmctld/basil_interface.h
 create mode 100644 src/slurmctld/port_mgr.c
 create mode 100644 src/slurmctld/port_mgr.h
 delete mode 100644 src/slurmctld/private.key
 create mode 100644 src/slurmctld/reservation.c
 create mode 100644 src/slurmctld/reservation.h
 create mode 100644 src/slurmctld/topo_plugin.c
 create mode 100644 src/slurmctld/topo_plugin.h
 create mode 100644 src/slurmd/common/set_oomadj.c
 create mode 100644 src/slurmd/common/set_oomadj.h
 create mode 100644 src/slurmdbd/backup.c
 create mode 100644 src/slurmdbd/backup.h
 create mode 100644 src/smap/reservation_functions.c
 create mode 100644 src/sprio/Makefile.am
 create mode 100644 src/sprio/Makefile.in
 create mode 100644 src/sprio/opts.c
 create mode 100644 src/sprio/print.c
 create mode 100644 src/sprio/print.h
 create mode 100644 src/sprio/sprio.c
 create mode 100644 src/sprio/sprio.h
 create mode 100644 src/sreport/resv_reports.c
 create mode 100644 src/sreport/resv_reports.h
 create mode 100644 src/srun/task_state.c
 create mode 100644 src/srun/task_state.h
 create mode 100644 src/srun_cr/Makefile.am
 create mode 100644 src/srun_cr/Makefile.in
 create mode 100644 src/srun_cr/srun_cr.c
 create mode 100644 src/sshare/Makefile.am
 create mode 100644 src/sshare/Makefile.in
 create mode 100644 src/sshare/process.c
 create mode 100644 src/sshare/sshare.c
 create mode 100644 src/sshare/sshare.h
 create mode 100644 src/sview/resv_info.c
 create mode 100755 testsuite/expect/test1.45
 create mode 100755 testsuite/expect/test1.60
 create mode 100755 testsuite/expect/test12.4
 create mode 100755 testsuite/expect/test12.5
 rename testsuite/expect/{test17.19 => test2.12} (50%)
 create mode 100755 testsuite/expect/test21.25
 create mode 100755 testsuite/expect/test22.1
 create mode 100755 testsuite/expect/test22.2
 create mode 100755 testsuite/expect/test23.1
 create mode 100755 testsuite/expect/test23.2
 create mode 100755 testsuite/expect/test23.3
 create mode 100755 testsuite/expect/test24.1
 create mode 100644 testsuite/expect/test24.1.prog.c
 create mode 100755 testsuite/expect/test24.2
 create mode 100755 testsuite/expect/test25.1
 create mode 100755 testsuite/expect/test3.11
 create mode 100755 testsuite/expect/test6.14

diff --git a/AUTHORS b/AUTHORS
index 657216e85..d48803edd 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -22,6 +22,7 @@ Greg Johnson <gjohnson(at)lanl.gov>
 Morris Jette <jette1(at)llnl.gov>
 Jason King <king49(at)llnl.gov>
 Nancy Kritkausky <Nancy.Kritkausky(at)bull.com>
+Eric Lin <Eric.Lin(at)bull.com>
 Bernard Li <bli(at)bcgsc.ca>
 Puenlap Lee <Puen-Lap.Lee(at)bull.com>
 Steven McDougall <smcdougall(at)sicortex.com>
diff --git a/BUILD.NOTES b/BUILD.NOTES
index d52b6be88..1a50191ef 100644
--- a/BUILD.NOTES
+++ b/BUILD.NOTES
@@ -91,8 +91,9 @@ To build and run on AIX:
 1. export OBJECT_MODE=32
 2. Build with:
    ./configure --enable-debug --prefix=/opt/freeware \
-	--sysconfdir=/opt/freeware/etc/slurm
-	--with-ssl=/opt/freeware --with-munge=/opt/freeware
+	--sysconfdir=/opt/freeware/etc/slurm \
+	--with-ssl=/opt/freeware --with-munge=/opt/freeware \
+	--with-proctrack=/opt/freeware
    make
    make uninstall  # remove old shared libraries, aix caches them
    make install
@@ -110,7 +111,7 @@ To build and run on AIX:
 	%_with_aix		1
 	%with_ssl               "--with-ssl=/opt/freeware"
 	%with_munge             "--with-munge=/opt/freeware"
-	%with_proctrack         "--with-proctrack=/admin/llnl/include"
+	%with_proctrack         "--with-proctrack=/opt/freeware"
    Log in to the machine "uP".  uP is currently the lowest-common-denominator
      AIX machine.
    CC=/usr/bin/gcc build -s https://eris.llnl.gov/svn/slurm/tags/slurm-1-2-0-0-pre3
diff --git a/DISCLAIMER b/DISCLAIMER
index ea55a6dba..f6080c5a8 100644
--- a/DISCLAIMER
+++ b/DISCLAIMER
@@ -44,10 +44,11 @@ Prashanth Tamraparni <prashanth.tamraparni(at)hp.com>
 Jay Windley <jwindley(at)lnxi.com>
 Ann-Marie Wunderlin<Anne-Marie.Wunderlin(at)Bull.com>
 
-LLNL-CODE-402394.
+CODE-OCEC-09-009. All rights reserved.
 
 This file is part of SLURM, a resource management program.
-For details, see <http://www.llnl.gov/linux/slurm/>.
+For details, see <https://computing.llnl.gov/linux/slurm/>.
+Please also read the supplied file: DISCLAIMER.
 
 SLURM 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
diff --git a/META b/META
index dda32ed2f..38904def4 100644
--- a/META
+++ b/META
@@ -1,11 +1,11 @@
   Api_age:       0
-  Api_current:   13
+  Api_current:   20
   Api_revision:  0
-  Major:         1
+  Major:         2
   Meta:          1
-  Micro:         15
-  Minor:         3
+  Micro:         2
+  Minor:         0
   Name:          slurm
   Release:       1
   Release_tags:  dist
-  Version:       1.3.15
+  Version:       2.0.2
diff --git a/Makefile.in b/Makefile.in
index 60157dd94..d5133056d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -48,14 +48,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -120,6 +124,10 @@ 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@
diff --git a/NEWS b/NEWS
index b1ae1ded5..5cf17dce6 100644
--- a/NEWS
+++ b/NEWS
@@ -1,8 +1,422 @@
 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.2
+========================
+ -- Fix, don't remove job details when a job is cancelled while pending.
+ -- Do correct type for mktime so garbage isn't returned on 64bit systems 
+    for accounting archival.
+ -- Better checking in sacctmgr to avoid infinite loops.
+ -- fix minor memory leak in fake_slurm_step_layout_create()
+ -- Fix node weight (scheduling priority) calculation for powered down
+    nodes. Patch from Hongjia Cao, NUDT.
+ -- Fix node suspend/resume rate calculations. Patch from Hongjia Cao, NUDT.
+ -- Change calculations using ResumeRate and SuspendRate to provide higher
+    resolution.
+ -- Log the IP address for incoming messages having an invalid protocol 
+    version number.
+ -- Fix for sacct to show jobs that start the same second as the sacct
+    command is issued.
+ -- BLUEGENE - Fix for -n option to work on correct cpu counts for each 
+    midplane instead of treating -n as a c-node count.
+ -- salloc now sets SLURM_NTASKS_PER_NODE if --ntasks-per-node option is set.
+ -- Fix select/linear to properly set a job's count of allocated processors
+    (all processors on the allocated nodes).
+ -- Fix select/cons_res to allocate proper CPU count when --ntasks-per-node
+    option is used without a task count in the job request.
+ -- Insure that no node is allocated to a job for which the CPU count is less
+    than --ntasks-per-node * --cpus-per-task.
+ -- Correct AllocProcs reported by "scontrol show node" when ThreadsPerCore
+    is greater than 1 and select/cons_res is used.
+ -- Fix scontrol show config for accounting information when values are 
+    not set in the slurm.conf.
+ -- Added a set of SBATCH_CPU_BIND* and SBATCH_MEM_BIND* env variables to keep
+    jobsteps launched from within a batch script from inheriting the CPU and
+    memory affinity that was applied to the batch script.
+ -- Ignore the extra processors on a node above configured size if either 
+    sched/gang or select/cons_res is configured.
+ -- Fix bug in tracking memory allocated on a node for select/cons_res plugin.
+ -- Fixed a race condition when writing labelled output with a file per task
+    or per node, which potentially closed a file before all data was written.
+ -- BLUEGENE - Fix, for if a job comes in spanning both less than and 
+    over 1 midplane in size we check the connection type appropriately.
+ -- Make sched/backfill properly schedule jobs with constraints having node 
+    counts. NOTE: Backfill of jobs with constraings having exclusive OR 
+    operators are not fully supported.  
+ -- If srun is cancelled by SIGINT, set the job state to cancelled, not 
+    failed.
+ -- BLUEGENE - Fix, for if you are setting an subbp into an error mode 
+    where the subbp stated isn't the first ionode in a nodecard.
+ -- Fix for backfill to not core when checking shared nodes.
+ -- Fix for scontrol to not core when hitting just return in interactive mode.
+ -- Improve sched/backfill logic with respect to shared nodes (multiple jobs
+    per node).
+ -- In sched/wiki (Maui interface) add job info fields QOS, RCLASS, DMEM and
+    TASKSPERNODE.
+
+* Changes in SLURM 2.0.1
+========================
+ -- Fix, truncate time of start and end for job steps in sacct.
+ -- Initialize all messages to slurmdbd. Previously uninitialized string could
+    cause slurmctld to fail with invalid memory reference.
+ -- BLUEGENE - Fix, for when trying to finish a torus on a block already 
+    visited.  Even though this may be possible electrically this isn't valid
+    in the under lying infrastructure.
+ -- Fix, in mysql plugins change mediumints to int to support full 32bit 
+    numbers.
+ -- Add sinfo node state filtering support for NO_RESPOND, POWER_SAVE, FAIL, 
+    MAINT, DRAINED and DRAINING states. The state filter of DRAIN still maps
+    to any node in either DRAINED or DRAINING state.
+ -- Fix reservation logic when job requests specific nodes that are already
+    in some reservation the job can not use.
+ -- Fix recomputation of a job's end time when allocated nodes which are
+    being powered up. The end time would be set in the past if the job's
+    time limit was INFINITE, resulting in it being prematurely terminated.
+ -- Permit regular user to change the time limit of his pending jobs up to
+    the partition's limit.
+ -- Fix "-Q" (quiet) option for salloc and sbatch which was previously 
+    ignored.
+ -- BLUEGENE - fix for finding odd shaped blocks in dynamic mode.
+ -- Fix logic supporting SuspendRate and ResumeRate configuration parameters.
+    Previous logic was changing state of one too many nodes per minute.
+ -- Save new reservation state file on shutdown (even if no changes).
+ -- Fix, when partitions are deleted the sched and select plugins are notified.
+ -- Fix for slurmdbd to create wckeyid's when they don't exist
+ -- Fix linking problem that prevented checkpoint/aix from working.
+
+* Changes in SLURM 2.0.0
+========================
+ -- Fix for bluegene systems to be able to create 32 node blocks with only 
+    16 psets defined in dynamic layout mode.
+ -- Improve srun_cr handling of child srun forking. Patch from Hongjia Cao, 
+    NUDT.
+ -- Configuration parameter ResumeDelay replaced by SuspendTimeout and 
+    ResumeTimeout.
+ -- BLUEGENE - sview/sinfo now displays correct cnode numbers for drained nodes
+    or blocks in error state.
+ -- Fix some batch job launch bugs when powering up suspended nodes.
+ -- Added option '-T' for sacct to truncate time of start and end and set
+    default of --starttime to Midnight of current day.
+
+* Changes in SLURM 2.0.0-rc2
+============================
+ -- Change fanout logic to start on calling node instead of first node in 
+    message nodelist.
+ -- Fix bug so that smap builds properly on Sun Constellation system.
+ -- Filter white-space out from node feature specification.
+ -- Fixed issue with duration not being honored when updating start time in 
+    reservations.
+ -- Fix bug in sched/wiki and sched/wiki2 plugins for reporting job resource
+    allocation properly when node names are configured out of sort order 
+    with more than one numeric suffix (e.g. "tux10-1" is configured after 
+    "tux5-1").
+ -- Avoid re-use of job_id (if specified at submit time) when the existing
+    job is in completing state (possible race condition with Moab).
+ -- Added SLURM_DISTRIBUTION to env for salloc.
+ -- Add support for "scontrol takeover" command for backup controller to 
+    assume control immediately. Patch from Matthieu Hautreux, CEA.
+ -- If srun is unable to communicate with the slurmd tasks are now marked as 
+    failed with the controller.
+ -- Fixed issues with requeued jobs not being accounted for correctly in 
+    the accounting.
+ -- Clear node's POWER_SAVE flag if configuration changes to one lacking a
+    ResumeProgram.
+ -- Extend a job's time limit as appropriate due to delays powering up nodes.
+ -- If sbatch is used to launch a job step within an existing allocation (as
+    used by LSF) and the required node is powered down, print the message
+    "Job step creation temporarily disabled, retrying", sleep, and retry.
+ -- Configuration parameter ResumeDelay added to control how much time must 
+    after a node has been suspended before resume it (e.g. powering it back 
+    up).
+ -- Fix CPU binding for batch program. Patch from Matthieu Hautreux, CEA.
+ -- Fix for front end systems non-responding nodes now show up correctly in
+    sinfo.
+
+* Changes in SLURM 2.0.0-rc1
+============================
+ -- Fix bug in preservation of advanced reservations when slurmctld restarts.
+ -- Updated perlapi to match correctly with slurm.h structures
+ -- Do not install the srun command on BlueGene systems (mpirun must be used to
+    launch tasks).
+ -- Corrections to scheduling logic for topology/tree in configurations where 
+    nodes are configured in multiple leaf switches.
+ -- Patch from Matthieu Hautreux for backup mysql deamon support.
+ -- Changed DbdBackup to DbdBackupHost for slurmdbd.conf file
+ -- Add support for spank_strerror() function and improve error handling in
+    general for SPANK plugins.
+ -- Added configuration parameter SrunIOTimeout to optionally ping srun's tasks
+    for better fault tolerance (e.g. killed and restarteed SLURM daemons on 
+    compute node).
+ -- Add slurmctld and slurmd binding to appropriate communications address
+    based upon NodeAddr, ControllerAddr and BackupAddr configuration 
+    parameters. Based upon patch from Matthieu Hautreux, CEA.
+    NOTE: Fails when SlurmDBD is configured with some configurations.
+    NOTE: You must define BIND_SPECIFIC_ADDR to enable this option.
+ -- Avoid using powered down nodes when scheduling work if possible. 
+    Fix possible invalid memory reference in power save logic.
+
+* Changes in SLURM 1.4.0-pre13
+==============================
+ -- Added new partition option AllocNodes which controls the hosts from 
+    which jobs can be submitted to this partition. From Matthieu Hautreux, CEA.
+ -- Better support the --contiguous option for job allocations.
+ -- Add new scontrol option: show topology (reports contents of topology.conf 
+    file via RPC if topology/tree plugin is configured).
+ -- Add advanced reservation display to smap command.
+ -- Replaced remaining references to SLURM_JOBID with SLURM_JOB_ID - except
+    when needed for backwards compatibility.
+ -- Fix logic to properly excise a DOWN node from the allocation of a job
+    with the --no-kill option.
+ -- The MySQL and PgSQL plugins for accounting storage and job completion are
+    now only built if the underlying database libraries exists (previously
+    the plugins were built to produce a fatal error when used).
+ -- BLUEGENE - scontrol show config will now display bluegene.conf information.
+
+* Changes in SLURM 1.4.0-pre12
+==============================
+ -- Added support for hard time limit by associations with added configuration 
+    option PriorityUsageResetPeriod. This specifies the interval at which to 
+    clear the record of time used. This is currently only available with the 
+    priority/multifactor plugin.
+ -- Added SLURM_SUBMIT_DIR to sbatch's output environment variables.
+ -- Backup slurmdbd support implemented.
+ -- Update to checkpoint/xlch logic from Hongjia Cao, NUDT.
+ -- Added configuration parameter AccountingStorageBackupHost.
+
+* Changes in SLURM 1.4.0-pre11
+==============================
+ -- Fix slurm.spec file for RPM build.
+
+* Changes in SLURM 1.4.0-pre10
+==============================
+ -- Critical bug fix in task/affinity when the CoresPerSocket is greater
+    than the ThreadsPerCore (invalid memory reference).
+ -- Add DebugFlag parameter of "Wiki" to log sched/wiki and wiki2 
+    communications in greater detail.
+ -- Add "-d <slurmstepd_path>" as an option to the slurmd daemon to
+    specifying a non-stardard slurmstepd file, used  for testing purposes.
+ -- Minor cleanup to crypto/munge plugin.
+    - Restrict uid allowed to decode job credentials in crypto/munge
+    - Get slurm user id early in crypto/munge
+    - Remove buggy error code handling in crypto/munge
+ -- Added sprio command - works only with the priority/multifactor plugin
+ -- Add real topology plugin infrastructure (it was initially added 
+    directly into slurmctld code). To specify topology information,
+    set TopologyType=topology/tree and add configuration information
+    to a new file called topology.conf. See "man topology.conf" or
+    topology.html web page for details.
+ -- Set "/proc/self/oom_adj" for slurmd and slurmstepd daemons based upon
+    the values of SLURMD_OOM_ADJ and SLURMSTEPD_OOM_ADJ environment 
+    variables. This can be used to prevent daemons being killed when
+    a node's memory is exhausted. Based upon patch by Hongjia  Cao, NUDT.
+ -- Fix several bugs in task/affinity: cpuset logic was broken and 
+    --cpus-per-task option not properly handled.
+ -- Ensure slurmctld adopts SlurmUser GID as well as UID on startup.
+
+* Changes in SLURM 1.4.0-pre9
+=============================
+ -- OpenMPI users only: Add srun logic to automatically recreate and 
+    re-launch a job step if the step fails with a reserved port conflict.
+ -- Added TopologyPlugin configuration parameter.
+ -- Added switch topology data structure to slurmctld (for use by select 
+    plugin) add load it based upon new slurm.conf parameters: SwitchName, 
+    Nodes, Switches and LinkSpeed.
+ -- Modify select/linear and select/cons_res plugins to optimize resource
+    allocation with respect to network topology.
+ -- Added  support for new configuration parameter EpilogSlurmctld (executed 
+    by slurmctld daemon).
+ -- Added checkpoint/blcr plugin, SLURM now support job checkpoint/restart 
+    using BLCR. Patch from Hongjia Cao, NUDT, China.
+ -- Made a variety of new environment variables available to PrologSlurmctld
+    and EpilogSlurmctld. See the "Prolog and Epilog Scripts" section of the 
+    slurm.conf man page for details.
+ -- NOTE: Cold-start (without preserving state) required for upgrade from 
+    version 1.4.0-pre8.
+
+* Changes in SLURM 1.4.0-pre8
+=============================
+ -- In order to create a new partition using the scontrol command, use
+    the "create" option rather than "update" (which will only operate
+    upon partitions that already exist).
+ -- Added environment variable SLURM_RESTART_COUNT to batch jobs to
+    indicated the count of job restarts made.
+ -- Added sacctmgr command "show config".
+ -- Added the scancel option --nodelist to cancel any jobs running on a
+    given list of nodes.
+ -- Add partition-specific DefaultTime (default time limit for jobs, 
+    if not specified use MaxTime for the partition. Patch from Par
+    Andersson, National Supercomputer Centre, Sweden.
+ -- Add support for the scontrol command to be able change the Weight
+    associated with nodes. Patch from Krishnakumar Ravi[KK] (HP).
+ -- Add DebugFlag configuration option of "CPU_Bind" for detailed CPU
+    binding information to be logged.
+ -- Fix some significant bugs in task binding logic (possible infinite loops
+    and memory corruption).
+ -- Add new node state flag of NODE_STATE_MAINT indicating the node is in
+    a reservation of type MAINT.
+ -- Modified task/affinity plugin to automatically bind tasks to sockets,
+    cores, or threads as appropriated based upon resource allocation and
+    task count. User can override with srun's --cpu_bind option. 
+ -- Fix bug in backfill logic for select/cons_res plugin, resulted in 
+    error "cons_res:_rm_job_from_res: node_state mis-count".
+ -- Add logic go bind a batch job to the resources allocated to that job.
+ -- Add configuration parameter MpiParams for (future) OpenMPI port 
+    management. Add resv_port_cnt and resv_ports fields to the job step 
+    data structures. Add environment variable SLURM_STEP_RESV_PORTS to
+    show what ports are reserved for a job step.
+ -- Add support for SchedulerParameters=interval=<sec> to control the time
+    interval between executions of the backfill scheduler logic.
+ -- Preserve record of last job ID in use even when doing a cold-start unless
+    there is no job state file or there is a change in its format (which only 
+    happens when there is a change in SLURM's major or minor version number: 
+    v1.3 -> v1.4).
+ -- Added new configuration parameter KillOnBadExit to kill a job step as soon
+    as any task of a job step exits with a non-zero exit code. Patch based
+    on work from Eric Lin, Bull.
+ -- Add spank plugin calls for use by salloc and sbatch command, see 
+    "man spank" for details.
+ -- NOTE: Cold-start (without preserving state) required for upgrade from 
+    version 1.4.0-pre7.
+
+* Changes in SLURM 1.4.0-pre7
+=============================
+ -- Bug fix for preemption with select/cons_res when there are no idle nodes.
+ -- Bug fix for use of srun options --exclusive and --cpus-per-task together
+    for job step resource allocation (tracking of cpus in use was bad).
+ -- Added the srun option --preserve-env to pass the current values of 
+    environment variables SLURM_NNODES and SLURM_NPROCS through to the 
+    executable, rather than computing them from commandline parameters.
+ -- For select/cons_res or sched/gang only: Validate a job's resource 
+    allocation socket and core count on each allocated node. If the node's
+    configuration has been changed, then abort the job.
+ -- For select/cons_res or sched/gang only: Disable updating a node's 
+    processor count if FastSchedule=0. Administrators must set a valid
+    processor count although the memory and disk space configuration can
+    be loaded from the compute node when it starts.
+ -- Add configure option "--disable-iso8601" to disable SLURM use of ISO 8601
+    time format at the time of SLURM build. Default output for all commands
+    is now ISO 8601 (yyyy-mm-ddThh:mm:ss).
+ -- Add support for scontrol to explicity power a node up or down using the
+    configured SuspendProg and ResumeProg programs.
+ -- Fix book select/cons_res logic for tracking the number of allocated
+    CPUs on a node when a partition's Shared value is YES or FORCE.
+ -- Added configure options "--enable-cray-xt" and "--with-apbasil=PATH" for
+    eventual support of Cray-XT systems.
+
+* Changes in SLURM 1.4.0-pre6
+=============================
+ -- Fix job preemption when sched/gang and select/linear are configured with
+    non-sharing partitions.
+ -- In select/cons_res insure that required nodes have available resources.
+
+* Changes in SLURM 1.4.0-pre5
+=============================
+ -- Correction in setting of SLURM_CPU_BIND environment variable.
+ -- Rebuild slurmctld's job select_jobinfo->node_bitmap on restart/reconfigure
+    of the daemon rather than restoring the bitmap since the nodes in a system
+    can change (be added or removed).
+ -- Add configuration option "--with-cpusetdir=PATH" for non-standard 
+    locations.
+ -- Get new multi-core data structures working on BlueGene systems.
+ -- Modify PMI_Get_clique_ranks() to return an array of integers rather 
+    than a char * to satisfy PMI standard. Correct logic in 
+    PMI_Get_clique_size() for when srun --overcommit option is used.
+ -- Fix bug in select/cons_res, allocated a job all of the processors on a 
+    node when the --exclusive option is specified as a job submit option.
+ -- Add NUMA cpu_bind support to the task affinity plugin. Binds tasks to
+    a set of CPUs that belong NUMA locality domain with the appropriate
+    --cpu-bind option (ldoms, rank_ldom, map_ldom, and mask_ldom), see
+    "man srun" for more information.
+
+* Changes in SLURM 1.4.0-pre4
+=============================
+ -- For task/affinity, force jobs to use a particular task binding by setting
+    the TaskPluginParam configuration parameter rather than slurmd's
+    SLURM_ENFORCED_CPU_BIND environment variable.
+ -- Enable full preemption of jobs by partition with select/cons_res 
+    (cons_res_preempt.patch from Chris Holmes, HP).
+ -- Add configuration parameter DebugFlags to provide detailed logging for
+    specific subsystems (steps and triggers so far).
+ -- srun's --no-kill option is passed to slurmctld so that a job step is 
+    killed even if the node where srun executes goes down (unless the 
+    --no-kill option is used, previous termination logic would fail if 
+    srun was not responding).
+ -- Transfer a job step's core bitmap from the slurmctld to the slurmd
+    within the job step credential.
+ -- Add cpu_bind, cpu_bind_type, mem_bind and mem_bind_type to job allocation
+    request and job_details structure in slurmctld. Add support to --cpu_bind
+    and --mem_bind options from salloc and sbatch commands.
+
+* Changes in SLURM 1.4.0-pre3
+=============================
+ -- Internal changes: CPUs per node changed from 32-bit to 16-bit size.
+    Node count fields changed from 16-bit to 32-bit size in some structures.
+ -- Remove select plugin functions select_p_get_extra_jobinfo(),
+    select_p_step_begin() and select_p_step_fini().
+ -- Remove the following slurmctld job structure fields: num_cpu_groups,
+    cpus_per_node, cpu_count_reps, alloc_lps_cnt, alloc_lps, and used_lps.
+    Use equivalent fields in new "select_job" structure, which is filled
+    in by the select plugins.
+ -- Modify mem_per_task in job step request from 16-bit to 32-bit size.
+    Use new "select_job" structure for the job step's memory management.
+ -- Add core_bitmap_job to slurmctld's job step structure to identify
+    which specific cores are allocated to the step.
+ -- Add new configuration option OverTimeLimit to permit jobs to exceed 
+    their (soft) time limit by a configurable amount. Backfill scheduling
+    will be based upon the soft time limit.
+ -- Remove select_g_get_job_cores(). That data is now within the slurmctld's
+    job structure.
+
+* Changes in SLURM 1.4.0-pre2
+=============================
+ -- Remove srun's --ctrl-comm-ifhn-addr option (for PMI/MPICH2). It is no
+    longer needed.
+ -- Modify power save mode so that nodes can be powered off when idle. See
+    https://computing.llnl.gov/linux/slurm/power_save.html or 
+    "man slurm.conf" (SuspendProgram and related parameters) for more 
+    information.
+ -- Added configuration parameter PrologSlurmctld, which can be used to boot
+    nodes into a particular state for each job. See "man slurm.conf" for 
+    details.
+ -- Add configuration parameter CompleteTime to control how long to wait for 
+    a job's completion before allocating already released resources to pending
+    jobs. This can be used to reduce fragmentation of resources. See
+    "man slurm.conf" for details.
+ -- Make default CryptoType=crypto/munge. OpenSSL is now completely optional.
+ -- Make default AuthType=auth/munge rather than auth/none.
+ -- Change output format of "sinfo -R" from "%35R %N" to "%50R %N".
+
+* Changes in SLURM 1.4.0-pre1
+=============================
+ -- Save/restore a job's task_distribution option on slurmctld retart.
+    NOTE: SLURM must be cold-started on converstion from version 1.3.x.
+ -- Remove task_mem from job step credential (only job_mem is used now).
+ -- Remove --task-mem and --job-mem options from salloc, sbatch and srun
+    (use --mem-per-cpu or --mem instead).
+ -- Remove DefMemPerTask from slurm.conf (use DefMemPerCPU or DefMemPerNode
+    instead).
+ -- Modify slurm_step_launch API call. Move launch host from function argument
+    to element in the data structure slurm_step_launch_params_t, which is
+    used as a function argument.
+ -- Add state_reason_string to job state with optional details about why
+    a job is pending.
+ -- Make "scontrol show node" output match scontrol input for some fields
+    ("Cores" changed to "CoresPerSocket", etc.).
+ -- Add support for a new node state "FUTURE" in slurm.conf. These node records
+    are created in SLURM tables for future use without a reboot of the SLURM
+    daemons, but are not reported by any SLURM commands or APIs.
+
+* Changes in SLURM 1.3.17
+=========================
+ -- Fix bug in configure script that can clear user specified LIBS.
+
 * Changes in SLURM 1.3.16
 =========================
+ -- Fix memory leak in forward logic of tree message passing.
+ -- Fix job exit code recorded for srun job allocation.
+ -- Bluegene - Bug fix for too many parameters being passed to a debug statement
+ -- Bluegene - Bug fix for systems running more than 8 in the X dim running
+    Dynamic mode.
 
 * Changes in SLURM 1.3.15
 =========================
@@ -24,8 +438,6 @@ documents those changes that are of interest to users and admins.
  -- Fix bug in logic to remove a job's dependency, could result in abort.
  -- Add new error message to sched/wiki and sched/wiki2 (Maui and Moab) for
     STARTJOB request: "TASKLIST includes non-responsive nodes".
- -- Fix bug in task layout for heterogeneous nodes and srun --exclusive
-    option.
  -- Fix bug in select/linear when used with sched/gang that can result in a 
     job's required or excluded node specification being ignored.
  -- Add logic to handle message connect timeouts (timed-out.patch from 
@@ -3754,4 +4166,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 17225 2009-04-10 19:25:52Z da $
+$Id: NEWS 17869 2009-06-16 22:36:02Z jette $
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index f9a138723..4e92c65a6 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -1,259 +1,154 @@
-RELEASE NOTES FOR SLURM VERSION 1.3
-27 June 2008
+RELEASE NOTES FOR SLURM VERSION 2.0
+11 February 2009 (after SLURM 1.4.0-pre8 released)
 
 
 IMPORTANT NOTE:
-SLURM state files in version 1.3 are different from those of version 1.2.
-After installing SLURM version 1.2, plan to restart without preserving 
-jobs or other state information. While SLURM version 1.2 is still running, 
+SLURM state files in version 2.0 are different from those of version 1.3.
+After installing SLURM version 2.0, plan to restart without preserving 
+jobs or other state information. While SLURM version 1.3 is still running, 
 cancel all pending and running jobs (e.g.
 "scancel --state=pending; scancel --state=running"). Then stop and restart 
 daemons with the "-c" option or use "/etc/init.d/slurm startclean".
 
+If using the slurmdbd (SLURM DataBase Daemon) you must update this first.  
+The 2.0 slurmdbd will work with SLURM daemons at version 1.3.7 and above.  
+You will not need to update all clusters at the same time, but it is very 
+important to update slurmdbd first and having it running before updating 
+any other clusters making use of it.  No real harm will come from updating 
+your systems before the slurmdbd, but they will not talk to each other 
+until you do.
+
 There are substantial changes in the slurm.conf configuration file. It 
 is recommended that you rebuild your configuration file using the tool
-doc/html/configurator.html that comes with the distribution. The node 
-information is unchanged and the partition information only changes for 
-the Shared and Priority parameters, so those portions of your old 
-slurml.conf file may be copied into the new file.
-
-Two areas of substantial change are accounting and job scheduling.
-Slurm is now able to save accounting information in a database, 
-either MySQL or PostGreSQL. We have written a new daemon, slurmdbd 
-(Slurm DataBase Daemon), to serve as a centralized data manager for 
-multiple Slurm clusters. A new tool sacctmgr is available to manage
-user accounting information through SlurmdDBD and a variety of 
-other tools are still under development to generate assorted 
-acccounting reports including graphics and a web interface. Slurm 
-now supports gang scheduling (time-slicing of parallel jobs for 
-improved responsiveness and system utilization). Many related 
-scheduling changes have also been made. 
-
-There are changes in SLURM's RPMs. "slurm-auth-munge" was changed to 
-"slurm-munge" since it now contains the authentication and cryptographic 
-signature plugins for Munge. The SLURM plugins have been moved out of 
-the main "slurm" RPM to a new RPM called "slurm-plugins". There is a 
-new RPM called "slurm-slurmdbd" (SLURM DataBase Daemon). Slurmdbd is 
-used to provide a secure SLURM database interface for accounting purposes 
-(more information about that below). The "slurm-slurmdbd" RPM requires 
-the "slurm-plugins" RPM, but none of the other SLURM RPMs. The main 
-"slurm" RPM also requires the "slurm-plugins" RPM.
-
-To archive accounting records in a database then database RPMs must be 
-installed where the SLURM RPMs are build and where the database is used. 
-You have a choise of database, either "mysql" plus "mysql-devel" or 
-"postgres" plus "postgres-devel" RPMs.
-
-Many enhancements have been made for better Slurm integration with 
-Moab and Maui schedulers. Moab version 5.2.3 or higher should be 
-used with SLURM version 1.3. In the Moab configuration file, moab.cfg,
-change the SUBMITCMD option from "srun --batch" to "sbatch" since the 
-"srun --batch" option is no longer valid (use of full pathnames to 
-the commands are recommended, e.g. "/usr/local/bin/sbatch").
-
-Major changes in Slurm version 1.3 are described below. Some changes
-made after the initial release of Slurm version 1.2 are also noted.
-Many less significant changes are not identified here. A complete list 
-of changes can be found in the NEWS file. Man pages should be consulted
-for more details about command and configuration parameter changes.
-
-
-COMMAND CHANGES
-===============
-* The srun options --allocate, --attach and --batch have been removed.
-  Use the new commands added in SLURM version 1.2 for this functionality:
-  salloc  - Create a job allocation (functions like "srun --allocate")
-  sattach - Attach to an existing job step (functions like "srun --attach")
-  sbatch  - Submit a batch job script (functions like "srun --batch")
-  These commands generally have the same options as the srun command.
-  See the individual man pages for more information. 
-
-* The slaunch command has been removed. Use the srun command instead.
-
-* The srun option --exclusive has been added for job steps to be 
-  allocated processors not already assigned to other job steps. This 
-  can be used to execute multiple job steps simultaneously within a 
-  job allocation and have SLURM perform resource management for the 
-  job steps much like it does for jobs. If dedicated resources are 
-  not immediately available, the job step will be executed later 
-  unless the --immediate option is also set.
-
-* Support is now provided for feature counts in job constraints. For 
-  example: srun --nodes=16 --constraint=graphics*4 ...
-
-* The srun option --pty has been added to start the job with a pseudo 
-  terminal attached to task zero (all other tasks have I/O discarded).
-
-* Job time limits can be specified using the following formats: min, 
-  min:sec, hour:min:sec, and days-hour:min:sec (formerly only supported 
-  minutes).
-
-* scontrol now shows job TimeLimit and partition MaxTime in the format of
-  [days-]hours:minutes:seconds or "UNLIMITED". The scontrol update options 
-  for times now accept minutes, minutes:seconds, hours:minutes:seconds, 
-  days-hours, days-hours:minutes, days-hours:minutes:seconds or "UNLIMITED".
-  This new format also applies to partition MaxTime in the slurm.conf file.
-
-* scontrol now shows job required nodes using the format of 
-  ReqNodes=<min>[-<max>] rather than MinNodes=<min> (and no maximum
-  node count reported).
-
-* scontrol "notify" command added to send message to stdout of srun for 
-  specified job id. 
-
-* Support has been added for a much richer job dependency specification 
-  including testing of exit codes and multiple dependencies.
-
-* The srun options --checkpoint=<interval> and --checkpoint-path=<file_path>
-  have been added.
-
-* Event trigger support was added in Slurm v1.2.2. The command strigger
-  was added to manage the triggers.
-
-* Added a --task-mem option and removed --job-mem option from srun, salloc, 
-  and sbatch commands. Memory limits are applied on a per-task basis.
-
-
-SCHEDULING CHANGES
-==================
-* The sched/backfill plugin has been largely re-written. It now supports 
-  select/cons_res and all job options (required nodes, excluded nodes, 
-  contiguous, etc.).
-
-* Added a new partition parameter, Priority. A job's scheduling priority is 
-  based upon two factors. First the priority of its partition and second the 
-  job's priority. Since nodes can be configured in multiple partitions, this 
-  can be used to configure high priority partitions (queues).
-
-* The partition parameter Shared now has a job count. For example:
-  Shared=YES:4     (Up to 4 jobs may share each resource, user control)
-  Shared=FORCE:2   (Up to 2 jobs may share each resource, no user control)
-
-* Added new parameters DefMemPerTask and MaxMemPerTask to control the default
-  and maximum memory per task. Any task that exceeds the specified size will 
-  be terminated (enforcement requires job accounting to be enabled with a 
-  non-zero value for JoabAcctGatherFrequency).
-
-* The select linear plugin (allocating whole nodes to jobs) can treat memory 
-  as a consumable resource with SelectTypeParameter=CR_Memory configured.
-
-* A new scheduler type, gang, was added for gang scheduling (time-slicing of 
-  parallel jobs). Note: The Slurm gang scheduler is not compatible with the
-  LSF, Maui or Moab schedulers.
-
-* The new parameter, SchedulerTimeSlice, controls the length of gang scheduler 
-  time slices.
-
-* Added a new parameter, Licenses to support cluster-wide consumable 
-  resources. The --licenses option was also added to salloc, sbatch, 
-  and srun.
-
-* The Shared=exclusive option in conjunction with SelectType=select/cons_res
-  can be used to dedicate whole nodes to jobs in specific partitions while
-  allocating sockets, cores, or hyperthreads in other partitions.
-
-* Changes in the interface with the Moab and Maui scheduler have been 
-  extensive providing far better integration between the systems.
-  * Many more parameters are shared between the systems.
-  * A new wiki.conf parameter, ExcludePartitions, can be used to enable 
-    Slurm-based scheduling of jobs in specific partitions to achieve
-    better responsiveness while losing Moab or Maui policy controls.
-  * Another new wiki.conf parameter, HidePartitionJobs, can be used to 
-    to hide jobs in specific partitions from Moab or Maui as well. See
-    the wiki.conf man pages for details. 
-  * Moab relies upon Slurm to get a user's environment variables upon 
-    job submission. If this can not be accomplished within a few seconds 
-    (see the GetEnvTimeout parameter) then cache files can be used. Use
-    contribs/env_cache_builder.c to build these cache files.
-
+doc/html/configurator.html that comes with the distribution.
+
+SLURM can continue to be used as a simple resource manager, but optional
+plugins support sophisticated scheduling algorithms. These plugins do require 
+the use of a database containing user and bank account information, so 
+more administration work is required. SLURM's modular design lets you 
+control the functionality that you want it to provide.
+
+HIGHLIGHTS
+* Sophisticated scheduling algorithms are available in a new plugin. Jobs
+  can be prioritized based upon their age, size and/or fair-share resource 
+  allocation using hierarchical bank accounts. For more information see:
+  https://computing.llnl.gov/linux/slurm/job_priority.html
+* An assortment of resource limits can be imposed upon individual users 
+  and/or hierarchical bank accounts such as maximum job time limit, maximum 
+  job size and maximum number of running jobs. For more information see:
+  https://computing.llnl.gov/linux/slurm/resource_limits.html
+* Advanced reservations can be made to insure resources will be available when
+  needed. For more information see:
+  https://computing.llnl.gov/linux/slurm/reservations.html
+* Idle nodes can now be completely powered down when idle and automatically
+  restarted when there is work available. For more information see:
+  https://computing.llnl.gov/linux/slurm/power_save.html
+* SLURM has been modified to allocate specific cores to jobs and job steps in
+  the centralized scheduler rather than the daemons running on the individual
+  compute nodes. This permits effective preemption or gang schedule jobs.
+* New configuration parameters, PrologSlurmctld and EpilogSlurmctld, can be 
+  used to support the booting of different operating systems for each job. 
+  See "man slurm.conf" for details. 
+* Preemption of jobs from lower priority partitions in order to execute jobs
+  in higher priority partitions is now supported. The jobs from the lower 
+  priority partition will resume once preempting job completes. For more 
+  information see:
+  https://computing.llnl.gov/linux/slurm/preempt.html
+* Added support for optimized resource allocation with respect to network
+  topology. Requires switch configuration information be added to slurm.conf.
+* Support added for Sun Constellation system with optimized resource allocation
+  for a 3-dimensional torus interconnect. For more information see:
+  https://computing.llnl.gov/linux/slurm/sun_const.html
+* Support added for IBM BlueGene/P systems, including High Throughput Computing
+  (HTC) mode.
+* Support for checkpoint/restart using BLCR added using the checkpoint/blcr
+  plugin. For more information see:
+  https://computing.llnl.gov/linux/slurm/checkpoint_blcr.html
+  https://ftg.lbl.gov/CheckpointRestart/CheckpointRestart.shtml
+
+CONFIGURATION FILE CHANGES (see "man slurm.conf" for details)
+* The default AuthType is now "auth/munge" rather than "auth/none".
+* The default CryptoType is now "crypto/munge". OpenSSL is no longer required
+  by SLURM in the default configuration.
+* DefaultTime has been added to specify a default job time limit in the 
+  partition. If not set, uses the partition's MaxTime.
+* PrologSlurmctld has been added and can be used to boot nodes into a 
+  particular state for each job.
+* DefMemPerTask has been removed. Use DefMemPerCPU or DefMemPerNode instead.
+* KillOnBadExit added to immediately terminate a job step whenever any tasks
+  terminates with a non-zero exit code.
+* Added new node state of "FUTURE". These node records are created in SLURM
+  tables for future use without a reboot of the SLURM daemons, but are not
+  reported by any SLURM commands or APIs.
+* BatchStartTime has been added to control how long to wait for a batch job
+  to start (complete Prolog, load environment for Moab, etc.).
+* CompleteTime has been added to control how long to wait for a job's 
+  completion before allocating already released resources to pending jobs.
+* OverTimeLimit added to permit jobs to exceed their (soft) time limit by a
+  configurable amount. Backfill scheduling will be based upon the soft time
+  limit.
+* For select/cons_res or sched/gang only: Each nodes processor count must be
+  specified in the configuration file. Additional resources found by SLURM
+  daemons on the compute nodes will not be used.
+* DebugFlags added to provide detailed logging for specific subsystems.
+* Added job priority plugin.  Default for PriorityType is "priority/basic" 
+  which is the same logic SLURM has today (job priorities are assigned at
+  submit time with decreasing value).  "priority/multifactor" is a new plugin 
+  which utilizes logic to set a priority on a job based on many different 
+  configuration parameters as described here:  
+  https://computing.llnl.gov/linux/slurm/job_priority.html
+* The task/affinity plugin will automatically bind a job step to the CPUs
+  it has been allocated. The entity bound to (sockets, cores or threads)
+  will be automatically set based upon the allocation size and task count
+  SLURM's SPANK cpuset plugin is no longer be needed.
+* Resource allocations can now be optimized according to network topology.
+  The following switch topology configuration options have been added: 
+  TopologyPlugin and in a new topology.conf file: SwitchName, Nodes, 
+  Switches. More information is available in man pages for slurm.conf, 
+  topology.conf, and https://computing.llnl.gov/linux/slurm/topology.html
+* SrunIOTimeout has been added to optionally ping srun's tasks for better 
+  fault tolerance (e.g. killed and restarteed SLURM daemons on compute node).
+* ResumeDelay added to control how much time after a node has been suspended
+  before resume it (e.g. powering it back up).
+* BLUEGENE - Added option DenyPassthrough in the bluegene.conf.  Can be set
+  to any combination of X,Y,Z to not allow passthroughs when running in 
+  dynamic layout mode. (see "man bluegene.conf" for details)
+
+COMMAND CHANGES (see man pages for details)
+* --task-mem and --job-mem options have been removed from salloc, sbatch and
+  srun. Use --mem-per-cpu or --mem instead.
+* Added the srun option --preserve-env to pass the current values of 
+  environment variables SLURM_NNODES and SLURM_NPROCS through to the 
+  executable, rather than computing them from commandline parameters.
+* --ctrl-comm-ifhn-addr option has been removed from the srun command (it is 
+  no longer useful).
+* Batch jobs have an environment variable SLURM_RESTART_COUNT set when 
+  restarted.
+* To create a partition using the scontrol command, use the "create" command
+  rather than "update" with a new partition name.
+* Time format of all SLURM command set to ISO 8601 (yyyy-mm-ddThh:mm:ss)
+  unless the configure option "--disable-iso8601" is used at build time.
+* sacct -S to status a job will no longer work.  Use sstat from now on.
+* sacct --nodes option can be used to filter jobs by allocated node.
+* sacct default starttime is midnight of the previous day rather than the
+  start of the database.
+* sacct and sstat have been rewritten to have a more sacctmgr like feel
+* Added the sprio command to view the factors that comprise a job's scheduling
+  priority - works only with the priority/multifactor plugin.
 
 ACCOUNTING CHANGES
-==================
-* The job accounting plugin has been split into two components: gathering
-  of data and storing the data. The JobAcctType parameter has been replaced by
-  JobAcctGatherType (AIX or Linux) and AccountingStorageType (MySQL, PostGreSQL,
-  filetext, and SlurmDBD). Storing the accounting information into a database
-  will provide you with greater flexibility in managing the data.
-
-* A new daemon SlurmDBD (Slurm DataBase Daemon) has been added. This can 
-  be used to securely manage the accounting data for several Slurm clusters
-  in a central location. Several new parameters have been added to support
-  SlurmDBD, all starting with SlurmDBD. Note that the SlurmDBD daemon is 
-  designed to use a Slurm JobAcctStorageType plugin to use MySQL now. 
-  It also uses existing Slurm authentication plugins.
-
-* A new command, sacctmgr, is available for managing user accounts in
-  SlurmDBD has been added. This information is required for use of SlurmDBD
-  to manage job accounting data. Information is maintained based upon 
-  an "association", which has four components: cluster name, Slurm partition, 
-  user name and bank account. This tool can also be used to maintain 
-  scheduling policy information that can be uploaded to Moab (various 
-  resource limits and fair-share values) See the sacctmgr man page and 
-  accounting web page for more information. Additional tools to generate 
-  accounting reports are currently under development and will be released 
-  soon.
-
-* A new command, sreport, is available for generating accounting reports.
-  While the sacct command can be used to generate information about 
-  individual jobs, sreport can combine this data to report utilization 
-  information by cluster, bank account, user, etc. 
-
-* Job completion records can now be written to a MySQL or PostGreSQL
-  database in addition to a test file as controlled using the JobCompType
-  parameter.
-
-
-OTHER CONFIGURATION CHANGES
-===========================
-* A new parameter, JobRequeue, to control default job behavior after a node 
-  failure (requeue or kill the job). The sbatch--requeue option can be used to
-  override the system default.
-
-* Added new parameters HealthCheckInterval and HealthCheckProgram to 
-  automatically test the health of compute nodes.
-
-* New parameters UnkillableStepProgram and UnkillableStepTimeout offer
-  better control when user processes can not be killed. For example
-  nodes can be automatically rebooted (added in Slurm v1.2.12)
-
-* A new parameter, JobFileAppend, controls how to proceed when a job's
-  output or error file already exist (truncate the file or append to it, 
-  added in slurm v1.2.13). Users can override this using the --open-mode
-  option when submitting a job.
-
-* A new parameter, EnforcePartLimits, was dded. If set then immediately 
-  reject a job that exceeds a partition's size and/or time limits rather
-  then queued for a later change in the partition's limits. NOTE: Not 
-  reported by "scontrol show config" to avoid changing RPCs. It will be 
-  reported in SLURM version 1.4.
-
-* Checkpoint plugins have been added for XLCH and OpenMPI.
-
-* A new parameter, PrivateData, can be used to prevent users from being 
-  able to view jobs or job steps belonging to other users.
-
-* A new parameter CryptoType to specify digital signature plugin to be used
-  Options are crypto/openssl (default) or crypto/munge (for a GPL license).
-
-* Several Slurm MPI plugins were added to support srun launch of MPI tasks
-  including mpich1_p4 (Slurm v1.2.10) and mpich-mx (Slurm v1.2.11). 
-
-* Cpuset logic was added to the task/affinity plugin in Slurm v1.2.3. 
-  Set TaskPluginParam=cpusets to enable.
-
+* Added ability for slurmdbd to archive and purge step and/or job records.
+* Added support for Workload Characterization Key (WCKey) in accounting 
+  records. This is an optional string that can be used to identify the type of
+  work being performed (in addition to user ID, account name, job name, etc.).
+* Added configuration parameter AccountingStorageBackupHost for fault-tolerance
+  in communications to SlurmDBD.
 
 OTHER CHANGES
-=============
-* Perl APIs and Torque wrappers for Torque/PBS to SLURM migration were 
-  added in Slurm v1.2.13 in the contribs directory. SLURM now works 
-  directly with Globus using the PBS GRAM.
-
-* Support was added for several additional PMI functions to be used by 
-  MPICH2 and MVAPICH2. Support for an PMI_TIME environment variable was
-  also added for user to control how PMI communications are spread out 
-  in time. Scalability up to 16k tasks has been achieved. 
-
-* New node state FAILING has been added along with event trigger for it.
-  This is similar to DRAINING, but is intended for fault prediction work.
-  A trigger was also added for nodes becoming DRAINED.
-
+* Modify PMI_Get_clique_ranks() to return an array of integers rather
+  than a char * to satisfy PMI standard. Correct logic in
+  PMI_Get_clique_size() for when srun --overcommit option is used.
+* Set "/proc/self/oom_adj" for slurmd and slurmstepd daemons based upon
+  the values of SLURMD_OOM_ADJ and SLURMSTEPD_OOM_ADJ environment
+  variables. This can be used to prevent daemons being killed when
+  a node's memory is exhausted.
diff --git a/RELEASE_NOTES_LLNL b/RELEASE_NOTES_LLNL
new file mode 100644
index 000000000..b0db71544
--- /dev/null
+++ b/RELEASE_NOTES_LLNL
@@ -0,0 +1,36 @@
+LLNL-SPECIFIC RELEASE NOTES FOR SLURM VERSION 2.0
+19 February 2009
+
+For processor-scheduled clusters (*not* allocating whole nodes to jobs):
+Set "DefMemPerCPU" and "MaxMemPerCPU" as appropriate to restrict memory 
+available to a job. Also set "JobAcctGatherType=jobacct_gather/linux"
+for enforcement (periodic sampling of memory use by the job).  You can change 
+said sampling rate from the default (every 30 seconds) by setting the 
+"JobAcctGatherFrequency" option to a different number of seconds in 
+the slurm.conf.
+
+For InfiniBand switch systems, set TopologyType=topology/tree in slurm.conf
+and add switch topology information to a new file called topology.conf. 
+Options used are SwitchName, Switches, and Nodes. The SwitchName is any 
+convenient name for bookkeeping purposes only. For example:
+# Switch Topology Information
+SwitchName=s0 Nodes=tux[0-11]
+SwitchName=s1 Nodes=tux[12-23]
+SwitchName=s2 Nodes=tux[24-35]
+SwitchName=s3 Switches=s[0-2]
+
+Remove the "preserve-env.so" SPANK plugin. The functionality is now
+directly in SLURM.
+
+SLURM version 2.0 must use a database daemon (slurmdbd) at version 2.0
+or higher. While we are testing version 2.0, set "AccountingStoragePort=????".
+Once we upgrade the production slurmdbd to version 2.0, this change will
+not be required.  You can likewise test 1.3.7+ clusters with the same port 
+since 2.0 slurmdbd will talk to 1.3.7+ SLURM.
+
+SLURM state files in version 2.0 are different from those of version 1.3.
+After installing SLURM version 2.0, plan to restart without preserving 
+jobs or other state information. While SLURM version 1.3 is still running, 
+cancel all pending and running jobs (e.g.
+"scancel --state=pending; scancel --state=running"). Then stop and restart 
+daemons with the "-c" option or use "/etc/init.d/slurm startclean".
diff --git a/aclocal.m4 b/aclocal.m4
index 9903e9bc3..0cd78b46f 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -7552,14 +7552,18 @@ m4_include([auxdir/slurm.m4])
 m4_include([auxdir/x_ac__system_configuration.m4])
 m4_include([auxdir/x_ac_affinity.m4])
 m4_include([auxdir/x_ac_aix.m4])
+m4_include([auxdir/x_ac_blcr.m4])
 m4_include([auxdir/x_ac_bluegene.m4])
 m4_include([auxdir/x_ac_cflags.m4])
+m4_include([auxdir/x_ac_cray.m4])
 m4_include([auxdir/x_ac_databases.m4])
 m4_include([auxdir/x_ac_debug.m4])
 m4_include([auxdir/x_ac_elan.m4])
+m4_include([auxdir/x_ac_env.m4])
 m4_include([auxdir/x_ac_federation.m4])
 m4_include([auxdir/x_ac_gpl_licensed.m4])
 m4_include([auxdir/x_ac_gtk.m4])
+m4_include([auxdir/x_ac_iso.m4])
 m4_include([auxdir/x_ac_munge.m4])
 m4_include([auxdir/x_ac_ncurses.m4])
 m4_include([auxdir/x_ac_pam.m4])
diff --git a/auxdir/Makefile.am b/auxdir/Makefile.am
index 84d784b5e..62f523a49 100644
--- a/auxdir/Makefile.am
+++ b/auxdir/Makefile.am
@@ -1,5 +1,5 @@
 ##****************************************************************************
-## $Id: Makefile.am 16088 2008-12-29 21:56:17Z jette $
+## $Id: Makefile.am 16867 2009-03-12 16:35:42Z jette $
 ##****************************************************************************
 ## Process this file with automake to produce Makefile.in.
 ##****************************************************************************
@@ -13,15 +13,20 @@ EXTRA_DIST = \
     x_ac_aix.m4 \
     x_ac_bluegene.m4 \
     x_ac_cflags.m4 \
+    x_ac_cray.m4 \
     x_ac_debug.m4 \
     x_ac_elan.m4 \
+    x_ac_env.m4 \
     x_ac_federation.m4 \
     x_ac_gpl_licensed.m4 \
+    x_ac_iso.m4 \
     x_ac_pam.m4 \
     x_ac_munge.m4 \
     x_ac_ncurses.m4 \
+    x_ac_pam.m4 \
     x_ac_ptrace.m4 \
     x_ac_readline.m4 \
     x_ac_setproctitle.m4 \
     x_ac_slurm_ssl.m4 \
-    x_ac_sun_const.m4 
+    x_ac_sun_const.m4 \
+    x_ac_blcr.m4
diff --git a/auxdir/Makefile.in b/auxdir/Makefile.in
index 500ec8fc1..cea696fb2 100644
--- a/auxdir/Makefile.in
+++ b/auxdir/Makefile.in
@@ -41,14 +41,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -78,6 +82,10 @@ 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@
@@ -246,18 +254,23 @@ EXTRA_DIST = \
     x_ac_aix.m4 \
     x_ac_bluegene.m4 \
     x_ac_cflags.m4 \
+    x_ac_cray.m4 \
     x_ac_debug.m4 \
     x_ac_elan.m4 \
+    x_ac_env.m4 \
     x_ac_federation.m4 \
     x_ac_gpl_licensed.m4 \
+    x_ac_iso.m4 \
     x_ac_pam.m4 \
     x_ac_munge.m4 \
     x_ac_ncurses.m4 \
+    x_ac_pam.m4 \
     x_ac_ptrace.m4 \
     x_ac_readline.m4 \
     x_ac_setproctitle.m4 \
     x_ac_slurm_ssl.m4 \
-    x_ac_sun_const.m4 
+    x_ac_sun_const.m4 \
+    x_ac_blcr.m4
 
 all: all-am
 
diff --git a/auxdir/x_ac_affinity.m4 b/auxdir/x_ac_affinity.m4
index ad2725bf9..83f78638b 100644
--- a/auxdir/x_ac_affinity.m4
+++ b/auxdir/x_ac_affinity.m4
@@ -61,16 +61,19 @@ AC_DEFUN([X_AC_AFFINITY], [
   fi
 
 #
-# Test for cpusets
-#
-  if test -d "/dev/cpuset" ; then
-     have_sched_setaffinity=yes
-  fi
-
-#
-# Test for other affinity functions as appropriate
-# TBD
+# Test for cpuset directory
 #
+  cpuset_default_dir="/dev/cpuset"
+  AC_ARG_WITH([cpusetdir],
+              AS_HELP_STRING(--with-cpusetdir=PATH,specify path to cpuset directory default is /dev/cpuset),
+              [try_path=$withval])
+  for cpuset_dir in $try_path "" $cpuset_default_dir; do
+    if test -d "$cpuset_dir" ; then
+      AC_DEFINE_UNQUOTED(CPUSET_DIR, "$cpuset_dir", [Define location of cpuset directory])
+      have_sched_setaffinity=yes
+      break
+    fi
+  done
 
 #
 # Set HAVE_SCHED_SETAFFINITY if any task affinity supported
diff --git a/auxdir/x_ac_aix.m4 b/auxdir/x_ac_aix.m4
index 9aa4c892f..9b105d30b 100644
--- a/auxdir/x_ac_aix.m4
+++ b/auxdir/x_ac_aix.m4
@@ -1,5 +1,5 @@
 ##*****************************************************************************
-## $Id: x_ac_aix.m4 11741 2007-06-20 18:42:19Z da $
+## $Id: x_ac_aix.m4 17515 2009-05-15 19:50:47Z da $
 ##*****************************************************************************
 #  AUTHOR:
 #    Morris Jette <jette@llnl.gov>
@@ -48,9 +48,9 @@ AC_DEFUN([X_AC_AIX],
          [ PROCTRACKDIR="$withval" ]
       )
       if test -f "$PROCTRACKDIR/lib/proctrackext.exp"; then
-         CPPFLAGS="-I$PROCTRACKDIR/include $CPPFLAGS"
          PROCTRACKDIR="$PROCTRACKDIR/lib"
          AC_SUBST(PROCTRACKDIR)
+         CPPFLAGS="-I$PROCTRACKDIR/include $CPPFLAGS"
          AC_CHECK_HEADERS(proctrack.h)
          ac_have_aix_proctrack="yes"
       elif test -f "$prefix/lib/proctrackext.exp"; then
diff --git a/auxdir/x_ac_blcr.m4 b/auxdir/x_ac_blcr.m4
new file mode 100644
index 000000000..03e78c3d0
--- /dev/null
+++ b/auxdir/x_ac_blcr.m4
@@ -0,0 +1,69 @@
+##*****************************************************************************
+## $Id: x_ac_blcr.m4 0001 2009-01-10 16:06:05Z hjcao $
+##*****************************************************************************
+#  AUTHOR:
+#    Copied from x_ac_munge.
+#    
+#
+#  SYNOPSIS:
+#    X_AC_BLCR()
+#
+#  DESCRIPTION:
+#    Check the usual suspects for an BLCR installation,
+#    updating CPPFLAGS and LDFLAGS as necessary.
+#
+#  WARNINGS:
+#    This macro must be placed after AC_PROG_CC and before AC_PROG_LIBTOOL.
+##*****************************************************************************
+
+AC_DEFUN([X_AC_BLCR], [
+
+  _x_ac_blcr_dirs="/usr /usr/local /opt/freeware /opt/blcr"
+  _x_ac_blcr_libs="lib64 lib"
+
+  AC_ARG_WITH(
+    [blcr],
+    AS_HELP_STRING(--with-blcr=PATH,Specify path to BLCR installation),
+    [_x_ac_blcr_dirs="$withval $_x_ac_blcr_dirs"])
+
+  AC_CACHE_CHECK(
+    [for blcr installation],
+    [x_ac_cv_blcr_dir],
+    [
+      for d in $_x_ac_blcr_dirs; do
+        test -d "$d" || continue
+        test -d "$d/include" || continue
+        test -f "$d/include/libcr.h" || continue
+	for bit in $_x_ac_blcr_libs; do
+          test -d "$d/$bit" || continue
+        
+ 	  _x_ac_blcr_libs_save="$LIBS"
+          LIBS="-L$d/$bit -lcr $LIBS"
+          AC_LINK_IFELSE(
+            AC_LANG_CALL([], cr_init),
+            AS_VAR_SET(x_ac_cv_blcr_dir, $d))
+          LIBS="$_x_ac_blcr_libs_save"
+          test -n "$x_ac_cv_blcr_dir" && break
+	done
+        test -n "$x_ac_cv_blcr_dir" && break
+      done
+    ])
+
+  if test -z "$x_ac_cv_blcr_dir"; then
+    AC_MSG_WARN([unable to locate blcr installation])
+  else
+    BLCR_HOME="$x_ac_cv_blcr_dir"
+    BLCR_LIBS="-lcr"
+    BLCR_CPPFLAGS="-I$x_ac_cv_blcr_dir/include"
+    BLCR_LDFLAGS="-L$x_ac_cv_blcr_dir/$bit"
+  fi
+
+  AC_DEFINE_UNQUOTED(BLCR_HOME, "$x_ac_cv_blcr_dir", [Define BLCR installation home])
+  AC_SUBST(BLCR_HOME)
+
+  AC_SUBST(BLCR_LIBS)
+  AC_SUBST(BLCR_CPPFLAGS)
+  AC_SUBST(BLCR_LDFLAGS)
+
+  AM_CONDITIONAL(WITH_BLCR, test -n "$x_ac_cv_blcr_dir")
+])
diff --git a/auxdir/x_ac_bluegene.m4 b/auxdir/x_ac_bluegene.m4
index 1d24f5922..cd944d236 100644
--- a/auxdir/x_ac_bluegene.m4
+++ b/auxdir/x_ac_bluegene.m4
@@ -1,5 +1,5 @@
 ##*****************************************************************************
-## $Id: x_ac_bluegene.m4 16697 2009-02-26 19:49:53Z da $
+## $Id: x_ac_bluegene.m4 16699 2009-02-26 19:56:21Z da $
 ##*****************************************************************************
 #  AUTHOR:
 #    Morris Jette <jette1@llnl.gov>
diff --git a/auxdir/x_ac_cray.m4 b/auxdir/x_ac_cray.m4
new file mode 100644
index 000000000..a4c706b13
--- /dev/null
+++ b/auxdir/x_ac_cray.m4
@@ -0,0 +1,50 @@
+##*****************************************************************************
+#  AUTHOR:
+#    Morris Jette <jette1@llnl.gov>
+#
+#  SYNOPSIS:
+#    X_AC_CRAY
+#
+#  DESCRIPTION:
+#    Test for Cray systems including XT with 3-D interconect
+#    Also test for the apbasil client (Cray's Batch Application Scheduler 
+#    Interface Layer interface)
+##*****************************************************************************
+
+AC_DEFUN([X_AC_CRAY], [
+  AC_MSG_CHECKING([for Cray XT])
+  AC_ARG_ENABLE(
+    [cray-xt],
+    AS_HELP_STRING(--enable-cray-xt,enable Cray XT system support),
+    [ case "$enableval" in
+        yes) x_ac_cray_xt=yes ;;
+         no) x_ac_cray_xt=no ;;
+          *) AC_MSG_RESULT([doh!])
+             AC_MSG_ERROR([bad value "$enableval" for --enable-cray-xt]) ;;
+      esac
+    ],
+    [x_ac_cray_xt=no]
+  )
+
+  if test "$x_ac_cray_xt" = yes; then
+    AC_MSG_RESULT([yes])
+    AC_DEFINE(HAVE_3D, 1, [Define to 1 if 3-dimensional architecture])
+    AC_DEFINE(HAVE_CRAY,1,[Define if Cray system])
+    AC_DEFINE(HAVE_CRAY_XT,1,[Define if Cray XT system])
+    AC_DEFINE(HAVE_FRONT_END, 1, [Define to 1 if running slurmd on front-end only])
+  else
+    AC_MSG_RESULT([no])
+  fi
+
+  AC_ARG_WITH(apbasil, AS_HELP_STRING(--with-apbasil=PATH,Specify path to apbasil command), [ try_apbasil=$withval ])
+  apbasil_default_locs="/usr/apbasil"
+  for apbasil_loc in $try_apbasil "" $apbasil_default_locs; do
+    if test -z "$have_apbasil" -a -x "$apbasil_loc" ; then
+      have_apbasil=$apbasil_loc
+    fi
+  done
+  if test ! -z "$have_apbasil" ; then
+    AC_DEFINE_UNQUOTED(APBASIL_LOC, "$have_apbasil", [Define the apbasil command location])
+  fi
+])
+
diff --git a/auxdir/x_ac_databases.m4 b/auxdir/x_ac_databases.m4
index 01a3d089e..8d4654f0a 100644
--- a/auxdir/x_ac_databases.m4
+++ b/auxdir/x_ac_databases.m4
@@ -103,7 +103,7 @@ AC_DEFUN([X_AC_DATABASES],
 			fi
 		fi
       	fi
-
+	AM_CONDITIONAL(WITH_MYSQL, test x"$ac_have_mysql" == x"yes")
 
 	#Check for PostgreSQL
 	ac_have_postgres="no"
@@ -156,4 +156,6 @@ AC_DEFUN([X_AC_DATABASES],
        			AC_MSG_WARN([*** PostgreSQL test program execution failed.])
 		fi        	
       	fi
+	AM_CONDITIONAL(WITH_PGSQL, test x"$ac_have_pgsql" == x"yes")
+
 ])
diff --git a/auxdir/x_ac_debug.m4 b/auxdir/x_ac_debug.m4
index 1f5a37fbd..dc4893627 100644
--- a/auxdir/x_ac_debug.m4
+++ b/auxdir/x_ac_debug.m4
@@ -1,5 +1,5 @@
 ##*****************************************************************************
-#  $Id: x_ac_debug.m4 15332 2008-10-07 20:08:18Z jette $
+#  $Id: x_ac_debug.m4 15340 2008-10-07 21:21:53Z da $
 ##*****************************************************************************
 #  AUTHOR:
 #    Chris Dunlap <cdunlap@llnl.gov>
diff --git a/auxdir/x_ac_env.m4 b/auxdir/x_ac_env.m4
new file mode 100644
index 000000000..39e570f47
--- /dev/null
+++ b/auxdir/x_ac_env.m4
@@ -0,0 +1,37 @@
+##*****************************************************************************
+#  AUTHOR:
+#    Morris Jette <jette1@llnl.gov>
+#
+#  SYNOPSIS:
+#    X_AC_ENV_LOGIC
+#
+#  DESCRIPTION:
+#    Test for how user's environment should be loaded for sbatch's 
+#    --get-user-env option (as used by Moab)
+##*****************************************************************************
+
+AC_DEFUN([X_AC_ENV_LOGIC], [
+  AC_MSG_CHECKING([whether sbatch --get-user-env option should load .login])
+  AC_ARG_ENABLE(
+    [load-env-no-login],
+    AS_HELP_STRING(--enable-load-env-no-login,
+                   [enable --get-user-env option to load user environment without .login]),
+    [ case "$enableval" in
+        yes) x_ac_load_env_no_login=yes ;;
+         no) x_ac_load_env_no_login=no ;;
+          *) AC_MSG_RESULT([doh!])
+             AC_MSG_ERROR([bad value "$enableval" for --enable-load-env-no-login]) ;;
+      esac
+    ],
+    [x_ac_load_env_no_login=no]
+  )
+
+  if test "$x_ac_load_env_no_login" = yes; then
+    AC_MSG_RESULT([yes])
+    AC_DEFINE(LOAD_ENV_NO_LOGIN, 1,
+              [Define to 1 for --get-user-env to load user environment without .login])
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
diff --git a/auxdir/x_ac_gtk.m4 b/auxdir/x_ac_gtk.m4
index a7cc39f2d..010ed0401 100644
--- a/auxdir/x_ac_gtk.m4
+++ b/auxdir/x_ac_gtk.m4
@@ -23,7 +23,6 @@ AC_DEFUN([X_AC_GTK],
 	    PKG_CONFIG_PATH="/usr/lib64/pkgconfig/"
     fi
  
-
 ### Check for pkg-config program
     AC_ARG_WITH(
 	    [pkg-config],
diff --git a/auxdir/x_ac_iso.m4 b/auxdir/x_ac_iso.m4
new file mode 100644
index 000000000..2b9f92a57
--- /dev/null
+++ b/auxdir/x_ac_iso.m4
@@ -0,0 +1,34 @@
+##*****************************************************************************
+#  AUTHOR:
+#    Morris Jette <jette1@llnl.gov>
+#
+#  SYNOPSIS:
+#    X_AC_ISO
+#
+#  DESCRIPTION:
+#    Test for ISO compliant time support.
+##*****************************************************************************
+
+AC_DEFUN([X_AC_ISO], [
+  AC_MSG_CHECKING([whether to enable ISO 8601 time format support])
+  AC_ARG_ENABLE(
+    [iso8601],
+    AS_HELP_STRING(--disable-iso8601,disable ISO 8601 time format support),
+    [ case "$enableval" in
+        yes) x_ac_iso8601=yes ;;
+         no) x_ac_iso8601=no ;;
+          *) AC_MSG_RESULT([doh!])
+             AC_MSG_ERROR([bad value "$enableval" for --enable-iso8601]) ;;
+      esac
+    ],
+    [x_ac_iso8601=yes]
+  )
+
+  if test "$x_ac_iso8601" = yes; then
+    AC_MSG_RESULT([yes])
+    AC_DEFINE(USE_ISO_8601,,[define if using ISO 8601 time format])
+  else
+    AC_MSG_RESULT([no])
+  fi
+])
+
diff --git a/auxdir/x_ac_readline.m4 b/auxdir/x_ac_readline.m4
index 373685ded..b4b6a35ff 100644
--- a/auxdir/x_ac_readline.m4
+++ b/auxdir/x_ac_readline.m4
@@ -1,5 +1,5 @@
 ##*****************************************************************************
-## $Id: x_ac_readline.m4 8192 2006-05-25 00:15:05Z morrone $
+## $Id: x_ac_readline.m4 17615 2009-05-27 21:17:29Z jette $
 ##*****************************************************************************
 #  AUTHOR:
 #    Jim Garlick <garlick@llnl.gov>
@@ -39,7 +39,7 @@ AC_DEFUN([X_AC_READLINE],
 	#include <readline/history.h>]], [[
 	char *line = readline("in:");]])],[AC_DEFINE([HAVE_READLINE], [1], 
                  [Define if you are compiling with readline.])],[READLINE_LIBS=""])
-    LIBS="$savedLIBS"
+    LIBS="$saved_LIBS"
   fi
   AC_SUBST(READLINE_LIBS)
 ])
diff --git a/config.h.in b/config.h.in
index 95018980c..eff8951e4 100644
--- a/config.h.in
+++ b/config.h.in
@@ -1,5 +1,8 @@
 /* config.h.in.  Generated from configure.ac by autoheader.  */
 
+/* Define the apbasil command location */
+#undef APBASIL_LOC
+
 /* Define the BG_BRIDGE_SO value */
 #undef BG_BRIDGE_SO
 
@@ -9,6 +12,12 @@
 /* Define the BG_SERIAL value */
 #undef BG_SERIAL
 
+/* Define BLCR installation home */
+#undef BLCR_HOME
+
+/* Define location of cpuset directory */
+#undef CPUSET_DIR
+
 /* Define to 1 if licensed under terms of the GNU General Public License. */
 #undef GPL_LICENSED
 
@@ -30,6 +39,12 @@
 /* Define to 1 if have Blue Gene files */
 #undef HAVE_BG_FILES
 
+/* Define if Cray system */
+#undef HAVE_CRAY
+
+/* Define if Cray XT system */
+#undef HAVE_CRAY_XT
+
 /* Define to 1 if you have the <curses.h> header file. */
 #undef HAVE_CURSES_H
 
@@ -276,7 +291,7 @@
    member named physmem. */
 #undef HAVE__SYSTEM_CONFIGURATION
 
-/* Define to 1 for --get-user-env to load user environment without login. */
+/* Define to 1 for --get-user-env to load user environment without .login */
 #undef LOAD_ENV_NO_LOGIN
 
 /* Define to 1 for memory leak debugging. */
@@ -391,6 +406,9 @@
 /* Define slurm_ prefix function aliases for plugins */
 #undef USE_ALIAS
 
+/* define if using ISO 8601 time format */
+#undef USE_ISO_8601
+
 /* Version number of package */
 #undef VERSION
 
diff --git a/configure b/configure
index 836c1e323..2bc264f5e 100755
--- a/configure
+++ b/configure
@@ -933,9 +933,13 @@ HAVE_GTK_FALSE
 HAVEMYSQLCONFIG
 MYSQL_LIBS
 MYSQL_CFLAGS
+WITH_MYSQL_TRUE
+WITH_MYSQL_FALSE
 HAVEPGCONFIG
 PGSQL_LIBS
 PGSQL_CFLAGS
+WITH_PGSQL_TRUE
+WITH_PGSQL_FALSE
 DEBUG_MODULES_TRUE
 DEBUG_MODULES_FALSE
 SLURMCTLD_PORT
@@ -969,6 +973,12 @@ AUTHD_CFLAGS
 WITH_AUTHD_TRUE
 WITH_AUTHD_FALSE
 UTIL_LIBS
+BLCR_HOME
+BLCR_LIBS
+BLCR_CPPFLAGS
+BLCR_LDFLAGS
+WITH_BLCR_TRUE
+WITH_BLCR_FALSE
 LTLIBOBJS'
 ac_subst_files=''
       ac_precious_vars='build_alias
@@ -1580,14 +1590,16 @@ Optional Features:
   --disable-libtool-lock  avoid locking (might break parallel builds)
   --enable-pam            enable PAM (Pluggable Authentication Modules)
                           support
+  --disable-iso8601       disable ISO 8601 time format support
+  --enable-load-env-no-login
+                          enable --get-user-env option to load user
+                          environment without .login
+  --enable-cray-xt        enable Cray XT system support
   --enable-sun-const      enable Sun Constellation system support
   --enable-debug          enable debugging code for development
   --enable-memory-leak-debug
                           enable memory leak debugging code for development
   --enable-front-end      enable slurmd operation on a front-end
-  --enable-load-env-no-login
-                          enable --get-user-env option to load user
-                          environment without login
   --enable-multiple-slurmd
                           enable multiple-slurmd support
 
@@ -1602,6 +1614,9 @@ Optional Packages:
   --with-pic              try to use only PIC/non-PIC objects [default=use
                           both]
   --with-tags[=TAGS]      include additional configurations [automatic]
+  --with-cpusetdir=PATH   specify path to cpuset directory default is
+                          /dev/cpuset
+  --with-apbasil=PATH     Specify path to apbasil command
   --with-xcpu=PATH        specify path to XCPU directory
   --with-pkg-config=PATH  Specify path to pkg-config binary
   --with-mysql_config=PATH
@@ -1613,6 +1628,7 @@ Optional Packages:
   --without-readline      compile without readline support
   --with-ssl=PATH         Specify path to OpenSSL installation
   --with-munge=PATH       Specify path to munge installation
+  --with-blcr=PATH        Specify path to BLCR installation
 
 Some influential environment variables:
   CC          C compiler command
@@ -5001,9 +5017,9 @@ if test "${with_proctrack+set}" = set; then
 fi
 
       if test -f "$PROCTRACKDIR/lib/proctrackext.exp"; then
-         CPPFLAGS="-I$PROCTRACKDIR/include $CPPFLAGS"
          PROCTRACKDIR="$PROCTRACKDIR/lib"
 
+         CPPFLAGS="-I$PROCTRACKDIR/include $CPPFLAGS"
 
 for ac_header in proctrack.h
 do
@@ -7524,7 +7540,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 7527 "configure"' > conftest.$ac_ext
+  echo '#line 7543 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -9630,11 +9646,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9633: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:9649: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9637: \$? = $ac_status" >&5
+   echo "$as_me:9653: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -9920,11 +9936,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9923: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:9939: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9927: \$? = $ac_status" >&5
+   echo "$as_me:9943: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -10024,11 +10040,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:10027: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:10043: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:10031: \$? = $ac_status" >&5
+   echo "$as_me:10047: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -12401,7 +12417,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 12404 "configure"
+#line 12420 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12501,7 +12517,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 12504 "configure"
+#line 12520 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -14902,11 +14918,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14905: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:14921: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:14909: \$? = $ac_status" >&5
+   echo "$as_me:14925: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -15006,11 +15022,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15009: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:15025: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:15013: \$? = $ac_status" >&5
+   echo "$as_me:15029: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -16604,11 +16620,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16607: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:16623: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:16611: \$? = $ac_status" >&5
+   echo "$as_me:16627: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -16708,11 +16724,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:16711: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:16727: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:16715: \$? = $ac_status" >&5
+   echo "$as_me:16731: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -18928,11 +18944,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:18931: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:18947: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:18935: \$? = $ac_status" >&5
+   echo "$as_me:18951: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -19218,11 +19234,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:19221: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:19237: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:19225: \$? = $ac_status" >&5
+   echo "$as_me:19241: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -19322,11 +19338,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:19325: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:19341: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:19329: \$? = $ac_status" >&5
+   echo "$as_me:19345: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -23173,16 +23189,26 @@ echo "$as_me: WARNING: Unable to locate PLPA processor affinity functions" >&2;}
   fi
 
 #
-# Test for cpusets
+# Test for cpuset directory
 #
-  if test -d "/dev/cpuset" ; then
-     have_sched_setaffinity=yes
-  fi
+  cpuset_default_dir="/dev/cpuset"
 
-#
-# Test for other affinity functions as appropriate
-# TBD
-#
+# Check whether --with-cpusetdir was given.
+if test "${with_cpusetdir+set}" = set; then
+  withval=$with_cpusetdir; try_path=$withval
+fi
+
+  for cpuset_dir in $try_path "" $cpuset_default_dir; do
+    if test -d "$cpuset_dir" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define CPUSET_DIR "$cpuset_dir"
+_ACEOF
+
+      have_sched_setaffinity=yes
+      break
+    fi
+  done
 
 #
 # Set HAVE_SCHED_SETAFFINITY if any task affinity supported
@@ -23380,6 +23406,76 @@ fi
 
 
 
+  { echo "$as_me:$LINENO: checking whether to enable ISO 8601 time format support" >&5
+echo $ECHO_N "checking whether to enable ISO 8601 time format support... $ECHO_C" >&6; }
+  # Check whether --enable-iso8601 was given.
+if test "${enable_iso8601+set}" = set; then
+  enableval=$enable_iso8601;  case "$enableval" in
+        yes) x_ac_iso8601=yes ;;
+         no) x_ac_iso8601=no ;;
+          *) { echo "$as_me:$LINENO: result: doh!" >&5
+echo "${ECHO_T}doh!" >&6; }
+             { { echo "$as_me:$LINENO: error: bad value \"$enableval\" for --enable-iso8601" >&5
+echo "$as_me: error: bad value \"$enableval\" for --enable-iso8601" >&2;}
+   { (exit 1); exit 1; }; } ;;
+      esac
+
+else
+  x_ac_iso8601=yes
+
+fi
+
+
+  if test "$x_ac_iso8601" = yes; then
+    { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_ISO_8601
+_ACEOF
+
+  else
+    { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  fi
+
+
+
+  { echo "$as_me:$LINENO: checking whether sbatch --get-user-env option should load .login" >&5
+echo $ECHO_N "checking whether sbatch --get-user-env option should load .login... $ECHO_C" >&6; }
+  # Check whether --enable-load-env-no-login was given.
+if test "${enable_load_env_no_login+set}" = set; then
+  enableval=$enable_load_env_no_login;  case "$enableval" in
+        yes) x_ac_load_env_no_login=yes ;;
+         no) x_ac_load_env_no_login=no ;;
+          *) { echo "$as_me:$LINENO: result: doh!" >&5
+echo "${ECHO_T}doh!" >&6; }
+             { { echo "$as_me:$LINENO: error: bad value \"$enableval\" for --enable-load-env-no-login" >&5
+echo "$as_me: error: bad value \"$enableval\" for --enable-load-env-no-login" >&2;}
+   { (exit 1); exit 1; }; } ;;
+      esac
+
+else
+  x_ac_load_env_no_login=no
+
+fi
+
+
+  if test "$x_ac_load_env_no_login" = yes; then
+    { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define LOAD_ENV_NO_LOGIN 1
+_ACEOF
+
+  else
+    { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  fi
+
+
+
   { echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
 echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; }
 if test "${ac_cv_c_bigendian+set}" = set; then
@@ -25053,6 +25149,75 @@ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 LIBS="$PTHREAD_LIBS $LIBS"
 
 
+  { echo "$as_me:$LINENO: checking for Cray XT" >&5
+echo $ECHO_N "checking for Cray XT... $ECHO_C" >&6; }
+  # Check whether --enable-cray-xt was given.
+if test "${enable_cray_xt+set}" = set; then
+  enableval=$enable_cray_xt;  case "$enableval" in
+        yes) x_ac_cray_xt=yes ;;
+         no) x_ac_cray_xt=no ;;
+          *) { echo "$as_me:$LINENO: result: doh!" >&5
+echo "${ECHO_T}doh!" >&6; }
+             { { echo "$as_me:$LINENO: error: bad value \"$enableval\" for --enable-cray-xt" >&5
+echo "$as_me: error: bad value \"$enableval\" for --enable-cray-xt" >&2;}
+   { (exit 1); exit 1; }; } ;;
+      esac
+
+else
+  x_ac_cray_xt=no
+
+fi
+
+
+  if test "$x_ac_cray_xt" = yes; then
+    { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_3D 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CRAY 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CRAY_XT 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FRONT_END 1
+_ACEOF
+
+  else
+    { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  fi
+
+
+# Check whether --with-apbasil was given.
+if test "${with_apbasil+set}" = set; then
+  withval=$with_apbasil;  try_apbasil=$withval
+fi
+
+  apbasil_default_locs="/usr/apbasil"
+  for apbasil_loc in $try_apbasil "" $apbasil_default_locs; do
+    if test -z "$have_apbasil" -a -x "$apbasil_loc" ; then
+      have_apbasil=$apbasil_loc
+    fi
+  done
+  if test ! -z "$have_apbasil" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define APBASIL_LOC "$have_apbasil"
+_ACEOF
+
+  fi
+
+
   { echo "$as_me:$LINENO: checking for Sun Constellation system" >&5
 echo $ECHO_N "checking for Sun Constellation system... $ECHO_C" >&6; }
   # Check whether --enable-sun-const was given.
@@ -25444,7 +25609,6 @@ fi
 	    PKG_CONFIG_PATH="/usr/lib64/pkgconfig/"
     fi
 
-
 ### Check for pkg-config program
 
 # Check whether --with-pkg-config was given.
@@ -25930,6 +26094,13 @@ echo "$as_me: WARNING: *** MySQL test program execution failed." >&2;}
 			fi
 		fi
       	fi
+	 if test x"$ac_have_mysql" == x"yes"; then
+  WITH_MYSQL_TRUE=
+  WITH_MYSQL_FALSE='#'
+else
+  WITH_MYSQL_TRUE='#'
+  WITH_MYSQL_FALSE=
+fi
 
 
 	#Check for PostgreSQL
@@ -26111,6 +26282,15 @@ _ACEOF
 echo "$as_me: WARNING: *** PostgreSQL test program execution failed." >&2;}
 		fi
       	fi
+	 if test x"$ac_have_pgsql" == x"yes"; then
+  WITH_PGSQL_TRUE=
+  WITH_PGSQL_FALSE='#'
+else
+  WITH_PGSQL_TRUE='#'
+  WITH_PGSQL_FALSE=
+fi
+
+
 
 
 
@@ -26926,7 +27106,7 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
-    LIBS="$savedLIBS"
+    LIBS="$saved_LIBS"
   fi
 
 
@@ -27298,36 +27478,6 @@ fi
 
 
 
-{ echo "$as_me:$LINENO: checking if user env vars should be based upon login" >&5
-echo $ECHO_N "checking if user env vars should be based upon login... $ECHO_C" >&6; }
-# Check whether --enable-load-env-no-login was given.
-if test "${enable_load_env_no_login+set}" = set; then
-  enableval=$enable_load_env_no_login;  case "$enableval" in
-     yes) x_ac_load_env_no_login=yes ;;
-      no) x_ac_load_env_no_login=no ;;
-       *) { echo "$as_me:$LINENO: result: doh!" >&5
-echo "${ECHO_T}doh!" >&6; }
-          { { echo "$as_me:$LINENO: error: bad value \"$enableval\" for --enable-load-env-no-login" >&5
-echo "$as_me: error: bad value \"$enableval\" for --enable-load-env-no-login" >&2;}
-   { (exit 1); exit 1; }; } ;;
-   esac
-
-
-fi
-
-if test "$x_ac_load_env_no_login" = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define LOAD_ENV_NO_LOGIN 1
-_ACEOF
-
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
 { echo "$as_me:$LINENO: checking whether to enable multiple-slurmd support" >&5
 echo $ECHO_N "checking whether to enable multiple-slurmd support... $ECHO_C" >&6; }
 # Check whether --enable-multiple-slurmd was given.
@@ -27523,7 +27673,126 @@ _ACEOF
 
 
 
-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/salloc/Makefile src/sbatch/Makefile src/sattach/Makefile src/srun/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/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/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/linear/Makefile src/plugins/select/cons_res/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 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"
+
+  _x_ac_blcr_dirs="/usr /usr/local /opt/freeware /opt/blcr"
+  _x_ac_blcr_libs="lib64 lib"
+
+
+# Check whether --with-blcr was given.
+if test "${with_blcr+set}" = set; then
+  withval=$with_blcr; _x_ac_blcr_dirs="$withval $_x_ac_blcr_dirs"
+fi
+
+
+  { echo "$as_me:$LINENO: checking for blcr installation" >&5
+echo $ECHO_N "checking for blcr installation... $ECHO_C" >&6; }
+if test "${x_ac_cv_blcr_dir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+      for d in $_x_ac_blcr_dirs; do
+        test -d "$d" || continue
+        test -d "$d/include" || continue
+        test -f "$d/include/libcr.h" || continue
+	for bit in $_x_ac_blcr_libs; do
+          test -d "$d/$bit" || continue
+
+ 	  _x_ac_blcr_libs_save="$LIBS"
+          LIBS="-L$d/$bit -lcr $LIBS"
+          cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cr_init ();
+int
+main ()
+{
+return cr_init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  x_ac_cv_blcr_dir=$d
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+          LIBS="$_x_ac_blcr_libs_save"
+          test -n "$x_ac_cv_blcr_dir" && break
+	done
+        test -n "$x_ac_cv_blcr_dir" && break
+      done
+
+fi
+{ echo "$as_me:$LINENO: result: $x_ac_cv_blcr_dir" >&5
+echo "${ECHO_T}$x_ac_cv_blcr_dir" >&6; }
+
+  if test -z "$x_ac_cv_blcr_dir"; then
+    { echo "$as_me:$LINENO: WARNING: unable to locate blcr installation" >&5
+echo "$as_me: WARNING: unable to locate blcr installation" >&2;}
+  else
+    BLCR_HOME="$x_ac_cv_blcr_dir"
+    BLCR_LIBS="-lcr"
+    BLCR_CPPFLAGS="-I$x_ac_cv_blcr_dir/include"
+    BLCR_LDFLAGS="-L$x_ac_cv_blcr_dir/$bit"
+  fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define BLCR_HOME "$x_ac_cv_blcr_dir"
+_ACEOF
+
+
+
+
+
+
+
+   if test -n "$x_ac_cv_blcr_dir"; then
+  WITH_BLCR_TRUE=
+  WITH_BLCR_FALSE='#'
+else
+  WITH_BLCR_TRUE='#'
+  WITH_BLCR_FALSE=
+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"
 
 
 cat >confcache <<\_ACEOF
@@ -27727,6 +27996,20 @@ echo "$as_me: error: conditional \"HAVE_GTK\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${WITH_MYSQL_TRUE}" && test -z "${WITH_MYSQL_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"WITH_MYSQL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"WITH_MYSQL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${WITH_PGSQL_TRUE}" && test -z "${WITH_PGSQL_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"WITH_PGSQL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"WITH_PGSQL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 if test -z "${DEBUG_MODULES_TRUE}" && test -z "${DEBUG_MODULES_FALSE}"; then
   { { echo "$as_me:$LINENO: error: conditional \"DEBUG_MODULES\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
@@ -27776,6 +28059,13 @@ echo "$as_me: error: conditional \"WITH_AUTHD\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${WITH_BLCR_TRUE}" && test -z "${WITH_BLCR_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"WITH_BLCR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"WITH_BLCR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 
 : ${CONFIG_STATUS=./config.status}
 ac_clean_files_save=$ac_clean_files
@@ -28267,10 +28557,13 @@ do
     "src/sacctmgr/Makefile") CONFIG_FILES="$CONFIG_FILES src/sacctmgr/Makefile" ;;
     "src/sreport/Makefile") CONFIG_FILES="$CONFIG_FILES src/sreport/Makefile" ;;
     "src/sstat/Makefile") CONFIG_FILES="$CONFIG_FILES src/sstat/Makefile" ;;
+    "src/sshare/Makefile") CONFIG_FILES="$CONFIG_FILES src/sshare/Makefile" ;;
     "src/salloc/Makefile") CONFIG_FILES="$CONFIG_FILES src/salloc/Makefile" ;;
     "src/sbatch/Makefile") CONFIG_FILES="$CONFIG_FILES src/sbatch/Makefile" ;;
     "src/sattach/Makefile") CONFIG_FILES="$CONFIG_FILES src/sattach/Makefile" ;;
+    "src/sprio/Makefile") CONFIG_FILES="$CONFIG_FILES src/sprio/Makefile" ;;
     "src/srun/Makefile") CONFIG_FILES="$CONFIG_FILES src/srun/Makefile" ;;
+    "src/srun_cr/Makefile") CONFIG_FILES="$CONFIG_FILES src/srun_cr/Makefile" ;;
     "src/slurmd/Makefile") CONFIG_FILES="$CONFIG_FILES src/slurmd/Makefile" ;;
     "src/slurmd/slurmd/Makefile") CONFIG_FILES="$CONFIG_FILES src/slurmd/slurmd/Makefile" ;;
     "src/slurmd/slurmstepd/Makefile") CONFIG_FILES="$CONFIG_FILES src/slurmd/slurmstepd/Makefile" ;;
@@ -28300,6 +28593,9 @@ do
     "src/plugins/checkpoint/none/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/checkpoint/none/Makefile" ;;
     "src/plugins/checkpoint/ompi/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/checkpoint/ompi/Makefile" ;;
     "src/plugins/checkpoint/xlch/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/checkpoint/xlch/Makefile" ;;
+    "src/plugins/checkpoint/blcr/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/checkpoint/blcr/Makefile" ;;
+    "src/plugins/checkpoint/blcr/cr_checkpoint.sh") CONFIG_FILES="$CONFIG_FILES src/plugins/checkpoint/blcr/cr_checkpoint.sh" ;;
+    "src/plugins/checkpoint/blcr/cr_restart.sh") CONFIG_FILES="$CONFIG_FILES src/plugins/checkpoint/blcr/cr_restart.sh" ;;
     "src/plugins/crypto/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/crypto/Makefile" ;;
     "src/plugins/crypto/munge/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/crypto/munge/Makefile" ;;
     "src/plugins/crypto/openssl/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/crypto/openssl/Makefile" ;;
@@ -28313,6 +28609,9 @@ do
     "src/plugins/jobcomp/script/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/jobcomp/script/Makefile" ;;
     "src/plugins/jobcomp/mysql/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/jobcomp/mysql/Makefile" ;;
     "src/plugins/jobcomp/pgsql/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/jobcomp/pgsql/Makefile" ;;
+    "src/plugins/priority/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/priority/Makefile" ;;
+    "src/plugins/priority/basic/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/priority/basic/Makefile" ;;
+    "src/plugins/priority/multifactor/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/priority/multifactor/Makefile" ;;
     "src/plugins/proctrack/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/proctrack/Makefile" ;;
     "src/plugins/proctrack/aix/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/proctrack/aix/Makefile" ;;
     "src/plugins/proctrack/pgid/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/proctrack/pgid/Makefile" ;;
@@ -28330,8 +28629,8 @@ do
     "src/plugins/select/bluegene/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/select/bluegene/Makefile" ;;
     "src/plugins/select/bluegene/block_allocator/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/select/bluegene/block_allocator/Makefile" ;;
     "src/plugins/select/bluegene/plugin/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/select/bluegene/plugin/Makefile" ;;
-    "src/plugins/select/linear/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/select/linear/Makefile" ;;
     "src/plugins/select/cons_res/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/select/cons_res/Makefile" ;;
+    "src/plugins/select/linear/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/select/linear/Makefile" ;;
     "src/plugins/switch/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/switch/Makefile" ;;
     "src/plugins/switch/elan/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/switch/elan/Makefile" ;;
     "src/plugins/switch/none/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/switch/none/Makefile" ;;
@@ -28348,6 +28647,10 @@ do
     "src/plugins/task/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/task/Makefile" ;;
     "src/plugins/task/affinity/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/task/affinity/Makefile" ;;
     "src/plugins/task/none/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/task/none/Makefile" ;;
+    "src/plugins/topology/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/topology/Makefile" ;;
+    "src/plugins/topology/3d_torus/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/topology/3d_torus/Makefile" ;;
+    "src/plugins/topology/none/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/topology/none/Makefile" ;;
+    "src/plugins/topology/tree/Makefile") CONFIG_FILES="$CONFIG_FILES src/plugins/topology/tree/Makefile" ;;
     "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
     "doc/man/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/Makefile" ;;
     "doc/html/Makefile") CONFIG_FILES="$CONFIG_FILES doc/html/Makefile" ;;
@@ -28630,9 +28933,13 @@ HAVE_GTK_FALSE!$HAVE_GTK_FALSE$ac_delim
 HAVEMYSQLCONFIG!$HAVEMYSQLCONFIG$ac_delim
 MYSQL_LIBS!$MYSQL_LIBS$ac_delim
 MYSQL_CFLAGS!$MYSQL_CFLAGS$ac_delim
+WITH_MYSQL_TRUE!$WITH_MYSQL_TRUE$ac_delim
+WITH_MYSQL_FALSE!$WITH_MYSQL_FALSE$ac_delim
 HAVEPGCONFIG!$HAVEPGCONFIG$ac_delim
 PGSQL_LIBS!$PGSQL_LIBS$ac_delim
 PGSQL_CFLAGS!$PGSQL_CFLAGS$ac_delim
+WITH_PGSQL_TRUE!$WITH_PGSQL_TRUE$ac_delim
+WITH_PGSQL_FALSE!$WITH_PGSQL_FALSE$ac_delim
 DEBUG_MODULES_TRUE!$DEBUG_MODULES_TRUE$ac_delim
 DEBUG_MODULES_FALSE!$DEBUG_MODULES_FALSE$ac_delim
 SLURMCTLD_PORT!$SLURMCTLD_PORT$ac_delim
@@ -28654,10 +28961,6 @@ SSL_LDFLAGS!$SSL_LDFLAGS$ac_delim
 SSL_LIBS!$SSL_LIBS$ac_delim
 SSL_CPPFLAGS!$SSL_CPPFLAGS$ac_delim
 HAVE_OPENSSL_TRUE!$HAVE_OPENSSL_TRUE$ac_delim
-HAVE_OPENSSL_FALSE!$HAVE_OPENSSL_FALSE$ac_delim
-HAVE_OPENSSL!$HAVE_OPENSSL$ac_delim
-MUNGE_LIBS!$MUNGE_LIBS$ac_delim
-MUNGE_CPPFLAGS!$MUNGE_CPPFLAGS$ac_delim
 _ACEOF
 
   if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -28699,6 +29002,10 @@ _ACEOF
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   cat >conf$$subs.sed <<_ACEOF
+HAVE_OPENSSL_FALSE!$HAVE_OPENSSL_FALSE$ac_delim
+HAVE_OPENSSL!$HAVE_OPENSSL$ac_delim
+MUNGE_LIBS!$MUNGE_LIBS$ac_delim
+MUNGE_CPPFLAGS!$MUNGE_CPPFLAGS$ac_delim
 MUNGE_LDFLAGS!$MUNGE_LDFLAGS$ac_delim
 WITH_MUNGE_TRUE!$WITH_MUNGE_TRUE$ac_delim
 WITH_MUNGE_FALSE!$WITH_MUNGE_FALSE$ac_delim
@@ -28707,10 +29014,16 @@ AUTHD_CFLAGS!$AUTHD_CFLAGS$ac_delim
 WITH_AUTHD_TRUE!$WITH_AUTHD_TRUE$ac_delim
 WITH_AUTHD_FALSE!$WITH_AUTHD_FALSE$ac_delim
 UTIL_LIBS!$UTIL_LIBS$ac_delim
+BLCR_HOME!$BLCR_HOME$ac_delim
+BLCR_LIBS!$BLCR_LIBS$ac_delim
+BLCR_CPPFLAGS!$BLCR_CPPFLAGS$ac_delim
+BLCR_LDFLAGS!$BLCR_LDFLAGS$ac_delim
+WITH_BLCR_TRUE!$WITH_BLCR_TRUE$ac_delim
+WITH_BLCR_FALSE!$WITH_BLCR_FALSE$ac_delim
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 9; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 19; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/configure.ac b/configure.ac
index 6acdcaf66..ae2e82c4e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-# $Id: configure.ac 16936 2009-03-18 22:02:01Z da $
+# $Id: configure.ac 16996 2009-03-24 20:21:41Z jette $
 # This file is to be processed with autoconf to generate a configure script
 
 dnl Prologue
@@ -98,6 +98,14 @@ dnl
 dnl Check for PAM module support
 X_AC_PAM
 
+dnl
+dnl Check for ISO compliance
+X_AC_ISO
+
+dnl
+dnl Check if we want to load .login with sbatch --get-user-env option
+X_AC_ENV_LOGIC
+
 dnl Checks for types.
 dnl
 X_AC_SLURM_BIGENDIAN
@@ -139,6 +147,7 @@ LDFLAGS="$LDFLAGS "
 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 LIBS="$PTHREAD_LIBS $LIBS"
 
+X_AC_CRAY
 X_AC_SUN_CONST
 
 X_AC_CFLAGS
@@ -216,30 +225,6 @@ dnl Check for compilation of SLURM auth modules:
 dnl
 X_AC_MUNGE
 
-dnl Check if srun --get-user-env (for Moab) should load user's environment 
-dnl based upon a login. This may be temporary.
-dnl
-AC_MSG_CHECKING([if user env vars should be based upon login])
-AC_ARG_ENABLE(
-  [load-env-no-login],
-  AS_HELP_STRING(--enable-load-env-no-login,
-                 [enable --get-user-env option to load user environment without login]),
-  [ case "$enableval" in
-     yes) x_ac_load_env_no_login=yes ;;
-      no) x_ac_load_env_no_login=no ;;
-       *) AC_MSG_RESULT([doh!])
-          AC_MSG_ERROR([bad value "$enableval" for --enable-load-env-no-login]) ;;
-   esac
-  ]
-)
-if test "$x_ac_load_env_no_login" = yes; then
-  AC_DEFINE(LOAD_ENV_NO_LOGIN, 1, 
-            [Define to 1 for --get-user-env to load user environment without login.])
-  AC_MSG_RESULT([yes])
-else
-  AC_MSG_RESULT([no])
-fi
-
 dnl
 dnl Check if multiple-slurmd support is requested and define MULTIPLE_SLURMD
 dnl if it is.
@@ -283,6 +268,12 @@ dnl Add LSD-Tools defines:
 AC_DEFINE(WITH_LSD_FATAL_ERROR_FUNC, 1, [Have definition of lsd_fatal_error()])
 AC_DEFINE(WITH_LSD_NOMEM_ERROR_FUNC, 1, [Have definition of lsd_nomem_error()])
 
+dnl
+dnl Check for compilation of SLURM with BLCR support:
+dnl
+X_AC_BLCR
+
+
 dnl All slurm Makefiles:
 
 AC_CONFIG_FILES([Makefile
@@ -306,10 +297,13 @@ AC_CONFIG_FILES([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 
@@ -339,6 +333,9 @@ AC_CONFIG_FILES([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
@@ -352,6 +349,9 @@ AC_CONFIG_FILES([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
@@ -369,8 +369,8 @@ AC_CONFIG_FILES([Makefile
 		 src/plugins/select/bluegene/Makefile
 		 src/plugins/select/bluegene/block_allocator/Makefile
 		 src/plugins/select/bluegene/plugin/Makefile
-		 src/plugins/select/linear/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
@@ -387,6 +387,10 @@ AC_CONFIG_FILES([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
diff --git a/contribs/Makefile.am b/contribs/Makefile.am
index 5c63fda34..8f75575e7 100644
--- a/contribs/Makefile.am
+++ b/contribs/Makefile.am
@@ -5,5 +5,6 @@ EXTRA_DIST = \
 	make.slurm.patch	\
 	mpich1.slurm.patch	\
 	ptrace.patch		\
+	skilling.c		\
 	time_login.c		\
 	README
diff --git a/contribs/Makefile.in b/contribs/Makefile.in
index 0b1295f61..113c21083 100644
--- a/contribs/Makefile.in
+++ b/contribs/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -89,6 +93,10 @@ 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@
@@ -254,6 +262,7 @@ EXTRA_DIST = \
 	make.slurm.patch	\
 	mpich1.slurm.patch	\
 	ptrace.patch		\
+	skilling.c		\
 	time_login.c		\
 	README
 
diff --git a/contribs/README b/contribs/README
index 99b5bc42e..ddd8812d0 100644
--- a/contribs/README
+++ b/contribs/README
@@ -21,6 +21,18 @@ of the SLURM contribs distribution follows:
   python/            [Python modules]
      Directory for Python modules.
 
+  skilling.c         [ C program ]
+     This program can be used to order the hostnames in a 2+ dimensional
+     architecture for use in the slurm.conf file. It is used to generate
+     the Hilbert number based upon a node's physical location in the 
+     computer. Nodes close together in their Hilbert number will also be 
+     physically close in 2-D or 3-D space, so we can reduce the 2-D or 3-D
+     job placement problem to a 1-D problem that SLURM can easily handle
+     by defining the node names in the slurm.conf file in order of their
+     Hilbert number. If the computer is not a perfect square or cube with
+     power of two size, then collapse the node list maintaining the numeric
+     order based upon the Hilbert number.
+
   time_login.c       [ C program ]
      This program will report how long a pseudo-login will take for specific
      users or all users on the system. Users identified by this program 
diff --git a/contribs/env_cache_builder.c b/contribs/env_cache_builder.c
index d8560d104..176b06bb0 100644
--- a/contribs/env_cache_builder.c
+++ b/contribs/env_cache_builder.c
@@ -27,10 +27,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/contribs/make.slurm.patch b/contribs/make.slurm.patch
index df23aa729..236fae840 100644
--- a/contribs/make.slurm.patch
+++ b/contribs/make.slurm.patch
@@ -30,7 +30,7 @@ Index: job.c
  child_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp)
  {
 +/* PARALLEL JOB LAUNCH VIA SLURM */
-+  if (getenv("SLURM_JOBID")) {
++  if (getenv("SLURM_JOB_ID")) {
 +    int i;
 +    static char *argx[128];
 +    argx[0] = "srun";
diff --git a/contribs/mpich1.slurm.patch b/contribs/mpich1.slurm.patch
index 70990087a..c5308d61a 100644
--- a/contribs/mpich1.slurm.patch
+++ b/contribs/mpich1.slurm.patch
@@ -76,7 +76,7 @@ Index: mpid/ch_p4/p4/lib/p4_args.c
 +     * for a truly parallel job launch using the existing "execer"
 +     * mode of operation with slight modification.
 +     */
-+    if (getenv("SLURM_JOBID")) {
++    if (getenv("SLURM_JOB_ID")) {
 +	int i;
 +	char *tmp, *hostlist, *host2, *tasks_per_node, *task2;
 +
diff --git a/contribs/perlapi/Makefile.in b/contribs/perlapi/Makefile.in
index 200197341..ac8d0ea05 100644
--- a/contribs/perlapi/Makefile.in
+++ b/contribs/perlapi/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,6 +81,10 @@ 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@
diff --git a/contribs/perlapi/libslurm-perl/Slurm.xs b/contribs/perlapi/libslurm-perl/Slurm.xs
index 72475ed7f..8c83a9df1 100644
--- a/contribs/perlapi/libslurm-perl/Slurm.xs
+++ b/contribs/perlapi/libslurm-perl/Slurm.xs
@@ -20,13 +20,6 @@ extern void slurm_api_clear_config(void);
         slurm_xfree((void **)&(__p), __FILE__, __LINE__, "")
 extern void slurm_xfree(void **, const char *, int, const char *);
 
-extern int slurm_hostlist_count(hostlist_t hl);
-extern int slurm_hostlist_push(hostlist_t hl, const char *hosts);
-extern int slurm_hostlist_push_host(hostlist_t hl, const char *host);
-extern int slurm_hostlist_find(hostlist_t hl, const char *hostname);
-extern size_t slurm_hostlist_ranged_string(hostlist_t hl, size_t n, char *buf);
-extern void slurm_hostlist_uniq(hostlist_t hl);
-
 struct slurm {
 	node_info_msg_t *node_info_msg;
 	partition_info_msg_t *part_info_msg;
@@ -675,19 +668,19 @@ slurm_checkpoint_enable(slurm_t self, U32 jobid, U32 stepid)
 		jobid, stepid
 
 int
-slurm_checkpoint_create(slurm_t self, U32 jobid, U32 stepid, U16 max_wait)
+slurm_checkpoint_create(slurm_t self, U32 jobid, U32 stepid, U16 max_wait, char* image_dir)
 	C_ARGS:
-		jobid, stepid, max_wait
+		jobid, stepid, max_wait, image_dir
 
 int
-slurm_checkpoint_vacate(slurm_t self, U32 jobid, U32 stepid, U16 max_wait)
+slurm_checkpoint_vacate(slurm_t self, U32 jobid, U32 stepid, U16 max_wait, char* image_dir)
 	C_ARGS:
-		jobid, stepid, max_wait
+		jobid, stepid, max_wait, image_dir
 
 int
-slurm_checkpoint_restart(slurm_t self, U32 jobid, U32 stepid)
+slurm_checkpoint_restart(slurm_t self, U32 jobid, U32 stepid, U16 stick, char *image_dir)
 	C_ARGS:
-		jobid, stepid
+		jobid, stepid, stick, image_dir
 
 int
 slurm_checkpoint_complete(slurm_t self, U32 jobid, U32 stepid, time_t begin_time, U32 error_code, char* error_msg)
@@ -753,14 +746,19 @@ slurm_get_triggers(slurm_t self)
 ##################################################################
 MODULE=Slurm PACKAGE=Slurm::Hostlist PREFIX=slurm_hostlist_
 
+int
+slurm_hostlist_count(hostlist_t hl = NULL)
+	OUTPUT:
+		RETVAL
+	
 hostlist_t
 slurm_hostlist_create(char* hostlist)
 
 int
-slurm_hostlist_count(hostlist_t hl = NULL)
+slurm_hostlist_find(hostlist_t hl = NULL, char* hostname)
 	OUTPUT:
 		RETVAL
-	
+
 int
 slurm_hostlist_push(hostlist_t hl = NULL, char* hosts)
 	OUTPUT:
@@ -771,8 +769,17 @@ slurm_hostlist_push_host(hostlist_t hl = NULL, char* host)
 	OUTPUT:
 		RETVAL
 
-int
-slurm_hostlist_find(hostlist_t hl = NULL, char* hostname)
+char*
+slurm_hostlist_ranged_string(hostlist_t hl = NULL)
+	PREINIT:
+		size_t size = 1024;
+		int rc = 0;
+	CODE:
+		Newz(0, RETVAL, size, char);
+		while((rc = slurm_hostlist_ranged_string(hl, size, RETVAL)) == -1) {
+			size *= 2;
+			Renew(RETVAL, size, char);
+		}
 	OUTPUT:
 		RETVAL
 
@@ -791,20 +798,6 @@ slurm_hostlist_shift(hostlist_t hl = NULL)
 	OUTPUT:
 		RETVAL
 
-char*
-slurm_hostlist_ranged_string(hostlist_t hl = NULL)
-	PREINIT:
-		size_t size = 1024;
-		int rc = 0;
-	CODE:
-		Newz(0, RETVAL, size, char);
-		while((rc = slurm_hostlist_ranged_string(hl, size, RETVAL)) == -1) {
-			size *= 2;
-			Renew(RETVAL, size, char);
-		}
-	OUTPUT:
-		RETVAL
-
 void
 slurm_hostlist_uniq(hostlist_t hl = NULL)
         CODE:
@@ -1007,13 +1000,7 @@ slurm_step_launch(slurm_step_ctx ctx = NULL, HV* hv = NULL, SV* start_cb = NULL,
 		if(hv_to_slurm_step_launch_params(hv, &params) < 0) {
 			RETVAL = SLURM_ERROR;
 		} else {
-			char *dot_ptr, launcher_host[1024];
-			gethostname(launcher_host, sizeof(launcher_host));
-			dot_ptr = strchr(launcher_host, '.');
-			if (dot_ptr)
-				dot_ptr[0] = '\0';
-			RETVAL = slurm_step_launch(ctx, launcher_host,
-						   &params, &callbacks);
+			RETVAL = slurm_step_launch(ctx, &params, &callbacks);
 		}
 	OUTPUT:
 		RETVAL
diff --git a/contribs/perlapi/libslurm-perl/alloc.c b/contribs/perlapi/libslurm-perl/alloc.c
index 0ca22566a..e6194392a 100644
--- a/contribs/perlapi/libslurm-perl/alloc.c
+++ b/contribs/perlapi/libslurm-perl/alloc.c
@@ -53,6 +53,7 @@ hv_to_job_desc_msg(HV* hv, job_desc_msg_t* job_desc_msg)
 		}
 	}
 	FETCH_FIELD(hv, job_desc_msg, features, charp, FALSE);
+	FETCH_FIELD(hv, job_desc_msg, reservation, charp, FALSE);
 	FETCH_FIELD(hv, job_desc_msg, immediate, uint16_t, FALSE);
 	FETCH_FIELD(hv, job_desc_msg, job_id, uint32_t, FALSE);
 	FETCH_FIELD(hv, job_desc_msg, name, charp, FALSE);
diff --git a/contribs/perlapi/libslurm-perl/conf.c b/contribs/perlapi/libslurm-perl/conf.c
index a4a2e91ea..62d2b6610 100644
--- a/contribs/perlapi/libslurm-perl/conf.c
+++ b/contribs/perlapi/libslurm-perl/conf.c
@@ -17,6 +17,20 @@ int
 slurm_ctl_conf_to_hv(slurm_ctl_conf_t* conf, HV* hv)
 {
 	STORE_FIELD(hv, conf, last_update, time_t);
+	STORE_FIELD(hv, conf, accounting_storage_enforce, uint16_t);
+	if(conf->accounting_storage_backup_host)
+		STORE_FIELD(hv, conf, accounting_storage_backup_host, charp);
+	if(conf->accounting_storage_host)
+		STORE_FIELD(hv, conf, accounting_storage_host, charp);
+	if(conf->accounting_storage_loc)
+		STORE_FIELD(hv, conf, accounting_storage_loc, charp);
+	if(conf->accounting_storage_pass)
+		STORE_FIELD(hv, conf, accounting_storage_pass, charp);
+	STORE_FIELD(hv, conf, accounting_storage_port, uint32_t);
+	if(conf->accounting_storage_type)
+		STORE_FIELD(hv, conf, accounting_storage_type, charp);
+	if(conf->accounting_storage_user)
+		STORE_FIELD(hv, conf, accounting_storage_user, charp);
 	if(conf->authtype)
 		STORE_FIELD(hv, conf, authtype, charp);
 	if(conf->backup_addr)
@@ -27,70 +41,105 @@ slurm_ctl_conf_to_hv(slurm_ctl_conf_t* conf, HV* hv)
 	STORE_FIELD(hv, conf, cache_groups, uint16_t);
 	if(conf->checkpoint_type)
 		STORE_FIELD(hv, conf, checkpoint_type, charp);
+	if(conf->cluster_name)
+		STORE_FIELD(hv, conf, cluster_name, charp);
 	if(conf->control_addr)
 		STORE_FIELD(hv, conf, control_addr, charp);
 	if(conf->control_machine)
 		STORE_FIELD(hv, conf, control_machine, charp);
 	if(conf->crypto_type)
 		STORE_FIELD(hv, conf, crypto_type, charp);
+	STORE_FIELD(hv, conf, debug_flags, uint32_t);
+	STORE_FIELD(hv, conf, def_mem_per_task, uint32_t);
+	STORE_FIELD(hv, conf, disable_root_jobs, uint16_t);
+	STORE_FIELD(hv, conf, enforce_part_limits, uint16_t);
 	if(conf->epilog)
 		STORE_FIELD(hv, conf, epilog, charp);
-	STORE_FIELD(hv, conf, first_job_id, uint32_t);
-	STORE_FIELD(hv, conf, next_job_id, uint32_t);
+	STORE_FIELD(hv, conf, epilog_msg_time, uint32_t);
+	if(conf->epilog_slurmctld)
+		STORE_FIELD(hv, conf, epilog_slurmctld, charp);
 	STORE_FIELD(hv, conf, fast_schedule, uint16_t);
+	STORE_FIELD(hv, conf, first_job_id, uint32_t);
+	STORE_FIELD(hv, conf, health_check_interval, uint16_t);
+	if(conf->health_check_program)
+		STORE_FIELD(hv, conf, health_check_program, charp);
 	STORE_FIELD(hv, conf, inactive_limit, uint16_t);
+	STORE_FIELD(hv, conf, job_acct_gather_freq, uint16_t);
 	if(conf->job_acct_gather_type)
 		STORE_FIELD(hv, conf, job_acct_gather_type, charp);
-	STORE_FIELD(hv, conf, job_acct_gather_freq, uint16_t);
-	if(conf->accounting_storage_loc)
-		STORE_FIELD(hv, conf, accounting_storage_loc, charp);
-	if(conf->accounting_storage_type)
-		STORE_FIELD(hv, conf, accounting_storage_type, charp);
-	if(conf->accounting_storage_user)
-		STORE_FIELD(hv, conf, accounting_storage_user, charp);
-	if(conf->accounting_storage_host)
-		STORE_FIELD(hv, conf, accounting_storage_host, charp);
-	if(conf->accounting_storage_pass)
-		STORE_FIELD(hv, conf, accounting_storage_pass, charp);
-	STORE_FIELD(hv, conf, accounting_storage_port, uint32_t);
+	if(conf->job_ckpt_dir)
+		STORE_FIELD(hv, conf, job_ckpt_dir, charp);
+	if(conf->job_comp_host)
+		STORE_FIELD(hv, conf, job_comp_host, charp);
 	if(conf->job_comp_loc)
 		STORE_FIELD(hv, conf, job_comp_loc, charp);
+	if(conf->job_comp_pass)
+		STORE_FIELD(hv, conf, job_comp_pass, charp);
+	STORE_FIELD(hv, conf, job_comp_port, uint32_t);
 	if(conf->job_comp_type)
 		STORE_FIELD(hv, conf, job_comp_type, charp);
 	if(conf->job_comp_user)
 		STORE_FIELD(hv, conf, job_comp_user, charp);
-	if(conf->job_comp_host)
-		STORE_FIELD(hv, conf, job_comp_host, charp);
-	if(conf->job_comp_pass)
-		STORE_FIELD(hv, conf, job_comp_pass, charp);
-	STORE_FIELD(hv, conf, job_comp_port, uint32_t);
+	if(conf->job_credential_private_key)
+		STORE_FIELD(hv, conf, job_credential_private_key, charp);
+	if(conf->job_credential_public_certificate)
+		STORE_FIELD(hv, conf, job_credential_public_certificate, charp);
 	STORE_FIELD(hv, conf, job_file_append, uint16_t); 
+	STORE_FIELD(hv, conf, job_requeue, uint16_t); 
+	STORE_FIELD(hv, conf, kill_on_bad_exit, uint16_t);
 	STORE_FIELD(hv, conf, kill_wait, uint16_t);
+	if(conf->licenses)
+		STORE_FIELD(hv, conf, licenses, charp);
 	if(conf->mail_prog)
 		STORE_FIELD(hv, conf, mail_prog, charp);
 	STORE_FIELD(hv, conf, max_job_cnt, uint16_t);
+	STORE_FIELD(hv, conf, max_mem_per_task, uint32_t);
 	STORE_FIELD(hv, conf, min_job_age, uint16_t);
 	if(conf->mpi_default)
 		STORE_FIELD(hv, conf, mpi_default, charp);
+	if(conf->mpi_params)
+		STORE_FIELD(hv, conf, mpi_params, charp);
 	STORE_FIELD(hv, conf, msg_timeout, uint16_t);
+	STORE_FIELD(hv, conf, next_job_id, uint32_t);
+	if(conf->node_prefix)
+		STORE_FIELD(hv, conf, node_prefix, charp);
+	STORE_FIELD(hv, conf, over_time_limit, uint16_t);
 	if(conf->plugindir)
 		STORE_FIELD(hv, conf, plugindir, charp);
 	if(conf->plugstack)
 		STORE_FIELD(hv, conf, plugstack, charp);
+	STORE_FIELD(hv, conf, priority_decay_hl, uint32_t);
+	STORE_FIELD(hv, conf, priority_favor_small, uint16_t);
+	STORE_FIELD(hv, conf, priority_max_age, uint32_t);
+	STORE_FIELD(hv, conf, priority_reset_period, uint16_t);
+	STORE_FIELD(hv, conf, priority_type, charp);
+	STORE_FIELD(hv, conf, priority_weight_age, uint32_t);
+	STORE_FIELD(hv, conf, priority_weight_fs, uint32_t);
+	STORE_FIELD(hv, conf, priority_weight_js, uint32_t);
+	STORE_FIELD(hv, conf, priority_weight_part, uint32_t);
+	STORE_FIELD(hv, conf, priority_weight_qos, uint32_t);
 	STORE_FIELD(hv, conf, private_data, uint16_t);
 	if(conf->proctrack_type)
 		STORE_FIELD(hv, conf, proctrack_type, charp);
 	if(conf->prolog)
 		STORE_FIELD(hv, conf, prolog, charp);
+	if(conf->prolog_slurmctld)
+		STORE_FIELD(hv, conf, prolog_slurmctld, charp);
 	STORE_FIELD(hv, conf, propagate_prio_process, uint16_t);
 	if(conf->propagate_rlimits)
 		STORE_FIELD(hv, conf, propagate_rlimits, charp);
 	if(conf->propagate_rlimits_except)
 		STORE_FIELD(hv, conf, propagate_rlimits_except, charp);
-	STORE_FIELD(hv, conf, ret2service, uint16_t);
 	STORE_FIELD(hv, conf, resume_rate, uint16_t);
 	if(conf->resume_program)
 		STORE_FIELD(hv, conf, resume_program, charp);
+	STORE_FIELD(hv, conf, resv_over_run, uint16_t);
+	STORE_FIELD(hv, conf, ret2service, uint16_t);
+	if(conf->salloc_default_command)
+		STORE_FIELD(hv, conf, salloc_default_command, charp);
+	if(conf->sched_params)
+		STORE_FIELD(hv, conf, sched_params, charp);
+	STORE_FIELD(hv, conf, sched_time_slice, uint16_t);
 	if(conf->schedtype)
 		STORE_FIELD(hv, conf, schedtype, charp);
 	STORE_FIELD(hv, conf, schedport, uint16_t);
@@ -101,6 +150,9 @@ slurm_ctl_conf_to_hv(slurm_ctl_conf_t* conf, HV* hv)
 	STORE_FIELD(hv, conf, slurm_user_id, uint32_t);
 	if(conf->slurm_user_name)
 		STORE_FIELD(hv, conf, slurm_user_name, charp);
+	STORE_FIELD(hv, conf, slurmd_user_id, uint32_t);
+	if(conf->slurmd_user_name)
+		STORE_FIELD(hv, conf, slurmd_user_name, charp);
 	STORE_FIELD(hv, conf, slurmctld_debug, uint16_t);
 	if(conf->slurmctld_logfile)
 		STORE_FIELD(hv, conf, slurmctld_logfile, charp);
@@ -111,14 +163,18 @@ slurm_ctl_conf_to_hv(slurm_ctl_conf_t* conf, HV* hv)
 	STORE_FIELD(hv, conf, slurmd_debug, uint16_t);
 	if(conf->slurmd_logfile)
 		STORE_FIELD(hv, conf, slurmd_logfile, charp);
+	if(conf->slurmd_pidfile)
+		STORE_FIELD(hv, conf, slurmd_pidfile, charp);
 	STORE_FIELD(hv, conf, slurmd_port, uint32_t);
 	if(conf->slurmd_spooldir)
 		STORE_FIELD(hv, conf, slurmd_spooldir, charp);
-	if(conf->slurmd_pidfile)
-		STORE_FIELD(hv, conf, slurmd_pidfile, charp);
 	STORE_FIELD(hv, conf, slurmd_timeout, uint16_t);
 	if(conf->slurm_conf)
 		STORE_FIELD(hv, conf, slurm_conf, charp);
+	if(conf->srun_epilog)
+		STORE_FIELD(hv, conf, srun_epilog, charp);
+	if(conf->srun_prolog)
+		STORE_FIELD(hv, conf, srun_prolog, charp);
 	if(conf->state_save_location)
 		STORE_FIELD(hv, conf, state_save_location, charp);
 	if(conf->suspend_exc_nodes)
@@ -140,22 +196,15 @@ slurm_ctl_conf_to_hv(slurm_ctl_conf_t* conf, HV* hv)
 		STORE_FIELD(hv, conf, task_prolog, charp);
 	if(conf->tmp_fs)
 		STORE_FIELD(hv, conf, tmp_fs, charp);
-	STORE_FIELD(hv, conf, wait_time, uint16_t);
-	if(conf->job_credential_private_key)
-		STORE_FIELD(hv, conf, job_credential_private_key, charp);
-	if(conf->job_credential_public_certificate)
-		STORE_FIELD(hv, conf, job_credential_public_certificate, charp);
-	if(conf->srun_prolog)
-		STORE_FIELD(hv, conf, srun_prolog, charp);
-	if(conf->srun_epilog)
-		STORE_FIELD(hv, conf, srun_epilog, charp);
-	if(conf->node_prefix)
-		STORE_FIELD(hv, conf, node_prefix, charp);
+	if(conf->topology_plugin)
+		STORE_FIELD(hv, conf, topology_plugin, charp);
+	STORE_FIELD(hv, conf, track_wckey, uint16_t);
 	STORE_FIELD(hv, conf, tree_width, uint16_t);
-	STORE_FIELD(hv, conf, use_pam, uint16_t);
 	if(conf->unkillable_program)
 		STORE_FIELD(hv, conf, unkillable_program, charp);
 	STORE_FIELD(hv, conf, unkillable_timeout, uint16_t);
+	STORE_FIELD(hv, conf, use_pam, uint16_t);
+	STORE_FIELD(hv, conf, wait_time, uint16_t);
 	return 0;
 }
 
diff --git a/contribs/perlapi/libslurm-perl/job.c b/contribs/perlapi/libslurm-perl/job.c
index f08d76db9..4085be3d9 100644
--- a/contribs/perlapi/libslurm-perl/job.c
+++ b/contribs/perlapi/libslurm-perl/job.c
@@ -18,36 +18,18 @@ job_info_to_hv(job_info_t* job_info, HV* hv)
 	int j;
 	AV* avp;
 
-	STORE_FIELD(hv, job_info, job_id, uint32_t);
-	if(job_info->name)
-		STORE_FIELD(hv, job_info, name, charp);
-	STORE_FIELD(hv, job_info, batch_flag, uint16_t);
-	STORE_FIELD(hv, job_info, alloc_sid, uint32_t);
+	if(job_info->account)
+		STORE_FIELD(hv, job_info, account, charp);
 	if(job_info->alloc_node)
 		STORE_FIELD(hv, job_info, alloc_node, charp);
-	STORE_FIELD(hv, job_info, user_id, uint32_t);
-	STORE_FIELD(hv, job_info, group_id, uint32_t);
-	STORE_FIELD(hv, job_info, job_state, uint16_t);
-	STORE_FIELD(hv, job_info, time_limit, uint32_t);
-	STORE_FIELD(hv, job_info, submit_time, time_t);
-	STORE_FIELD(hv, job_info, start_time, time_t);
-	STORE_FIELD(hv, job_info, end_time, time_t);
-	STORE_FIELD(hv, job_info, suspend_time, time_t);
-	STORE_FIELD(hv, job_info, pre_sus_time, time_t);
-	STORE_FIELD(hv, job_info, priority, uint32_t);
-	if(job_info->nodes)
-		STORE_FIELD(hv, job_info, nodes, charp);
-	avp = newAV();
-	for(j = 0; ; j += 2) {
-		if(job_info->node_inx[j] == -1)
-			break;
-		av_store(avp, j, newSVuv(job_info->node_inx[j]));
-		av_store(avp, j+1, newSVuv(job_info->node_inx[j+1]));
-	}
-	hv_store_sv(hv, "node_inx", newRV_noinc((SV*)avp));
-	if(job_info->partition)
-		STORE_FIELD(hv, job_info, partition, charp);
-	STORE_FIELD(hv, job_info, num_cpu_groups, uint32_t);
+	STORE_FIELD(hv, job_info, alloc_sid, uint32_t);
+	STORE_FIELD(hv, job_info, assoc_id, uint32_t);
+	STORE_FIELD(hv, job_info, batch_flag, uint16_t);
+	if(job_info->command)
+		STORE_FIELD(hv, job_info, command, charp);
+	if(job_info->comment)
+		STORE_FIELD(hv, job_info, comment, charp);
+	STORE_FIELD(hv, job_info, contiguous, uint16_t);
 	avp = newAV();
 	for(j = 0; j < job_info->num_cpu_groups; j ++) {
 		av_store(avp, j, newSVuv(job_info->cpus_per_node[j]));
@@ -58,45 +40,93 @@ job_info_to_hv(job_info_t* job_info, HV* hv)
 		av_store(avp, j, newSVuv(job_info->cpu_count_reps[j]));
 	}
 	hv_store_sv(hv, "cpu_count_reps", newRV_noinc((SV*)avp));
-	STORE_FIELD(hv, job_info, num_procs, uint32_t);
-	STORE_FIELD(hv, job_info, num_nodes, uint32_t);
+	STORE_FIELD(hv, job_info, cpus_per_task, uint16_t);
+	STORE_FIELD(hv, job_info, dependency, charp);
+	STORE_FIELD(hv, job_info, end_time, time_t);
+	if(job_info->exc_nodes)
+		STORE_FIELD(hv, job_info, exc_nodes, charp);
+	avp = newAV();
+	for(j = 0; ; j += 2) {
+		if(job_info->exc_node_inx[j] == -1)
+			break;
+		av_store(avp, j, newSVuv(job_info->exc_node_inx[j]));
+		av_store(avp, j+1, newSVuv(job_info->exc_node_inx[j+1]));
+	}
+	hv_store_sv(hv, "exc_node_inx", newRV_noinc((SV*)avp));
+
+	STORE_FIELD(hv, job_info, exit_code, uint32_t);
+	if(job_info->features)
+		STORE_FIELD(hv, job_info, features, charp);
+	STORE_FIELD(hv, job_info, group_id, uint32_t);
+	STORE_FIELD(hv, job_info, job_id, uint32_t);
+	STORE_FIELD(hv, job_info, job_min_cores, uint16_t);
+	STORE_FIELD(hv, job_info, job_min_memory, uint32_t);
+	STORE_FIELD(hv, job_info, job_min_procs, uint16_t);
+	STORE_FIELD(hv, job_info, job_min_sockets, uint16_t);
+	STORE_FIELD(hv, job_info, job_min_threads, uint16_t);
+	STORE_FIELD(hv, job_info, job_min_tmp_disk, uint32_t);
+	STORE_FIELD(hv, job_info, job_state, uint16_t);
+	if(job_info->licenses)
+		STORE_FIELD(hv, job_info, licenses, charp);
+	STORE_FIELD(hv, job_info, max_cores, uint16_t);
 	STORE_FIELD(hv, job_info, max_nodes, uint32_t);
-	STORE_FIELD(hv, job_info, min_sockets, uint16_t);
 	STORE_FIELD(hv, job_info, max_sockets, uint16_t);
+	STORE_FIELD(hv, job_info, max_threads, uint16_t);
 	STORE_FIELD(hv, job_info, min_cores, uint16_t);
-	STORE_FIELD(hv, job_info, max_cores, uint16_t);
+	STORE_FIELD(hv, job_info, min_sockets, uint16_t);
 	STORE_FIELD(hv, job_info, min_threads, uint16_t);
-	STORE_FIELD(hv, job_info, max_threads, uint16_t);
-	STORE_FIELD(hv, job_info, shared, uint16_t);
-	STORE_FIELD(hv, job_info, contiguous, uint16_t);
-	STORE_FIELD(hv, job_info, cpus_per_task, uint16_t);
+	if(job_info->name)
+		STORE_FIELD(hv, job_info, name, charp);
+	if(job_info->network)
+		STORE_FIELD(hv, job_info, network, charp);
+	if(job_info->nodes)
+		STORE_FIELD(hv, job_info, nodes, charp);
+	avp = newAV();
+	for(j = 0; ; j += 2) {
+		if(job_info->node_inx[j] == -1)
+			break;
+		av_store(avp, j, newSVuv(job_info->node_inx[j]));
+		av_store(avp, j+1, newSVuv(job_info->node_inx[j+1]));
+	}
+	hv_store_sv(hv, "node_inx", newRV_noinc((SV*)avp));
+	STORE_FIELD(hv, job_info, ntasks_per_core, uint16_t);
 	STORE_FIELD(hv, job_info, ntasks_per_node, uint16_t);
 	STORE_FIELD(hv, job_info, ntasks_per_socket, uint16_t);
-	STORE_FIELD(hv, job_info, ntasks_per_core, uint16_t);
-	STORE_FIELD(hv, job_info, job_min_procs, uint16_t);
-	STORE_FIELD(hv, job_info, job_min_sockets, uint16_t);
-	STORE_FIELD(hv, job_info, job_min_cores, uint16_t);
-	STORE_FIELD(hv, job_info, job_min_threads, uint16_t);
-	STORE_FIELD(hv, job_info, job_min_memory, uint32_t);
-	STORE_FIELD(hv, job_info, job_min_tmp_disk, uint32_t);
+	STORE_FIELD(hv, job_info, num_cpu_groups, uint32_t);
+	STORE_FIELD(hv, job_info, num_nodes, uint32_t);
+	STORE_FIELD(hv, job_info, num_procs, uint32_t);
+	if(job_info->partition)
+		STORE_FIELD(hv, job_info, partition, charp);
+	STORE_FIELD(hv, job_info, pre_sus_time, time_t);
+	STORE_FIELD(hv, job_info, priority, uint32_t);
 	if(job_info->req_nodes)
 		STORE_FIELD(hv, job_info, req_nodes, charp);
-	/* TODO: req_node_inx */
-	if(job_info->exc_nodes)
-		STORE_FIELD(hv, job_info, exc_nodes, charp);
-	/* TODO: exc_node_inx */
-	if(job_info->features)
-		STORE_FIELD(hv, job_info, features, charp);
-	STORE_FIELD(hv, job_info, dependency, charp);
-	STORE_FIELD(hv, job_info, exit_code, uint32_t);
-	if(job_info->account)
-		STORE_FIELD(hv, job_info, account, charp);
-	STORE_FIELD(hv, job_info, state_reason, uint16_t);
-	if(job_info->network)
-		STORE_FIELD(hv, job_info, network, charp);
-	if(job_info->comment)
-		STORE_FIELD(hv, job_info, comment, charp);
+	avp = newAV();
+	for(j = 0; ; j += 2) {
+		if(job_info->req_node_inx[j] == -1)
+			break;
+		av_store(avp, j, newSVuv(job_info->req_node_inx[j]));
+		av_store(avp, j+1, newSVuv(job_info->req_node_inx[j+1]));
+	}
+	hv_store_sv(hv, "req_node_inx", newRV_noinc((SV*)avp));
+	STORE_FIELD(hv, job_info, requeue, uint16_t);
+	STORE_FIELD(hv, job_info, restart_cnt, uint16_t);
+	if(job_info->resv_name)
+		STORE_FIELD(hv, job_info, resv_name, charp);
 	/* TODO: select_jobinfo */
+	STORE_FIELD(hv, job_info, shared, uint16_t);
+	STORE_FIELD(hv, job_info, start_time, time_t);
+	if(job_info->state_desc)
+		STORE_FIELD(hv, job_info, state_desc, charp);
+	STORE_FIELD(hv, job_info, state_reason, uint16_t);
+	STORE_FIELD(hv, job_info, submit_time, time_t);
+	STORE_FIELD(hv, job_info, suspend_time, time_t);
+	STORE_FIELD(hv, job_info, time_limit, uint32_t);
+	STORE_FIELD(hv, job_info, user_id, uint32_t);
+	if(job_info->wckey)
+		STORE_FIELD(hv, job_info, wckey, charp);
+	if(job_info->work_dir)
+		STORE_FIELD(hv, job_info, work_dir, charp);
 			
 	return 0;
 }
@@ -133,22 +163,37 @@ job_info_msg_to_hv(job_info_msg_t* job_info_msg, HV* hv)
 int
 job_step_info_to_hv(job_step_info_t* step_info, HV* hv)
 {
-	STORE_FIELD(hv, step_info, job_id, uint32_t);
-	STORE_FIELD(hv, step_info, step_id, uint16_t);
-	STORE_FIELD(hv, step_info, user_id, uint32_t);
-	STORE_FIELD(hv, step_info, num_tasks, uint32_t);
-	STORE_FIELD(hv, step_info, start_time, time_t);
-	STORE_FIELD(hv, step_info, run_time, time_t);
+	int j;
+	AV* avp;
 
-	if(step_info->partition)
-		STORE_FIELD(hv, step_info, partition, charp);
-	if(step_info->nodes)
-		STORE_FIELD(hv, step_info, nodes, charp);
+	if(step_info->ckpt_dir)
+		STORE_FIELD(hv, step_info, ckpt_dir, charp);
+	STORE_FIELD(hv, step_info, ckpt_interval, uint16_t);
+	STORE_FIELD(hv, step_info, job_id, uint32_t);
 	if(step_info->name)
 		STORE_FIELD(hv, step_info, name, charp);
 	if(step_info->network)
 		STORE_FIELD(hv, step_info, network, charp);
-	/* TODO: node_inx */
+	if(step_info->nodes)
+		STORE_FIELD(hv, step_info, nodes, charp);
+	avp = newAV();
+	for(j = 0; ; j += 2) {
+		if(step_info->node_inx[j] == -1)
+			break;
+		av_store(avp, j, newSVuv(step_info->node_inx[j]));
+		av_store(avp, j+1, newSVuv(step_info->node_inx[j+1]));
+	}
+	hv_store_sv(hv, "node_inx", newRV_noinc((SV*)avp));
+	STORE_FIELD(hv, step_info, num_tasks, uint32_t);
+	if(step_info->partition)
+		STORE_FIELD(hv, step_info, partition, charp);
+	if(step_info->resv_ports)
+		STORE_FIELD(hv, step_info, resv_ports, charp);
+	STORE_FIELD(hv, step_info, run_time, time_t);
+	STORE_FIELD(hv, step_info, start_time, time_t);
+	STORE_FIELD(hv, step_info, step_id, uint16_t);
+	STORE_FIELD(hv, step_info, user_id, uint32_t);
+
 	return 0;
 }
 
@@ -188,19 +233,19 @@ slurm_step_layout_to_hv(slurm_step_layout_t* step_layout, HV* hv)
 	int i, j;
 
 	STORE_FIELD(hv, step_layout, node_cnt, uint16_t);
-	STORE_FIELD(hv, step_layout, task_cnt, uint32_t);
 	if (step_layout->node_list)
 		STORE_FIELD(hv, step_layout, node_list, charp);
 	else {
 		Perl_warn(aTHX_ "node_list missing in slurm_step_layout_t");
 		return -1;
 	}
-	
+	STORE_FIELD(hv, step_layout, plane_size, uint16_t);
 	avp = newAV();
 	for(i = 0; i < step_layout->node_cnt; i ++)
 		av_store(avp, i, newSVuv(step_layout->tasks[i]));
 	hv_store_sv(hv, "tasks", newRV_noinc((SV*)avp));
-	
+	STORE_FIELD(hv, step_layout, task_cnt, uint32_t);
+	STORE_FIELD(hv, step_layout, task_dist, uint16_t);
 	avp = newAV();
 	for(i = 0; i < step_layout->node_cnt; i ++) {
 		avp2 = newAV();
@@ -210,7 +255,5 @@ slurm_step_layout_to_hv(slurm_step_layout_t* step_layout, HV* hv)
 	}
 	hv_store_sv(hv, "tids", newRV_noinc((SV*)avp));
 	
-	STORE_FIELD(hv, step_layout, task_dist, uint16_t);
-	STORE_FIELD(hv, step_layout, plane_size, uint16_t);
 	return 0;
 }
diff --git a/contribs/perlapi/libslurm-perl/launch.c b/contribs/perlapi/libslurm-perl/launch.c
index e5901cb97..3191c2bf3 100644
--- a/contribs/perlapi/libslurm-perl/launch.c
+++ b/contribs/perlapi/libslurm-perl/launch.c
@@ -113,14 +113,20 @@ hv_to_slurm_step_launch_params(HV* hv, slurm_step_launch_params_t* params)
 	FETCH_FIELD(hv, params, cpu_bind, charp, FALSE);
 	FETCH_FIELD(hv, params, mem_bind_type, uint16_t, FALSE);
 	FETCH_FIELD(hv, params, mem_bind, charp, FALSE);
+
+	FETCH_FIELD(hv, params, max_sockets, uint16_t, FALSE);
+	FETCH_FIELD(hv, params, max_cores, uint16_t, FALSE);
+	FETCH_FIELD(hv, params, max_threads, uint16_t, FALSE);
 	FETCH_FIELD(hv, params, cpus_per_task, uint16_t, FALSE);
-	FETCH_FIELD(hv, params, ntasks_per_node, uint16_t, FALSE);
-	FETCH_FIELD(hv, params, ntasks_per_socket, uint16_t, FALSE);
-	FETCH_FIELD(hv, params, ntasks_per_core, uint16_t, FALSE);
 	FETCH_FIELD(hv, params, task_dist, uint16_t, FALSE);
-	FETCH_FIELD(hv, params, plane_size, uint16_t, FALSE);
-	FETCH_FIELD(hv, params, mpi_plugin_name, charp, FALSE);
+	FETCH_FIELD(hv, params, preserve_env, bool, FALSE);
 
+	FETCH_FIELD(hv, params, mpi_plugin_name, charp, FALSE);
+	FETCH_FIELD(hv, params, open_mode, uint8_t, FALSE);
+	FETCH_FIELD(hv, params, acctg_freq, uint16_t, FALSE);
+	FETCH_FIELD(hv, params, pty, bool, FALSE);
+	FETCH_FIELD(hv, params, ckpt_dir, charp, FALSE);
+	
 	return 0;
 }
 
diff --git a/contribs/perlapi/libslurm-perl/msg.h b/contribs/perlapi/libslurm-perl/msg.h
index 2f36413ff..6dc418d10 100644
--- a/contribs/perlapi/libslurm-perl/msg.h
+++ b/contribs/perlapi/libslurm-perl/msg.h
@@ -14,7 +14,16 @@ typedef char* charp;
  */
 inline static int av_store_uint16_t(AV* av, int index, uint16_t val)
 {
-	SV* sv = newSVuv(val);
+	SV* sv = NULL;
+	/* Perl has a hard time figuring out the an unsigned int is
+	   equal to INFINITE or NO_VAL since they are treated as
+	   signed ints so we will handle this here. */
+	if(val == (uint16_t)INFINITE)
+		sv = newSViv(INFINITE);
+	else if(val == (uint16_t)NO_VAL)
+		sv = newSViv(NO_VAL);
+	else
+		sv = newSViv(val);
 	
 	if (av_store(av, (I32)index, sv) == NULL) {
 		SvREFCNT_dec(sv);
@@ -28,7 +37,16 @@ inline static int av_store_uint16_t(AV* av, int index, uint16_t val)
  */
 inline static int av_store_uint32_t(AV* av, int index, uint32_t val)
 {
-	SV* sv = newSVuv(val);
+	SV* sv = NULL;
+	/* Perl has a hard time figuring out the an unsigned int is
+	   equal to INFINITE or NO_VAL since they are treated as
+	   signed ints so we will handle this here. */
+	if(val == (uint32_t)INFINITE)
+		sv = newSViv(INFINITE);
+	else if(val == (uint32_t)NO_VAL)
+		sv = newSViv(NO_VAL);
+	else
+		sv = newSViv(val);
 	
 	if (av_store(av, (I32)index, sv) == NULL) {
 		SvREFCNT_dec(sv);
@@ -37,7 +55,6 @@ inline static int av_store_uint32_t(AV* av, int index, uint32_t val)
 	return 0;
 }
 
-
 /*
  * store an int into AV 
  */
@@ -74,8 +91,17 @@ inline static int hv_store_charp(HV* hv, const char *key, charp val)
  */
 inline static int hv_store_uint32_t(HV* hv, const char *key, uint32_t val)
 {
-	SV* sv = newSVuv(val);
-	
+	SV* sv = NULL;
+	/* Perl has a hard time figuring out the an unsigned int is
+	   equal to INFINITE or NO_VAL since they are treated as
+	   signed ints so we will handle this here. */
+	if(val == (uint32_t)INFINITE)
+		sv = newSViv(INFINITE);
+	else if(val == (uint32_t)NO_VAL)
+		sv = newSViv(NO_VAL);
+	else
+		sv = newSVuv(val);
+
 	if (!key || hv_store(hv, key, (I32)strlen(key), sv, 0) == NULL) {
 		SvREFCNT_dec(sv);
 		return -1;
@@ -88,7 +114,16 @@ inline static int hv_store_uint32_t(HV* hv, const char *key, uint32_t val)
  */
 inline static int hv_store_uint16_t(HV* hv, const char *key, uint16_t val)
 {
-	SV* sv = newSVuv(val);
+	SV* sv = NULL;
+	/* Perl has a hard time figuring out the an unsigned int is
+	   equal to INFINITE or NO_VAL since they are treated as
+	   signed ints so we will handle this here. */
+	if(val == (uint16_t)INFINITE)
+		sv = newSViv(INFINITE);
+	else if(val == (uint16_t)NO_VAL)
+		sv = newSViv(NO_VAL);
+	else
+		sv = newSVuv(val);
 	
 	if (!key || hv_store(hv, key, (I32)strlen(key), sv, 0) == NULL) {
 		SvREFCNT_dec(sv);
@@ -102,7 +137,16 @@ inline static int hv_store_uint16_t(HV* hv, const char *key, uint16_t val)
  */
 inline static int hv_store_uint8_t(HV* hv, const char *key, uint8_t val)
 {
-	SV* sv = newSVuv(val);
+	SV* sv = NULL;
+	/* Perl has a hard time figuring out the an unsigned int is
+	   equal to INFINITE or NO_VAL since they are treated as
+	   signed ints so we will handle this here. */
+	if(val == (uint8_t)INFINITE)
+		sv = newSViv(INFINITE);
+	else if(val == (uint8_t)NO_VAL)
+		sv = newSViv(NO_VAL);
+	else
+		sv = newSVuv(val);
 	
 	if (!key || hv_store(hv, key, (I32)strlen(key), sv, 0) == NULL) {
 		SvREFCNT_dec(sv);
diff --git a/contribs/perlapi/libslurm-perl/node.c b/contribs/perlapi/libslurm-perl/node.c
index 7b2b46ca8..bda3f0eae 100644
--- a/contribs/perlapi/libslurm-perl/node.c
+++ b/contribs/perlapi/libslurm-perl/node.c
@@ -15,6 +15,12 @@
 int
 node_info_to_hv(node_info_t* node_info, HV* hv)
 {
+	if(node_info->arch)
+		STORE_FIELD(hv, node_info, arch, charp);
+	STORE_FIELD(hv, node_info, cores, uint16_t);
+	STORE_FIELD(hv, node_info, cpus, uint16_t);
+	if(node_info->features)
+		STORE_FIELD(hv, node_info, features, charp);
 	if (node_info->name)
 		STORE_FIELD(hv, node_info, name, charp);
 	else {
@@ -22,17 +28,16 @@ node_info_to_hv(node_info_t* node_info, HV* hv)
 		return -1;
 	}
 	STORE_FIELD(hv, node_info, node_state, uint16_t);
-	STORE_FIELD(hv, node_info, cpus, uint16_t);
-	STORE_FIELD(hv, node_info, used_cpus, uint16_t);
-	STORE_FIELD(hv, node_info, sockets, uint16_t);
-	STORE_FIELD(hv, node_info, cores, uint16_t);
+	if(node_info->os)
+		STORE_FIELD(hv, node_info, os, charp);
 	STORE_FIELD(hv, node_info, real_memory, uint32_t);
-	STORE_FIELD(hv, node_info, tmp_disk, uint32_t);
-	STORE_FIELD(hv, node_info, weight, uint32_t);
-	if(node_info->features)
-		STORE_FIELD(hv, node_info, features, charp);
 	if(node_info->reason)
 		STORE_FIELD(hv, node_info, reason, charp);
+	STORE_FIELD(hv, node_info, sockets, uint16_t);
+	STORE_FIELD(hv, node_info, threads, uint16_t);
+	STORE_FIELD(hv, node_info, tmp_disk, uint32_t);
+	STORE_FIELD(hv, node_info, used_cpus, uint16_t);
+	STORE_FIELD(hv, node_info, weight, uint32_t);
 	return 0;
 }
 /*
@@ -71,11 +76,13 @@ hv_to_update_node_msg(HV* hv, update_node_msg_t *update_msg)
 	update_msg->features = NULL;
 	update_msg->reason = NULL;
 	update_msg->node_state = (uint16_t) NO_VAL;
+	update_msg->weight = (uint32_t) NO_VAL;
 
 	FETCH_FIELD(hv, update_msg, node_names, charp, TRUE);
 	FETCH_FIELD(hv, update_msg, node_state, uint16_t, FALSE);
 	FETCH_FIELD(hv, update_msg, reason, charp, FALSE);
 	FETCH_FIELD(hv, update_msg, features, charp, FALSE);
+	FETCH_FIELD(hv, update_msg, weight, uint32_t, FALSE);
 	return 0;
 }
 
diff --git a/contribs/perlapi/libslurm-perl/partition.c b/contribs/perlapi/libslurm-perl/partition.c
index f0f2b30de..d0e9ac6e5 100644
--- a/contribs/perlapi/libslurm-perl/partition.c
+++ b/contribs/perlapi/libslurm-perl/partition.c
@@ -15,28 +15,45 @@
 int
 part_info_to_hv(partition_info_t* part_info, HV* hv)
 {
+	if (part_info->allow_alloc_nodes)
+		STORE_FIELD(hv, part_info, allow_alloc_nodes, charp);
+	if (part_info->allow_groups)
+		STORE_FIELD(hv, part_info, allow_groups, charp);
+	STORE_FIELD(hv, part_info, default_part, uint16_t);
+	STORE_FIELD(hv, part_info, default_time, uint32_t);
+	STORE_FIELD(hv, part_info, disable_root_jobs, uint16_t);
+	STORE_FIELD(hv, part_info, hidden, uint16_t);
+	STORE_FIELD(hv, part_info, max_nodes, uint32_t);
+	STORE_FIELD(hv, part_info, max_share, uint16_t);
+	STORE_FIELD(hv, part_info, max_time, uint32_t);
+	STORE_FIELD(hv, part_info, min_nodes, uint32_t);
 	if (part_info->name)
 		STORE_FIELD(hv, part_info, name, charp);
 	else {
 		Perl_warn(aTHX_ "partition name missing in partition_info_t");
 		return -1;
 	}
-	STORE_FIELD(hv, part_info, max_time, uint32_t);
-	STORE_FIELD(hv, part_info, max_nodes, uint32_t);
-	STORE_FIELD(hv, part_info, min_nodes, uint32_t);
-	STORE_FIELD(hv, part_info, total_nodes, uint32_t);
-	STORE_FIELD(hv, part_info, total_cpus, uint32_t);
+	/* no store for int pointers yet */
+	if (part_info->node_inx) {
+		int j;
+		AV* avp = newAV();
+		for(j = 0; ; j += 2) {
+			if(part_info->node_inx[j] == -1)
+				break;
+			av_store(avp, j, newSVuv(part_info->node_inx[j]));
+			av_store(avp, j+1, newSVuv(part_info->node_inx[j+1]));
+		}
+		hv_store_sv(hv, "node_inx", newRV_noinc((SV*)avp));
+	}
 	STORE_FIELD(hv, part_info, node_scaling, uint16_t);
-	STORE_FIELD(hv, part_info, default_part, uint16_t);
-	STORE_FIELD(hv, part_info, hidden, uint16_t);
-	STORE_FIELD(hv, part_info, root_only, uint16_t);
-	STORE_FIELD(hv, part_info, max_share, uint16_t);
-	STORE_FIELD(hv, part_info, state_up, uint16_t);
 	if (part_info->nodes)
 		STORE_FIELD(hv, part_info, nodes, charp);
-	/* TODO: node_inx */
-	if (part_info->allow_groups)
-		STORE_FIELD(hv, part_info, allow_groups, charp);
+	STORE_FIELD(hv, part_info, priority, uint16_t);
+	STORE_FIELD(hv, part_info, root_only, uint16_t);
+	STORE_FIELD(hv, part_info, state_up, uint16_t);
+	STORE_FIELD(hv, part_info, total_cpus, uint32_t);
+	STORE_FIELD(hv, part_info, total_nodes, uint32_t);
+
 	return 0;
 }
 
@@ -55,7 +72,8 @@ partition_info_msg_to_hv(partition_info_msg_t* part_info_msg, HV* hv)
 	avp = newAV();
 	for(i = 0; i < part_info_msg->record_count; i ++) {
 		hvp = newHV();
-		if (part_info_to_hv(part_info_msg->partition_array + i, hvp) < 0) {
+		if (part_info_to_hv(part_info_msg->partition_array + i, hvp)
+		    < 0) {
 			SvREFCNT_dec(hvp);
 			SvREFCNT_dec(avp);
 			return -1;
@@ -71,20 +89,24 @@ hv_to_update_part_msg(HV* hv, update_part_msg_t* part_msg)
 {
 	slurm_init_part_desc_msg(part_msg);
 	
-	FETCH_FIELD(hv, part_msg, name, charp, TRUE);
-	FETCH_FIELD(hv, part_msg, max_time, uint32_t, FALSE);
+	FETCH_FIELD(hv, part_msg, allow_alloc_nodes, charp, FALSE);
+	FETCH_FIELD(hv, part_msg, allow_groups, charp, FALSE);
+	FETCH_FIELD(hv, part_msg, default_part, uint16_t, FALSE);
+	FETCH_FIELD(hv, part_msg, default_time, uint32_t, FALSE);
+	FETCH_FIELD(hv, part_msg, disable_root_jobs, uint16_t, FALSE);
+	FETCH_FIELD(hv, part_msg, hidden, uint16_t, FALSE);
 	FETCH_FIELD(hv, part_msg, max_nodes, uint32_t, FALSE);
+	FETCH_FIELD(hv, part_msg, max_share, uint16_t, FALSE);
+	FETCH_FIELD(hv, part_msg, max_time, uint32_t, FALSE);
 	FETCH_FIELD(hv, part_msg, min_nodes, uint32_t, FALSE);
-	FETCH_FIELD(hv, part_msg, total_nodes, uint32_t, FALSE);
-	FETCH_FIELD(hv, part_msg, total_cpus, uint32_t, FALSE);
+	FETCH_FIELD(hv, part_msg, name, charp, TRUE);
+	/*not used node_inx */
 	FETCH_FIELD(hv, part_msg, node_scaling, uint16_t, FALSE);
-	FETCH_FIELD(hv, part_msg, default_part, uint16_t, FALSE);
-	FETCH_FIELD(hv, part_msg, hidden, uint16_t, FALSE);
+	FETCH_FIELD(hv, part_msg, nodes, charp, FALSE);
+	FETCH_FIELD(hv, part_msg, priority, uint16_t, FALSE);
 	FETCH_FIELD(hv, part_msg, root_only, uint16_t, FALSE);
-	FETCH_FIELD(hv, part_msg, max_share, uint16_t, FALSE);
 	FETCH_FIELD(hv, part_msg, state_up, uint16_t, FALSE);
-	FETCH_FIELD(hv, part_msg, nodes, charp, FALSE);
-	/* node_inx not used */
-	FETCH_FIELD(hv, part_msg, allow_groups, charp, FALSE);
+	FETCH_FIELD(hv, part_msg, total_cpus, uint32_t, FALSE);
+	FETCH_FIELD(hv, part_msg, total_nodes, uint32_t, FALSE);
 	return 0;
 }
diff --git a/contribs/phpext/Makefile.in b/contribs/phpext/Makefile.in
index 59dd79771..0ca5a5277 100644
--- a/contribs/phpext/Makefile.in
+++ b/contribs/phpext/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,6 +81,10 @@ 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@
diff --git a/contribs/phpext/slurm_php/slurm_php.c b/contribs/phpext/slurm_php/slurm_php.c
index 14e9690bd..d09b9fcd3 100644
--- a/contribs/phpext/slurm_php/slurm_php.c
+++ b/contribs/phpext/slurm_php/slurm_php.c
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/contribs/phpext/slurm_php/slurm_php.h b/contribs/phpext/slurm_php/slurm_php.h
index d857934ae..d3be22f8c 100644
--- a/contribs/phpext/slurm_php/slurm_php.h
+++ b/contribs/phpext/slurm_php/slurm_php.h
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/contribs/python/Makefile.in b/contribs/python/Makefile.in
index f1944ed81..0c7827d99 100644
--- a/contribs/python/Makefile.in
+++ b/contribs/python/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -89,6 +93,10 @@ 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@
diff --git a/contribs/python/hostlist/Makefile.in b/contribs/python/hostlist/Makefile.in
index 16b843e8d..bc62bece6 100644
--- a/contribs/python/hostlist/Makefile.in
+++ b/contribs/python/hostlist/Makefile.in
@@ -41,14 +41,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -90,6 +94,10 @@ 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@
diff --git a/contribs/python/hostlist/test/Makefile.in b/contribs/python/hostlist/test/Makefile.in
index 49426141d..a531d4c94 100644
--- a/contribs/python/hostlist/test/Makefile.in
+++ b/contribs/python/hostlist/test/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,6 +81,10 @@ 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@
diff --git a/contribs/skilling.c b/contribs/skilling.c
new file mode 100644
index 000000000..a6ff3b0de
--- /dev/null
+++ b/contribs/skilling.c
@@ -0,0 +1,125 @@
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Filename:  hilbert.c
+// 
+// Purpose:   Hilbert and Linked-list utility procedures for BayeSys3.
+// 
+// History:   TreeSys.c   17 Apr 1996 - 31 Dec 2002
+//            Peano.c     10 Apr 2001 - 11 Jan 2003
+//            merged       1 Feb 2003
+//            Arith debug 28 Aug 2003
+//            Hilbert.c   14 Oct 2003
+//                         2 Dec 2003
+//-----------------------------------------------------------------------------
+/*
+    Copyright (c) 1996-2003 Maximum Entropy Data Consultants Ltd,
+                            114c Milton Road, Cambridge CB4 1XE, England
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library 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
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+#include "license.txt"
+*/
+
+#include <stdio.h>
+typedef unsigned int coord_t; // char,short,int for up to 8,16,32 bits per word
+
+static void TransposetoAxes(
+coord_t* X,            // I O  position   [n]
+int      b,            // I    # bits
+int      n)            // I    dimension
+{
+    coord_t  M, P, Q, t;
+    int      i;
+
+// Gray decode by  H ^ (H/2)
+    t = X[n-1] >> 1;
+    for( i = n-1; i; i-- )
+        X[i] ^= X[i-1];
+    X[0] ^= t;
+
+// Undo excess work
+    M = 2 << (b - 1);
+    for( Q = 2; Q != M; Q <<= 1 )
+    {
+        P = Q - 1;
+        for( i = n-1; i; i-- )
+            if( X[i] & Q ) X[0] ^= P;                              // invert
+            else{ t = (X[0] ^ X[i]) & P;  X[0] ^= t;  X[i] ^= t; } // exchange
+        if( X[0] & Q ) X[0] ^= P;                                  // invert
+    }
+} 
+static void AxestoTranspose(
+coord_t* X,            // I O  position   [n]
+int      b,            // I    # bits
+int      n)            // I    dimension
+{
+    coord_t  P, Q, t;
+    int      i;
+
+// Inverse undo
+    for( Q = 1 << (b - 1); Q > 1; Q >>= 1 )
+    {
+        P = Q - 1;
+        if( X[0] & Q ) X[0] ^= P;                                  // invert
+        for( i = 1; i < n; i++ )
+            if( X[i] & Q ) X[0] ^= P;                              // invert
+            else{ t = (X[0] ^ X[i]) & P;  X[0] ^= t;  X[i] ^= t; } // exchange
+    }
+
+// Gray encode (inverse of decode)
+    for( i = 1; i < n; i++ )
+        X[i] ^= X[i-1];
+    t = X[n-1];
+    for( i = 1; i < b; i <<= 1 )
+        X[n-1] ^= X[n-1] >> i;
+    t ^= X[n-1];
+    for( i = n-2; i >= 0; i-- )
+        X[i] ^= t;
+}
+
+/* This is an sample use of Skilling's functions above.
+ * You will need to modify the code if the value of BITS or DIMS is changed.
+ * The the output of this can be used to order the node name entries in slurm.conf */
+#define BITS 5	/* number of bits used to store the axis values, size of Hilbert space */
+#define DIMS 3	/* number of dimensions in the Hilbert space */
+main(int argc, char **argv)
+{
+	int i, H;
+	coord_t X[DIMS]; // any position in 32x32x32 cube for BITS=5
+	if (argc != (DIMS + 1)) {
+		printf("Usage %s X Y Z\n", argv[0]);
+		exit(1);
+	}
+	for (i=0; i<DIMS; i++)
+		X[i] = atoi(argv[i+1]);
+	printf("Axis coordinates = %d %d %d\n", X[0], X[1], X[2]);
+
+	AxestoTranspose(X, BITS, DIMS); // Hilbert transpose for 5 bits and 3 dimensions
+	H = ((X[2]>>0 & 1) <<  0) + ((X[1]>>0 & 1) <<  1) + ((X[0]>>0 & 1) <<  2) +
+	    ((X[2]>>1 & 1) <<  3) + ((X[1]>>1 & 1) <<  4) + ((X[0]>>1 & 1) <<  5) +
+	    ((X[2]>>2 & 1) <<  6) + ((X[1]>>2 & 1) <<  7) + ((X[0]>>2 & 1) <<  8) +
+	    ((X[2]>>3 & 1) <<  9) + ((X[1]>>3 & 1) << 10) + ((X[0]>>3 & 1) << 11) +
+	    ((X[2]>>4 & 1) << 12) + ((X[1]>>4 & 1) << 13) + ((X[0]>>4 & 1) << 14);
+	printf("Hilbert integer  = %d (%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d)\n", H,
+		X[0]>>4 & 1, X[1]>>4 & 1, X[2]>>4 & 1, X[0]>>3 & 1, X[1]>>3 & 1,
+		X[2]>>3 & 1, X[0]>>2 & 1, X[1]>>2 & 1, X[2]>>2 & 1, X[0]>>1 & 1,
+		X[1]>>1 & 1, X[2]>>1 & 1, X[0]>>0 & 1, X[1]>>0 & 1, X[2]>>0 & 1);
+
+#if 0
+	/* Used for validation purposes */
+	TransposetoAxes(X, BITS, DIMS); // Hilbert transpose for 5 bits and 3 dimensions
+	printf("Axis coordinates = %d %d %d\n", X[0], X[1], X[2]);
+#endif
+}
+
diff --git a/contribs/slurmdb-direct/Makefile.in b/contribs/slurmdb-direct/Makefile.in
index 7ecb82e2d..7c9d9c9f4 100644
--- a/contribs/slurmdb-direct/Makefile.in
+++ b/contribs/slurmdb-direct/Makefile.in
@@ -44,14 +44,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -84,6 +88,10 @@ 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@
diff --git a/contribs/slurmdb-direct/moab_2_slurmdb.pl b/contribs/slurmdb-direct/moab_2_slurmdb.pl
index 650663efd..cef174b5b 100755
--- a/contribs/slurmdb-direct/moab_2_slurmdb.pl
+++ b/contribs/slurmdb-direct/moab_2_slurmdb.pl
@@ -159,6 +159,19 @@ foreach my $line (<STDIN>) {
 		$partition = $1;
 	}
 
+	# Only pick out a number at the beginning if it is something else 
+	# we should skip it and make comp_code 0.  If we want something 
+	# else just change it to whatever you would think would be best.  
+	# Dispite the Moab documentation the comp code could contain 
+	# characters like ,SID= afterwards,  without knowing what that means
+	# we just skip it.  We haven't seen a case where comp_code isn't an
+	# int at the first so the 0 "should" never happen.
+	if($comp_code =~ /^(\d+)/) {
+		$comp_code = $1;
+	} else {
+		$comp_code = 0;
+	}
+
 	#figure out the cluster
 	if($cluster eq "ALL") {
 		if ($node_features =~ /\[(\w*)\]/) {
diff --git a/contribs/time_login.c b/contribs/time_login.c
index 4c44f8d82..4c5321793 100644
--- a/contribs/time_login.c
+++ b/contribs/time_login.c
@@ -14,10 +14,11 @@
  *  Copyright (C) 2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/contribs/torque/Makefile.in b/contribs/torque/Makefile.in
index f5bcc752a..8a745decc 100644
--- a/contribs/torque/Makefile.in
+++ b/contribs/torque/Makefile.in
@@ -44,14 +44,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -84,6 +88,10 @@ 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@
diff --git a/contribs/torque/mpiexec.pl b/contribs/torque/mpiexec.pl
index 37614a7fa..badbd43d9 100755
--- a/contribs/torque/mpiexec.pl
+++ b/contribs/torque/mpiexec.pl
@@ -8,10 +8,11 @@
 #  Copyright (C) 2007 The Regents of the University of California.
 #  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 #  Written by Danny Auble <auble1@llnl.gov>.
-#  LLNL-CODE-402394.
+#  CODE-OCEC-09-009. All rights reserved.
 #  
 #  This file is part of SLURM, a resource management program.
-#  For details, see <http://www.llnl.gov/linux/slurm/>.
+#  For details, see <https://computing.llnl.gov/linux/slurm/>.
+#  Please also read the included file: DISCLAIMER.
 #  
 #  SLURM 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
diff --git a/contribs/torque/pbsnodes.pl b/contribs/torque/pbsnodes.pl
index f02637f06..3992f1a64 100755
--- a/contribs/torque/pbsnodes.pl
+++ b/contribs/torque/pbsnodes.pl
@@ -8,10 +8,11 @@
 #  Copyright (C) 2007 The Regents of the University of California.
 #  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 #  Written by Danny Auble <auble1@llnl.gov>.
-#  LLNL-CODE-402394.
+#  CODE-OCEC-09-009. All rights reserved.
 #  
 #  This file is part of SLURM, a resource management program.
-#  For details, see <http://www.llnl.gov/linux/slurm/>.
+#  For details, see <https://computing.llnl.gov/linux/slurm/>.
+#  Please also read the included file: DISCLAIMER.
 #  
 #  SLURM 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
diff --git a/contribs/torque/qdel.pl b/contribs/torque/qdel.pl
index 79d248706..49a991cc5 100755
--- a/contribs/torque/qdel.pl
+++ b/contribs/torque/qdel.pl
@@ -8,10 +8,11 @@
 #  Copyright (C) 2007 The Regents of the University of California.
 #  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 #  Written by Danny Auble <auble1@llnl.gov>.
-#  LLNL-CODE-402394.
+#  CODE-OCEC-09-009. All rights reserved.
 #  
 #  This file is part of SLURM, a resource management program.
-#  For details, see <http://www.llnl.gov/linux/slurm/>.
+#  For details, see <https://computing.llnl.gov/linux/slurm/>.
+#  Please also read the included file: DISCLAIMER.
 #  
 #  SLURM 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
diff --git a/contribs/torque/qhold.pl b/contribs/torque/qhold.pl
index 731a7c0c5..4d3e2d595 100755
--- a/contribs/torque/qhold.pl
+++ b/contribs/torque/qhold.pl
@@ -9,10 +9,11 @@
 #  Copyright (C) 2007 The Regents of the University of California.
 #  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 #  Written by Danny Auble <auble1@llnl.gov>.
-#  LLNL-CODE-402394.
+#  CODE-OCEC-09-009. All rights reserved.
 #  
 #  This file is part of SLURM, a resource management program.
-#  For details, see <http://www.llnl.gov/linux/slurm/>.
+#  For details, see <https://computing.llnl.gov/linux/slurm/>.
+#  Please also read the included file: DISCLAIMER.
 #  
 #  SLURM 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
diff --git a/contribs/torque/qrls.pl b/contribs/torque/qrls.pl
index fd24b29fb..8d44fef2b 100755
--- a/contribs/torque/qrls.pl
+++ b/contribs/torque/qrls.pl
@@ -8,10 +8,11 @@
 #  Copyright (C) 2007 The Regents of the University of California.
 #  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 #  Written by Danny Auble <auble1@llnl.gov>.
-#  LLNL-CODE-402394.
+#  CODE-OCEC-09-009. All rights reserved.
 #  
 #  This file is part of SLURM, a resource management program.
-#  For details, see <http://www.llnl.gov/linux/slurm/>.
+#  For details, see <https://computing.llnl.gov/linux/slurm/>.
+#  Please also read the included file: DISCLAIMER.
 #  
 #  SLURM 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
diff --git a/contribs/torque/qstat.pl b/contribs/torque/qstat.pl
index 7e302cba4..9a35c0ddc 100755
--- a/contribs/torque/qstat.pl
+++ b/contribs/torque/qstat.pl
@@ -8,10 +8,11 @@
 #  Copyright (C) 2007 The Regents of the University of California.
 #  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 #  Written by Danny Auble <auble1@llnl.gov>.
-#  LLNL-CODE-402394.
+#  CODE-OCEC-09-009. All rights reserved.
 #  
 #  This file is part of SLURM, a resource management program.
-#  For details, see <http://www.llnl.gov/linux/slurm/>.
+#  For details, see <https://computing.llnl.gov/linux/slurm/>.
+#  Please also read the included file: DISCLAIMER.
 #  
 #  SLURM 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
@@ -144,6 +145,32 @@ if(defined($queueList)) {
 		}	
 		$rc = 0;
 	}
+} elsif($queueStatus) {
+	my $jresp = Slurm->load_jobs(1);
+	die "Problem loading jobs.\n" if(!$jresp);
+	my $resp = Slurm->load_partitions(1);
+	die "Problem loading partitions.\n" if(!$resp);
+	my $total_running = 0;
+	my $total_queued = 0;
+	my $line = 0;
+	foreach my $part (@{$resp->{partition_array}}) {
+		$part->{'running_jobs'} = 0;
+		$part->{'queued_jobs'} = 0;
+		foreach my $job (@{$jresp->{job_array}}) {
+			next if($job->{'partition'} ne $part->{'name'});
+			$part->{'running_jobs'}++
+				if($job->{'job_state'} = JOB_RUNNING);
+			$part->{'queued_jobs'}++
+				if($job->{'job_state'} = JOB_PENDING);
+		}
+		$total_running += $part->{'running_jobs'};
+		$total_queued += $part->{'queued_jobs'};
+		print_part_limits($part, $line);
+		$line++;
+        }
+	printf("                                               ----- -----\n");
+	printf("                                               %5d %5d\n",
+	       $total_running, $total_queued);
 } else {
 	my @jobIds = @ARGV;
 	my @userIds = split(/,/, $userList) if $userList;
@@ -360,6 +387,20 @@ sub yes_no
 	return "no";
 }
 
+sub en_dis
+{
+	my ($query) = @_;
+	return "E" if $query;
+	return "D";
+}
+
+sub running_stopped
+{
+	my ($query) = @_;
+	return "R" if $query;
+	return "S";
+}
+
 sub get_exec_host 
 {
 	my ($job) = @_;
@@ -510,17 +551,18 @@ sub print_part_brief
 	my ($part, $line_num) = @_;
 
 	if(!$line_num) {
-		printf("%-16s %5s %5s %5s %5s %5s %5s %5s %5s %5s %5s %1s\n\n",
+		printf("%-16s %5s %5s %5s %5s %5s %5s %5s %5s %5s %5s %1s\n",
 		       "Queue", "Max", "Tot", "Ena",  "Str", "Que", "Run",
 		       "Hld", "Wat", "Trn", "Ext", "T");
-		printf("%-16s %5s %5s %5s %5s %5s %5s %5s %5s %5s %5s %1s\n\n",
+		printf("%-16s %5s %5s %5s %5s %5s %5s %5s %5s %5s %5s %1s\n",
 		       "----------------", "---", "---", "---",  "---", "---", 
 		       "---", "---", "---", "---", "---", "-");
 	}
 	printf("%-16.16s %5.5s %5.5s %5.5s %5.5s %5.5s %5.5s %5.5s " .
 	       "%5.5s %5.5s %5.5s %1.1s\n",
 	       $part->{'name'}, '?', '?', yes_no($part->{'state_up'}),
-	       yes_no($part->{'state_up'}), '?', '?', '?', '?', '?', '?', 'E');
+	       yes_no($part->{'state_up'}), '?', '?', '?', '?', '?', '?',
+	       en_dis($part->{'state_up'}));
 }
 
 sub print_part_full
@@ -538,6 +580,40 @@ sub print_part_full
 	print "\n";
 }
 
+sub print_part_limits 
+{
+	my ($part, $line_num) = @_;
+
+	if(!$line_num) {
+		printf("%-16s %6s %8s %8s %4s  %3s %3s %2s %5s\n",
+		       "Queue", "Memory", "CPU Time", "Walltime",
+		       "Node", "Run", "Que", "Lm", "State");
+		printf("%-16s %6s %8s %8s %4s  %3s %3s %2s %5s\n",
+		       "----------------", "------", "--------", "--------",
+		       "----", "---", "---", "--", "-----");
+	}
+
+	
+	printf("%-16.16s   --      --    ", $part->{'name'});
+	if($part->{'max_time'} != INFINITE) {
+		printf("%8u ", $part->{'max_time'});
+	} else {
+		printf("   --    ");
+		
+	}
+
+	if($part->{'max_nodes'} != INFINITE) {
+		printf("%4u  ", $part->{'max_nodes'});
+	} else {
+		printf("  --  ");
+	}
+
+	printf("%3u %3u --  %1.1s %1.1s \n", $part->{'running_jobs'},
+	       $part->{'queued_jobs'}, en_dis($part->{'state_up'}),
+	       running_stopped($part->{'state_up'}));
+}
+
+
 ##############################################################################
 
 __END__
@@ -550,6 +626,10 @@ B<qstat> - display job/partition information in a familiar pbs format
 
 B<qstat> [B<-f>] [B<-a>|B<-i>|B<-r>] [B<-n> [B<-1>]] [B<-G>|B<-M>] [B<-u> I<user_list>] [B<-? | --help>] [B<--man>] [I<job_id>...]
 
+B<qstat> -Q [-f]
+
+B<qstat> -q
+
 =head1 DESCRIPTION
 
 The B<qstat> command displays information about jobs.
diff --git a/contribs/torque/qsub.pl b/contribs/torque/qsub.pl
index cee2d06d9..ff800bfb0 100755
--- a/contribs/torque/qsub.pl
+++ b/contribs/torque/qsub.pl
@@ -8,10 +8,11 @@
 #  Copyright (C) 2007 The Regents of the University of California.
 #  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 #  Written by Danny Auble <auble1@llnl.gov>.
-#  LLNL-CODE-402394.
+#  CODE-OCEC-09-009. All rights reserved.
 #  
 #  This file is part of SLURM, a resource management program.
-#  For details, see <http://www.llnl.gov/linux/slurm/>.
+#  For details, see <https://computing.llnl.gov/linux/slurm/>.
+#  Please also read the included file: DISCLAIMER.
 #  
 #  SLURM 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
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 1564fa7ec..a165a62f6 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -89,6 +93,10 @@ 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@
diff --git a/doc/html/AllocationPies.gif b/doc/html/AllocationPies.gif
new file mode 100644
index 0000000000000000000000000000000000000000..8ee39222f5c76cba6a0299be89510fc1280d6ec4
GIT binary patch
literal 25681
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
CPj&VH

literal 0
HcmV?d00001

diff --git a/doc/html/ExampleUsage.gif b/doc/html/ExampleUsage.gif
new file mode 100644
index 0000000000000000000000000000000000000000..692cd5a125c7b56d8937b42f0caadfba0225fd44
GIT binary patch
literal 33966
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
Y$|fnf)Baf5x$CmquDkETJ8nP#J2<%(2LJ#7

literal 0
HcmV?d00001

diff --git a/doc/html/Makefile.am b/doc/html/Makefile.am
index c8c30c466..30416c246 100644
--- a/doc/html/Makefile.am
+++ b/doc/html/Makefile.am
@@ -7,9 +7,11 @@ generated_html = \
 	authplugins.html \
 	big_sys.html \
 	bluegene.html \
+	checkpoint_blcr.html \
 	checkpoint_plugins.html \
 	cons_res.html \
 	cons_res_share.html \
+	cray.html \
 	crypto_plugins.html \
 	dist_plane.html \
 	documentation.html \
@@ -18,6 +20,8 @@ generated_html = \
 	gang_scheduling.html \
 	help.html \
 	ibm.html \
+	priority_multifactor.html \
+	priority_plugins.html \
 	jobacct_gatherplugins.html \
 	accounting_storageplugins.html \
 	jobcompplugins.html \
@@ -25,6 +29,7 @@ generated_html = \
 	maui.html \
 	mc_support.html \
 	moab.html \
+	mpi_guide.html \
 	mpiplugins.html \
 	news.html \
 	overview.html \
@@ -33,25 +38,34 @@ generated_html = \
 	power_save.html \
 	preempt.html \
 	proctrack_plugins.html \
+	priority_multifactor.html \
+	priority_plugins.html \
 	programmer_guide.html \
 	publications.html \
 	quickstart_admin.html \
 	quickstart.html \
+	reservations.html \
+	resource_limits.html \
 	schedplugins.html \
 	selectplugins.html \
 	slurm.html \
+	sun_const.html \
 	switchplugins.html \
 	taskplugins.html \
 	team.html \
 	testimonials.html \
+	topology.html \
+	topology_plugin.html \
 	troubleshoot.html
 
 html_DATA = \
 	${generated_html} \
+	AllocationPies.gif \
 	arch.gif \
 	configurator.html \
 	coding_style.pdf \
 	entities.gif \
+	ExampleUsage.gif \
 	lci.7.tutorial.pdf \
 	lll.gif \
 	mc_support.gif \
@@ -66,7 +80,10 @@ html_DATA = \
 	slurm_design.pdf \
 	slurmstyles.css \
 	sponsors.gif \
-	linuxstyles.css
+	topo_ex1.gif \
+	topo_ex2.gif \
+	linuxstyles.css \
+	UsagePies.gif
 
 MOSTLYCLEANFILES = ${generated_html}
 
diff --git a/doc/html/Makefile.in b/doc/html/Makefile.in
index fc5184132..67defa3e1 100644
--- a/doc/html/Makefile.in
+++ b/doc/html/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -88,6 +92,10 @@ 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@
@@ -253,9 +261,11 @@ generated_html = \
 	authplugins.html \
 	big_sys.html \
 	bluegene.html \
+	checkpoint_blcr.html \
 	checkpoint_plugins.html \
 	cons_res.html \
 	cons_res_share.html \
+	cray.html \
 	crypto_plugins.html \
 	dist_plane.html \
 	documentation.html \
@@ -264,6 +274,8 @@ generated_html = \
 	gang_scheduling.html \
 	help.html \
 	ibm.html \
+	priority_multifactor.html \
+	priority_plugins.html \
 	jobacct_gatherplugins.html \
 	accounting_storageplugins.html \
 	jobcompplugins.html \
@@ -271,6 +283,7 @@ generated_html = \
 	maui.html \
 	mc_support.html \
 	moab.html \
+	mpi_guide.html \
 	mpiplugins.html \
 	news.html \
 	overview.html \
@@ -279,25 +292,34 @@ generated_html = \
 	power_save.html \
 	preempt.html \
 	proctrack_plugins.html \
+	priority_multifactor.html \
+	priority_plugins.html \
 	programmer_guide.html \
 	publications.html \
 	quickstart_admin.html \
 	quickstart.html \
+	reservations.html \
+	resource_limits.html \
 	schedplugins.html \
 	selectplugins.html \
 	slurm.html \
+	sun_const.html \
 	switchplugins.html \
 	taskplugins.html \
 	team.html \
 	testimonials.html \
+	topology.html \
+	topology_plugin.html \
 	troubleshoot.html
 
 html_DATA = \
 	${generated_html} \
+	AllocationPies.gif \
 	arch.gif \
 	configurator.html \
 	coding_style.pdf \
 	entities.gif \
+	ExampleUsage.gif \
 	lci.7.tutorial.pdf \
 	lll.gif \
 	mc_support.gif \
@@ -312,7 +334,10 @@ html_DATA = \
 	slurm_design.pdf \
 	slurmstyles.css \
 	sponsors.gif \
-	linuxstyles.css
+	topo_ex1.gif \
+	topo_ex2.gif \
+	linuxstyles.css \
+	UsagePies.gif
 
 MOSTLYCLEANFILES = ${generated_html}
 EXTRA_DIST = $(html_DATA)
diff --git a/doc/html/UsagePies.gif b/doc/html/UsagePies.gif
new file mode 100644
index 0000000000000000000000000000000000000000..512e08363d46835f5724cb16aaba58e8923b98ee
GIT binary patch
literal 24376
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%0A2@`=0sD+&2#q_yERlXXO%)@*#QgKVR_(
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
DGbqFd

literal 0
HcmV?d00001

diff --git a/doc/html/accounting.shtml b/doc/html/accounting.shtml
index c860b34c3..b1c1031a3 100644
--- a/doc/html/accounting.shtml
+++ b/doc/html/accounting.shtml
@@ -631,7 +631,6 @@ If the cluster doesn't have the limit set no limit will be enforced.
 
 <li><b>QOS=</b> comma separated list of QOS's this association is
   able to run.
-
 </li>
 </ul>
 
diff --git a/doc/html/accounting_storageplugins.shtml b/doc/html/accounting_storageplugins.shtml
index 2423c6955..7bdac1ae5 100644
--- a/doc/html/accounting_storageplugins.shtml
+++ b/doc/html/accounting_storageplugins.shtml
@@ -11,7 +11,7 @@ their own SLURM Job Accounting Storage plugins. This is version 1 of the API.
 SLURM Plugin API with the following specifications:
 
 <p><span class="commandline">const char
-plugin_name[]="<i>full&nbsp;text&nbsp;name</i>"
+plugin_name[]="<i>full&nbsp;text&nbsp;name</i>"</span>
 <p style="margin-left:.2in">
 A free-formatted ASCII text string that identifies the plugin.
 
@@ -58,7 +58,7 @@ acct_storage_p_get_connection() is called to get a connection to the
 <span class="commandline">make_agent</span> (input) to make an agent
 thread of not.  This is primarily used in the slurmdbd plugin.<br>
 <span class="commandline">conn_num</span> (input) connection number to
-the plugin.  In many cases you should plan on multiple simultanious
+the plugin.  In many cases you should plan on multiple simultaneous
 connections to the plugin.  This number is useful since the debug
 messages can print this out to determine which connection the message
 is from.<br>
@@ -77,7 +77,7 @@ the storage type.
 <p style="margin-left:.2in"><b>Arguments</b>: <br>
 <span class="commandline">db_conn</span> (input/output) connection to
 the storage type, all memory will be freed inside this function and
-NULLed out. 
+set to NULL. 
 <p style="margin-left:.2in"><b>Returns</b>: <br>
 <span class="commandline">SLURM_SUCCESS</span> on success, or<br>
 <span class="commandline">SLURM_ERROR</span> on failure.
@@ -198,12 +198,25 @@ acct_wckey_rec_t *'s containing information about the wckeys to add. <br>
 <span class="commandline">SLURM_SUCCESS</span> on success, or<br>
 <span class="commandline">SLURM_ERROR</span> on failure.
 
+<p class="commandline">
+int acct_storage_p_add_reservation(void *db_conn,
+acct_reservation_rec_t *resv)
+<p style="margin-left:.2in"><b>Description</b>:<br>
+Called to add reservations to the storage type.
+<p style="margin-left:.2in"><b>Arguments</b>: <br>
+<span class="commandline">db_conn</span> (input) connection to
+the storage type. <br>
+<span class="commandline">resv</span> (input) Reservation to be added. <br>
+<p style="margin-left:.2in"><b>Returns</b>: <br>
+<span class="commandline">SLURM_SUCCESS</span> on success, or<br>
+<span class="commandline">SLURM_ERROR</span> on failure.
+
 <p class="commandline">
 List acct_storage_p_modify_users(void *db_conn, uint32_t uid,
 acct_user_cond_t *user_cond, acct_user_rec_t *user)
 <p style="margin-left:.2in"><b>Description</b>:<br>
 Used to modify existing users in the storage type.  The condition
-  could include very vaque information about the user, so this
+  could include very vague information about the user, so this
   function should be robust in the ability to give everything the user
   is asking for.  This is the reason a list of modified users is
   returned so the caller knows what has been changed, sometimes by mistake.
@@ -225,7 +238,7 @@ List acct_storage_p_modify_accounts(void *db_conn, uint32_t uid,
 acct_account_cond_t *acct_cond, acct_account_rec_t *acct)
 <p style="margin-left:.2in"><b>Description</b>:<br>
 Used to modify existing accounts in the storage type.  The condition
-  could include very vaque information about the account, so this
+  could include very vague information about the account, so this
   function should be robust in the ability to give everything the account
   is asking for.  This is the reason a list of modified accounts is
   returned so the caller knows what has been changed, sometimes by mistake.
@@ -247,7 +260,7 @@ List acct_storage_p_modify_clusters(void *db_conn, uint32_t uid,
 acct_cluster_cond_t *cluster_cond, acct_cluster_rec_t *cluster)
 <p style="margin-left:.2in"><b>Description</b>:<br>
 Used to modify existing clusters in the storage type.  The condition
-  could include very vaque information about the cluster, so this
+  could include very vague information about the cluster, so this
   function should be robust in the ability to give everything the cluster
   is asking for.  This is the reason a list of modified clusters is
   returned so the caller knows what has been changed, sometimes by mistake.
@@ -269,7 +282,7 @@ List acct_storage_p_modify_associations(void *db_conn, uint32_t uid,
 acct_association_cond_t *assoc_cond, acct_association_rec_t *assoc)
 <p style="margin-left:.2in"><b>Description</b>:<br>
 Used to modify existing associations in the storage type.  The condition
-  could include very vaque information about the association, so this
+  could include very vague information about the association, so this
   function should be robust in the ability to give everything the association
   is asking for.  This is the reason a list of modified associations is
   returned so the caller knows what has been changed, sometimes by mistake.
@@ -291,7 +304,7 @@ List acct_storage_p_modify_qos(void *db_conn, uint32_t uid,
 acct_qos_cond_t *qos_cond, acct_qos_rec_t *qos)
 <p style="margin-left:.2in"><b>Description</b>:<br>
 Used to modify existing qos in the storage type.  The condition
-  could include very vaque information about the qos, so this
+  could include very vague information about the qos, so this
   function should be robust in the ability to give everything the qos
   is asking for.  This is the reason a list of modified qos is
   returned so the caller knows what has been changed, sometimes by mistake.
@@ -313,7 +326,7 @@ List acct_storage_p_modify_wckeys(void *db_conn, uint32_t uid,
 acct_wckey_cond_t *wckey_cond, acct_wckey_rec_t *wckey)
 <p style="margin-left:.2in"><b>Description</b>:<br>
 Used to modify existing wckeys in the storage type.  The condition
-  could include very vaque information about the wckeys, so this
+  could include very vague information about the wckeys, so this
   function should be robust in the ability to give everything the wckey
   is asking for.  This is the reason a list of modified wckey is
   returned so the caller knows what has been changed, sometimes by mistake.
@@ -330,6 +343,20 @@ should be on the wckey identified by the conditional.<br>
 modified on success, or<br>
 <span class="commandline">NULL</span> on failure.
 
+<p class="commandline">
+int acct_storage_p_modify_reservation(void *db_conn,
+acct_reservation_rec_t *resv)
+<p style="margin-left:.2in"><b>Description</b>:<br>
+Called to modify reservations in the storage type.
+<p style="margin-left:.2in"><b>Arguments</b>: <br>
+<span class="commandline">db_conn</span> (input) connection to
+the storage type. <br>
+<span class="commandline">resv</span> (input) Reservation to be
+modified (id) must be set in the structure. <br>
+<p style="margin-left:.2in"><b>Returns</b>: <br>
+<span class="commandline">SLURM_SUCCESS</span> on success, or<br>
+<span class="commandline">SLURM_ERROR</span> on failure.
+
 <p class="commandline">
 List acct_storage_p_remove_users(void *db_conn, uint32_t uid,
 acct_user_cond_t *user_cond)
@@ -453,6 +480,20 @@ which wckeys to be removed.  Wckey names should not need to be stated.<br>
 removed on success, or<br>
 <span class="commandline">NULL</span> on failure.
 
+<p class="commandline">
+int acct_storage_p_remove_reservation(void *db_conn,
+acct_reservation_rec_t *resv)
+<p style="margin-left:.2in"><b>Description</b>:<br>
+Called to remove reservations in the storage type.
+<p style="margin-left:.2in"><b>Arguments</b>: <br>
+<span class="commandline">db_conn</span> (input) connection to
+the storage type. <br>
+<span class="commandline">resv</span> (input) Reservation to be
+removed (id) must be set in the structure. <br>
+<p style="margin-left:.2in"><b>Returns</b>: <br>
+<span class="commandline">SLURM_SUCCESS</span> on success, or<br>
+<span class="commandline">SLURM_ERROR</span> on failure.
+
 <p class="commandline">
 List acct_storage_p_get_users(void *db_conn, uint32_t uid,
 acct_user_cond_t *user_cond)
@@ -471,7 +512,7 @@ be stated.<br>
 on success, or<br>
 <span class="commandline">NULL</span> on failure.
 
-		<p class="commandline">
+<p class="commandline">
 List acct_storage_p_get_accts(void *db_conn, uint32_t uid,
 acct_account_cond_t *acct_cond)
 <p style="margin-left:.2in"><b>Description</b>:<br>
@@ -590,7 +631,7 @@ the storage type.<br>
 <span class="commandline">uid</span> (input) uid of user calling the
 function.<br> 
 <span class="commandline">in</span> (input/out) can be anything that
-gathers usage like acct_associaiton_rec_t * or acct_wckey_rec_t *.<br> 
+gathers usage like acct_association_rec_t * or acct_wckey_rec_t *.<br> 
 <span class="commandline">type</span> (input) really
 slurmdbd_msg_type_t should let the plugin know what the structure is
 that was sent in some how.<br> 
@@ -650,13 +691,15 @@ structure marked up.<br>
 
 <p class="commandline">
 int clusteracct_storage_p_cluster_procs(void *db_conn, char *cluster,
-uint32_t procs, time_t event_time)
+char *cluster_nodes, uint32_t procs, time_t event_time)
 <p style="margin-left:.2in"><b>Description</b>:<br>
 Update storage type with the current number of processors on a given cluster.
 <p style="margin-left:.2in"><b>Arguments</b>: <br>
 <span class="commandline">db_conn</span> (input) connection to
 the storage type. <br>
 <span class="commandline">cluster</span> (input) name of cluster.<br>
+<span class="commandline">cluster_nodes</span> (input) ranged list of
+nodes on system.<br>
 <span class="commandline">procs</span> (input) number of processors on
 system.<br>
 <span class="commandline">event_time</span> (input) time event happened.<br>
@@ -867,7 +910,7 @@ database with.
 <dt><span class="commandline">AccountingStoragePass</span>
 <dd>Let the plugin know the password of the user connecting to the database.
 <dt><span class="commandline">AccountingStorageEnforce</span>
-<dd>Specifies if we should enforce certain things be in existance
+<dd>Specifies if we should enforce certain things be in existence
   before allowing job submissions and such valid options are
   "associations, limits, and wckeys". You can use any combination of
   those listed.
@@ -880,6 +923,6 @@ ability to implement a particular API version using the mechanism outlined
 for SLURM plugins.
 <p class="footer"><a href="#top">top</a>
 
-<p style="text-align:center;">Last modified 10 February 2009</p>
+<p style="text-align:center;">Last modified 2 March 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/api.shtml b/doc/html/api.shtml
index 3742713a0..68d83d0b0 100644
--- a/doc/html/api.shtml
+++ b/doc/html/api.shtml
@@ -1,9 +1,9 @@
 <!--#include virtual="header.txt"-->
 
-<h2><a name="top">SLURM Switch Plugin API</a></h2>
+<h2><a name="top">SLURM APIs</a></h2>
 
 <h3>Overview</h3>
-<p>All of the SLURM commands utilize a collection of Application Progamming 
+<p>All of the SLURM commands utilize a collection of Application Programming 
 Interfaces (APIs). 
 User and system applications can directly use these APIs as desired to 
 achieve tighter integration with SLURM.
@@ -207,7 +207,7 @@ created by <i>slurm_step_ctx_create</i>.</li>
 <li><b>slurm_jobinfo_ctx_get</b>&#151;Get values from a <i>jobinfo</i>
 field as returned by <i>slurm_step_ctx_get</i>.</li>
 
-<li><b>slurm_spawn</b>&#151;Spawn tasks and establish communcations.</li>
+<li><b>slurm_spawn</b>&#151;Spawn tasks and establish communications.</li>
 
 <li><b>slurm_spawn_kill</b>&#151;Signal spawned tasks.</li>
 
@@ -243,7 +243,7 @@ job step.</li>
 <ul>
 
 <li><b>slurm_checkpoint_able</b>&#151;Note that a specific job or 
-job step is elligible for checkpoint.</li>
+job step is eligible for checkpoint.</li>
 
 <li><b>slurm_checkpoint_complete</b>&#151;Note that a requested 
 checkpoint has completed.</li>
@@ -273,7 +273,7 @@ checkpointed job resume execution.</li>
 
 
 <h3>Administrative Functions</h3>
-<p>Most of these functions can only be exected by user <i>root</i>.</p>
+<p>Most of these functions can only be executed by user <i>root</i>.</p>
 <ul>
 
 <li><b>slurm_reconfigure</b>&#151;Update slurm daemons 
@@ -326,6 +326,6 @@ allocated by <i>slurm_hostlist_create</i>.
 </ul>
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 25 October 2005</p>
+<p style="text-align:center;">Last modified 13 November 2005</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/authplugins.shtml b/doc/html/authplugins.shtml
index ff5accf67..8d04e00f8 100644
--- a/doc/html/authplugins.shtml
+++ b/doc/html/authplugins.shtml
@@ -17,8 +17,8 @@ abbreviation for the type of authentication. We recommend, for example:</p>
 authentication service. This may be used for testing purposes, but is not suitable for 
 production use due to lack of effective security.</li>
 <li><b>authd</b>&#151;Brett Chun's Linux authd.</li>
-<li><b>munge</b>&#151;LLNL's munge protocol (recommended plugin for production use).</li>
-<li><b>krb5</b>&#151;Kerberos 5 (not implemented as of 8 June 2004).</li>
+<li><b>munge</b>&#151;LLNL's Munge protocol (recommended plugin for production use).</li>
+<li><b>krb5</b>&#151;Kerberos 5 (expected to be available in 2009).</li>
 </ul>
 <p>The <span class="commandline">plugin_name</span> and <span class="commandline">plugin_version</span> 
 symbols required by the SLURM Plugin API require no specialization for authentication. 
diff --git a/doc/html/big_sys.shtml b/doc/html/big_sys.shtml
index b33a9e915..23f11c18a 100644
--- a/doc/html/big_sys.shtml
+++ b/doc/html/big_sys.shtml
@@ -13,7 +13,7 @@ for this material.</p>
 
 <h2>Performance Results</h2>
 
-<p>SLURM has acutally been used on clusters containing up to 4,184 nodes. 
+<p>SLURM has been used on clusters containing up to 4,184 nodes. 
 At that scale, the total time to execute a simple program (resource 
 allocation, task launch, I/O processing, and cleanup, e.g. 
 "time srun -N4184 -n8368 uname") at 8,368 tasks 
diff --git a/doc/html/bluegene.shtml b/doc/html/bluegene.shtml
index 799cbde1a..d01449dce 100644
--- a/doc/html/bluegene.shtml
+++ b/doc/html/bluegene.shtml
@@ -90,20 +90,20 @@ configured with <i>small blocks</i> (any block less than a full base partition)
 into the base partition notation.  For example, if there were 64 psets in the
 configuration, bg012[0-15] represents
 the first quarter or first 16 ionodes of a midplane.  In BlueGene/L
-this would be 128 c-node block.  To represent the first nodecar in the
+this would be 128 c-node block.  To represent the first nodecard in the
 second quarter or ionodes 16-19 the notation would be bg012[16-19], or
 a 32 c-node block.
 Since jobs must allocate consecutive base partitions in all three dimensions, we have developed 
 an abbreviated format for describing the base partitions in one of these three-dimensional blocks. 
 The base partition has a prefix determined from the system which is followed by the end-points 
-of the block enclosed in square-brackets. 
+of the block enclosed in square-brackets and separated by an "x".
 For example, "bg[620x731]" is used to represent the eight base partitions enclosed in a block 
-with endpoints bg620 and bg731 (bg620, bg621, bg630, bg631, bg720, bg721, 
+with end-points and bg620 and bg731 (bg620, bg621, bg630, bg631, bg720, bg721, 
 bg730 and bg731).</p></a>
 
 <p>
-<b>IMPORTANT:</b> As of SLURM version 1.2 SLURM can handle a bluegene
-system of size 36x36x36.  To try to keep with the 'three-digit suffix  
+<b>IMPORTANT:</b> SLURM version 1.2 or higher can handle a bluegene system of 
+sizes up to 36x36x36.  To try to keep with the 'three-digit suffix  
 representing the its coordinates in the X, Y and Z dimensions with a
 zero origin', we now support A-Z as valid numbers.  This makes it so
 the prefix <b>must always be lower case</b>, and any letters in the 
@@ -120,7 +120,7 @@ invalid: BGL[000xC44] BglC00 bglb00 Bglzzz
 </p>
 
 <p>One new tool provided is <i>smap</i>. 
-As of SLURM verison 1.2, <i>sview</i> is
+As of SLURM version 1.2, <i>sview</i> is
 another new tool offering even more viewing and configuring options.
 Smap is aware of system topography and provides a map of what base partitions 
 are allocated to jobs, partitions, etc. 
@@ -215,7 +215,7 @@ calls only available on the SN.</p>
 to configure and build two sets of files for installation. 
 One set will be for the Service Node (SN), which has direct access to the 
 Bridge APIs. 
-The second set will be for the Front End Nodes (FEN), whick lack access to the 
+The second set will be for the Front End Nodes (FEN), which lack access to the 
 Bridge APIs and interact with using Remote Procedure Calls to the slurmctld 
 daemon.
 You should see "#define HAVE_BG 1" and "#define HAVE_FRONT_END 1" in the "config.h" 
@@ -264,7 +264,7 @@ etc.).  Sample prolog and epilog scripts follow. </p>
 #
 # Cancel job to start the termination process for this job
 # and release the bgblock
-/usr/bin/scancel $SLURM_JOBID
+/usr/bin/scancel $SLURM_JOB_ID
 #
 # Wait for bgblock to be released from this job's use
 /usr/sbin/slurm_epilog
@@ -317,7 +317,7 @@ so as to maximize its performance and minimize other risk factors.</p>
 
 <a name="bluegene-conf"><h2>Bluegene.conf File Creation</h2></a>
 <p>In addition to the normal <i>slurm.conf</i> file, a new 
-<i>bluegene.conf</i> configuration file is required with information pertainate 
+<i>bluegene.conf</i> configuration file is required with information pertinent 
 to the sytem.
 Put <i>bluegene.conf</i> into the SLURM configuration directory with
 <i>slurm.conf</i>.
@@ -372,18 +372,18 @@ Dynamic partitioning was developed primarily for smaller BlueGene systems,
 but can be used on larger systems.
 Dynamic partitioning may introduce fragmentation of resources.
 This fragementaiton may be severe since SLURM will run a job anywhere 
-resources are avaliable with little thought of the future.  
+resources are available with little thought of the future.  
 As with overlap partitioning, <b>use dynamic partitioning with 
 caution!</b>  
 This mode can result in job starvation since smaller jobs will run 
-if resources are avaliable and prevent larger jobs from running.
+if resources are available and prevent larger jobs from running.
 Bgblocks need not be assigned in the <i>bluegene.conf</i> file 
 for this mode.</p>
 
 <p>Blocks can be freed or set in an error state with scontrol,
 (i.e. "<i>scontrol update BlockName=RMP0 state=error</i>").
 This will end any job on the block and set the state of the block to ERROR
-making it so no job will run on the block.  To set it back to a usuable 
+making it so no job will run on the block.  To set it back to a useable 
 state set the state to free (i.e. 
 "<i>scontrol update BlockName=RMP0 state=free</i>"). 
 
@@ -393,7 +393,7 @@ need, you can set a set of ionodes into an error state with scontrol,
 (i.e. "<i>scontrol update subbpname=bg000[0-3] state=error</i>").
 This will end any job on the nodes listed, create a block there, and set 
 the state of the block to ERROR making it so no job will run on the
-block.  To set it back to a usuable state set the state to free (i.e. 
+block.  To set it back to a useable state set the state to free (i.e. 
 "<i>scontrol update BlockName=RMP0 state=free</i>" or
  "<i>scontrol update subbpname=bg000[0-3] state=free</i>"). This is
  helpful to allow other jobs to run on the unaffected nodes in
@@ -464,6 +464,8 @@ A sample <i>bluegene.conf</i> file is shown below.
 #                    2: Log level 1 and basic debug messages
 #                    3: Log level 2 and more debug message
 #                    4: Log all messages
+# DenyPassthrough:   Prevents use of passthrough ports in specific
+#                    dimensions, X, Y, and/or Z, plus ALL
 #
 # NOTE: The bgl_serial value is set at configuration time using the 
 #       "--with-bgl-serial=" option. Its default value is "BGL".
@@ -501,6 +503,8 @@ NumPsets=64	# An I/O rich environment
 BridgeAPILogFile=/var/log/slurm/bridgeapi.log
 BridgeAPIVerbose=0
 
+#DenyPassthrough=X,Y,Z
+
 ###############################################################################
 # Define the static/overlap partitions (bgblocks)
 #
diff --git a/doc/html/checkpoint_blcr.shtml b/doc/html/checkpoint_blcr.shtml
new file mode 100644
index 000000000..83835e140
--- /dev/null
+++ b/doc/html/checkpoint_blcr.shtml
@@ -0,0 +1,166 @@
+<!--#include virtual="header.txt"-->
+
+<h1><a name="top">SLURM Checkpoint/Restart with BLCR</a></h1>
+
+<h2>Overview</h2>
+<p>SLURM version 2.0 has been integrated with 
+<a href="https://ftg.lbl.gov/CheckpointRestart/CheckpointRestart.shtml">
+Berkeley Lab Checkpoint/Restart (BLCR)</a> in order to provide automatic
+job checkpoint/restart support.
+Functionality provided includes:
+<ol>
+<li>Checkpoint of whole batch jobs in addition to job steps</li>
+<li>Periodic checkpoint of batch jobs and job steps</li>
+<li>Restart execution of batch jobs and job steps from checkpoint files</li>
+<li>Automatically  requeue and restart the execution of batch jobs upon 
+node failure</li>
+</ol></p>
+
+<h2>User Commands</h2>
+
+<p>The following documents SLURM changes specific to BLCR support.
+Baic familiarity with SLURM commands is assumed.</p>
+
+<h3>srun</h3>
+
+<p>Several options have been added to support checkpoint restart:</p>
+<ul>
+<li><b>--checkpoint</b>: Specify the interval between periodic checkpoint
+of a job step, in seconds</li>
+<li><b>--checkpoint-dir</b>:Specify the directory when the checkpoint image
+files of a job step will be stored.
+The default value is the current working directory.
+Checkpoint files will be of the form <i>"&lt;job_id&gt;.ckpt"</i> for jobs
+and <i>"&lt;job_id&gt;.&lt;step_id&gt;.ckpt"</i> for job steps.</li>
+<li><b>--restart-dir</b>: Specify the directory when the checkpoint image
+files of a job step will be read from</li>
+</li>
+</ul>
+
+<p>Environment variables are available for all of these options:</p>
+<ul>
+<li<b>SLURM_CHECKPOINT</b> is equivalent to <b>--checkpoint</b>:</li>
+<li><b>SLURM_CHECKPOINT_DIR</b> is equivalent to <b>--checkpoint-dir</b></li>
+<li><b>SLURM_RESTART_DIR</b> is equivalent to <b>--restart-dir</b></li>
+</li>
+</ul>
+<p>The environment variable <b>SLURM_SRUN_CR_SOCKET</b> is used for job step 
+logic to interact with the <b>srun_cr</b> command.</p>
+
+<h3>srun_cr</h3>
+
+<p>This is a wrapper program for use with SLURM's <b>checkpoint/blcr</b>
+plugin to checkpoint/restart tasks launched by srun.
+The design of <b>srun_cr</b> is inspired by <b>mpiexec_cr</b> from MVAPICH2 and
+<b>cr_restart</b> form BLCR.
+It is a wrapper around the <b>srun</b> command to enable batch job 
+checkpoint/restart support when used with SLURM's <b>checkpoint/blcr</b> plugin.
+
+<p>The <b>srun_cr</b> execute line options are identical to those of the 
+<b>srun</b> command.
+See "man srun" for details.</p>
+
+<p>After initialization, <b>srun_cr</b> registers a thread context callback
+function.
+Then it forks a process and executes "cr_run --omit srun" with its arguments.
+<b>cr_run</b> is employed to exclude the <b>srun</b> process from being dumped 
+upon checkpoint.
+All catchable signals except SIGCHLD sent to <b>srun_cr</b> will be forwarded 
+to the child <b>srun</b> process.
+SIGCHLD will be captured to mimic the exit status of <b>srun</b> when it exits.
+Then <b>srun_cr</b> loops waiting for termination of tasks being launched 
+from <b>srun</b>.</p>
+
+<p>The step launch logic of SLURM is augmented to check if <b>srun</b> is 
+running under <b>srun_cr</b>.
+If true, the environment variable <b>SURN_SRUN_CR_SOCKET</b> should be present,
+the value of which is the address of a Unix domain socket created and listened
+to be <b>srun_cr</b>.
+After launching the tasks, <b>srun</b> tires to connect to the socket and sends
+the job ID, step ID and the nodes allocated to the step to <b>srun_cr</b>.</p>
+
+<p>Upon checkpoint, </b>srun_cr</b> checks to see if the tasks have been launched.
+If not </b>srun_cr</b> first forwards the checkpoint request to the tasks by 
+calling the SLURM API <b>slurm_checkpoint_tasks()</b> before dumping its process
+context.</p>
+
+<p>Upon restart, <b>srun_cr</b> checks to see if the tasks have been previously 
+launched and checkpointed. 
+If true, the environment variable </b>SLURM_RESTART_DIR</b> is set to the 
+directory of the checkpoint image files of the tasks.
+Then <b>srun</b> is forked and executed again. 
+The environment variable will be used by the <b>srun</b> command to restart 
+execution of the tasks from the previous checkpoint.</p>
+
+<h3>sbatch</h3>
+
+<p>Several options have been added to support checkpoint restart:</p>
+<ul>
+<li><b>--checkpoint</b>: Specify the interval between periodic checkpoint
+of a batch job, in seconds</li>
+<li><b>--checkpoint-dir</b>:Specify the directory when the checkpoint image
+files of a batch job will be stored.
+The default value is the current working directory.
+Checkpoint files will be of the form <i>"&lt;job_id&gt;.ckpt"</i> for jobs
+and <i>"&lt;job_id&gt;.&lt;step_id&gt;.ckpt"</i> for job steps.</li>
+</li>
+</ul>
+
+<p>Environment variables are available for all of these options:</p>
+<ul>
+<li<b>SLURM_CHECKPOINT</b> is equivalent to <b>--checkpoint</b>:</li>
+<li><b>SLURM_CHECKPOINT_DIR</b> is equivalent to <b>--checkpoint-dir</b></li>
+</li>
+</ul>
+
+<h3>scontrol</h3>
+
+<p><b>scontrol</b> is used to initiate checkpoint/restart requests.</p>
+<ul>
+<li><b>scontrol checkpoint create <i>jobid</i> [ImageDir=<i>dir</i>] 
+[MaxWait=<i>seconds</i>]</b><br>
+Requests a checkpoint on a specific job.
+For backward compatibility, if a job id is specified, all job steps of
+it are checkpointed. 
+If a batch job id is specified, the entire job is checkpointed including
+the batch shell and all running tasks of all job steps.
+Upon checkpoint, the task launch command must forward the requests to 
+tasks it launched.
+<ul>
+<li><b>ImageDir</b> specifies the directory in which to save the checkpoint 
+image files. If specified, this takes precedence over any <b>--checkpoint-dir</b>
+option specified when the job or job step were submitted.</li>
+<li><b>MaxWait</b> specifies the maximum time permitted for a checkpoint 
+request to complete. The request will be considered failed if not 
+completed in this time period.</li>
+</li>
+</ul>
+
+<li><b>scontrol checkpoint create <i>jobid.stepid</i> [ImageDir=<i>dir</i>] 
+[MaxWait=<i>seconds</i>]</b><br>
+Requests a checkpoint on a specific job step.</li>
+
+<li><b>scontrol checkpoint restart <i>jobid</i> [ImageDir=<i>dir</i>] 
+[StickToNodes]</b><br>
+Restart a previously checkpointed batch job.
+<ul>
+<li><b>ImageDir</b> specifies the directory from which to read the checkpoint 
+image files.</li>
+<li><b>StickToNodes</b> specifies that the job should be restarted on the
+same set of nodes from which it was previously checkpointed.</li>
+</ul></li>
+</ul>
+
+<h2>Configuration</h2>
+
+<p>The following SLURM configuration parameter has been added:</p>
+<ul>
+<li><b>JobCheckpointDir</b> specified the default directory for storing 
+or reading job checkpoint files</li>
+</ul>
+
+<p class="footer"><a href="#top">top</a></p>
+
+<p style="text-align:center;">Last modified 11 March 2009</p>
+
+<!--#include virtual="footer.txt"-->
diff --git a/doc/html/checkpoint_plugins.shtml b/doc/html/checkpoint_plugins.shtml
index 286b631b6..d458732d4 100644
--- a/doc/html/checkpoint_plugins.shtml
+++ b/doc/html/checkpoint_plugins.shtml
@@ -17,8 +17,12 @@ abbreviation for the type of checkpoint mechanism.
 We recommend, for example:</p>
 <ul>
 <li><b>aix</b>&#151;AIX system checkpoint.</li>
+<li><b>blcr</b>&#151;
+<a href="https://ftg.lbl.gov/CheckpointRestart/CheckpointRestart.shtml">
+Berkeley Lab Checkpoint/Restart (BLCR)</a></li>
 <li><b>none</b>&#151;No job checkpoint.</li>
 <li><b>ompi</b>&#151;OpenMPI checkpoint (requires OpenMPI version 1.3 or higher).</li>
+<li><b>xlch</b>&#151;XLCH</li>
 </ul></p>
 
 <p>The <span class="commandline">plugin_name</span> and 
@@ -92,12 +96,19 @@ from a buffer.</p>
 the plugin should return SLURM_ERROR and set the errno to an appropriate value
 to indicate the reason for failure.</p>
 
-<p class="commandline">int slurm_ckpt_op ( uint16_t op, uint16_t data,
-struct step_record * step_ptr, time_t * event_time,
+<p class="commandline">int slurm_ckpt_op ( uint32_t job_id, uint32_t step_id,
+struct step_record *step_ptr, uint16_t op, uint16_t data,
+char *image_dir, time_t *event_time, 
 uint32_t *error_code, char **error_msg );</p>
 <p style="margin-left:.2in"><b>Description</b>: Perform some checkpoint operation on a 
 specific job step.</p>
 <p style="margin-left:.2in"><b>Arguments</b>:<br>
+<b>job_id</b> (input) identifies the job to be operated upon.
+May be SLURM_BATCH_SCRIPT for a batch job or NO_VAL for all steps of the 
+specified job.</br>
+<b>step_id</b> (input) identifies the job step to be operated upon.<br>
+<b>step_ptr</b> (input) pointer to the job step to be operated upon.
+Used by checkpoint/aix only.<br>
 <b>op</b> (input) specifies the operation to be performed. 
 Currently supported operations include 
 CHECK_ABLE (is job step currently able to be checkpointed),
@@ -107,8 +118,8 @@ CHECK_CREATE (create a checkpoint for this job step and continue its execution),
 CHECK_VACATE (create a checkpoint for this job step and terminate it),
 CHECK_RESTART (restart this previously checkpointed job step), and
 CHECK_ERROR (return checkpoint-specific error information for this job step).<br>
-<b>data</b> (input) operation-specific data.</br>
-<b>step_ptr</b> (input/output) identifies the job step to be operated upon.</br>
+<b>data</b> (input) operation-specific data.<br>
+<b>image_dir</b> (input) directory to be used to save or restore state.<br>
 <b>event_time</b> (output) identifies the time of a checkpoint or restart 
 operation.</br>
 <b>error_code</b> (output) returns checkpoint-specific error code 
@@ -117,8 +128,8 @@ associated with an operation.</br>
 associated with an operation.</p>
 <p style="margin-left:.2in"><b>Returns</b>: <br>
 SLURM_SUCCESS if successful. On failure,
-the plugin should return SLURM_ERROR and set the error_code and error_msg to an 
-appropriate value to indicate the reason for failure.</p>
+the plugin should return SLURM_ERROR and set the error_code and error_msg 
+to an appropriate value to indicate the reason for failure.</p>
 
 <p class="commandline">int slurm_ckpt_comp ( struct step_record * step_ptr, time_t event_time,
 uint32_t error_code, char *error_msg );</p>
@@ -135,14 +146,47 @@ with an operation.</p>
 the plugin should return SLURM_ERROR and set the error_code and error_msg to an
 appropriate value to indicate the reason for failure.</p>
                                                                                                                        
+<p class="commandline">int slurm_ckpt_stepd_prefork ( void *slurmd_job );</p>
+<p style="margin-left:.2in"><b>Description</b>: Do preparation work for
+the checkpoint/restart support. This function is called by <b>slurmstepd</b>
+before forking the user tasks.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:<br>
+<b>slurmd_job</b> (input) pointer to job structure internal to slurmstepd.</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. 
+On failure, the plugin should return SLURM_ERROR and set the error_code 
+and error_msg to an appropriate value to indicate the reason for failure.</p>
+
+<p class="commandline">int slurm_ckpt_signal_tasks ( void *slurmd_job,
+char *image_dir );</p>
+<p style="margin-left:.2in"><b>Description</b>: Forward the checkpoint
+request to tasks managed by <b>slurmstepd</b>.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:<br>
+<b>slurmd_job</b> (input) pointer to job structure internal to slurmstepd.</br>
+<b>image_dir</b> (input) directory to be used to save or restore state.</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. 
+On failure, the plugin should return SLURM_ERROR and set the error_code 
+and error_msg to an appropriate value to indicate the reason for failure.</p>
+
+<p class="commandline">int slurm_ckpt_restart_task ( void *slurmd_job,
+char *image_dir, int gtid);</p>
+<p style="margin-left:.2in"><b>Description</b>: Restart the execution
+of a tasks from a checkpoint image, called by <b>slurmstepd</b>.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:<br>
+<b>slurmd_job</b> (input) pointer to job structure internal to slurmstepd.<br>
+<b>image_dir</b> (input) directory to be used to save or restore state.<br>
+<b>gtid</b> (input) global task ID to be restarted</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. 
+On failure, the plugin should return SLURM_ERROR and set the error_code 
+and error_msg to an appropriate value to indicate the reason for failure.</p>
+
 
 <h2>Versioning</h2>
-<p> This document describes version 0 of the SLURM checkpoint API. 
+<p> This document describes version 100 of the SLURM checkpoint API. 
 Future releases of SLURM may revise this API. 
 A checkpoint plugin conveys its ability to implement a particular API 
 version using the mechanism outlined for SLURM plugins.</p>
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 21 August 2007</p>
+<p style="text-align:center;">Last modified 10 March 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/configurator.html.in b/doc/html/configurator.html.in
index 50decd03b..1c7c823e4 100644
--- a/doc/html/configurator.html.in
+++ b/doc/html/configurator.html.in
@@ -1,6 +1,6 @@
 <!--
 Copyright (C) 2005-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> and Danny Auble <da@llnl.gov>
 
@@ -150,24 +150,30 @@ function displayfile()
    "#DisableRootJobs=NO <br>" +
    "#EnforcePartLimits=NO <br>" +
    get_field("Epilog",document.config.epilog) + "<br>" +
+   "#PrologSlurmctld= <br>" +
    "#FirstJobId=1 <br>" +
+   "#JobCheckpointDir=/var/slurm/checkpoint <br>" +
    get_field("JobCredentialPrivateKey", document.config.private_key) + "<br>" +
    get_field("JobCredentialPublicCertificate", document.config.public_key) + "<br>" +
    "#JobFileAppend=0 <br>" +
    "#JobRequeue=1 <br>" +
+   "#KillOnBadExit=0 <br>" +
    "#Licenses=foo*4,bar <br>" +
    "#MailProg=/bin/mail <br>" +
    "#MaxJobCount=5000 <br>" +
    "MpiDefault=" + get_radio_value(document.config.mpi_default) + "<br>" +
+   "#MpiParams=ports:#-# <br>" +
    "#PluginDir= <br>" +
    "#PlugStackConfig= <br>" +
    "#PrivateData=jobs <br>" +
    "ProctrackType=proctrack/" + get_radio_value(document.config.proctrack_type) + "<br>" +
    get_field("Prolog",document.config.prolog) + "<br>" +
+   "#PrologSlurmctld= <br>" +
    "#PropagatePrioProcess=0 <br>" +
    "#PropagateResourceLimits= <br>" +
    "#PropagateResourceLimitsExcept= <br>" +
    "ReturnToService=" + get_radio_value(document.config.return_to_service) + "<br>" +
+   "#SallocDefaultCommand= <br>" +
    "SlurmctldPidFile=" + document.config.slurmctld_pid_file.value + "<br>" +
    "SlurmctldPort=" + document.config.slurmctld_port.value + "<br>" +
    "SlurmdPidFile=" + document.config.slurmd_pid_file.value + "<br>" +
@@ -182,6 +188,7 @@ function displayfile()
    "TaskPlugin=task/" + get_radio_value(document.config.task_plugin) + "<br>" +
    get_task_plugin_param() + "<br>" +
    get_field("TaskProlog",document.config.task_prolog) + "<br>" +
+   "#TopologyPlugin=topology/tree <br>" +
    "#TmpFs=/tmp <br>" +
    "#TrackWCKey=no <br>" +
    "#TreeWidth= <br>" +
@@ -192,14 +199,17 @@ function displayfile()
    "# <br>" +
    "# TIMERS <br>" +
    "#BatchStartTimeout=10 <br>" +
+   "#CompleteWait=0 <br>" +
    "#EpilogMsgTime=2000 <br>" +
    "#GetEnvTimeout=2 <br>" +
    "#HealthCheckInterval=0 <br>" +
    "#HealthCheckProgram= <br>" +
    "InactiveLimit=" + document.config.inactive_limit.value + "<br>" +
-   "MinJobAge=" + document.config.min_job_age.value + "<br>" +
    "KillWait=" + document.config.kill_wait.value + "<br>" +
    "#MessageTimeout=10 <br>" +
+   "#ResvOverRun=0 <br>" +
+   "MinJobAge=" + document.config.min_job_age.value + "<br>" +
+   "#OverTimeLimit=0 <br>" +
    "SlurmctldTimeout=" + document.config.slurmctld_timeout.value + "<br>" +
    "SlurmdTimeout=" + document.config.slurmd_timeout.value + "<br>" +
    "#UnkillableStepProgram= <br>" +
@@ -219,6 +229,19 @@ function displayfile()
    get_select_type_params() + "<br>" +
    "# <br>" +
    "# <br>" +
+   "# JOB PRIORITY <br>" +
+   "#PriorityType=priority/basic <br>" +
+   "#PriorityDecayHalfLife= <br>" +
+   "#PriorityFavorSmall= <br>" +
+   "#PriorityMaxAge= <br>" +
+   "#PriorityUsageResetPeriod= <br>" +
+   "#PriorityWeightAge= <br>" +
+   "#PriorityWeightFairshare= <br>" +
+   "#PriorityWeightJobSize= <br>" +
+   "#PriorityWeightPartition= <br>" +
+   "#PriorityWeightQOS= <br>" +
+   "# <br>" +
+   "# <br>" +
    "# LOGGING AND ACCOUNTING <br>" +
    "#AccountingStorageEnforce=0 <br>" +
    get_field("AccountingStorageHost",document.config.accounting_storage_host) + "<br>" +
@@ -228,6 +251,7 @@ function displayfile()
    "AccountingStorageType=accounting_storage/" + get_accounting_storage_type_field(get_radio_value(document.config.job_acct_gather_type), document.config.accounting_storage_type) + "<br>" +
    get_field("AccountingStorageUser",document.config.accounting_storage_user) + "<br>" +
    get_field("ClusterName",document.config.cluster_name) + "<br>" +
+   "#DebugFlags= <br>" +
    get_field("JobCompHost",document.config.job_comp_host) + "<br>" +
    get_field("JobCompLoc",document.config.job_comp_loc) + "<br>" +
    get_field("JobCompPass",document.config.job_comp_pass) + "<br>" +
@@ -245,6 +269,8 @@ function displayfile()
    "# POWER SAVE SUPPORT FOR IDLE NODES (optional) <br>" +
    "#SuspendProgram= <br>" +
    "#ResumeProgram= <br>" +
+   "#SuspendTimeout= <br>" +
+   "#ResumeTimeout= <br>" +
    "#ResumeRate= <br>" +
    "#SuspendExcNodes= <br>" +
    "#SuspendExcParts= <br>" +
@@ -256,7 +282,7 @@ function displayfile()
    "NodeName=" + document.config.node_name.value +
    get_field2(" NodeAddr",document.config.node_addr) +
    get_field2(" Procs",document.config.procs) +
-   get_field2(" Memory",document.config.memory) +
+   get_field2(" RealMemory",document.config.memory) +
    get_field2(" Sockets",document.config.sockets) +
    get_field2(" CoresPerSocket",document.config.cores_per_socket) +
    get_field2(" ThreadsPerCore",document.config.threads_per_core) +
@@ -367,8 +393,9 @@ Name of the one partition to be created
 <input type="text" name="max_time" value="INFINITE"> <B>MaxTime</B>: 
 Maximum time limit of jobs in minutes or INFINITE
 <P>
-The following parameters are optional,
-but can be specified when using FastSchedule=1:
+The following parameters describe a node's configuration.
+Set a value for <B>Procs</B>.
+The other parameters are optional, but provide more control over scheduled resources:
 <P>
 <input type="text" name="procs" value="1"> <B>Procs</B>: Count of processors 
 on each compute node.
@@ -391,7 +418,7 @@ the logical number of processors per socket.
 <B>ThreadsPerCore</B>:
 Number of logical threads in a single physical core.
 <P>
-<input type="text" name="memory" value=""> <B>Memory</B>: Amount 
+<input type="text" name="memory" value=""> <B>RealMemory</B>: Amount 
 of real memory. This parameter is required when specifying Memory as a 
 consumable resource with the select/cons_res plug-in. See below 
 under Resource Selection. 
@@ -454,8 +481,8 @@ Select one value for <B>CryptoType</B>:<BR>
 <A href="http://www.openssl.org/">OpenSSL</A> 
 <P>
 Define the location of public and private keys used by SLURM's 
-cryptographic signature generation plugin (CryptoType).
-These values are only used if CryptoType=OpenSSL.
+cryptographic signature generation plugin (CryptoType).<br>
+<b>These values are only used if CryptoType=OpenSSL.</b><br>
 These files need to be generated by the SLURM administrator.
 Specify fully qualified pathnames.
 <P>
@@ -814,6 +841,6 @@ before terminating all remaining tasks. A value of zero indicates unlimited wait
 </FORM>
 <HR>
 <P class="footer">LLNL-WEB-402631<BR>
-Last modified 17 July 2008</P>
+Last modified 13 May 2009</P>
 </BODY>
 
diff --git a/doc/html/cons_res.shtml b/doc/html/cons_res.shtml
index 368810a9e..db690ac33 100644
--- a/doc/html/cons_res.shtml
+++ b/doc/html/cons_res.shtml
@@ -459,7 +459,7 @@ JOBID PARTITION   NAME   USER  ST   TIME  NODES NODELIST(REASON)
     5       lsf  sleep   root   R   1:52      3 linux[01-03]
 </pre>
 
-<p>Job 3 and Job 4 have finshed and Job 5 is still running on nodes linux[01-03].</p>
+<p>Job 3 and Job 4 have finished and Job 5 is still running on nodes linux[01-03].</p>
 
 <p>The advantage of the consumable resource scheduling policy
 is that the job throughput can increase dramatically. The overall job
diff --git a/doc/html/cons_res_share.shtml b/doc/html/cons_res_share.shtml
index 2221f4a2e..84e6db3fa 100644
--- a/doc/html/cons_res_share.shtml
+++ b/doc/html/cons_res_share.shtml
@@ -41,8 +41,9 @@ The following table describes this new functionality in more detail:
 <TD>Whole nodes are allocated to jobs. No node will run more than one job.</TD>
 </TR><TR>
 <TD>Shared=YES</TD>
-<TD>Same as Shared=FORCE if job request specifies --shared option.
-Otherwise same as Shared=NO.</TD>
+<TD>By default same as Shared=NO. Nodes allocated to a job may be shared with
+other jobs if each job allows sharing via the <CODE>srun --shared</CODE>
+option.</TD>
 </TR><TR>
 <TD>Shared=FORCE</TD>
 <TD>Whole nodes are allocated to jobs. A node may run more than one job.</TD>
@@ -55,8 +56,9 @@ SelectTypeParameters=<B>CR_Core_Memory</B></TD>
 <TD>Cores are allocated to jobs. No core will run more than one job.</TD>
 </TR><TR>
 <TD>Shared=YES</TD>
-<TD>Allocate whole nodes if job request specifies --exclusive option.
-Otherwise same as Shared=FORCE.</TD>
+<TD>By default same as Shared=NO. Cores allocated to a job may be shared with
+other jobs if each job allows sharing via the <CODE>srun --shared</CODE>
+option.</TD>
 </TR><TR>
 <TD>Shared=FORCE</TD>
 <TD>Cores are allocated to jobs. A core may run more than one job.</TD>
@@ -69,8 +71,9 @@ SelectTypeParameters=<B>CR_CPU_Memory</B></TD>
 <TD>CPUs are allocated to jobs. No CPU will run more than one job.</TD>
 </TR><TR>
 <TD>Shared=YES</TD>
-<TD>Allocate whole nodes if job request specifies --exclusive option.
-Otherwise same as Shared=FORCE.</TD>
+<TD>By default same as Shared=NO. CPUs allocated to a job may be shared with
+other jobs if each job allows sharing via the <CODE>srun --shared</CODE>
+option.</TD>
 </TR><TR>
 <TD>Shared=FORCE</TD>
 <TD>CPUs are allocated to jobs. A CPU may run more than one job.</TD>
@@ -83,8 +86,9 @@ SelectTypeParameters=<B>CR_Socket_Memory</B></TD>
 <TD>Sockets are allocated to jobs. No socket will run more than one job.</TD>
 </TR><TR>
 <TD>Shared=YES</TD>
-<TD>Allocate whole nodes if job request specifies --exclusive option.
-Otherwise same as Shared=FORCE.</TD>
+<TD>By default same as Shared=NO. Sockets allocated to a job may be shared with
+other jobs if each job allows sharing via the <CODE>srun --shared</CODE>
+option.</TD>
 </TR><TR>
 <TD>Shared=FORCE</TD>
 <TD>Sockets are allocated to jobs. A socket may run more than one job.</TD>
@@ -110,9 +114,9 @@ busy nodes that have more than half of the CPUs available for use. The
 <CODE>select/linear</CODE> plugin simply counts jobs on nodes, and does not
 track the CPU usage on each node.
 </P><P>
-This new functionality also supports the new
-<CODE>Shared=FORCE:&lt;num&gt;</CODE> syntax. If <CODE>Shared=FORCE:3</CODE> is
-configured with <CODE>select/cons_res</CODE> and <CODE>CR_Core</CODE> or
+This new sharing functionality in the select/cons_res plugin also supports the
+new <CODE>Shared=FORCE:&lt;num&gt;</CODE> syntax. If <CODE>Shared=FORCE:3</CODE>
+is configured with <CODE>select/cons_res</CODE> and <CODE>CR_Core</CODE> or
 <CODE>CR_Core_Memory</CODE>, then the <CODE>select/cons_res</CODE> plugin will
 run up to 3 jobs on each <U>core</U> of each node in the partition. If
 <CODE>CR_Socket</CODE> or <CODE>CR_Socket_Memory</CODE> is configured, then the
@@ -122,10 +126,28 @@ of each node in the partition.
 <H3>Nodes in Multiple Partitions</H3>
 <P>
 SLURM has supported configuring nodes in more than one partition since version
-0.7.0. The <CODE>Shared=FORCE</CODE> support in the <CODE>select/cons_res</CODE>
-plugin accounts for this "multiple partition" support. Here are several
-scenarios with the <CODE>select/cons_res</CODE> plugin enabled to help
-understand how all of this works together:
+0.7.0. The following table describes how nodes configured in two partitions with
+different <CODE>Shared</CODE> settings will be allocated to jobs. Note that
+"shared" jobs are jobs that are submitted to partitions configured with
+<CODE>Shared=FORCE</CODE> or with <CODE>Shared=YES</CODE> and the job requested
+sharing with the <CODE>srun --shared</CODE> option. Conversely, "non-shared"
+jobs are jobs that are submitted to partitions configured with
+<CODE>Shared=NO</CODE> or <CODE>Shared=YES</CODE> and the job did <U>not</U>
+request sharable resources.
+</P>
+<TABLE CELLPADDING=3 CELLSPACING=1 BORDER=1>
+<TR><TH>&nbsp;</TH><TH>First job "sharable"</TH><TH>First job not
+"sharable"</TH></TR>
+<TR><TH>Second job "sharable"</TH><TD>Both jobs can run on the same nodes and may
+share resources</TD><TD>Jobs do not run on the same nodes</TD></TR>
+<TR><TH>Second job not "sharable"</TH><TD>Jobs do not run on the same nodes</TD>
+<TD>Jobs can run on the same nodes but will not share resources</TD></TR>
+</TABLE>
+<P>
+The next table contains several
+scenarios with the <CODE>select/cons_res</CODE> plugin enabled to further
+clarify how a node is used when it is configured in more than one partition and
+the partitions have different "Shared" policies:
 </P>
 <TABLE CELLPADDING=3 CELLSPACING=1 BORDER=1>
 <TR><TH>SLURM configuration</TH>
@@ -185,6 +207,12 @@ having memory pages swapped out and severely degraded performance.
 <TD>Memory allocation is not tracked. Jobs are allocated to nodes without
 considering if there is enough free memory. Swapping could occur!</TD>
 </TR><TR>
+<TD>SelectType=<B>select/linear</B> plus<BR>
+SelectTypeParameters=<B>CR_Memory</B></TD>
+<TD>Memory allocation is tracked.  Nodes that do not have enough available
+memory to meet the jobs memory requirement will not be allocated to the job.
+</TD>
+</TR><TR>
 <TD>SelectType=<B>select/cons_res</B><BR>
 Plus one of the following:<BR>
 SelectTypeParameters=<B>CR_Core</B><BR>
@@ -200,32 +228,38 @@ SelectTypeParameters=<B>CR_Core_Memory</B><BR>
 SelectTypeParameters=<B>CR_CPU_Memory</B><BR>
 SelectTypeParameters=<B>CR_Socket_Memory</B></TD>
 <TD>Memory allocation for all jobs are tracked. Nodes that do not have enough
-available memory to meet the job's memory requirement will not be allocated to
+available memory to meet the jobs memory requirement will not be allocated to
 the job.</TD>
 </TR>
 </TABLE>
-<P>Users can specify their job's memory requirements one of two ways.
-<CODE>--mem=&lt;num&gt;</CODE> can be used to specify the job's memory 
-requirement on a per allocated node basis. This option is probably best 
-suited for use with the <CODE>select/linear</CODE> plugin, which allocates 
-whole nodes to jobs. 
-<CODE>--mem-per-cpu=&lt;num&gt;</CODE> can be used to specify the job's 
-memory requirement on a per allocated CPU basis. This is probably best
-suited for use with the <CODE>select/cons_res</CODE> plugin which can 
+<P>Users can specify their job's memory requirements one of two ways. The
+<CODE>srun --mem=&lt;num&gt;</CODE> option can be used to specify the jobs
+memory requirement on a per allocated node basis. This option is recommended 
+for use with the <CODE>select/linear</CODE> plugin, which allocates 
+whole nodes to jobs. The
+<CODE>srun --mem-per-cpu=&lt;num&gt;</CODE> option can be used to specify the
+jobs memory requirement on a per allocated CPU basis. This is recommended
+for use with the <CODE>select/cons_res</CODE> plugin which can 
 allocate individual CPUs to jobs.</P>
 
 <P>Default and maximum values for memory on a per node or per CPU basis can 
-be configued using the following options: <CODE>DefMemPerCPU</CODE>,
-<CODE>DefMemPerNode</CODE>, <CODE>MaxMemPerCPU</CODE> and <CODE>MaxMemPerNode</CODE>.
+be configured by the system administrator using the following
+<CODE>slurm.conf</CODE> options: <CODE>DefMemPerCPU</CODE>,
+<CODE>DefMemPerNode</CODE>, <CODE>MaxMemPerCPU</CODE> and
+<CODE>MaxMemPerNode</CODE>.
 Users can use the <CODE>--mem</CODE> or <CODE>--mem-per-cpu</CODE> option
-at job submission time to specify their memory requirements.
-Enforcement of a job's memory allocation is performed by the accounting 
-plugin, which periodically gathers data about running jobs. Set 
+at job submission time to override the default value, but they cannot exceed
+the maximum value.
+</P><P>
+Enforcement of a jobs memory allocation is performed by setting the "maximum
+data segment size" and the "maximum virtual memory size" system limits to the
+appropriate values before launching the tasks. Enforcement is also managed by
+the accounting plugin, which periodically gathers data about running jobs. Set 
 <CODE>JobAcctGather</CODE> and <CODE>JobAcctFrequency</CODE> to 
 values suitable for your system.</P>
 
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 8 July 2008</p>
+<p style="text-align:center;">Last modified 2 December 2008</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/cray.shtml b/doc/html/cray.shtml
new file mode 100644
index 000000000..0d92a64b4
--- /dev/null
+++ b/doc/html/cray.shtml
@@ -0,0 +1,145 @@
+<!--#include virtual="header.txt"-->
+
+<h1>SLURM User and Administrator Guide for Cray systems</h1>
+
+<b>NOTE: As of January 2009, the SLURM interface to Cray systems is incomplete.</b>
+
+<h2>User Guide</h2>
+
+<p>This document describes the unique features of SLURM on
+Cray computers.
+You should be familiar with the SLURM's mode of operation on Linux clusters 
+before studying the relatively few differences in Cray system 
+operation described in this document.</p>
+
+<p>SLURM's primary mode of operation is designed for use on clusters with
+nodes configured in a one-dimensional space. 
+Minor changes were required for the <i>smap</i> and <i>sview</i> tools 
+to map nodes in a three-dimensional space. 
+Some changes are also desirable to optimize job placement in three-dimensional 
+space.</p>
+
+<p>SLURM has added an interface to Cray's Application Level Placement Scheduler
+(ALPS). The ALPS <i>aprun</i> command must used for task launch rather than SLURM's 
+<i>srun</i> command. You should create a resource reservation using SLURM's
+<i>salloc</i> or <i>sbatch</i> command and execute <i>aprun</i> from within
+that allocation. <//p>
+
+<h2>Administrator Guide</h2>
+
+<h3>Cray/ALPS configuration</h3>
+
+<p>Node names must have a three-digit suffix describing their 
+zero-origin position in the X-, Y- and Z-dimension respectively (e.g. 
+"tux000" for X=0, Y=0, Z=0; "tux123" for X=1, Y=2, Z=3). 
+Rectangular prisms of nodes can be specified in SLURM commands and
+configuration files using the system name prefix with the end-points 
+enclosed in square brackets and separated by an "x". 
+For example "tux[620x731]" is used to represent the eight nodes in a 
+block with endpoints at "tux620" and "tux731" (tux620, tux621, tux630, 
+tux631, tux720, tux721, tux730, tux731).
+<b>NOTE:</b> We anticipate that Cray will provide node coordinate
+information via the ALPS interface in the future, which may result
+in a more flexible node naming convention.</p>
+
+<p>In ALPS, configure each node to be scheduled using SLURM as type
+BATCH.</p>
+
+<h3>SLURM configuration</h3>
+
+<p>Four variables must be defined in the <i>config.h</i> file: 
+<i>APBASIL_LOC</i> (location of the <i>apbasil</i> command), 
+<i>HAVE_FRONT_END</i>, <i>HAVE_CRAY_XT</i> and <i>HAVE_3D</i>.
+The <i>apbasil</i> command should automatically be found. 
+If that is not the case, please notify us of its location on your system
+and we will add that to the search paths tested at configure time.
+The other variable definitions can be initiated in several different 
+ways depending upon how SLURM is being built.
+<ol>
+<li>Execute the <i>configure</i> command with the option 
+<i>--enable-cray-xt</i> <b>OR</b></li>
+<li>Execute the <i>rpmbuild</i> command with the option 
+<i>--with cray_xt</i> <b>OR</b></li>
+<li>Add <i>%with_cray_xt 1</i> to your <i>~/.rpmmacros</i> file.</li>
+</ol></p>
+
+<p>One <i>slurmd</i> will be used to run all of the batch jobs on
+the system. It is from here that users will execute <i>aprun</i>
+commands to launch tasks.
+This is specified in the <i>slurm.conf</i> file by using the
+<i>NodeName</i> field to identify the compute nodes and both the
+<i>NodeAddr</i> and <i>NodeHostname</i> fields to identify the 
+computer when <i>slurmd</i> runs (normally some sort of front-end node)
+as seen in the examples below.</p>
+
+<p>Next you need to select from two options for the resource selection 
+plugin (the <i>SelectType</i> option in SLURM's <i>slurm.conf</i> configuration
+file):
+<ol>
+<li><b>select/cons_res</b> - Performs a best-fit algorithm based upon a 
+one-dimensional space to allocate whole nodes, sockets, or cores to jobs
+based upon other configuration parameters.</li>
+<li><b>select/linear</b> - Performs a best-fit algorithm based upon a 
+one-dimensional space to allocate whole nodes to jobs.</li>
+</ol>
+
+<p>In order for <i>select/cons_res</i> or <i>select/linear</i> to 
+allocate resources physically nearby in three-dimensional space, the 
+nodes be specified in SLURM's <i>slurm.conf</i> configuration file in 
+such a fashion that those nearby in <i>slurm.conf</i> (one-dimensional
+space) are also nearby in the physical three-dimensional space. 
+If the definition of the nodes in SLURM's <i>slurm.conf</i> configuration 
+file are listed on one line (e.g. <i>NodeName=tux[000x333]</i>),
+SLURM will automatically perform that conversion using a 
+<a href="http://en.wikipedia.org/wiki/Hilbert_curve">Hilbert curve</a>.
+Otherwise you may construct your own node name ordering and list them
+one node per line in <i>slurm.conf</i>.
+Note that each node must be listed exactly once and consecutive
+nodes should be nearby in three-dimensional space. 
+Also note that each node must be defined individually rather than using 
+a hostlist expression in order to preserve the ordering (there is no 
+problem using a hostlist expression in the partition specification after
+the nodes have already been defined).
+The open source code used by SLURM to generate the Hilbert curve is 
+included in the distribution at <i>contribs/skilling.c</i> in the event
+that you wish to experiment with it to generate your own node ordering.
+Two examples of SLURM configuration files are shown below:</p>
+
+<pre>
+# slurm.conf for Cray XT system of size 4x4x4
+# Parameters removed here
+SelectType=select/linear
+NodeName=DEFAULT Procs=8 RealMemory=2048 State=Unknown
+NodeName=tux[000x333] NodeAddr=front_end NodeHostname=front_end
+PartitionName=debug Nodes=tux[000x333] Default=Yes State=UP
+</pre>
+
+<pre>
+# slurm.conf for Cray XT system of size 4x4x4
+# Parameters removed here
+SelectType=select/linear
+NodeName=DEFAULT Procs=8 RealMemory=2048 State=Unknown
+NodeName=tux000 NodeAddr=front_end NodeHostname=front_end
+NodeName=tux100 NodeAddr=front_end NodeHostname=front_end
+NodeName=tux110 NodeAddr=front_end NodeHostname=front_end
+NodeName=tux010 NodeAddr=front_end NodeHostname=front_end
+NodeName=tux011 NodeAddr=front_end NodeHostname=front_end
+NodeName=tux111 NodeAddr=front_end NodeHostname=front_end
+NodeName=tux101 NodeAddr=front_end NodeHostname=front_end
+NodeName=tux001 NodeAddr=front_end NodeHostname=front_end
+PartitionName=debug Nodes=tux[000x111] Default=Yes State=UP
+</pre>
+
+<p>In both of the examples above, the node names output by the
+<i>scontrol show nodes</i> will be ordered as defined (sequentially 
+along the Hilbert curve or per the ordering in the <i>slurm.conf</i> file)
+rather than in numeric order (e.g. "tux001" follows "tux101" rather 
+than "tux000"). 
+SLURM partitions should contain nodes which are defined sequentially
+by that ordering for optimal performance.</p>
+
+<p class="footer"><a href="#top">top</a></p>
+
+<p style="text-align:center;">Last modified 9 January 2009</p></td>
+
+<!--#include virtual="footer.txt"-->
diff --git a/doc/html/crypto_plugins.shtml b/doc/html/crypto_plugins.shtml
index 6de9f1512..86b04f8ac 100644
--- a/doc/html/crypto_plugins.shtml
+++ b/doc/html/crypto_plugins.shtml
@@ -12,7 +12,7 @@ This is version 0 of the API.</p>
 <p>SLURM cryptographic plugins are SLURM plugins that implement 
 a digital signature mechanism. 
 The slurmctld daemon generates a job step credential, signs it, 
-and tranmits it to an srun program. 
+and transmits it to an srun program. 
 The srun program then transmits it to the slurmd daemons directly. 
 The slurmctld daemon does not communicate directly with the slurmd 
 daemons at this time for performance reasons, but the job step 
diff --git a/doc/html/dist_plane.shtml b/doc/html/dist_plane.shtml
index 72bedd988..c910cb27e 100644
--- a/doc/html/dist_plane.shtml
+++ b/doc/html/dist_plane.shtml
@@ -14,7 +14,7 @@ where <i>plane_size</i> is the requested plane/block size.
 <p>In the examples below we assume we have 21 tasks and that the
 task list is: 0, 1, 2, 3, 4, ..., 19, 20.
 
-<p>On <u>One (1)</u> node: <i>srun -N 1-1 -n 21 -m plane=4 -s <...></i>.
+<p>On <u>One (1)</u> node: <i>srun -N 1-1 -n 21 -m plane=4 <...></i>.
 
 <p>The distribution results in a plane distribution with plane_size 21.
 Even thought the user specified a plane_size of 4 the final plane
@@ -23,10 +23,10 @@ distribution results in a plane_size of 21.
 <p>
 <center>
 <img src="plane_ex1.gif">
-<p>Figure 1: Process layout for <i>srun -N 1-1 -n 21 -m plane=4 -s <...></i>
+<p>Figure 1: Process layout for <i>srun -N 1-1 -n 21 -m plane=4 <...></i>
 </center>
 
-<p>On <u>four (4)</u> nodes: <i>srun -N 4-4 -n 21 -m plane=4 -s <...></i>.
+<p>On <u>four (4)</u> nodes: <i>srun -N 4-4 -n 21 -m plane=4 <...></i>.
 
 <p>The plane distribution with a plane_size of 4 results in the
 following allocation of the task ids:
@@ -34,10 +34,10 @@ following allocation of the task ids:
 <p>
 <center>
 <img src="plane_ex2.gif">
-<p>Figure 2: Process layout for <i>srun -N 4-4 -n 21 -m plane=4 -s <...> </i>
+<p>Figure 2: Process layout for <i>srun -N 4-4 -n 21 -m plane=4 <...> </i>
 </center>
 
-<p>On <u>four (4)</u> nodes: <i>srun -N 4-4 -n 21 -m plane=2 -s <...>
+<p>On <u>four (4)</u> nodes: <i>srun -N 4-4 -n 21 -m plane=2 <...>
 </i>. 
 
 <p>The plane distribution with a plane_size of 2 results in the
@@ -46,7 +46,7 @@ following allocation of the task ids:
 <p>
 <center>
 <img src="plane_ex3.gif">
-<p>Figure 3: Process layout for <i>srun -N 4-4 -n 21 -m plane=2 -s <...></i>
+<p>Figure 3: Process layout for <i>srun -N 4-4 -n 21 -m plane=2 <...></i>
 </center>
 
 <p class="footer"><a href="#top">top</a></p>
@@ -112,38 +112,44 @@ affinity enabled</h3>
 <p>In the examples below we assume we have 21 tasks and that the
 task list is: 0, 1, 2, 3, 4, ..., 19, 20.
 
-<p>On <u>One (1)</u> node: <i>srun -N 1-1 -n 21 -m plane=4 -s <...></i>.
+<p>On <u>One (1)</u> node: 
+<i>srun -N 1-1 -n 21 -m plane=4 --cpu_bind=core <...></i>.
 Even thought the user specified a plane_size of 4 the final plane
 distribution results in a plane distribution with plane_size=8.
 
 <p>
 <center>
 <img src="plane_ex5.gif">
-<p>Figure 5: Process layout for <i>srun -N 1-1 -n 21 -m plane=4 -s <...></i>.
+<p>Figure 5: Process layout for 
+<i>srun -N 1-1 -n 21 -m plane=4 --cpu_bind=core <...></i>.
 </center>
 
-<p>On <u>four (4)</u> nodes: <i>srun -N 4-4 -n 21 -m plane=4 -s <...>
-</i>. The plane distribution with a plane_size of 4 results in the
+<p>On <u>four (4)</u> nodes: 
+<i>srun -N 4-4 -n 21 -m plane=4 --cpu_bind=core <...></i>. 
+The plane distribution with a plane_size of 4 results in the
 following allocation of the task ids:
 
 <p>
 <center>
-<img src="plane_ex6.gif">
-<p>Figure 6: Process layout for <i>srun -N 4-4 -n 21 -m plane=4 -s <...></i>.
+<img src="plane_ex6.gif" width=600>
+<p>Figure 6: Process layout for 
+<i>srun -N 4-4 -n 21 -m plane=4 --cpu_bind=core <...></i>.
 </center>
 
-<p>On <u>four (4)</u> nodes: <i>srun -N 4-4 -n 21 -m plane=2 -s <...>
+<p>On <u>four (4)</u> nodes: 
+<i>srun -N 4-4 -n 21 -m plane=2 --cpu_bind=core <...>
 </i>. The plane distribution with a plane_size of 2 results in the
 following allocation of the task ids:
 
 <p>
 <center>
-<img src="plane_ex7.gif">
-<p>Figure 7: Process layout for <i>srun -N 4-4 -n 21 -m plane=2 -s <...></i>.
+<img src="plane_ex7.gif" width=600>
+<p>Figure 7: Process layout for 
+<i>srun -N 4-4 -n 21 -m plane=2 --cpu_bind=core <...></i>.
 </center>
 
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 12 October 2006</p>
+<p style="text-align:center;">Last modified 1 April 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/documentation.shtml b/doc/html/documentation.shtml
index 057095390..0d575993a 100644
--- a/doc/html/documentation.shtml
+++ b/doc/html/documentation.shtml
@@ -6,51 +6,76 @@ Also see <a href="publications.html">Publications and Presentations</a>.
 
 <h2>SLURM Users</h2>
 <ul>
-<li><a href="quickstart.shtml">Quick Start User Guide</a></li>
-<li><a href="mc_support.shtml">Support for Multi-core/Multi-threaded Architectures</a></li>
-<li><a href="quickstart.shtml#mpi">Guide to MPI Use</a></li>
-<li><a href="bluegene.shtml">Blue Gene User and Administrator Guide</a></li>
-<li><a href="ibm.shtml">IBM AIX User and Administrator Guide</a></li>
+<li><a href="quickstart.html">Quick Start User Guide</a></li>
+<li><a href="mpi_guide.html">MPI Use Guide</a></li>
+<li><a href="mc_support.html">Support for Multi-core/Multi-threaded Architectures</a></li>
+<li><a href="checkpoint_blcr.html">SLURM Checkpoint/Restart with BLCR</a></li>
+<li>Specific Systems</li>
+<ul>
+<li><a href="bluegene.html">Blue Gene User and Administrator Guide</a></li>
+<li><a href="cray.html">Cray User and Administrator Guide</a></li>
+<li><a href="ibm.html">IBM AIX User and Administrator Guide</a></li>
+</ul>
 </ul>
 
 <h2>SLURM Administrators</h2>
 <ul>
-<li><a href="quickstart_admin.shtml">Quick Start Administrator Guide</a></li>
+<li><a href="quickstart_admin.html">Quick Start Administrator Guide</a></li>
 <li><a href="configurator.html">Configuration Tool</a></li>
-<li><a href="troubleshoot.shtml">Troubleshooting Guide</a></li>
-<li><a href="big_sys.shtml">Large Cluster Administration Guide</a></li>
-<li><a href="cons_res.shtml">Consumable Resources Guide</a></li>
-<li><a href="cons_res_share.shtml">Sharing Consumable Resources</a></li>
-<li><a href="accounting.shtml">Accounting</a></li>
-<li><a href="gang_scheduling.shtml">Gang Scheduling</a></li>
-<li><a href="preempt.shtml">Preemption</a></li>
-<li><a href="maui.shtml">Maui Scheduler Integration Guide</a></li>
-<li><a href="moab.shtml">Moab Cluster Suite Integration Guide</a></li>
-<li><a href="http://docs.hp.com/en/5991-4847/ch09s02.html">Submitting Jobs throuh LSF</a></li>
-<li><a href="bluegene.shtml">Blue Gene User and Administrator Guide</a></li>
-<li><a href="ibm.shtml">IBM AIX User and Administrator Guide</a></li>
-<li><a href="power_save.shtml">Power Saving Guide</a></li>
+<li><a href="troubleshoot.html">Troubleshooting Guide</a></li>
+<li><a href="big_sys.html">Large Cluster Administration Guide</a></li>
+<li><a href="accounting.html">Accounting</a></li>
+<li><a href="power_save.html">Power Saving Guide</a></li>
+<li>SLURM Scheduling</li>
+<ul>
+<li><a href="cons_res.html">Consumable Resources Guide</a></li>
+<li><a href="gang_scheduling.html">Gang Scheduling</a></li>
+<li><a href="priority_multifactor.html">Multifactor Job Priority</a></li>
+<li><a href="preempt.html">Preemption</a></li>
+<li><a href="resource_limits.html">Resource Limits</a></li>
+<li><a href="reservations.html">Resource Reservation Gude</a></li>
+<li><a href="cons_res_share.html">Sharing Consumable Resources</a></li>
+<li><a href="topology.html">Topology</a></li>
+</ul>
+<li>External Schedulers</li>
+<ul>
+<li><a href="maui.html">Maui Scheduler Integration Guide</a></li>
+<li><a href="moab.html">Moab Cluster Suite Integration Guide</a></li>
+<li><a href="http://docs.hp.com/en/5991-4847/ch09s02.html">Submitting Jobs through LSF</a></li>
+</ul>
+<li>Specific Systems</li>
+<ul>
+<li><a href="bluegene.html">Blue Gene User and Administrator Guide</a></li>
+<li><a href="cray.html">Cray User and Administrator Guide</a></li>
+<li><a href="ibm.html">IBM AIX User and Administrator Guide</a></li>
+<li><a href="sun_const.html">Sun Constellation Aministrator Guide</a></li>
+</ul>
 </ul>
 
 <h2>SLURM Developers</h2>
 <ul>
-<li><a href="programmer_guide.shtml">Programmer Guide</a></li>
-<li><a href="api.shtml">Application Programmer Interface (API) Guide</a></li>
-<li><a href="plugins.shtml">Plugin Programmer Guide</a></li>
-<li><a href="authplugins.shtml">Authentication Plugin Programmer Guide</a></li>
-<li><a href="crypto_plugins.shtml">Cryptographic Plugin Programmer Guild</a></li>
-<li><a href="jobacct_gatherplugins.shtml">Job Accounting Gather Plugin Programmer Guide</a></li>
-<li><a href="accounting_storageplugins.shtml">Accounting Storage Plugin Programmer Guide</a></li>
-<li><a href="checkpoint_plugins.shtml">Job Checkpoint Plugin Programmer Guide</a></li>
-<li><a href="jobcompplugins.shtml">Job Completion Logging Plugin Programmer Guide</a></li>
-<li><a href="mpiplugins.shtml">MPI Plugin Programmer Guide</a></li>
-<li><a href="proctrack_plugins.shtml">Process Tracking Plugin Programmer Guide</a></li>
-<li><a href="schedplugins.shtml">Scheduler Plugin Programmer Guide</a></li>
-<li><a href="selectplugins.shtml">Node Selection Plugin Programmer Guide</a></li>
-<li><a href="switchplugins.shtml">Switch (Interconnect) Plugin Programmer Guide</a></li>
-<li><a href="taskplugins.shtml">Task Plugin Programmer Guide</a></li>
+<li><a href="programmer_guide.html">Programmer Guide</a></li>
+<li><a href="api.html">Application Programmer Interface (API) Guide</a></li>
+<li><a href="plugins.html">Plugin Programmer Guide</a></li>
+<li>Plugin Interface Details</li>
+<ul>
+<li><a href="authplugins.html">Authentication Plugin Programmer Guide</a></li>
+<li><a href="crypto_plugins.html">Cryptographic Plugin Programmer Guide</a></li>
+<li><a href="jobacct_gatherplugins.html">Job Accounting Gather Plugin Programmer Guide</a></li>
+<li><a href="accounting_storageplugins.html">Accounting Storage Plugin Programmer Guide</a></li>
+<li><a href="checkpoint_plugins.html">Job Checkpoint Plugin Programmer Guide</a></li>
+<li><a href="jobcompplugins.html">Job Completion Logging Plugin Programmer Guide</a></li>
+<li><a href="mpiplugins.html">MPI Plugin Programmer Guide</a></li>
+<li><a href="priority_plugins.html">Priority Plugin Programmer Guide</a></li>
+<li><a href="proctrack_plugins.html">Process Tracking Plugin Programmer Guide</a></li>
+<li><a href="schedplugins.html">Scheduler Plugin Programmer Guide</a></li>
+<li><a href="selectplugins.html">Resource Selection Plugin Programmer Guide</a></li>
+<li><a href="switchplugins.html">Switch (Interconnect) Plugin Programmer Guide</a></li>
+<li><a href="taskplugins.html">Task Plugin Programmer Guide</a></li>
+<li><a href="topology_plugin.html">Topology Plugin Programmer Guide</a></li>
+</li>
 </ul>
 
-<p style="text-align:center;">Last modified 3 June 2008</p>
+<p style="text-align:center;">Last modified 24 March 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/download.shtml b/doc/html/download.shtml
index 61bd587d3..44c518f9a 100644
--- a/doc/html/download.shtml
+++ b/doc/html/download.shtml
@@ -37,7 +37,7 @@ As assortment of SPANK plugins are available from<br>
 <a href="http://code.google.com/p/slurm-spank-plugins/">
 http://code.google.com/p/slurm-spank-plugins/</a>.<br>
 The current source for the plugins can be checked out of the subversion
-respository with the following command:<br>
+repository with the following command:<br>
 <i>svn checkout http://slurm-spank-plugins.googlecode.com/svn/trunk/ slurm-plugins</i></li>
 
 <li><b>I/O Watchdog</b><br>
@@ -46,7 +46,7 @@ for <i>hangs</i> which typically have a side-effect of ceasing all write
 activity. This faciltiy attempts to monitor all write activity of an 
 application and trigger a set of user-defined actions when write activity 
 as ceased for a configurable period of time. A SPANK plugin is provided
-for use with SLURM. See the README and man page in tha package for more
+for use with SLURM. See the README and man page in the package for more
 details. Download the latest source from:<br>
 <a href="http://io-watchdog.googlecode.com/files/io-watchdog-0.6.tar.bz2">
 http://io-watchdog.googlecode.com/files/io-watchdog-0.6.tar.bz2</a></li>
@@ -71,19 +71,17 @@ See our <a href="accounting.html">Accounting</a> web page for more information.<
 <ul>
 <li><a href="http://www.mysql.com/">MySQL</a> (recommended)</li>
 <li><a href="http://www.postgresql.org/">PostgreSQL</a></li>
-<li><a href="http://www.clusterresources.com/pages/products/gold-allocation-manager.php">Gold</a></li>
 </ul>
 
 <li>Digital signatures (Cypto plugin) are used to insure message are not altered.</li>
 <ul>
+<li><b>Munge</b> (recommended)<br>
+Munge can be used at an alternative to OpenSSL. 
+Munge is available under the Gnu General Public License.
+See Munge download information above.</li>
 <li><b>OpenSSL</b><br>
-OpenSSL is recommended for generation of digital signatures.
+OpenSSL may be used as an alternative to Munge for generation of digital signatures.
 Download it from <a href="http://www.openssl.org/">http://www.openssl.org/</a>.</li>
-<li><b>Munge</b><br>
-Munge can be used at an alternative to OpenSSL. 
-Munge is available under the Gnu General Public License, but is slower than 
-OpenSSL for the generation of digital signatures. See Munge download 
-information above.</li>
 </ul> 
 
 <li>Interconnect plugins (Switch plugin)</li>
@@ -114,7 +112,7 @@ https://sourceforge.net/projects/slurm/</a>.
 <li><a href="http://www.quadrics.com/">Quadrics MPI</a></li>
 </ul>
 
-<li>Schedulers offering greater control over the workload</li>
+<li>External schedulers offering control over the workload</li>
 <ul>
 <li><a href="http://www.platform.com/">Load Sharing Facility (LSF)</a></li>
 <li><a href="http://www.clusterresources.com/pages/products/maui-cluster-scheduler.php">
@@ -131,6 +129,6 @@ Portable Linux Processor Affinity (PLPA)</a></li>
 
 </ul>
 
-<p style="text-align:center;">Last modified 30 September 2008</p>
+<p style="text-align:center;">Last modified 13 November 2008</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/faq.shtml b/doc/html/faq.shtml
index 510a8ad4b..892c4c3bf 100644
--- a/doc/html/faq.shtml
+++ b/doc/html/faq.shtml
@@ -31,7 +31,10 @@ allocated to a SLURM job?</a></li>
 killed?</a></li>
 <li><a href="#arbitrary">How do I run specific tasks on certain nodes
 in my allocation?</a></li> 
+<li><a href="#hold">How can I temporarily prevent a job from running 
+(e.g. place it into a <i>hold</i> state)?</a></li>
 </ol>
+
 <h2>For Administrators</h2>
 <ol>
 <li><a href="#suspend">How is job suspend/resume useful?</a></li>
@@ -93,8 +96,25 @@ regular database plugins?</li>
 information between major SLURM updates?</li>
 <li><a href="#health_check">Why doesn't the <i>HealthCheckProgram</i>
 execute on DOWN nodes?</li>
+<li><a href="#batch_lost">What is the meaning of the error 
+&quot;Batch JobId=# missing from master node, killing it&quot;?</a></li>
+<li><a href="#accept_again">What does the messsage
+&quot;srun: error: Unable to accept connection: Resources temporarily unavailable&quot; 
+indicate?</a></li>
+<li><a href="#task_prolog">How could I automatically print a job's 
+SLURM job ID to its standard output?</li>
+<li><a href="#moab_start">I run SLURM with the Moab or Maui scheduler.
+How can I start a job under SLURM without the scheduler?</li>
+<li><a href="#orphan_procs">Why are user processes and <i>srun</i>
+running even though the job is supposed to be completed?</li>
+<li><a href="#slurmd_oom">How can I prevent the <i>slurmd</i> and
+<i>slurmstepd</i> daemons from being killed when a node's memory 
+is exhausted?</li>
+<li><a href="#ubuntu">I see my host of my calling node as 127.0.1.1
+    instead of the correct ip address.  Why is that?</a></li>
 </ol>
 
+
 <h2>For Users</h2>
 <p><a name="comp"><b>1. Why is my job/node in COMPLETING state?</b></a><br>
 When a job is terminating, both the job and its nodes enter the COMPLETING state. 
@@ -111,7 +131,7 @@ for an extended period of time.
 This may be indicative of processes hung waiting for a core file 
 to complete I/O or operating system failure. 
 If this state persists, the system administrator should check for processes 
-associated with the job that can not be terminated then use the 
+associated with the job that cannot be terminated then use the 
 <span class="commandline">scontrol</span> command to change the node's 
 state to DOWN (e.g. &quot;scontrol update NodeName=<i>name</i> State=DOWN Reason=hung_completing&quot;), 
 reboot the node, then reset the node's state to IDLE 
@@ -123,14 +143,14 @@ associated with it terminate before setting it DOWN and re-booting.</p>
 <p>Note that SLURM has two configuration parameters that may be used to 
 automate some of this process.
 <i>UnkillableStepProgram</i> specifies a program to execute when 
-non-killable proceses are identified.
+non-killable processes are identified.
 <i>UnkillableStepTimeout</i> specifies how long to wait for processes
 to terminate. 
 See the "man slurm.conf" for more information about these parameters.</p>
 
 <p><a name="rlimit"><b>2. Why are my resource limits not propagated?</b></a><br>
 When the <span class="commandline">srun</span> command executes, it captures the 
-resource limits in effect at that time. These limits are propagated to the allocated 
+resource limits in effect at submit time. These limits are propagated to the allocated 
 nodes before initiating the user's job. The SLURM daemon running on that node then 
 tries to establish identical resource limits for the job being initiated. 
 There are several possible reasons for not being able to establish those 
@@ -139,17 +159,17 @@ resource limits.
 <li>The hard resource limits applied to SLURM's slurmd daemon are lower 
 than the user's soft resources limits on the submit host. Typically 
 the slurmd daemon is initiated by the init daemon with the operating 
-system default limits. This may be address either through use of the 
+system default limits. This may be addressed either through use of the 
 ulimit command in the /etc/sysconfig/slurm file or enabling
 <a href="#pam">PAM in SLURM</a>.</li>
-<li>The user's hard resource limits on the allocated node sre lower than 
-the same user's soft  hard resource limits on the node from which the 
+<li>The user's hard resource limits on the allocated node are lower than 
+the same user's soft hard resource limits on the node from which the 
 job was submitted. It is recommended that the system administrator 
 establish uniform hard resource limits for users on all nodes 
 within a cluster to prevent this from occurring.</li>
 </ul></p>
 <p>NOTE: This may produce the error message &quot;Can't propagate RLIMIT_...&quot;.
-The error message is printed only if the user explicity specifies that
+The error message is printed only if the user explicitly specifies that
 the resource limit should be propagated or the srun command is running
 with verbose logging of actions from the slurmd daemon (e.g. "srun -d6 ...").</p>
 
@@ -166,7 +186,7 @@ until no previously submitted job is pending. If the scheduler type is <b>backfi
 then jobs will generally be executed in the order of submission for a given partition 
 with one exception: later submitted jobs will be initiated early if doing so does 
 not delay the expected execution time of an earlier submitted job. In order for 
-backfill scheduling to be effective, users jobs should specify reasonable time 
+backfill scheduling to be effective, users' jobs should specify reasonable time
 limits. If jobs do not specify time limits, then all jobs will receive the same 
 time limit (that associated with the partition), and the ability to backfill schedule 
 jobs will be limited. The backfill scheduler does not alter job specifications 
@@ -208,7 +228,7 @@ more information.</p>
 SLURM has a job purging mechanism to remove inactive jobs (resource allocations)
 before reaching its time limit, which could be infinite.
 This inactivity time limit is configurable by the system administrator. 
-You can check it's value with the command</p>
+You can check its value with the command</p>
 <blockquote>
 <p><span class="commandline">scontrol show config | grep InactiveLimit</span></p>
 </blockquote>
@@ -233,7 +253,7 @@ the command. For example:</p>
 </blockquote>
 <p>srun processes "-N2" as an option to itself. "hostname" is the 
 command to execute and "-pdebug" is treated as an option to the 
-hostname command. Which will change the name of the computer 
+hostname command. This will change the name of the computer 
 on which SLURM executes the command - Very bad, <b>Don't run 
 this command as user root!</b></p>
 
@@ -242,9 +262,10 @@ this command as user root!</b></p>
 There are significant limitations in the current backfill scheduler plugin. 
 It was designed to perform backfill node scheduling for a homogeneous cluster.
 It does not manage scheduling on individual processors (or other consumable 
-resources). It also does not update the required or excluded node list of 
-individual jobs. These are the current limiations. You can use the 
-scontrol show command to check if these conditions apply.</p> 
+resources). It does not update the required or excluded node list of 
+individual jobs. It does support job's with constraints/features unless 
+the exclusive OR operator is used in the constraint expression. 
+You can use the scontrol show command to check if these conditions apply.</p> 
 <ul>
 <li>Partition: State=UP</li>
 <li>Partition: RootOnly=NO</li>
@@ -287,7 +308,7 @@ that the processes associated with the switch have been terminated
 to avoid the possibility of re-using switch resources for other 
 jobs (even on different nodes).
 SLURM considers jobs COMPLETED when all nodes allocated to the 
-job are either DOWN or confirm termination of all it's processes.
+job are either DOWN or confirm termination of all its processes.
 This enables SLURM to purge job information in a timely fashion 
 even when there are many failing nodes.
 Unfortunately the job step information may persist longer.</p>
@@ -297,7 +318,7 @@ job allocation?</b></a><br>
 There is a srun option <i>--jobid</i> that can be used to specify 
 a job's ID. 
 For a batch job or within an existing resource allocation, the 
-environment variable <i>SLURM_JOBID</i> has already been defined, 
+environment variable <i>SLURM_JOB_ID</i> has already been defined, 
 so all job steps will run within that job allocation unless 
 otherwise specified.
 The one exception to this is when submitting batch jobs. 
@@ -442,7 +463,7 @@ named <i>_interactive</i>.</p>
 # 
 # Simple batch script that starts SCREEN.
 
-exec screen -Dm -S slurm$SLURM_JOBID
+exec screen -Dm -S slurm$SLURM_JOB_ID
 </pre>
 
 <p>The following script named <i>_interactive_screen</i> is also used.</p>
@@ -472,7 +493,7 @@ indicate?</b></a><br>
 The srun command normally terminates when the standard output and 
 error I/O from the spawned tasks end. This does not necessarily 
 happen at the same time that a job step is terminated. For example, 
-a file system problem could render a spawned tasks non-killable 
+a file system problem could render a spawned task non-killable
 at the same time that I/O to srun is pending. Alternately a network 
 problem could prevent the I/O from being transmitted to srun.
 In any event, the srun command is notified when a job step is 
@@ -508,8 +529,8 @@ If the user's resource limit is not propagated, the limit in
 effect for the <i>slurmd</i> daemon will be used for the spawned job.
 A simple way to control this is to insure that user <i>root</i> has a 
 sufficiently large resource limit and insuring that <i>slurmd</i> takes 
-full advantage of this limit. For example, you can set user's root's
-locked memory limit limit to be unlimited on the compute nodes (see
+full advantage of this limit. For example, you can set user root's
+locked memory limit ulimit to be unlimited on the compute nodes (see
 <i>"man limits.conf"</i>) and insuring that <i>slurmd</i> takes 
 full advantage of this limit (e.g. by adding something like
 <i>"ulimit -l unlimited"</i> to the <i>/etc/init.d/slurm</i>
@@ -521,7 +542,7 @@ job steps being killed?</b></a><br>
 SLURM has a configuration parameter <i>InactiveLimit</i> intended 
 to kill jobs that do not spawn any job steps for a configurable
 period of time. Your system administrator may modify the <i>InactiveLimit</i>
-to satisfy your needs. Alternatly, you can just spawn a job step
+to satisfy your needs. Alternately, you can just spawn a job step
 at the beginning of your script to execute in the background. It
 will be purged when your script exits or your job otherwise terminates.
 A line of this sort near the beginning of your script should suffice:<br>
@@ -571,9 +592,19 @@ print $layout;
 We can now use this script in our srun line in this fashion.<p>
 <i>srun -m arbitrary -n5 -w `arbitrary.pl 4,1` -l hostname</i><p>
 This will layout 4 tasks on the first node in the allocation and 1
-task on the second node.  
-
-</p>
+task on the second node.</p>
+
+<p><a name="hold"><b>21. How can I temporarily prevent a job from running 
+(e.g. place it into a <i>hold</i> state)?</b></a><br>
+The easiest way to do this is to change a job's earliest begin time
+(optionally set at job submit time using the <i>--begin</i> option).
+The example below places a job into hold state (preventing its initiation
+for 30 days) and later permitting it to start now.</p>
+<pre>
+$ scontrol update JobId=1234 StartTime=now+30days
+... later ...
+$ scontrol update JobId=1234 StartTime=now
+</pre>
 
 <p class="footer"><a href="#top">top</a></p>
 
@@ -604,11 +635,11 @@ accommodate all jobs allocated to a node, either running or suspended.
 <p><a name="fast_schedule"><b>2. How can I configure SLURM to use 
 the resources actually found on a node rather than what is defined 
 in <i>slurm.conf</i>?</b></a><br>
-SLURM can either base it's scheduling decisions upon the node 
+SLURM can either base its scheduling decisions upon the node
 configuration defined in <i>slurm.conf</i> or what each node 
 actually returns as available resources. 
 This is controlled using the configuration parameter <i>FastSchedule</i>.
-Set it's value to zero in order to use the resources actually 
+Set its value to zero in order to use the resources actually 
 found on each node, but with a higher overhead for scheduling.
 A value of one is the default and results in the node configuration 
 defined in <i>slurm.conf</i> being used. See &quot;man slurm.conf&quot;
@@ -622,7 +653,7 @@ Set its value to one in order for DOWN nodes to automatically be
 returned to service once the <i>slurmd</i> daemon registers 
 with a valid node configuration.
 A value of zero is the default and results in a node staying DOWN 
-until an administrator explicity returns it to service using 
+until an administrator explicitly returns it to service using 
 the command &quot;scontrol update NodeName=whatever State=RESUME&quot;.
 See &quot;man slurm.conf&quot; and &quot;man scontrol&quot; for more 
 details.</p>
@@ -639,7 +670,7 @@ See the slurm.conf and srun man pages for more information.</p>
  
 <p><a name="multi_job"><b>5. How can I control the execution of multiple 
 jobs per node?</b></a><br>
-There are two mechanism to control this. 
+There are two mechanisms to control this.
 If you want to allocate individual processors on a node to jobs, 
 configure <i>SelectType=select/cons_res</i>. 
 See <a href="cons_res.html">Consumable Resources in SLURM</a>
@@ -649,7 +680,7 @@ configure <i>SelectType=select/linear</i>.
 Each partition also has a configuration parameter <i>Shared</i>
 that enables more than one job to execute on each node. 
 See <i>man slurm.conf</i> for more information about these 
-configuration paramters.</p>
+configuration parameters.</p>
 
 <p><a name="inc_plugin"><b>6. When the SLURM daemon starts, it 
 prints &quot;cannot resolve X plugin operations&quot; and exits. 
@@ -663,7 +694,7 @@ for more information (e.g. &quot;slurmctld -Dvvvvv&quot;).
 
 <p><a name="sigpipe"><b>7. Why are user tasks intermittently dying
 at launch with SIGPIPE error messages?</b></a><br>
-If you are using ldap or some other remote name service for
+If you are using LDAP or some other remote name service for
 username and groups lookup, chances are that the underlying
 libc library functions are triggering the SIGPIPE.  You can likely
 work around this problem by setting <i>CacheGroups=1</i> in your slurm.conf
@@ -672,11 +703,8 @@ reconfigure &quot; any time your groups database is updated.
 
 <p><a name="maint_time"><b>8. How can I dry up the workload for a 
 maintenance period?</b></a><br>
-There isn't a mechanism to tell SLURM that all jobs should be 
-completed by a specific time. The best way to address this is 
-to shorten the <i>MaxTime</i> associated with the partitions so 
-as to avoid initiating jobs that will not have completed by 
-the maintenance period.
+Create a resource reservation as described by SLURM's 
+<a href="reservations.html">Resource Reservation Guide</a>.
 
 <p><a name="pam"><b>9. How can PAM be used to control a user's limits on 
 or access to compute nodes?</b></a><br>
@@ -697,7 +725,7 @@ For example, to set the locked memory limit to unlimited for all users:</p>
 </pre>
 <p>Finally, you need to disable SLURM's forwarding of the limits from the 
 session from which the <i>srun</i> initiating the job ran. By default 
-all resource limits are propogated from that session. For example, adding 
+all resource limits are propagated from that session. For example, adding 
 the following line to <i>slurm.conf</i> will prevent the locked memory 
 limit from being propagated:<i>PropagateResourceLimitsExcept=MEMLOCK</i>.</p>
 
@@ -740,7 +768,7 @@ to relocate them. In order to do so, follow this procedure:</p>
 <li>Stop all SLURM daemons</li>
 <li>Modify the <i>ControlMachine</i>, <i>ControlAddr</i>, 
 <i>BackupController</i>, and/or <i>BackupAddr</i> in the <i>slurm.conf</i> file</li>
-<li>Distribute the updated <i>slurm.conf</i> file file to all nodes</li>
+<li>Distribute the updated <i>slurm.conf</i> file to all nodes</li>
 <li>Restart all SLURM daemons</li>
 </ol>
 <p>There should be no loss of any running or pending jobs. Insure that
@@ -778,11 +806,11 @@ cluster?</b></a><br>
 Yes, this can be useful for testing purposes. 
 It has also been used to partition "fat" nodes into multiple SLURM nodes.
 There are two ways to do this.
-The best method for most conditins is to run one <i>slurmd</i> 
+The best method for most conditions is to run one <i>slurmd</i> 
 daemon per emulated node in the cluster as follows.
 <ol>
 <li>When executing the <i>configure</i> program, use the option 
-<i>--multiple-slurmd</i> (or add that option to your <i>~/.rpmmacros</i>
+<i>--enable-multiple-slurmd</i> (or add that option to your <i>~/.rpmmacros</i>
 file).</li>
 <li>Build and install SLURM in the usual manner.</li>
 <li>In <i>slurm.conf</i> define the desired node names (arbitrary 
@@ -797,9 +825,9 @@ slurm.conf. </li>
 of the node that it is supposed to serve on the execute line.</li> 
 </ol>
 <p>It is strongly recommended that SLURM version 1.2 or higher be used 
-for this due to it's improved support for multiple slurmd daemons.
+for this due to its improved support for multiple slurmd daemons.
 See the
-<a href="programmer_guide.shtml#multiple_slurmd_support">Programmers Guide</a>
+<a href="programmer_guide.html#multiple_slurmd_support">Programmers Guide</a>
 for more details about configuring multiple slurmd support.</p>
 
 <p>In order to emulate a really large cluster, it can be more 
@@ -863,7 +891,7 @@ any desired node resource specifications (<i>Procs</i>, <i>Sockets</i>,
 <i>CoresPerSocket</i>, <i>ThreadsPerCore</i>, and/or <i>TmpDisk</i>).
 SLURM will use the resource specification for each node that is 
 given in <i>slurm.conf</i> and will not check these specifications 
-against those actaully found on the node.
+against those actually found on the node.
 
 <p><a name="credential_replayed"><b>16. What does a 
 &quot;credential replayed&quot; 
@@ -958,7 +986,7 @@ This error indicates that a job credential generated by the slurmctld daemon
 corresponds to a job that the slurmd daemon has already revoked. 
 The slurmctld daemon selects job ID values based upon the configured 
 value of <b>FirstJobId</b> (the default value is 1) and each job gets 
-an value one large than the previous job. 
+a value one larger than the previous job.
 On job termination, the slurmctld daemon notifies the slurmd on each 
 allocated node that all processes associated with that job should be 
 terminated. 
@@ -972,7 +1000,7 @@ for jobs that it considers terminated.
 This solution to this problem is to cold-start all slurmd daemons whenever
 the slurmctld daemon is cold-started.
 
-<p><a name="globus"><b>23. Can SLURM be used with Globus?</b><br>
+<p><a name="globus"><b>23. Can SLURM be used with Globus?</b></a><br>
 Yes. Build and install SLURM's Torque/PBS command wrappers along with 
 the Perl APIs from SLURM's <i>contribs</i> directory and configure 
 <a href="http://www-unix.globus.org/">Globus</a> to use those PBS commands.
@@ -980,7 +1008,7 @@ Note there are RPMs available for both of these packages, named
 <i>torque</i> and <i>perlapi</i> respectively.
 
 <p><a name="time_format"><b>24. Can SLURM time output format include the 
-year?</b><br>
+year?</b></a><br>
 The default SLURM time format output is <i>MM/DD-HH:MM:SS</i>. 
 Define &quot;ISO8601&quot; at SLURM build time to get the time format
 <i>YYYY-MM-DDTHH:MM:SS</i>.
@@ -988,14 +1016,14 @@ Note that this change in format will break anything that parses
 SLURM output expecting the old format (e.g. LSF, Maui or Moab).
 
 <p><a name="file_limit"><b>25. What causes the error 
-&quot;Unable to accept new connection: Too many open files&quot;?</b><br>
+&quot;Unable to accept new connection: Too many open files&quot;?</b></a><br>
 The srun command automatically increases its open file limit to 
 the hard limit in order to process all of the standard input and output
 connections to the launched tasks. It is recommended that you set the
 open file hard limit to 8192 across the cluster.
 
 <p><a name="slurmd_log"><b>26. Why does the setting of <i>SlurmdDebug</i> 
-fail to log job step information at the appropriate level?</b><br>
+fail to log job step information at the appropriate level?</b></a><br>
 There are two programs involved here. One is <b>slurmd</b>, which is 
 a persistent daemon running at the desired debug level. The second 
 program is <b>slurmstep</b>, which executed the user job and its
@@ -1005,8 +1033,8 @@ detail being logged in the <i>SlurmdLogFile</i> plus the output
 of the program.
 
 <p><a name="rpm"><b>27. Why isn't the auth_none.so (or other file) in a 
-SLURM RPM?</b><br>
-The auth_none plugin is in a separete RPM and not built by default.
+SLURM RPM?</b></a><br>
+The auth_none plugin is in a separate RPM and not built by default.
 Using the auth_none plugin means that SLURM communications are not 
 authenticated, so you probably do not want to run in this mode of operation 
 except for testing purposes. If you want to build the auth_none RPM then 
@@ -1015,9 +1043,9 @@ add <i>--with auth_none</i> on the rpmbuild command line or add
 in the SLURM distribution for a list of other options.
 
 <p><a name="slurmdbd"><b>28. Why should I use the slurmdbd instead of the
-regular database plugins?</b><br>
+regular database plugins?</b></a><br>
 While the normal storage plugins will work fine without the added
-layer of the slurmdbd there are some great benifits to using the
+layer of the slurmdbd there are some great benefits to using the
 slurmdbd.
 
 1. Added security.  Using the slurmdbd you can have an authenticated
@@ -1032,14 +1060,14 @@ slurmdbd.
    slurmdbd you can also query any cluster using the slurmdbd from any
    other cluster's nodes.
 
-<p><a name="debug"><b>29. How can I build SLURM with debugging symbols?</b></br>
+<p><a name="debug"><b>29. How can I build SLURM with debugging symbols?</b></a></br>
 Set your CFLAGS environment variable before building. 
 You want the "-g" option to produce debugging information and
 "-O0" to set the optimization level to zero (off). For example:<br>
 CFLAGS="-g -O0" ./configure ...
 
 <p><a name="state_preserve"><b>30. How can I easily preserve drained node 
-information between major SLURM updates?</b><br>
+information between major SLURM updates?</b></a><br>
 Major SLURM updates generally have changes in the state save files and 
 communication protocols, so a cold-start (without state) is generally 
 required. If you have nodes in a DRAIN state and want to preserve that
@@ -1052,12 +1080,12 @@ sinfo -t drain -h -o "scontrol update nodename='%N' state=drain reason='%E'"
 </pre>
 
 <p><a name="health_check"><b>31. Why doesn't the <i>HealthCheckProgram</i>
-execute on DOWN nodes?</b><br>
+execute on DOWN nodes?</a></b><br>
 Hierarchical communications are used for sending this message. If there
 are DOWN nodes in the communications hierarchy, messages will need to 
-be re-routed. This limits SLURM's ability to tightly synchroize the 
+be re-routed. This limits SLURM's ability to tightly synchronize the
 execution of the <i>HealthCheckProgram</i> across the cluster, which
-could adversly impact performance of parallel applications. 
+could adversely impact performance of parallel applications. 
 The use of CRON or node startup scripts may be better suited to insure
 that <i>HealthCheckProgram</i> gets executed on nodes that are DOWN
 in SLURM. If you still want to have SLURM try to execute 
@@ -1079,8 +1107,103 @@ Index: src/slurmctld/ping_nodes.c
                         continue;
 </pre>
 
+<p><a name="batch_lost"><b>32. What is the meaning of the error 
+&quot;Batch JobId=# missing from master node, killing it&quot;?</b></a><br>
+A shell is launched on node zero of a job's allocation to execute
+the submitted program. The <i>slurmd</i> daemon executing on each compute
+node will periodically report to the <i>slurmctld</i> what programs it
+is executing. If a batch program is expected to be running on some
+node (i.e. node zero of the job's allocation) and is not found, the
+message above will be logged and the job cancelled. This typically is 
+associated with exhausting memory on the node or some other critical 
+failure that cannot be recovered from. The equivalent message in 
+earlier releases of slurm is 
+&quot;Master node lost JobId=#, killing it&quot;.
+
+<p><a name="accept_again"><b>33. What does the messsage
+&quot;srun: error: Unable to accept connection: Resources temporarily unavailable&quot; 
+indicate?</b></a><br>
+This has been reported on some larger clusters running SUSE Linux when
+a user's resource limits are reached. You may need to increase limits
+for locked memory and stack size to resolve this problem.
+
+<p><a name="task_prolog"><b>34. How could I automatically print a job's 
+SLURM job ID to its standard output?</b></a></br>
+The configured <i>TaskProlog</i> is the only thing that can write to 
+the job's standard output or set extra environment variables for a job
+or job step. To write to the job's standard output, precede the message
+with "print ". To export environment variables, output a line of this
+form "export name=value". The example below will print a job's SLURM
+job ID and allocated hosts for a batch job only.
+
+<pre>
+#!/bin/sh
+#
+# Sample TaskProlog script that will print a batch job's
+# job ID and node list to the job's stdout
+#
+
+if [ X"$SLURM_STEP_ID" = "X" -a X"$SLURM_PROCID" = "X"0 ]
+then
+  echo "print =========================================="
+  echo "print SLURM_JOB_ID = $SLURM_JOB_ID"
+  echo "print SLURM_NODELIST = $SLURM_NODELIST"
+  echo "print =========================================="
+fi
+</pre>
+
+<p><a name="moab_start"><b>35. I run SLURM with the Moab or Maui scheduler.
+How can I start a job under SLURM without the scheduler?</b></a></br>
+When SLURM is configured to use the Moab or Maui scheduler, all submitted
+jobs have their priority initialized to zero, which SLURM treats as a held
+job. The job only begins when Moab or Maui decide where and when to start
+the job, setting the required node list and setting the job priority to 
+a non-zero value. To circumvent this, submit your job using a SLURM or
+Moab command then manually set its priority to a non-zero value (must be
+done by user root). For example:</p>
+<pre>
+$ scontrol update jobid=1234 priority=1000000
+</pre>
+<p>Note that changes in the configured value of <i>SchedulerType</i> only
+take effect when the <i>slurmctld</i> daemon is restarted (reconfiguring
+SLURM will not change this parameter. You will also manually need to
+modify the priority of every pending job. 
+When changing to Moab or Maui scheduling, set every job priority to zero. 
+When changing from Moab or Maui scheduling, set every job priority to a
+non-zero value (preferably fairly large, say 1000000).</p>
+
+<p><a name="orphan_procs"><b>36. Why are user processes and <i>srun</i>
+running even though the job is supposed to be completed?</b></a></br>
+SLURM relies upon a configurable process tracking plugin to determine
+when all of the processes associated with a job or job step have completed.
+Those plugins relying upon a kernel patch can reliably identify every process.
+Those plugins dependent upon process group IDs or parent process IDs are not 
+reliable. See the <i>ProctrackType</i> description in the <i>slurm.conf</i>
+man page for details. We rely upon the sgi_job for most systems.</p>
+
+<p><a name="slurmd_oom"><b>37. How can I prevent the <i>slurmd</i> and
+<i>slurmstepd</i> daemons from being killed when a node's memory 
+is exhausted?</b></a></br>
+You can the value set in the <i>/proc/self/oom_adj</i> for 
+<i>slurmd</i> and <i>slurmstepd</i> by initiating the <i>slurmd</i>
+daemon with the <i>SLURMD_OOM_ADJ</i> and/or <i>SLURMSTEPD_OOM_ADJ</i>
+environment variables set to the desired values.
+A value of -17 typically will disable killing.</p>
+
+<p><a name="ubuntu"><b>38. I see my host of my calling node as 127.0.1.1
+    instead of the correct ip address.  Why is that?</b></a></br>
+Some systems by default will put your host in the /etc/hosts file as
+    something like 
+<pre>
+127.0.1.1	snowflake.llnl.gov	snowflake
+</pre>
+This will cause srun and other things to grab 127.0.1.1 as it's
+address instead of the correct address and make it so the
+communication doesn't work.  Solution is to either remove this line or
+set a different nodeaddr that is known by your other nodes.</p>
+
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 24 October 2008</p>
+<p style="text-align:center;">Last modified 12 June 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/footer.txt b/doc/html/footer.txt
index dbed09229..c333e9ddd 100644
--- a/doc/html/footer.txt
+++ b/doc/html/footer.txt
@@ -1,7 +1,7 @@
 </div> <!-- closes "content" -->
 
 <div id="footer">
-<div id="left">&nbsp;&nbsp;<span class="ucrlnum">LLNL-WEB-405518 |</span> <a href="https://www.llnl.gov/disclaimer.html" target="_blank" class="privacy">Privacy &amp; Legal Notice</a></div>
+<div id="left">&nbsp;&nbsp;<span class="ucrlnum">LLNL-WEB-411573 |</span> <a href="https://www.llnl.gov/disclaimer.html" target="_blank" class="privacy">Privacy &amp; Legal Notice</a></div>
 <div id="right"><span class="ucrlnum">18 July 2008&nbsp;&nbsp;</span></div>
 </div>
 
diff --git a/doc/html/gang_scheduling.shtml b/doc/html/gang_scheduling.shtml
index e8d37467b..248c14022 100644
--- a/doc/html/gang_scheduling.shtml
+++ b/doc/html/gang_scheduling.shtml
@@ -3,12 +3,16 @@
 <H1>Gang Scheduling</H1>
 
 <P>
-SLURM version 1.2 and earlier supported dedication of resources
-to jobs.
-Beginning in SLURM version 1.3, gang scheduling is supported. 
-Gang scheduling is when two or more jobs are allocated to the same resources 
-and these jobs are alternately suspended to let all of the tasks of each 
-job have full access to the shared resources for a period of time.
+SLURM version 1.2 and earlier supported dedication of resources to jobs.
+Beginning in SLURM version 1.3, timesliced gang scheduling is supported. 
+Timesliced gang scheduling is when two or more jobs are allocated to the same
+resources and these jobs are alternately suspended to let one job at a time have
+dedicated access to the resources for a configured period of time.
+</P>
+<P>
+Preemptive priority job scheduling is another form of gang-scheduling that is
+supported by SLURM. See the <a href="preempt.html">Preemption</a> document for
+more information.
 </P>
 <P>
 A resource manager that supports timeslicing can improve it's responsiveness
@@ -87,7 +91,8 @@ the overhead of gang scheduling.
 The <I>FORCE</I> option now supports an additional parameter that controls 
 how many jobs can share a resource (FORCE[:max_share]). By default the 
 max_share value is 4. To allow up to 6 jobs from this partition to be 
-allocated to a common resource, set <I>Shared=FORCE:6</I>.
+allocated to a common resource, set <I>Shared=FORCE:6</I>. To only let 2 jobs
+timeslice on the same resources, set <I>Shared=FORCE:2</I>.
 </LI>
 </UL>
 <P>
@@ -131,7 +136,7 @@ the "active bitmap".
 </P>
 <P>
 This <I>timeslicer thread</I> algorithm for rotating jobs is designed to prevent
-jobs from starving (remaining in the suspended state indefinitly) and to be as
+jobs from starving (remaining in the suspended state indefinitely) and to be as
 fair as possible in the distribution of runtime while still keeping all of the
 resources as busy as possible.
 </P>
@@ -489,10 +494,6 @@ around on the cores to maximize performance. This is different than when
 
 <H2>Future Work</H2>
 
-<P>
-Priority scheduling and preemptive scheduling are other forms of gang
-scheduling that are currently under development for SLURM.
-</P>
 <P>
 <B>Making use of swap space</B>: (note that this topic is not currently
 scheduled for development, unless someone would like to pursue this) It should
@@ -508,6 +509,6 @@ For now this idea could be experimented with by disabling memory support in the
 selector and submitting appropriately sized jobs.
 </P>
 
-<p style="text-align:center;">Last modified 7 July 2008</p>
+<p style="text-align:center;">Last modified 5 December 2008</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/header.txt b/doc/html/header.txt
index 1adedfd3d..fb36083e7 100644
--- a/doc/html/header.txt
+++ b/doc/html/header.txt
@@ -8,8 +8,8 @@
 <meta http-equiv="Pragma" content="no-cache">
 <meta http-equiv="keywords" content="Simple Linux Utility for Resource Management, SLURM, resource management, 
 Linux clusters, high-performance computing, Livermore Computing">
-<meta name="LLNLRandR" content="LLNL-WEB-405518">
-<meta name="LLNLRandRdate" content="18 July 2008">
+<meta name="LLNLRandR" content="LLNL-WEB-411573">
+<meta name="LLNLRandRdate" content="26 March 2009">
 <meta name="distribution" content="global">
 <meta name="description" content="Simple Linux Utility for Resource Management">
 <meta name="copyright"
diff --git a/doc/html/ibm.shtml b/doc/html/ibm.shtml
index 2d0a7f6d7..5eb7b6ac1 100644
--- a/doc/html/ibm.shtml
+++ b/doc/html/ibm.shtml
@@ -23,14 +23,14 @@ This architecture insures proper operation of all IBM tools.</p>
 This script should contain one or more invocations of poe to launch 
 the tasks.
 If you want to run a job interactively, just execute poe directly. 
-Poe will recognize that it lacks a SLURM job allocation (the SLURM_JOBID 
+Poe will recognize that it lacks a SLURM job allocation (the SLURM_JOB_ID 
 environment variable will be missing) and create the SLURM allocation 
 prior to launching tasks.</p>
 
 <p>Each poe invocation (or SLURM job step) can have it's own network 
 specification.
 For example one poe may use IP mode communications and the next use
-User Space (US) mode communcations. 
+User Space (US) mode communications. 
 This enhancement to normal poe functionality may be accomplished by 
 setting the SLURM_NETWORK environment variable.
 The format of SLURM_NETWORK is "network.[protocol],[type],[usage],[mode]". 
@@ -46,7 +46,7 @@ One file is written for each node on which the job is executing, plus
 another for the script executing poe.a
 By default, the checkpoint files will be written to the current working
 directory of the job.
-Names and locations of these files can be controled using the 
+Names and locations of these files can be controlled using the 
 environment variables <b>MP_CKPTFILE</b> and <b>MP_CKPTDIR</b>.
 Use the squeue command to identify the job and job step of interest. 
 To initiate a checkpoint in which the job step will continue execution, 
@@ -61,11 +61,11 @@ use the command: <br>
 <p>Three unique components are required to use SLURM on an IBM system.</p>
 <ol>
 <li>The Federation switch plugin is required.  
-This component is packaged with the SLURM distrbution.</li>
+This component is packaged with the SLURM distribution.</li>
 <li>There is a process tracking kernel extension required. 
 This is used to insure that all processes associated with a job 
 are tracked.
-SLURM normatlly uses session ID and process group ID on Linux systems,
+SLURM normally uses session ID and process group ID on Linux systems,
 but these mechanisms can not prevent user processes from establishing 
 their own session or process group and thus "escape" from SLURM 
 tracking.
diff --git a/doc/html/jobacct_gatherplugins.shtml b/doc/html/jobacct_gatherplugins.shtml
index 1dc934d31..ea779aaef 100644
--- a/doc/html/jobacct_gatherplugins.shtml
+++ b/doc/html/jobacct_gatherplugins.shtml
@@ -12,7 +12,7 @@ their own SLURM job accounting gather plugins. This is version 1 of the API.
 SLURM Plugin API with the following specifications:
 
 <p><span class="commandline">const char
-plugin_name[]="<i>full&nbsp;text&nbsp;name</i>"
+plugin_name[]="<i>full&nbsp;text&nbsp;name</i>"</span>
 <p style="margin-left:.2in">
 A free-formatted ASCII text string that identifies the plugin.
 
@@ -257,6 +257,6 @@ ability to implement a particular API version using the mechanism outlined
 for SLURM plugins.
 <p class="footer"><a href="#top">top</a>
 
-<p style="text-align:center;">Last modified 11 Sep 2007</p>
+<p style="text-align:center;">Last modified 11 September 2007</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/jobcompplugins.shtml b/doc/html/jobcompplugins.shtml
index e208eb511..7246c7459 100644
--- a/doc/html/jobcompplugins.shtml
+++ b/doc/html/jobcompplugins.shtml
@@ -62,15 +62,15 @@ SLURM_SUCCESS. </p>
 <p style="margin-left:.2in"><b>Description</b>: Specify the location to be used for job logging.</p>
 <p style="margin-left:.2in"><b>Argument</b>:<span class="commandline"> location</span>&nbsp; 
 &nbsp;&nbsp;(input) specification of where logging should be done. The interpretation of 
-this string is at the discression of the plugin implementation.</p>
+this string is at the discresion of the plugin implementation.</p>
 <p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure, 
 the plugin should return SLURM_ERROR and set the errno to an appropriate value 
 to indicate the reason for failure.</p>
 <p class="footer"><a href="#top">top</a></p>
 
 <p class="commandline">int slurm_jobcomp_log_record (struct job_record *job_ptr);</p>
-<p style="margin-left:.2in"><b>Description</b>: Note termation of a job with the specified 
-characteristics.</p>
+<p style="margin-left:.2in"><b>Description</b>: Note termin ation of a job 
+with the specified characteristics.</p>
 <p style="margin-left:.2in"><b>Argument</b>: <br>
 <span class="commandline"> job_ptr</span>&nbsp;&nbsp;&nbsp;(input) Pointer to job record as defined
 in <i>src/slurmctld/slurmctld.h</i></p>
@@ -129,6 +129,6 @@ releases of SLURM may revise this API. A job completion plugin conveys its abili
 to implement a particular API version using the mechanism outlined for SLURM plugins.</p>
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 10 Sep 2007</p>
+<p style="text-align:center;">Last modified 10 September 2007</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/maui.shtml b/doc/html/maui.shtml
index 51667d145..b83dafd3a 100644
--- a/doc/html/maui.shtml
+++ b/doc/html/maui.shtml
@@ -9,6 +9,12 @@ online documents at Cluster Resources Inc.:
 <a href="http://www.clusterresources.com/products/maui/docs/mauiadmin.shtml">
 http://www.clusterresources.com/products/maui/docs/mauiadmin.shtml</a>.
 
+<p>Maui uses SLURM commands and a wiki interface to communicate. See the 
+<a href="http://www.clusterresources.com/products/mwm/docs/wiki/wikiinterface.shtml">
+Wiki Interface Specification</a> and
+<a href="http://www.clusterresources.com/products/mwm/docs/wiki/socket.shtml">
+Wiki Socket Protocol Description</a> for more information.</p>
+
 <h2>Configuration</h2>
 <p>First, download the Maui scheduler kit from their web site
 <a href="http://www.clusterresources.com/pages/products/maui-cluster-scheduler.php">
@@ -32,12 +38,12 @@ Then build Maui from its source distribution. This is a two step process:</p>
 <p>The key of 42 is arbitrary. You can use any value, but it will need to 
 be a number no larger than 4,294,967,295 (2^32) and specify the same 
 value as a SLURM configuration parameter described below.
-Maui developers have assured us the authenticaion key will eventually be 
+Maui developers have assured us the authentication key will eventually be 
 set in a configuration file rather than at build time.</p>
 
 <p>Update the Maui configuration file <i>maui.conf</i> (Copy the file
 maui-3.2.6p9/maui.cfg.dist to maui.conf). Add the following configuration 
-paramters to maui.conf:</p>
+parameters to maui.conf:</p>
 <pre>
 RMCFG[host]       TYPE=WIKI
 RMPORT            7321            # selected port
@@ -94,10 +100,10 @@ SchedulerPort=7321
 SchedulerAuth=42 (for Slurm version 1.1 and earlier only)
 </pre>
 <p>In this case, "SchedulerAuth" has been set to 42, which was the 
-authenticaiton key specified when Maui was configured above. 
+authentication key specified when Maui was configured above. 
 Just make sure the numbers match.</p>
 
-<p>For Slurm version 1.2 or higher, the authentication key 
+<p>For SLURM version 1.2 or higher, the authentication key 
 is stored in a file specific to the wiki-plugin named 
 <i>wiki.conf</i>.
 This file should be protected from reading by users.
@@ -110,6 +116,18 @@ includes a description of keywords presently only
 supported by the sched/wiki2 plugin for use with the 
 Moab Scheduler.</p>
 
+<p>SLURM version 2.0 and higher have internal scheduling capabilities
+that are not compatable with Maui.
+<ol>
+<li>Do not configure SLURM to use the "priority/multifactor" plugin 
+as it would set job priorities which conflict with those set by Maui.</li>
+<li>Do not use SLURM's <a href="reservations.html">reservation</a> 
+mechanism, but use that offered by Maui.</li>
+<li>Do not use SLURM's <a href="resource_limits.html">resource limits</a>
+as those may conflict with those managed by Maui.</li>
+</ol></p>
+
+
 <p>The wiki.conf keywords currently supported by Maui include:</p>
 
 <p><b>AuthKey</b> is a DES based encryption key used to sign 
@@ -162,6 +180,6 @@ HidePartitionJobs=debug
 
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 4 November 2008</p>
+<p style="text-align:center;">Last modified 8 May 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/mc_support.shtml b/doc/html/mc_support.shtml
index 74197368b..0944446c7 100644
--- a/doc/html/mc_support.shtml
+++ b/doc/html/mc_support.shtml
@@ -79,7 +79,7 @@ to dedicate to a job (minimum or range)
 </td></tr>
 <tr>
     <td> -B <i>S[:C[:T]]</i></td>
-    <td> Combined shorcut option for --sockets-per-node, --cores-per_cpu, --threads-per_core
+    <td> Combined shortcut option for --sockets-per-node, --cores-per_cpu, --threads-per_core
 </td></tr>
 <tr><td colspan=2>
 <b><a href="#srun_dist">New Distributions</b>
@@ -356,7 +356,7 @@ via <a href="configurator.html">configurator.html</a>.
 <p>The <tt>--ntasks-per-{node,socket,core}=<i>ntasks</i></tt> flags
 allow the user to request that no more than <tt><i>ntasks</i></tt>
 be invoked on each node, socket, or core.
-This is similiar to using <tt>--cpus-per-task=<i>ncpus</i></tt>
+This is similar to using <tt>--cpus-per-task=<i>ncpus</i></tt>
 but does not require knowledge of the actual number of cpus on
 each node.  In some cases, it is more convenient to be able to
 request that no more than a specific number of ntasks be invoked
@@ -896,7 +896,7 @@ JOBID ST TIME NODES MIN_PROCS MIN_SOCKETS MIN_CORES MIN_THREADS
 
 <p>The 'scontrol show job' command can be used to display
 the number of allocated CPUs per node as well as the socket, cores,
-and threads specified in the request and contraints.
+and threads specified in the request and constraints.
 
 <PRE>
 % srun -N 2 -B 2:1-1 sleep 100 &
diff --git a/doc/html/moab.shtml b/doc/html/moab.shtml
index 3ee5c7b15..30bdfdae0 100644
--- a/doc/html/moab.shtml
+++ b/doc/html/moab.shtml
@@ -7,7 +7,17 @@ beyond the scope of any documents we could supply with SLURM.
 The best resource for Moab configuration information is the 
 online documents at Cluster Resources Inc.: 
 <a href="http://www.clusterresources.com/products/mwm/docs/slurmintegration.shtml">
-http://www.clusterresources.com/products/mwm/docs/slurmintegration.shtml</a>.
+http://www.clusterresources.com/products/mwm/docs/slurmintegration.shtml</a>.</p>
+
+<p>Moab uses SLURM commands and a wiki interface to communicate. See the 
+<a href="http://www.clusterresources.com/products/mwm/docs/wiki/wikiinterface.shtml">
+Wiki Interface Specification</a> and
+<a href="http://www.clusterresources.com/products/mwm/docs/wiki/socket.shtml">
+Wiki Socket Protocol Description</a> for more information.</p>
+
+<p>Somewhat more current information about SLURM's implementation of the 
+wiki interface was developed by Michal Novotny (Masaryk University, Czech Republic)
+and can be found <a href="http://www.fi.muni.cz/~xnovot19/wiki2.html">here</a>.</p>
 
 <h2>Configuration</h2>
 <p>First, download the Moab scheduler kit from their web site
@@ -36,6 +46,17 @@ partition configuration specifications.</p>
 
 <p>The default value of <i>SchedulerPort</i> is 7321.</p>
 
+<p>SLURM version 2.0 and higher have internal scheduling capabilities
+that are not compatable with Moab.
+<ol>
+<li>Do not configure SLURM to use the "priority/multifactor" plugin 
+as it would set job priorities which conflict with those set by Moab.</li>
+<li>Do not use SLURM's <a href="reservations.html">reservation</a> 
+mechanism, but use that offered by Moab.</li>
+<li>Do not use SLURM's <a href="resource_limits.html">resource limits</a>
+as those may conflict with those managed by Moab.</li>
+</ol></p>
+
 <h4>SLURM commands</h4>
 <p> Note that the <i>srun --immediate</i> option is not compatible 
 with Moab. 
@@ -259,6 +280,6 @@ Write the output to a file with the same name as the user in the
 
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 10 July 2008</p>
+<p style="text-align:center;">Last modified 14 May 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/mpi_guide.shtml b/doc/html/mpi_guide.shtml
new file mode 100644
index 000000000..9da0d09fc
--- /dev/null
+++ b/doc/html/mpi_guide.shtml
@@ -0,0 +1,307 @@
+<!--#include virtual="header.txt"-->
+
+<h1>MPI Use Guide</h1>
+
+<p>MPI use depends upon the type of MPI being used. 
+There are three fundamentally different modes of operation used 
+by these various MPI implementation.
+<ol>
+<li>SLURM directly launches the tasks and performs initialization 
+of communications (Quadrics MPI, MPICH2, MPICH-GM, MPICH-MX, 
+MVAPICH, MVAPICH2, some MPICH1 modes, and future versions of OpenMPI).</li>
+<li>SLURM creates a resource allocation for the job and then
+mpirun launches tasks using SLURM's infrastructure (OpenMPI,
+LAM/MPI and HP-MPI).</li>
+<li>SLURM creates a resource allocation for the job and then 
+mpirun launches tasks using some mechanism other than SLURM, 
+such as SSH or RSH (BlueGene MPI and some MPICH1 modes). 
+These tasks initiated outside of SLURM's monitoring 
+or control. SLURM's epilog should be configured to purge 
+these tasks when the job's allocation is relinquished. </li>
+</ol>
+<p>Links to instructions for using several varieties of MPI 
+with SLURM are provided below.
+<ul>
+<li><a href="#bluegene_mpi">BlueGene MPI</a></li>
+<li><a href="#hp_mpi">HP-MPI</a></li>
+<li><a href="#lam_mpi">LAM/MPI</a></li>
+<li><a href="#mpich1">MPICH1</a></li>
+<li><a href="#mpich2">MPICH2</a></li>
+<li><a href="#mpich_gm">MPICH-GM</a></li>
+<li><a href="#mpich_mx">MPICH-MX</a></li>
+<li><a href="#mvapich">MVAPICH</a></li>
+<li><a href="#mvapich2">MVAPICH2</a></li>
+<li><a href="#open_mpi">Open MPI</a></li>
+<li><a href="#quadrics_mpi">Quadrics MPI</a></li>
+</ul></p>
+<hr size=4 width="100%">
+
+
+<h2><a name="open_mpi" href="http://www.open-mpi.org/"><b>Open MPI</b></a></h2>
+
+<p>Open MPI relies upon
+SLURM to allocate resources for the job and then mpirun to initiate the 
+tasks. When using <span class="commandline">salloc</span> command, 
+<span class="commandline">mpirun</span>'s -nolocal option is recommended. 
+For example:
+<pre>
+$ salloc -n4 sh    # allocates 4 processors 
+                   # and spawns shell for job
+&gt; mpirun -np 4 -nolocal a.out
+&gt; exit             # exits shell spawned by 
+                   # initial srun command
+</pre>
+<p>Note that any direct use of <span class="commandline">srun</span>
+will only launch one task per node when the LAM/MPI plugin is used.
+To launch more than one task per node using the
+<span class="commandline">srun</span> command, the <i>--mpi=none</i>
+option will be required to explicitly disable the LAM/MPI plugin.</p>
+
+<h2>Future Use</h2>
+<p>There is work underway in both SLURM and Open MPI to support task launch
+using the <span class="commandline">srun</span> command. 
+We expect this mode of operation to be supported late in 2009.
+It may differ slightly from the description below.
+It relies upon SLURM version 2.0 (or higher) managing 
+reservations of communication ports for the Open MPI's use.
+The system administrator must specify the range of ports to be reserved 
+in the <i>slurm.conf</i> file using the <i>MpiParams</i> parameter.
+For example: <br>
+<i>MpiParams=ports=12000-12999</i></p>
+
+<p>Launch tasks using the <span class="commandline">srun</span> command 
+plus the option <i>--resv-ports</i>.
+The ports reserved on every allocated node will be identified in an 
+environment variable available to the tasks as shown here: <br>
+<i>SLURM_STEP_RESV_PORTS=12000-12015</i></p>
+
+<p>If the ports reserved for a job step are found by the Open MPI library
+to be in use, a message of this form will be printed and the job step
+will be re-launched:<br>
+<i>srun: error: sun000: task 0 unble to claim reserved port, retrying</i><br>
+After three failed attempts, the job step will be aborted.
+Repeated failures should be reported to your system administrator in 
+order to rectify the problem by cancelling the processes holding those
+ports.</p>
+<hr size=4 width="100%">
+
+
+<h2><a name="quadrics_mpi" href="http://www.quadrics.com/"><b>Quadrics MPI</b></a></h2>
+
+<p>Quadrics MPI relies upon SLURM to 
+allocate resources for the job and <span class="commandline">srun</span> 
+to initiate the tasks. One would build the MPI program in the normal manner 
+then initiate it using a command line of this sort:</p>
+<pre>
+$ srun [options] &lt;program&gt; [program args]
+</pre>
+<hr size=4 width="100%">
+
+
+<h2><a name="lam_mpi" href="http://www.lam-mpi.org/"><b>LAM/MPI</b></a></h2>
+
+<p>LAM/MPI relies upon the SLURM 
+<span class="commandline">salloc</span> or <span class="commandline">sbatch</span>
+command to allocate. In either case, specify 
+the maximum number of tasks required for the job. Then execute the 
+<span class="commandline">lamboot</span> command to start lamd daemons. 
+<span class="commandline">lamboot</span> utilizes SLURM's 
+<span class="commandline">srun</span> command to launch these daemons. 
+Do not directly execute the <span class="commandline">srun</span> command 
+to launch LAM/MPI tasks. For example: 
+<pre>
+$ salloc -n16 sh  # allocates 16 processors 
+                  # and spawns shell for job
+&gt; lamboot
+&gt; mpirun -np 16 foo args
+1234 foo running on adev0 (o)
+2345 foo running on adev1
+etc.
+&gt; lamclean
+&gt; lamhalt
+&gt; exit            # exits shell spawned by 
+                  # initial srun command
+</pre>
+<p>Note that any direct use of <span class="commandline">srun</span> 
+will only launch one task per node when the LAM/MPI plugin is configured
+as the default plugin.  To launch more than one task per node using the 
+<span class="commandline">srun</span> command, the <i>--mpi=none</i>
+option would be required to explicitly disable the LAM/MPI plugin
+if that is the system default.</p>
+<hr size=4 width="100%">
+
+
+<h2><a name="hp_mpi" href="http://www.hp.com/go/mpi"><b>HP-MPI</b></a></h2>
+
+<p>HP-MPI uses the 
+<span class="commandline">mpirun</span> command with the <b>-srun</b> 
+option to launch jobs. For example:
+<pre>
+$MPI_ROOT/bin/mpirun -TCP -srun -N8 ./a.out
+</pre></p>
+<hr size=4 width="100%">
+
+
+<h2><a name="mpich2" href="http://www.mcs.anl.gov/research/projects/mpich2/"><b>MPICH2</b></a></h2>
+
+<p>MPICH2 jobs are launched using the <b>srun</b> command. Just link your program with 
+SLURM's implementation of the PMI library so that tasks can communicate
+host and port information at startup. (The system administrator can add
+these option to the mpicc and mpif77 commands directly, so the user will not 
+need to bother). For example:
+<pre>
+$ mpicc -L&lt;path_to_slurm_lib&gt; -lpmi ...
+$ srun -n20 a.out
+</pre>
+<b>NOTES:</b>
+<ul>
+<li>Some MPICH2 functions are not currently supported by the PMI 
+library integrated with SLURM</li>
+<li>Set the environment variable <b>PMI_DEBUG</b> to a numeric value 
+of 1 or higher for the PMI library to print debugging information</li>
+</ul></p>
+<hr size=4 width="100%">
+
+
+<h2><a name="mpich_gm" href="http://www.myri.com/scs/download-mpichgm.html"><b>MPICH-GM</b></a></h2>
+
+<p>MPICH-GM jobs can be launched directly by <b>srun</b> command.
+SLURM's <i>mpichgm</i> MPI plugin must be used to establish communications 
+between the launched tasks. This can be accomplished either using the SLURM 
+configuration parameter <i>MpiDefault=mpichgm</i> in <b>slurm.conf</b>
+or srun's <i>--mpi=mpichgm</i> option.
+<pre>
+$ mpicc ...
+$ srun -n16 --mpi=mpichgm a.out
+</pre>
+<hr size=4 width="100%">
+
+
+<h2><a name="mpich_mx" href="http://www.myri.com/scs/download-mpichmx.html"><b>MPICH-MX</b></a></h2>
+
+<p>MPICH-MX jobs can be launched directly by <b>srun</b> command.
+SLURM's <i>mpichmx</i> MPI plugin must be used to establish communications
+between the launched tasks. This can be accomplished either using the SLURM
+configuration parameter <i>MpiDefault=mpichmx</i> in <b>slurm.conf</b>
+or srun's <i>--mpi=mpichmx</i> option.
+<pre>
+$ mpicc ...
+$ srun -n16 --mpi=mpichmx a.out
+</pre>
+<hr size=4 width="100%">
+
+
+<h2><a name="mvapich" href="http://mvapich.cse.ohio-state.edu/"><b>MVAPICH</b></a></h2>
+
+<p>MVAPICH jobs can be launched directly by <b>srun</b> command.
+SLURM's <i>mvapich</i> MPI plugin must be used to establish communications 
+between the launched tasks. This can be accomplished either using the SLURM 
+configuration parameter <i>MpiDefault=mvapich</i> in <b>slurm.conf</b>
+or srun's <i>--mpi=mvapich</i> option.
+<pre>
+$ mpicc ...
+$ srun -n16 --mpi=mvapich a.out
+</pre>
+<b>NOTE:</b> If MVAPICH is used in the shared memory model, with all tasks
+running on a single node, then use the <i>mpich1_shmem</i> MPI plugin instead.<br>
+<b>NOTE (for system administrators):</b> Configure
+<i>PropagateResourceLimitsExcept=MEMLOCK</i> in <b>slurm.conf</b> and 
+start the <i>slurmd</i> daemons with an unlimited locked memory limit.
+For more details, see 
+<a href="http://mvapich.cse.ohio-state.edu/support/mvapich_user_guide.html#x1-420007.2.3">MVAPICH</a> 
+documentation for "CQ or QP Creation failure".</p>
+<hr size=4 width="100%">
+
+
+<h2><a name="mvapich2" href="http://nowlab.cse.ohio-state.edu/projects/mpi-iba"><b>MVAPICH2</b></a></h2>
+
+<p>MVAPICH2 jobs can be launched directly by <b>srun</b> command.
+SLURM's <i>none</i> MPI plugin must be used to establish communications 
+between the launched tasks. This can be accomplished either using the SLURM 
+configuration parameter <i>MpiDefault=none</i> in <b>slurm.conf</b> 
+or srun's <i>--mpi=none</i> option. The program must also be linked with
+SLURM's implementation of the PMI library so that tasks can communicate
+host and port information at startup. (The system administrator can add
+these option to the mpicc and mpif77 commands directly, so the user will not
+need to bother).  <b>Do not use SLURM's MVAPICH plugin for MVAPICH2.</b>
+<pre>
+$ mpicc -L&lt;path_to_slurm_lib&gt; -lpmi ...
+$ srun -n16 --mpi=none a.out
+</pre>
+<hr size=4 width="100%">
+
+
+<h2><a name="bluegene_mpi" href="http://www.research.ibm.com/bluegene/"><b>BlueGene MPI</b></a></h2>
+
+<p>BlueGene MPI relies upon SLURM to create the resource allocation and then 
+uses the native <span class="commandline">mpirun</span> command to launch tasks. 
+Build a job script containing one or more invocations of the 
+<span class="commandline">mpirun</span> command. Then submit 
+the script to SLURM using <span class="commandline">sbatch</span>.
+For example:</p>
+<pre>
+$ sbatch -N512 my.script
+</pre>
+<p>Note that the node count specified with the <i>-N</i> option indicates
+the base partition count.
+See <a href="bluegene.html">BlueGene User and Administrator Guide</a> 
+for more information.</p>
+<hr size=4 width="100%">
+
+
+<h2><a name="mpich1" href="http://www-unix.mcs.anl.gov/mpi/mpich1/"><b>MPICH1</b></a></h2>
+
+<p>MPICH1 development ceased in 2005. It is recommended that you convert to 
+MPICH2 or some other MPI implementation. 
+If you still want to use MPICH1, note that it has several different 
+programming models. If you are using the shared memory model 
+(<i>DEFAULT_DEVICE=ch_shmem</i> in the mpirun script), then initiate 
+the tasks using the <span class="commandline">srun</span> command 
+with the <i>--mpi=mpich1_shmem</i> option.</p>
+<pre>
+$ srun -n16 --mpi=mpich1_shmem a.out
+</pre>
+
+<p>If you are using MPICH P4 (<i>DEFAULT_DEVICE=ch_p4</i> in 
+the mpirun script) and SLURM version 1.2.11 or newer, 
+then it is recommended that you apply the patch in the SLURM 
+distribution's file <i>contribs/mpich1.slurm.patch</i>. 
+Follow directions within the file to rebuild MPICH. 
+Applications must be relinked with the new library.
+Initiate tasks using the 
+<span class="commandline">srun</span> command with the 
+<i>--mpi=mpich1_p4</i> option.</p>
+<pre>
+$ srun -n16 --mpi=mpich1_p4 a.out
+</pre>
+<p>Note that SLURM launches one task per node and the MPICH 
+library linked within your applications launches the other 
+tasks with shared memory used for communications between them.
+The only real anomaly is that all output from all spawned tasks
+on a node appear to SLURM as coming from the one task that it
+launched. If the srun --label option is used, the task ID labels
+will be misleading.</p>
+ 
+<p>Other MPICH1 programming models current rely upon the SLURM 
+<span class="commandline">salloc</span> or 
+<span class="commandline">sbatch</span> command to allocate resources.
+In either case, specify the maximum number of tasks required for the job.
+You may then need to build a list of hosts to be used and use that 
+as an argument to the mpirun command. 
+For example:
+<pre>
+$ cat mpich.sh
+#!/bin/bash
+srun hostname -s | sort -u >slurm.hosts
+mpirun [options] -machinefile slurm.hosts a.out
+rm -f slurm.hosts
+$ sbatch -n16 mpich.sh
+sbatch: Submitted batch job 1234
+</pre>
+<p>Note that in this example, mpirun uses the rsh command to launch 
+tasks. These tasks are not managed by SLURM since they are launched 
+outside of its control.</p>
+ 
+<p style="text-align:center;">Last modified 2 March 2009</p>
+
+<!--#include virtual="footer.txt"-->
diff --git a/doc/html/mpiplugins.shtml b/doc/html/mpiplugins.shtml
index bffb028a7..96c73e2d8 100644
--- a/doc/html/mpiplugins.shtml
+++ b/doc/html/mpiplugins.shtml
@@ -34,7 +34,7 @@ srun calls
 <br>
 <i>mpi_p_thr_create((srun_job_t *)job);</i>
 <br>
-which will set up the correct enviornment for the specified mpi.
+which will set up the correct environment for the specified mpi.
 <br>
 slurmd daemon runs
 <br>
@@ -48,7 +48,7 @@ which will set configure the slurmd to use the correct mpi as well to interact w
 <h2>Data Objects</h2>
 <p> These functions are expected to read and/or modify data structures directly in 
 the slurmd daemon's and srun memory. Slurmd is a multi-threaded program with independent 
-read and write locks on each data structure type. Thererfore the type of operations 
+read and write locks on each data structure type. Therefore the type of operations 
 permitted on various data structures is identified for each function.</p>
 
 <p class="footer"><a href="#top">top</a></p>
@@ -63,14 +63,14 @@ to that of the correct mpi.</p>
 <p style="margin-left:.2in"><b>Arguments</b>:<br><span class="commandline"> job</span>&nbsp; 
 &nbsp;&nbsp;(input) Pointer to the slurmd_job that is running.  Cannot be NULL.<br>
 <span class="commandline"> rank</span>&nbsp;
-&nbsp;&nbsp;(input) Primarially there for MVAPICH.  Used to send the rank fo the mpirun job. 
+&nbsp;&nbsp;(input) Primarily there for MVAPICH.  Used to send the rank fo the mpirun job. 
 This can be 0 if no rank information is needed for the mpi type.</p>
 <p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure, 
 the plugin should return SLURM_ERROR.</p>
 
 <p class="commandline">int mpi_p_thr_create (srun_job_t *job);</p>
 <p style="margin-left:.2in"><b>Description</b>: Used by srun to spawn the thread for the mpi processes. 
-Most all the real proccessing happens here.</p>
+Most all the real processing happens here.</p>
 <p style="margin-left:.2in"><b>Arguments</b>:<span class="commandline"> job</span>&nbsp; 
 &nbsp;&nbsp;(input) Pointer to the srun_job that is running.  Cannot be NULL.</p>
 <p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure, 
diff --git a/doc/html/news.shtml b/doc/html/news.shtml
index 432b09786..92b765f7f 100644
--- a/doc/html/news.shtml
+++ b/doc/html/news.shtml
@@ -4,68 +4,13 @@
 
 <h2>Index</h2>
 <ul>
-<li><a href="#11">SLURM Version 1.1, May 2006</a></li>
-<li><a href="#12">SLURM Version 1.2, February 2007</a></li>
 <li><a href="#13">SLURM Version 1.3, March 2008</a></li>
-<li><a href="#14">SLURM Version 1.4 and beyond</a></li>
-</ul>
-
-<h2><a name="11">Major Updates in SLURM Version 1.1</a></h2>
-<p>SLURM Version 1.1 became available in May 2006.
-Major enhancements include:
-<ul>
-<li>Communications enhancements, validated up to 16,384 node clusters.</li>
-<li>File broadcast support (new <i>sbcast</i> command).</li>
-<li>Support for distinct executables and arguments by task ID
-(see <i>srun --multi-prog</i> option).</li>
-<li>Support for binding tasks to the memory on a processor.</li>
-<li>The configuration parameter <i>HeartbeatInterval</i> is defunct.
-Half the values of configuration parameters <i>SlurmdTimeout</i> and 
-<i>SlurmctldTimeout</i> are used as the commununication frequency for 
-the slurmctld and slurmd daemons respecitively.</li>
-<li>Support for PAM to control resource limits by user on each 
-compute node used. See <i>UsePAM</i> configuration parameter.</li>
-<li>Support added for <i>xcpu</i> job launch.</li>
-<li>Add support for 1/16 midplane BlueGene blocks.</li>
-<li>Add support for overlapping BlueGene blocks.</li>
-<li>Add support for dynamic BlueGene block creation on demand.</li>
-<li>BlueGene node count specifications are now c-node counts
-rather than base partition counts.</li>
-</ul>
-
-<h2><a name="12">Major Updates in SLURM Version 1.2</a></h2>
-<p>SLURM Version 1.2 became available in February 2007.
-Major enhancements include:
-<ul>
-<li>More complete support for resource management down to the core level
-on a node.</li>
-<li>Treat memory as a consumable resource on a compute node.</li>
-<li>New graphical user interface provided, <i>sview</i>.</li>
-<li>Added support for OS X.</li>
-<li>Permit batch jobs to be requeued.</li>
-<li>Expanded support of Moab and Maui schedulers.</li>
-<li><i>Srun</i> command augmented by new commands for each operation:
-<i>salloc</i>, <i>sbatch</i>, and <i>sattach</i>.</li>
-<li>Sched/wiki plugin (for Moab and Maui Schedulers) rewritten to 
-provide vastly improved integration.</li>
-<li>BlueGene plugin permits use of different boot images per job 
-specification.</li>
-<li>Event trigger mechanism added with new tool <i>strigger</i>.</li>
-<li>Added support for task binding to CPUs or memory via <i>cpuset</i>
-mechanism.</li>
-<li>Added support for configurable 
-<a href="power_save.html">power savings</a> on idle nodes.</li>
-<li>Support for MPICH-MX, MPICH1/shmem and MPICH1/p4 added with 
-task launch directly from the <i>srun</i> command.</li>
-<li>Wrappers available for common Torque/PBS commands 
-(<i>psub</i>, <i>pstat</i>, and <i>pbsnodes</i>).</li>
-<li>Support for <a href="http://www-unix.globus.org/">Globus</a> 
-(using Torque/PBS command wrappers).</li>
-<li>Wrapper available for <i>mpiexec</i> command.</li>
+<li><a href="#20">SLURM Version 2.0, May 2009</a></li>
+<li><a href="#21">SLURM Version 2.1 and beyond</a></li>
 </ul>
 
 <h2><a name="13">Major Updates in SLURM Version 1.3</a></h2>
-<p>SLURM Version 1.3 was relased in March 2008.
+<p>SLURM Version 1.3 was released in March 2008.
 Major enhancements include:
 <ul>
 <li>Job accounting and completion data can be stored in a database 
@@ -76,27 +21,64 @@ database support across multiple clusters.</li>
 without an external scheduler).</li>
 <li>Cryptography logic moved to a separate plugin with the 
 option of using OpenSSL (default) or Munge (GPL).</li>
-<li>Improved scheduling of multple job steps within a job's allocation.</li>
+<li>Improved scheduling of multiple job steps within a job's allocation.</li>
 <li>Support for job specification of node features with node counts.</li> 
 <li><i>srun</i>'s --alloc, --attach, and --batch options removed (use 
 <i>salloc</i>, <i>sattach</i> or <i>sbatch</i> commands instead).</li>
-<li><i>srun --pty</i> option added to support remote pseudo terminial for 
+<li><i>srun --pty</i> option added to support remote pseudo terminal for 
 spawned tasks.</li>
 <li>Support added for a much richer job dependency specification
 including testing of exit codes and multiple dependencies.</li>
+<li>Support added for BlueGene/P systems and HTC (High Throughput
+Computing) mode.</li>
+</ul>
+
+<h2><a name="20">Major Updates in SLURM Version 2.0</a></h2>
+<p>SLURM Version 2.0 is scheduled for released in May 2009.
+Major enhancements include:
+<ul>
+<li>Sophisticated <a href="priority_multifactor.html">job prioritization 
+plugin</a> is now available. 
+Jobs can be prioritized based upon their age, size and/or fair-share resource 
+allocation using hierarchical bank accounts.</li>
+<li>An assortment of <a href="resource_limits.html">resource limits</a> 
+can be imposed upon individual users and/or hierarchical bank accounts 
+such as maximum job time limit, maximum job size, and maximum number of 
+running jobs.</li>
+<li><a href="reservations.html">Advanced reservations</a> can be made to 
+insure resources will be available when needed.</li>
+<li>Idle nodes can now be completely <a href="power_save.html">powered 
+down</a> when idle and automatically restarted when their is work 
+available.</li>
+<li>Jobs in higher priority partitions (queues) can automatically 
+<a href="preempt.html">preempt</a> jobs in lower priority queues. 
+The preempted jobs will automatically resume execution upon completion 
+of the higher priority job.</li>
+<li>Specific cores are allocated to jobs and jobs steps in order to effective 
+preempt or gang schedule jobs.</li>
+<li>A new configuration parameter, <i>PrologSlurmctld</i>, can be used to 
+support the booting of different operating systems for each job.</li>
+<li>Added switch topology configuration options to optimize job resource 
+allocation with respect to communication performance.</li>
+<li>Automatic <a href="checkpoint_blcr.html">Checkpoint/Restart using BRCR</a> 
+is now available.</li>
 </ul>
 
-<h2><a name="14">Major Updates in SLURM Version 1.4 and beyond</a></h2>
+<h2><a name="21">Major Updates in SLURM Version 2.1 and beyond</a></h2>
 <p> Detailed plans for release dates and contents of future SLURM releases have 
 not been finalized. Anyone desiring to perform SLURM development should notify
 <a href="mailto:slurm-dev@lists.llnl.gov">slurm-dev@lists.llnl.gov</a>
-to coordinate activies. Future development plans includes:
+to coordinate activities. Future development plans includes:
 <ul>
+<li>Optimized resource allocation based upon network topology (e.g.
+hierarchical switches).</li>
+<li>Modify more SLURM commands to operate between clusters.</li>
+<li>Support for BlueGene/Q systems.</li>
 <li>Permit resource allocations (jobs) to change size.</li>
 <li>Add Kerberos credential support including credential forwarding 
 and refresh.</li>
 </ul>
 
-<p style="text-align:center;">Last modified 11 March 2008</p>
+<p style="text-align:center;">Last modified 5 March 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/overview.shtml b/doc/html/overview.shtml
index 06c2270e5..614ee3af7 100644
--- a/doc/html/overview.shtml
+++ b/doc/html/overview.shtml
@@ -1,6 +1,7 @@
 <!--#include virtual="header.txt"-->
 
 <h1><a name="top">Overview</a></h1>
+
 <p>The Simple Linux Utility for Resource Management (SLURM) is an open source,
 fault-tolerant, and highly scalable cluster management and job scheduling system 
 for large and small Linux clusters. SLURM requires no kernel modifications for
@@ -8,15 +9,24 @@ its operation and is relatively self-contained. As a cluster resource manager,
 SLURM has three key functions. First, it allocates exclusive and/or non-exclusive 
 access to resources (compute nodes) to users for some duration of time so they
 can perform work. Second, it provides a framework for starting, executing, and
-monitoring work (normally a parallel job) on the set of allocated nodes. Finally, 
-it arbitrates contention for resources by managing a queue of pending work.</p>
+monitoring work (normally a parallel job) on the set of allocated nodes. 
+Finally, it arbitrates contention for resources by managing a queue of 
+pending work.
+Optional plugins can be used for 
+<a href="accounting.html">accounting</a>, 
+<a href="reservations.html">advanced reservation</a>, 
+<a href="gang_scheduling.html">gang scheduling</a> (time sharing for 
+parallel jobs), backfill scheduling, 
+<a href="resource_limits.html">resource limits</a> by user or bank account, 
+and sophisticated <a href="priority_multifactor.html"> multifactor job
+  prioritization</a> algorithms.
+
 
 <p>SLURM has been developed through the collaborative efforts of 
 <a href="https://www.llnl.gov/">Lawrence Livermore National Laboratory (LLNL)</a>,
 <a href="http://www.hp.com/">Hewlett-Packard</a>, 
 <a href="http://www.bull.com/">Bull</a>,
-<a href="http://www.lnxi.com/">Linux NetworX</a> and many other contributors.
-HP distributes and supports SLURM as a component in their XC System Software.</p>
+Linux NetworX and many other contributors.</p>
 
 <h2>Architecture</h2>
 <p>SLURM has a centralized manager, <b>slurmctld</b>, to monitor resources and 
@@ -24,18 +34,22 @@ work. There may also be a backup manager to assume those responsibilities in the
 event of failure. Each compute server (node) has a <b>slurmd</b> daemon, which 
 can be compared to a remote shell: it waits for work, executes that work, returns 
 status, and waits for more work. 
-The <b>slurmd</b> daemons provide fault-tolerant hierarchical communciations.
+The <b>slurmd</b> daemons provide fault-tolerant hierarchical communications.
 There is an optional <b>slurmdbd</b> (Slurm DataBase Daemon) which can be used
 to record accounting information for multiple Slurm-managed clusters in a 
 single database.
 User tools include <b>srun</b> to initiate jobs, 
-<b>scancel</b> to terminate queued or running jobs, <b>sinfo</b> to report system 
-status, <b>squeue</b> to report the status of jobs, <b>sacct</b> to get information 
-about jobs and job steps that are running or have completed. 
+<b>scancel</b> to terminate queued or running jobs, 
+<b>sinfo</b> to report system status, 
+<b>squeue</b> to report the status of jobs, and 
+<b>sacct</b> to get information about jobs and job steps that are running or have completed.
 The <b>smap</b> and <b>sview</b> commands graphically reports system and 
-job status including network topology. There is also an administrative 
-tool <b>scontrol</b> available to monitor and/or modify configuration and state 
-information. APIs are available for all functions.</p>
+job status including network topology. 
+There is an administrative tool <b>scontrol</b> available to monitor 
+and/or modify configuration and state information on the cluster. 
+The administrative tool used to manage the database is <b>sacctmgr</b>.
+It can be used to identify the clusters, valid users, valid bank accounts, etc.
+APIs are available for all functions.</p>
 
 <div class="figure">
   <img src="arch.gif" width="550"><br>
@@ -46,41 +60,61 @@ information. APIs are available for all functions.</p>
 infrastructures. This permits a wide variety of SLURM configurations using a 
 building block approach. These plugins presently include: 
 <ul>
+<li><a href="accounting_storageplugins.html">Accounting Storage</a>: 
+text file (default if jobacct_gather != none), 
+MySQL, PGSQL, SlurmDBD (Slurm Database Daemon) or none</li>
+
 <li><a href="authplugins.html">Authentication of communications</a>: 
 <a href="http://www.theether.org/authd/">authd</a>, 
 <a href="http://home.gna.org/munge/">munge</a>, or none (default).</li>
 
 <li><a href="checkpoint_plugins.html">Checkpoint</a>: AIX, OpenMPI, XLCH, or none.</li>
-<li><a href="crypto_plugins.html">Cryptography</a>: Munge or OpenSSL</li>
-<li><a href="jobacct_gatherplugins.html">Job Accounting Gather</a>: AIX, Linux, or none(default)</li>
 
-<li><a href="accounting_storageplugins.html">Accounting Storage</a>: 
-text file (default if jobacct_gather != none), 
-MySQL, PGSQL, SlurmDBD (Slurm Database Daemon) or none</li>
+<li><a href="crypto_plugins.html">Cryptography (Digital Signature Generation)</a>: 
+<a href="http://home.gna.org/munge/">munge</a> (default) or
+<a href="http://www.openssl.org/">OpenSSL</a>.</li>
+
+<li><a href="jobacct_gatherplugins.html">Job Accounting Gather</a>: AIX, Linux, or none(default)</li>
 
-<li><a href="jobcompplugins.html">Job completion logging</a>: 
+<li><a href="jobcompplugins.html">Job Completion Logging</a>: 
 text file, arbitrary script, MySQL, PGSQL, SlurmDBD, or none (default).</li>
 
 <li><a href="mpiplugins.html">MPI</a>: LAM, MPICH1-P4, MPICH1-shmem,
 MPICH-GM, MPICH-MX, MVAPICH, OpenMPI and none (default, for most 
 other versions of MPI including MPICH2 and MVAPICH2).</li>
 
-<li><a href="selectplugins.html">Node selection</a>: 
-Bluegene (a 3-D torus interconnect BGL or BGP), 
-<a href="cons_res.html">consumable resources</a> (to allocate 
-individual processors and memory) or linear (to dedicate entire nodes).</li>
+<li><a href="priority_plugins.html">Priority</a>:
+Assigns priorities to jobs as they arrive.
+Options include 
+<a href="priority_multifactor.html">multifactor job prioritization</a>
+(assigns job priority based upon fair-share allocate, size, age, QoS, and/or partition) and
+basic (assigns job priority based upon age for First In First Out ordering, default).</li>
 
 <li><a href="proctrack_plugins.html">Process tracking (for signaling)</a>: 
 AIX (using a kernel extension), Linux process tree hierarchy, process group ID, 
 RMS (Quadrics Linux kernel patch),
 and <a href="http://oss.sgi.com/projects/pagg/">SGI's Process Aggregates (PAGG)</a>.</li>
 
+<li><a href="selectplugins.html">Node selection</a>: 
+Bluegene (a 3-D torus interconnect BGL or BGP), 
+<a href="cons_res.html">consumable resources</a> (to allocate 
+individual processors and memory) or linear (to dedicate entire nodes).</li>
+
 <li><a href="schedplugins.html">Scheduler</a>: 
-FIFO (First In First Out, default), backfill, gang (time-slicing for parallel jobs),
+builtin (First In First Out, default), 
+backfill (starts jobs early if doing so does not delay the expected initiation
+time of any higher priority job), 
+gang (time-slicing for parallel jobs),
 <a href="http://www.clusterresources.com/pages/products/maui-cluster-scheduler.php">
 The Maui Scheduler</a>, and  
 <a href="http://www.clusterresources.com/pages/products/moab-cluster-suite.php">
 Moab Cluster Suite</a>.
+There is also a <a href="priority_multifactor.html">multifactor job
+prioritization</a> plugin 
+available for use with the basic, backfill and gang schedulers only. 
+Jobs can be prioritized by age, size, fair-share allocation, etc.
+Many <a href="resource_limits.html">resource limits</a> are also 
+configurable by user or bank account.</li>
 
 <li><a href="switchplugins.html">Switch or interconnect</a>: 
 <a href="http://www.quadrics.com/">Quadrics</a> 
@@ -89,6 +123,15 @@ Federation
 <a href="http://publib-b.boulder.ibm.com/Redbooks.nsf/f338d71ccde39f08852568dd006f956d/55258945787efc2e85256db00051980a?OpenDocument">Federation</a> (IBM High Performance Switch), 
 or none (actually means nothing requiring special handling, such as Ethernet or 
 <a href="http://www.myricom.com/">Myrinet</a>, default).</li>
+
+<li><a href="taskplugins.html">Task Affinity</a>:
+Affinity (bind tasks to processors or CPU sets) or none (no binding, the default).</li>
+
+<li><a href="topology_plugin.html">Network Topology</a>:
+3d_torus (optimize resource selection based upon a 3d_torus interconnect, default for Cray XT, Sun Constellation and IBM BlueGene), 
+tree (optimize resource selection based upon switch connections) or
+none (the default).</li>
+
 </ul>
 
 <p>The entities managed by these SLURM daemons, shown in Figure 2, include <b>nodes</b>,
@@ -146,7 +189,6 @@ SlurmdPort=7003
 SlurmdSpoolDir=/var/tmp/slurmd.spool
 SlurmdTimeout=120
 StateSaveLocation=/usr/local/slurm/slurm.state
-SwitchType=switch/elan
 TmpFS=/tmp
 #
 # Node Configurations
@@ -166,6 +208,6 @@ PartitionName=DEFAULT MaxTime=UNLIMITED MaxNodes=4096
 PartitionName=batch Nodes=lx[0041-9999]
 </pre>
 
-<p style="text-align:center;">Last modified 11 March 2008</p>
+<p style="text-align:center;">Last modified 31 March 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/plane_ex5.gif b/doc/html/plane_ex5.gif
index 5c466a8e85fa260b5f27eb5fed6ecb40eb0a99dd..ce8f9e7e0438d681b87ce4ad484d6cb8286486b0 100755
GIT binary patch
literal 53486
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

literal 8653
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

diff --git a/doc/html/platforms.shtml b/doc/html/platforms.shtml
index c2a83ce31..ee1a60a54 100644
--- a/doc/html/platforms.shtml
+++ b/doc/html/platforms.shtml
@@ -6,13 +6,16 @@
 <li><b>AIX</b>&#151;SLURM support for AIX has been thoroughly tested.</li>
 <li><b>Linux</b>&#151;SLURM has been thoroughly tested on most popular Linux 
 distributions using i386, ia64, and x86_64 architectures.</li>
-<li><b>OS X</b>&#151;SLURM support for OS X is available in version 1.2.</li>
+<li><b>OS X</b>&#151;SLURM support for OS X is available.</li>
 <li><b>Other</b>&#151;SLURM ports to other systems will be gratefully accepted.</li>
 </ul>
 <h2>Interconnects</h2>
 <ul>
-<li><b>Blue Gene</b>&#151;SLURM support for IBM's Blue Gene system has been
-thoroughly tested.</li>
+<li><b>BlueGene</b>&#151;SLURM support for IBM's BlueGene/L and BlueGene/P 
+systems has been thoroughly tested.</li>
+<li><b>Cray XT</b>&#151;Much of the infrastructure to support a Cray XT
+system is current in SLURM. The interface to ALPS/BASIL remains to be done.
+Please contact us if you would be interested in this work.</li>
 <li><b>Ethernet</b>&#151;Ethernet requires no special support from SLURM and has 
 been thoroughly tested.</li>
 <li><b>IBM Federation</b>&#151;SLURM support for IBM's Federation Switch 
@@ -21,9 +24,11 @@ has been thoroughly tested.</li>
 <li><b>Myrinet</b>&#151;Myrinet, MPICH-GM and MPICH-MX are supported.</li>
 <li><b>Quadrics Elan</b>&#151;SLURM support for Quadrics Elan 3 and Elan 4 switches 
 are available in all versions of SLURM and have been thoroughly tested.</li>
+<li><b>Sun Constellation</b>&#151;Resource allocation has been optimized
+for the three-dimensional torus interconnect.</li>
 <li><b>Other</b>&#151;SLURM ports to other systems will be gratefully accepted.</li>
 </ul>
 
-<p style="text-align:center;">Last modified 15 June 2007</p>
+<p style="text-align:center;">Last modified 9 February 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/plugins.shtml b/doc/html/plugins.shtml
index 7e0c45c5f..f1c9dcb53 100644
--- a/doc/html/plugins.shtml
+++ b/doc/html/plugins.shtml
@@ -101,7 +101,7 @@ are not available, so it is the installer's job to make sure the specified libra
 are available.</p>
 <h2>Performance</h2>
 <p>All plugin functions are expected to execute very quickly. If any function 
-entails delays (e.g. transations with other systems), it should be written to 
+entails delays (e.g. transactions with other systems), it should be written to 
 utilize a thread for that functionality. This thread may be created by the 
 <span class="commandline">init()</span> function and deleted by the 
 <span class="commandline">fini()</span> functions. See <b>plugins/sched/backfill</b>
diff --git a/doc/html/power_save.shtml b/doc/html/power_save.shtml
index 0f4a8de48..763584b42 100644
--- a/doc/html/power_save.shtml
+++ b/doc/html/power_save.shtml
@@ -1,20 +1,18 @@
 <!--#include virtual="header.txt"-->
 
 <h1>Power Saving Guide</h1>
-<p>SLURM provides an integrated power saving mechanism beginning with 
-version 1.2.7.
+
+<p>SLURM provides an integrated power saving mechanism for idle nodes.
 Nodes that remain idle for an configurable period of time can be placed 
 in a power saving mode. 
 The nodes will be restored to normal operation once work is assigned to them.
-Power saving is accomplished using a <i>cpufreq</i> governor that can change
-CPU frequency and voltage.
-Note that the <i>cpufreq</i> driver must be enabled in the Linux kernel 
-configuration. 
-While the "ondemand" governor can be configured to operate at all
-times to automatically alter the CPU performance based upon workload, 
-SLURM provides somewhat greater flexibility for power management on a
-cluster. 
-Of particular note, SLURM can alter the governors across the cluster
+Beginning with version 2.0.0, nodes can be fully powered down.
+Earlier releases of SLURM do not support the powering down of nodes, 
+only support of reducing their performance and thus their power consumption.
+For example, power saving can be accomplished using a <i>cpufreq</i> governor 
+that can change CPU frequency and voltage (note that the <i>cpufreq</i> driver
+must be enabled in the Linux kernel configuration).
+Of particular note, SLURM can power nodes up or down 
 at a configurable rate to prevent rapid changes in power demands. 
 For example, starting a 1000 node job on an idle cluster could result 
 in an instantaneous surge in power demand of multiple megawatts without 
@@ -22,14 +20,21 @@ SLURM's support to increase power demands in a gradual fashion.</p>
 
 
 <h2>Configuration</h2>
+
 <p>A great deal of flexibility is offered in terms of when and 
-how idle nodes are put into or removed from power save mode.
-The following configuration paramters are available:
+how idle nodes are put into or removed from power save mode. 
+Note that the SLURM control daemon, <i>slurmctld</i>, must be 
+restarted to initially enable power saving mode. 
+Changes in the configuration parameters (e.g. <i>SuspendTime</i>)
+will take effect after modifying the <i>slurm.conf</i> configuration
+file and executing "<i>scontrol reconfig</i>".
+The following configuration parameters are available:
 <ul>
 
 <li><b>SuspendTime</b>:
-Nodes becomes elligible for power saving mode after being idle 
+Nodes becomes eligible for power saving mode after being idle 
 for this number of seconds. 
+The configured value should exceed the time to suspend and resume a node.
 A negative number disables power saving mode.
 The default value is -1 (disabled).</li>
 
@@ -41,11 +46,11 @@ The default value is 60.
 Use this to prevent rapid drops in power requirements.</li>
 
 <li><b>ResumeRate</b>:
-Maximum number of nodes to be placed into power saving mode 
+Maximum number of nodes to be removed from power saving mode 
 per minute. 
 A value of zero results in no limits being imposed.
-The default value is 60.
-Use this to prevent rapid increasses in power requirements.</li>
+The default value is 300.
+Use this to prevent rapid increases in power requirements.</li>
 
 <li><b>SuspendProgram</b>:
 Program to be executed to place nodes into power saving mode.
@@ -61,7 +66,31 @@ The program executes as <i>SlurmUser</i> (as configured in
 <i>slurm.conf</i>). 
 The argument to the program will be the names of nodes to 
 be removed from power savings mode (using SLURM's hostlist 
-expression format).</li>
+expression format).
+This program may use the <i>scontrol show node</i> command
+to insure that a node has booted and the <i>slurmd</i> 
+daemon started. 
+If the <i>slurmd</i> daemon fails to respond within the
+configured <b>SlurmdTimeout</b> value, the node will be 
+placed in a DOWN state and the job requesting the node
+will be requeued.
+For reasons of reliability, <b>ResumeProgram</b> may execute 
+more than once for a node when the <b>slurmctld</b> daemon 
+crashes and is restarted.</li>
+
+<li><b>SuspendTimeout</b>:
+Maximum time permitted (in second) between when a node suspend request 
+is issued and when the node shutdown is complete. 
+At that time the node must ready for a resume request to be issued 
+as needed for new workload.  
+The default value is 30 seconds.</li>
+
+<li><b>ResumeTimeout</b>:
+Maximum time permitted (in second) between when a node resume request 
+is issued and when the node is actually available for use. 
+Nodes which fail to respond in this time frame may be marked DOWN and
+the jobs scheduled on the node requeued.
+The default value is 60 seconds.</li>
 
 <li><b>SuspendExcNodes</b>:
 List of nodes to never place in power saving mode. 
@@ -74,35 +103,57 @@ Multiple partitions may be specified using a comma separator.
 By default, no nodes are excluded.</li>
 </ul></p>
 
-<p>While <i>SuspendProgram</i> and <i>ResumeProgram</i> execute as 
-<i>SlurmUser</i>. The program can take advantage of this to execute 
-programs directly on the nodes as user <i>root</i> through the 
-SLURM infrastructure.
-Example scripts are shown below:
+<p>Note that <i>SuspendProgram</i> and <i>ResumeProgram</i> execute as 
+<i>SlurmUser</i> on the node where the <i>slurmctld</i> daemon runs
+(primary and backup server nodes). 
+Use of <i>sudo</i> may be required for <i>SlurmUser</i>to power down 
+and restart nodes.
+If you need to convert SLURM's hostlist expression into individual node
+names, the <i>scontrol show hostnames</i> command may prove useful.
+The commands used to boot or shut down nodes will depend upon your
+cluster management tools.</p>
+
+<p>Note that <i>SuspendProgram</i> and <i>ResumeProgram</i> are not 
+subject to any time limits.
+They should perform the required action, ideally verify the action
+(e.g. node boot and start the <i>slurmd</i> daemon, thus the node is
+no longer non-responsive to <i>slurmctld</i>) and terminate. 
+Long running programs will be logged by <i>slurmctld</i>, but not
+aborted.</p>
+
 <pre>
 #!/bin/bash
-# Example SuspendProgram for cluster where every node has two CPUs
-srun --uid=0 --no-allocate --nodelist=$1 echo powersave >/sys/devices/system/cpu0/cpufreq
-srun --uid=0 --no-allocate --nodelist=$1 echo powersave >/sys/devices/system/cpu1/cpufreq
+# Example SuspendProgram
+hosts=`scontrol show hostnames $1`
+for host in "$hosts"
+do
+   sudo node_shutdown $host
+done
 
 #!/bin/bash
-# Example ResumeProgram for cluster where every node has two CPUs
-srun --uid=0 --no-allocate --nodelist=$1 echo performance >/sys/devices/system/cpu0/cpufreq
-srun --uid=0 --no-allocate --nodelist=$1 echo performance >/sys/devices/system/cpu1/cpufreq
+# Example ResumeProgram
+hosts=`scontrol show hostnames $1`
+for host in "$hosts"
+do
+   sudo node_startup $host
+done
 </pre>
 
-<p>The srun --no-allocate option permits SlurmUser and user root only to spawn 
-tasks directly on the compute nodes without actually creating a SLURM job. 
-No other users have this permission (their requests will generate an invalid 
-credential error message and the event will be logged).
-The srun --uid option permits SlurmUser and user root only to execute a job 
-as some other user. 
-Then SlurmUser uses the srun --uid option, the srun command will try to set 
-its user ID to that value in order to fully operate as the specified user.
-This will fail and srun will report an error to that effect. 
-This does not prevent the spawned programs from running as user root.
-No other users have this permission (their requests will generate an invalid 
-user id error message and the event will be logged).</p>
+<p>Subject to the various rates, limits and exclusions, the power save 
+code follows this logic:
+<ol>
+<li>Identifiy nodes which have been idle for at least <b>SuspendTime</b>.</li>
+<li>Execute <b>SuspendProgram</b> with an argument of the idle node names.</li>
+<li>Identify the nodes which are in power save mode (a flag in the node's 
+state field), but have been allocated to jobs.</li>
+<li>Execute <b>ResumeProgram</b> with an argument of the allocated node names.</li>
+<li>Once the <i>slurmd</i> responds, initiate the job and/or job steps 
+allocated to it.</li>
+<li>If the <i>slurmd</i> fails to respond within the value configured for 
+<b>SlurmdTimeout</b>, the node will be marked DOWN and the job requeued
+if possible.</li>
+<li>Repeat indefinitely.</li>
+</ol></p>
 
 <p>The slurmctld daemon will periodically (every 10 minutes) log how many 
 nodes are in power save mode using messages of this sort:
@@ -113,10 +164,61 @@ nodes are in power save mode using messages of this sort:
 ...
 [May 02 15:51:28] Power save mode 22 nodes
 </pre>
-<p>Using these logs you can easily see the effect of SLURM's power saving support.
-You can also configure SLURM without SuspendProgram or ResumeProgram values
-to assess the potential impact of power saving mode before enabling it.</p>
 
-<p style="text-align:center;">Last modified 14 May 2007</p>
+<p>Using these logs you can easily see the effect of SLURM's power saving 
+support.
+You can also configure SLURM with programs that perform no aciton as <b>SuspendProgram</b> and <b>ResumeProgram</b> to assess the potential 
+impact of power saving mode before enabling it.</p>
+
+<h2>Use of Allocations</h2>
+
+<p>A resource allocation request will be granted as soon as resources
+are selected for use, possibly before the nodes are all available 
+for use.
+The launching of job steps will be delayed until the required nodes 
+have been restored to service (it prints a warning about waiting for
+nodes to become available and periodically retries until they are 
+available).</p>
+
+<p>In the case of an <i>sbatch</i> command, the batch program will start
+when node zero of the allocation is ready for use and pre-processing can
+be performed as needed before using <i>srun</i> to launch job steps.
+The operation of <i>salloc</i> and <i>srun</i> follow a similar pattern 
+of getting an job allocation at one time, but possibly being unable to 
+launch job steps until later. 
+If <i>ssh</i> or some other tools is used by <i>salloc</i> it may be
+desirable to execute "<i>srun /bin/true</i>" or some other command
+first to insure that all nodes are booted and ready for use. 
+We plan to add a job and node state of <i>CONFIGURING</i> in SLURM
+version 2.1, which could be used to prevent salloc from executing
+any processes (including <i>ssh</i>) until all of the nodes are 
+ready for use.</p>
+
+<h2>Fault Tolerance</h2>
+
+<p>If the <i>slurmctld</i> daemon is terminated gracefully, it will
+wait up to <b>SuspendTimeout</b> or <b>ResumeTimeout</b> (whichever
+is larger) for any spawned <b>SuspendProgram</b> or 
+<b>ResumeProgram</b> to terminate before the daemon terminates. 
+If the spawned program does not terminate within that time period, 
+the event will be logged and <i>slurmctld</i> will exit in order to 
+permit another <i>slurmctld</i> daemon to be initiated.
+Syncrhonization problems could also occur when the <i>slurmctld</i> 
+daemon crashes (a rare event) and is restarted. </p>
+
+<p>In either event, the newly initiated <i>slurmctld</i> daemon (or 
+the backup server) will recover saved node state information that 
+may not accurately describe the actual node state.
+In the case of a failed <b>SuspendProgram</b>, the negative impact is 
+limited to increased power consumption, so no special action is 
+currently taken to execute <b>SuspendProgram</b> multiple times in 
+order to insure the node is in a reduced power mode.
+The case of a failed <b>ResumeProgram</b> is more serious in that the 
+node could be placed into a DOWN state and/or jobs could fail.
+In order to minimize this risk, when the <i>slurmctld</i> daemon is 
+started and node which should be allocated to a job fails to respond, 
+the <b>ResumeProgram</b> will be executed (possibly for a second time).</p>
+
+<p style="text-align:center;">Last modified 2 June 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/preempt.shtml b/doc/html/preempt.shtml
index 2f9bd34df..ed7dc289d 100644
--- a/doc/html/preempt.shtml
+++ b/doc/html/preempt.shtml
@@ -1,248 +1,297 @@
-<!--#include virtual="header.txt"-->
-
-<H1>Preemption</H1>
-
-<P>
-SLURM version 1.2 and earlier supported dedication of resources
-to jobs based on a simple "first come, first served" policy with backfill.
-Beginning in SLURM version 1.3, priority-based <I>preemption</I> is supported. 
-Preemption is the act of suspending one or more "low-priority" jobs to let a
-"high-priority" job run uninterrupted until it completes. Preemption provides
-the ability to prioritize the workload on a cluster.
-</P>
-<P>
-The SLURM version 1.3.1 <I>sched/gang</I> plugin supports preemption. 
-When configured, 
-the plugin monitors each of the partitions in SLURM. If a new job in a
-high-priority partition has been allocated to resources that have already been
-allocated to one or more existing jobs from lower priority partitions, the
-plugin respects the partition priority and suspends the low-priority job(s). The
-low-priority job(s) remain suspended until the job from the high-priority
-partition completes. Once the high-priority job completes then the low-priority
-job(s) are resumed.
-</P>
-
-<H2>Configuration</H2>
-<P>
-There are several important configuration parameters relating to preemption:
-</P>
-<UL>
-<LI>
-<B>SelectType</B>: The SLURM <I>sched/gang</I> plugin supports nodes 
-allocated by the <I>select/linear</I> plugin and socket/core/CPU resources 
-allocated by the <I>select/cons_res</I> plugin. 
-See <A HREF="#future_work">Future Work</A> below for more
-information on "preemption with consumable resources".
-</LI>
-<LI>
-<B>SelectTypeParameter</B>: Since resources will be getting overallocated 
-with jobs (the preempted job will remain in memory), the resource selection
-plugin should be configured to track the amount of memory used by each job to
-ensure that memory page swapping does not occur. When <I>select/linear</I> is
-chosen, we recommend setting <I>SelectTypeParameter=CR_Memory</I>. When
-<I>select/cons_res</I> is chosen, we recommend including Memory as a resource
-(ex. <I>SelectTypeParameter=CR_Core_Memory</I>).
-</LI>
-<LI>
-<B>DefMemPerCPU</B>: Since job requests may not explicitly specify 
-a memory requirement, we also recommend configuring 
-<I>DefMemPerCPU</I> (default memory per allocated CPU) or 
-<I>DefMemPerNode</I> (default memory per allocated node). 
-It may also be desirable to configure 
-<I>MaxMemPerCPU</I> (maximum memory per allocated CPU) or 
+<!--#include virtual="header.txt"-->
+
+<H1>Preemption</H1>
+
+<P>
+SLURM version 1.2 and earlier supported dedication of resources
+to jobs based on a simple "first come, first served" policy with backfill.
+Beginning in SLURM version 1.3, priority partitions and priority-based
+<I>preemption</I> are supported. Preemption is the act of suspending one or more
+"low-priority" jobs to let a "high-priority" job run uninterrupted until it
+completes. Preemption provides the ability to prioritize the workload on a
+cluster.
+</P>
+<P>
+The SLURM version 1.3.1 <I>sched/gang</I> plugin supports preemption. 
+When configured, 
+the plugin monitors each of the partitions in SLURM. If a new job in a
+high-priority partition has been allocated to resources that have already been
+allocated to one or more existing jobs from lower priority partitions, the
+plugin respects the partition priority and suspends the low-priority job(s). The
+low-priority job(s) remain suspended until the job from the high-priority
+partition completes. Once the high-priority job completes then the low-priority
+job(s) are resumed.
+</P>
+
+<H2>Configuration</H2>
+<P>
+There are several important configuration parameters relating to preemption:
+</P>
+<UL>
+<LI>
+<B>SelectType</B>: The SLURM <I>sched/gang</I> plugin supports nodes 
+allocated by the <I>select/linear</I> plugin and socket/core/CPU resources 
+allocated by the <I>select/cons_res</I> plugin.
+</LI>
+<LI>
+<B>SelectTypeParameter</B>: Since resources will be getting overallocated 
+with jobs (suspended jobs remain in memory), the resource selection
+plugin should be configured to track the amount of memory used by each job to
+ensure that memory page swapping does not occur. When <I>select/linear</I> is
+chosen, we recommend setting <I>SelectTypeParameter=CR_Memory</I>. When
+<I>select/cons_res</I> is chosen, we recommend including Memory as a resource
+(ex. <I>SelectTypeParameter=CR_Core_Memory</I>).
+</LI>
+<LI>
+<B>DefMemPerCPU</B>: Since job requests may not explicitly specify 
+a memory requirement, we also recommend configuring 
+<I>DefMemPerCPU</I> (default memory per allocated CPU) or 
+<I>DefMemPerNode</I> (default memory per allocated node). 
+It may also be desirable to configure 
+<I>MaxMemPerCPU</I> (maximum memory per allocated CPU) or 
 <I>MaxMemPerNode</I> (maximum memory per allocated node) in <I>slurm.conf</I>.
 Users can use the <I>--mem</I> or <I>--mem-per-cpu</I> option
-at job submission time to specify their memory requirements.
-</LI>
-<LI>
-<B>JobAcctGatherType and JobAcctGatherFrequency</B>:
-If you wish to enforce memory limits, accounting must be enabled
-using the <I>JobAcctGatherType</I> and <I>JobAcctGatherFrequency</I>
-parameters. If accounting is enabled and a job exceeds its configured
-memory limits, it will be canceled in order to prevent it from 
-adversely effecting other jobs sharing the same resources.
-</LI>
-<LI>
-<B>SchedulerType</B>: Configure the <I>sched/gang</I> plugin by setting
-<I>SchedulerType=sched/gang</I> in <I>slurm.conf</I>.
-</LI>
-<LI>
-<B>Priority</B>: Configure the partition's <I>Priority</I> setting relative to
-other partitions to control the preemptive behavior. If two jobs from two
-different partitions are allocated to the same resources, the job in the
-partition with the greater <I>Priority</I> value will preempt the job in the
-partition with the lesser <I>Priority</I> value. If the <I>Priority</I> values
-of the two partitions are equal then no preemption will occur, and the two jobs
-will run simultaneously on the same resources. The default <I>Priority</I> value
-is 1.
-</LI>
-<LI>
-<B>Shared</B>: Configure the partitions <I>Shared</I> setting to 
-<I>FORCE</I> for all partitions that will preempt or that will be preempted. The
-<I>FORCE</I> setting is required to enable the select plugins to overallocate
-resources. Jobs submitted to a partition that does not share it's resources will
-not preempt other jobs, nor will those jobs be preempted. Instead those jobs
-will wait until the resources are free for non-shared use by each job.
-<BR>
-The <I>FORCE</I> option now supports an additional parameter that controls 
-how many jobs can share a resource within the partition (FORCE[:max_share]). By
-default the max_share value is 4. To disable timeslicing within a partition but
-enable preemption with other partitions, set <I>Shared=FORCE:1</I>.
-</LI>
-<LI>
-<B>SchedulerTimeSlice</B>: The default timeslice interval is 30 seconds. 
-To change this duration, set <I>SchedulerTimeSlice</I> to the desired interval 
-(in seconds) in <I>slurm.conf</I>. For example, to set the timeslice interval 
-to one minute, set <I>SchedulerTimeSlice=60</I>. Short values can increase 
-the overhead of gang scheduling. This parameter is only relevant if timeslicing
-within a partition will be configured. Preemption and timeslicing can occur at
-the same time.
-</LI>
-</UL>
-<P>
-To enable preemption after making the configuration changes described above,
-restart SLURM if it is already running. Any change to the plugin settings in
-SLURM requires a full restart of the daemons. If you just change the partition
-<I>Priority</I> or <I>Shared</I> setting, this can be updated with

-<I>scontrol reconfig</I>.
-</P>
-
-<H2>Preemption Design and Operation</H2>

-
-<P>
-When enabled, the <I>sched/gang</I> plugin keeps track of the resources
-allocated to all jobs. For each partition an "active bitmap" is maintained that
-tracks all concurrently running jobs in the SLURM cluster. Each partition also
-maintains a job list for that partition, and a list of "shadow" jobs. These
-"shadow" jobs are running jobs from higher priority partitions that "cast
-shadows" on the active bitmaps of the lower priority partitions. 
-</P>
-<P>
-Each time a new job is allocated to resources in a partition and begins running,
-the <I>sched/gang</I> plugin adds a "shadow" of this job to all lower priority
-partitions. The active bitmap of these lower priority partitions are then
-rebuilt, with the shadow jobs added first. Any existing jobs that were replaced
-by one or more "shadow" jobs are suspended (preempted). Conversely, when a 
-high-priority running job completes, it's "shadow" goes away and the active 
-bitmaps of the lower priority partitions are rebuilt to see if any suspended 
-jobs can be resumed.
-</P>
-<P>
-The gang scheduler plugin is primarily designed to be <I>reactive</I> to the
-resource allocation decisions made by the Selector plugins. This is why
-<I>Shared=FORCE</I> is required in each partition. The <I>Shared=FORCE</I>
-setting enables the <I>select/linear</I> and <I>select/cons_res</I> plugins to
-overallocate the resources between partitions. This keeps all of the node
-placement logic in the <I>select</I> plugins, and leaves the gang scheduler in
-charge of controlling which jobs should run on the overallocated resources. 
-</P>
-<P>
-The <I>sched/gang</I> plugin suspends jobs via the same internal functions that
-support <I>scontrol suspend</I> and <I>scontrol resume</I>. A good way to
-observe the act of preemption is by running <I>watch squeue</I> in a terminal
-window.
-</P>
-
-<H2>A Simple Example</H2>
-
-<P>
-The following example is configured with <I>select/linear</I>,
-<I>sched/gang</I>, and <I>Shared=FORCE:1</I>. This example takes place on a
-cluster of 5 nodes:
-</P>
-<PRE>
-[user@n16 ~]$ <B>sinfo</B>
-PARTITION AVAIL  TIMELIMIT NODES  STATE NODELIST
-active*      up   infinite     5   idle n[12-16]
-hipri        up   infinite     5   idle n[12-16]
-</PRE>
-<P>
-Here are the Partition settings:
-</P>
-<PRE>
-[user@n16 ~]$ <B>grep PartitionName /shared/slurm/slurm.conf</B>
-PartitionName=active Priority=1 Default=YES Shared=FORCE:1 Nodes=n[12-16]
-PartitionName=hipri  Priority=2             Shared=FORCE:1 Nodes=n[12-16]
-</PRE>
-<P>
-The <I>runit.pl</I> script launches a simple load-generating app that runs
-for the given number of seconds. Submit 5 single-node <I>runit.pl</I> jobs to
-run on all nodes:
-</P>
-<PRE>
-[user@n16 ~]$ <B>sbatch -N1 ./runit.pl 300</B>
-sbatch: Submitted batch job 485
-[user@n16 ~]$ <B>sbatch -N1 ./runit.pl 300</B>
-sbatch: Submitted batch job 486
-[user@n16 ~]$ <B>sbatch -N1 ./runit.pl 300</B>
-sbatch: Submitted batch job 487
-[user@n16 ~]$ <B>sbatch -N1 ./runit.pl 300</B>
-sbatch: Submitted batch job 488
-[user@n16 ~]$ <B>sbatch -N1 ./runit.pl 300</B>
-sbatch: Submitted batch job 489
-[user@n16 ~]$ <B>squeue</B>
-JOBID PARTITION     NAME   USER  ST   TIME  NODES NODELIST
-  485    active runit.pl   user   R   0:06      1 n12
-  486    active runit.pl   user   R   0:06      1 n13
-  487    active runit.pl   user   R   0:05      1 n14
-  488    active runit.pl   user   R   0:05      1 n15
-  489    active runit.pl   user   R   0:04      1 n16
-</PRE>
-<P>
-Now submit a short-running 3-node job to the <I>hipri</I> partition:
-</P>
-<PRE>
-[user@n16 ~]$ <B>sbatch -N3 -p hipri ./runit.pl 30</B>
-sbatch: Submitted batch job 490
-[user@n16 ~]$ <B>squeue</B>
-JOBID PARTITION     NAME   USER  ST   TIME  NODES NODELIST
-  488    active runit.pl   user   R   0:29      1 n15
-  489    active runit.pl   user   R   0:28      1 n16
-  485    active runit.pl   user   S   0:27      1 n12
-  486    active runit.pl   user   S   0:27      1 n13
-  487    active runit.pl   user   S   0:26      1 n14
-  490     hipri runit.pl   user   R   0:03      3 n[12-14]
-</PRE>
-<P>
-Job 490 in the <I>hipri</I> partition preempted jobs 485, 486, and 487 from
-the <I>active</I> partition. Jobs 488 and 489 in the <I>active</I> partition
-remained running.
-</P>
-<P>
-This state persisted until job 490 completed, at which point the preempted jobs
-were resumed:
-</P>
-<PRE>
-[user@n16 ~]$ <B>squeue</B>
-JOBID PARTITION     NAME   USER  ST   TIME  NODES NODELIST
-  485    active runit.pl   user   R   0:30      1 n12
-  486    active runit.pl   user   R   0:30      1 n13
-  487    active runit.pl   user   R   0:29      1 n14
-  488    active runit.pl   user   R   0:59      1 n15
-  489    active runit.pl   user   R   0:58      1 n16
-</PRE>
-
-
-<H2><A NAME="future_work">Future Work</A></H2>
-
-<P>
-<B>Preemption with consumable resources</B>: This implementation of preemption
-relies on intelligent job placement by the <I>select</I> plugins. As of SLURM
-1.3.1 the consumable resource <I>select/cons_res</I> plugin still needs
-additional enhancements to the job placement algorithm before it's preemption
-support can be considered "competent". The mechanics of preemption work, but the
-placement of preemptive jobs relative to any low-priority jobs may not be
-optimal. The work to improve the placement of preemptive jobs relative to
-existing jobs is currently in-progress. 
-</P>
-<P>
-<B>Requeue a preempted job</B>: In some situations is may be desirable to
-requeue a low-priority job rather than suspend it. Suspending a job leaves the
-job in memory. Requeuing a job involves terminating the job and resubmitting it
-again. This will be investigated at some point in the future. Requeuing a
-preempted job may make the most sense with <I>Shared=NO</I> partitions.
-</P>
-
-<p style="text-align:center;">Last modified 7 July 2008</p>
-
-<!--#include virtual="footer.txt"-->
+at job submission time to specify their memory requirements.
+</LI>
+<LI>
+<B>JobAcctGatherType and JobAcctGatherFrequency</B>: The "maximum data segment
+size" and "maximum virtual memory size" system limits will be configured for
+each job to ensure that the job does not exceed its requested amount of memory.
+If you wish to enable additional enforcement of memory limits, configure job
+accounting with the <I>JobAcctGatherType</I> and <I>JobAcctGatherFrequency</I>
+parameters. When accounting is enabled and a job exceeds its configured memory
+limits, it will be canceled in order to prevent it from adversely effecting
+other jobs sharing the same resources.
+</LI>
+<LI>
+<B>SchedulerType</B>: Configure the <I>sched/gang</I> plugin by setting
+<I>SchedulerType=sched/gang</I> in <I>slurm.conf</I>.
+</LI>
+<LI>
+<B>Priority</B>: Configure the partition's <I>Priority</I> setting relative to
+other partitions to control the preemptive behavior. If two jobs from two
+different partitions are allocated to the same resources, the job in the
+partition with the greater <I>Priority</I> value will preempt the job in the
+partition with the lesser <I>Priority</I> value. If the <I>Priority</I> values
+of the two partitions are equal then no preemption will occur. The default
+<I>Priority</I> value is 1.
+</LI>
+<LI>
+<B>SchedulerTimeSlice</B>: The default timeslice interval is 30 seconds. 
+To change this duration, set <I>SchedulerTimeSlice</I> to the desired interval 
+(in seconds) in <I>slurm.conf</I>. For example, to set the timeslice interval 
+to one minute, set <I>SchedulerTimeSlice=60</I>. Short values can increase 
+the overhead of gang scheduling. This parameter is only relevant if timeslicing
+within a partition will be configured. Preemption and timeslicing can occur at
+the same time.
+</LI>
+</UL>
+<P>
+To enable preemption after making the configuration changes described above,
+restart SLURM if it is already running. Any change to the plugin settings in
+SLURM requires a full restart of the daemons. If you just change the partition
+<I>Priority</I> or <I>Shared</I> setting, this can be updated with
+<I>scontrol reconfig</I>.
+</P>
+
+<H2>Preemption Design and Operation</H2>
+
+<P>
+When enabled, the <I>sched/gang</I> plugin keeps track of the resources
+allocated to all jobs. For each partition an "active bitmap" is maintained that
+tracks all concurrently running jobs in the SLURM cluster. Each partition also
+maintains a job list for that partition, and a list of "shadow" jobs. The
+"shadow" jobs are job allocations from higher priority partitions that "cast
+shadows" on the active bitmaps of the lower priority partitions. Jobs in lower
+priority partitions that are caught in these "shadows" will be suspended.
+</P>
+<P>
+Each time a new job is allocated to resources in a partition and begins running,
+the <I>sched/gang</I> plugin adds a "shadow" of this job to all lower priority
+partitions. The active bitmap of these lower priority partitions are then
+rebuilt, with the shadow jobs added first. Any existing jobs that were replaced
+by one or more "shadow" jobs are suspended (preempted). Conversely, when a 
+high-priority running job completes, it's "shadow" goes away and the active 
+bitmaps of the lower priority partitions are rebuilt to see if any suspended 
+jobs can be resumed.
+</P>
+<P>
+The gang scheduler plugin is designed to be <I>reactive</I> to the resource
+allocation decisions made by the "select" plugins. The "select" plugins have
+been enhanced to recognize when "sched/gang" has been configured, and to factor
+in the priority of each partition when selecting resources for a job. When
+choosing resources for each job, the selector avoids resources that are in use
+by other jobs (unless sharing has been configured, in which case it does some
+load-balancing). However, when "sched/gang" is enabled, the select plugins may
+choose resources that are already in use by jobs from partitions with a lower
+priority setting, even when sharing is disabled in those partitions.
+</P>
+<P>
+This leaves the gang scheduler in charge of controlling which jobs should run on
+the overallocated resources. The <I>sched/gang</I> plugin suspends jobs via the
+same internal functions that support <I>scontrol suspend</I> and <I>scontrol
+resume</I>. A good way to observe the act of preemption is by running <I>watch
+squeue</I> in a terminal window.
+</P>
+<P>
+The <I>sched/gang</I> plugin suspends jobs via the same internal functions that
+support <I>scontrol suspend</I> and <I>scontrol resume</I>. A good way to
+observe the act of preemption is by running <I>watch squeue</I> in a terminal
+window.
+</P>
+
+<H2>A Simple Example</H2>
+
+<P>
+The following example is configured with <I>select/linear</I> and
+<I>sched/gang</I>. This example takes place on a cluster of 5 nodes:
+</P>
+<PRE>
+[user@n16 ~]$ <B>sinfo</B>
+PARTITION AVAIL  TIMELIMIT NODES  STATE NODELIST
+active*      up   infinite     5   idle n[12-16]
+hipri        up   infinite     5   idle n[12-16]
+</PRE>
+<P>
+Here are the Partition settings:
+</P>
+<PRE>
+[user@n16 ~]$ <B>grep PartitionName /shared/slurm/slurm.conf</B>
+PartitionName=active Priority=1 Default=YES Shared=NO Nodes=n[12-16]
+PartitionName=hipri  Priority=2             Shared=NO Nodes=n[12-16]
+</PRE>
+<P>
+The <I>runit.pl</I> script launches a simple load-generating app that runs
+for the given number of seconds. Submit 5 single-node <I>runit.pl</I> jobs to
+run on all nodes:
+</P>
+<PRE>
+[user@n16 ~]$ <B>sbatch -N1 ./runit.pl 300</B>
+sbatch: Submitted batch job 485
+[user@n16 ~]$ <B>sbatch -N1 ./runit.pl 300</B>
+sbatch: Submitted batch job 486
+[user@n16 ~]$ <B>sbatch -N1 ./runit.pl 300</B>
+sbatch: Submitted batch job 487
+[user@n16 ~]$ <B>sbatch -N1 ./runit.pl 300</B>
+sbatch: Submitted batch job 488
+[user@n16 ~]$ <B>sbatch -N1 ./runit.pl 300</B>
+sbatch: Submitted batch job 489
+[user@n16 ~]$ <B>squeue -Si</B>
+JOBID PARTITION     NAME   USER  ST   TIME  NODES NODELIST
+  485    active runit.pl   user   R   0:06      1 n12
+  486    active runit.pl   user   R   0:06      1 n13
+  487    active runit.pl   user   R   0:05      1 n14
+  488    active runit.pl   user   R   0:05      1 n15
+  489    active runit.pl   user   R   0:04      1 n16
+</PRE>
+<P>
+Now submit a short-running 3-node job to the <I>hipri</I> partition:
+</P>
+<PRE>
+[user@n16 ~]$ <B>sbatch -N3 -p hipri ./runit.pl 30</B>
+sbatch: Submitted batch job 490
+[user@n16 ~]$ <B>squeue -Si</B>
+JOBID PARTITION     NAME   USER  ST   TIME  NODES NODELIST
+  485    active runit.pl   user   S   0:27      1 n12
+  486    active runit.pl   user   S   0:27      1 n13
+  487    active runit.pl   user   S   0:26      1 n14
+  488    active runit.pl   user   R   0:29      1 n15
+  489    active runit.pl   user   R   0:28      1 n16
+  490     hipri runit.pl   user   R   0:03      3 n[12-14]
+</PRE>
+<P>
+Job 490 in the <I>hipri</I> partition preempted jobs 485, 486, and 487 from
+the <I>active</I> partition. Jobs 488 and 489 in the <I>active</I> partition
+remained running.
+</P>
+<P>
+This state persisted until job 490 completed, at which point the preempted jobs
+were resumed:
+</P>
+<PRE>
+[user@n16 ~]$ <B>squeue</B>
+JOBID PARTITION     NAME   USER  ST   TIME  NODES NODELIST
+  485    active runit.pl   user   R   0:30      1 n12
+  486    active runit.pl   user   R   0:30      1 n13
+  487    active runit.pl   user   R   0:29      1 n14
+  488    active runit.pl   user   R   0:59      1 n15
+  489    active runit.pl   user   R   0:58      1 n16
+</PRE>
+
+
+<H2><A NAME="future_work">Future Ideas</A></H2>
+
+<P>
+<B>More intelligence in the select plugins</B>: This implementation of
+preemption relies on intelligent job placement by the <I>select</I> plugins. In
+SLURM 1.3.1 the <I>select/linear</I> plugin has a decent preemptive placement
+algorithm, but the consumable resource <I>select/cons_res</I> plugin had no
+preemptive placement support. In SLURM 1.4 preemptive placement support was
+added to the <I>select/cons_res</I> plugin, but there is still room for
+improvement.
+</P><P>
+Take the following example:
+</P>
+<PRE>
+[user@n8 ~]$ <B>sinfo</B>
+PARTITION AVAIL  TIMELIMIT NODES  STATE NODELIST
+active*      up   infinite     5   idle n[1-5]
+hipri        up   infinite     5   idle n[1-5]
+[user@n8 ~]$ <B>sbatch -N1 -n2 ./sleepme 60</B>
+sbatch: Submitted batch job 17
+[user@n8 ~]$ <B>sbatch -N1 -n2 ./sleepme 60</B>
+sbatch: Submitted batch job 18
+[user@n8 ~]$ <B>sbatch -N1 -n2 ./sleepme 60</B>
+sbatch: Submitted batch job 19
+[user@n8 ~]$ <B>squeue</B>
+  JOBID PARTITION     NAME     USER  ST       TIME  NODES NODELIST(REASON)
+     17    active  sleepme  cholmes   R       0:03      1 n1
+     18    active  sleepme  cholmes   R       0:03      1 n2
+     19    active  sleepme  cholmes   R       0:02      1 n3
+[user@n8 ~]$ <B>sbatch -N3 -n6 -p hipri ./sleepme 20</B>
+sbatch: Submitted batch job 20
+[user@n8 ~]$ <B>squeue -Si</B>
+  JOBID PARTITION     NAME     USER  ST       TIME  NODES NODELIST(REASON)
+     17    active  sleepme  cholmes   S       0:16      1 n1
+     18    active  sleepme  cholmes   S       0:16      1 n2
+     19    active  sleepme  cholmes   S       0:15      1 n3
+     20     hipri  sleepme  cholmes   R       0:03      3 n[1-3]
+[user@n8 ~]$ <B>sinfo</B>
+PARTITION AVAIL  TIMELIMIT NODES  STATE NODELIST
+active*      up   infinite     3  alloc n[1-3]
+active*      up   infinite     2   idle n[4-5]
+hipri        up   infinite     3  alloc n[1-3]
+hipri        up   infinite     2   idle n[4-5]
+</PRE>
+<P>
+It would be more ideal if the "hipri" job were placed on nodes n[3-5], which
+would allow jobs 17 and 18 to continue running. However, a new "intelligent"
+algorithm would have to include factors such as job size and required nodes in
+order to support ideal placements such as this, which can quickly complicate
+the design. Any and all help is welcome here!
+</P>
+<P>
+<B>Preemptive backfill</B>: the current backfill scheduler plugin
+("sched/backfill") is a nice way to make efficient use of otherwise idle
+resources. But SLURM only supports one scheduler plugin at a time. Fortunately,
+given the design of the new "sched/gang" plugin, there is no direct overlap
+between the backfill functionality and the gang-scheduling functionality. Thus,
+it's possible that these two plugins could technically be merged into a new
+scheduler plugin that supported preemption <U>and</U> backfill. <B>NOTE:</B>
+this is only an idea based on a code review so there would likely need to be
+some additional development, and plenty of testing!
+</P><P>
+
+</P>
+<P>
+<B>Requeue a preempted job</B>: In some situations is may be desirable to
+requeue a low-priority job rather than suspend it. Suspending a job leaves the
+job in memory. Requeuing a job involves terminating the job and resubmitting it
+again. The "sched/gang" plugin would need to be modified to recognize when a job
+is able to be requeued and when it can requeue a job (for preemption only, not
+for timeslicing!), and perform the requeue request.
+</P>
+
+<p style="text-align:center;">Last modified 5 December 2008</p>
+
+<!--#include virtual="footer.txt"-->
diff --git a/doc/html/priority_multifactor.shtml b/doc/html/priority_multifactor.shtml
new file mode 100644
index 000000000..c27aed7f8
--- /dev/null
+++ b/doc/html/priority_multifactor.shtml
@@ -0,0 +1,542 @@
+<!--#include virtual="header.txt"-->
+
+<h1>Multifactor Priority Plugin</h1>
+
+<b>Note:</b> This document describes features added to SLURM version 2.0.
+
+<h2>Contents</h2>
+<UL>
+<LI> <a href=#intro>Introduction</a>
+<LI> <a href=#mfjppintro>Multi-factor Job Priority Plugin</a>
+<LI> <a href=#general>Job Priority Factors In General</a>
+<LI> <a href=#age>Age Factor</a>
+<LI> <a href=#jobsize>Job Size Factor</a>
+<LI> <a href=#partition>Partition Factor</a>
+<LI> <a href=#qos>Quality of Service (QOS) Factor</a>
+<LI> <a href=#fairshare>Fair-share Factor</a>
+<LI> <a href=#sprio>The <i>sprio</i> utility</a>
+<LI> <a href=#config>Configuration</a>
+<LI> <a href=#configexample>Configuration Example</a>
+</UL>
+
+<!-------------------------------------------------------------------------->
+<a name=intro>
+<h2>Introduction</h2></a>
+
+<P> By default, SLURM assigns job priority on a First In, First Out (FIFO) basis.  FIFO scheduling should be configured when SLURM is controlled by an external scheduler.</P>
+
+<P> The <i>PriorityType</i> parameter in the slurm.conf file selects the priority plugin.  The default value for this variable is "priority/basic" which enables simple FIFO scheduling. (See <a href="#config">Configuration</a> below)</P>
+
+<P> SLURM version 2.0 includes the Multi-factor Job Priority plugin.  This plugin provides a very versatile facility for ordering the queue of jobs waiting to be scheduled.</P>
+
+<!-------------------------------------------------------------------------->
+<a name=mfjppintro>
+<h2>Multi-factor 'Factors'</h2></a>
+
+<P> There are five factors in the Multi-factor Job Priority plugin that influence job priority:</P>
+
+<DL>
+<DT> Age
+<DD> the length of time a job has been waiting in the queue, eligible to be scheduled
+<DT> Fair-share
+<DD> the difference between the portion of the computing resource that has been promised and the amount of resources that has been consumed
+<DT> Job size
+<DD> the number of nodes a job is allocated
+<DT> Partition
+<DD> a factor associated with each node partition
+<DT> QOS
+<DD> a factor associated with each Quality Of Service (Still under Development)
+</DL>
+
+<P> Additionally, a weight can be assigned to each of the above
+  factors.  This provides the ability to enact a policy that blends a
+  combination of any of the above factors in any portion desired.  For
+  example, a site could configure fair-share to be the dominant factor
+  (say 70%), set the job size and the age factors to each contribute
+  15%, and set the partition and QOS influences to zero.</P>
+
+<!-------------------------------------------------------------------------->
+<a name=general>
+<h2>Job Priority Factors In General</h2></a>
+
+<P> The job's priority at any given time will be a weighted sum of all the factors that have been enabled in the slurm.conf file.  Job priority can be expressed as:</P>
+<PRE>
+Job_priority =
+	(age_weight) * (age_factor) +
+	(fair-share_weight) * (fair-share_factor) +
+	(job_size_weight) * (job_size_factor) +
+	(partition_weight) * (partition_factor) +
+	(QOS_weight) * (QOS_factor)
+</PRE>
+
+<P> All of the factors in this formula are floating point numbers that
+  range from 0.0 to 1.0.  The weights are unsigned, 32 bit integers.
+  The job's priority is an integer that ranges between 0 and
+  4294967295.  The higher the number,  the higher the job will be
+  positioned in the queue, and the sooner the job will be scheduled.
+  A job's priority, and hence its order in the queue, will vary over
+  time.  For example, the longer a job sits in the queue, the higher
+  its priority will grow when the age_weight is non-zero.</P>
+
+<P> <b>IMPORTANT:</b> The weight values should be high enough to get a
+  good set of significant digits since all the factors are floating
+  point numbers from 0.0 to 1.0. For example, one job could have a
+  fair-share factor of .59534 and another job could have a fair-share
+  factor of .50002.  If the fair-share weight is only set to 10, both
+  jobs would have the same fair-share priority. Therefore, set the
+  weights high enough to avoid this scenario, starting around 1000 or
+  so for those factors you want to make predominant.</P>
+
+<!-------------------------------------------------------------------------->
+<a name=age>
+<h2>Age Factor</h2></a>
+
+<P> The age factor represents the length of time a job has been sitting in the queue and eligible to run.  In general, the longer a job waits in the queue, the larger its age factor grows.  However, the age factor for a dependent job will not change while it waits for the job it depends on to complete.  Also, the age factor will not change when scheduling is withheld for a job whose node or time limits exceed the cluster's current limits.</P>
+
+<P> At some configurable length of time (<i>PriorityMaxAge</i>), the age factor will max out to 1.0.</P>
+
+<!-------------------------------------------------------------------------->
+<a name=jobsize>
+<h2>Job Size Factor</h2></a>
+
+<P> The job size factor correlates to the number of nodes the job has requested.  This factor can be configured to favor larger jobs or smaller jobs based on the state of the <i>PriorityFavorSmall</i> boolean in the slurm.conf file.  When <i>PriorityFavorSmall</i> is NO, the larger the job, the greater its job size factor will be.  A job that requests all the nodes on the machine will get a job size factor of 1.0.  When the <i>PriorityFavorSmall</i> Boolean is YES, the single node job will receive the 1.0 job size factor.</P>
+
+<!-------------------------------------------------------------------------->
+<a name=partition>
+<h2>Partition Factor</h2></a>
+
+<P> Each node partition can be assigned a factor from 0.0 to 1.0.  The higher the number, the greater the job priority will be for jobs that are slated to run in this partition.</P>
+
+<!-------------------------------------------------------------------------->
+<a name=qos>
+<h2>Quality of Service (QOS) Factor</h2></a>
+
+<P> Each QOS can be assigned a factor from 0.0 to 1.0.  The higher the
+  number, the greater the job priority will be for jobs that request
+  this QOS. (Still under Development)</P>
+
+<!-------------------------------------------------------------------------->
+<a name=fairshare>
+<h2>Fair-share Factor</h2></a>
+
+<b>Note:</b> Computing the fair-share factor requires the installation
+and operation of the <a href="accounting.html">SLURM Accounting
+Database</a> to provide the assigned shares and the consumed,
+computing resources described below.
+
+<P> The fair-share component to a job's priority influences the order in which a user's queued jobs are scheduled to run based on the portion of the computing resources they have been allocated and the resources their jobs have already consumed.  The fair-share factor does not involve a fixed allotment, whereby a user's access to a machine is cut off once that allotment is reached.</P>
+
+<P> Instead, the fair-share factor serves to prioritize queued jobs such that those jobs charging accounts that are under-serviced are scheduled first, while jobs charging accounts that are over-serviced are scheduled when the machine would otherwise go idle.</P>
+
+<P> SLURM's fair-share factor is a floating point number between 0.0 and 1.0 that reflects the shares of a computing resource that a user has been allocated and the amount of computing resources the user's jobs have consumed.  The higher the value, the higher is the placement in the queue of jobs waiting to be scheduled.</P>
+
+<P> The computing resource is currently defined to be computing cycles delivered by a machine in the units of processor*seconds.  Future versions of the fair-share factor may additionally include a memory integral component.</P>
+
+<h3> Normalized Shares</h3>
+
+<P> The fair-share hierarchy represents the portions of the computing resource that have been allocated to multiple projects.  These allocations are assigned to an account.  There can be multiple levels of allocations made as allocations of a given account are further divided to sub-accounts:</P>
+
+<div class="figure">
+  <img src=AllocationPies.gif width=400 ><BR>
+  Figure 1. Machine Allocation
+</div>
+
+<P> The chart above shows the resources of the machine allocated to four accounts, A, B, C and D.  Furthermore, account A's shares are further allocated to sub accounts, A1 through A4.  Users are granted permission (through sacctmgr) to submit jobs against specific accounts.  If there are 10 users given equal shares in Account A3, they will each be allocated 1% of the machine.</P>
+
+<P> A user's normalized shares is simply</P>
+
+<PRE>
+S =	(S<sub>user</sub> / S<sub>sibblings</sub>) *
+	(S<sub>account</sub> / S<sub>sibbling-accounts</sub>) *
+	(S<sub>parent</sub> / S<sub>parent-sibblings</sub>) * ...
+</PRE>
+
+Where:
+
+<DL>
+<DT> S
+<DD> is the user's normalized share, between zero and one
+<DT> S<sub>user</sub>
+<DD> are the number of shares of the account allocated to the user
+<DT> S<sub>sibblings</sub>
+<DD> are the total number of shares allocated to all users permitted to charge the account (including S<sub>user</sub>)
+<DT> S<sub>account</sub>
+<DD> are the number of shares of the parent account allocated to the account
+<DT> S<sub>sibbling-accounts</sub>
+<DD> are the total number of shares allocated to all sub-accounts of the parent account
+<DT> S<sub>parent</sub>
+<DD> are the number of shares of the grandparent account allocated to the parent
+<DT> S<sub>parent-sibblings</sub>
+<DD> are the total number of shares allocated to all sub-accounts of the grandparent account
+</DL>
+
+<h3> Normalized Usage</h3>
+
+<P> The total number of processor*seconds that a machine is able to deliver over a fixed time period (for example, a day) is a fixed quantity.  The processor*seconds allocated to every job are tracked and saved to the SLURM database in real-time.  If one only considered usage over a fixed time period, then calculating a user's normalized usage would be a simple quotient:</P>
+
+<PRE>
+	U<sub>N</sub> = U<sub>user</sub> / R<sub>available</sub>
+</PRE>
+
+Where:
+
+<DL>
+<DT> U<sub>N</sub>
+<DD> is normalized usage, between zero and one
+<DT> U<sub>user</sub>
+<DD> is the processor*seconds consumed by all of a user's jobs in a given account for over a fixed time period
+<DT> R<sub>available</sub>
+<DD> is the total number of processor*seconds a machine can deliver during that same time period
+</DL>
+
+<P> However, significant real-world usage quantities span multiple time periods.  Rather than treating usage over a number of weeks or months with equal importance, SLURM's fair-share priority calculation places more importance on the most recent resource usage and less importance on usage from the distant past.</P>
+
+<P> The SLURM usage metric is based off a half-life formula that favors the most recent usage statistics.  Usage statistics from the past decrease in importance based on a single decay factor, D:</P>
+
+<PRE>
+	U<sub>H</sub> = U<sub>current_period</sub> +
+	     ( D * U<sub>last_period</sub>) + (D * D * U<sub>period-2</sub>) + ...
+</PRE>
+
+Where:
+
+<DL>
+<DT> U<sub>H</sub>
+<DD> is the historical usage subject to the half-life decay
+<DT> U<sub>current_period</sub>
+<DD> is the usage charged over the current measurement period
+<DT> U<sub>last_period</sub>
+<DD> is the usage charged over the last measurement period
+<DT> U<sub>period-2</sub>
+<DD> is the usage charged over the second last measurement period
+<DT> D
+<DD> is a decay factor between zero and one that delivers the
+  half-life decay based off the <i>PriorityDecayHalfLife</i> setting
+  in the slurm.conf file.  Without accruing additional usage, a user's
+  U<sub>H</sub> usage will decay to 1/2 value after a time period
+  of <i>PriorityDecayHalfLife</i> seconds.
+</DL>
+
+<P> In practice, the <i>PriorityDecayHalfLife</i> could be a matter of
+  seconds or days as appropriate for each site.  The measurement
+  period is nominally 5 minutes.  The decay factor, D, is assigned the
+  value that will achieve the half-life decay rate specified by
+  the <i>PriorityDecayHalfLife</i> parameter.</P> 
+
+<P> The historical resources a machine has available could be similarly aggregated with the same decay factor:</P>
+
+<PRE>
+	R<sub>H</sub> = R<sub>current_period</sub> +
+	    ( D * R<sub>last_period</sub>) + (D * D * R<sub>period-2</sub>) + ...
+</PRE>
+
+<P> However, A simpler formula is:</P>
+
+<PRE>
+	R<sub>H</sub> = num_procs * half_life * 2
+</PRE>
+
+Where:
+
+<DL>
+<DT> R<sub>H</sub>
+<DD> is the historical resources available subject to the same half-life decay as the usage formula.
+<DT> num_procs</sub>
+<DD> is the total number of processors in the cluster
+<DT> half_life</sub>
+<DD> is the configured half-life(<i>PriorityDecayHalfLife</i>)
+</DL>
+
+<P> A user's normalized usage that spans multiple time periods then becomes:</P>
+
+<PRE>
+	U = U<sub>H</sub> / R<sub>H</sub>
+</PRE>
+
+
+<h3>Simplified Fair-Share Formula</h3>
+
+<P> The simplified formula for calculating the fair-share factor for usage that spans multiple time periods and subject to a half-life decay is:</P>
+
+<PRE>
+	F = (S - U + 1) / 2
+</PRE>
+
+Where:
+
+<DL compact>
+<DT> F
+<DD> is the fair-share factor
+<DT> S
+<DD> is the normalized shares
+<DT> U
+<DD> is the normalized usage factoring in half-life decay
+</DL>
+
+<P> The fair-share factor will therefore range from zero to one, where one represents the highest priority for a job.  A fair-share factor of 0.5 indicates that the user's jobs have used exactly the portion of the machine that they have been allocated.  A fair-share factor of above 0.5 indicates that the user's jobs have consumed less than their allocated share while a fair-share factor below 0.5 indicates that the user's jobs have consumed more than their allocated share of the computing resources.</P>
+
+<h3>The Fair-share Factor Under An Account Hierarchy</h3>
+
+<P> The method described above presents a system whereby the priority of a user's job is calculated based on the portion of the machine allocated to the user and the historical usage of all the jobs run by that user under a specific account.</P>
+
+<P> Another layer of "fairness" is necessary however, one that factors in the usage of other users drawing from the same account.  This allows a job's fair-share factor to be influenced by the computing resources delivered to jobs of other users drawing from the same account.</P>
+
+<P> If there are two members of a given account, and if one of those users has run many jobs under that account, the job priority of a job submitted by the user who has not run any jobs will be negatively affected.  This ensures that the combined usage charged to an account matches the portion of the machine that is allocated to that account.</P>
+
+<P> In the example below, when user 3 submits their first job using account C, they will want their job's priority to reflect all the resources delivered to account B.  They do not care that user 1 has been using up a significant portion of the cycles allocated to account B and user 2 has yet to run a job out of account B.  If user 2 submits a job using account B and user 3 submits a job using account C, user 3 expects their job to be scheduled before the job from user 2.</P>
+
+<div class="figure">
+  <img src=UsagePies.gif width=400 ><BR>
+  Figure 2. Usage Example
+</div>
+
+<h3>The SLURM Fair-Share Formula</h3>
+
+<P> The SLURM fair-share formula has been designed to provide fair scheduling to users based on the allocation and usage of every account.</P>
+
+<P> The actual formula used is a refinement of the formula presented above:</P>
+
+<PRE>
+	F = (S - U<sub>E</sub> + 1) / 2
+</PRE>
+
+<P> The difference is that the usage term is effective usage, which is defined as:</P>
+
+<PRE>
+	U<sub>E</sub> = U<sub>Achild</sub> +
+		  ((U<sub>Eparent</sub> - U<sub>Achild</sub>) * S<sub>child</sub>/S<sub>all_siblings</sub>)
+</PRE>
+
+Where:
+
+<DL>
+<DT> U<sub>E</sub>
+<DD> is the effective usage of the child user or child account
+<DT> U<sub>Achild</sub>
+<DD> is the actual usage of the child user or child account
+<DT> U<sub>Eparent</sub>
+<DD> is the effective usage of the parent account
+<DT> S<sub>child</sub>
+<DD> is the shares allocated to the child user or child account
+<DT> S<sub>all_siblings</sub>
+<DD> is the shares allocated to all the children of the parent account
+</DL>
+
+<P> This formula only applies with the second tier of accounts below root.  For the tier of accounts just under root, their effective usage equals their actual usage.</P>
+
+<P> Because the formula for effective usage includes a term of the effective usage of the parent, the calculation for each account in the tree must start at the second tier of accounts and proceed downward:  to the children accounts, then grandchildren, etc.  The effective usage of the users will be the last to be calculated.</P>
+
+<P> Plugging in the effective usage into the fair-share formula above yields a fair-share factor that reflects the aggregated usage charged to each of the accounts in the fair-share hierarchy.</P>
+
+<h3>Example</h3>
+
+<P> The following example demonstrates the effective usage calculations and resultant fair-share factors. (See Figure 3 below.)</P>
+
+<P> The machine's computing resources are allocated to accounts A and D with 40 and 60 shares respectively.  Account A is further divided into two children accounts, B with 30 shares and C with 10 shares.  Account D is further divided into two children accounts, E with 25 shares and F with 35 shares.</P>
+
+<P> Note:  the shares at any given tier in the Account hierarchy do not need to total up to 100 shares.  This example shows them totaling up to 100 to make the arithmetic easier to follow in your head.</P>
+
+<P> User 1 is granted permission to submit jobs against the B account.  Users 2 and 3 are granted one share each in the C account.  User 4 is the sole member of the E account and User 5 is the sole member of the F account.</P>
+
+<P> Note:  accounts A and D do not have any user members in this example, though users could have been assigned.</P>
+
+<P> The shares assigned to each account make it easy to determine normalized shares of the machine's complete resources.  Account A has .4 normalized shares, B has .3 normalized shares, etc.  Users who are sole members of an account have the same number of normalized shares as the account.  (E.g., User 1 has .3 normalized shares).  Users who share accounts have a portion of the normalized shares based on their shares.  For example, if user 2 had been allocated 4 shares instead of 1, user 2 would have had .08 normalized shares.  With users 2 and 3 each holding 1 share, they each have a normalized share of  0.05.</P>
+
+<P> Users 1, 2, and 4 have run jobs that have consumed the machine's computing resources.  User 1's actual usage is 0.2 of the machine; user 2 is 0.25,  and user 4 is 0.25.</P>
+
+<P> The actual usage charged to each account is represented by the solid arrows.  The actual usage charged to each account is summed as one goes up the tree.  Account C's usage is the sum of the usage of Users 2 and 3; account A's actual usage is the sum of its children, accounts B and C.</P>
+
+<div class="figure">
+  <img src=ExampleUsage.gif width=400 ><BR>
+  Figure 3. Fair-share Example
+</div>
+
+<UL>
+<LI> User 1 normalized share: 0.3
+<LI> User 2 normalized share: 0.05
+<LI> User 3 normalized share: 0.05
+<LI> User 4 normalized share: 0.25
+<LI> User 5 normalized share: 0.35
+</UL>
+
+<P> As stated above, the effective usage is computed from the formula:</P>
+
+<PRE>
+	U<sub>E</sub> = U<sub>Achild</sub> +
+		  ((U<sub>Eparent</sub> - U<sub>Achild</sub>) * S<sub>child</sub>/S<sub>all_siblings</sub>)
+</PRE>
+
+<P> The effective usage for all accounts at the first tier under the root allocation is always equal to the actual usage:</P>
+
+Account A's effective usage is therefore equal to .45.  Account D's effective usage is equal to .25.
+
+<UL>
+<LI> Account B effective usage: 0.2 + ((0.45 - 0.2) * 30 / 40) = 0.3875
+<LI> Account C effective usage: 0.25 + ((0.45 - 0.25) * 10 / 40) = 0.3
+<LI> Account E effective usage: 0.25 + ((0.25 - 0.25) * 25 / 60) = 0.25
+<LI> Account F effective usage: 0.0 + ((0.25 - 0.0) * 35 / 60) = 0.1458
+</UL>
+
+<P> The effective usage of each user is calculated using the same formula:</P>
+
+<UL>
+<LI> User 1 effective usage: 0.2 + ((0.3875 - 0.2) * 1 / 1) = 0.3875
+<LI> User 2 effective usage: 0.25 + ((0.3 - 0.25) * 1 / 2) =  0.275
+<LI> User 3 effective usage: 0.0 + ((0.3 - 0.0) * 1 / 2) =  0.15
+<LI> User 4 effective usage: 0.25 + ((0.25 - 0.25) * 1 / 1) = 0.25
+<LI> User 5 effective usage: 0.0 + ((.1458 - 0.0) * 1 / 1) =  0.1458
+</UL>
+
+<P> Using the SLURM fair-share formula,</P>
+
+<PRE>
+	F = (S - U<sub>E</sub> + 1) / 2
+</PRE>
+
+<P> the fair-share factor for each user is:</P>
+
+<UL>
+<LI> User 1 fair-share factor: (.3 - .3875 + 1) / 2 =  0.45625
+<LI> User 2 fair-share factor: (.05 - .275 + 1) / 2 =  0.3875
+<LI> User 3 fair-share factor: (.05 - .15 + 1) / 2 =  0.45
+<LI> User 4 fair-share factor: (.25 - .25 + 1) / 2 =  0.5
+<LI> User 5 fair-share factor: (.35 - .1458 + 1) / 2 =  0.6021
+</UL>
+
+<P> From this example, once can see that users 1,2, and 3 are over-serviced while user 5 is under-serviced.  Even though user 3 has yet to submit a job, his/her fair-share factor is negatively influenced by the jobs users 1 and 2 have run.</P>
+
+<P> Based on the fair-share factor alone, if all 5 users were to submit a job charging their respective accounts, user 5's job would be granted the highest scheduling priority.</P>
+
+<!-------------------------------------------------------------------------->
+<a name=sprio>
+<h2>The <i>sprio</i> utility</h2></a>
+
+<P> The <i>sprio</i> command provides a summary of the five factors
+that comprise each job's scheduling priority.  While <i>squeue</i> has
+format options (%p and %Q) that display a job's composite priority,
+sprio can be used to display a breakdown of the priority components
+for each job.  In addition, the <i>sprio -w</i> option displays the
+weights (PriorityWeightAge, PriorityWeightFairshare, etc.) for each
+factor as it is currently configured.</P>
+
+<!-------------------------------------------------------------------------->
+<a name=config>
+<h2>Configuration</h2></a>
+
+<P> The following slurm.conf (SLURM_CONFIG_FILE) parameters are used to configure the Multi-factor Job Priority Plugin.  See slurm.conf(5) man page for more details.</P>
+
+<DL>
+<DT> PriorityType
+<DD> Set this value to "priority/multifactor" to enable the Multi-factor Job Priority Plugin.  The default value for this variable is "priority/basic" which enables simple FIFO scheduling.
+<DT> PriorityDecayHalfLife
+<DD> This determines the contribution of historical usage on the
+  composite usage value.  The higher the number, the longer past usage
+  affects fair-share.  If set to 0 no decay will be applied.  This is helpful if
+  you want to enforce hard time limits per association.  If set to 0
+  PriorityUsageResetPeriod must be set to some interval. 
+  The unit is a time string (i.e. min, hr:min:00, days-hr:min:00, or
+  days-hr).  The default value is 7-0 (7 days). 
+<DT> PriorityUsageResetPeriod
+<DD> At this interval the usage of associations will be reset to 0.
+  This is used if you want to enforce hard limits of time usage per
+  association.  If PriorityDecayHalfLife is set to be 0 no decay will
+  happen and this is the only way to reset the usage accumulated by
+  running jobs.  By default this is turned off and it is advised to
+  use the PriorityDecayHalfLife option to avoid not having anything
+  running on your cluster, but if your schema is set up to only allow
+  certain amounts of time on your system this is the way to do it.
+  The unit is a time string (i.e. min, hr:min:00, days-hr:min:00, or
+  days-hr). The default value is not set (turned off). 
+
+<DT> PriorityFavorSmall
+<DD> A boolean that sets the polarity of the job size factor.  The
+  default setting is NO which results in larger node sizes having a
+  larger job size factor.  Setting this parameter to YES means that
+  the smaller the job, the greater the job size factor will be.
+<DT> PriorityMaxAge
+<DD> Specifies the queue wait time at which the age factor maxes out.
+  The unit is a time string (i.e. min, hr:min:00, days-hr:min:00, or
+  days-hr).  The default value is 7-0 (7 days). 
+<DT> PriorityWeightAge
+<DD> An unsigned integer that scales the contribution of the age factor.
+<DT> PriorityWeightFairshare
+<DD> An unsigned integer that scales the contribution of the fair-share factor.
+<DT> PriorityWeightJobSize
+<DD> An unsigned integer that scales the contribution of the job size factor.
+<DT> PriorityWeightPartition
+<DD> An unsigned integer that scales the contribution of the partition factor.
+<DT> PriorityWeightQOS
+<DD> An unsigned integer that scales the contribution of the quality of service factor.
+</DL>
+
+<P> Note:  As stated above, the five priority factors range from 0.0 to 1.0.  As such, the PriorityWeight terms may need to be set to a high enough value (say, 1000) to resolve very tiny differences in priority factors.  This is especially true with the fair-share factor, where two jobs may differ in priority by as little as .001. (or even less!)</P>
+
+<!-------------------------------------------------------------------------->
+<a name=configexample>
+<h2>Configuration Example</h2></a>
+
+<P> The following are sample slurm.conf file settings for the
+  Multi-factor Job Priority Plugin.</P>
+
+<P> The first example is for running the plugin applying decay over
+  time to reduce usage.  Hard limits can be used in this
+  configuration, but will have less effect since usage will decay
+  over time instead of having no decay over time.</P> 
+<PRE>
+# Activate the Multi-factor Job Priority Plugin with decay
+PriorityType=priority/multifactor
+
+# 2 week half-life
+PriorityDecayHalfLife=14-0
+
+# The larger the job, the greater its job size priority.
+PriorityFavorSmall=NO
+
+# The job's age factor reaches 1.0 after waiting in the
+# queue for 2 weeks.
+PriorityMaxAge=14-0
+
+# This next group determines the weighting of each of the
+# components of the Multi-factor Job Priority Plugin.
+# The default value for each of the following is 1.
+PriorityWeightAge=1000
+PriorityWeightFairshare=10000
+PriorityWeightJobSize=1000
+PriorityWeightPartition=1000
+PriorityWeightQOS=0 # don't use the qos factor
+</PRE>
+
+<P> This example is for running the plugin with no decay on usage,
+  thus making a reset of usage necessary.</P>
+<PRE>
+# Activate the Multi-factor Job Priority Plugin with decay
+PriorityType=priority/multifactor
+
+# apply no decay
+PriorityDecayHalfLife=0
+
+# reset usage after 28 days
+PriorityUsageResetPeriod=28-0
+
+# The larger the job, the greater its job size priority.
+PriorityFavorSmall=NO
+
+# The job's age factor reaches 1.0 after waiting in the
+# queue for 2 weeks.
+PriorityMaxAge=14-0
+
+# This next group determines the weighting of each of the
+# components of the Multi-factor Job Priority Plugin.
+# The default value for each of the following is 1.
+PriorityWeightAge=1000
+PriorityWeightFairshare=10000
+PriorityWeightJobSize=1000
+PriorityWeightPartition=1000
+PriorityWeightQOS=0 # don't use the qos factor
+</PRE>
+
+<!-------------------------------------------------------------------------->
+<p style="text-align:center;">Last modified 12 June 2009</p>
+
+<!--#include virtual="footer.txt"-->
+
diff --git a/doc/html/priority_plugins.shtml b/doc/html/priority_plugins.shtml
new file mode 100644
index 000000000..222e494ec
--- /dev/null
+++ b/doc/html/priority_plugins.shtml
@@ -0,0 +1,129 @@
+<!--#include virtual="header.txt"-->
+
+<h1><a name="top">SLURM Priority Plugin API</a></h1>
+
+<h2> Overview</h2>
+<p> This document describes SLURM priority plugins and the API that defines
+them. It is intended as a resource to programmers wishing to write their own
+SLURM priority plugins. This is version 100 of the API.</p>
+
+<p>SLURM priority plugins are SLURM plugins that implement the SLURM priority
+API described herein. They must conform to the SLURM Plugin API with the
+following specifications:</p>
+
+<p><span class="commandline">const char
+plugin_type[]="<i>major/minor</i>"</span><br>
+The major type must be &quot;priority.&quot; The minor type can be any
+recognizable abbreviation for the type of priority.
+We recommend, for example:</p>
+
+<ul>
+<li><b>basic</b>&#151;A plugin that implements the API and provides basic FIFO
+job priority.</li>
+<li><b>multifactor</b>&#151;The multi-factor job priority plugin.</li>
+</ul>
+
+<p>The <span class="commandline">plugin_name</span> and
+<span class="commandline">plugin_version</span> symbols required by the SLURM
+Plugin API require no specialization for job priority support.
+Note carefully, however, the versioning discussion below.</p>
+
+<p>The programmer is urged to study
+<span class="commandline">src/plugins/priority/basic/priority_basic.c</span> 
+for an example implementation of a SLURM priority plugin.</p>
+
+<p class="footer"><a href="#top">top</a></p>
+
+<h2>Data Objects</h2>
+<p>The implementation must maintain (though not necessarily directly export) an
+enumerated <b>errno</b> to allow SLURM to discover as practically as possible
+the reason for any failed API call.  Plugin-specific enumerated integer values
+may be used when appropriate.</p>
+
+<p>These values must not be used as return values in integer-valued functions
+in the API. The proper error return value from integer-valued functions is
+SLURM_ERROR. The implementation should endeavor to provide useful and pertinent
+information by whatever means is practical. Successful API calls are not
+required to reset any errno to a known value. However, the initial value of any
+errno, prior to any error condition arising, should be SLURM_SUCCESS. </p>
+
+<p class="commandline"> job_record</p>
+<p style="margin-left:.2in"><b>Description</b>: A slurmctld structure that
+contains details about a job.</p>
+
+<p class="commandline"> acct_association_rec_t</p>
+<p style="margin-left:.2in"><b>Description</b>: A slurm_accounting_storage
+structure that contains details about an association.</p>
+
+<p class="commandline"> priority_factors_object_t</p>
+<p style="margin-left:.2in"><b>Description</b>: A structure that contains a
+job's priority factors.</p>
+
+<p class="commandline"> priority_factors_request_msg_t</p>
+<p style="margin-left:.2in"><b>Description</b>: Used to request job priority
+factors.  Contains a list of specific job and user ids of the jobs the user
+wants to see.</p>
+
+<p class="commandline"> priority_factors_response_msg_t</p>
+<p style="margin-left:.2in"><b>Description</b>: Used to return the list of
+priority_factors_object_t's containing the job priority factors the user has
+asked to see.</p>
+
+<p class="footer"><a href="#top">top</a></p>
+
+<h2>API Functions</h2>
+<p>The following functions must appear. Functions which are not implemented should
+be stubbed.</p>
+
+<p class="commandline">uint32_t priority_p_set(uint32_t last_prio, struct job_record *job_ptr)</p>
+<p style="margin-left:.2in"><b>Description</b>: Sets the priority of the job.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:<br>
+<span class="commandline">last_prio</span> (input) the priority assigned to the
+last job<br>
+<span class="commandline">job_ptr</span> (input) pointer to the job record.</p>
+<p style="margin-left:.2in"><b>Returns</b>: the priority assigned to the job</p>
+
+<p class="commandline">void priority_p_reconfig(void)</p>
+<p style="margin-left:.2in"><b>Description</b>: Refresh the plugin's
+configuration. Called whenever slurmctld is reconfigured.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:
+<span class="commandline">none</span></p>
+<p style="margin-left:.2in"><b>Returns</b>: void</p>
+
+<p class="commandline">int priority_p_set_max_cluster_usage(uint32_t procs, uint32_t half_life)</p>
+<p style="margin-left:.2in"><b>Description</b>: Conveys the maximum
+raw usage to the priority plugin.  This establishes the reference by
+which each job's usage can be normalized.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:<br>
+<span class="commandline">procs</span> (input) the machine's processor count<br>
+<span class="commandline">half_life</span> (input) the configured half-life</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful,
+otherwise SLURM_ERROR</p>
+
+<p class="commandline">void priority_p_set_assoc_usage(acct_association_rec_t *assoc)</p>
+<p style="margin-left:.2in"><b>Description</b>: Set the normalized and
+effective usage for an association.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:
+<span class="commandline">assoc</span> (input/output) pointer to the association.</p>
+<p style="margin-left:.2in"><b>Returns</b>: void</p>
+
+<p class="commandline">List priority_p_get_priority_factors_list(priority_factors_request_msg_t *req_msg)</p>
+<p style="margin-left:.2in"><b>Description</b>: Retrieves the priority factors
+for all or specified jobs.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:
+<span class="commandline">req_msg</span> (input) pointer to the message request
+that contains the specific jobs or users of interest (of any).</p>
+<p style="margin-left:.2in"><b>Returns</b>: a list of priority_factors_object_t's
+containing the requested job priority factors</p>
+
+<h2>Versioning</h2>
+<p> This document describes version 100 of the SLURM Priority API. Future
+releases of SLURM may revise this API. A priority plugin conveys its ability
+to implement a particular API version using the mechanism outlined for SLURM
+plugins.</p>
+
+<p class="footer"><a href="#top">top</a></p>
+
+<p style="text-align:center;">Last modified 20 February 2009</p>
+
+<!--#include virtual="footer.txt"-->
diff --git a/doc/html/proctrack_plugins.shtml b/doc/html/proctrack_plugins.shtml
index 260a33804..9c529a8a5 100644
--- a/doc/html/proctrack_plugins.shtml
+++ b/doc/html/proctrack_plugins.shtml
@@ -74,7 +74,7 @@ be stubbed.</p>
 <p style="margin-left:.2in"><b>Description</b>: Create a container.
 The container should be valid   
 <span class="commandline">slurm_container_destroy()</span> is called.
-This function must put the container ID directoy in the job structure's 
+This function must put the container ID directory in the job structure's 
 variable <i>cont_id</i>.</p>
 <p style="margin-left:.2in"><b>Argument</b>: 
 <span class="commandline"> job</span>&nbsp; &nbsp;&nbsp;(input/output) 
diff --git a/doc/html/programmer_guide.shtml b/doc/html/programmer_guide.shtml
index 50a402d14..6e9c59e8f 100644
--- a/doc/html/programmer_guide.shtml
+++ b/doc/html/programmer_guide.shtml
@@ -36,7 +36,7 @@ by all of the different infrastructures of a particular variety. When a SLURM
 daemon is initiated, it reads the configuration file to determine which of the 
 available plugins should be used. A <a href="plugins.html">plugin developer's 
 guide</a> is available with general information about plugins. Most plugin 
-types also have their own documenation available, such as 
+types also have their own documentation available, such as 
 <a href="authplugins.html">SLURM Authentication Plugin API</a> and
 <a href="jobcompplugins.html">SLURM Job Completion Logging API</a>.</p>
 
@@ -74,12 +74,14 @@ are here.</p>
 <p class="footer"><a href="#top">top</a></p>
 
 <h2>Documentation</h2>
-<p>All of the documentation is in the subdirectory <b>doc</b>. Man pages for the 
-APIs, configuration file, commands, and daemons are in <b>doc/man</b>. Various 
-documents suitable for public consumption are in <b>doc/html</b>. Overall SLURM 
-design documents including various figures are in <b>doc/pubdesign</b>. Various 
-design documents (many of which are dated) can be found in <b>doc/slides</b> and 
-<b>doc/txt</b>. A survey of available resource managers as of 2001 is in <b>doc/survey</b>. 
+<p>All of the documentation is in the subdirectory <b>doc</b>.
+Two directories are of particular interest:</p>
+
+<p style="margin-left:.2in">
+<b>doc/man</b>&#151; contains the man pages for the APIs, 
+configuration file, commands, and daemons.<br>
+<b>doc/html</b>&#151; contains the web pages.</p>
+ 
 <h2>Source Code</h2>
 
 <p>Functions are divided into several categories, each in its own subdirectory. 
@@ -92,21 +94,27 @@ the SLURM code. Used to send and get SLURM information from the central manager.
 These are the functions user applications might utilize.<br>
 <b>common</b>&#151;General purpose functions for widespread use throughout 
 SLURM.<br>
-<b>plugins</b>&#151;Plugin functions for various infrastructure. A separate 
-subdirectory is used for each plugin class:<br> 
+<b>database</b>&#151;Various database files that support the accounting
+ storage plugin.<br>
+<b>plugins</b>&#151;Plugin functions for various infrastructures or optional
+behavior. A separate subdirectory is used for each plugin class:<br>
 <ul>
 <li><b>accounting_storage</b> for specifing the type of storage for accounting,<br>
-<li><b>auth</b> for user authentication,<br> 
+<li><b>auth</b> for user authentication,<br>
 <li><b>checkpoint</b> for system-initiated checkpoint and restart of user jobs,<br>
 <li><b>crypto</b> for cryptographic functions,<br>
 <li><b>jobacct_gather</b> for job accounting,<br>
 <li><b>jobcomp</b> for job completion logging,<br>
 <li><b>mpi</b> for MPI support,<br>
+<li><b>priority</b> calculates job priority based on a number of factors
+including fair-share,<br>
 <li><b>proctrack</b> for process tracking,<br>
-<li><b>sched</b> for job scheduler,<br> 
+<li><b>sched</b> for job scheduler,<br>
 <li><b>select</b> for a job's node selection,<br>
 <li><b>switch</b> for switch (interconnect) specific functions,<br>
-<li><b>task</b> for task affinity to processors.<br>
+<li><b>task</b> for task affinity to processors,<br>
+<li><b>topology</b> methods for assigning nodes to jobs based on node
+topology.<br>
 </ul>
 <p style="margin-left:.2in">
 <b>sacct</b>&#151;User command to view accounting information about jobs.<br>
@@ -123,15 +131,23 @@ with an existing SLURM job.<br>
 <b>slurmctld</b>&#151;SLURM central manager daemon code.<br>
 <b>slurmd</b>&#151;SLURM daemon code to manage the compute server nodes including 
 the execution of user applications.<br>
+<b>slurmdbd</b>&#151;SLURM database daemon managing access to the accounting
+storage database.<br>
 <b>smap</b>&#151;User command to view layout of nodes, partitions, and jobs.
 This is particularly valuable on systems like Bluegene, which has a three
 dimension torus topography.<br>
+<b>sprio</b>&#151;User command to see the breakdown of a job's priority
+calculation when the Multifactor Job Priority plugin is installed.<br>
 <b>squeue</b>&#151;User command to get information on SLURM jobs and job steps.<br>
 <b>sreport</b>&#151;User command to view various reports about past
 usage across the enterprise.<br>
 <b>srun</b>&#151;User command to submit a job, get an allocation, and/or 
 initiation a parallel job step.<br>
-<b>sstat</b>&#151;User tool to status running jobs.<br>
+<b>srun_cr</b>&#151;Checkpoint/Restart wrapper for srun.<br>
+<b>sshare</b>&#151;User command to view shares and usage when the Multifactor
+Job Priority plugin is installed.<br>
+<b>sstat</b>&#151;User command to view detailed statistics about running
+jobs when a Job Accounting Gather plugin is installed.<br>
 <b>strigger</b>&#151;User and administrator tool to manage event triggers.<br>
 <b>sview</b>&#151;User command to view and update node, partition, and job 
 job state information.<br>
@@ -158,7 +174,7 @@ and options including stress tests.  The file <b>testsuite/expect/globals</b>
 contains default paths and procedures for all of the individual tests.  At
 the very least, you will need to set the <i>slurm_dir</i> variable to the correct
 value.  To avoid conflicts with other developers, you can override variable settings
-in a seperate file named <b>testsuite/expect/globals.local</b>.</p>
+in a separate file named <b>testsuite/expect/globals.local</b>.</p>
 
 <p>Set your working directory to <b>testsuite/expect</b> before 
 starting these tests.  Tests may be executed individually by name
@@ -187,7 +203,7 @@ simultaneous job steps to avoid overloading the
 <span class="commandline">slurmd</span> daemon executing them all.</p>
 
 <h3><a name="multiple_slurmd_support">Multiple slurmd support</a></h3>
-<p>It is possible to run mutiple slurmd daemons on a single node, each using
+<p>It is possible to run multiple slurmd daemons on a single node, each using
 a different port number and NodeName alias.  This is very useful for testing
 networking and protocol changes, or anytime you want to simulate a larger
 cluster than you really have.  The author uses this on his desktop to simulate
@@ -235,6 +251,6 @@ host1> slurmd -N foo21
 
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 7 October 2008</p>
+<p style="text-align:center;">Last modified 27 March 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/publications.shtml b/doc/html/publications.shtml
index 2dde255da..49c34f8f7 100644
--- a/doc/html/publications.shtml
+++ b/doc/html/publications.shtml
@@ -7,8 +7,13 @@
 <h2>Presentations</h2>
 
 <ul>
+<li><a href="slurm.sc08.bof.pdf">High Scalability Resource Management with 
+SLURM</a> (Supercomputing 2008, November 2008)</li>
+<li><a href="slurm.sc08.status.pdf">SLURM Status Report</a>
+(Supercomputing 2008, November 2008)</li>
 <li><a href="slurm_v1.3.pdf">SLURM Version 1.3</a> (May 2008)</li>
-<li><a href="slurm_moab.pdf">Managing Clusters with Moab and SLURM</a> (May 2008)</li>
+<li><a href="slurm_moab.pdf">Managing Clusters with Moab and SLURM</a> 
+(May 2008)</li>
 <li><a href="slurm_v1.2.pdf">Resource Management at LLNL, SLURM Version 1.2</a>
 (April 2007)</li>
 <li><a href="lci.7.tutorial.pdf">Resource Management Using SLURM</a>,
@@ -16,7 +21,15 @@
 </ul>
 
 <h2>Publications</h2>
-<b>Enhancing an Open Source Resource Manager with Multi-Core/Multi-threaded Support</b>,
+
+<p><a href="http://www.linux-mag.com/id/7239/1/">
+<b>Caos NSA and Perceus: All-in-one Cluster Software Stack</b></a>,
+Jeffrey B. Layton,
+<i>Linux Magazine</i>,
+5 February 2009.
+</p>
+
+<p><b>Enhancing an Open Source Resource Manager with Multi-Core/Multi-threaded Support</b>,
 S. M. Balle and D. Palermo,
 <i>Job Scheduling Strategies for Parallel Processing</i>,
 2007.</p>
@@ -27,13 +40,20 @@ M. Jette and M. Grondona,
 <i>Proceedings of ClusterWorld Conference and Expo</i>,
 San Jose, California, June 2003.</p>
 
-<b>SLURM: Simple Linux Utility for Resource Management</b>,
+<p><b>SLURM: Simple Linux Utility for Resource Management</b>,
 A. Yoo, M. Jette, and M. Grondona,
 <i>Job Scheduling Strategies for Parallel Processing</i>,
 volume 2862 of <i>Lecture Notes in Computer Science</i>, 
 pages 44-60,
 Springer-Verlag, 2003.</p>
 
-<p style="text-align:center;">Last modified 3 June 2008</p>
+<h2>Interview</h2>
+
+<p><a href="http://www.rce-cast.com/index.php/Podcast/rce-10-slurm.html">
+RCE 10: SLURM (podcast)</a>:
+Brock Palen and Jeff Squyres speak with Morris Jette and 
+Danny Auble of LLNL about SLURM.</p>
+
+<p style="text-align:center;">Last modified 27 May 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/quickstart.shtml b/doc/html/quickstart.shtml
index af47c6940..d93ff9207 100644
--- a/doc/html/quickstart.shtml
+++ b/doc/html/quickstart.shtml
@@ -25,7 +25,7 @@ and <b>sview</b>.
 All of the commands can run anywhere in the cluster.</p>
 
 <div class="figure">
-  <img src="arch.gif" width="600"><br />
+  <img src="arch.gif" width=550></br>
   Figure 1. SLURM components
 </div>
 
@@ -45,7 +45,7 @@ a single job step may be started that utilizes all nodes allocated to the job,
 or several job steps may independently use a portion of the allocation.</p>
 
 <div class="figure">
-  <img src="entities.gif" width="291" height="218"><br />
+  <img src="entities.gif" width=500></br>
   Figure 2. SLURM entities
 </div>
 
@@ -346,11 +346,11 @@ adev0: scancel 473
 adev0: squeue
 JOBID PARTITION NAME USER ST TIME  NODES NODELIST(REASON)
 </pre>
-<p class="footer"><a href="#top">top</a></p>
-
 
+<p class="footer"><a href="#top">top</a></p>
 
 <h2><a name="mpi">MPI</a></h2>
+
 <p>MPI use depends upon the type of MPI being used. 
 There are three fundamentally different modes of operation used 
 by these various MPI implementation.
@@ -368,215 +368,22 @@ These tasks initiated outside of SLURM's monitoring
 or control. SLURM's epilog should be configured to purge 
 these tasks when the job's allocation is relinquished. </li>
 </ol>
-<p>Instructions for using several varieties of MPI with SLURM are
-provided below.</p> 
-
-<p> <a href="http://www.open-mpi.org/"><b>Open MPI</b></a> relies upon
-SLURM to allocate resources for the job and then mpirun to initiate the 
-tasks. When using <span class="commandline">salloc</span> command, 
-<span class="commandline">mpirun</span>'s -nolocal option is recommended. 
-For example:
-<pre>
-$ salloc -n4 sh    # allocates 4 processors 
-                   # and spawns shell for job
-&gt; mpirun -np 4 -nolocal a.out
-&gt; exit             # exits shell spawned by 
-                   # initial srun command
-</pre>
-<p>Note that any direct use of <span class="commandline">srun</span>
-will only launch one task per node when the LAM/MPI plugin is used.
-To launch more than one task per node using the
-<span class="commandline">srun</span> command, the <i>--mpi=none</i>
-option will be required to explicitly disable the LAM/MPI plugin.</p>
-
-<p> <a href="http://www.quadrics.com/"><b>Quadrics MPI</b></a> relies upon SLURM to 
-allocate resources for the job and <span class="commandline">srun</span> 
-to initiate the tasks. One would build the MPI program in the normal manner 
-then initiate it using a command line of this sort:</p>
-<pre>
-$ srun [options] &lt;program&gt; [program args]
-</pre>
-
-<p> <a href="http://www.lam-mpi.org/"><b>LAM/MPI</b></a> relies upon the SLURM 
-<span class="commandline">salloc</span> or <span class="commandline">sbatch</span>
-command to allocate. In either case, specify 
-the maximum number of tasks required for the job. Then execute the 
-<span class="commandline">lamboot</span> command to start lamd daemons. 
-<span class="commandline">lamboot</span> utilizes SLURM's 
-<span class="commandline">srun</span> command to launch these daemons. 
-Do not directly execute the <span class="commandline">srun</span> command 
-to launch LAM/MPI tasks. For example: 
-<pre>
-$ salloc -n16 sh  # allocates 16 processors 
-                  # and spawns shell for job
-&gt; lamboot
-&gt; mpirun -np 16 foo args
-1234 foo running on adev0 (o)
-2345 foo running on adev1
-etc.
-&gt; lamclean
-&gt; lamhalt
-&gt; exit            # exits shell spawned by 
-                  # initial srun command
-</pre>
-<p>Note that any direct use of <span class="commandline">srun</span> 
-will only launch one task per node when the LAM/MPI plugin is configured
-as the default plugin.  To launch more than one task per node using the 
-<span class="commandline">srun</span> command, the <i>--mpi=none</i>
-option would be required to explicitly disable the LAM/MPI plugin
-if that is the system default.</p>
-
-<p class="footer"><a href="#top">top</a></p>
-
-<p><a href="http://www.hp.com/go/mpi"><b>HP-MPI</b></a> uses the 
-<span class="commandline">mpirun</span> command with the <b>-srun</b> 
-option to launch jobs. For example:
-<pre>
-$MPI_ROOT/bin/mpirun -TCP -srun -N8 ./a.out
-</pre></p>
-
-<p><a href="http://www.mcs.anl.gov/research/projects/mpich2/"><b>
-MPICH2</b></a> jobs 
-are launched using the <b>srun</b> command. Just link your program with 
-SLURM's implementation of the PMI library so that tasks can communicate
-host and port information at startup. (The system administrator can add
-these option to the mpicc and mpif77 commands directly, so the user will not 
-need to bother). For example:
-<pre>
-$ mpicc -L&lt;path_to_slurm_lib&gt; -lpmi ...
-$ srun -n20 a.out
-</pre>
-<b>NOTES:</b>
+<p>Links to instructions for using several varieties of MPI 
+with SLURM are provided below.
 <ul>
-<li>Some MPICH2 functions are not currently supported by the PMI 
-library integrated with SLURM</li>
-<li>Set the environment variable <b>PMI_DEBUG</b> to a numeric value 
-of 1 or higher for the PMI library to print debugging information</li>
+<li><a href="mpi_guide.html#bluegene_mpi">BlueGene MPI</a></li>
+<li><a href="mpi_guide.html#hp_mpi">HP-MPI</a></li>
+<li><a href="mpi_guide.html#lam_mpi">LAM/MPI</a></li>
+<li><a href="mpi_guide.html#mpich1">MPICH1</a></li>
+<li><a href="mpi_guide.html#mpich2">MPICH2</a></li>
+<li><a href="mpi_guide.html#mpich_gm">MPICH-GM</a></li>
+<li><a href="mpi_guide.html#mpich_mx">MPICH-MX</a></li>
+<li><a href="mpi_guide.html#mvapich">MVAPICH</a></li>
+<li><a href="mpi_guide.html#mvapich2">MVAPICH2</a></li>
+<li><a href="mpi_guide.html#open_mpi">Open MPI</a></li>
+<li><a href="mpi_guide.html#quadrics_mpi">Quadrics MPI</a></li>
 </ul></p>
 
-<p><a href="http://www.myri.com/scs/download-mpichgm.html"><b>MPICH-GM</b></a>
-jobs can be launched directly by <b>srun</b> command.
-SLURM's <i>mpichgm</i> MPI plugin must be used to establish communications 
-between the launched tasks. This can be accomplished either using the SLURM 
-configuration parameter <i>MpiDefault=mpichgm</i> in <b>slurm.conf</b>
-or srun's <i>--mpi=mpichgm</i> option.
-<pre>
-$ mpicc ...
-$ srun -n16 --mpi=mpichgm a.out
-</pre>
-
-<p><a href="http://www.myri.com/scs/download-mpichmx.html"><b>MPICH-MX</b></a>
-jobs can be launched directly by <b>srun</b> command.
-SLURM's <i>mpichmx</i> MPI plugin must be used to establish communications
-between the launched tasks. This can be accomplished either using the SLURM
-configuration parameter <i>MpiDefault=mpichmx</i> in <b>slurm.conf</b>
-or srun's <i>--mpi=mpichmx</i> option.
-<pre>
-$ mpicc ...
-$ srun -n16 --mpi=mpichmx a.out
-</pre>
-
-<p><a href="http://mvapich.cse.ohio-state.edu/"><b>MVAPICH</b></a>
-jobs can be launched directly by <b>srun</b> command.
-SLURM's <i>mvapich</i> MPI plugin must be used to establish communications 
-between the launched tasks. This can be accomplished either using the SLURM 
-configuration parameter <i>MpiDefault=mvapich</i> in <b>slurm.conf</b>
-or srun's <i>--mpi=mvapich</i> option.
-<pre>
-$ mpicc ...
-$ srun -n16 --mpi=mvapich a.out
-</pre>
-<b>NOTE:</b> If MVAPICH is used in the shared memory model, with all tasks
-running on a single node, then use the <i>mpich1_shmem</i> MPI plugin instead.<br>
-<b>NOTE (for system administrators):</b> Configure
-<i>PropagateResourceLimitsExcept=MEMLOCK</i> in <b>slurm.conf</b> and 
-start the <i>slurmd</i> daemons with an unlimited locked memory limit.
-For more details, see 
-<a href="http://mvapich.cse.ohio-state.edu/support/mvapich_user_guide.html#x1-420007.2.3">MVAPICH</a> 
-documentation for "CQ or QP Creation failure".</p>
-
-<p><a href="http://nowlab.cse.ohio-state.edu/projects/mpi-iba"><b>MVAPICH2</b></a>
-jobs can be launched directly by <b>srun</b> command.
-SLURM's <i>none</i> MPI plugin must be used to establish communications 
-between the launched tasks. This can be accomplished either using the SLURM 
-configuration parameter <i>MpiDefault=none</i> in <b>slurm.conf</b> 
-or srun's <i>--mpi=none</i> option. The program must also be linked with
-SLURM's implementation of the PMI library so that tasks can communicate
-host and port information at startup. (The system administrator can add
-these option to the mpicc and mpif77 commands directly, so the user will not
-need to bother).  <b>Do not use SLURM's MVAPICH plugin for MVAPICH2.</b>
-<pre>
-$ mpicc -L&lt;path_to_slurm_lib&gt; -lpmi ...
-$ srun -n16 --mpi=none a.out
-</pre>
-
-<p><a href="http://www.research.ibm.com/bluegene/"><b>BlueGene MPI</b></a> relies 
-upon SLURM to create the resource allocation and then uses the native
-<span class="commandline">mpirun</span> command to launch tasks. 
-Build a job script containing one or more invocations of the 
-<span class="commandline">mpirun</span> command. Then submit 
-the script to SLURM using <span class="commandline">sbatch</span>.
-For example:</p>
-<pre>
-$ sbatch -N512 my.script
-</pre>
-<p>Note that the node count specified with the <i>-N</i> option indicates
-the base partition count.
-See <a href="bluegene.html">BlueGene User and Administrator Guide</a> 
-for more information.</p>
-
-<p><a href="http://www-unix.mcs.anl.gov/mpi/mpich1/"><b>MPICH1</b></a>
-development ceased in 2005. It is recommended that you convert to 
-MPICH2 or some other MPI implementation. 
-If you still want to use MPICH1, note that it has several different 
-programming models. If you are using the shared memory model 
-(<i>DEFAULT_DEVICE=ch_shmem</i> in the mpirun script), then initiate 
-the tasks using the <span class="commandline">srun</span> command 
-with the <i>--mpi=mpich1_shmem</i> option.</p>
-<pre>
-$ srun -n16 --mpi=mpich1_shmem a.out
-</pre>
-
-<p>If you are using MPICH P4 (<i>DEFAULT_DEVICE=ch_p4</i> in 
-the mpirun script) and SLURM version 1.2.11 or newer, 
-then it is recommended that you apply the patch in the SLURM 
-distribution's file <i>contribs/mpich1.slurm.patch</i>. 
-Follow directions within the file to rebuild MPICH. 
-Applications must be relinked with the new library.
-Initiate tasks using the 
-<span class="commandline">srun</span> command with the 
-<i>--mpi=mpich1_p4</i> option.</p>
-<pre>
-$ srun -n16 --mpi=mpich1_p4 a.out
-</pre>
-<p>Note that SLURM launches one task per node and the MPICH 
-library linked within your applications launches the other 
-tasks with shared memory used for communications between them.
-The only real anomaly is that all output from all spawned tasks
-on a node appear to SLURM as coming from the one task that it
-launched. If the srun --label option is used, the task ID labels
-will be misleading.</p>
- 
-<p>Other MPICH1 programming models current rely upon the SLURM 
-<span class="commandline">salloc</span> or 
-<span class="commandline">sbatch</span> command to allocate resources.
-In either case, specify the maximum number of tasks required for the job.
-You may then need to build a list of hosts to be used and use that 
-as an argument to the mpirun command. 
-For example:
-<pre>
-$ cat mpich.sh
-#!/bin/bash
-srun hostname -s | sort -u >slurm.hosts
-mpirun [options] -machinefile slurm.hosts a.out
-rm -f slurm.hosts
-$ sbatch -n16 mpich.sh
-sbatch: Submitted batch job 1234
-</pre>
-<p>Note that in this example, mpirun uses the rsh command to launch 
-tasks. These tasks are not managed by SLURM since they are launched 
-outside of its control.</p>
- 
-<p style="text-align:center;">Last modified 16 July 2008</p>
+<p style="text-align:center;">Last modified 26 February 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/quickstart_admin.shtml b/doc/html/quickstart_admin.shtml
index 08ff660f0..588ac7a11 100644
--- a/doc/html/quickstart_admin.shtml
+++ b/doc/html/quickstart_admin.shtml
@@ -2,20 +2,24 @@
 
 <h1>Quick Start Administrator Guide</h1>
 <h2>Overview</h2>
-Please see the <a href="quickstart.html">Quick Start User Guide</a> for a general 
-overview. 
+Please see the <a href="quickstart.html">Quick Start User Guide</a> for a
+general overview. 
 
 <h2>Super Quick Start</h2>
 <ol>
 <li>Make sure that you have synchronized clocks plus consistent users and groups
-across the cluster.</li>
+(UIDs and GIDs) across the cluster.</li>
+<li>Install <a href="http://home/gna.org/munge">MUNGE</a> for 
+authentication. Make sure that all nodes in your cluster have the
+same <i>munge.key</i>. Make sure the MUNGE daemon, <i>munged</i>
+is started before you start the SLURM daemons.</li>
 <li>bunzip2 the distributed tar-ball and untar the files:<br>
 <i>tar --bzip -x -f slurm*tar.bz2</i></li>
 <li><i>cd</i> to the directory containing the SLURM source and type
 <i>./configure</i> with appropriate options, typically <i>--prefix=</i> 
 and <i>--sysconfdir=</i></li>
 <li>Type <i>make</i> to compile SLURM.</li>
-<li>Type <i>make install</i> to install the programs, documentation, libaries,
+<li>Type <i>make install</i> to install the programs, documentation, libraries,
 header files, etc.</li>
 <li>Build a configuration file using your favorite web browser and
 <i>doc/html/configurator.html</i>.<br>
@@ -27,22 +31,15 @@ They must be created and made writable by <i>SlurmUser</i> as needed prior to
 starting SLURM daemons.</li>
 <li>Install the configuration file in <i>&lt;sysconfdir&gt;/slurm.conf</i>.<br>
 NOTE: You will need to install this configuration file on all nodes of the cluster.</li>
-<li>Create OpenSSL keys:<br>
-<i>openssl genrsa -out &lt;sysconfdir&gt;/slurm.key 1024</i><br>
-<i>openssl rsa -in  &lt;sysconfdir&gt/slurm.key -pubout -out  &lt;sysconfdir&gt;/slurm.cert</i><br>
-NOTE: You will build the OpenSSL key files on one node and distribute <i>slurm.cert</i>
-to all of the nodes in the cluster. <i>slurm.key</i> must be readable only by
-<i>SlurmUser<i> and is only needed where the <i>slurmctld</i> (SLURM controller
-daemon) executes, typically just a couple of nodes.</li>
 <li>Start the <i>slurmctld</i> and <i>slurmd</i> daemons.</li>
 </ol>
-<p>NOTE: Items 2 through 5 can be replaced with</p>
+<p>NOTE: Items 3 through 6 can be replaced with</p>
 <ol>
 <li><i>rpmbuild -ta slurm*.tar.bz2</i></li>
 <li><i>rpm --install &lt;the rpm files&gt;</i></li>
 </ol>
 
-<h2>Building and Installing</h2>
+<h2>Building and Installing SLURM</h2>
 
 <p>Instructions to build and install SLURM manually are shown below. 
 See the README and INSTALL files in the source distribution for more details.
@@ -51,13 +48,14 @@ See the README and INSTALL files in the source distribution for more details.
 <li>bunzip2 the distributed tar-ball and untar the files:</br> 
 <i>tar --bzip -x -f slurm*tar.bz2</i>
 <li><i>cd</i> to the directory containing the SLURM source and type 
-<i>./configure</i> with appropriate options.</li>
+<i>./configure</i> with appropriate options (see below).</li>
 <li>Type <i>make</i> to compile SLURM.</li>
-<li>Type <i>make install</i> to install the programs, documentation, libaries, 
+<li>Type <i>make install</i> to install the programs, documentation, libraries, 
 header files, etc.</li>
 </ol>
-<p>The most commonly used arguments to the <span class="commandline">configure</span> 
-command include: </p>
+<p>A full list of <i>configure</i> options will be returned by the command
+<i>configure --help</i>. The most commonly used arguments to the 
+<i>configure</i> command include: </p>
 <p style="margin-left:.2in"><span class="commandline">--enable-debug</span><br>
 Enable additional debugging logic within SLURM.</p>
 <p style="margin-left:.2in"><span class="commandline">--prefix=<i>PREFIX</i></span><br>
@@ -69,20 +67,20 @@ Specify location of SLURM configuration file. The default value is PREFIX/etc</p
 
 <p>If required libraries or header files are in non-standard locations, 
 set CFLAGS and LDFLAGS environment variables accordingly.
-Type <i>configure --help</i> for a more complete description of options.
 Optional SLURM plugins will be built automatically when the
 <span class="commandline">configure</span> script detects that the required 
 build requirements are present. Build dependencies for various plugins
 and commands are denoted below.
 </p>
 <ul>
-<li> <b>Munge</b> The auth/munge plugin will be built if the Munge authentication
-                  library is installed. </li>
+<li> <b>MUNGE</b> The auth/munge plugin will be built if the MUNGE authentication
+                  library is installed. MUNGE is used as the default
+                  authentication mechanism.</li>
 <li> <b>Authd</b> The auth/authd plugin will be built and installed if 
                   the libauth library and its dependency libe are installed. 
 		  </li>
 <li> <b>Federation</b> The switch/federation plugin will be built and installed
-		  if the IBM Federation switch libary is installed.
+		  if the IBM Federation switch library is installed.
 <li> <b>QsNet</b> support in the form of the switch/elan plugin requires
                   that the qsnetlibs package (from Quadrics) be installed along
 		  with its development counterpart (i.e. the qsnetheaders
@@ -127,11 +125,11 @@ Some macro definitions that may be used in building SLURM include:
 <dt>slurm_sysconfdir
 <dd>Pathname of directory containing the slurm.conf configuration file
 <dt>with_munge
-<dd>Specifies munge (authentication library) installation location
+<dd>Specifies the MUNGE (authentication library) installation location
 <dt>with_proctrack
 <dd>Specifies AIX process tracking kernel extension header file location
 <dt>with_ssl
-<dd>Specifies SSL libary installation location
+<dd>Specifies SSL library installation location
 </dl>
 <p>To build SLURM on our AIX system, the following .rpmmacros file is used:
 <pre>
@@ -172,20 +170,26 @@ readable or writable by the user <b>SlurmUser</b> (the slurm configuration
 files must be readable; the log file directory and state save directory 
 must be writable).</p>
 
-<p>The <b>slurmd</b> daemon executes on every compute node. It resembles a remote 
-shell daemon to export control to SLURM. Because slurmd initiates and manages 
-user jobs, it must execute as the user root.</p>
+<p>The <b>slurmd</b> daemon executes on every compute node. It resembles a 
+remote shell daemon to export control to SLURM. Because slurmd initiates and 
+manages user jobs, it must execute as the user root.</p>
+
+<p>If you want to archive job accounting records to a database, the 
+<b>slurmdbd</b> (SLURM DataBase Daemon) should be used. We recommend that 
+you defer adding accounting support until after basic SLURM functionality has 
+established you your system. An <a href="accounting.html">Accounting</a> web 
+page contains more information.</p>
 
-<p><b>slurmctld</b> and/or <b>slurmd</b> should be initiated at node startup time 
-per the SLURM configuration.
+<p><b>slurmctld</b> and/or <b>slurmd</b> should be initiated at node startup 
+time per the SLURM configuration.
 A file <b>etc/init.d/slurm</b> is provided for this purpose. 
 This script accepts commands <b>start</b>, <b>startclean</b> (ignores 
 all saved state), <b>restart</b>, and <b>stop</b>.</p>
 
 <h2>Infrastructure</h2>
 <h3>User and Group Identification</h3>
-<p>There must be a uniform user and group name space across the 
-cluster. 
+<p>There must be a uniform user and group name space (including 
+UIDs and GIDs) across the cluster. 
 It is not necessary to permit user logins to the control hosts
 (<b>ControlMachine</b> or <b>BackupController</b>), but the 
 users and groups must be configured on those hosts.</p>
@@ -197,46 +201,67 @@ plugin chosen at runtame via the <b>AuthType</b> keyword in the SLURM
 configuration file.  Currently available authentication types include
 <a href="http://www.theether.org/authd/">authd</a>, 
 <a href="http://home.gna.org/munge/">munge</a>, and none.
-The default authentication infrastructure is "none". This permits any user to execute 
-any job as another user. This may be fine for testing purposes, but certainly not for production 
-use. <b>Configure some AuthType value other than "none" if you want any security.</b>
-We recommend the use of Munge unless you are experienced with authd.
-</p>
+The default authentication infrastructure is "munge", but this does 
+require the installation of the MUNGE package.
+An authentication type of "none" requires no infrastructure, but permits
+any user to execute any job as another user with limited programming effort. 
+This may be fine for testing purposes, but certainly not for production use. 
+<b>Configure some AuthType value other than "none" if you want any security.</b>
+We recommend the use of MUNGE unless you are experienced with authd.
+If using MUNGE, all nodes in the cluster must be configured with the
+same <i>munge.key</i> file. 
+The MUNGE daemon, <i>munged</i>, must also be started before SLURM daemons.</p>
+
 <p>While SLURM itself does not rely upon synchronized clocks on all nodes
 of a cluster for proper operation, its underlying authentication mechanism 
-may have this requirement. For instance, if SLURM is making use of the
-auth/munge plugin for communication, the clocks on all nodes will need to 
-be synchronized. </p>
+do have this requirement.</p>
 
 <h3>MPI support</h3>
 <p>SLURM supports many different SLURM implementations. 
 For more information, see <a href="quickstart.html#mpi">MPI</a>.
 
 <h3>Scheduler support</h3>
-<p>The scheduler used by SLURM is controlled by the <b>SchedType</b> configuration 
-parameter. This is meant to control the relative importance of pending jobs and 
-several options are available
-SLURM's default scheduler is <u>FIFO (First-In First-Out)</u>. 
-SLURM offers a backfill scheduling plugin.
-<u>Backfill scheduling</u> will initiate a lower-priority jobs
-if doing so does not delay the expected initiation time of higher priority jobs; 
-essentially using smaller jobs to fill holes in the resource allocation plan. 
-Effective backfill scheduling does require users to specify job time limits.
-SLURM offers a <u>gang scheduler</u>, which time-slices jobs in the same partition/queue
-and can be used to preempt jobs from lower-priority queues in order to execute
-jobs in higher priority queues.
-SLURM also supports a plugin for use of 
+<p>SLURM can be configured with rather simple or quite sophisticated
+scheduling algorithms depending upon your needs and willingness to 
+manage the configuration (much of which requires a database).
+The first configuration parameter of interest is <b>PriorityType</b>
+with two options available: <i>basic</i> (first-in-first-out) and
+<i>multifactor</i>. 
+The <i>multifactor</i> plugin will assign a priority to jobs based upon
+a multitude of configuration parameters (age, size, fair-share allocation, 
+etc.) and its details are beyond the scope of this document.
+See the <a href="priority_multifactor.html">Multifactor Job Priority Plugin</a>
+document for details.</p>
+
+<p>The <b>SchedType</b> configuration parameter controls how queued
+jobs are scheduled and several options are available.
+<ul>
+<li><i>builtin</i>  will initiate jobs strictly in their priority order,
+typically (first-in-first-out) </li>
+<li><i>backfill</i> will initiate a lower-priority job if doing so does 
+not delay the expected initiation time of higher priority jobs; essentially 
+using smaller jobs to fill holes in the resource allocation plan. Effective 
+backfill scheduling does require users to specify job time limits.</li>
+<li><i>gang</i> time-slices jobs in the same partition/queue and can be 
+used to preempt jobs from lower-priority queues in order to execute
+jobs in higher priority queues.</li>
+<li><i>wiki</i> is an interface for use with
 <a href="http://www.clusterresources.com/pages/products/maui-cluster-scheduler.php">
-The Maui Scheduler</a> or 
+The Maui Scheduler</a></li>
+<li><i>wiki2</i> is an interface for use with the
 <a href="http://www.clusterresources.com/pages/products/moab-cluster-suite.php">
-Moab Cluster Suite</a> which offer sophisticated scheduling algorithms.
-For more information about these options see
+Moab Cluster Suite</a>
+</ul>
+
+<p>For more information about scheduling options see
 <a href="gang_scheduling.html">Gang Scheduling</a>,
-<a href="preempt.html">Preemption</a> and
+<a href="preempt.html">Preemption</a>,
+<a href="reservations.html">Resource Reservation Guide</a>,
+<a href="resource_limits.html">Resource Limits</a> and
 <a href="cons_res_share.html">Sharing Consumable Resources</a>.</p> 
 
-<h3>Node selection</h3>
-<p>The node selection mechanism used by SLURM is controlled by the 
+<h3>Resource selection</h3>
+<p>The resource selection mechanism used by SLURM is controlled by the 
 <b>SelectType</b> configuration parameter. 
 If you want to execute multiple jobs per node, but apportion the processors, 
 memory and other resources, the <i>cons_res</i> (consumable resources) 
@@ -273,7 +298,7 @@ This is meant to be exploited by any parallel debugger (notably, TotalView),
 and support is unconditionally compiled into SLURM code. 
 </p>
 <p>We use a patched version of TotalView that looks for a "totalview_jobid" 
-symbol in <b>srun</b> that it then uses (configurably) to perform a bulk 
+symbol in <b>srun</b> that it then uses (per configuration) to perform a bulk 
 launch of the <b>tvdsvr</b> daemons via a subsequent <b>srun</b>. Otherwise
 it is difficult to get TotalView to use <b>srun</b> for a bulk launch, since 
 <b>srun</b> will be unable to determine for which job it is launching tasks.
@@ -411,22 +436,20 @@ PartitionName=pbatch Nodes=mcr[192-1151]
 </pre>
  
 <h2>Security</h2>
-<p>The use of <a href="http://www.openssl.org/">OpenSSL</a> is 
-recommended to provide a digital signature on job step credentials.
-<a href="http://home.gna.org/munge/">Munge</a> can alternately
-be used with somewhat slower performance.
+<p>Besides authentication of SLURM communications based upon the value
+of the <b>AuthType</b>, digital signatures are used in job step 
+credentials. 
 This signature is used by <i>slurmctld</i> to construct a job step
 credential, which is sent to <i>srun</i> and then forwarded to
 <i>slurmd</i> to initiate job steps.
 This design offers improved performance by removing much of the 
 job step initiation overhead from the <i> slurmctld </i> daemon.
-The mechanism to be used is controlled through the <b>CryptoType</b>
-configuration parameter (newly added in SLURM version 1.3, 
-earlier versions always use OpenSSL).</p>
+The digital signature mechanism is specified by the <b>CryptoType</b> 
+configuration parameter and the default mechanism is MUNGE. </p>
 
 <h3>OpenSSL</h3>
-<p>If using OpenSSL digital signatures, unique job credential keys 
-must be created for your site using the program 
+<p>If using <a href="http://www.openssl.org/">OpenSSL</a> digital signatures, 
+unique job credential keys must be created for your site using the program 
 <a href="http://www.openssl.org/">openssl</a>. 
 <b>You must use openssl and not ssh-genkey to construct these keys.</b>
 An example of how to do this is shown below. Specify file names that 
@@ -447,22 +470,23 @@ credential, which is sent to <i>srun</i> and then forwarded to
 <i>openssl rsa -in &lt;sysconfdir&gt;/slurm.key -pubout -out  &lt;sysconfdir&gt;/slurm.cert</i> 
 </p>
 
-<h3>Munge</h3>
-<p>If using Munge digital signatures, no SLURM keys are required.
-This will be address in the installation and configuration of Munge.</p>
+<h3>MUNGE</h3>
+<p>If using MUNGE digital signatures, no SLURM keys are required.
+This will be address in the installation and configuration of MUNGE.</p>
 
 <h3>Authentication</h3>
 <p>Authentication of communications (identifying who generated a particular
 message) between SLURM components can use a different security mechanism 
 that is configurable.  
-You must specify one &quot;auth&quot; plugin for this purpose (<b>AuthType</b>. 
+You must specify one &quot;auth&quot; plugin for this purpose using the
+<b>AuthType</b> configuration parameter. 
 Currently, only three authentication plugins are supported: 
 <b>auth/none</b>, <b>auth/authd</b>, and <b>auth/munge</b>. 
-The auth/none plugin is built and used by default, but either 
+The auth/none plugin is built by default, but either 
 Brent Chun's <a href="http://www.theether.org/authd/">authd</a>, 
-or LLNL's <a href="http://home.gna.org/munge/">munge</a> 
+or LLNL's <a href="http://home.gna.org/munge/">MUNGE</a> 
 should be installed in order to get properly authenticated communications. 
-Unless you are experience with authd, we recommend the use of munge.
+Unless you are experience with authd, we recommend the use of MUNGE.
 The configure script in the top-level directory of this distribution will 
 determine which authentication plugins may be built. 
 The configuration file specifies which of the available plugins will be utilized. </p>
@@ -613,9 +637,10 @@ SLURM and restart the daemons.
 An exception to this is that jobs may be lost when installing new pre-release 
 versions (e.g. 1.3.0-pre1 to 1.3.0-pre2). We'll try to note these cases 
 in the NEWS file.
+Contents of major releases are also described in the RELEASE_NOTES file.
 
 </pre> <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 5 June 2008</p>
+<p style="text-align:center;">Last modified 7 January 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/reservations.shtml b/doc/html/reservations.shtml
new file mode 100644
index 000000000..14c1cb6a5
--- /dev/null
+++ b/doc/html/reservations.shtml
@@ -0,0 +1,165 @@
+<!--#include virtual="header.txt"-->
+
+<h1>Resource Reservation Gude</h1>
+
+<p>SLURM verstion 2.0 has the ability to reserve resources for jobs
+being executed by select users and/or select bank accounts.
+A resource reservation identifies the nodes of a resource reservation 
+and a time period during which the reservation is available.
+Note that resource reservations are not compatable with SLURM's
+gang scheduler plugin since the termination time of running jobs
+is not possible to accurately predict.</p>
+
+<p>Reservations can be created, updated, or destroyed only by user root
+or the configured <i>SlurmUser</i> using the <i>scontrol</i> command. 
+The <i>scontrol</i>, <i>smap</i> and <i>sview</i> commands can be used
+to view reservations. 
+The man pages for the various commands contain details.</p>
+
+<p>Note for users of Maui or Moab schedulers: <br>
+Maui and Moab are not integrated with SLURM's resource reservation system,
+but should use their own advanced reservation system.</p>
+
+<h2>Reservation Creation</h2>
+
+<p>One common mode of operation for a reservation would be to reserve
+an entire computer at a particular time for a system down time.
+The example below shows the creation of a full-system reservation 
+at 16:00 hours on 6 February and lasting for 120 minutes. 
+The "maint" flag is used to identify the reservation for accounting 
+purposes as system maintenance. As the reservation time approaches, 
+only jobs that can complete by the reservation time will be 
+initiated.</p>
+<pre>
+$ scontrol create reservation starttime=2009-02-06T16:00:00 \
+   duration=120 user=root flags=maint nodes=ALL
+Reservation created: root_4
+
+$ scontrol show reservation
+ReservationName=root_4 StartTime=2009-02-06T16:00:00 
+   EndTime=2009-02-06T18:00:00 Duration=120
+   Nodes=ALL NodeCnt=20 Features=(null) PartitionName=(null)
+   Flags=MAINT,SPEC_NODES Users=root Accounts=(null)
+</pre>
+
+<p>Another mode of operation would be to reserve specific nodes
+for an indefinite period in order to study problems on those 
+nodes. This could also be accomplished using a SLURM partition
+specifically for this purpose, but that would fail to capture
+the maintenance nature of their use.</p>
+<pre>
+$ scontrol create reservation user=root starttime=now \
+   duration=infinite flags=maint nodes=sun000
+Reservation created: root_5
+
+$ scontrol show res
+ReservationName=root_5 StartTime=2009-02-04T16:22:57 
+   EndTime=2009-02-04T16:21:57 Duration=4294967295
+   Nodes=sun000 NodeCnt=1 Features=(null) PartitionName=(null)
+   Flags=MAINT,SPEC_NODES Users=root Accounts=(null)
+</pre>
+
+<p>Our final example is to reserve ten nodes in the default 
+SLURM partition starting at noon and with a duration of 60 
+minutes occuring daily. The reservation will be available
+only to users alan and brenda.</p>
+<pre>
+$ scontrol create reservation user=alan,brenda \
+   starttime=noon duration=60 flags=daily nodecnt=10
+Reservation created: alan_6
+
+$ scontrol show res
+ReservationName=alan_6 StartTime=2009-02-05T12:00:00 
+   EndTime=2009-02-05T13:00:00 Duration=60
+   Nodes=sun[000-003,007,010-013,017] NodeCnt=10 
+   Features=(null) PartitionName=pdebug Flags=DAILY
+   Users=alan,brenda Accounts=(null)
+</pre>
+
+<p>Note that specific nodes to be associated with the reservation are
+made immediately after creation of the reservation. This permits
+users to stage files to the nodes in preparation for use during the
+reservation. Note that the reservation creation request can also 
+identify the partition from which to select the nodes or _one_
+feature that every selected node must contain.</p>
+
+<p>Reservations must not overlap, with the exception of 
+maintenance mode as described below. They must either include 
+different nodes or operate at different times. If specific nodes
+are not specified when a reservation is created, SLURM will 
+automatically select nodes to avoid overlap and insure that
+the selected nodes are available when the reservation begins.
+For ease of system maintenance, you can create a reservation
+with the "maint" flag that overlaps existing reservations.
+This permits an administrator to easily create a maintenance 
+reservation for an entire cluster without needing to remove 
+or reschedule pre-existing reservations.</p>
+
+<h2>Reservation Use</h2>
+
+<p>The reservation create response includes the reservation's name.
+This name is automatically generated by SLURM based upon the first
+user or account name and a numeric suffix. In order to use the 
+reservation, the job submit request must explicitly specify that
+reservation name. The job must be contained completely within the
+named reservation. The job will be cancelled after the reservation 
+reaches its EndTime. If letting the job continue execution after
+the reservation EndTime, a configuration option <i>ResvOverRun</i>
+can be set to control how long the job can continue execution.</p>
+<pre>
+$ sbatch --reservation=alan_6 -N4 my.script
+sbatch: Submitted batch job 65540
+</pre>
+
+<h2>Reservation Modification</h2>
+
+<p>Reservations can be modified by user root as desired. 
+For example their duration could be altered or the users
+granted access changed as shown below:</p>
+<pre>
+$ scontrol update ReservationName=root_4 \
+   duration=150 users=admin
+Reservation updated.
+
+bash-3.00$ scontrol show ReservationName=root_4
+ReservationName=root_4 StartTime=2009-02-06T16:00:00 
+   EndTime=2009-02-06T18:30:00 Duration=150
+   Nodes=ALL NodeCnt=20 Features=(null) 
+   PartitionName=(null) Flags=MAINT,SPEC_NODES
+   Users=jette Accounts=(null)
+</pre>
+
+<h2>Reservation Deletion</h2>
+
+<p>Reservations are automatically purged after their end time. 
+They may also be manually deleted as shown below. 
+Note that a reservation can not be deleted while there are
+jobs running in it.</p>
+<pre>
+$ scontrol delete ReservationName=alan_6
+</pre>
+
+<h2>Reservation Accounting</h2>
+
+<p>Jobs executed within a reservation are accounted for using the appropriate
+user and bank account. If resources within a reservation are not used, those 
+resources will be accounted for as being used by all users or bank accounts
+associated with the reservation on an equal basis (e.g. if two users are
+eligible to use a reservation and neither does, each user will be reported 
+to have used half of the reserved resources).</p>
+
+<h2>Future Work</h2>
+
+<p>Several enhancements are anticipated at some point in the future.
+<ol>
+<li>The automatic selection of nodes for a reservation create request may be
+sub-optimal in terms of locality (for optimized application communication).</li>
+<li> The feature specification in the reservation creation request should be 
+made more flexible to accept multiple features with AND or OR operators.</li> 
+</ol>
+
+
+<p style="text-align: center;">Last modified 2 June 2009</p>
+
+<!--#include virtual="footer.txt"-->
+
diff --git a/doc/html/resource_limits.shtml b/doc/html/resource_limits.shtml
new file mode 100644
index 000000000..afcb619af
--- /dev/null
+++ b/doc/html/resource_limits.shtml
@@ -0,0 +1,223 @@
+<!--#include virtual="header.txt"-->
+
+<h1>Resource Limits</h1>
+
+<p>SLURM scheduling policy support was significantly changed
+in version 2.0 in order to take advantage of the database 
+integration used for storing accounting information.
+This document describes the capabilities available in 
+SLURM version 2.0.
+New features are under active development. 
+Familiarity with SLURM's <a href="accounting">Accounting</a> web page
+is strongly recommended before use of this document.</p>
+
+<p>Note for users of Maui or Moab schedulers: <br>
+Maui and Moab are not integrated with SLURM's resource limits,
+but should use their own resource limits mechanisms.</p>
+
+<h2>Configuration</h2>
+
+<p>Scheduling policy information must be stored in a database 
+as specified by the <b>AccountingStorageType</b> configuration parameter
+in the <b>slurm.conf</b> configuration file.
+Information can be recorded in either <a href="http://www.mysql.com/">MySQL</a> 
+or <a href="http://www.postgresql.org/">PostgreSQL</a>.
+For security and performance reasons, the use of 
+SlurmDBD (SLURM Database Daemon) as a front-end to the 
+database is strongly recommended. 
+SlurmDBD uses a SLURM authentication plugin (e.g. Munge).
+SlurmDBD also uses an existing SLURM accounting storage plugin
+to maximize code reuse.
+SlurmDBD uses data caching and prioritization of pending requests
+in order to optimize performance.
+While SlurmDBD relies upon existing SLURM plugins for authentication 
+and database use, the other SLURM commands and daemons are not required 
+on the host where SlurmDBD is installed. 
+Only the <i>slurmdbd</i> and <i>slurm-plugins</i> RPMs are required
+for SlurmDBD execution.</p>
+
+<p>Both accounting and scheduling policy are configured based upon
+an <i>association</i>. An <i>association</i> is a 4-tuple consisting 
+of the cluster name, bank account, user and (optionally) the SLURM 
+partition.
+In order to enforce scheduling policy, set the value of 
+<b>AccountingStorageEnforce</b>:
+This option contains a comma separated list of options you may want to
+ enforce.  The valid options are 
+<ul>
+<li>associations - This will prevent users from running jobs if
+their <i>association</i> is not in the database. This option will
+prevent users from accessing invalid accounts.  
+</li>
+<li>limits - This will enforce limits set to associations.  By setting
+  this option, the 'associations' option is also set.
+</li>
+<li>wckeys - This will prevent users from running jobs under a wckey
+  that they don't have access to.  By using this option, the
+  'associations' option is also set.  The 'TrackWCKey' option is also
+  set to true.
+</li>
+</ul>
+(NOTE: The association is a combination of cluster, account, 
+user names and optional partition name.)
+<br>
+Without AccountingStorageEnforce being set (the default behavior) 
+jobs will be executed based upon policies configured in SLURM on each
+cluster.
+<br> 
+It is advisable to run without the option 'limits' set when running a
+scheduler on top of SLURM, like Moab, that does not update in real
+time their limits per association.</li>
+</p>
+
+<h2>Tools</h2>
+
+<p>The tool used to manage accounting policy is <i>sacctmgr</i>.
+It can be used to create and delete cluster, user, bank account, 
+and partition records plus their combined <i>association</i> record.
+See <i>man sacctmgr</i> for details on this tools and examples of 
+its use.</p>
+
+<p>A web interface with graphical output is currently under development.</p>
+
+<p>Changes made to the scheduling policy are uploaded to 
+the SLURM control daemons on the various clusters and take effect 
+immediately. When an association is delete, all jobs running or 
+pending which belong to that association are immediately canceled.
+When limits are lowered, running jobs will not be canceled to 
+satisfy the new limits, but the new lower limits will be enforced.</p>
+
+<h2>Policies supported</h2>
+
+<p> A limited subset of scheduling policy options are currently 
+supported. 
+The available options are expected to increase as development 
+continues. 
+Most of these scheduling policy options are available not only 
+for a user association, but also for each cluster and account. 
+If a new association is created for some user and some scheduling 
+policy options is not specified, the default will be the option 
+for the cluster plus account pair and if that is not specified 
+then the cluster and if that is not specified then no limit 
+will apply.</p>
+
+<p>Currently available scheduling policy options:</p>
+<ul>
+<li><b>Fairshare=</b> Used for determining priority.  Essentially
+  this is the amount of claim this association and it's children have
+  to the above system.</li>
+</li>
+
+<!-- For future use
+<li><b>GrpCPUMins=</b> A hard limit of cpu minutes to be used by jobs
+  running from this association and its children.  If this limit is
+  reached all jobs running in this group will be killed, and no new
+  jobs will be allowed to run.
+</li>
+-->
+
+<!-- For future use
+<li><b>GrpCPUs=</b> The total count of cpus able to be used at any given
+  time from jobs running from this association and its children.  If
+  this limit is reached new jobs will be queued but only allowed to
+  run after resources have been relinquished from this group.
+</li>
+-->
+
+<li><b>GrpJobs=</b> The total number of jobs able to run at any given
+  time from this association and its children.  If
+  this limit is reached new jobs will be queued but only allowed to
+  run after previous jobs complete from this group.
+</li>
+
+<li><b>GrpNodes=</b> The total count of nodes able to be used at any given
+  time from jobs running from this association and its children.  If
+  this limit is reached new jobs will be queued but only allowed to
+  run after resources have been relinquished from this group.
+</li>
+
+<li><b>GrpSubmitJobs=</b> The total number of jobs able to be submitted
+  to the system at any given time from this association and its children.  If
+  this limit is reached new submission requests will be denied until
+  previous jobs complete from this group.
+</li>
+
+<li><b>GrpWall=</b> The maximum wall clock time any job submitted to
+  this group can run for.  If this limit is reached submission requests
+  will be denied. 
+</li>
+
+<!-- For future use
+<li><b>MaxCPUMinsPerJob=</b> A limit of cpu minutes to be used by jobs
+  running from this association.  If this limit is
+  reached the job will be killed will be allowed to run.
+</li>
+-->
+
+<!-- For future use
+<li><b>MaxCPUsPerJob=</b> The maximum size in cpus any given job can
+  have from this association.  If this limit is reached the job will
+  be denied at submission.
+</li>
+-->
+
+<li><b>MaxJobs=</b> The total number of jobs able to run at any given
+  time from this association.  If this limit is reached new jobs will
+  be queued but only allowed to run after previous jobs complete from
+  this association.
+</li>
+
+<li><b>MaxNodesPerJob=</b> The maximum size in nodes any given job can
+  have from this association.  If this limit is reached the job will
+  be denied at submission.
+</li>
+ 
+<li><b>MaxSubmitJobs=</b> The maximum number of jobs able to be submitted
+  to the system at any given time from this association.  If
+  this limit is reached new submission requests will be denied until
+  previous jobs complete from this association.
+</li>
+
+<li><b>MaxWallDurationPerJob=</b> The maximum wall clock time any job
+  submitted to this association can run for.  If this limit is reached
+  the job will be denied at submission.
+</li>
+
+<li><b>QOS=</b> comma separated list of QOS's this association is
+  able to run.
+</li>
+</ul>
+
+<p>The <b>MaxNodes</b> and <b>MaxWall</b> options already exist in 
+SLURM's configuration on a per-partition basis, but these options 
+provide the ability to establish limits on a per-user basis.
+The <b>MaxJobs</b> option provides an entirely new mechanism 
+for SLURM to control the workload any individual may place on
+a cluster in order to achieve some balance between users.</p>
+
+<p>Fair-share scheduling based upon the hierarchical bank account
+data is already maintained in the SLURM database.  This information
+  can now be leveraged from
+  the <a href="priority_multifactor.html">priority/multifactor</a> plugin.
+<p>
+The priorities of pending jobs will be adjusted in order to 
+deliver resources in proportion to each association's fair-share.
+<br>
+Consider the trivial example of a single bank account with 
+two users named Alice and Brian. 
+<br>
+We might allocate Alice 60 percent of the resources and Brian the 
+remaining 40 percent.
+<br>
+If Alice has actually used 80 percent of available resources in the 
+recent past, then Brian's pending jobs will automatically be given a
+higher priority than Alice's in order to deliver resources in 
+proportion to the fair-share target. 
+<br>
+The time window considered in fair-share scheduling will be configurable 
+as well as the relative importance of job age (time waiting to run), 
+but this this example illustrates the concepts involved.</p>
+
+<p style="text-align: center;">Last modified 2 March 2009</p>
+
+</ul></body></html>
diff --git a/doc/html/review_release.html b/doc/html/review_release.html
index 607be0949..3ddf7f475 100644
--- a/doc/html/review_release.html
+++ b/doc/html/review_release.html
@@ -2,6 +2,7 @@
 
 <head>
 <title>SLURM Web pages for Review and Release</title>
+<!-- Updated 6 March 2009 -->
 </head>
 
 <body>
@@ -14,10 +15,13 @@
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/authplugins.html">authplugins.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/big_sys.html">big_sys.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/bluegene.html">bluegene.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/checkpoint_blcr.html">checkpoint_blcr.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/checkpoint_plugins.html">checkpoint_plugins.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/configurator.html">configurator.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/cons_res.html">cons_res.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/cons_res_share.html">cons_res_share.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/cray.html">cray.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/crypto_plugins.html">crypto_plugins.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/dist_plane.html">dist_plane.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/documentation.html">documentation.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/download.html">download.html</a></li>
@@ -31,24 +35,33 @@
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/maui.html">maui.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/mc_support.html">mc_support.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/moab.html">moab.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/mpi_guide.html">mpi_guide.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/mpiplugins.html">mpiplugins.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/news.html">news.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/overview.html">overview.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/platforms.html">platforms.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/plugins.html">plugins.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/power_save.html">power_save.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/preempt.html">preempt.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/priority_multifactor.html">priority_multifactor.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/priority_plugins.html">priority_plugins.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/proctrack_plugins.html">proctrack_plugins.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/programmer_guide.html">programmer_guide.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/publications.html">publications.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/quickstart_admin.html">quickstart_admin.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/quickstart.html">quickstart.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/reservations.html">reservations.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/resource_limits.html">resource_limits.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/schedplugins.html">schedplugins.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/selectplugins.html">selectplugins.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/slurm.html">slurm.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/sun_const.html">sun_const.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/switchplugins.html">switchplugins.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/taskplugins.html">taskplugins.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/team.html">team.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/testimonials.html">testimonials.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/topology.html">topology.html</a></li>
+<li><a href="https://computing-pre.llnl.gov/linux/slurm/topology_plugin.html">topology_plugin.html</a></li>
 <li><a href="https://computing-pre.llnl.gov/linux/slurm/troubleshoot.html">troubleshoot.html</a></li>
 </ul>
 </body>
diff --git a/doc/html/sched_policy.shtml b/doc/html/sched_policy.shtml
deleted file mode 100644
index 53aed3fd9..000000000
--- a/doc/html/sched_policy.shtml
+++ /dev/null
@@ -1,116 +0,0 @@
-<!--#include virtual="header.txt"-->
-
-<h1>Sheduling Policy</h1>
-
-<p>SLURM scheduling policy support was significantly changed
-in version 1.3 in order to take advantage of the database 
-integration used for storing accounting information.
-This document describes the capabilities available in 
-SLURM version 1.3.4.
-New features are under active development. 
-Familiarity with SLURM's <a href="accounting">Accounting</a> web page
-is strongly recommended before use of this document.</p>
-
-<h2>Configuration</h2>
-
-<p>Scheduling policy information must be stored in a database 
-as specified by the <b>AccountingStorageType</b> configuration parameter
-in the <b>slurm.conf</b> configuration file.
-Information can be recorded in either <a href="http://www.mysql.com/">MySQL</a> 
-or <a href="http://www.postgresql.org/">PostgreSQL</a>.
-For security and performance reasons, the use of 
-SlurmDBD (SLURM Database Daemon) as a front-end to the 
-database is strongly recommended. 
-SlurmDBD uses a SLURM authentication plugin (e.g. Munge).
-SlurmDBD also uses an existing SLURM accounting storage plugin
-to maximize code reuse.
-SlurmDBD uses data caching and prioritization of pending requests
-in order to optimize performance.
-While SlurmDBD relies upon existing SLURM plugins for authentication 
-and database use, the other SLURM commands and daemons are not required 
-on the host where SlurmDBD is installed. 
-Only the <i>slurmdbd</i> and <i>slurm-plugins</i> RPMs are required
-for SlurmDBD execution.</p>
-
-<p>Both accounting and scheduling policy are configured based upon
-an <i>association</i>. An <i>association</i> is a 4-tuple consisting 
-of the cluster name, bank account, user and (optionally) the SLURM 
-partition.
-In order to enforce scheduling policy, set the value of 
-<b>AccountingStorageEnforce</b> to "1" in <b>slurm.conf</b>.
-This prevents users from running any jobs without an valid
-<i>association</i> record in the database and enforces scheduling 
-policy limits that have been configured.  
-In order to enforce association limits along with scheduling policy,
-set the value of <b>AccountingStorageEnforce</b> to "2"
-in <b>slurm.conf</b>.  When set to "1" association limits will not be
-enforced.  It is a good idea to run in this mode when running a
-scheduler on top of slurm, like Moab, that does not update in real
-time their limits per association.
-</p>
-
-<h2>Tools</h2>
-
-<p>The tool used to manage accounting policy is <i>sacctmgr</i>.
-It can be used to create and delete cluster, user, bank account, 
-and partition records plus their combined <i>association</i> record.
-See <i>man sacctmgr</i> for details on this tools and examples of 
-its use.</p>
-
-<p>A web interface with graphical output is currently under development.</p>
-
-<p>Changes made to the scheduling policy are uploaded to 
-the SLURM control daemons on the various clusters and take effect 
-immediately. When an association is delete, all jobs running or 
-pending which belong to that association are immediately cancelled.
-When limits are lowered, running jobs will not be cancelled to 
-satisfy the new limits, but the new lower limits will be enforced.</p>
-
-<h2>Policies supported</h2>
-
-<p> A limited subset of scheduling policy options are currently 
-supported. 
-The available options are expected to increase as development 
-continues. 
-Most of these scheduling policy options are available not only 
-for an association, but also for each cluster and account. 
-If a new association is created for some user and some scheduling 
-policy options is not specified, the default will be the option 
-for the cluster plus account pair and if that is not specified 
-then the cluster and if that is not specified then no limit 
-will apply.</p>
-
-<p>Currently available cheduling policy options:</p>
-<ul>
-<li><b>MaxJobs</b> Maxiumum number of running jobs for this association</li>
-<li><b>MaxNodes</b> Maxiumum number of nodes for any single jobs in this association</li>
-<li><b>MaxWall</b> Maxiumum wall clock time limit for any single jobs in this association</li>
-</ul>
-
-<p>The <b>MaxNodes</b> and <b>MaxWall</b> options already exist in 
-SLURM's configuration on a per-partition basis, but these options 
-provide the ability to establish limits on a per-user basis.
-The <b>MaxJobs</b> option provides an entirely new mechanism 
-for SLURM to control the workload any individual may place on
-a cluster in order to achieve some balance between users.</p>
-
-<p>The next scheduling policy expected to be added is the concept 
-of fair-share scheduling based upon the hierarchical bank account
-data is already maintained in the SLURM database. 
-The priorities of pending jobs will be adjusted in order to 
-deliver resources in proportion to each association's fair-share.
-Consider the trivial example of a single bank account with 
-two users named Alice and Brian. 
-We might allocate Alice 60 percent of the resources and Brian the 
-remaining 40 precent.
-If Alice has actually used 80 percent of available resources in the 
-recent past, then Brian's pending jobs will automatically be given a
-higher priority than Alice's in order to deliver resources in 
-proportion to the fair-share target. 
-The time window considered in fair-share scheduling will be configurable 
-as well as the relative importance of job age (time waiting to run), 
-but this this example illustrates the concepts involved.</p>
-
-<p style="text-align: center;">Last modified 24 June 2008</p>
-
-</ul></body></html>
diff --git a/doc/html/selectplugins.shtml b/doc/html/selectplugins.shtml
index 7ef6a4088..6796452ef 100644
--- a/doc/html/selectplugins.shtml
+++ b/doc/html/selectplugins.shtml
@@ -1,11 +1,11 @@
 <!--#include virtual="header.txt"-->
 
-<h1><a name="top">SLURM Node Selection Plugin API</a></h1>
+<h1><a name="top">Resource Selection Plugin Programmer Guide</a></h1>
 
-<h2> Overview</h2>
-<p> This document describes SLURM node selection plugins and the API that defines 
+<h2>Overview</h2>
+<p>This document describes SLURM resource selection plugins and the API that defines 
 them. It is intended as a resource to programmers wishing to write their own SLURM 
-node selection plugins. This is version 0 of the API.</p>
+node selection plugins. This is version 100 of the API.</p>
 
 <p>SLURM node selection plugins are SLURM plugins that implement the SLURM node selection
 API described herein. They are intended to provide a mechanism for both selecting 
@@ -19,7 +19,7 @@ abbreviation for the type of node selection algorithm. We recommend, for example
 <li><b>linear</b>&#151;A plugin that selects nodes assuming a one-dimensional 
 array of nodes. The nodes are selected so as to minimize the number of consecutive 
 sets of nodes utilizing a best-fit algorithm. While supporting shared nodes, 
-this plugin does not allocate individual processors, memory, etc. 
+this plugin does not allocate individual processors, but can allocate memory to jobs. 
 This plugin is recommended for systems without shared nodes.</li>
 <li><b>cons_res</b>&#151;A plugin that can allocate individual processors, 
 memory, etc. within nodes. This plugin is recommended for systems with 
@@ -36,51 +36,48 @@ Note carefully, however, the versioning discussion below.</p>
 
 <p>A simplified flow of logic follows:
 <pre>
-slurmctld daemon starts
-if (<i>select_p_state_restore)</i>() != SLURM_SUCCESS)
+/* slurmctld daemon starts, recover state */
+if ((<i>select_p_node_init)</i>()     != SLURM_SUCCESS) ||
+    (<i>select_p_block_init)</i>()    != SLURM_SUCCESS) ||
+    (<i>select_p_state_restore)</i>() != SLURM_SUCCESS) ||
+    (<i>select_p_job_init)</i>()      != SLURM_SUCCESS))
    abort
 
-slurmctld reads the rest of its configuration and state information
-if (<i>select_p_node_init</i>() != SLURM_SUCCESS)
-   abort
-if (<i>select_p_block_init</i>() != SLURM_SUCCESS)
-   abort
-
-wait for job 
+/* wait for job arrival */
 if (<i>select_p_job_test</i>(all available nodes) != SLURM_SUCCESS) {
    if (<i>select_p_job_test</i>(all configured nodes) != SLURM_SUCCESS)
-      reject the job and tell the user it can never run
+      /* reject the job and tell the user it can never run */
    else
-      leave the job queued for later execution
+      /* leave the job queued for later execution */
 } else {
-   update job's node list and node bitmap
+   /* update job's node list and node bitmap */
    if (<i>select_p_job_begin</i>() != SLURM_SUCCESS)
-      leave the job queued for later execution
+      /* leave the job queued for later execution */
    else {
       while (!<i>select_p_job_ready</i>())
         wait
-      execute the job
-      wait for job to end or be terminated
+      /* execute the job */
+      /* wait for job to end or be terminated */
       <i>select_p_job_fini</i>()
     }
 }
 
-wait for slurmctld shutdown request
+/* wait for slurmctld shutdown request */
 <i>select_p_state_save</i>()
 </pre>
 <p>Depending upon failure modes, it is possible that 
 <span class="commandline">select_p_state_save()</span>
-will not be called at slurmctld terminatation.
+will not be called at slurmctld termination.
 When slurmctld is restarted, other function calls may be replayed.
 <span class="commandline">select_p_node_init()</span> may be used 
-to syncronize the plugin's state with that of slurmctld.</p>
+to synchronize the plugin's state with that of slurmctld.</p>
 
 <p class="footer"><a href="#top">top</a></p>
 
 <h2>Data Objects</h2>
 <p> These functions are expected to read and/or modify data structures directly in 
 the slurmctld daemon's memory. Slurmctld is a multi-threaded program with independent 
-read and write locks on each data structure type. Thererfore the type of operations 
+read and write locks on each data structure type. Therefore the type of operations 
 permitted on various data structures is identified for each function.</p>
 
 <p>These functions make use of bitmaps corresponding to the nodes in a table. 
@@ -95,7 +92,8 @@ manipulations (these functions are directly accessible from the plugin).</p>
 <p>The following functions must appear. Functions which are not implemented should 
 be stubbed.</p>
 
-<h3>Global Node Selection Functions</h3>
+<h3>State Save Functions</h3>
+
 <p class="commandline">int select_p_state_save (char *dir_name);</p>
 <p style="margin-left:.2in"><b>Description</b>: Save any global node selection state 
 information to a file within the specified directory. The actual file name used is plugin specific. 
@@ -118,15 +116,19 @@ from which user SlurmUser (as defined in slurm.conf) can read. Cannot be NULL.</
 <p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure, 
 the plugin should return SLURM_ERROR, causing slurmctld to exit.</p>
 
+<p class="footer"><a href="#top">top</a></p>
+
+<h3>State Initialization Functions</h3>
+
 <p class="commandline">int select_p_node_init (struct node_record *node_ptr, int node_cnt);</p>
 <p style="margin-left:.2in"><b>Description</b>: Note the initialization of the node record data 
 structure. This function is called when the node records are initially established and again 
 when any nodes are added to or removed from the data structure. </p>
 <p style="margin-left:.2in"><b>Arguments</b>:<br>
 <span class="commandline"> node_ptr</span>&nbsp;&nbsp;&nbsp;(input) pointer 
-to the node data records. Data in these records can read. Nodes deleted after initiialization 
+to the node data records. Data in these records can read. Nodes deleted after initialization 
 may have their the <i>name</i> field in the record cleared (zero length) rather than 
-rebuilding the node records and bitmaps. <br>
+rebuilding the node records and bitmaps.<br><br>
 <span class="commandline"> node_cnt</span>&nbsp; &nbsp;&nbsp;(input) number 
 of node data records.</p>
 <p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure, 
@@ -143,33 +145,89 @@ consider that nodes can be removed from one partition and added to a different p
 <p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure, 
 the plugin should return SLURM_ERROR, causing slurmctld to exit.</p>
 
+<p class="commandline">int select_p_job_init(List job_list);<p>
+<p style="margin-left:.2in"><b>Description</b>: Used at slurm startup to 
+synchronize plugin (and node) state with that of currently active jobs.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:
+<span class="commandline"> job_list</span>&nbsp; &nbsp;&nbsp;(input) 
+list of slurm jobs from slurmctld job records.</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure,
+the plugin should return SLURM_ERROR.</p>
+<p class="footer"><a href="#top">top</a></p>
+
+<h3>State Synchronization Functions</h3>
+
 <p class="commandline">int select_p_update_block (update_part_msg_t *part_desc_ptr);</p>
-<p style="margin-left:.2in"><b>Description</b>: This function is called when the admin needs to manually update the state of a block. </p>
+<p style="margin-left:.2in"><b>Description</b>: This function is called when the admin needs 
+to manually update the state of a block. </p>
 <p style="margin-left:.2in"><b>Arguments</b>:
-<span class="commandline"> part_desc_ptr</span>&nbsp;&nbsp;&nbsp;(input) partitition
+<span class="commandline"> part_desc_ptr</span>&nbsp;&nbsp;&nbsp;(input) partition
 description variable.  Containing the block name and the state to set the block.</p>
 <p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure, 
 the plugin should return SLURM_ERROR.</p>
 
-<p class="commandline">int select_p_pack_node_info (time_t last_query_time, Buf *buffer_ptr);</p>
-<p style="margin-left:.2in"><b>Description</b>: pack node specific information into a buffer.</p>
+<p class="commandline">int select_p_update_nodeinfo(struct node_record *node_ptr);</p>
+<p style="margin-left:.2in"><b>Description</b>: Update plugin-specific information
+related to the specified node. This is called after changes in a node's configuration.</p>
+<p style="margin-left:.2in"><b>Argument</b>:
+<span class="commandline"> node_ptr</span>&nbsp; &nbsp;&nbsp;(input) pointer
+to the node for which information is requested.</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure,
+the plugin should return SLURM_ERROR.</p>
+
+<p class="commandline">int select_p_update_node_state (int index, uint16_t state);</p>
+<p style="margin-left:.2in"><b>Description</b>: push a change of state
+into the plugin the index should be the index from the slurmctld of
+the entire system.  The state should be the same state the node_record
+was set to in the slurmctld.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:<br>
+<span class="commandline"> index</span>&nbsp;&nbsp;&nbsp;(input) index
+of the node in reference to the entire system.<br><br>
+<span class="commandline"> state</span>&nbsp;&nbsp;&nbsp;(input) new
+state of the node.</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful, otherwise SLURM_ERROR</p>
+
+<p class="commandline">int select_p_update_sub_node (update_part_msg_t *part_desc_ptr);</p>
+<p style="margin-left:.2in"><b>Description</b>: update the state of a portion of
+a SLURM node. Currently used on BlueGene systems to place node cards within a 
+midplane into or out of an error state.</p>
 <p style="margin-left:.2in"><b>Arguments</b>:
-<span class="commandline">
-last_query_time</span>&nbsp;&nbsp;&nbsp;(input) time that the data was
-last saved.<br>
-<span class="commandline"> buffer_ptr</span>&nbsp;&nbsp;&nbsp;(input/output) buffer into 
-which the node data is appended.</p>
-<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful, 
-SLURM_NO_CHANGE_IN_DATA if data has not changed since last packed, otherwise SLURM_ERROR</p>
+<span class="commandline"> part_desc_ptr</span>&nbsp;&nbsp;&nbsp;(input) partition
+description variable.  Containing the sub-block name and its new state.</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful, otherwise SLURM_ERROR</p>
+
+<p class="commandline">int select_p_alter_node_cnt (enum
+select_node_cnt type, void *data);</p>
+<p style="margin-left:.2in"><b>Description</b>: Used for systems like
+a Bluegene system where SLURM sees 1 node where many nodes really
+exists, in Bluegene's case 1 node reflects 512 nodes in real live, but
+since usually 512 is the smallest allocatable block slurm only handles
+it as 1 node.  This is a function so the user can issue a 'real'
+number and the function will alter it so slurm can understand what the
+user really means in slurm terms.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:<br>
+<span class="commandline"> type</span>&nbsp;&nbsp;&nbsp;(input) enum
+telling the plug in what the user is really wanting.<br><br>
+<span class="commandline"> data</span>&nbsp;&nbsp;&nbsp;(input/output)
+Is a void * so depending on the type sent in argument 1 this should 
+adjust the variable returning what the user is asking for.</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful, otherwise SLURM_ERROR</p>
+
+<p class="commandline">int select_p_reconfigure (void);</p>
+<p style="margin-left:.2in"><b>Description</b>: Used to notify plugin 
+of change in partition configuration or general configuration change.
+The plugin will test global variables for changes as appropriate.</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful, otherwise SLURM_ERROR</p>
 
 <p class="footer"><a href="#top">top</a></p>
 
-<h3>Job-Specific Node Selection Functions</h3>
+<h3>Job-Specific Functions</h3>
+
 <p class="commandline">int select_p_job_test (struct job_record *job_ptr,
-bitstr_t *bitmap, int min_nodes, int max_nodes, int req_nodes, bool test_only);</p>
+bitstr_t *bitmap, int min_nodes, int max_nodes, int req_nodes, int mode);</p>
 <p style="margin-left:.2in"><b>Description</b>: Given a job's scheduling requirement 
 specification and a set of nodes which might  be used to satisfy the request, identify 
-the nodes which "best" satify the request. Note that nodes being considered for allocation 
+the nodes which "best" satisfy the request. Note that nodes being considered for allocation 
 to the job may include nodes already allocated to other jobs, even if node sharing is 
 not permitted. This is done to ascertain whether or not job may be allocated resources 
 at some later time (when the other jobs complete). This permits SLURM to reject 
@@ -179,29 +237,43 @@ the job with appropriate constraints.</p>
 <p style="margin-left:.2in"><b>Arguments</b>:<br>
 <span class="commandline"> job_ptr</span>&nbsp; &nbsp;&nbsp;(input) pointer 
 to the job being considered for scheduling. Data in this job record may safely be read.
-Data of particular interst include <i>details->contiguous</i> (set if allocated nodes 
+Data of particular interest include <i>details->contiguous</i> (set if allocated nodes 
 should be contiguous), <i>num_procs</i> (minimum processors in allocation) and 
-<i>details->req_node_bitmap</i> (specific required nodes).<br>
+<i>details->req_node_bitmap</i> (specific required nodes).<br><br>
 <span class="commandline"> bitmap</span>&nbsp; &nbsp;&nbsp;(input/output) 
 bits representing nodes which might be allocated to the job are set on input.
 This function should clear the bits representing nodes not required to satisfy 
 job's scheduling request.
 Bits left set will represent nodes to be used for this job. Note that the job's 
 required nodes (<i>details->req_node_bitmap</i>) will be a superset 
-<i>bitmap</i> when the function is called.<br>
+<i>bitmap</i> when the function is called.<br><br>
 <span class="commandline"> min_nodes</span>&nbsp; &nbsp;&nbsp;(input) 
 minimum number of nodes to allocate to this job. Note this reflects both job 
-and partition specifications.<br>
+and partition specifications.<br><br>
 <span class="commandline"> max_nodes</span>&nbsp; &nbsp;&nbsp;(input) 
 maximum number of nodes to allocate to this job. Note this reflects both job 
-and partition specifications.<br>
+and partition specifications.<br><br>
 <span class="commandline"> req_nodes</span>&nbsp; &nbsp;&nbsp;(input)
 the requested (desired)  of nodes to allocate to this job. This reflects job's
-maximum node specification (if supplied).<br>
-<span class="commandline"> test_only</span>&nbsp; &nbsp;&nbsp;(input)
-if set then we only want to test our ability to run the job at some time, 
-not necesarily now with currently available resources.<br>
-</p>
+maximum node specification (if supplied).<br><br>
+<span class="commandline"> mode</span>&nbsp; &nbsp;&nbsp;(input)
+controls the mode of operation. Valid options are 
+SELECT_MODE_RUN_NOW: try to schedule job now<br>
+SELECT_MODE_TEST_ONLY: test if job can ever run<br>
+SELECT_MODE_WILL_RUN: determine when and where job can run</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure,
+the plugin should return SLURM_ERROR and future attempts may be made to schedule 
+the job.</p>
+
+<p class="commandline">int select_p_job_list_test (List req_list);</p>
+<p style="margin-left:.2in"><b>Description</b>: This is a variation of the
+select_p_job_test function meant to determine when an ordered list of jobs
+can be initiated.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:
+<span class="commandline"> req_list</span>&nbsp; &nbsp;&nbsp;(input/output) 
+priority ordered list of <i>select_will_run_t</i> records (a structure
+containing the arguments to the select_p_job_test function).
+Expected start time of each job will be set.</p>
 <p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure,
 the plugin should return SLURM_ERROR and future attempts may be made to schedule 
 the job.</p>
@@ -209,7 +281,7 @@ the job.</p>
 <p class="commandline">int select_p_job_begin (struct job_record *job_ptr);</p>
 <p style="margin-left:.2in"><b>Description</b>: Note the initiation of the specified job
 is about to begin. This function is called immediately after 
-<span class="commandline">select_p_job_test()</span> sucessfully completes for this job.
+<span class="commandline">select_p_job_test()</span> successfully completes for this job.
 <p style="margin-left:.2in"><b>Arguments</b>:
 <span class="commandline"> job_ptr</span>&nbsp; &nbsp;&nbsp;(input) pointer 
 to the job being initialized. Data in this job record may safely be read or written.
@@ -266,114 +338,47 @@ identify the nodes which were selected for this job to use.</p>
 <p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On
 failure, the plugin should return a SLURM error code.</p>
 
-<p class="commandline">int select_p_get_job_cores (uint32_t job_id, int
-alloc_index, int s);</p>
-<p style="margin-left:.2in"><b>Description</b>: Get socket-specific core
-information from a job.</p>
-<p style="margin-left:.2in"><b>Arguments</b>:
-<span class="commandline"> job_id</span>&nbsp; &nbsp;&nbsp;(input) ID of the job
-from which to obtain the data.<br>
-<span class="commandline"> alloc_index</span>&nbsp; &nbsp;&nbsp;(input) index of
-the allocated node to the job from which to obtain the data.<br>
-<span class="commandline"> s</span>&nbsp; &nbsp;&nbsp;(input) socket index from
-which to obtain the data.</p>
-<p style="margin-left:.2in"><b>Returns</b>: the number of cores allocated to the
-given socket on the given node for the given job. On failure, the plugin should
-return zero.</p>
-
 <p class="footer"><a href="#top">top</a></p>
 
-<h3>Get/set plugin information</h3>
-<p class="commandline">int select_p_get_extra_jobinfo(struct node_record *node_ptr,
-struct job_record *job_ptr, enum select_data_info info, void *data);</p>
-<p style="margin-left:.2in"><b>Description</b>: Get plugin-specific information 
-related to the specified job and/or node.</p>
+<h3>Get Information Functions</h3>
+
+<p class="commandline">int select_p_get_info_from_plugin(enum select_data_info info,
+struct job_record *job_ptr, void *data);</p>
+<p style="margin-left:.2in"><b>Description</b>: Get plugin-specific information
+about a job.</p>
 <p style="margin-left:.2in"><b>Arguments</b>:<br>
-<span class="commandline"> node_ptr</span>&nbsp; &nbsp;&nbsp;(input) pointer
-to the node for which information is requested.<br>
-<span class="commandline"> job_ptr</span>&nbsp; &nbsp;&nbsp;(input) pointer
-to the job for which information is requested.<br>
 <span class="commandline"> info</span>&nbsp; &nbsp;&nbsp;(input) identifies 
-the type of data requested.<br>
+the type of data to be updated.<br><br>
+<span class="commandline"> job_ptr</span>&nbsp; &nbsp;&nbsp;(input) pointer to
+the job related to the query (if applicable; may be NULL).<br><br>
 <span class="commandline"> data</span>&nbsp; &nbsp;&nbsp;(output) the requested data.</p>
 <p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure,
 the plugin should return SLURM_ERROR.</p>
 
+<p class="commandline">int select_p_pack_node_info (time_t last_query_time, Buf *buffer_ptr);</p>
+<p style="margin-left:.2in"><b>Description</b>: Pack node specific information into a buffer.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:
+<span class="commandline">
+last_query_time</span>&nbsp;&nbsp;&nbsp;(input) time that the data was
+last saved.<br>
+<span class="commandline"> buffer_ptr</span>&nbsp;&nbsp;&nbsp;(input/output) buffer into 
+which the node data is appended.</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful, 
+SLURM_NO_CHANGE_IN_DATA if data has not changed since last packed, otherwise SLURM_ERROR</p>
+
 <p class="commandline">int select_p_get_select_nodeinfo(struct node_record *node_ptr,
 enum select_data_info info, void *data);</p>
 <p style="margin-left:.2in"><b>Description</b>: Get plugin-specific information
 related to the specified node.</p>
 <p style="margin-left:.2in"><b>Arguments</b>:<br>
 <span class="commandline"> node_ptr</span>&nbsp; &nbsp;&nbsp;(input) pointer
-to the node for which information is requested.<br>
+to the node for which information is requested.<br><br>
 <span class="commandline"> info</span>&nbsp; &nbsp;&nbsp;(input) identifies
-the type of data requested.<br>
-<span class="commandline"> data</span>&nbsp; &nbsp;&nbsp;(output) the requested data.</p>
-<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure,
-the plugin should return SLURM_ERROR.</p>
-
-<p class="commandline">int select_p_update_nodeinfo(struct node_record *node_ptr);</p>
-<p style="margin-left:.2in"><b>Description</b>: Update plugin-specific information
-related to the specified node. This is called after changes in a node's configuration.</p>
-<p style="margin-left:.2in"><b>Argument</b>:
-<span class="commandline"> node_ptr</span>&nbsp; &nbsp;&nbsp;(input) pointer
-to the node for which information is requested.</p>
-<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure,
-the plugin should return SLURM_ERROR.</p>
-
-<p class="commandline">int select_p_get_info_from_plugin(enum select_data_info info, void *data);</p>
-<p style="margin-left:.2in"><b>Description</b>: Get plugin-specific information.</p>
-<p style="margin-left:.2in"><b>Arguments</b>:<br>
-<span class="commandline"> info</span>&nbsp; &nbsp;&nbsp;(input) identifies 
-the type of data to be updated.<br>
+the type of data requested.<br><br>
 <span class="commandline"> data</span>&nbsp; &nbsp;&nbsp;(output) the requested data.</p>
 <p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure,
 the plugin should return SLURM_ERROR.</p>
 
-<p class="commandline">int select_p_job_init(List job_list);<p>
-<p style="margin-left:.2in"><b>Description</b>: Used at slurm startup to 
-syncrhonize plugin (and node) state with that of currectly active jobs.</p>
-<p style="margin-left:.2in"><b>Arguments</b>:
-<span class="commandline"> job_list</span>&nbsp; &nbsp;&nbsp;(input) 
-list of slurm jobs from slurmctld job records.</p>
-<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure,
-the plugin should return SLURM_ERROR.</p>
-
-<p class="commandline">int select_p_update_node_state (int index, uint16_t state);</p>
-<p style="margin-left:.2in"><b>Description</b>: push a change of state
-into the plugin the index should be the index from the slurmctld of
-the entire system.  The state should be the same state the node_record
-was set to in the slurmctld.</p>
-<p style="margin-left:.2in"><b>Arguments</b>:
-<span class="commandline"> index</span>&nbsp;&nbsp;&nbsp;(input) index
-of the node in reference to the entire system. <br>
-<span class="commandline"> state</span>&nbsp;&nbsp;&nbsp;(input) new
-state of the node.</p>
-<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful, otherwise SLURM_ERROR</p>
-
-<p class="commandline">int select_p_alter_node_cnt (enum
-select_node_cnt type, void *data);</p>
-<p style="margin-left:.2in"><b>Description</b>: Used for systems like
-a Bluegene system where SLURM sees 1 node where many nodes really
-exists, in Bluegene's case 1 node reflects 512 nodes in real live, but
-since usually 512 is the smallest allocatable block slurm only handles
-it as 1 node.  This is a function so the user can issue a 'real'
-number and the fuction will alter it so slurm can understand what the
-user really means in slurm terms.</p>
-<p style="margin-left:.2in"><b>Arguments</b>:
-<span class="commandline"> type</span>&nbsp;&nbsp;&nbsp;(input) enum
-telling the plug in what the user is really wanting.<br>
-<span class="commandline"> data</span>&nbsp;&nbsp;&nbsp;(input/output)
-Is a void * so depending on the type sent in argument 1 this should 
-adjust the variable returning what the user is asking for.</p>
-<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful, otherwise SLURM_ERROR</p>
-
-<p class="commandline">int select_p_reconfigure (void);</p>
-<p style="margin-left:.2in"><b>Description</b>: Used to notify plugin 
-of change in partition configuration or general configuration change.
-The plugin will test global variables for changes as appropriate.</p>
-<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful, otherwise SLURM_ERROR</p>
-
 <p class="footer"><a href="#top">top</a></p>
 
 <h2>Versioning</h2>
@@ -386,6 +391,6 @@ to maintain data format compatibility across different versions of the plugin.</
 
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 8 October 2007</p>
+<p style="text-align:center;">Last modified 25 February 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/slurm.sc08.bof.pdf b/doc/html/slurm.sc08.bof.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..39611c34f438f0dc260e7d68d8c21923de3dd82b
GIT binary patch
literal 1093598
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
z%0A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
z%0A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%0A70xn2HD=^mLoq)z8j
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%0Ajt7}-xck5hQ*yTt#h8uHb5}Vazk<wx%
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
NN^Miqp<{<>{|`S7WYGWs

literal 0
HcmV?d00001

diff --git a/doc/html/slurm.sc08.status.pdf b/doc/html/slurm.sc08.status.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..51dfea8dab2ccee655b906a4470e738197e97be4
GIT binary patch
literal 1221250
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%0A70xn2HD=^mLoq)z8j
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%0AD
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%0A70xn2HD=^mLoq)z8jqI{#^!l&(hOv{5;)8nWH
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

literal 0
HcmV?d00001

diff --git a/doc/html/slurm.shtml b/doc/html/slurm.shtml
index acb1b46fa..c9a01af13 100644
--- a/doc/html/slurm.shtml
+++ b/doc/html/slurm.shtml
@@ -1,32 +1,49 @@
 <!--#include virtual="header.txt"-->
 
 <h1>SLURM: A Highly Scalable Resource Manager</h1>
-<p>SLURM is an open-source resource manager designed for Linux clusters of all 
-sizes. It provides three key functions. First it allocates exclusive and/or non-exclusive 
-access to resources (computer nodes) to users for some duration of time so they 
-can perform work. Second, it provides a framework for starting, executing, and 
-monitoring work (typically a parallel job) on a set of allocated nodes. Finally, 
-it arbitrates contention for resources by managing a queue of pending work. </p>
 
-<p>SLURM is not a sophisticated batch system, but it does provide an Applications 
-Programming Interface (API) for integration with external schedulers such as 
+<p>SLURM is an open-source resource manager designed for Linux clusters of 
+all sizes. 
+It provides three key functions. 
+First it allocates exclusive and/or non-exclusive access to resources 
+(computer nodes) to users for some duration of time so they can perform work. 
+Second, it provides a framework for starting, executing, and monitoring work 
+(typically a parallel job) on a set of allocated nodes. 
+Finally, it arbitrates contention for resources by managing a queue of 
+pending work. </p>
+
+<p>SLURM's design is very modular with dozens of optional plugins.
+In its simplest configuration, it can be installed and configured in a 
+couple of minutes (see <a href="http://www.linux-mag.com/id/7239/1/">
+Caos NSA and Perceus: All-in-one Cluster Software Stack</a> 
+by Jeffrey B. Layton).
+More complex configurations rely upon a 
+<a href="http://www.mysql.com/">MySQL</a> database for archiving 
+<a href="accounting.html">accounting</a> records, managing 
+<a href="resource_limits.html">resource limits</a> by user or bank account, 
+or supporting sophisticated 
+<a href="priority_multifactor.html">job prioritization</a> algorithms.
+SLURM also provides an Applications Programming Interface (API) for 
+integration with external schedulers such as 
 <a href="http://www.clusterresources.com/pages/products/maui-cluster-scheduler.php">
-The Maui Scheduler</a> and 
+The Maui Scheduler</a> or 
 <a href="http://www.clusterresources.com/pages/products/moab-cluster-suite.php">
-Moab Cluster Suite</a>.
-While other resource managers do exist, SLURM is unique in several respects: 
+Moab Cluster Suite</a>.</p>
+
+<p>While other resource managers do exist, SLURM is unique in several 
+respects: 
 <ul>
 <li>Its source code is freely available under the 
 <a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>.</li>
-<li>It is designed to operate in a heterogeneous cluster with up to 65,536 nodes.</li>
-<li>It is portable; written in C with a GNU autoconf configuration engine. While 
-initially written for Linux, other UNIX-like operating systems should be easy 
-porting targets. A plugin mechanism exists to support various interconnects, authentication 
-mechanisms, schedulers, etc.</li>
+<li>It is designed to operate in a heterogeneous cluster with up to 65,536 nodes
+and hundreds of thousands of processors.</li>
+<li>It is portable; written in C with a GNU autoconf configuration engine. 
+While initially written for Linux, other UNIX-like operating systems should 
+be easy porting targets.</li>
 <li>SLURM is highly tolerant of system failures, including failure of the node 
 executing its control functions.</li>
-<li>It is simple enough for the motivated end user to understand its source and 
-add functionality.</li>
+<li>A plugin mechanism exists to support various interconnects, authentication 
+mechanisms, schedulers, etc. These plugins are documented and  simple enough for the motivated end user to understand the source and add functionality.</li>
 </ul></p>
 
 <p>SLURM provides resource management on about 1000 computers worldwide,
@@ -35,20 +52,29 @@ including many of the most powerful computers in the world:
 <li><a href="https://asc.llnl.gov/computing_resources/bluegenel/">BlueGene/L</a> 
 at LLNL with 106,496 dual-core processors</li>
 <li><a href="http://c-r-labs.com/">EKA</a> at Computational Research Laboratories, 
-India with 14,240 Xeon processoers and Infiniband interconnect</li>
+India with 14,240 Xeon processors and Infiniband interconnect</li>
 <li><a href="https://asc.llnl.gov/computing_resources/purple/">ASC Purple</a>
 an IBM SP/AIX cluster at LLNL with 12,208 Power5 processors and a Federation switch</li>
 <li><a href="http://www.bsc.es/plantillaA.php?cat_id=5">MareNostrum</a>
 a Linux cluster at Barcelona Supercomputer Center
 with 10,240 PowerPC processors and a Myrinet switch</li>
+<li><a href="http://en.wikipedia.org/wiki/Anton_(computer)">Anton</a>
+a massively parallel supercomputer designed and built by
+<a href="http://www.deshawresearch.com/">D. E. Shaw Research</a> 
+for molecular dynamics simulation using 512 custom-designed ASICs 
+and a three-dimensional torus interconnect </li>
 </ul>
 <p>SLURM is actively being developed, distributed and supported by 
 <a href="https://www.llnl.gov">Lawrence Livermore National Laboratory</a>,
-<a href="http://www.hp.com">Hewlett-Packard</a>,
-<a href="http://www.bull.com">Bull</a>,
-<a href="http://www.clusterresources.com">Cluster Resources</a> and
-<a href="http://www.sicortex.com">SiCortex</a>.</p>
+<a href="http://www.hp.com">Hewlett-Packard</a> and 
+<a href="http://www.bull.com">Bull</a>.
+It is also distributed and supported by 
+<a href="http://www.clusterresources.com">Cluster Resources</a>,
+<a href="http://www.sicortex.com">SiCortex</a>,
+<a href="http://www.infiscale.com">Infiscale</a>,
+<a href="http://www.ibm.com">IBM</a> and
+<a href="http://www.sun.com">Sun Microsystems</a>.</p>
 
-<p style="text-align:center;">Last modified 29 November 2007</p>
+<p style="text-align:center;">Last modified 25 March 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/sun_const.shtml b/doc/html/sun_const.shtml
new file mode 100644
index 000000000..b1317b942
--- /dev/null
+++ b/doc/html/sun_const.shtml
@@ -0,0 +1,126 @@
+<!--#include virtual="header.txt"-->
+
+<h1>SLURM Administrator Guide for Sun Constellation systems</h1>
+
+<h2>Overview</h2>
+
+<p>This document describes the unique features of SLURM on
+Sun Constellation computers.
+You should be familiar with the SLURM's mode of operation on Linux clusters 
+before studying the relatively few differences in Sun Constellation system 
+operation described in this document.</p>
+
+<p>SLURM's primary mode of operation is designed for use on clusters with
+nodes configured in a one-dimensional space. 
+Minor changes were required for the <i>smap</i> and <i>sview</i> tools 
+to map nodes in a three-dimensional space. 
+Some changes are also desirable to optimize job placement in three-dimensional 
+space.</p>
+
+<h2>Configuration</h2>
+
+<p>Two variables must be defined in the <i>config.h</i> file: 
+<i>HAVE_SUN_CONST</i> and <i>HAVE_3D</i>.
+This can be accomplished in several different ways depending upon how 
+SLURM is being built.
+<ol>
+<li>Execute the <i>configure</i> command with the option 
+<i>--enable-sun-const</i> <b>OR</b></li>
+<li>Execute the <i>rpmbuild</i> command with the option 
+<i>--with sun_const</i> <b>OR</b></li>
+<li>Add <i>%with_sun_const 1</i> to your <i>~/.rpmmacros</i> file.</li>
+</ol></p>
+
+<p>Node names must have a three-digit suffix describing their 
+zero-origin position in the X-, Y- and Z-dimension respectively (e.g. 
+"tux000" for X=0, Y=0, Z=0; "tux123" for X=1, Y=2, Z=3). 
+Rectangular prisms of nodes can be specified in SLURM commands and
+configuration files using the system name prefix with the end-points 
+enclosed in square brackets and separated by an "x". 
+For example "tux[620x731]" is used to represent the eight nodes in a 
+block with endpoints at "tux620" and "tux731" (tux620, tux621, tux630, 
+tux631, tux720, tux721, tux730, tux731).
+While node names of this form are required for SLURM's internal use,
+it need not be the name returned by the <i>hostlist -s</i> command. 
+See <i>man slurm.conf</i> for details on how to use the <i>NodeName</i>,
+<i>NodeAddr</i> and <i>NodeHostName</i> configuration parameters 
+for flexibility in this matter.</p>
+
+<p>Next you need to select from two options for the resource selection 
+plugin (the <i>SelectType</i> option in SLURM's <i>slurm.conf</i> configuration
+file):
+<ol>
+<li><b>select/cons_res</b> - Performs a best-fit algorithm based upon a 
+one-dimensional space to allocate whole nodes, sockets, or cores to jobs
+based upon other configuration parameters.</li>
+<li><b>select/linear</b> - Performs a best-fit algorithm based upon a 
+one-dimensional space to allocate whole nodes to jobs.</li>
+</ol>
+
+<p>In order for <i>select/cons_res</i> or <i>select/linear</i> to 
+allocate resources physically nearby in three-dimensional space, the 
+nodes be specified in SLURM's <i>slurm.conf</i> configuration file in 
+such a fashion that those nearby in <i>slurm.conf</i> (managed
+internal to SLURM as a one-dimensional space) are also nearby in 
+the physical three-dimensional space. 
+If the definition of the nodes in SLURM's <i>slurm.conf</i> configuration 
+file are listed on one line (e.g. <i>NodeName=tux[000x333]</i>),
+SLURM will automatically perform that conversion using a 
+<a href="http://en.wikipedia.org/wiki/Hilbert_curve">Hilbert curve</a>.
+Otherwise you may construct your own node ordering sequence and 
+list them one node per line in <i>slurm.conf</i>.
+Note that each node must be listed exactly once and consecutive
+nodes should be nearby in three-dimensional space. 
+Also note that each node must be defined individually rather than using 
+a hostlist expression in order to preserve the ordering (there is no 
+problem using a hostlist expression in the partition specification after
+the nodes have already been defined).
+The open source code used by SLURM to generate the Hilbert curve is 
+included in the distribution at <i>contribs/skilling.c</i> in the event
+that you wish to experiment with it to generate your own node ordering.
+Two examples of SLURM configuration files are shown below:</p>
+
+<pre>
+# slurm.conf for Sun Constellation system of size 4x4x4
+
+# Configuration parameters removed here
+
+# Automatic orders nodes following a Hilbert curve
+NodeName=DEFAULT Procs=8 RealMemory=2048 State=Unknown
+NodeName=tux[000x333]
+PartitionName=debug Nodes=tux[000x333] Default=Yes State=UP
+</pre>
+
+<pre>
+# slurm.conf for Sun Constellation system of size 2x2x2
+
+# Configuration parameters removed here
+
+# Manual ordering of nodes following a space-filling curve
+NodeName=DEFAULT Procs=8 RealMemory=2048 State=Unknown
+NodeName=tux000
+NodeName=tux100
+NodeName=tux110
+NodeName=tux010
+NodeName=tux011
+NodeName=tux111
+NodeName=tux101
+NodeName=tux001
+PartitionName=debug Nodes=tux[000x111] Default=Yes State=UP
+</pre>
+
+<p>In both of the examples above, the node names output by the
+<i>scontrol show nodes</i> will be ordered as defined (sequentially 
+along the Hilbert curve or per the ordering in the <i>slurm.conf</i> file)
+rather than in numeric order (e.g. "tux001" follows "tux101" rather 
+than "tux000"). 
+The output of other SLURM commands (e.g. <i>sinfo</i> and <i>squeue</i>) 
+will use a SLURM hostlist expression with the node names numerically ordered).
+SLURM partitions should contain nodes which are defined sequentially
+by that ordering for optimal performance.</p>
+
+<p class="footer"><a href="#top">top</a></p>
+
+<p style="text-align:center;">Last modified 8 January 2009</p></td>
+
+<!--#include virtual="footer.txt"-->
diff --git a/doc/html/switchplugins.shtml b/doc/html/switchplugins.shtml
index 9703dba8a..3f8f65da7 100644
--- a/doc/html/switchplugins.shtml
+++ b/doc/html/switchplugins.shtml
@@ -108,12 +108,6 @@ to indicate the reason for failure.</p>
 the plugin should return SLURM_ERROR and set the errno to an appropriate value
 to indicate the reason for failure.</p>
 
-<p class="commandline">bool switch_p_no_frag(void);</p>
-<p style="margin-left:.2in"><b>Description</b>: Report if resource fragmentation is important. 
-If so, delay scheduling a new job while another is in the process of terminating.</p>
-<p style="margin-left:.2in"><b>Arguments</b>:<span class="commandline"> None</span></p>
-<p style="margin-left:.2in"><b>Returns</b>: TRUE if job scheduling should be delayed while 
-any other job is in the process of terminating.</p>
 <p class="footer"><a href="#top">top</a></p>
 
 <h3>Node's Switch State Monitoring Functions</h3>
@@ -314,7 +308,7 @@ to indicate the reason for failure.</p>
 
 <p class="commandline">bool switch_p_part_comp (void);</p>
 <p style="margin-left:.2in"><b>Description</b>: Indicate if the switch plugin should 
-process partitial job step completions (i.e. switch_g_job_step_part_comp). Support
+process partial job step completions (i.e. switch_g_job_step_part_comp). Support
 of partition completions is compute intensive, so it should be avoided unless switch 
 resources are in short supply (e.g. switch/federation).</p>
 <p style="margin-left:.2in"><b>Returns</b>: True if partition step completions are 
@@ -380,7 +374,7 @@ to indicate the reason for failure.</p>
 <p class="footer"><a href="#top">top</a></p>
 
 <h3>Job Management Functions</h3>
-<blockquote><pre>
+<pre>
 =========================================================================
 Process 1 (root)        Process 2 (root, user)  |  Process 3 (user task) 
                                                 |                        
@@ -392,7 +386,7 @@ waitpid                 setuid, chdir, etc.     |
                         switch_p_job_fini*      |                        
 switch_p_job_postfini                           |                        
 =========================================================================
-</pre></blockquote>
+</pre>
 
 <p class="commandline">int switch_p_job_preinit (switch_jobinfo_t jobinfo switch_job);</p>
 <p style="margin-left:.2in"><b>Description</b>: Preinit is run as root in the first slurmd process, 
@@ -478,7 +472,7 @@ jobinfo switch_job, char *nodelist);</p>
 <p style="margin-left:.2in"><b>Description</b>: Note that the identified 
 job step is active at restart time. This function can be used to 
 restore global switch state information based upon job steps known to be 
-active at restart time. Use of this function is prefered over switch state 
+active at restart time. Use of this function is preferred over switch state 
 saved and restored by the switch plugin. Direct use of job step switch 
 information eliminates the possibility of inconsistent state information 
 between the switch and job steps.
@@ -519,6 +513,6 @@ plugin that transmitted it. It is at the discretion of the plugin author whether
 to maintain data format compatibility across different versions of the plugin.</p>
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 3 July 2006</p>
+<p style="text-align:center;">Last modified 5 September 2008</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/taskplugins.shtml b/doc/html/taskplugins.shtml
index bcc3d0f1e..f476e2e94 100644
--- a/doc/html/taskplugins.shtml
+++ b/doc/html/taskplugins.shtml
@@ -18,7 +18,7 @@ abbreviation for the type of task management. We recommend, for example:</p>
 <ul>
 <li><b>affinity</b>&#151;A plugin that implements task binding to processors.
 The actual mechanism used to task binding is dependent upon the available
-infrastruture as determined by the "configure" program when SLURM is built
+infrastructure as determined by the "configure" program when SLURM is built
 and the value of the <b>TaskPluginParam</b> as defined in the <b>slurm.conf</b>
 (SLURM configuration file).</li>
 <li><b>none</b>&#151;A plugin that implements the API without providing any
@@ -46,6 +46,22 @@ SLURM_ERROR.</p>
 <p>The following functions must appear. Functions which are not implemented should 
 be stubbed.</p>
 
+<p class="commandline">int task_slurmd_batch_request (uint32_t job_id, 
+batch_job_launch_msg_t *req);</p>
+<p style="margin-left:.2in"><b>Description</b>: Prepare to launch a batch job.
+Establish node, socket, and core resource availability for it.
+Executed by the <b>slurmd</b> daemon as user root.</p>
+<p style="margin-left:.2in"><b>Arguments</b>:<br>
+<span class="commandline">job_id</span>&nbsp;&nbsp;&nbsp;(input) 
+ID of the job to be started.<br>
+<span class="commandline">req</span>&nbsp;&nbsp;&nbsp;(input/output)
+Batch job launch request specification.
+See <b>src/common/slurm_protocol_defs.h</b> for the
+data structure definition.</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. 
+On failure, the plugin should return SLURM_ERROR and set the errno to an 
+appropriate value to indicate the reason for failure.</p>
+
 <p class="commandline">int task_slurmd_launch_request (uint32_t job_id, 
 launch_tasks_request_msg_t *req, uint32_t node_id);</p>
 <p style="margin-left:.2in"><b>Description</b>: Prepare to launch a job.
@@ -148,7 +164,7 @@ appropriate value to indicate the reason for failure.</p>
 <p style="margin-left:.2in"><b>Description</b>: task_term() is called 
 after termination of job step.
 Executed by the <b>slurmstepd</b> program as the job's owner.
-It is preceeded by <b>--task-epilog</b> (from <b>srun</b> command line)
+It is preceded by <b>--task-epilog</b> (from <b>srun</b> command line)
 followed by <b>TaskEpilog</b> program (as configured in <b>slurm.conf</b>).</p>
 <p style="margin-left:.2in"><b>Arguments</b>:
 <span class="commandline">job</span>&nbsp;&nbsp;&nbsp;(input)
@@ -164,6 +180,6 @@ appropriate value to indicate the reason for failure.</p>
 Future releases of SLURM may revise this API.</p>
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 28 May 2008</p>
+<p style="text-align:center;">Last modified 19 February 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/team.shtml b/doc/html/team.shtml
index 9231938dc..cb3818a0a 100644
--- a/doc/html/team.shtml
+++ b/doc/html/team.shtml
@@ -5,14 +5,14 @@
 <a href="https://www.llnl.gov/">Lawrence Livermore National Laboratory</a> (LLNL),
 <a href="http://www.hp.com/">HP</a>,
 <a href="http://www.bull.com/">Bull</a>,
-<a href="http://www.lnxi.com/">Linux NetworX</a>,
-and a host of others.
+Linux NetworX and many other contributorss.
 
 <p>The current SLURM development staff includes: </p>
 <ul>
 <li>Morris Jette (LLNL, Project leader)</li>
 <li>Danny Auble (LLNL)</li>
 <li>Susanne Balle (HP)</li>
+<li>David Bremer (LLNL)</li>
 <li>Chris Holmes (HP)</li>
 </ul>
 
@@ -27,6 +27,7 @@ and a host of others.
 <li>Daniel Christians (HP)</li>
 <li>Gilles Civario (Bull)</li>
 <li>Chuck Clouston (Bull)</li>
+<li>Joseph Donaghy (LLNL)</li>
 <li>Chris Dunlap (LLNL)</li>
 <li>Joey Ekstrom (LLNL/Bringham Young University)</li>
 <li>Josh England (TGS Management Corporation)</li>
@@ -38,15 +39,20 @@ and a host of others.
 <li>Matthieu Hautreux (CEA, France)</li>
 <li>Nathan Huff (North Dakota State University)</li>
 <li>David Jackson (Cluster Resources)</li>
+<li>Klaus Joas (University Karlsruhe, Germany)</li>
 <li>Greg Johnson (LANL)</li>
 <li>Jason King (LLNL)</li>
 <li>Nancy Kritkausky (Bull)</li>
+<li>Eric Lin (Bull)</li>
 <li>Puenlap Lee (Bull)</li>
 <li>Bernard Li (Genome Sciences Centre, Canada)</li>
+<li>Donald Lipari (LLNL)</li>
 <li>Steven McDougall (SiCortex)</li>
 <li>Donna Mecozzi (LLNL)</li>
+<li>Bj&oslash;rn-Helge Mevik (University of Oslo, Norway)</li>
 <li>Chris Morrone (LLNL)</li>
-<li>Pere Munt (Barcelona Supercomputer Center, Spain)<li>
+<li>Pere Munt (Barcelona Supercomputer Center, Spain)</li>
+<li>Michal Novotny (Masaryk University, Czech Republic)</li> 
 <li>Bryan O'Sullivan (Pathscale)</li>
 <li>Gennaro Oliva (Institute of High Performance Computing and 
 Networking, Italy)</li>
@@ -54,6 +60,7 @@ Networking, Italy)</li>
 <li>Dan Phung (LLNL/Columbia University)</li>
 <li>Ashley Pittman (Quadrics)</li>
 <li>Vijay Ramasubramanian (University of Maryland)</li>
+<li>Krishnakumar Ravi[KK] (HP)</li>
 <li>Andy Riebs (HP)</li>
 <li>Asier Roa (Barcelona Supercomputer Center, Spain)<li>
 <li>Miguel Ros (Barcelona Supercomputer Center, Spain)<li>
@@ -69,6 +76,6 @@ Networking, Italy)</li>
 <li>Anne-Marie Wunderlin (Bull)</li>
 </ul>
 
-<p style="text-align:center;">Last modified 20 January 2009</p>
+<p style="text-align:center;">Last modified 16 June 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/testimonials.shtml b/doc/html/testimonials.shtml
index ebc3c819f..64853ab7c 100644
--- a/doc/html/testimonials.shtml
+++ b/doc/html/testimonials.shtml
@@ -20,26 +20,36 @@ Dona Crawford, Associate Directory Lawrence Livermore National Laboratory
 </i>
 <HR SIZE=4>
 
-<i>
-"We are extremely pleased with SLURM and strongly recommend it to others 
-because it is mature, the developers are highly responsive and 
-it just works."<br><br>
-Jeffrey M. Squyres, Pervasive Technology Labs at Indiana University
-</i>
-<HR SIZE=4>
-
 <i>
 "Thank you for SLURM! It is one of the nicest pieces of free software
 for managing HPC clusters we have come across in a long time.
 Both of our Blue Genes are running SLURM and it works fantastically 
-well."<br><br>
+well.
+It's the most flexible, useful scheduling tool I've ever run 
+across."<br><br>
 Adam Todorski, Computational Center for Nanotechnology Inovations,
 Rensselaer Polytechnic Institute
 </i>
 <HR SIZE=4>
 
 <i>
-We adopted SLURM as our resource manager over two years ago when it was at
+"Awesome! I just read the manual, set it up and it works great.
+I tell you, I've used Sun Grid Engine, Torque, PBS Pro and there's
+nothing like SLURM."<br><br>
+Aaron Knister, Environmental Protection Agency
+</i>
+<HR SIZE=4>
+
+<i>
+"We are extremely pleased with SLURM and strongly recommend it to others 
+because it is mature, the developers are highly responsive and 
+it just works."<br><br>
+Jeffrey M. Squyres, Pervasive Technology Labs at Indiana University
+</i>
+<HR SIZE=4>
+
+<i>
+"We adopted SLURM as our resource manager over two years ago when it was at
 the 0.3.x release level. Since then it has become an integral and important
 component of our production research services. Its stability, flexibility
 and performance has allowed us to significantly increase the quality of
@@ -88,7 +98,7 @@ Erest Artiaga, Barcelona Supercomputing Center
 
 <i>
 "SLURM was a great help for us in implementing our own very concise 
-job management system on top of it which could be taylored precisely 
+job management system on top of it which could be tailored precisely 
 to our needs, and which at the same time is very simple to use for 
 our customers. 
 In general, we are impressed with the stability, scalability, and performance 
@@ -112,6 +122,6 @@ Bill Celmaster, XC Program Manager, Hewlett-Packard Company
 </i>
 <HR SIZE=4>
 
-<p style="text-align:center;">Last modified 28 July 2008</p>
+<p style="text-align:center;">Last modified 8 April 2009</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/doc/html/topo_ex1.gif b/doc/html/topo_ex1.gif
new file mode 100644
index 0000000000000000000000000000000000000000..4b1da437ca80b875393d6076d7d7d47e974d353b
GIT binary patch
literal 12425
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
V7zxr`3ex%#q<tDhd5#`X|3CMN8|451

literal 0
HcmV?d00001

diff --git a/doc/html/topo_ex2.gif b/doc/html/topo_ex2.gif
new file mode 100644
index 0000000000000000000000000000000000000000..a0f0e12fada8e99f588809a015d82f27338ee9fd
GIT binary patch
literal 31415
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
Rcirn>2YcAXe)50-06U{b{qz6;

literal 0
HcmV?d00001

diff --git a/doc/html/topology.shtml b/doc/html/topology.shtml
new file mode 100644
index 000000000..862d1aa09
--- /dev/null
+++ b/doc/html/topology.shtml
@@ -0,0 +1,112 @@
+<!--#include virtual="header.txt"-->
+
+<h1>Topology</h1>
+
+<p>SLURM version 2.0 can be configured to support topology-aware resource
+allocation to optimize job performance.
+There are two primary modes of operation, one to optimize performance on
+systems with a three-dimensional torus interconnect and another for
+a hierarchical interconnect.</p>
+
+<p>SLURM's native mode of resource selection is to consider the nodes
+as a one-dimensional array. 
+Jobs are allocated resources on a best-fit basis.
+For larger jobs, this minimizes the number of sets of consecutive nodes
+allocated to the job.</p>
+
+<h2>Three-dimension Topology</h2>
+
+<p>Some larger computers rely upon a three-dimensional torus interconnect.
+The IBM BlueGene computers is one example of this which has highly
+constrained resource allocation scheme, essentially requiring that 
+jobs be allocated a set of nodes logically having a rectangular shape.
+SLURM has a plugin specifically written for BlueGene to select appropriate
+nodes for jobs, change network switch routing, boot nodes, etc as described
+in the <a href="bluegene.html">BlueGene User and Administrator Guide</a>.</p>
+
+<p>The Sun Constellation and Cray XT systems also have three-dimensional 
+torus interconnects, but do not require that jobs execute in adjacent nodes.
+On those systems, SLURM only needs to allocate resources to a job which 
+are nearby on the network. 
+SLURM accomplishes this using a 
+<a href="http://en.wikipedia.org/wiki/Hilbert_curve">Hilbert curve</a> 
+to map the nodes from a three-dimensional space into a one-dimensional
+space.
+SLURM's native best-fit algorithm is thus able to achieve a high degree
+of locality for jobs.
+For more information, see SLURM's documentation for
+<a href="sun_const.html">Sun Constellation</a> and
+<a href="cray.html">Cray XT</a> systems.</p>
+
+<h2>Hierarchical Networks</h2>
+
+<p>SLURM can also be configured to allocate resources to jobs on a 
+hierarchical network to minimize network contention.
+The basic algorithm is to identify the lowest level switch in the
+hierarchy that can satisfy a job's request and then allocate resources
+on its underlying leaf switches using a best-fit algorithm.
+Use of this logic requires a configuration setting of 
+<i>TopologyPlugin=topology/tree</i>.</p>
+
+<p>At some point in the future SLURM code may be provided to 
+gather network topology information directly.
+Now the network topology information must be included 
+in a <i>topology.conf</i> configuration file as shown in the 
+examples below.
+The first example describes a three level switch in which 
+each switch has two children. 
+Note that the <i>SwitchName</i> values are arbitrary and only
+used to bookkeeping purposes, but a name must be specified on
+each line.
+The leaf switch descriptions contain a <i>SwitchName</i> field
+plus a <i>Nodes</i> field to identify the nodes connected to the
+switch.
+Higher-level switch descriptions contain a <i>SwitchName</i> field
+plus a <i>Switches</i> field to identify the child switches.
+SLURM's hostlist expression parser is used, so the node and switch
+names need not be consecutive (e.g. "Nodes=tux[0-3,12,18-20]"
+and "Swithces=s[0-2,4-8,12]" will parse fine).
+</p>
+
+<p>An optional LinkSpeed option can be used to indicate the 
+relative performance of the link. 
+The units used are arbitrary and this information is currently not used.
+It may be used in the future to optimize resource allocations.</p>
+
+<p>The first example shows what a topology would look like for an
+eight node cluster in which all switches have only two children as
+shown in the diagram (not a very realistic configuration, but 
+useful for an example).</p>
+
+<pre>
+# topology.conf
+# Switch Configuration
+SwitchName=s0 Nodes=tux[0-1]
+SwitchName=s1 Nodes=tux[2-3]
+SwitchName=s2 Nodes=tux[4-5]
+SwitchName=s3 Nodes=tux[6-7]
+SwitchName=s4 Switches=s[0-1]
+SwitchName=s5 Switches=s[2-3]
+SwitchName=s6 Switches=s[4-5]
+</pre>
+<img src=topo_ex1.gif width=600>
+
+<p>The next example is for a network with two levels and 
+each switch has four connections.</p>
+<pre>
+# topology.conf
+# Switch Configuration
+SwitchName=s0 Nodes=tux[0-3]   LinkSpeed=900
+SwitchName=s1 Nodes=tux[4-7]   LinkSpeed=900
+SwitchName=s2 Nodes=tux[8-11]  LinkSpeed=900
+SwitchName=s3 Nodes=tux[12-15] LinkSpeed=1800
+SwitchName=s4 Switches=s[0-3]  LinkSpeed=1800
+SwitchName=s5 Switches=s[0-3]  LinkSpeed=1800
+SwitchName=s6 Switches=s[0-3]  LinkSpeed=1800
+SwitchName=s7 Switches=s[0-3]  LinkSpeed=1800
+</pre>
+<img src=topo_ex2.gif width=600>
+
+<p style="text-align:center;">Last modified 24 March 2009</p>
+
+<!--#include virtual="footer.txt"-->
diff --git a/doc/html/topology_plugin.shtml b/doc/html/topology_plugin.shtml
new file mode 100644
index 000000000..d2f146dd1
--- /dev/null
+++ b/doc/html/topology_plugin.shtml
@@ -0,0 +1,74 @@
+<!--#include virtual="header.txt"-->
+
+<h1><a name="top">SLURM Topology Plugin Programmer Guide</a></h1>
+
+<h2> Overview</h2>
+<p> This document describes SLURM topology plugin and the API that 
+defines them. 
+It is intended as a resource to programmers wishing to write their own 
+SLURM topology plugin. 
+This is version 100 of the API.</p>
+
+<p>SLURM topology plugins are SLURM plugins that implement 
+convey system topology information so that SLURM is able to 
+optimize resource allocations and minimize communication overhead. 
+The plugins must conform to the SLURM Plugin API with the following 
+specifications:</p>
+
+<p><span class="commandline">const char plugin_type[]</span><br>
+The major type must be &quot;topology.&quot; 
+The minor type specifies the type of topology mechanism. 
+We recommend, for example:</p>
+<ul>
+<li><b>3d_torus</b>&#151;Optimize placement for a three dimensional torus.</li>
+<li><b>none</b>&#151;No topology informatin.</li>
+<li><b>tree</b>&#151;Optimize placement based upon a hiearachy of network
+switches.</li>
+</ul></p>
+
+<p>The <span class="commandline">plugin_name</span> and 
+<span class="commandline">plugin_version</span> 
+symbols required by the SLURM Plugin API require no specialization for 
+topology support. 
+The actions preformed by these plugins vary widely.
+In the case of <b>3d_torus</b>, the nodes in configuration file
+are re-ordeded so that nodes which are nearby in the one-dimensional
+table are also nearby in logical three-dimensional space.
+In the case of <b>tree</b>, a tabled is built to reflect network
+topology and that table is later used by the <b>select</b> plugin
+to optimize placement.
+Note carefully, however, the versioning discussion below.</p>
+
+<h2>Data Objects</h2>
+<p>The implementation must maintain (though not necessarily directly export) an 
+enumerated <span class="commandline">errno</span> to allow SLURM to discover 
+as practically as possible the reason for any failed API call. 
+Plugin-specific enumerated integer values may be used when appropriate.
+
+<p>These values must not be used as return values in integer-valued 
+functions in the API. 
+The proper error return value from integer-valued functions is SLURM_ERROR. 
+The implementation should endeavor to provide useful and pertinent 
+information by whatever means is practical. 
+Successful API calls are not required to reset any errno to a known value. 
+However, the initial value of any errno, prior to any error condition 
+arising, should be SLURM_SUCCESS. </p>
+<p class="footer"><a href="#top">top</a></p>
+
+<h2>API Functions</h2>
+<p>The following functions must appear. 
+Functions which are not implemented should be stubbed.</p>
+
+<p class="commandline">int topo_build_config(void);</p>
+<p style="margin-left:.2in"><b>Description</b>: Generate topology information.</p>
+<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS or 
+SLURM_ERROR on failure.</p>
+
+<h2>Versioning</h2>
+<p> This document describes version 100 of the SLURM topology API. 
+Future releases of SLURM may revise this API.</p>
+<p class="footer"><a href="#top">top</a></p>
+
+<p style="text-align:center;">Last modified 24 March 2009</p>
+
+<!--#include virtual="footer.txt"-->
diff --git a/doc/html/troubleshoot.shtml b/doc/html/troubleshoot.shtml
index 9c585040a..6f60aed98 100644
--- a/doc/html/troubleshoot.shtml
+++ b/doc/html/troubleshoot.shtml
@@ -102,7 +102,7 @@ to backfill schedule jobs will be limited.
 The backfill scheduler does not alter job specifications of required 
 or excluded nodes, so jobs which specify nodes will substantially 
 reduce the effectiveness of backfill scheduling.
-See the <a href="faq.shtml#backfill">backfill documentation</a>
+See the <a href="faq.html#backfill">backfill documentation</a>
 for more details.</li>
 
 <li>If the scheduler type is <i>wiki</i>, this represents 
@@ -150,7 +150,7 @@ either fix the node or change <i>slurm.conf</i>.</li>
 between the control machine and the DOWN node using the command
 "<i>ping &lt;address&gt;</i>" being sure to specify the 
 NodeAddr values configured in <i>slurm.conf</i>. 
-If ping fails, then fix the network or addressses in <i>slurm.conf</i>.</li>
+If ping fails, then fix the network or addresses in <i>slurm.conf</i>.</li>
 
 <li>Next, login to a node that SLURM considers to be in a DOWN 
 state and check if the slurmd daemon is running with the command
@@ -222,7 +222,7 @@ file) for an indication of why it is failing. (grep for update_block:)</li>
 <li>If the reason was something that happened to the system like a
 failed boot or a nodecard going bad or something like that you will
 need to fix the problem and then 
-<a href="#bluegene-block-free">maunally set the block to free</a>.</li>
+<a href="#bluegene-block-free">manually set the block to free</a>.</li>
 </ol>
 <p class="footer"><a href="#top">top</a></p>
 
@@ -233,7 +233,7 @@ will run on a block</a></h2>
 <li><a href="#bluegene-error-state">Set the block state to be in error
 manually</a>.</li>
 <li>When you are ready to run jobs again on the block <a
-href="#bluegene-block-free">maunally set the block to free</a>.</li>
+href="#bluegene-block-free">manually set the block to free</a>.</li>
 </ol>
 <p class="footer"><a href="#top">top</a></p>
 
diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am
index 800536c24..3ee8ff796 100644
--- a/doc/man/Makefile.am
+++ b/doc/man/Makefile.am
@@ -13,9 +13,12 @@ man1_MANS =            \
 	man1/sinfo.1   \
 	man1/slurm.1 \
 	man1/smap.1 \
+	man1/sprio.1 \
 	man1/squeue.1 \
 	man1/sreport.1 \
 	man1/srun.1 \
+	man1/srun_cr.1 \
+	man1/sshare.1 \
 	man1/sstat.1 \
 	man1/strigger.1 \
 	man1/sview.1
@@ -39,11 +42,15 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_checkpoint_failed.3 \
 	man3/slurm_checkpoint_restart.3 \
 	man3/slurm_checkpoint_task_complete.3 \
+	man3/slurm_checkpoint_tasks.3 \
 	man3/slurm_checkpoint_vacate.3 \
 	man3/slurm_clear_trigger.3 \
 	man3/slurm_complete_job.3 \
-	man3/slurm_complete_job_step.3 \
 	man3/slurm_confirm_allocation.3 \
+	man3/slurm_create_partition.3 \
+	man3/slurm_create_reservation.3 \
+	man3/slurm_delete_partition.3 \
+	man3/slurm_delete_reservation.3 \
 	man3/slurm_free_ctl_conf.3 \
 	man3/slurm_free_job_info_msg.3 \
 	man3/slurm_free_job_alloc_info_response_msg.3 \
@@ -53,11 +60,11 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_free_node_info_msg.3 \
 	man3/slurm_free_partition_info.3 \
 	man3/slurm_free_partition_info_msg.3 \
+	man3/slurm_free_reservation_info_msg.3 \
 	man3/slurm_free_resource_allocation_response_msg.3 \
 	man3/slurm_free_slurmd_status.3 \
 	man3/slurm_free_submit_response_response_msg.3 \
 	man3/slurm_free_trigger_msg.3 \
-	man3/slurm_get_checkpoint_file_path.3 \
 	man3/slurm_get_end_time.3 \
 	man3/slurm_get_errno.3 \
 	man3/slurm_get_job_steps.3 \
@@ -66,6 +73,8 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_get_triggers.3 \
 	man3/slurm_init_job_desc_msg.3 \
 	man3/slurm_init_part_desc_msg.3 \
+	man3/slurm_init_resv_desc_msg.3 \
+	man3/slurm_init_update_node_msg.3 \
 	man3/slurm_job_step_create.3 \
 	man3/slurm_job_step_launch_t_init.3 \
 	man3/slurm_job_step_layout_get.3 \
@@ -79,6 +88,7 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_load_jobs.3 \
 	man3/slurm_load_node.3 \
 	man3/slurm_load_partitions.3 \
+	man3/slurm_load_reservations.3 \
 	man3/slurm_load_slurmd_status.3 \
 	man3/slurm_notify_job.3 \
 	man3/slurm_perror.3 \
@@ -93,6 +103,8 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_print_node_table.3 \
 	man3/slurm_print_partition_info.3 \
 	man3/slurm_print_partition_info_msg.3 \
+	man3/slurm_print_reservation_info.3 \
+	man3/slurm_print_reservation_info_msg.3 \
 	man3/slurm_print_slurmd_status.3 \
 	man3/slurm_read_hostfile.3 \
 	man3/slurm_reconfigure.3 \
@@ -108,6 +120,7 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_sprint_job_step_info.3 \
 	man3/slurm_sprint_node_table.3 \
 	man3/slurm_sprint_partition_info.3 \
+	man3/slurm_sprint_reservation_info.3 \
 	man3/slurm_step_ctx_create.3 \
 	man3/slurm_step_ctx_create_no_alloc.3 \
 	man3/slurm_step_ctx_daemon_per_node_hack.3 \
@@ -122,16 +135,18 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_strerror.3 \
 	man3/slurm_submit_batch_job.3 \
 	man3/slurm_suspend.3 \
+	man3/slurm_takeover.3 \
 	man3/slurm_terminate_job.3 \
 	man3/slurm_terminate_job_step.3 \
-	man3/slurm_trigger.3 \
 	man3/slurm_update_job.3 \
 	man3/slurm_update_node.3 \
-	man3/slurm_update_partition.3
+	man3/slurm_update_partition.3 \
+	man3/slurm_update_reservation.3
 
 man5_MANS = man5/bluegene.conf.5 \
 	man5/slurm.conf.5 \
 	man5/slurmdbd.conf.5 \
+	man5/topology.conf.5 \
 	man5/wiki.conf.5
 
 man8_MANS = man8/slurmctld.8 \
diff --git a/doc/man/Makefile.in b/doc/man/Makefile.in
index 6fcf040ea..5faf27b8c 100644
--- a/doc/man/Makefile.in
+++ b/doc/man/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -85,6 +89,10 @@ 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@
@@ -257,9 +265,12 @@ man1_MANS = \
 	man1/sinfo.1   \
 	man1/slurm.1 \
 	man1/smap.1 \
+	man1/sprio.1 \
 	man1/squeue.1 \
 	man1/sreport.1 \
 	man1/srun.1 \
+	man1/srun_cr.1 \
+	man1/sshare.1 \
 	man1/sstat.1 \
 	man1/strigger.1 \
 	man1/sview.1
@@ -283,11 +294,15 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_checkpoint_failed.3 \
 	man3/slurm_checkpoint_restart.3 \
 	man3/slurm_checkpoint_task_complete.3 \
+	man3/slurm_checkpoint_tasks.3 \
 	man3/slurm_checkpoint_vacate.3 \
 	man3/slurm_clear_trigger.3 \
 	man3/slurm_complete_job.3 \
-	man3/slurm_complete_job_step.3 \
 	man3/slurm_confirm_allocation.3 \
+	man3/slurm_create_partition.3 \
+	man3/slurm_create_reservation.3 \
+	man3/slurm_delete_partition.3 \
+	man3/slurm_delete_reservation.3 \
 	man3/slurm_free_ctl_conf.3 \
 	man3/slurm_free_job_info_msg.3 \
 	man3/slurm_free_job_alloc_info_response_msg.3 \
@@ -297,11 +312,11 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_free_node_info_msg.3 \
 	man3/slurm_free_partition_info.3 \
 	man3/slurm_free_partition_info_msg.3 \
+	man3/slurm_free_reservation_info_msg.3 \
 	man3/slurm_free_resource_allocation_response_msg.3 \
 	man3/slurm_free_slurmd_status.3 \
 	man3/slurm_free_submit_response_response_msg.3 \
 	man3/slurm_free_trigger_msg.3 \
-	man3/slurm_get_checkpoint_file_path.3 \
 	man3/slurm_get_end_time.3 \
 	man3/slurm_get_errno.3 \
 	man3/slurm_get_job_steps.3 \
@@ -310,6 +325,8 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_get_triggers.3 \
 	man3/slurm_init_job_desc_msg.3 \
 	man3/slurm_init_part_desc_msg.3 \
+	man3/slurm_init_resv_desc_msg.3 \
+	man3/slurm_init_update_node_msg.3 \
 	man3/slurm_job_step_create.3 \
 	man3/slurm_job_step_launch_t_init.3 \
 	man3/slurm_job_step_layout_get.3 \
@@ -323,6 +340,7 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_load_jobs.3 \
 	man3/slurm_load_node.3 \
 	man3/slurm_load_partitions.3 \
+	man3/slurm_load_reservations.3 \
 	man3/slurm_load_slurmd_status.3 \
 	man3/slurm_notify_job.3 \
 	man3/slurm_perror.3 \
@@ -337,6 +355,8 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_print_node_table.3 \
 	man3/slurm_print_partition_info.3 \
 	man3/slurm_print_partition_info_msg.3 \
+	man3/slurm_print_reservation_info.3 \
+	man3/slurm_print_reservation_info_msg.3 \
 	man3/slurm_print_slurmd_status.3 \
 	man3/slurm_read_hostfile.3 \
 	man3/slurm_reconfigure.3 \
@@ -352,6 +372,7 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_sprint_job_step_info.3 \
 	man3/slurm_sprint_node_table.3 \
 	man3/slurm_sprint_partition_info.3 \
+	man3/slurm_sprint_reservation_info.3 \
 	man3/slurm_step_ctx_create.3 \
 	man3/slurm_step_ctx_create_no_alloc.3 \
 	man3/slurm_step_ctx_daemon_per_node_hack.3 \
@@ -366,16 +387,18 @@ man3_MANS = man3/slurm_hostlist_create.3 \
 	man3/slurm_strerror.3 \
 	man3/slurm_submit_batch_job.3 \
 	man3/slurm_suspend.3 \
+	man3/slurm_takeover.3 \
 	man3/slurm_terminate_job.3 \
 	man3/slurm_terminate_job_step.3 \
-	man3/slurm_trigger.3 \
 	man3/slurm_update_job.3 \
 	man3/slurm_update_node.3 \
-	man3/slurm_update_partition.3
+	man3/slurm_update_partition.3 \
+	man3/slurm_update_reservation.3
 
 man5_MANS = man5/bluegene.conf.5 \
 	man5/slurm.conf.5 \
 	man5/slurmdbd.conf.5 \
+	man5/topology.conf.5 \
 	man5/wiki.conf.5
 
 man8_MANS = man8/slurmctld.8 \
diff --git a/doc/man/man1/sacct.1 b/doc/man/man1/sacct.1
index 035861fd1..25f27b357 100644
--- a/doc/man/man1/sacct.1
+++ b/doc/man/man1/sacct.1
@@ -1,30 +1,27 @@
-.\" $Header$
-.TH  sacct 1
-.ds )H "Hewlett\-Packard Company
+.TH SACCT "1" "April 2009" "sacct 2.0" "Slurm components"
+
 .SH "NAME"
-sacct
-\- displays accounting data for all jobs and job steps in the SLURM job accounting log
+sacct \- displays accounting data for all jobs and job steps in the
+SLURM job accounting log or SLURM database
 
 .SH "SYNOPSIS"
-.HP 
-.BR "sacct "
-\f2\fP\f2options \fP 
+\fBsacct\fR [\fIOPTIONS\fR...]
 
 .SH "DESCRIPTION"
 .PP
-Accounting information for jobs invoked with SLURM are logged in the job 
-accounting log file.
+Accounting information for jobs invoked with SLURM are either logged
+in the job accounting log file or saved to the SLURM database.
 .PP
 The 
 .BR "sacct "
 command displays job accounting data stored in the job accounting log 
-file in a variety of forms for your analysis.
+file or SLURM database in a variety of forms for your analysis.
 The 
 .BR "sacct "
 command displays information on jobs, job steps, status, and exitcodes by 
 default.
 You can tailor the output with the use of the 
-\f3\-\-format=\fP 
+\f3\-\-fields=\fP 
 option to specify the fields to be shown.
 .PP
 For the root user, the 
@@ -52,32 +49,31 @@ gather and report incomplete information for these calls;
 \f2getrusage(3)\fP man page for information about which data are
 actually available on your system.
 .IP
-If --dump is specified, the field selection options (--brief,
---format, ...) have no effect. 
+If \-\-dump is specified, the field selection options (\-\-brief,
+\-\-format, ...) have no effect. 
 .IP
 Elapsed time fields are presented as 2 fields, integral seconds and integral microseconds
 .IP
-If --dump is not specified, elapsed time fields are presented as
+If \-\-dump is not specified, elapsed time fields are presented as
 [[days-]hours:]minutes:seconds.hundredths.
 .IP
 The default input file is the file named in the jobacct_logfile
 parameter in slurm.conf.
 
-.SS "Options"
+.SH "OPTIONS"
+
 .TP "10"
-\f3\-a \fP\f3,\fP \f3\-\-all\fP
-Displays the job accounting data for all jobs in the job accounting log file.
+\f3\-a \fP\f3,\fP \f3\-\-allusers\fP
+Displays the current user's jobs. Displays all users jobs when run by root.
 .IP 
-This is the default behavior when the 
-.BR "sacct "
-command is executed by the root user.
-.TP 
-\f3\-A \fP\f2account_list\fP\f3,\fP  \f3\-\-accounts\fP\f3=\fP\f2account_list\fP
-Displays the statistics only for the jobs started on the accounts specified by
-the \f2account_list\fP operand, which is a comma\-separated list of
-account names.
-Space characters are not allowed in the \f2account_list\fP. Default is
-all accounts\&.
+
+.TP
+\f3\-A \fP\f2account_list\fP \fP\f3,\fP \f3\-\-accounts\fP\f3=\fP\f2account_list\fP
+Displays jobs when a comma separated list of accounts are given as the
+argument.
+.IP 
+
+
 .TP 
 \f3\-b \fP\f3,\fP \f3\-\-brief\fP
 Displays a brief listing, which includes the following data:
@@ -98,128 +94,83 @@ This option has no effect when the
 option is also specified.
 
 .TP 
-\f3\-C \fP\f2cluster_list\fP\f3,\fP  \f3\-\-clusters\fP\f3=\fP\f2cluster_list\fP
+\f3\-C \fP\f2cluster_list\fP\f3,\fP  \f3\-\-cluster\fP\f3=\fP\f2cluster_list\fP
 Displays the statistics only for the jobs started on the clusters specified by
 the \f2cluster_list\fP operand, which is a comma\-separated list of clusters.
 Space characters are not allowed in the \f2cluster_list\fP. \-1 for
 all clusters, default is current cluster you are executing the sacct
 command on\&.
 
+.TP
+\f3\-c \fP\f3,\fP \f3\-\-completion\fP
+Use job completion instead of job accounting.
+.IP 
+
+
 .TP 
 \f3\-d \fP\f3,\fP \f3\-\-dump\fP
-Displays (dumps) the raw data records.
-.IP 
-This option overrides the 
-\f3\-\-brief\fP 
-and 
-\f3\-\-format=\fP 
-options.
+Dumps the raw data records.
 .IP 
+
 The section titled "INTERPRETING THE \-\-dump OPTION OUTPUT" describes the 
 data output when this option is used.
 
 .TP 
 \f3\-\-duplicates\fP
 If SLURM job ids are reset, but the job accounting log file isn't
-reset at the same time (with -e, for example), some job numbers will
+reset at the same time (with \-e, for example), some job numbers will
 probably appear more than once in the accounting log file to refer to
 different jobs; such jobs can be distinguished by the "submit" time
 stamp in the data records.
 .IP 
-When data for specific jobs are requested with the --jobs option, we
+When data for specific jobs are requested with the \-\-jobs option, we
 assume that the user wants to see only the most recent job with that
-number. This behavior can be overridden by specifying --duplicates, in
+number. This behavior can be overridden by specifying \-\-duplicates, in
 which case all records that match the selection criteria will be returned.
-.IP
-When --jobs is not specified, we report data for all jobs that match
-the selection criteria, even if some of the job numbers are
-reused. Specify that you only want the most recent job for each
-selected job number with the --noduplicates option.
-
 
 .TP
-\f3\-e \fP\f2time_spec\fP \f3,\fP \f3\-\-expire=\fP\f2time_spec\fP
-.IP
-Removes job data from SLURMs current accounting log file (or the file
-specified with \f3\-\-file\fP) for jobs that completed more than
-\f2time_spec\fP
-ago and appends them to the expired log file.
+\f3\-e \fP\f3,\fP \f3\-\-helpformat\fP
 .IP
-If \f2time_spec\fP is an integer value only, it is interpreted as minutes. If
-\f2time_spec\fP is an integer followed by "h", it is interpreted as
-a number of hours. If \f2time_spec\fP is an integer followed by "d",
-it is interpreted as number of days. For example, "\-\-expire=14d" 
-purges the job accounting log of all jobs that completed
-more than 14 days ago.
+Print a list of fields that can be specified with the \f3\-\-format\fP option.
 .IP
-The expired log file is a file with the same name as the accounting
-log file, with ".expired" appended to the file name. For example, if
-the accounting log file is /var/log/slurmacct.log, the expired log
-file will be /var/log/slurmacct.log.expired.
-
-.TP
-\f3\-\-endtime\fP\f3=\fP\f2endtime\fP
-Select jobs eligible before this time.
-Valid Formats are.
-	HH:MM[:SS] [AM|PM]
-	MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]
-	MM/DD[/YY]-HH:MM[:SS]
-
-.TP 
-\f3\-F \fP\f2format_list\fP \f3,\fP  \f3\-\-format\fP\f3=\fP\f2format_list\fP
-Displays the job accounting data specified by the 
-\f2format_list\fP 
-operand, which is a comma\-separated list of fields.
-Space characters are not allowed in the 
-\f2format_list\fP\c
-\&. 
-.IP 
-See the 
-\f3\-\-helpformat\fP 
-option for a list of the available fields.
-See the section titled "Job Accounting Fields" for a description of 
-each field.
-.IP 
-The job accounting data is displayed in the order specified by the 
-\f2format_list\fP 
-operand.
-Thus, the following two commands display the same data but in different order:
 .RS 
 .PP
 .nf 
 .ft 3
-# sacct \-\-format=jobid,status
-Jobid    Status
-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-
-3          COMPLETED
-3.0        COMPLETED
+Fields available:
 
-.ft 1
-.fi 
-.RE 
-.RS 
-.PP
-.nf 
-.ft 3
-# sacct \-\-format=status,jobid
-Status     Jobid
-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-
-COMPLETED  3
-COMPLETED  3.0
+AllocCPUS     Account       AssocID       AveCPU       
+AvePages      AveRSS        AveVMSize     BlockID      
+Cluster       CPUTime       CPUTimeRAW    Elapsed      
+Eligible      End           ExitCode      GID          
+Group         JobID         JobName       Layout       
+MaxPages      MaxPagesNode  MaxPagesTask  MaxRSS       
+MaxRSSNode    MaxRSSTask    MaxVMSize     MaxVMSizeNode
+MaxVMSizeTask MinCPU        MinCPUNode    MinCPUTask   
+NCPUS         NNodes        NodeList      NTasks       
+Priority      Partition     QOS           QOSRAW       
+ReqCPUS       Reserved      ResvCPU       ResvCPURAW   
+Start         State         Submit        Suspended    
+SystemCPU     Timelimit     TotalCPU      UID          
+User          UserCPU       WCKey         WCKeyID      
 
 .ft 1
 .fi 
 .RE 
 .IP 
-The default value for the 
-\f2field_list\fP 
-operand is 
-\f3"jobid,jobname,partition,ncpus,state,exitcode"\fP\c
-\&.
-.IP 
-This option has no effect when the 
-\f3\-\-dump\fP 
-option is also specified.
+The section titled "Job Accounting Fields" describes these fields.
+
+.TP
+\f3\-E \fP\f2end_time\fP\fP\f3,\fP \f3\-\-endtime\fP\f3=\fP\f2end_time\fP
+.IP
+Select jobs starting before time.
+Valid time formats are...
+HH:MM[:SS] [AM|PM]
+MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]
+MM/DD[/YY]-HH:MM[:SS]         
+YYYY-MM-DD[THH[:MM[:SS]]]
+.IP
+
 
 .TP 
 \f3\-f \fP\f2file\fP\f3,\fP  \f3\-\-file\fP\f3=\fP\f2file\fP
@@ -227,53 +178,21 @@ Causes the
 .BR "sacct "
 command to read job accounting data from the named 
 \f2file\fP 
-instead of the current SLURM job accounting log file.
+instead of the current SLURM job accounting log file. Only applicable
+when running the filetxt plugin.
 
 .TP 
-\f3\-g \fP\f2gid_list\fP\f3,\fP  \f3\-\-gid\fP\f3=\fP\f2gid_list\fP
+\f3\-g \fP\f2gid_list\fP\f3,\fP  \f3\-\-gid\fP\f3=\fP\f2gid_list\fP \f3\-\-group\fP\f3=\fP\f2group_list\fP
 Displays the statistics only for the jobs started with the GID
-specified by the \f2gid_list\fP operand, which is a comma\-separated
-list of gids.  Space characters are not allowed in the \f2gid_list\fP. 
-Default is no restrictions.  This is virtually the same as the \-\-group
-option\&. 
-
-.TP 
-\f3\-g \fP\f2group_list\fP\f3,\fP  \f3\-\-group\fP\f3=\fP\f2group_list\fP
-Displays the statistics only for the jobs started with the GROUP
-specified by the \f2group_list\fP operand, which is a comma\-separated
-list of groups.  Space characters are not allowed in the \f2group_list\fP. 
-Default is no restrictions.  This is virtually the same as the \-\-gid option\&. 
+or the GROUP specified by the \f2gid_list\fP or the\f2group_list\fP operand, which is a comma\-separated
+list.  Space characters are not allowed. 
+Default is no restrictions.\&. 
 
 .TP 
 \f3\-h \fP\f3,\fP \f3\-\-help\fP
 Displays a general help message.
 .TP 
-\f3\-\-helpformat\fP
-Displays a list of fields that can be specified with the 
-\f3\-\-format\fP 
-option.
-.RS 
-.PP
-.nf 
-.ft 3
-Fields available:
-account     associd     cluster     cpu       
-cputime     elapsed     eligible    end       
-exitcode    finished    gid         group     
-job         jobid       jobname     ncpus     
-nodes       nnodes      nprocs      ntasks    
-pages       partition   rss         start     
-state       status      submit      timelimit 
-submitted   systemcpu   uid         user      
-usercpu     vsize       blockid     connection
-geo         max_procs   reboot      rotate    
-bg_start_point  wckey     
 
-.ft 1
-.fi 
-.RE 
-.IP 
-The section titled "Job Accounting Fields" describes these fields.
 
 .TP 
 \f3\-j \fP\f2job(.step)\fP \f3,\fP  \f3\-\-jobs\fP\f3=\fP\f2job(.step)\fP
@@ -288,59 +207,35 @@ The default is to display information on all jobs.
 
 .TP 
 \f3\-l\fP\f3,\fP \f3\-\-long\fP
-Displays a long listing, which includes the following data:
-.RS 
-.TP "3"
-\(bu
-\f3jobid\fP 
-.TP "3"
-\(bu
-\f3jobname\fP 
-.TP "3"
-\(bu
-\f3partition\fP 
-.TP "3"
-\(bu
-\f3vsize\fP 
-.TP "3"
-\(bu
-\f3rss\fP 
-.TP "3"
-\(bu
-\f3pages\fP 
-.TP "3"
-\(bu
-\f3cputime\fP 
-.TP "3"
-\(bu
-\f3ntasks\fP 
-.TP "3"
-\(bu
-\f3ncpus\fP 
-.TP "3"
-\(bu
-\f3elapsed\fP 
-.TP "3"
-\(bu
-\f3status\fP 
-.TP "3"
-\(bu
-\f3exitcode\fP 
-.RE 
+Equivelent to specifying:
+.IP
+\'--fields=jobid,jobname,partition,maxvsize,maxvsizenode,maxvsizetask,avevsize,maxrss,maxrssnode,maxrsstask,averss,maxpages,maxpagesnode,maxpagestask,avepages,mincpu,mincpunode,mincputask,avecpu,ntasks,alloccpus,elapsed,state,exitcode\' 
+
 
 .TP 
-\f3\-\-noduplicates\fP
-See the discussion under --duplicates.
+\f3\-L\fP\f3,\fP \f3\-\-allclusters\fP
+Display jobs ran on all clusters. By default, only jobs ran on the
+cluster from where sacct is called are displayed.
 
 .TP 
-\f3\-\-noheader\fP
-Prevents the display of the heading over the output.
-The default action is to display a header.
+\f3\-n\fP\f3,\fP \f3\-\-noheader\fP
+No heading will be added to the output. The default action is to
+display a header.
 .IP 
 This option has no effect when used with the 
 \f3\-\-dump\fP 
 option.
 
+.TP 
+\f3\-N\fP\f3,\fP \f3\-\-nodes\fP
+Display jobs that ran on any of these nodes.
+.IP
+
+.TP 
+\f3\-o \fP\f3,\fP \f3\-\-format\fP
+Comma seperated list of fields. (use "\-\-helpformat" for a list of available fields).
+.IP 
+
 .TP 
 \f3\-O \fP\f3,\fP \f3\-\-formatted_dump\fP
 Dumps accounting records in an easy\-to\-read format.
@@ -348,51 +243,18 @@ Dumps accounting records in an easy\-to\-read format.
 This option is provided for debugging.
 
 .TP
-\f3\-P \fP\f3,\fP \f3\-\-purge\fP
-Used in conjunction with --expire to remove invalid data from the job accounting log.
+\f3\-p \fP\f3,\fP \f3\-\-parsable\fP
+output will be '|' delimited with a '|' at the end
 
-.TP 
-\f3\-p \fP\f2partition_list\fP \f3,\fP  \f3\-\-partition\fP\f3=\fP\f2partition_list\fP
-Displays information about jobs and job steps specified by the 
-\f2partition_list\fP 
-operand, which is a comma\-separated list of partitions.
-Space characters are not allowed in the 
-\f2partition_list\fP\c
-\&. 
-.IP 
-The default is to display information on jobs and job steps on all partitions.
+.TP
+\f3\-P \fP\f3,\fP \f3\-\-parsable2\fP
+output will be '|' delimited without a '|' at the end
 
 .TP
-\f3\-S \fP\f3,\fP \f3\-\-stat\fP
-.IP
-Queries the status of a job as the job is running displaying
-the following data:
-.RS 
-.TP "3"
-\(bu
-\f3jobid\fP 
-.TP "3"
-\(bu
-\f3vsize\fP 
-.TP "3"
-\(bu
-\f3rss\fP 
-.TP "3"
-\(bu
-\f3pages\fP 
-.TP "3"
-\(bu
-\f3cputime\fP 
-.TP "3"
-\(bu
-\f3ntasks\fP 
-.TP "3"
-\(bu
-\f3status\fP 
-.RE 
-.IP
-You must also include the \-\-jobs=job(.step) option if no (.step) is 
-given you will recieve the job.0 step.
+\f3\-r \fP\f3,\fP \f3\-\-partition\fP
+
+Comma seperated list of partitions to select jobs and job steps
+from. The default is all partitions.
 
 .TP 
 \f3\-s \fP\f2state_list\fP \f3,\fP  \f3\-\-state\fP\f3=\fP\f2state_list\fP
@@ -432,34 +294,25 @@ Space characters are not allowed in the
 \f2state_list\fP\c
 \&.
 
-.TP
-\f3\-\-starttime\fP\f3=\fP\f2starttime\fP
-Select jobs eligible after this time.
-Valid Formats are.
-	HH:MM[:SS] [AM|PM]
-	MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]
-	MM/DD[/YY]-HH:MM[:SS]
-
 .TP 
-\f3\-t \fP\f3,\fP \f3\-\-total\fP
-Displays only the cumulative statistics for each job.
-Intermediate steps are displayed by default.
+\f3\-S \fP\f3,\fP \f3\-\-starttime\fP
+Select jobs eligible after the specified time. Default is midnight of
+current day.
+Valid time formats are...
+HH:MM[:SS] [AM|PM]
+MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]
+MM/DD[/YY]-HH:MM[:SS]         
+YYYY-MM-DD[THH[:MM[:SS]]]
 
 .TP 
-\f3\-u \fP\f2uid_list\fP\f3,\fP  \f3\-\-uid\fP\f3=\fP\f2uid_list\fP
-Displays the statistics only for the jobs started by the specified
-\f2uid_list\fP operand, which is a comma\-separated list of uids.
-Space characters are not allowed in the \f2uid_list\fP.  
-\-1 for all uids, default is current uid.  If run as user root default
-is all users.  This is virtually the same as the \-\-user option\&.
+\f3\-T \fP\f3,\fP \f3\-\-truncate\fP
+Truncate time.  So if a job started before --starttime the start time
+would be truncated to --starttime.  The same for end time and --endtime.
 
 .TP 
-\f3\-u \fP\f2user_list\fP\f3,\fP  \f3\-\-user\fP\f3=\fP\f2user_list\fP
-Displays the statistics only for the jobs started by the specified
-\f2user_list\fP operand, which is a comma\-separated list of users.
-Space characters are not allowed in the \f2user_list\fP.  
-\-1 for all uids, default is current uid.  If run as user root default
-is all users.  This is virtually the same as the \-\-uid option\&.
+\f3\-u \fP\f2uid_list\fP\f3,\fP  \f3\-\-uid\fP\f3=\fP\f2uid_list\fP \f3\-\-user\fP\f3=\fP\f2user_list\fP
+Use this comma seperated list of uids or user names to select jobs to display.  By default, the running
+user's uid is used.
 
 .TP 
 \f3\-\-usage\fP
@@ -467,8 +320,11 @@ Displays a help message.
 
 .TP 
 \f3\-v \fP\f3,\fP \f3\-\-verbose\fP
-Reports the state of certain variables during processing.
-This option is primarily used for debugging.
+Primarily for debug use reports the state of certain variables during processing.
+
+.TP 
+\f3\-V \fP\f3,\fP \f3\-\-version\fP
+Print version.
 
 .TP 
 \f3\-W \fP\f2wckey_list\fP\f3,\fP  \f3\-\-wckeys\fP\f3=\fP\f2wckey_list\fP
@@ -478,25 +334,57 @@ wckey names.
 Space characters are not allowed in the \f2wckey_list\fP. Default is
 all wckeys\&.
 
+.TP 
+\f3\-X \fP\f3,\fP \f3\-\-allocations\fP
+Only show cumulative statistics for each job, not the intermediate steps.
+
 .SS "Job Accounting Fields"
 The following describes each job accounting field:
 .RS 
 .TP "10"
+\f3alloccpus\fP
+Count of allocated processors.
+
+.TP
 \f3account\fP
-User supplied account number for the job
+Account the job ran under.
+
+.TP
+\f3associd\fP
+Reference to the association of user, account and cluster.
+
+.TP
+\f3avecpu\fP
+Average CPU time of a process.
+
+.TP
+\f3avepages\fP
+Average pages of a process.
+
+.TP
+\f3averss\fP
+Average resident set size of a process.
+
+.TP
+\f3avevsize\fP
+Average Virtual Memory size of a process.
 
 .TP
 \f3blockid\fP
-Block ID, applicable to BlueGene computers only
+Block ID, applicable to BlueGene computers only.
 
 .TP
-\f3cpu\fP 
-The sum of the system time (systemcpu) and user time (usercpu) in seconds 
+\f3cluster\fP 
+Cluster name.
 
 .TP
 \f3cputime\fP
-Minimum CPU time of any process followed by its task id along with
-the average of all processes running in the step.
+Formatted number of cpu seconds a process was allocated. 
+
+.TP
+\f3cputimeraw\fP
+How much cpu time process was allocated in second format, not formatted
+like above.
 
 .TP 
 \f3elapsed\fP 
@@ -526,6 +414,10 @@ minutes
 seconds
 .RE 
 
+.TP 
+\f3eligible\fP 
+When the job became eligible to run.
+
 .TP
 \f3end\fP
 Termination time of the job. Format output is as follows:
@@ -567,26 +459,6 @@ The group identifier of the user who ran the job.
 \f3group\fP
 The group name of the user who ran the job.
 
-.TP 
-\f3idrss\fP 
-Maximum unshared data size (in KB) of any process.
-
-.TP 
-\f3inblocks\fP 
-Total block input operations for all processes.
-
-.TP 
-\f3isrss\fP 
-Maximum unshared stack space size (in KB) of any process.
-
-.TP 
-\f3ixrss\fP 
-Maximum shared memory (in KB) of any process.
-
-.TP 
-\f3job\fP 
-The SLURM job identifier of the job.
-
 .TP 
 \f3jobid\fP 
 The number of the job or job step.
@@ -599,103 +471,130 @@ It is in the form:
 The name of the job or job step.
 
 .TP 
-\f3majflt\fP 
-Maximum number of major page faults for any process.
+\f3layout\fP
+What the layout of a step was when it was running.  This can be used
+to give you an idea of which node ran which rank in your job.
 
-.TP 
-\f3minflt\fP 
-Maximum number of minor page faults (page reclaims) for any process.
+.TP
+\f3maxpages\fP
+Maximum page faults of a process.
 
-.TP 
-\f3msgrcv\fP 
-Total number of messages received for all processes.
+.TP
+\f3maxpagesnode\fP
+The node where the maxpages occured.
 
-.TP 
-\f3msgsnd\fP 
-Total number of messages sent for all processes.
+.TP
+\f3maxpagestask\fP
+The task on maxpagesnode where the maxpages occured.
+
+.TP
+\f3maxrss\fP
+Maximum resident set size of a process.
+
+.TP
+\f3maxrssnode\fP
+The node where the maxrss occured.
+
+.TP
+\f3maxrsstask\fP
+The task on maxrssnode where the maxrss occured.
+
+.TP
+\f3maxvmsize\fP
+Maximum  Virtual  Memory size of any process.
+
+.TP
+\f3maxvmsizenode\fP
+The node where the maxvsize occured.
+
+.TP
+\f3maxvmsizetask\fP
+The task on maxvsizenode where the maxvsize occured.
+
+.TP
+\f3mincpu\fP
+Minimum cpu of any process.
+
+.TP
+\f3mincpunode\fP
+The node where the mincpu occured.
+
+.TP
+\f3mincputask\fP
+The task on mincpunode where the mincpu occured.
 
 .TP 
 \f3ncpus\fP 
 Total number of CPUs allocated to the job.
 
-.TP 
-\f3nivcsw\fP 
-Total number of involuntary context switches for all processes.
+.TP
+\f3nodelist\fP
+List of nodes in job/step.
+
+.TP
+\f3nnodes\fP
+Number of nodes in a job or step.
 
 .TP 
-\f3nodes\fP 
-A list of nodes allocated to the job.
+\f3ntasks\fP 
+Total number of tasks in a job or step.
 
 .TP
-\f3nprocs\fP
-Total number of tasks in job. Identical to \f3ntasks\fP.
+\f3priority\fP
+Slurm priority.
 
 .TP 
-\f3nsignals\fP
-Total number of signals received for all processes.
+\f3partition\fP
+Identifies the partition on which the job ran.
 
 .TP
-\f3nswap\fP
-Maximum number of swap operations of any process.
+\f3qos\fP
+Name of Quality of Service.
 
 .TP
-\f3ntasks\fP 
-Total number of tasks in job.
+\f3qosraw\fP 
+Id of Quality of Service.
 
 .TP 
-\f3nvcsw\fP 
-Total number of voluntary context switches for all processes.
+\f3reqcpus\fP 
+Required CPUs.
 
 .TP 
-\f3outblocks\fP 
-Total block output operations for all processes.
+\f3reserved\fP 
+How much wall clock time was used as reserved time for this job.  This is
+derived from how long a job was waiting from eligible time to when it
+actually started.
 
 .TP
-\f3pages\fP
-Maximum page faults of any process followed by its task id along with
-the average of all processes running in the step.
+\f3resvcpu\fP
+Formatted time for how long (cpu secs) a job was reserved for.
 
 .TP 
-\f3partition\fP 
-Identifies the partition on which the job ran.
-
-.TP 
-\f3rss\fP 
-Maximum resident set size of any process followed by its task id along with
-the average of all processes running in the step.
+\f3resvcpuraw\fP 
+Reserved CPUs in second format, not formatted.
 
 .TP
 \f3start\fP
 Initiation time of the job in the same format as \f3end\fP.
 
 .TP
-\f3status\fP
+\f3state\fP
 Displays the job status, or state.
-.IP 
-Output can be 
-\f3RUNNING\fP\c
-\&, 
-\f3SUSPENDED\fP\c
-\&,
-\f3COMPLETED\fP\c
-\&, 
-\f3CANCELLED\fP\c
-\&, 
-\f3FAILED\fP\c
-\&, 
-\f3TIMEOUT\fP\c
-\&, or 
-\f3NODE_FAIL\fP\c
-\&.
 
-.TP 
-\f3submit\fP 
-The time and date stamp (in Universal Time Coordinated, UTC) the job was 
-submitted.
-The format of the output is identical to that of the \f3end\fP field.
+Output can be RUNNING, SUSPENDED, COMPLETED,  CANCELLED, FAILED,
+TIMEOUT, or NODE_FAIL. 
 
-.TP 
-\f3systemcpu\fP 
+.TP
+\f3submit\fP
+The  time and date stamp (in Universal Time Coordinated, UTC) the job
+was submitted.  The format of the output is identical to that of the end field.
+
+.TP
+\f3suspended\fP
+How long the job was suspended for.
+
+.TP
+\f3systemcpu\fP
 The amount of system CPU time. (If job was running on multiple cpus this
 is a combination of all the times so this number could be much larger
 than the elapsed time.)
@@ -703,37 +602,40 @@ The format of the output is identical to that of the
 \f3elapsed\fP 
 field.
 
-.TP 
-\f3uid\fP 
-The user identifier of the user who ran the job.
+.TP
+\f3timelimit\fP
+What the timelimit was/is for the job.
 
-.TP 
-\f3uid.gid\fP 
-The user and group identifiers of the user who ran the job. (This
-field is used in record headers, and simply concatenates the
-\f3uid\fP and \f3gid\fP fields.)
+.TP
+\f3totalcpu\fP
+The total amount CPU time actually used by the job, not just
+accounted for (which most likely is a higher number). (If job was
+running on multiple cpus this is a combination of  all  the  times  so
+this number could be much larger than the elapsed time.) The format of
+the output is identical  to  that  of  the elapsed field.
+
+.TP
+\f3uid\fP
+The user identifier of the user who ran the job.
 
 .TP
 \f3user\fP
 The user name of the user who ran the job.
 
-.TP 
-\f3usercpu\fP 
-The amount of user CPU time. (If job was running on multiple cpus this
-is a combination of all the times so this number could be much larger
-than the elapsed time.)
-The format of the output is identical to that of the 
-\f3elapsed\fP field.
-
 .TP
-\f3vsize\fP
-Maximum Virtual Memory size of any process followed by its task id along with
-the average of all processes running in the step.
+\f3usercpu\fP
+The amount of user CPU time. (If job was running on multiple cpus
+this is a combination of  all  the  times  so this number could be
+much larger than the elapsed time.) The format of the output is
+identical  to  that  of  the elapsed field.
 
 .TP
 \f3wckey\fP
-Workload Characterization Key.  Arbitrary string for grouping
-orthogonal accounts together.
+Workload  Characterization  Key.   Arbitrary  string for grouping orthogonal accounts together.
+
+.TP
+\f3wckeyid\fP
+Reference to the wckey.
 
 .RE 
 .SH "INTERPRETING THE \-DUMP OPTION OUTPUT"
@@ -1156,12 +1058,12 @@ command:
 .nf 
 .ft 3
 # sacct
-Jobid      Jobname    Partition    Ncpus Status     Exitcode
-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-
-2          script01   srun             1 RUNNING           0
-3          script02   srun             1 RUNNING           0
-4          endscript  srun             1 RUNNING           0
-4.0                   srun             1 COMPLETED         0
+Jobid      Jobname    Partition    Account AllocCPUS State     ExitCode
+\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-
+2          script01   srun       acct1               1 RUNNING           0
+3          script02   srun       acct1               1 RUNNING           0
+4          endscript  srun       acct1               1 RUNNING           0
+4.0                   srun       acct1               1 COMPLETED         0
 
 .ft 1
 .fi 
@@ -1189,17 +1091,17 @@ Jobid      Status     Exitcode
 .PP
 .nf 
 .ft 3
-# sacct \-\-total
-Jobid      Jobname    Partition    Ncpus Status     Exitcode
-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-
-3          sja_init   andy             1 COMPLETED         0
-4          sjaload    andy             2 COMPLETED         0
-5          sja_scr1   andy             1 COMPLETED         0
-6          sja_scr2   andy            18 COMPLETED         2
-7          sja_scr3   andy            18 COMPLETED         0
-8          sja_scr5   andy             2 COMPLETED         0
-9          sja_scr7   andy            90 COMPLETED         1
-10         endscript  andy           186 COMPLETED         0
+# sacct \-\-allocations
+Jobid      Jobname    Partition Account    AllocCPUS  State     Exitcode
+\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-
+3          sja_init   andy       acct1            1 COMPLETED         0
+4          sjaload    andy       acct1            2 COMPLETED         0
+5          sja_scr1   andy       acct1            1 COMPLETED         0
+6          sja_scr2   andy       acct1           18 COMPLETED         2
+7          sja_scr3   andy       acct1           18 COMPLETED         0
+8          sja_scr5   andy       acct1            2 COMPLETED         0
+9          sja_scr7   andy       acct1           90 COMPLETED         1
+10         endscript  andy       acct1          186 COMPLETED         0
 
 .ft 1
 .fi 
@@ -1214,14 +1116,14 @@ The fields are displayed in the order designated on the command line.
 .nf 
 .ft 3
 # sacct \-\-fields=jobid,ncpus,ntasks,nsignals,status
-Jobid        Ncpus  Ntasks  Nsignals Status
-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\- \-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-
-3                2       1         0 COMPLETED
-3.0              2       1         0 COMPLETED
-4                2       2         0 COMPLETED
-4.0              2       2         0 COMPLETED
-5                2       1         0 COMPLETED
-5.0              2       1         0 COMPLETED
+Jobid     Elapsed    Ncpus     Ntasks   Status
+\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-
+3            00:01:30          2        1 COMPLETED
+3.0          00:01:30          2        1 COMPLETED
+4            00:00:00          2        2 COMPLETED
+4.0          00:00:01          2        2 COMPLETED
+5            00:01:23          2        1 COMPLETED
+5.0          00:01:31          2        1 COMPLETED
 
 .ft 1
 .fi 
@@ -1230,6 +1132,9 @@ Jobid        Ncpus  Ntasks  Nsignals Status
 
 Copyright (C) 2005\-2007 Copyright Hewlett\-Packard Development Company L.P.
 .LP
+Copyright (C) 2008\-2009 Lawrence Livermore National Security. Produced at Lawrence Livermore National Laboratory (cf,
+DISCLAIMER). CODE\-OCEC\-09\-009. All rights reserved.
+.LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
 .LP
@@ -1252,4 +1157,4 @@ designate the job accounting log file that collects system job accounting.
 The default job accounting log file.
 By default, this file is set to read and write permission for root only.
 .SH "SEE ALSO"
-ps(1), srun(1), squeue(1), getrusage(2), time(2)
+sstat(1), ps(1), srun(1), squeue(1), getrusage(2), time(2)
diff --git a/doc/man/man1/sacctmgr.1 b/doc/man/man1/sacctmgr.1
index ca40ffc6b..cb6e5eb08 100644
--- a/doc/man/man1/sacctmgr.1
+++ b/doc/man/man1/sacctmgr.1
@@ -1,4 +1,4 @@
-.TH SACCTMGR "1" "October 2008" "sacctmgr 1.3" "Slurm components"
+.TH SACCTMGR "1" "April 2009" "sacctmgr 2.0" "Slurm components"
 
 .SH "NAME"
 sacctmgr \- Used to view and modify Slurm account information.
@@ -35,7 +35,7 @@ This is equivalent to the \fBhelp\fR command.
 commit changes immediately.
 
 .TP
-\fB\-n\fR, \fB\-\-no_header\fR
+\fB\-n\fR, \fB\-\-noheader\fR
 No header will be added to the beginning of the output.
 
 .TP
@@ -97,7 +97,7 @@ Identical to the \fBadd\fR command.
 Delete the specified entities.
 
 .TP
-\fBdump\fR <\fIENTITY\fR> with <\fFile=IFILENAME\fR>
+\fBdump\fR <\fIENTITY\fR> with <\fIFile=FILENAME\fR>
 Dump cluster data to the specified file.
 
 .TP
@@ -179,6 +179,11 @@ The entity used to group information consisting of four parameters:
 The \fIClusterName\fR parameter in the \fIslurm.conf\fR configuration
 file, used to differentiate accounts from on different machines. 
 
+.TP
+\fIconfiguration\fP
+Used only with the \fIlist\fR or \fIshow\fR command to report current
+system configuration. 
+
 .TP
 \fIcoordinator\fR
 A special privileged user usually an account manager or such that can
@@ -210,13 +215,14 @@ Number used in conjunction with other accounts to determine job priority.
 To clear a previously set value use the modify command with a new value of \-1.
 
 .TP
-\fIGrpCPUMins\fP=<max cpu hours> 
-Maximum number of CPU hours running jobs are able to be allocated in aggregate for 
-this association and all association which are children of this association.
+\fIGrpCPUMins\fP=<max cpu minutes> 
+Maximum number of CPU minutes running jobs are able to be allocated in 
+aggregate for this association and all association which are children
+of this association.
 To clear a previously set value use the modify command with a new
-value of \-1.  (NOTE: This limit is not currently enforced in SLURM.
-You can still set this, but have to wait for future versions of SLURM
-before it is enforced.)
+value of \-1.  (NOTE: This limit is not enforced if set on the root
+association of a cluster.  So even though it may appear in sacctmgr
+output it will not be enforced.)
 
 .TP
 \fIGrpCPUs\fP=<max cpus>
@@ -251,6 +257,9 @@ To clear a previously set value use the modify command with a new value of \-1.
 Maximum wall clock time running jobs are able to be allocated in aggregate for 
 this association and all association which are children of this association.
 To clear a previously set value use the modify command with a new value of \-1.
+(NOTE: This limit is not enforced if set on the root
+association of a cluster.  So even though it may appear in sacctmgr
+output it will not be enforced.)
 
 .TP
 \fIMaxCPUMins\fP=<max cpu minutes> 
@@ -258,9 +267,7 @@ Maximum number of CPU minutes each job is able to use in this account.
 This is overridden if set directly on a user. 
 Default is the cluster's limit.
 To clear a previously set value use the modify command with a new
-value of \-1.  (NOTE: This limit is not currently enforced in SLURM.
-You can still set this, but have to wait for future versions of SLURM
-before it is enforced.)
+value of \-1. 
 
 .TP
 \fIMaxCPUs\fP=<max cpus>
@@ -468,6 +475,18 @@ controller is placed here.
 When a slurmctld registers with the database the port the controller
 is listening on is placed here.
 
+.TP
+\fICPU Count\fP
+The current count of cpus on the cluster.
+
+.TP
+\fINodeNames\fP
+The current Nodes associated with the cluster.
+
+.TP
+\fINodeCount\fP
+The current count of nodes associated with the cluster.
+
 .TP
 \fIRPC\fP
 When a slurmctld registers with the database the rpc version the controller
@@ -858,7 +877,7 @@ Maximum number of jobs this user can run.
 \fIMaxNodesPerJob=\fP
 Maximum number of nodes per job this user can run.
 .TP
-\fIMaxProcSecondsPerJob= 
+\fIMaxProcSecondsPerJob=\fP
 Maximum cpu seconds this user can run per job.
 .TP
 \fIMaxWallDurationPerJob=\fP
@@ -868,6 +887,64 @@ Maximum time (not related to job size) this user can run.
 Comma separated list of Quality of Service names (Defined in sacctmgr).
 .RE
 
+.SH "ARCHIVE FUNCTIONALITY"
+Sacctmgr has the capability to archive to a flatfile and or load that
+data if needed later.  The archiving is usually done by the slurmdbd
+and it is highly recommended you only do it through sacctmgr if you
+completely understand what you are doing.  For slurmdbd options see
+"man slurmdbd" for more information. 
+Loading data into the database can be done from these files to either
+view old data or regenerate rolled up data. 
+
+These are the options for both dump and load of archive information.
+
+archive dump
+
+.TP
+\fIDirectory=\fP
+Directory to store the archive data.
+.TP
+\fIEvents\fP
+Archive Events.  If not specified and PurgeEventMonths is set
+all event data removed will be lost permanently.
+.TP
+\fIJobs\fP
+Archive Jobs.  If not specified and PurgeJobMonths is set
+all job data removed will be lost permanently.
+.TP
+\fIPurgeEventMonths=\fP
+Purge cluster event records older than time stated in months.
+.TP
+\fIPurgeJobMonths=\fP
+Purge job records older than time stated in months.
+.TP
+\fIPurgeStepMonths=\fP
+Purge step records older than time stated in months.
+.TP
+\fIPurgeSuspendMonths=\fP
+Purge job suspend records older than time stated in months.
+.TP
+\fIScript=\fP
+Run this script instead of the generic form of archive to flat files.
+.TP
+\fISteps\fP
+Archive Steps.  If not specified and PurgeStepMonths is set
+all step data removed will be lost permanently.
+.TP
+\fISuspend\fP
+Archive Suspend Data.  If not specified and PurgeSuspendMonths is set
+all suspend data removed will be lost permanently.
+.RE    
+                                                                       
+archive load
+.TP
+\fIFile=\fP
+File to load into database.
+.TP
+\fIInsert=\fP 
+SQL to insert directly into the database.  This should be used very
+cautiously since this is writing your sql into the database.
+.RE
 
 .SH "EXAMPLES"
 .eo
@@ -948,9 +1025,9 @@ sacctmgr line.
 .ec
 
 .SH "COPYING"
-Copyright (C) 2008 Lawrence Livermore National Security.
+Copyright (C) 2008\-2009 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/salloc.1 b/doc/man/man1/salloc.1
index 62778dcfd..04388acc3 100644
--- a/doc/man/man1/salloc.1
+++ b/doc/man/man1/salloc.1
@@ -1,15 +1,13 @@
-.TH "salloc" "1" "SLURM 1.3" "August 2008" "SLURM Commands"
+.TH "salloc" "1" "SLURM 2.0" "April 2009" "SLURM Commands"
+
 .SH "NAME"
-.LP 
 salloc \- Obtain a SLURM job allocation (a set of nodes), execute a command, 
 and then release the allocation when the command is finished.
 
 .SH "SYNOPSIS"
-.LP 
 salloc [\fIoptions\fP] [<\fIcommand\fP> [\fIcommand args\fR]]
 
 .SH "DESCRIPTION"
-.LP 
 salloc is used to allocate a SLURM job allocation, which is a set of resources 
 (nodes), possibly with some set of constraints (e.g. number of processors per 
 node).  When salloc successfully obtains the requested allocation, it then runs 
@@ -24,10 +22,10 @@ section). If no command is specified, then the value of
 user's default shell.
 
 .SH "OPTIONS"
-.LP 
+.LP
 
 .TP
-\fB\-\-acctg\-freq\fR=\fIseconds\fR
+\fB\-\-acctg\-freq\fR=<\fIseconds\fR>
 Define the job accounting sampling interval.
 This can be used to override the \fIJobAcctGatherFrequency\fR parameter in SLURM's
 configuration file, \fIslurm.conf\fR.
@@ -35,7 +33,7 @@ A value of zero disables real the periodic job sampling and provides accounting
 information only on job termination (reducing SLURM interference with the job).
 
 .TP
-\fB\-B\fR \fB\-\-extra\-node\-info\fR=\fIsockets\fR[:\fIcores\fR[:\fIthreads\fR]]
+\fB\-B\fR \fB\-\-extra\-node\-info\fR=<\fIsockets\fR[:\fIcores\fR[:\fIthreads\fR]]>
 Request a specific allocation of resources with details as to the
 number and type of computational resources within a cluster:
 number of sockets (or physical processors) per node,
@@ -48,9 +46,9 @@ resources of that type are to be utilized.
 As with nodes, the individual levels can also be specified in separate
 options if desired:
 .nf
-    \fB\-\-sockets\-per\-node\fR=\fIsockets\fR
-    \fB\-\-cores\-per\-socket\fR=\fIcores\fR
-    \fB\-\-threads\-per\-core\fR=\fIthreads\fR
+    \fB\-\-sockets\-per\-node\fR=<\fIsockets\fR>
+    \fB\-\-cores\-per\-socket\fR=<\fIcores\fR>
+    \fB\-\-threads\-per\-core\fR=<\fIthreads\fR>
 .fi
 When the task/affinity plugin is enabled,
 specifying an allocation in this manner also instructs SLURM to use
@@ -63,7 +61,7 @@ If select/cons_res is configured, it must have a parameter of CR_Core,
 CR_Core_Memory, CR_Socket, or CR_Socket_Memory. 
 
 .TP
-\fB\-\-begin\fR[=]<\fItime\fR>
+\fB\-\-begin\fR=<\fItime\fR>
 Submit the batch script to the SLURM controller immediately, like normal, but
 tell the controller to defer the allocation of the job until the specified time.
 
@@ -75,16 +73,24 @@ You may also specify \fImidnight\fR, \fInoon\fR, or
 with \fIAM\fR or \fIPM\fR for running in the morning or the evening.
 You can also say what day the job will be run, by specifying
 a date of the form \fIMMDDYY\fR or \fIMM/DD/YY\fR
-or \fIMM.DD.YY\fR. You can also
+\fIYYYY-MM-DD\fR. Combine date and time using the following
+format \fIYYYY\-MM\-DD[THH[:MM[:SS]]]\fR. You can also
 give times like \fInow + count time\-units\fR, where the time\-units
-can be \fIminutes\fR, \fIhours\fR, \fIdays\fR, or \fIweeks\fR
-and you can tell SLURM to run the job today with the keyword
-\fItoday\fR and to run the job tomorrow with the keyword
-\fItomorrow\fR.
+can be \fIseconds\fR (default), \fIminutes\fR, \fIhours\fR,
+\fIdays\fR, or \fIweeks\fR and you can tell SLURM to run
+the job today with the keyword \fItoday\fR and to run the
+job tomorrow with the keyword \fItomorrow\fR.
 The value may be changed after job submission using the
 \fBscontrol\fR command.
+For example:
+.nf
+   \-\-begin=16:00
+   \-\-begin=now+1hour
+   \-\-begin=now+60           (seconds by default)
+   \-\-begin=2010-01-20T12:34:00
+.fi
 
-.TP 
+.TP
 \fB\-\-bell\fR
 Force salloc to ring the terminal bell when the job allocation is granted
 (and only if stdout is a tty).  By default, salloc only rings the bell
@@ -92,7 +98,11 @@ if the allocation is pending for more than ten seconds (and only if stdout
 is a tty). Also see the option \fB\-\-no\-bell\fR.
 
 .TP
-\fB\-C\fR, \fB\-\-constraint\fR[=]<\fIlist\fR>
+\fB\-\-comment\fR=<\fIstring\fR>
+An arbitrary comment.
+
+.TP
+\fB\-C\fR, \fB\-\-constraint\fR=<\fIlist\fR>
 Specify a list of constraints. 
 The constraints are features that have been assigned to the nodes by 
 the slurm administrator. 
@@ -107,7 +117,7 @@ There is no mechanism to specify that you want one node with feature
 node has both features.
 If only one of a set of possible options should be used for all allocated 
 nodes, then use the OR operator and enclose the options within square brackets. 
-For example: "\fB\-\-constraint="[rack1|rack2|rack3|rack4]"\fR might 
+For example: "\fB\-\-constraint=[rack1|rack2|rack3|rack4]"\fR might 
 be used to specify that all nodes must be allocated on a single rack of 
 the cluster, but any of those four racks can be used.
 A request can also specify the number of nodes needed with some feature
@@ -120,16 +130,117 @@ If no nodes have the requested features, then the job will be rejected
 by the slurm job manager.
 
 .TP
-\fB\-\-comment\fR=<\fIstring\fR>
-An arbitrary comment.
+\fB\-\-contiguous\fR
+If set, then the allocated nodes must form a contiguous set.
+Not honored with the \fBtopology/tree\fR or \fBtopology/3d_torus\fR
+plugins, both of which can modify the node ordering.
+
+.TP
+\fB\-\-cpu_bind\fR=[{\fIquiet,verbose\fR},]\fItype\fR
+Bind tasks to CPUs. Used only when the task/affinity plugin is enabled.
+The configuration parameter \fBTaskPluginParam\fR may override these options.
+For example, if \fBTaskPluginParam\fR is configured to bind to cores,
+your job will not be able to bind tasks to sockets.
+NOTE: To have SLURM always report on the selected CPU binding for all
+commands executed in a shell, you can enable verbose mode by setting
+the SLURM_CPU_BIND environment variable value to "verbose".
+
+The following informational environment variables are set when \fB\-\-cpu_bind\fR
+is in use:
+.nf
+        SLURM_CPU_BIND_VERBOSE
+        SLURM_CPU_BIND_TYPE
+        SLURM_CPU_BIND_LIST
+.fi
 
+See the \fBENVIRONMENT VARIABLE\fR section for a more detailed description
+of the individual SLURM_CPU_BIND* variables.
+
+When using \fB\-\-cpus\-per\-task\fR to run multithreaded tasks, be aware that
+CPU binding is inherited from the parent of the process.  This means that
+the multithreaded task should either specify or clear the CPU binding
+itself to avoid having all threads of the multithreaded task use the same
+mask/CPU as the parent.  Alternatively, fat masks (masks which specify more
+than one allowed CPU) could be used for the tasks in order to provide
+multiple CPUs for the multithreaded tasks.
+
+By default, a job step has access to every CPU allocated to the job.
+To ensure that distinct CPUs are allocated to each job step, us the
+\fB\-\-exclusive\fR option.
+
+If the job step allocation includes an allocation with a number of
+sockets, cores, or threads equal to the number of tasks to be started
+then the tasks will by default be bound to the appropriate resources.
+Disable this mode of operation by explicitly setting "-\-cpu\-bind=none".
+
+Note that a job step can be allocated different numbers of CPUs on each node
+or be allocated CPUs not starting at location zero. Therefore one of the
+options which automatically generate the task binding is recommended.
+Explicitly specified masks or bindings are only honored when the job step
+has been allocated every available CPU on the node.
+
+Binding a task to a NUMA locality domain means to bind the task to the set of
+CPUs that belong to the NUMA locality domain or "NUMA node".
+If NUMA locality domain options are used on systems with no NUMA support, then
+each socket is considered a locality domain.
+
+Supported options include:
+.PD 1
+.RS
 .TP
-\fB\-\-contiguous\fR
-Demand a contiguous range of nodes. The default is "yes". Specify
-\-\-contiguous=no if a contiguous range of nodes is not required.
+.B q[uiet]
+Quietly bind before task runs (default)
+.TP
+.B v[erbose]
+Verbosely report binding before task runs
+.TP
+.B no[ne]
+Do not bind tasks to CPUs (default)
+.TP
+.B rank
+Automatically bind by task rank.
+Task zero is bound to socket (or core or thread) zero, etc.
+Not supported unless the entire node is allocated to the job.
+.TP
+.B map_cpu:<list>
+Bind by mapping CPU IDs to tasks as specified
+where <list> is <cpuid1>,<cpuid2>,...<cpuidN>.
+CPU IDs are interpreted as decimal values unless they are preceded
+with '0x' in which case they are interpreted as hexadecimal values.
+Not supported unless the entire node is allocated to the job.
+.TP
+.B mask_cpu:<list>
+Bind by setting CPU masks on tasks as specified
+where <list> is <mask1>,<mask2>,...<maskN>.
+CPU masks are \fBalways\fR interpreted as hexadecimal values but can be
+preceded with an optional '0x'.
+.TP
+.B sockets
+Automatically generate masks binding tasks to sockets.
+If the number of tasks differs from the number of allocated sockets
+this can result in sub\-optimal binding.
+.TP
+.B cores
+Automatically generate masks binding tasks to cores.
+If the number of tasks differs from the number of allocated cores
+this can result in sub\-optimal binding.
+.TP
+.B threads
+Automatically generate masks binding tasks to threads.
+If the number of tasks differs from the number of allocated threads
+this can result in sub\-optimal binding.
+.TP
+.B ldoms
+Automatically generate masks binding tasks to NUMA locality domains.
+If the number of tasks differs from the number of allocated locality domains
+this can result in sub\-optimal binding.
+.TP
+.B help
+Show this help message
+.RE
 
-.TP 
-\fB\-c\fR, \fB\-\-cpus\-per\-task\fR[=]<\fIncpus\fR>
+.TP
+\fB\-c\fR, \fB\-\-cpus\-per\-task\fR=<\fIncpus\fR>
 Advise the SLURM controller that ensuing job steps will require \fIncpus\fR 
 number of processors per task.  Without this option, the controller will
 just try to allocate one processor per task.
@@ -143,8 +254,8 @@ the \-\-cpus\-per\-task=3 options, the controller knows that each task requires
 of 4 nodes, one for each of the 4 tasks.
 
 .TP
-\fB\-D\fR, \fB\-\-chdir\fR=\fIpath\fR
-change directory to \fIpath\fR before beginning execution. 
+\fB\-D\fR, \fB\-\-chdir\fR=<\fIpath\fR>
+change directory to \fIpath\fR before beginning execution.
 
 .TP
 \fB\-\-exclusive\fR
@@ -153,48 +264,48 @@ the oposite of \-\-share, whichever option is seen last on the command line
 will win.  (The default shared/exclusive behaviour depends on system
 configuration.)
 
-.TP 
-\fB\-F\fR, \fB\-\-nodefile\fR[=]<\fInode file\fR>
+.TP
+\fB\-F\fR, \fB\-\-nodefile\fR=<\fInode file\fR>
 Much like \-\-nodelist, but the list is contained in a file of name
 \fInode file\fR.  The node names of the list may also span multiple lines
 in the file.    Duplicate node names in the file will be ignored.
 The order of the node names in the list is not important; the node names
-will be sorted my SLURM.
+will be sorted by SLURM.
 
 .TP
 \fB\-\-get\-user\-env\fR[=\fItimeout\fR][\fImode\fR]
-This option will load login environment variables for the user specified 
+This option will load login environment variables for the user specified
 in the \fB\-\-uid\fR option.
 The environment variables are retrieved by running something of this sort
-"su \- <username> \-c /usr/bin/env" and parsing the output.  
-Be aware that any environment variables already set in salloc's environment 
-will take precedence over any environment variables in the user's 
+"su \- <username> \-c /usr/bin/env" and parsing the output.
+Be aware that any environment variables already set in salloc's environment
+will take precedence over any environment variables in the user's
 login environment.
 The optional \fItimeout\fR value is in seconds. Default value is 3 seconds.
 The optional \fImode\fR value control the "su" options.
 With a \fImode\fR value of "S", "su" is executed without the "\-" option.
 With a \fImode\fR value of "L", "su" is executed with the "\-" option,
 replicating the login environment.
-If \fImode\fR not specified, the mode established at SLURM build time 
+If \fImode\fR not specified, the mode established at SLURM build time
 is used.
 Example of use include "\-\-get\-user\-env", "\-\-get\-user\-env=10"
 "\-\-get\-user\-env=10L", and "\-\-get\-user\-env=S".
 NOTE: This option only works if the caller has an
-effective uid of "root".  
+effective uid of "root".
 This option was originally created for use by Moab.
 
 .TP
-\fB\-\-gid\fR[=]<\fIgroup\fR>
+\fB\-\-gid\fR=<\fIgroup\fR>
 If \fBsalloc\fR is run as root, and the \fB\-\-gid\fR option is used, 
 submit the job with \fIgroup\fR's group access permissions.  \fIgroup\fR 
 may be the group name or the numerical group ID.
 
-.TP 
+.TP
 \fB\-h\fR, \fB\-\-help\fR
 Display help information and exit.
 
 .TP
-\fB\-\-hint\fR=\fItype\fR
+\fB\-\-hint\fR=<\fItype\fR>
 Bind tasks according to application hints
 .RS
 .TP
@@ -209,28 +320,29 @@ use only one core in each physical CPU
 .B [no]multithread
 [don't] use extra threads with in-core multi-threading
 which can benefit communication intensive applications
+.TP
 .B help
 show this help message
 .RE
 
-.TP 
-\fB\-I\fR,\fB\-\-immediate\fR
-Grab the requested resources immediately, or abort if the resources are not
-currently available.  The \fIcommand\fR parameter will not be run if the resources
-are not available.
+.TP
+\fB\-I\fR, \fB\-\-immediate\fR
+Grab the requested resources immediately, or abort if the resources
+are not currently available.  The \fIcommand\fR parameter will not be
+run if the resources are not available.
 
 .TP
-\fB\-J\fR, \fB\-\-job\-name\fR[=]<\fIjobname\fR>
+\fB\-J\fR, \fB\-\-job\-name\fR=<\fIjobname\fR>
 Specify a name for the job allocation. The specified name will appear along with
 the job id number when querying running jobs on the system.  The default job
 name is the name of the "command" specified on the command line.
 
 .TP
 \fB\-\-jobid\fR=<\fIjobid\fR>
-Allocate resources as the specified job id. 
+Allocate resources as the specified job id.
 NOTE: Only valid for user root.
 
-.TP 
+.TP
 \fB\-K\fR, \fB\-\-kill\-command\fR[=\fIsignal\fR]
 salloc always runs a user\-specified command once the allocation is
 granted.  salloc will wait indefinitely for that command to exit.
@@ -243,7 +355,7 @@ name or number, the default signal is SIGTERM.
 
 .TP
 \fB\-k\fR, \fB\-\-no\-kill\fR
-Do not automatically terminate a job of one of the nodes it has been 
+Do not automatically terminate a job of one of the nodes it has been
 allocated fails.  The user will assume the responsibilities for fault\-tolerance
 should a node fail.  When there is a node failure, any active job steps (usually
 MPI jobs) on that node will almost certainly suffer a fatal error, but with
@@ -254,7 +366,7 @@ By default SLURM terminates the entire job allocation if any node fails in its
 range of allocated nodes.
 
 .TP
-\fB\-L\fR, \fB\-\-licenses\fR=
+\fB\-L\fR, \fB\-\-licenses\fR=<\fBlicense\fR>
 Specification of licenses (or other resources available on all 
 nodes of the cluster) which must be allocated to this job.
 License names can be followed by an asterisk and count 
@@ -264,8 +376,10 @@ Multiple license names should be comma separated (e.g.
 
 .TP
 \fB\-m\fR, \fB\-\-distribution\fR=
-(\fIblock\fR|\fIcyclic\fR|\fIarbitrary\fR|\fIplane=<options>\fR)
-Specify an alternate distribution method for remote processes.
+<\fIblock\fR|\fIcyclic\fR|\fIarbitrary\fR|\fIplane=<options>\fR>
+Specify an alternate distribution method for remote processes.  In
+salloc this only sets environment variables that will be used by
+subsequent srun requests.
 .RS
 .TP
 .B block
@@ -291,12 +405,12 @@ The options include a number representing the size of the task block.
 This is followed by an optional specification of the task distribution 
 scheme within a block of tasks and between the blocks of tasks.
 For more details (including examples and diagrams), please see
-.na
-.nh
-https://computing.llnl.gov/linux/slurm/mc_support.html and
+.br
+https://computing.llnl.gov/linux/slurm/mc_support.html
+.br
+and
+.br
 https://computing.llnl.gov/linux/slurm/dist_plane.html.
-.hy
-.ad
 .TP
 .B arbitrary
 The arbitrary method of distribution will allocate processes in\-order as 
@@ -308,19 +422,19 @@ contain at minimum the number of hosts requested.  If requesting tasks
 .RE
 
 .TP
-\fB\-\-mail\-type\fR=\fItype\fR
+\fB\-\-mail\-type\fR=<\fItype\fR>
 Notify user by email when certain event types occur. 
 Valid \fItype\fR values are BEGIN, END, FAIL, ALL (any state change). 
 The user to be notified is indicated with \fB\-\-mail\-user\fR. 
 
 .TP
-\fB\-\-mail\-user\fR=\fIuser\fR
+\fB\-\-mail\-user\fR=<\fIuser\fR>
 User to receive email notification of state changes as defined by 
 \fB\-\-mail\-type\fR.
-The default value is the username of the submitting user.
+The default value is the submitting user.
 
 .TP
-\fB\-\-mem\fR[=]<\fIMB\fR>
+\fB\-\-mem\fR=<\fIMB\fR>
 Specify the real memory required per node in MegaBytes.
 Default value is \fBDefMemPerNode\fR and the maximum value is
 \fBMaxMemPerNode\fR. If configured, both of parameters can be
@@ -331,7 +445,7 @@ Also see \fB\-\-mem\-per\-cpu\fR.
 \fB\-\-mem\fR and \fB\-\-mem\-per\-cpu\fR are mutually exclusive.
 
 .TP
-\fB\-\-mem\-per\-cpu\fR[=]<\fIMB\fR>
+\fB\-\-mem\-per\-cpu\fR=<\fIMB\fR>
 Mimimum memory required per allocated CPU in MegaBytes.
 Default value is \fBDefMemPerCPU\fR and the maximum value is
 \fBMaxMemPerCPU\fR. If configured, both of parameters can be 
@@ -342,34 +456,95 @@ Also see \fB\-\-mem\fR.
 \fB\-\-mem\fR and \fB\-\-mem\-per\-cpu\fR are mutually exclusive.
 
 .TP
-\fB\-\-mincores\fR[=]<\fIn\fR>
+\fB\-\-mem_bind\fR=[{\fIquiet,verbose\fR},]\fItype\fR
+Bind tasks to memory. Used only when the task/affinity plugin is enabled 
+and the NUMA memory functions are available.
+\fBNote that the resolution of CPU and memory binding 
+may differ on some architectures.\fR For example, CPU binding may be performed 
+at the level of the cores within a processor while memory binding will 
+be performed at the level of nodes, where the definition of "nodes" 
+may differ from system to system. \fBThe use of any type other than 
+"none" or "local" is not recommended.\fR
+If you want greater control, try running a simple test code with the 
+options "\-\-cpu_bind=verbose,none \-\-mem_bind=verbose,none" to determine 
+the specific configuration.
+
+NOTE: To have SLURM always report on the selected memory binding for
+all commands executed in a shell, you can enable verbose mode by
+setting the SLURM_MEM_BIND environment variable value to "verbose".
+
+The following informational environment variables are set when \fB\-\-mem_bind\
+is in use:
+
+.nf
+        SLURM_MEM_BIND_VERBOSE
+        SLURM_MEM_BIND_TYPE
+        SLURM_MEM_BIND_LIST
+.fi
+
+See the \fBENVIRONMENT VARIABLES\fR section for a more detailed description
+of the individual SLURM_MEM_BIND* variables.
+
+Supported options include:
+.RS
+.TP
+.B q[uiet]
+quietly bind before task runs (default)
+.TP
+.B v[erbose]
+verbosely report binding before task runs
+.TP
+.B no[ne]
+don't bind tasks to memory (default)
+.TP
+.B rank
+bind by task rank (not recommended)
+.TP
+.B local
+Use memory local to the processor in use
+.TP
+.B map_mem:<list>
+bind by mapping a node's memory to tasks as specified
+where <list> is <cpuid1>,<cpuid2>,...<cpuidN>.
+CPU IDs are interpreted as decimal values unless they are preceded
+with '0x' in which case they interpreted as hexadecimal values
+(not recommended)
+.TP
+.B mask_mem:<list>
+bind by setting memory masks on tasks as specified
+where <list> is <mask1>,<mask2>,...<maskN>.
+memory masks are \fBalways\fR interpreted as hexadecimal values.
+Note that masks must be preceded with a '0x' if they don't begin
+with [0-9] so they are seen as numerical values by srun.
+.TP
+.B help
+show this help message
+.RE
+
+.TP
+\fB\-\-mincores\fR=<\fIn\fR>
 Specify a minimum number of cores per socket.
 
 .TP
-\fB\-\-mincpus\fR[=]<\fIn\fR>
-Specify minimum number of cpus per node.
+\fB\-\-mincpus\fR=<\fIn\fR>
+Specify a minimum number of logical cpus/processors per node.
 
 .TP
-\fB\-\-minsockets\fR[=]<\fIn\fR>
+\fB\-\-minsockets\fR=<\fIn\fR>
 Specify a minimum number of sockets (physical processors) per node.
 
 .TP
-\fB\-\-minthreads\fR[=]<\fIn\fR>
+\fB\-\-minthreads\fR=<\fIn\fR>
 Specify a minimum number of threads per core.
 
-.TP 
-\fB\-N\fR, \fB\-\-nodes\fR[=]<\fInumber|[min]\-[max]\fR>
-Specify the number of nodes to be used by this job step.  This option accepts
-either a single number, or a range of possible node counts.  If a single
-number is used, such as "\-N 4", then the allocation is asking for four and
-ONLY four nodes.  If a range is specified, such as "\-N 2\-6", the SLURM
-controller may grant salloc anywhere from 2 to 6 nodes.  When using a range,
-either of the min or max options may be omitted.  For instance, "\-N 10\-"
-means "no fewer than 10 nodes", and "\-N \-20" means "no more than 20 nodes".
-The default value of this option is one node, but other options implicitly
-increase the default node count. 
-The job will be allocated as many nodes as possible within the range specified 
-and without delaying the initiation of the job.
+.TP
+\fB\-N\fR, \fB\-\-nodes\fR=<\fIminnodes\fR[\-\fImaxnodes\fR]>
+Request that a minimum of \fIminnodes\fR nodes be allocated to this job.
+The scheduler may decide to launch the job on more than \fIminnodes\fR nodes.
+A limit on the maximum node count may be specified with \fImaxnodes\fR
+(e.g. "\-\-nodes=2\-4").  The minimum and maximum node count may be the
+same to specify a specific number of nodes (e.g. "\-\-nodes=2\-2" will ask
+for two and ONLY two nodes).
 The partition's node limits supersede those of the job. 
 If a job's node limits are outside of the range permitted for its 
 associated partition, the job will be left in a PENDING state. 
@@ -377,9 +552,17 @@ This permits possible execution at a later time, when the partition
 limit is changed.
 If a job node limit exceeds the number of nodes configured in the 
 partition, the job will be rejected.
+Note that the environment 
+variable \fBSLURM_NNODES\fR will be set to the count of nodes actually 
+allocated to the job. See the \fBENVIRONMENT VARIABLES \fR section 
+for more information.  If \fB\-N\fR is not specified, the default
+behavior is to allocate enough nodes to satisfy the requirements of
+the \fB\-n\fR and \fB\-c\fR options.
+The job will be allocated as many nodes as possible within the range specified
+and without delaying the initiation of the job.
 
 .TP
-\fB\-n\fR, \fB\-\-ntasks\fR[=]<\fInumber\fR>
+\fB\-n\fR, \fB\-\-ntasks\fR=<\fInumber\fR>
 salloc does not launch tasks, it requests an allocation of resources and 
 executed some command. This option advises the SLURM controller that job 
 steps run within this allocation will launch a maximum of \fInumber\fR
@@ -389,23 +572,23 @@ of the \fISelectTypeParameters\fR parameter in slurm.conf), but note
 that the \fB\-\-cpus\-per\-task\fR option will change this default.
 
 .TP
-\fB\-\-network\fR=\fItype\fR
+\fB\-\-network\fR=<\fItype\fR>
 Specify the communication protocol to be used. 
 This option is supported on AIX systems.
 Since POE is used to launch tasks, this option is not normally used or 
 is specified using the \fBSLURM_NETWORK\fR environment variable.
-The interpretation of \fItype\fR is system dependent. 
+The interpretation of \fItype\fR is system dependent.
 For systems with an IBM Federation switch, the following 
-comma\-separated and case insensitive types are recongnized:
+comma\-separated and case insensitive types are recognized:
 \fBIP\fR (the default is user\-space), \fBSN_ALL\fR, \fBSN_SINGLE\fR, 
 \fBBULK_XFER\fR and adapter names  (e.g. \fBSNI0\fR and \fBSNI1\fR). 
-For more information, on IBM systems see \fIpoe\fR documenation on 
+For more information, on IBM systems see \fIpoe\fR documentation on
 the environment variables \fBMP_EUIDEVICE\fR and \fBMP_USE_BULK_XFER\fR.
 Note that only four jobs steps may be active at once on a node with the 
 \fBBULK_XFER\fR option due to limitations in the Federation switch driver.
 
-.TP 
-\fB\-\-nice\fR[=]<\fIadjustment\fR>
+.TP
+\fB\-\-nice\fR[=\fIadjustment\fR]
 Run the job with an adjusted scheduling priority within SLURM.
 With no adjustment value the scheduling priority is decreased
 by 100. The adjustment range is from \-10000 (highest priority)
@@ -415,27 +598,29 @@ ignored if \fISchedulerType=sched/wiki\fR or
 \fISchedulerType=sched/wiki2\fR.
 
 .TP
-\fB\-\-ntasks\-per\-core\fR=\fIntasks\fR
+\fB\-\-ntasks\-per\-core\fR=<\fIntasks\fR>
 Request that no more than \fIntasks\fR be invoked on each core.
 Similar to \fB\-\-ntasks\-per\-node\fR except at the core level
 instead of the node level.  Masks will automatically be generated
 to bind the tasks to specific core unless \fB\-\-cpu_bind=none\fR
 is specified.
-NOTE: This option is not supported unless \fISelectType=CR_Core\fR
-or \fISelectType=CR_Core_Memory\fR is configured.
+NOTE: This option is not supported unless
+\fISelectTypeParameters=CR_Core\fR or
+\fISelectTypeParameters=CR_Core_Memory\fR is configured.
 
 .TP
-\fB\-\-ntasks\-per\-socket\fR=\fIntasks\fR
+\fB\-\-ntasks\-per\-socket\fR=<\fIntasks\fR>
 Request that no more than \fIntasks\fR be invoked on each socket.
 Similar to \fB\-\-ntasks\-per\-node\fR except at the socket level
 instead of the node level.  Masks will automatically be generated
 to bind the tasks to specific sockets unless \fB\-\-cpu_bind=none\fR
 is specified.
-NOTE: This option is not supported unless \fISelectType=CR_Socket\fR 
-or \fISelectType=CR_Socket_Memory\fR is configured.
+NOTE: This option is not supported unless
+\fISelectTypeParameters=CR_Socket\fR or
+\fISelectTypeParameters=CR_Socket_Memory\fR is configured.
 
 .TP
-\fB\-\-ntasks\-per\-node\fR=\fIntasks\fR
+\fB\-\-ntasks\-per\-node\fR=<\fIntasks\fR>
 Request that no more than \fIntasks\fR be invoked on each node.
 This is similar to using \fB\-\-cpus\-per\-task\fR=\fIncpus\fR
 but does not require knowledge of the actual number of cpus on
@@ -445,10 +630,10 @@ on each node.  Examples of this include submitting
 a hybrid MPI/OpenMP app where only one MPI "task/rank" should be
 assigned to each node while allowing the OpenMP portion to utilize
 all of the parallelism present in the node, or submitting a single
-setup/cleanup/monitoring job to each node of a pre\-existing  
+setup/cleanup/monitoring job to each node of a pre\-existing
 allocation as one step in a larger job script.
 
-.TP 
+.TP
 \fB\-\-no\-bell\fR
 Silence salloc's use of the terminal bell. Also see the option \fB\-\-bell\fR.
 
@@ -459,19 +644,13 @@ shell when used with the \fB\-A\fR, \fB\-\-allocate\fR option.
 
 .TP
 \fB\-O\fR, \fB\-\-overcommit\fR
-Overcommit resources. Normally, \fBsbatch\fR will allocate one cpu per
-task to be executed. By specifying \fB\-\-overcommit\fR you are explicitly
-allowing more than one process per cpu. However no more than
+Overcommit resources.  Normally, \fBsalloc\fR will allocate one task
+per processor.  By specifying \fB\-\-overcommit\fR you are explicitly
+allowing more than one task per processor.  However no more than
 \fBMAX_TASKS_PER_NODE\fR tasks are permitted to execute per node.
 
-.TP 
-\fB\-p\fR, \fB\-\-partition\fR[=]<\fIpartition name\fR>
-Request a specific partition for the resource allocation.  If not specified,
-the default behaviour is to allow the slurm controller to select the default
-partition as designated by the system administrator.
-
-.TP 
-\fB\-P\fR, \fB\-\-dependency\fR[=]<\fIdependency_list\fR>
+.TP
+\fB\-P\fR, \fB\-\-dependency\fR=<\fIdependency_list\fR>
 Defer the start of this job until the specified dependencies have been
 satisfied completed.
 <\fIdependency_list\fR> is of the form 
@@ -503,9 +682,19 @@ job name and user have terminated.
 .RE
 
 .TP
-\fB\-q\fR, \fB\-\-quiet\fR
+\fB\-p\fR, \fB\-\-partition\fR=<\fIpartition name\fR>
+Request a specific partition for the resource allocation.  If not specified,
+the default behaviour is to allow the slurm controller to select the default
+partition as designated by the system administrator.
+
+.TP
+\fB\-Q\fR, \fB\-\-quiet\fR
 Suppress informational messages from salloc. Errors will still be displayed.
 
+.TP
+\fB\-\-reservation\fR=<\fIname\fR>
+Allocate resources for the job from the named reservation.
+
 .TP
 \fB\-s\fR, \fB\-\-share\fR
 The job allocation can share nodes with other running jobs.  (The default
@@ -515,35 +704,35 @@ option was not set and allow higher system utilization, but application
 performance will likely suffer due to competition for resources within a node.
 
 .TP
-\fB\-t\fR, \fB\-\-time\fR=\fItime\fR
-Set a limit on the total run time of the job allocation.
-If the requested time limit exceeds the partition's time limit, the 
-job will be left in a PENDING state (possibly indefinitely).  The default
-time limit is the partition's time limit.  When the time limit is reached,
+\fB\-t\fR, \fB\-\-time\fR=<\fItime\fR>
+Set a limit on the total run time of the job allocation.  If the
+requested time limit exceeds the partition's time limit, the job will
+be left in a PENDING state (possibly indefinitely).  The default time
+limit is the partition's time limit.  When the time limit is reached,
 the each task in each job step is sent SIGTERM followed by SIGKILL. The
-interval between signals is specified by the SLURM configuration parameter
-\fBKillWait\fR.  A time limit of zero represents unlimited time.
-Acceptable time formats include "minutes", "minutes:seconds", 
-"hours:minutes:seconds", "days\-hours", "days\-hours:minutes" and 
-"days\-hours:minutes:seconds".
+interval between signals is specified by the SLURM configuration
+parameter \fBKillWait\fR.  A time limit of zero requests that no time
+limit be imposed.  Acceptable time formats include "minutes",
+"minutes:seconds", "hours:minutes:seconds", "days\-hours",
+"days\-hours:minutes" and "days\-hours:minutes:seconds".
 
 .TP
-\fB\-\-tmp\fR[=]<\fIMB\fR>
+\fB\-\-tmp\fR=<\fIMB\fR>
 Specify a minimum amount of temporary disk space.
 
 .TP
-\fB\-U\fR, \fB\-\-account\fR[=]<\fIaccount\fR>
+\fB\-U\fR, \fB\-\-account\fR=<\fIaccount\fR>
 Change resource use by this job to specified account.
-The \fIaccount\fR is an arbitrary string. The account name may 
-be changed after job submission using the \fBscontrol\fR 
+The \fIaccount\fR is an arbitrary string. The account name may
+be changed after job submission using the \fBscontrol\fR
 command.
 
 .TP
 \fB\-u\fR, \fB\-\-usage\fR
-Display brief usage message and exit.
+Display brief help message and exit.
 
 .TP
-\fB\-\-uid\fR[=]<\fIuser\fR>
+\fB\-\-uid\fR=<\fIuser\fR>
 Attempt to submit and/or run a job as \fIuser\fR instead of the
 invoking user id. The invoking user's credentials will be used
 to check access permissions for the target partition. User root
@@ -553,16 +742,17 @@ its permissions to the uid specified after node allocation is
 successful. \fIuser\fR may be the user name or numerical user ID.
 
 .TP
-\fB\-v\fR, \fB\-\-verbose\fR
-Increase the verbosity of salloc's informational messages.  Multiple \-v's
-will further increase salloc's verbosity.
-
-.TP 
 \fB\-V\fR, \fB\-\-version\fR
 Display version information and exit.
 
-.TP 
-\fB\-W\fR, \fB\-\-wait\fR[=]<\fIseconds\fR>
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+Increase the verbosity of salloc's informational messages.  Multiple
+\fB\-v\fR's will further increase salloc's verbosity.  By default only
+errors will be displayed.
+
+.TP
+\fB\-W\fR, \fB\-\-wait\fR=<\fIseconds\fR>
 If the resources needed to satisy a job allocation are not immediately
 available, the job allocation is enqueued and is said to be PENDING.  This
 option tells salloc how long (in seconds) to wait for the allocation to be
@@ -570,40 +760,39 @@ granted before giving up.  When the wait limit has been reached, salloc
 will exit without running the \fIcommand\fR parameter.  By default, salloc
 will wait indefinitely.  (The \-\-immediate option makes \-\-wait moot.)
 
-.TP 
-\fB\-w\fR, \fB\-\-nodelist\fR[=]<\fInode name list\fR>
+.TP
+\fB\-w\fR, \fB\-\-nodelist\fR=<\fInode name list\fR>
 Request a specific list of node names.  The list may be specified as a
 comma\-separated list of node names, or a range of node names
 (e.g. mynode[1\-5,7,...]).  Duplicate node names in the list will be ignored.
 The order of the node names in the list is not important; the node names
-will be sorted my SLURM.
+will be sorted by SLURM.
 
 .TP
-\fB\-\-wckey\fR=\fIwckey\fR
+\fB\-\-wckey\fR=<\fIwckey\fR>
 Specify wckey to be used with job.  If TrackWCKey=no (default) in the
-slurm.conf this value does not get looked at. 
+slurm.conf this value is ignored.
 
 .TP
-\fB\-x\fR, \fB\-\-exclude\fR[=]<\fInode name list\fR>
+\fB\-x\fR, \fB\-\-exclude\fR=<\fInode name list\fR>
 Explicitly exclude certain nodes from the resources granted to the job.
 
-
 .PP
-The following options support Blue Gene systems, but may be 
+The following options support Blue Gene systems, but may be
 applicable to other systems as well.
 
 .TP
-\fB\-\-blrts\-image\fR[=]<\fIpath\fR>
+\fB\-\-blrts\-image\fR=<\fIpath\fR>
 Path to blrts image for bluegene block.  BGL only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-cnload\-image\fR=\fIpath\fR
+\fB\-\-cnload\-image\fR=<\fIpath\fR>
 Path to compute node image for bluegene block.  BGP only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-conn\-type\fR[=]<\fItype\fR>
+\fB\-\-conn\-type\fR=<\fItype\fR>
 Require the partition connection type to be of a certain type.  
 On Blue Gene the acceptable of \fItype\fR are MESH, TORUS and NAV.  
 If NAV, or if not set, then SLURM will try to fit a TORUS else MESH.
@@ -614,7 +803,7 @@ midplane and below).  You can use HTC_S for SMP, HTC_D for Dual, HTC_V
 for virtual node mode, and HTC_L for Linux mode.
 
 .TP
-\fB\-g\fR, \fB\-\-geometry\fR[=]<\fIXxYxZ\fR>
+\fB\-g\fR, \fB\-\-geometry\fR=<\fIXxYxZ\fR>
 Specify the geometry requirements for the job. The three numbers 
 represent the required geometry giving dimensions in the X, Y and 
 Z directions. For example "\-\-geometry=2x3x4", specifies a block 
@@ -622,17 +811,17 @@ of nodes having 2 x 3 x 4 = 24 nodes (actually base partitions on
 Blue Gene).
 
 .TP
-\fB\-\-ioload\-image\fR=\fIpath\fR
+\fB\-\-ioload\-image\fR=<\fIpath\fR>
 Path to io image for bluegene block.  BGP only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-linux\-image\fR[=]<\fIpath\fR>
+\fB\-\-linux\-image\fR=<\fIpath\fR>
 Path to linux image for bluegene block.  BGL only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-mloader\-image\fR[=]<\fIpath\fR>
+\fB\-\-mloader\-image\fR=<\fIpath\fR>
 Path to mloader image for bluegene block.
 Default from \fIblugene.conf\fR if not set.
 
@@ -643,7 +832,7 @@ appropriate partition.
 By default the specified geometry can rotate in three dimensions.
 
 .TP
-\fB\-\-ramdisk\-image\fR[=]<\fIpath\fR>
+\fB\-\-ramdisk\-image\fR=<\fIpath\fR>
 Path to ramdisk image for bluegene block.  BGL only.
 Default from \fIblugene.conf\fR if not set.
 
@@ -657,60 +846,71 @@ Upon startup, salloc will read and handle the options set in the following
 environment variables.  Note: Command line options always override environment
 variables settings.
 
-.TP 22 
+.TP 22
 \fBSALLOC_ACCOUNT\fR
-Same as \fB\-\-account\fR.
+Same as \fB\-U, \-\-account\fR
 .TP
 \fBSALLOC_ACCTG_FREQ\fR
-Same as \fB\-\-acctg\-freq\fR.
+Same as \fB\-\-acctg\-freq\fR
 .TP
 \fBSALLOC_BELL\fR
-Same as \fB\-\-bell\fR.
+Same as \fB\-\-bell\fR
 .TP
 \fBSALLOC_CONN_TYPE\fR
-Same as \fB\-\-conn\-type\fR.
+Same as \fB\-\-conn\-type\fR
+.TP
+\fBSALLOC_CPU_BIND\fR
+Same as \fB\-\-cpu_bind\fR
 .TP
 \fBSALLOC_DEBUG\fR
-Same as \fB\-v\fR or \fB\-\-verbose\fR.
+Same as \fB\-v, \-\-verbose\fR
 .TP
 \fBSALLOC_EXCLUSIVE\fR
-Same as \fB\-\-exclusive\fR.
+Same as \fB\-\-exclusive\fR
 .TP
 \fBSALLOC_GEOMETRY\fR
-Same as \fB\-g\fR or \fB\-\-geometry\fR.
+Same as \fB\-g, \-\-geometry\fR
 .TP
 \fBSALLOC_IMMEDIATE\fR
-Same as \fB\-I\fR or \fB\-\-immediate\fR.
+Same as \fB\-I, \-\-immediate\fR
 .TP
 \fBSALLOC_JOBID\fR
-Same as \fB\-\-jobid\fR.
+Same as \fB\-\-jobid\fR
+.TP
+\fBSALLOC_MEM_BIND\fR
+Same as \fB\-\-mem_bind\fR
 .TP
 \fBSALLOC_NETWORK\fR
-Same as \fB\-\-network\fR.
+Same as \fB\-\-network\fR
 .TP
 \fBSALLOC_NO_BELL\fR
-Same as \fB\-\-no\-bell\fR.
+Same as \fB\-\-no\-bell\fR
 .TP
 \fBSALLOC_NO_ROTATE\fR
-Same as \fB\-R\fR or \fB\-\-no\-rotate\fR.
+Same as \fB\-R, \-\-no\-rotate\fR
 .TP
-\fBSLURM_OVERCOMMIT\fR
+\fBSALLOC_OVERCOMMIT\fR
 Same as \fB\-O, \-\-overcommit\fR
 .TP
 \fBSALLOC_PARTITION\fR
-Same as \fB\-p\fR or \fB\-\-partition\fR.
+Same as \fB\-p, \-\-partition\fR
 .TP
 \fBSALLOC_TIMELIMIT\fR
-Same as \fB\-t\fR or \fB\-\-time\fR.
+Same as \fB\-t, \-\-time\fR
 .TP
 \fBSALLOC_WAIT\fR
-Same as \fB\-W\fR or \fB\-\-wait\fR.
+Same as \fB\-W, \-\-wait\fR
 
 .SH "OUTPUT ENVIRONMENT VARIABLES"
 .PP
 salloc will set the following environment variables in the environment of
 the executed program:
-
+.TP
+\fBBASIL_RESERVATION_ID\fR
+The reservation ID on Cray systems running ALPS/BASIL only.
+.TP
+\fBSLURM_CPU_BIND\fR
+Set to value of the \-\-cpu_bind\fR option.
 .TP
 \fBSLURM_JOB_ID\fR (and \fBSLURM_JOBID\fR for backwards compatibility)
 The ID of the job allocation.
@@ -729,6 +929,12 @@ List of nodes allocated to the job.
 \fBSLURM_JOB_NUM_NODES\fR (and \fBSLURM_NNODES\fR for backwards compatibility)
 Total number of nodes in the job allocation.
 .TP
+\fBSLURM_MEM_BIND\fR
+Set to value of the \-\-mem_bind\fR option.
+.TP
+\fBSLURM_NTASKS_PER_NODE\fR
+Set to value of the \-\-ntasks\-per\-node\fR option, if specified.
+.TP
 \fBSLURM_TASKS_PER_NODE\fR
 Number of tasks to be initiated on each node. Values are
 comma separated and in the same order as SLURM_NODELIST.
@@ -772,9 +978,9 @@ salloc \-N5 srun \-n10 myprogram
 
 .SH "COPYING"
 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).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/sattach.1 b/doc/man/man1/sattach.1
index a13f1da7d..d4d86707c 100644
--- a/doc/man/man1/sattach.1
+++ b/doc/man/man1/sattach.1
@@ -1,4 +1,4 @@
-.TH "sattach" "1" "SLURM 1.2" "September 2006" "SLURM Commands"
+.TH "sattach" "1" "SLURM 2.0" "September 2006" "SLURM Commands"
 .SH "NAME"
 .LP 
 sattach \- Attach to a SLURM job step.
@@ -69,7 +69,7 @@ sattach \-\-output\-filter 5 65386.15
 .SH "COPYING"
 Copyright (C) 2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/sbatch.1 b/doc/man/man1/sbatch.1
index c58ff0a22..cd6850da9 100644
--- a/doc/man/man1/sbatch.1
+++ b/doc/man/man1/sbatch.1
@@ -1,12 +1,12 @@
-.TH "sbatch" "1" "SLURM 1.3" "July 2008" "SLURM Commands"
+.TH "sbatch" "1" "SLURM 2.0" "May 2009" "SLURM Commands"
+
 .SH "NAME"
-.LP 
 sbatch \- Submit a batch script to SLURM.
+
 .SH "SYNOPSIS"
-.LP 
 sbatch [\fIoptions\fP] \fIscript\fP [\fIargs\fP...]
+
 .SH "DESCRIPTION"
-.LP 
 sbatch submits a batch script to SLURM.  The batch script may be given to
 sbatch through a file name on the command line, or if no file name is specified,
 sbatch will read in a script from standard input. The batch script may contain
@@ -21,10 +21,10 @@ When the job allocation is finally granted for the batch script, SLURM
 runs a single copy of the batch script on the first node in the set of
 allocated nodes.
 .SH "OPTIONS"
-.LP 
+.LP
 
 .TP
-\fB\-\-acctg\-freq\fR=\fIseconds\fR
+\fB\-\-acctg\-freq\fR=<\fIseconds\fR>
 Define the job accounting sampling interval.
 This can be used to override the \fIJobAcctGatherFrequency\fR parameter in SLURM's
 configuration file, \fIslurm.conf\fR.
@@ -32,7 +32,7 @@ A value of zero disables real the periodic job sampling and provides accounting
 information only on job termination (reducing SLURM interference with the job).
 
 .TP
-\fB\-B\fR \fB\-\-extra\-node\-info\fR=\fIsockets\fR[:\fIcores\fR[:\fIthreads\fR]]
+\fB\-B\fR \fB\-\-extra\-node\-info\fR=<\fIsockets\fR[:\fIcores\fR[:\fIthreads\fR]]>
 Request a specific allocation of resources with details as to the
 number and type of computational resources within a cluster:
 number of sockets (or physical processors) per node,
@@ -45,9 +45,9 @@ resources of that type are to be utilized.
 As with nodes, the individual levels can also be specified in separate
 options if desired:
 .nf
-    \fB\-\-sockets\-per\-node\fR=\fIsockets\fR
-    \fB\-\-cores\-per\-socket\fR=\fIcores\fR
-    \fB\-\-threads\-per\-core\fR=\fIthreads\fR
+    \fB\-\-sockets\-per\-node\fR=<\fIsockets\fR>
+    \fB\-\-cores\-per\-socket\fR=<\fIcores\fR>
+    \fB\-\-threads\-per\-core\fR=<\fIthreads\fR>
 .fi
 When the task/affinity plugin is enabled,
 specifying an allocation in this manner also instructs SLURM to use
@@ -60,29 +60,57 @@ If select/cons_res is configured, it must have a parameter of CR_Core,
 CR_Core_Memory, CR_Socket, or CR_Socket_Memory. 
 
 .TP
-\fB\-\-begin\fR[=]<\fItime\fR>
+\fB\-\-begin\fR=<\fItime\fR>
 Submit the batch script to the SLURM controller immediately, like normal, but
 tell the controller to defer the allocation of the job until the specified time.
 
-Time may be of the form \fIHH:MM:SS\fR to run a job at 
+Time may be of the form \fIHH:MM:SS\fR to run a job at
 a specific time of day (seconds are optional).
-(If that time is already past, the next day is assumed.) 
-You may also specify \fImidnight\fR, \fInoon\fR, or 
-\fIteatime\fR (4pm) and you can have a time\-of\-day suffixed 
-with \fIAM\fR or \fIPM\fR for running in the morning or the evening.  
+(If that time is already past, the next day is assumed.)
+You may also specify \fImidnight\fR, \fInoon\fR, or
+\fIteatime\fR (4pm) and you can have a time\-of\-day suffixed
+with \fIAM\fR or \fIPM\fR for running in the morning or the evening.
 You can also say what day the job will be run, by specifying
 a date of the form \fIMMDDYY\fR or \fIMM/DD/YY\fR
-or \fIMM.DD.YY\fR. You can also
+\fIYYYY-MM-DD\fR. Combine date and time using the following
+format \fIYYYY\-MM\-DD[THH[:MM[:SS]]]\fR. You can also
 give times like \fInow + count time\-units\fR, where the time\-units
-can be \fIminutes\fR, \fIhours\fR, \fIdays\fR, or \fIweeks\fR 
-and you can tell SLURM to run the job today with the keyword
-\fItoday\fR and to run the job tomorrow with the keyword
-\fItomorrow\fR.
+can be \fIseconds\fR (default), \fIminutes\fR, \fIhours\fR,
+\fIdays\fR, or \fIweeks\fR and you can tell SLURM to run
+the job today with the keyword \fItoday\fR and to run the
+job tomorrow with the keyword \fItomorrow\fR.
 The value may be changed after job submission using the
 \fBscontrol\fR command.
+For example:
+.nf
+   \-\-begin=16:00
+   \-\-begin=now+1hour
+   \-\-begin=now+60           (seconds by default)
+   \-\-begin=2010-01-20T12:34:00
+.fi
 
 .TP
-\fB\-C\fR, \fB\-\-constraint\fR[=]<\fIlist\fR>
+\fB\-\-checkpoint\fR=<\fItime\fR>
+Specifies the interval between creating checkpoints of the job step. 
+By default, the job step will no checkpoints created.
+Acceptable time formats include "minutes", "minutes:seconds", 
+"hours:minutes:seconds", "days\-hours", "days\-hours:minutes" and 
+"days\-hours:minutes:seconds".
+
+.TP
+\fB\-\-checkpoint\-dir\fR=<\fIdirectory\fR>
+Specifies the directory into which the job or job step's checkpoint should 
+be written (used by the checkpoint/blcrm and checkpoint/xlch plugins only).
+The default value is the current working directory.
+Checkpoint files will be of the form "<job_id>.ckpt" for jobs
+and "<job_id>.<step_id>.ckpt" for job steps.
+
+.TP
+\fB\-\-comment\fR=<\fIstring\fR>
+An arbitrary comment.
+
+.TP
+\fB\-C\fR, \fB\-\-constraint\fR=<\fIlist\fR>
 Specify a list of constraints. 
 The constraints are features that have been assigned to the nodes by 
 the slurm administrator. 
@@ -97,7 +125,7 @@ There is no mechanism to specify that you want one node with feature
 node has both features.
 If only one of a set of possible options should be used for all allocated 
 nodes, then use the OR operator and enclose the options within square brackets. 
-For example: "\fB\-\-constraint="[rack1|rack2|rack3|rack4]"\fR might 
+For example: "\fB\-\-constraint=[rack1|rack2|rack3|rack4]"\fR might 
 be used to specify that all nodes must be allocated on a single rack of 
 the cluster, but any of those four racks can be used.
 A request can also specify the number of nodes needed with some feature
@@ -109,8 +137,118 @@ Constraints with node counts may only be combined with AND operators.
 If no nodes have the requested features, then the job will be rejected 
 by the slurm job manager.
 
-.TP 
-\fB\-c\fR, \fB\-\-cpus\-per\-task\fR[=]<\fIncpus\fR>
+.TP
+\fB\-\-contiguous\fR
+If set, then the allocated nodes must form a contiguous set.
+Not honored with the \fBtopology/tree\fR or \fBtopology/3d_torus\fR
+plugins, both of which can modify the node ordering.
+
+.TP
+\fB\-\-cpu_bind\fR=[{\fIquiet,verbose\fR},]\fItype\fR
+Bind tasks to CPUs. Used only when the task/affinity plugin is enabled.
+The configuration parameter \fBTaskPluginParam\fR may override these options.
+For example, if \fBTaskPluginParam\fR is configured to bind to cores,
+your job will not be able to bind tasks to sockets.
+NOTE: To have SLURM always report on the selected CPU binding for all
+commands executed in a shell, you can enable verbose mode by setting
+the SLURM_CPU_BIND environment variable value to "verbose".
+
+The following informational environment variables are set when \fB\-\-cpu_bind\fR
+is in use:
+.nf
+        SLURM_CPU_BIND_VERBOSE
+        SLURM_CPU_BIND_TYPE
+        SLURM_CPU_BIND_LIST
+.fi
+
+See the \fBENVIRONMENT VARIABLE\fR section for a more detailed description
+of the individual SLURM_CPU_BIND* variables.
+
+When using \fB\-\-cpus\-per\-task\fR to run multithreaded tasks, be aware that
+CPU binding is inherited from the parent of the process.  This means that
+the multithreaded task should either specify or clear the CPU binding
+itself to avoid having all threads of the multithreaded task use the same
+mask/CPU as the parent.  Alternatively, fat masks (masks which specify more
+than one allowed CPU) could be used for the tasks in order to provide
+multiple CPUs for the multithreaded tasks.
+
+By default, a job step has access to every CPU allocated to the job.
+To ensure that distinct CPUs are allocated to each job step, us the
+\fB\-\-exclusive\fR option.
+
+If the job step allocation includes an allocation with a number of
+sockets, cores, or threads equal to the number of tasks to be started
+then the tasks will by default be bound to the appropriate resources.
+Disable this mode of operation by explicitly setting "-\-cpu\-bind=none".
+
+Note that a job step can be allocated different numbers of CPUs on each node
+or be allocated CPUs not starting at location zero. Therefore one of the
+options which automatically generate the task binding is recommended.
+Explicitly specified masks or bindings are only honored when the job step
+has been allocated every available CPU on the node.
+
+Binding a task to a NUMA locality domain means to bind the task to the set of
+CPUs that belong to the NUMA locality domain or "NUMA node".
+If NUMA locality domain options are used on systems with no NUMA support, then
+each socket is considered a locality domain.
+
+Supported options include:
+.PD 1
+.RS
+.TP
+.B q[uiet]
+Quietly bind before task runs (default)
+.TP
+.B v[erbose]
+Verbosely report binding before task runs
+.TP
+.B no[ne]
+Do not bind tasks to CPUs (default)
+.TP
+.B rank
+Automatically bind by task rank.
+Task zero is bound to socket (or core or thread) zero, etc.
+Not supported unless the entire node is allocated to the job.
+.TP
+.B map_cpu:<list>
+Bind by mapping CPU IDs to tasks as specified
+where <list> is <cpuid1>,<cpuid2>,...<cpuidN>.
+CPU IDs are interpreted as decimal values unless they are preceded
+with '0x' in which case they are interpreted as hexadecimal values.
+Not supported unless the entire node is allocated to the job.
+.TP
+.B mask_cpu:<list>
+Bind by setting CPU masks on tasks as specified
+where <list> is <mask1>,<mask2>,...<maskN>.
+CPU masks are \fBalways\fR interpreted as hexadecimal values but can be
+preceded with an optional '0x'.
+.TP
+.B sockets
+Automatically generate masks binding tasks to sockets.
+If the number of tasks differs from the number of allocated sockets
+this can result in sub\-optimal binding.
+.TP
+.B cores
+Automatically generate masks binding tasks to cores.
+If the number of tasks differs from the number of allocated cores
+this can result in sub\-optimal binding.
+.TP
+.B threads
+Automatically generate masks binding tasks to threads.
+If the number of tasks differs from the number of allocated threads
+this can result in sub\-optimal binding.
+.TP
+.B ldoms
+Automatically generate masks binding tasks to NUMA locality domains.
+If the number of tasks differs from the number of allocated locality domains
+this can result in sub\-optimal binding.
+.TP
+.B help
+Show this help message
+.RE
+
+.TP
+\fB\-c\fR, \fB\-\-cpus\-per\-task\fR=<\fIncpus\fR>
 Advise the SLURM controller that ensuing job steps will require \fIncpus\fR 
 number of processors per task.  Without this option, the controller will
 just try to allocate one processor per task.
@@ -124,21 +262,12 @@ the \-\-cpus\-per\-task=3 options, the controller knows that each task requires
 of 4 nodes, one for each of the 4 tasks.
 
 .TP
-\fB\-\-comment\fR=<\fIstring\fR>
-An arbitrary comment.
-
-.TP
-\fB\-\-contiguous\fR
-Demand a contiguous range of nodes. The default is "yes". Specify
-\-\-contiguous=no if a contiguous range of nodes is not required.
-
-.TP 
-\fB\-D\fR, \fB\-\-workdir\fR[=]<\fIdirectory\fR>
+\fB\-D\fR, \fB\-\-workdir\fR=<\fIdirectory\fR>
 Set the working directory of the batch script to \fIdirectory\fR before
 it it executed.
 
 .TP
-\fB\-e\fR, \fB\-\-error\fR[=]<\fIfilename pattern\fR>
+\fB\-e\fR, \fB\-\-error\fR=<\fIfilename pattern\fR>
 Instruct SLURM to connect the batch script's standard error directly to the 
 file name specified in the "\fIfilename pattern\fR".
 See the \fB\-\-input\fR option for filename specification options.
@@ -150,13 +279,13 @@ the oposite of \-\-share, whichever option is seen last on the command line
 will win.  (The default shared/exclusive behaviour depends on system
 configuration.)
 
-.TP 
-\fB\-F\fR, \fB\-\-nodefile\fR[=]<\fInode file\fR>
+.TP
+\fB\-F\fR, \fB\-\-nodefile\fR=<\fInode file\fR>
 Much like \-\-nodelist, but the list is contained in a file of name
 \fInode file\fR.  The node names of the list may also span multiple lines
 in the file.    Duplicate node names in the file will be ignored.
 The order of the node names in the list is not important; the node names
-will be sorted my SLURM.
+will be sorted by SLURM.
 
 .TP
 \fB\-\-get\-user\-env\fR[=\fItimeout\fR][\fImode\fR]
@@ -166,7 +295,8 @@ The environment variables are retrieved by running something of this sort
 "su \- <username> \-c /usr/bin/env" and parsing the output.
 Be aware that any environment variables already set in sbatch's environment
 will take precedence over any environment variables in the user's
-login environment.
+login environment. Clear any environment variables before calling sbatch
+that you do not want propagated to the spawned program.
 The optional \fItimeout\fR value is in seconds. Default value is 8 seconds.
 The optional \fImode\fR value control the "su" options.
 With a \fImode\fR value of "S", "su" is executed without the "\-" option.
@@ -181,17 +311,17 @@ effective uid of "root".
 This option was originally created for use by Moab.
 
 .TP
-\fB\-\-gid\fR[=]<\fIgroup\fR>
+\fB\-\-gid\fR=<\fIgroup\fR>
 If \fBsbatch\fR is run as root, and the \fB\-\-gid\fR option is used, 
 submit the job with \fIgroup\fR's group access permissions.  \fIgroup\fR 
 may be the group name or the numerical group ID.
 
-.TP 
+.TP
 \fB\-h\fR, \fB\-\-help\fR
 Display help information and exit.
 
 .TP
-\fB\-\-hint\fR=\fItype\fR
+\fB\-\-hint\fR=<\fItype\fR>
 Bind tasks according to application hints
 .RS
 .TP
@@ -206,19 +336,20 @@ use only one core in each physical CPU
 .B [no]multithread
 [don't] use extra threads with in-core multi-threading
 which can benefit communication intensive applications
+.TP
 .B help
 show this help message
 .RE
 
-.TP 
-\fB\-I\fR,\fB\-\-immediate\fR
+.TP
+\fB\-I\fR, \fB\-\-immediate\fR
 The batch script will only be submitted to the controller if the resources
 necessary to grant its job allocation are immediately available.  If the
 job allocation will have to wait in a queue of pending jobs, the batch script
 will not be submitted.
 
 .TP
-\fB\-i\fR, \fB\-\-input\fR[=]<\fIfilename pattern\fR>
+\fB\-i\fR, \fB\-\-input\fR=<\fIfilename pattern\fR>
 Instruct SLURM to connect the batch script's standard input
 directly to the file name specified in the "\fIfilename pattern\fR".
 
@@ -228,22 +359,23 @@ standard output and standard error are directed to a file of the name
 described below.
 
 The filename pattern may contain one or more replacement symbols, which are
-a percent sign "%" followed by a letter (e.g. %t).
+a percent sign "%" followed by a letter (e.g. %j).
 
 Supported replacement symbols are:
 .PD 0
 .RS 10
-.TP 
+.TP
 \fB%j\fR
 Job allocation number.
 .PD 0
-.TP 
+.TP
 \fB%N\fR
-Node name. (Will result in a separate file per node.)
+Node name.  Only one file is created, so %N will be replaced by the name of the
+first node in the job, which is the one that runs the script.
 .RE
 
 .TP
-\fB\-J\fR, \fB\-\-job\-name\fR[=]<\fIjobname\fR>
+\fB\-J\fR, \fB\-\-job\-name\fR=<\fIjobname\fR>
 Specify a name for the job allocation. The specified name will appear along with
 the job id number when querying running jobs on the system. The default
 is the name of the batch script, or just "sbatch" if the script is
@@ -256,7 +388,7 @@ NOTE: Only valid for user root.
 
 .TP
 \fB\-k\fR, \fB\-\-no\-kill\fR
-Do not automatically terminate a job of one of the nodes it has been 
+Do not automatically terminate a job of one of the nodes it has been
 allocated fails.  The user will assume the responsibilities for fault\-tolerance
 should a node fail.  When there is a node failure, any active job steps (usually
 MPI jobs) on that node will almost certainly suffer a fatal error, but with
@@ -267,7 +399,7 @@ By default SLURM terminates the entire job allocation if any node fails in its
 range of allocated nodes.
 
 .TP
-\fB\-L\fR, \fB\-\-licenses\fR=
+\fB\-L\fR, \fB\-\-licenses\fR=<\fBlicense\fR>
 Specification of licenses (or other resources available on all 
 nodes of the cluster) which must be allocated to this job.
 License names can be followed by an asterisk and count 
@@ -277,8 +409,10 @@ Multiple license names should be comma separated (e.g.
 
 .TP
 \fB\-m\fR, \fB\-\-distribution\fR=
-(\fIblock\fR|\fIcyclic\fR|\fIarbitrary\fR|\fIplane=<options>\fR)
-Specify an alternate distribution method for remote processes.
+<\fIblock\fR|\fIcyclic\fR|\fIarbitrary\fR|\fIplane=<options>\fR>
+Specify an alternate distribution method for remote processes.  In
+sbatch this only sets environment variables that will be used by
+subsequent srun requests.
 .RS
 .TP
 .B block
@@ -304,12 +438,12 @@ The options include a number representing the size of the task block.
 This is followed by an optional specification of the task distribution 
 scheme within a block of tasks and between the blocks of tasks.
 For more details (including examples and diagrams), please see
-.na
-.nh
-https://computing.llnl.gov/linux/slurm/mc_support.html and
+.br
+https://computing.llnl.gov/linux/slurm/mc_support.html
+.br
+and
+.br
 https://computing.llnl.gov/linux/slurm/dist_plane.html.
-.hy
-.ad
 .TP
 .B arbitrary
 The arbitrary method of distribution will allocate processes in\-order as 
@@ -321,19 +455,19 @@ contain at minimum the number of hosts requested.  If requesting tasks
 .RE
 
 .TP
-\fB\-\-mail\-type\fR=\fItype\fR
+\fB\-\-mail\-type\fR=<\fItype\fR>
 Notify user by email when certain event types occur. 
 Valid \fItype\fR values are BEGIN, END, FAIL, ALL (any state change). 
 The user to be notified is indicated with \fB\-\-mail\-user\fR. 
 
 .TP
-\fB\-\-mail\-user\fR=\fIuser\fR
+\fB\-\-mail\-user\fR=<\fIuser\fR>
 User to receive email notification of state changes as defined by 
 \fB\-\-mail\-type\fR.
-The default value is the username of the submitting user.
+The default value is the submitting user.
 
 .TP
-\fB\-\-mem\fR[=]<\fIMB\fR>
+\fB\-\-mem\fR=<\fIMB\fR>
 Specify the real memory required per node in MegaBytes.
 Default value is \fBDefMemPerNode\fR and the maximum value is
 \fBMaxMemPerNode\fR. If configured, both of parameters can be
@@ -344,7 +478,7 @@ Also see \fB\-\-mem\-per\-cpu\fR.
 \fB\-\-mem\fR and \fB\-\-mem\-per\-cpu\fR are mutually exclusive.
 
 .TP
-\fB\-\-mem\-per\-cpu\fR[=]<\fIMB\fR>
+\fB\-\-mem\-per\-cpu\fR=<\fIMB\fR>
 Mimimum memory required per allocated CPU in MegaBytes.
 Default value is \fBDefMemPerCPU\fR and the maximum value is
 \fBMaxMemPerCPU\fR. If configured, both of parameters can be 
@@ -355,34 +489,95 @@ Also see \fB\-\-mem\fR.
 \fB\-\-mem\fR and \fB\-\-mem\-per\-cpu\fR are mutually exclusive.
 
 .TP
-\fB\-\-mincores\fR[=]<\fIn\fR>
+\fB\-\-mem_bind\fR=[{\fIquiet,verbose\fR},]\fItype\fR
+Bind tasks to memory. Used only when the task/affinity plugin is enabled 
+and the NUMA memory functions are available.
+\fBNote that the resolution of CPU and memory binding 
+may differ on some architectures.\fR For example, CPU binding may be performed 
+at the level of the cores within a processor while memory binding will 
+be performed at the level of nodes, where the definition of "nodes" 
+may differ from system to system. \fBThe use of any type other than 
+"none" or "local" is not recommended.\fR
+If you want greater control, try running a simple test code with the 
+options "\-\-cpu_bind=verbose,none \-\-mem_bind=verbose,none" to determine 
+the specific configuration.
+
+NOTE: To have SLURM always report on the selected memory binding for
+all commands executed in a shell, you can enable verbose mode by
+setting the SLURM_MEM_BIND environment variable value to "verbose".
+
+The following informational environment variables are set when \fB\-\-mem_bind\
+is in use:
+
+.nf
+        SLURM_MEM_BIND_VERBOSE
+        SLURM_MEM_BIND_TYPE
+        SLURM_MEM_BIND_LIST
+.fi
+
+See the \fBENVIRONMENT VARIABLES\fR section for a more detailed description
+of the individual SLURM_MEM_BIND* variables.
+
+Supported options include:
+.RS
+.TP
+.B q[uiet]
+quietly bind before task runs (default)
+.TP
+.B v[erbose]
+verbosely report binding before task runs
+.TP
+.B no[ne]
+don't bind tasks to memory (default)
+.TP
+.B rank
+bind by task rank (not recommended)
+.TP
+.B local
+Use memory local to the processor in use
+.TP
+.B map_mem:<list>
+bind by mapping a node's memory to tasks as specified
+where <list> is <cpuid1>,<cpuid2>,...<cpuidN>.
+CPU IDs are interpreted as decimal values unless they are preceded
+with '0x' in which case they interpreted as hexadecimal values
+(not recommended)
+.TP
+.B mask_mem:<list>
+bind by setting memory masks on tasks as specified
+where <list> is <mask1>,<mask2>,...<maskN>.
+memory masks are \fBalways\fR interpreted as hexadecimal values.
+Note that masks must be preceded with a '0x' if they don't begin
+with [0-9] so they are seen as numerical values by srun.
+.TP
+.B help
+show this help message
+.RE
+
+.TP
+\fB\-\-mincores\fR=<\fIn\fR>
 Specify a minimum number of cores per socket.
 
 .TP
-\fB\-\-mincpus\fR[=]<\fIn\fR>
-Specify minimum number of cpus per node.
+\fB\-\-mincpus\fR=<\fIn\fR>
+Specify a minimum number of logical cpus/processors per node.
 
 .TP
-\fB\-\-minsockets\fR[=]<\fIn\fR>
+\fB\-\-minsockets\fR=<\fIn\fR>
 Specify a minimum number of sockets (physical processors) per node.
 
 .TP
-\fB\-\-minthreads\fR[=]<\fIn\fR>
+\fB\-\-minthreads\fR=<\fIn\fR>
 Specify a minimum number of threads per core.
 
-.TP 
-\fB\-N\fR, \fB\-\-nodes\fR[=]<\fInumber|[min]\-[max]\fR>
-Specify the number of nodes to be used by this job step.  This option accepts
-either a single number, or a range of possible node counts.  If a single number
-is used, such as "\-N 4", then the allocation is asking for four and ONLY four
-nodes.  If a range is specified, such as "\-N 2\-6", SLURM controller may
-grant the batch job anywhere from 2 to 6 nodes.  When using a range, either of
-the min or max options may be omitted.  For instance, "\-N 10\-" means
-"no fewer than 10 nodes", and "\-N \-20" means "no more than 20 nodes".  The
-default value of this option is one node, but other command line options
-may implicitly set the default node count to a higher value.
-The job will be allocated as many nodes as possible within the range specified 
-and without delaying the initiation of the job.
+.TP
+\fB\-N\fR, \fB\-\-nodes\fR=<\fIminnodes\fR[\-\fImaxnodes\fR]>
+Request that a minimum of \fIminnodes\fR nodes be allocated to this job.
+The scheduler may decide to launch the job on more than \fIminnodes\fR nodes.
+A limit on the maximum node count may be specified with \fImaxnodes\fR
+(e.g. "\-\-nodes=2\-4").  The minimum and maximum node count may be the
+same to specify a specific number of nodes (e.g. "\-\-nodes=2\-2" will ask
+for two and ONLY two nodes).
 The partition's node limits supersede those of the job. 
 If a job's node limits are outside of the range permitted for its 
 associated partition, the job will be left in a PENDING state. 
@@ -390,9 +585,17 @@ This permits possible execution at a later time, when the partition
 limit is changed.
 If a job node limit exceeds the number of nodes configured in the 
 partition, the job will be rejected.
+Note that the environment 
+variable \fBSLURM_NNODES\fR will be set to the count of nodes actually 
+allocated to the job. See the \fBENVIRONMENT VARIABLES \fR section 
+for more information.  If \fB\-N\fR is not specified, the default
+behavior is to allocate enough nodes to satisfy the requirements of
+the \fB\-n\fR and \fB\-c\fR options.
+The job will be allocated as many nodes as possible within the range specified
+and without delaying the initiation of the job.
 
 .TP
-\fB\-n\fR, \fB\-\-ntasks\fR[=]<\fInumber\fR>
+\fB\-n\fR, \fB\-\-ntasks\fR=<\fInumber\fR>
 sbatch does not launch tasks, it requests an allocation of resources and 
 submits a batch script. This option advises the SLURM controller that job 
 steps run within this allocation will launch a maximum of \fInumber\fR
@@ -402,22 +605,23 @@ of the \fISelectTypeParameters\fR parameter in slurm.conf), but note
 that the \fB\-\-cpus\-per\-task\fR option will change this default.
 
 .TP
-\fB\-\-network\fR=\fItype\fR
+\fB\-\-network\fR=<\fItype\fR>
 Specify the communication protocol to be used. 
 This option is supported on AIX systems.
-This option sets the \fBSLURM_NETWORK\fR environment variable for use by POE.
-The interpretation of \fItype\fR is system dependent. 
+Since POE is used to launch tasks, this option is not normally used or 
+is specified using the \fBSLURM_NETWORK\fR environment variable.
+The interpretation of \fItype\fR is system dependent.
 For systems with an IBM Federation switch, the following 
-comma\-separated and case insensitive types are recongnized:
+comma\-separated and case insensitive types are recognized:
 \fBIP\fR (the default is user\-space), \fBSN_ALL\fR, \fBSN_SINGLE\fR, 
 \fBBULK_XFER\fR and adapter names  (e.g. \fBSNI0\fR and \fBSNI1\fR). 
-For more information, on IBM systems see \fIPOE\fR documentation on 
+For more information, on IBM systems see \fIpoe\fR documentation on
 the environment variables \fBMP_EUIDEVICE\fR and \fBMP_USE_BULK_XFER\fR.
 Note that only four jobs steps may be active at once on a node with the 
 \fBBULK_XFER\fR option due to limitations in the Federation switch driver.
 
-.TP 
-\fB\-\-nice\fR[=]<\fIadjustment\fR>
+.TP
+\fB\-\-nice\fR[=\fIadjustment\fR]
 Run the job with an adjusted scheduling priority within SLURM.
 With no adjustment value the scheduling priority is decreased
 by 100. The adjustment range is from \-10000 (highest priority)
@@ -437,29 +641,31 @@ The \fIJobRequeue\fR configuration parameter controls the default
 behavior on the cluster.
 
 .TP
-\fB\-\-ntasks\-per\-core\fR=\fIntasks\fR
+\fB\-\-ntasks\-per\-core\fR=<\fIntasks\fR>
 Request that no more than \fIntasks\fR be invoked on each core.
 Similar to \fB\-\-ntasks\-per\-node\fR except at the core level
 instead of the node level.  Masks will automatically be generated
 to bind the tasks to specific core unless \fB\-\-cpu_bind=none\fR
 is specified.
-NOTE: This option is not supported unless \fISelectType=CR_Core\fR
-or \fISelectType=CR_Core_Memory\fR is configured.
+NOTE: This option is not supported unless
+\fISelectTypeParameters=CR_Core\fR or
+\fISelectTypeParameters=CR_Core_Memory\fR is configured.
 
 .TP
-\fB\-\-ntasks\-per\-socket\fR=\fIntasks\fR
+\fB\-\-ntasks\-per\-socket\fR=<\fIntasks\fR>
 Request that no more than \fIntasks\fR be invoked on each socket.
 Similar to \fB\-\-ntasks\-per\-node\fR except at the socket level
 instead of the node level.  Masks will automatically be generated
 to bind the tasks to specific sockets unless \fB\-\-cpu_bind=none\fR
 is specified.
-NOTE: This option is not supported unless \fISelectType=CR_Socket\fR 
-or \fISelectType=CR_Socket_Memory\fR is configured.
+NOTE: This option is not supported unless
+\fISelectTypeParameters=CR_Socket\fR or
+\fISelectTypeParameters=CR_Socket_Memory\fR is configured.
 
 .TP
-\fB\-\-ntasks\-per\-node\fR=\fIntasks\fR
+\fB\-\-ntasks\-per\-node\fR=<\fIntasks\fR>
 Request that no more than \fIntasks\fR be invoked on each node.
-This is similiar to using \fB\-\-cpus\-per\-task\fR=\fIncpus\fR
+This is similar to using \fB\-\-cpus\-per\-task\fR=\fIncpus\fR
 but does not require knowledge of the actual number of cpus on
 each node.  In some cases, it is more convenient to be able to
 request that no more than a specific number of ntasks be invoked
@@ -467,18 +673,18 @@ on each node.  Examples of this include submitting
 a hybrid MPI/OpenMP app where only one MPI "task/rank" should be
 assigned to each node while allowing the OpenMP portion to utilize
 all of the parallelism present in the node, or submitting a single
-setup/cleanup/monitoring job to each node of a pre\-existing  
+setup/cleanup/monitoring job to each node of a pre\-existing
 allocation as one step in a larger job script.
 
 .TP
 \fB\-O\fR, \fB\-\-overcommit\fR
-Overcommit resources. Normally, \fBsbatch\fR will allocate one cpu per
-task to be executed. By specifying \fB\-\-overcommit\fR you are explicitly
-allowing more than one process per cpu. However no more than
+Overcommit resources.  Normally, \fBsbatch\fR will allocate one task
+per processor.  By specifying \fB\-\-overcommit\fR you are explicitly
+allowing more than one task per processor.  However no more than
 \fBMAX_TASKS_PER_NODE\fR tasks are permitted to execute per node.
 
 .TP
-\fB\-o\fR, \fB\-\-output\fR[=]<\fIfilename pattern\fR>
+\fB\-o\fR, \fB\-\-output\fR=<\fIfilename pattern\fR>
 Instruct SLURM to connect the batch script's standard output directly to the 
 file name specified in the "\fIfilename pattern\fR".
 See the \fB\-\-input\fR option for filename specification options.
@@ -489,10 +695,42 @@ Open the output and error files using append or truncate mode as specified.
 The default value is specified by the system configuration parameter
 \fIJobFileAppend\fR.
 
-.TP 
-\fB\-p\fR, \fB\-\-partition\fR[=]<\fIpartition name\fR>
-Request a specific partition for the resource allocation.  If not specified, the
-default behaviour is to allow the slurm controller to select the default
+.TP
+\fB\-P\fR, \fB\-\-dependency\fR=<\fIdependency_list\fR>
+Defer the start of this job until the specified dependencies have been
+satisfied completed.
+<\fIdependency_list\fR> is of the form 
+<\fItype:job_id[:job_id][,type:job_id[:job_id]]\fR>.
+Many jobs can share the same dependency and these jobs may even belong to
+different  users. The  value may be changed after job submission using the
+scontrol command.
+.PD
+.RS
+.TP
+\fBafter:job_id[:jobid...]\fR
+This job can begin execution after the specified jobs have begun
+execution.
+.TP
+\fBafterany:job_id[:jobid...]\fR
+This job can begin execution after the specified jobs have terminated.
+.TP
+\fBafternotok:job_id[:jobid...]\fR
+This job can begin execution after the specified jobs have terminated
+in some failed state (non-zero exit code, node failure, timed out, etc).
+.TP
+\fBafterok:job_id[:jobid...]\fR
+This job can begin execution after the specified jobs have successfully
+executed (ran to completion with non-zero exit code).
+.TP
+\fBsingleton\fR
+This job can begin execution after any previously launched jobs sharing the same
+job name and user have terminated.
+.RE
+
+.TP
+\fB\-p\fR, \fB\-\-partition\fR=<\fIpartition name\fR>
+Request a specific partition for the resource allocation.  If not specified,
+the default behaviour is to allow the slurm controller to select the default
 partition as designated by the system administrator.
 
 .TP
@@ -539,40 +777,8 @@ The maximum resident set size
 The maximum stack size
 .RE
 
-.TP 
-\fB\-P\fR, \fB\-\-dependency\fR[=]<\fIdependency_list\fR>
-Defer the start of this job until the specified dependencies have been
-satisfied completed.
-<\fIdependency_list\fR> is of the form 
-<\fItype:job_id[:job_id][,type:job_id[:job_id]]\fR>.
-Many jobs can share the same dependency and these jobs may even belong to
-different  users. The  value may be changed after job submission using the
-scontrol command.
-.PD
-.RS
-.TP
-\fBafter:job_id[:jobid...]\fR
-This job can begin execution after the specified jobs have begun
-execution.
-.TP
-\fBafterany:job_id[:jobid...]\fR
-This job can begin execution after the specified jobs have terminated.
-.TP
-\fBafternotok:job_id[:jobid...]\fR
-This job can begin execution after the specified jobs have terminated
-in some failed state (non-zero exit code, node failure, timed out, etc).
-.TP
-\fBafterok:job_id[:jobid...]\fR
-This job can begin execution after the specified jobs have successfully
-executed (ran to completion with non-zero exit code).
-.TP
-\fBsingleton\fR
-This job can begin execution after any previously launched jobs sharing the same
-job name and user have terminated.
-.RE
-
 .TP
-\fB\-q\fR, \fB\-\-quiet\fR
+\fB\-Q\fR, \fB\-\-quiet\fR
 Suppress informational messages from sbatch. Errors will still be displayed.
 
 .TP
@@ -583,6 +789,10 @@ Also see the \fB\-\-no\-requeue\fR option.
 The \fIJobRequeue\fR configuration parameter controls the default 
 behavior on the cluster.
 
+.TP
+\fB\-\-reservation\fR=<\fIname\fR>
+Allocate resources for the job from the named reservation.
+
 .TP
 \fB\-s\fR, \fB\-\-share\fR
 The job allocation can share nodes with other running jobs.  (The default
@@ -592,40 +802,40 @@ option was not set and allow higher system utilization, but application
 performance will likely suffer due to competition for resources within a node.
 
 .TP
-\fB\-t\fR, \fB\-\-time\fR=\fItime\fR
-Set a  limit on the total run time of the job allocation.
-If the requested time limit exceeds the partition's time limit, the 
-job will be left in a PENDING state (possibly indefinitely).  The default
-time limit is the partition's time limit.  When the time limit is reached,
-the each task in each job step is sent SIGTERM followed by SIGKILL. The
-interval between signals is specified by the SLURM configuration parameter
-\fBKillWait\fR.  A time limit of zero represents unlimited time.
-Acceptable time formats include "minutes", "minutes:seconds", 
-"hours:minutes:seconds", "days\-hours", "days\-hours:minutes" and 
-"days\-hours:minutes:seconds".
+\fB\-t\fR, \fB\-\-time\fR=<\fItime\fR>
+Set a limit on the total run time of the job allocation.  If the
+requested time limit exceeds the partition's time limit, the job will
+be left in a PENDING state (possibly indefinitely).  The default time
+limit is the partition's time limit.  When the time limit is reached,
+each task in each job step is sent SIGTERM followed by SIGKILL.  The
+interval between signals is specified by the SLURM configuration
+parameter \fBKillWait\fR.  A time limit of zero requests that no time
+limit be imposed.  Acceptable time formats include "minutes",
+"minutes:seconds", "hours:minutes:seconds", "days\-hours",
+"days\-hours:minutes" and "days\-hours:minutes:seconds".
 
 .TP
-\fB\-\-tasks\-per\-node\fR[=]<\fIn\fR>
+\fB\-\-tasks\-per\-node\fR=<\fIn\fR>
 Specify the number of tasks to be launched per node.
 Equivalent to \fB\-\-ntasks\-per\-node\fR.
 
 .TP
-\fB\-\-tmp\fR[=]<\fIMB\fR>
+\fB\-\-tmp\fR=<\fIMB\fR>
 Specify a minimum amount of temporary disk space.
 
 .TP
-\fB\-U\fR, \fB\-\-account\fR[=]<\fIaccount\fR>
+\fB\-U\fR, \fB\-\-account\fR=<\fIaccount\fR>
 Change resource use by this job to specified account.
-The \fIaccount\fR is an arbitrary string. The account name may 
-be changed after job submission using the \fBscontrol\fR 
+The \fIaccount\fR is an arbitrary string. The account name may
+be changed after job submission using the \fBscontrol\fR
 command.
 
 .TP
 \fB\-u\fR, \fB\-\-usage\fR
-Display brief usage message and exit.
+Display brief help message and exit.
 
 .TP
-\fB\-\-uid\fR[=]<\fIuser\fR>
+\fB\-\-uid\fR=<\fIuser\fR>
 Attempt to submit and/or run a job as \fIuser\fR instead of the
 invoking user id. The invoking user's credentials will be used
 to check access permissions for the target partition. User root
@@ -634,55 +844,56 @@ partition for example. If run as root, \fBsbatch\fR will drop
 its permissions to the uid specified after node allocation is
 successful. \fIuser\fR may be the user name or numerical user ID.
 
-.TP 
+.TP
 \fB\-V\fR, \fB\-\-version\fR
 Display version information and exit.
 
 .TP
 \fB\-v\fR, \fB\-\-verbose\fR
-Increase the verbosity of sbatch's informational messages.  Multiple \-v's
-will further increase sbatch's verbosity.
+Increase the verbosity of sbatch's informational messages.  Multiple
+\fB\-v\fR's will further increase sbatch's verbosity.  By default only
+errors will be displayed.
 
-.TP 
-\fB\-w\fR, \fB\-\-nodelist\fR[=]<\fInode name list\fR>
+.TP
+\fB\-w\fR, \fB\-\-nodelist\fR=<\fInode name list\fR>
 Request a specific list of node names.  The list may be specified as a
 comma\-separated list of node names, or a range of node names
 (e.g. mynode[1\-5,7,...]).  Duplicate node names in the list will be ignored.
 The order of the node names in the list is not important; the node names
-will be sorted my SLURM.
+will be sorted by SLURM.
 
 .TP
-\fB\-\-wckey\fR=\fIwckey\fR
+\fB\-\-wckey\fR=<\fIwckey\fR>
 Specify wckey to be used with job.  If TrackWCKey=no (default) in the
-slurm.conf this value does not get looked at. 
+slurm.conf this value is ignored.
 
 .TP
-\fB\-\-wrap\fR[=]<\fIcommand string\fR>
+\fB\-\-wrap\fR=<\fIcommand string\fR>
 Sbatch will wrap the specified command string in a simple "sh" shell script,
 and submit that script to the slurm controller.  When \-\-wrap is used,
 a script name and arguments may not be specified on the command line; instead
 the sbatch-generated wrapper script is used.
 
 .TP
-\fB\-x\fR, \fB\-\-exclude\fR[=]<\fInode name list\fR>
+\fB\-x\fR, \fB\-\-exclude\fR=<\fInode name list\fR>
 Explicitly exclude certain nodes from the resources granted to the job.
 
 .PP
-The following options support Blue Gene systems, but may be 
+The following options support Blue Gene systems, but may be
 applicable to other systems as well.
 
 .TP
-\fB\-\-blrts\-image\fR[=]<\fIpath\fR>
+\fB\-\-blrts\-image\fR=<\fIpath\fR>
 Path to blrts image for bluegene block.  BGL only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-cnload\-image\fR=\fIpath\fR
+\fB\-\-cnload\-image\fR=<\fIpath\fR>
 Path to compute node image for bluegene block.  BGP only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-conn\-type\fR[=]<\fItype\fR>
+\fB\-\-conn\-type\fR=<\fItype\fR>
 Require the partition connection type to be of a certain type.  
 On Blue Gene the acceptable of \fItype\fR are MESH, TORUS and NAV.  
 If NAV, or if not set, then SLURM will try to fit a TORUS else MESH.
@@ -693,25 +904,25 @@ midplane and below).  You can use HTC_S for SMP, HTC_D for Dual, HTC_V
 for virtual node mode, and HTC_L for Linux mode.
 
 .TP
-\fB\-g\fR, \fB\-\-geometry\fR[=]<\fIXxYxZ\fR>
+\fB\-g\fR, \fB\-\-geometry\fR=<\fIXxYxZ\fR>
 Specify the geometry requirements for the job. The three numbers 
 represent the required geometry giving dimensions in the X, Y and 
 Z directions. For example "\-\-geometry=2x3x4", specifies a block 
-of nodes having 2 x 3 x 4 = 24 nodes (actually base partions on 
+of nodes having 2 x 3 x 4 = 24 nodes (actually base partitions on 
 Blue Gene).
 
 .TP
-\fB\-\-ioload\-image\fR=\fIpath\fR
+\fB\-\-ioload\-image\fR=<\fIpath\fR>
 Path to io image for bluegene block.  BGP only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-linux\-image\fR[=]<\fIpath\fR>
+\fB\-\-linux\-image\fR=<\fIpath\fR>
 Path to linux image for bluegene block.  BGL only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-mloader\-image\fR[=]<\fIpath\fR>
+\fB\-\-mloader\-image\fR=<\fIpath\fR>
 Path to mloader image for bluegene block.
 Default from \fIblugene.conf\fR if not set.
 
@@ -722,7 +933,7 @@ appropriate partition.
 By default the specified geometry can rotate in three dimensions.
 
 .TP
-\fB\-\-ramdisk\-image\fR[=]<\fIpath\fR>
+\fB\-\-ramdisk\-image\fR=<\fIpath\fR>
 Path to ramdisk image for bluegene block.  BGL only.
 Default from \fIblugene.conf\fR if not set.
 
@@ -736,64 +947,81 @@ Upon startup, sbatch will read and handle the options set in the following
 environment variables.  Note that environment variables will override any
 options set in a batch script, and command line options will override any
 environment variables.
- 
+
 .TP 22
 \fBSBATCH_ACCOUNT\fR
-Same as \fB\-\-account\fR.
+Same as \fB\-U, \-\-account\fR
+.TP
+\fBSBATCH_ACCTG_FREQ\fR
+Same as \fB\-\-acctg\-freq\fR
 .TP
-\fBSALLOC_ACCTG_FREQ\fR
-Same as \fB\-\-acctg\-freq\fR.
+\fBSLURM_CHECKPOINT\fR
+Same as \fB\-\-checkpoint\fR
+.TP
+\fBSLURM_CHECKPOINT_DIR\fR
+Same as \fB\-\-checkpoint\-dir\fR
 .TP
 \fBSBATCH_CONN_TYPE\fR
-Same as \fB\-\-conn\-type\fR.
+Same as \fB\-\-conn\-type\fR
+.TP
+\fBSBATCH_CPU_BIND\fR
+Same as \fB\-\-cpu_bind\fR
 .TP
 \fBSBATCH_DEBUG\fR
-Same as \fB\-v\fR or \fB\-\-verbose\fR.
+Same as \fB\-v, \-\-verbose\fR
 .TP
 \fBSBATCH_DISTRIBUTION\fR
-Same as \fB\-m\fR or \fB\-\-distribution\fR.
+Same as \fB\-m, \-\-distribution\fR
 .TP
 \fBSBATCH_EXCLUSIVE\fR
-Same as \fB\-\-exclusive\fR.
+Same as \fB\-\-exclusive\fR
 .TP
 \fBSBATCH_GEOMETRY\fR
-Same as \fB\-g\fR or \fB\-\-geometry\fR.
+Same as \fB\-g, \-\-geometry\fR
 .TP
 \fBSBATCH_IMMEDIATE\fR
-Same as \fB\-I\fR or \fB\-\-immediate\fR.
+Same as \fB\-I, \-\-immediate\fR
 .TP
 \fBSBATCH_JOBID\fR
-Same as \fB\-\-jobid\fR.
+Same as \fB\-\-jobid\fR
 .TP
 \fBSBATCH_JOB_NAME\fR
-Same as \fB\-J\fR or \fB\-\-job\-name\fR.
+Same as \fB\-J, \-\-job\-name\fR
+.TP
+\fBSBATCH_MEM_BIND\fR
+Same as \fB\-\-mem_bind\fR
 .TP
 \fBSBATCH_NETWORK\fR
-Same as \fB\-\-network\fR.
+Same as \fB\-\-network\fR
 .TP
 \fBSBATCH_NO_REQUEUE\fR
-Same as \fB\-\-no\-requeue\fR.
+Same as \fB\-\-no\-requeue\fR
 .TP
 \fBSBATCH_NO_ROTATE\fR
-Same as \fB\-R\fR or \fB\-\-no\-rotate\fR.
+Same as \fB\-R, \-\-no\-rotate\fR
 .TP
-\fBSLURM_OPEN_MODE\fR
-Same as \fB\-\-open\-mode\fR.
+\fBSBATCH_OPEN_MODE\fR
+Same as \fB\-\-open\-mode\fR
 .TP
-\fBSLURM_OVERCOMMIT\fR
+\fBSBATCH_OVERCOMMIT\fR
 Same as \fB\-O, \-\-overcommit\fR
 .TP
 \fBSBATCH_PARTITION\fR
-Same as \fB\-p\fR or \fB\-\-partition\fR.
+Same as \fB\-p, \-\-partition\fR
 .TP
 \fBSBATCH_TIMELIMIT\fR
-Same as \fB\-t\fR or \fB\-\-time\fR.
+Same as \fB\-t, \-\-time\fR
 
 .SH "OUTPUT ENVIRONMENT VARIABLES"
 .PP
 The SLURM controller will set the following variables in the environment of
 the batch script.
-
+.TP
+\fBBASIL_RESERVATION_ID\fR
+The reservation ID on Cray systems running ALPS/BASIL only.
+.TP
+\fBSLURM_CPU_BIND\fR
+Set to value of the \-\-cpu_bind\fR option.
 .TP
 \fBSLURM_JOB_ID\fR (and \fBSLURM_JOBID\fR for backwards compatibility)
 The ID of the job allocation.
@@ -818,6 +1046,9 @@ List of nodes allocated to the job.
 \fBSLURM_JOB_NUM_NODES\fR (and \fBSLURM_NNODES\fR for backwards compatibility)
 Total number of nodes in the job's resource allocation.
 .TP
+\fBSLURM_MEM_BIND\fR
+Set to value of the \-\-mem_bind\fR option.
+.TP
 \fBSLURM_TASKS_PER_NODE\fR
 Number of tasks to be initiated on each node. Values are
 comma separated and in the same order as SLURM_NODELIST.
@@ -845,6 +1076,14 @@ Only set if the \fB\-\-ntasks\-per\-node\fR option is specified.
 Number of tasks requested per socket.
 Only set if the \fB\-\-ntasks\-per\-socket\fR option is specified.
 .TP
+\fBSLURM_RESTART_COUNT\fR
+If the job has been restarted due to system failure or has been
+explicitly requeued, this will be sent to the number of times
+the job has been restarted.
+.TP
+\fBSLURM_SUBMIT_DIR\fR
+The directory from which \fBsbatch\fR was invoked.
+.TP
 \fBMPIRUN_PARTITION\fR
 The block name on Blue Gene systems only.
 
@@ -906,9 +1145,9 @@ host4
 
 .SH "COPYING"
 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).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/sbcast.1 b/doc/man/man1/sbcast.1
index 7f76a4ca3..85215e0e3 100644
--- a/doc/man/man1/sbcast.1
+++ b/doc/man/man1/sbcast.1
@@ -1,4 +1,4 @@
-.TH SBCAST "1" "April 2006" "sbcast 1.1" "Slurm components"
+.TH SBCAST "1" "April 2006" "sbcast 2.0" "Slurm components"
 
 .SH "NAME"
 sbcast \- transmit a file to the nodes allocated to a SLURM job.
@@ -100,7 +100,7 @@ srun: jobid 12345 submitted
 .SH "COPYING"
 Copyright (C) 2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/scancel.1 b/doc/man/man1/scancel.1
index 0d6ec0791..da0436914 100644
--- a/doc/man/man1/scancel.1
+++ b/doc/man/man1/scancel.1
@@ -1,4 +1,4 @@
-.TH SCANCEL "1" "November 2008" "scancel 1.2" "Slurm components"
+.TH SCANCEL "1" "April 2009" "scancel 2.0" "Slurm components"
 
 .SH "NAME"
 scancel \- Used to signal jobs or job steps that are under the control of Slurm.
@@ -78,6 +78,13 @@ This option is incompatible with the \fB\-\-quiet\fR option.
 \fB\-V\fR, \fB\-\-Version\fR
 Print the version number of the scancel command. 
 
+.TP
+\fB\-w\fR, \fB\-\-nodelist=\fIhost1,host2,...\fR
+Cancel any jobs using any of the given hosts.  The list may be specified as 
+a comma\-separated list of hosts, a range of hosts (host[1\-5,7,...] for 
+example), or a filename. The host list will be assumed to be a filename only 
+if it contains a "/" character. 
+
 .TP
 ARGUMENTS
 
@@ -89,9 +96,17 @@ The Slurm job ID to be signaled.
 \fIstep_id\fP
 The step ID of the job step to be signaled. 
 If not specified, the operation is performed at the level of a job.
+
+If neither \fB\-\-batch\fR nor \fB\-\-signal\fR are used, 
+the entire job will be terminated.
+
 When \fB\-\-batch\fR is used, the batch shell processes will be signaled.
-Otherwise the processes associated with all job steps, but not the 
-batch script itself, will be signaled.
+The child processes of the shell will not be signalled by SLURM, but 
+the shell may forward the signal.
+
+When \fB\-\-batch\fR is not used but \fB\-\-signal\fR is used, 
+then all job steps will be signalled, but the batch script itself 
+will not be signalled.
 
 .SH "ENVIRONMENT VARIABLES"
 .PP
@@ -148,8 +163,12 @@ Cancel job 1234 along with all of its steps:
 scancel 1234
 
 .TP
-Send SIGUSR1 to the batch shell processes of job 1235:
-scancel \-\-signal=USR1 \-\-batch 1235
+Send SIGKILL to all steps of job 1235, but do not cancel the job itself:
+scancel \-\-signal=KILL 1235
+
+.TP
+Send SIGUSR1 to the batch shell processes of job 1236:
+scancel \-\-signal=USR1 \-\-batch 1236
 
 .TP
 Cancel job all pending jobs belonging to user "bob" in partition "debug":
@@ -157,8 +176,9 @@ scancel \-\-state=PENDING \-\-user=bob \-\-partition=debug
 
 .SH "COPYING"
 Copyright (C) 2002-2007 The Regents of the University of California.
+Copyright (C) 2008-2009 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/scontrol.1 b/doc/man/man1/scontrol.1
index 0c9b19cd7..0503dd93d 100644
--- a/doc/man/man1/scontrol.1
+++ b/doc/man/man1/scontrol.1
@@ -1,4 +1,4 @@
-.TH SCONTROL "1" "August 2008" "scontrol 1.3" "Slurm components"
+.TH SCONTROL "1" "May 2009" "scontrol 2.0" "Slurm components"
 
 .SH "NAME"
 scontrol \- Used view and modify Slurm configuration and state.
@@ -8,17 +8,18 @@ scontrol \- Used view and modify Slurm configuration and state.
 
 .SH "DESCRIPTION"
 \fBscontrol\fR is used to view or modify Slurm configuration including: job, 
-job step, node, partition, and overall system configuration. Most of the 
-commands can only be executed by user root. If an attempt to view or modify 
+job step, node, partition, reservation, and overall system configuration. Most 
+of the commands can only be executed by user root. If an attempt to view or modify 
 configuration information is made by an unauthorized user, an error message 
 will be printed and the requested action will not occur. If no command is 
 entered on the execute line, \fBscontrol\fR will operate in an interactive 
 mode and prompt for input. It will continue prompting for input and executing 
 commands until explicitly terminated. If a command is entered on the execute 
 line, \fBscontrol\fR will execute that command and terminate. All commands 
-and options are case\-insensitive, although node names and partition names 
-are case\-sensitive (node names "LX" and "lx" are distinct). Commands can 
-be abbreviated to the extent that the specification is unique.
+and options are case\-insensitive, although node names, partition names, and 
+reservation names are case\-sensitive (node names "LX" and "lx" are distinct). 
+All commands and options can be abbreviated to the extent that the 
+specification is unique.
 
 .SH "OPTIONS"
 .TP
@@ -63,7 +64,7 @@ are unavailable to user's group.
 Instruct the Slurm controller to terminate immediately and generate a core file.
 
 .TP
-\fBcheckpoint\fP \fICKPT_OP\fP \fIID\fP
+\fBcheckpoint\fP \fICKPT_OP\fP \fIID\fP \fIOPTIONS\fP
 Perform a checkpoint activity on the job step(s) with the specified identification.
 \fIID\fP can be used to identify a specific job (e.g. "<job_id>",
 which applies to all of its existing steps)
@@ -84,8 +85,28 @@ Acceptable values for \fICKPT_OP\fP include:
 \fIerror\fP (report the result for the last checkpoint request, error code and message) 
 .TP
 \fIrestart\fP (restart execution of the previously checkpointed job steps)
+.TP
+Acceptable values for \fICKPT_OP\fP include:
+.TP
+\fIMaxWait=<seconds>\fP maximum time for checkpoint to be written. 
+Default value is 10 seconds.
+Valid with \fIcreate\fP and \fIvacate\fP options only.
+.TP
+\fIImageDir=<directory_name>\fP Location of checkpoint file.
+Valid with \fIcreate\fP, \fIvacate\fP and \fIrestart\fP options only.
+This value takes precedent over any \-\-checkpoint\-dir value specified
+at job submission time.
+.TP
+\fIStickToNodes\fP If set, resume job on the same nodes are previously used.
+Valid with the \fIrestart\fP option only.
 .RE
 
+.TP
+\fBcreate\fP \fISPECIFICATION\fP
+Create a new partition or reservation.  See the full list of parameters 
+below.  Include the tag "res" to create a reservation without specifying
+a reservation name.
+
 .TP
 \fBcompleting\fP
 Display all jobs in a COMPLETING state along with associated nodes in either a 
@@ -94,8 +115,8 @@ COMPLETING or DOWN state.
 .TP
 \fBdelete\fP \fISPECIFICATION\fP
 Delete the entry with the specified \fISPECIFICATION\fP.
-The only supported \fISPECIFICATION\fP presently is of the form
-\fIPartitionName=<name>\fP.
+The two \fISPECIFICATION\fP choices are \fIPartitionName=<name>\fP
+and \fIReservation=<name>\fP
 
 .TP
 \fBexit\fP
@@ -196,16 +217,22 @@ is restarted or "scontrol reconfigure" is executed).
 \fBshow\fP \fIENTITY\fP \fIID\fP
 Display the state of the specified entity with the specified identification.
 \fIENTITY\fP may be \fIconfig\fP, \fIdaemons\fP, \fIjob\fP, \fInode\fP, 
-\fIpartition\fP, \fIslurmd\fP, \fIstep\fP, \fIhostlist\fP or \fIhostnames\fP 
+\fIpartition\fP, \fIreservation\fP, \fIslurmd\fP, \fIstep\fP, \fItopology\fP,
+\fIhostlist\fP or \fIhostnames\fP 
 (also \fIblock\fP or \fIsubbp\fP on BlueGene systems).
 \fIID\fP can be used to identify a specific element of the identified 
 entity: the configuration parameter name, job ID, node name, partition name, 
-or job step ID \fIconfig\fP, \fIjob\fP, \fInode\fP, \fIpartition\fP, 
-or \fIstep\fP respectively. 
+reservation name, or job step ID for \fIconfig\fP, \fIjob\fP, \fInode\fP, 
+\fIpartition\fP, or \fIstep\fP respectively. 
+For an \fIENTITY\fP of \fItopology\fP, the \fIID\fP may be a node or switch name.
+If one node name is specified, all switches connected to that node (and 
+their parent switches) will be shown.
+If more than one node name is specified, only switches that connect to all 
+named nodes will be shown.
 \fIhostnames\fP takes an optional hostlist expression as input and 
 writes a list of individual host names to standard output (one per 
 line). If no hostlist expression is supplied, the contents of the 
-SLURM_NODELIST environment variable is used. For example "tux[1-3]" 
+SLURM_NODELIST environment variable is used. For example "tux[1\-3]" 
 is mapped to "tux1","tux2" and "tux3" (one hostname per line).
 \fIhostlist\fP takes a list of host names and prints the hostlist 
 expression for them (the inverse of \fIhostnames\fP). 
@@ -236,19 +263,30 @@ User processes must stop on receipt of SIGSTOP signal and resume
 upon receipt of SIGCONT for this operation to be effective.
 Not all architectures and configurations support job suspension.
 
+.TP
+\fBtakeover\fP
+Instruct SLURM's backup controller (slurmctld) to take over system control.
+SLURM's backup controller requests control from the primary and waits for 
+its termination. After that, it switches from backup mode to controller
+mode. If primary controller can not be contacted, it directly switches to 
+controller mode. This can be used to speed up the SLURM controller 
+fail\-over mechanism when the primary node is down.
+This can be used to minimize disruption if the computer executing the
+primary SLURM controller is scheduled down.
+(Note: SLURM's primary controller will take the control back at startup.)
+
 .TP
 \fBupdate\fP \fISPECIFICATION\fP 
-Update job, node or partition configuration per the supplied specification.
-\fISPECIFICATION\fP is in the same format as the Slurm configuration file 
-and the output of the \fIshow\fP command described above. It may be desirable 
-to execute the \fIshow\fP command (described above) on the specific entity 
-you which to update, then use cut\-and\-paste tools to enter updated configuration 
-values to the \fIupdate\fP. Note that while most configuration values can be 
-changed using this command, not all can be changed using this mechanism. In 
-particular, the hardware configuration of a node or the physical addition or 
-removal of nodes from the cluster may only be accomplished through editing 
-the Slurm configuration file and executing the \fIreconfigure\fP command 
-(described above).
+Update job, node, partition, or reservation configuration per the supplied 
+specification. \fISPECIFICATION\fP is in the same format as the Slurm 
+configuration file and the output of the \fIshow\fP command described above. It
+may be desirable to execute the \fIshow\fP command (described above) on the 
+specific entity you which to update, then use cut\-and\-paste tools to enter 
+updated configuration values to the \fIupdate\fP. Note that while most 
+configuration values can be changed using this command, not all can be changed 
+using this mechanism. In particular, the hardware configuration of a node or 
+the physical addition or removal of nodes from the cluster may only be 
+accomplished through editing the Slurm configuration file and executing the \fIreconfigure\fP command (described above).
 
 .TP
 \fBverbose\fP
@@ -264,7 +302,7 @@ Display the version number of scontrol being executed.
 Repeat the last command executed.
 
 .TP
-\fBSPECIFICATIONS FOR SHOW AND UPDATE COMMANDS, JOBS\fR
+\fBSPECIFICATIONS FOR UPDATE COMMAND, JOBS\fR
 .TP
 \fIAccount\fP=<account>
 Account name to be changed for this job's resource use.
@@ -272,11 +310,11 @@ Value may be cleared with blank data value, "Account=".
 .TP
 \fIContiguous\fP=<yes|no>
 Set the job's requirement for contiguous (consecutive) nodes to be allocated. 
-Possible values are"YES" and "NO".
+Possible values are "YES" and "NO".
 .TP
 \fIDependency\fP=<job_id>
 Defer job's initiation until specified job_id completes.
-Cancel dependency with job_id value of "0", "Depedency=0".
+Cancel dependency with job_id value of "0", "Dependency=0".
 .TP
 \fIExcNodeList\fP=<nodes>
 Set the job's list of excluded node. Multiple node names may be 
@@ -290,7 +328,7 @@ The second number of the signal that caused the process to terminate if
 it was terminated by a signal.
 .TP
 \fIFeatures\fP=<features>
-Set the job's required features on nodes specified value. Multiple values 
+Set the job's required node features. Multiple values 
 may be comma separated if all features are required (AND operation) or 
 separated by "|" if any of the specified features are required (OR operation).
 Value may be cleared with blank data value, "Features=".
@@ -302,10 +340,10 @@ Identify the job to be updated. This specification is required.
 Set the job's minimum number of cores per socket to the specified value.
 .TP
 \fIMinMemory\fP=<megabytes>
-Set the job's minimum real memory required per nodes to the specified value.
+Set the job's minimum real memory required per node to the specified value.
 .TP
 \fIMinProcs\fP=<count>
-Set the job's minimum number of processors per nodes to the specified value.
+Set the job's minimum number of processors per node to the specified value.
 .TP
 \fIMinSockets\fP=<count>
 Set the job's minimum number of sockets per node to the specified value.
@@ -314,7 +352,7 @@ Set the job's minimum number of sockets per node to the specified value.
 Set the job's minimum number of threads per core to the specified value.
 .TP
 \fIMinTmpDisk\fP=<megabytes>
-Set the job's minimum temporary disk space required per nodes to the specified value.
+Set the job's minimum temporary disk space required per node to the specified value.
 .TP
 \fIName\fP=<name>
 Set the job's name to the specified value.
@@ -339,7 +377,7 @@ Set the job's list of required node. Multiple node names may be specified using
 simple node range expressions (e.g. "lx[10\-20]"). 
 Value may be cleared with blank data value, "ReqNodeList=".
 .TP
-\fIReqNodes\fP=<min_count>[-<max_count>]
+\fIReqNodes\fP=<min_count>[\-<max_count>]
 Set the job's minimum and optionally maximum count of nodes to be allocated.
 .TP
 \fIReqSockets\fP=<count>
@@ -364,8 +402,8 @@ You may also specify \fImidnight\fR, \fInoon\fR, or
 \fIteatime\fR (4pm) and you can have a time\-of\-day suffixed
 with \fIAM\fR or \fIPM\fR for running in the morning or the evening.
 You can also say what day the job will be run, by specifying
-a date of the form \fIMMDDYY\fR or \fIMM/DD/YY\fR
-or \fIMM.DD.YY\fR. You can also
+a date of the form \fIMMDDYY\fR or \fIMM/DD/YY\fR or \fIMM.DD.YY\fR, 
+or a date and time as \fIYYYY\-MM\-DD[THH[:MM[:SS]]]\fR.  You can also
 give times like \fInow + count time\-units\fR, where the time\-units
 can be \fIminutes\fR, \fIhours\fR, \fIdays\fR, or \fIweeks\fR
 and you can tell SLURM to run the job today with the keyword
@@ -422,15 +460,19 @@ Use quotes to enclose a reason having more than one word.
 .TP
 \fIState\fP=<state>
 Identify the state to be assigned to the node. Possible values are  "NoResp", 
-"ALLOC", "ALLOCATED", "DOWN", "DRAIN", "FAIL", "FAILING", "IDLE" or "RESUME". 
-"RESUME is not an actual node state, but will return a DRAINED, DRAINING, 
-or DOWN node to service, either IDLE or ALLOCATED state as appropriate.
-Setting a node "DOWN" will cause all running and suspended jobs on that
-node to be terminated.
+"ALLOC", "ALLOCATED", "DOWN", "DRAIN", "FAIL", "FAILING", "IDLE", "MAINT",
+"POWER_DOWN", "POWER_UP", or "RESUME". 
 If you want to remove a node from service, you typically want to set 
 it's state to "DRAIN". 
 "FAILING" is similar to "DRAIN" except that some applications will  
 seek to relinquish those nodes before the job completes.
+"RESUME" is not an actual node state, but will return a "DRAINED", "DRAINING", 
+or "DOWN" node to service, either "IDLE" or "ALLOCATED" state as appropriate.
+Setting a node "DOWN" will cause all running and suspended jobs on that
+node to be terminated.
+"POWER_DOWN" and "POWER_UP" will use the configured \fISuspendProg\fR and
+\fIResumeProg\fR programs to explicitly place a node in or out of a power 
+saving mode.
 The "NoResp" state will only set the "NoResp" flag for a node without
 changing its underlying state.
 While all of the above states are valid, some of them are not valid new
@@ -438,7 +480,17 @@ node states given their prior state.
 Generally only "DRAIN", "FAIL" and "RESUME" should be used.
 
 .TP
-\fBSPECIFICATIONS FOR UPDATE AND DELETE COMMANDS, PARTITIONS\fR
+\fIWeight\fP=<weight>
+Identify weight to be associated with specified nodes. This allows 
+dynamic changes to weight associated with nodes, which will be used 
+for the subsequent node allocation decisions. 
+Any previously identified weight will be overwritten with the new value.\fBNOTE:\fR The \fIWeight\fP associated with nodes will be reset to
+the values specified in slurm.conf (if any) upon slurmctld restart
+or reconfiguration.
+Update slurm.conf with any changes meant to be persistent.
+
+.TP
+\fBSPECIFICATIONS FOR CREATE, UPDATE, AND DELETE COMMANDS, PARTITIONS\fR
 .TP
 \fIAllowGroups\fP=<name>
 Identify the user groups which may use this partition. 
@@ -458,12 +510,12 @@ that you want to become the new default.
 Specify if the partition and its jobs should be hidden from view. 
 Hidden partitions will by default not be reported by SLURM APIs 
 or commands. 
-Possible values are"YES" and "NO".
+Possible values are "YES" and "NO".
 .TP
 \fIMaxNodes\fP=<count>
 Set the maximum number of nodes which will be allocated to any single job 
 in the partition. Specify a number, "INFINITE" or "UNLIMITED".  (On a
-Bluegene type system this represents a c-node count.)
+Bluegene type system this represents a c\-node count.)
 
 .TP
 \fIMaxTime\fP=<time>
@@ -478,7 +530,7 @@ the next minute.
 .TP
 \fIMinNodes\fP=<count>
 Set the minimum number of nodes which will be allocated to any single job 
-in the partition.   (On a Bluegene type system this represents a c-node count.)
+in the partition.   (On a Bluegene type system this represents a c\-node count.)
 
 .TP
 \fINodes\fP=<name>
@@ -512,6 +564,95 @@ If a partition allocated nodes to running jobs, those jobs will continue
 execution even after the partition's state is set to "DOWN". The jobs 
 must be explicitly canceled to force their termination.
 
+.TP
+\fBSPECIFICATIONS FOR CREATE, UPDATE, AND DELETE COMMANDS, RESERVATIONS\fR
+.TP
+
+.TP
+\fIReservation\fP=<name>
+Identify the name of the reservation to be created, updated, or deleted.  
+This parameter is required for update and is the only parameter for delete.  
+For create, if you do not want to give a reservation name, use 
+"scontrol create res ..." and a name will be created automatically.
+
+.TP
+\fINodeCnt\fP=<num>
+Identify number of nodes to be reserved.  A new reservation must specify either
+NodeCnt or Nodes.
+
+.TP
+\fINodes\fP=<name>
+Identify the node(s) to be reserved. Multiple node names 
+may be specified using simple node range expressions (e.g. "Nodes=lx[10\-20]"). 
+Specify a blank data value to remove all nodes from a reservation: "Nodes=".
+A new reservation must specify either NodeCnt or Nodes.
+
+.TP
+\fIStartTime\fP=<time_spec>
+The start time for the reservation.  A new reservation must specify a start 
+time.  It accepts times of the form \fIHH:MM:SS\fR for
+a specific time of day (seconds are optional).
+(If that time is already past, the next day is assumed.)
+You may also specify \fImidnight\fR, \fInoon\fR, or
+\fIteatime\fR (4pm) and you can have a time\-of\-day suffixed
+with \fIAM\fR or \fIPM\fR for running in the morning or the evening.
+You can also say what day the job will be run, by specifying
+a date of the form \fIMMDDYY\fR or \fIMM/DD/YY\fR or \fIMM.DD.YY\fR, 
+or a date and time as \fIYYYY\-MM\-DD[THH[:MM[:SS]]]\fR.  You can also
+give times like \fInow + count time\-units\fR, where the time\-units
+can be \fIminutes\fR, \fIhours\fR, \fIdays\fR, or \fIweeks\fR
+and you can tell SLURM to run the job today with the keyword
+\fItoday\fR and to run the job tomorrow with the keyword
+\fItomorrow\fR.
+
+.TP
+\fIEndTime\fP=<time_spec>
+The end time for the reservation.  A new reservation must specify an end 
+time or a duration.  Valid formats are the same as for StartTime.
+
+.TP
+\fIDuration\fP=<time>
+The length of a reservation.  A new reservation must specify an end 
+time or a duration.  Valid formats are minutes, minutes:seconds, 
+hours:minutes:seconds, days\-hours, days\-hours:minutes, 
+days\-hours:minutes:seconds, or UNLIMITED.  Time resolution is one minute and 
+second values are rounded up to the next minute.
+
+.TP
+\fIPartitionName\fP=<name>
+Identify the partition to be reserved.
+
+.TP
+\fIFlags\fP=<flags>
+Flags associated with the reservation. 
+Currently "MAINT" (maintenance mode, receives special accounting treatment), 
+"DAILY" (repeat the reservation every day), 
+"WEEKLY" (repeat the reservation every week) and
+"SPEC_NODES" (reservation is for specific nodes, output only) is supported.
+In order to remove the "MAINT", "DAILY" or "WEEKLY" flag with the update
+option, preceed the name with a minus sign. For example:
+Flags=\-MAINT.
+
+.TP
+\fIFeatures\fP=<features>
+Set the reservation's required node features. Multiple values 
+may be comma separated if all features are required (AND operation) or 
+separated by "|" if any of the specified features are required (OR operation).
+Value may be cleared with blank data value, "Features=".
+
+.TP
+\fIUsers\fP=<user list>
+List of users permitted to use the reserved nodes.  
+E.g.  Users=jones1,smith2.
+A new reservation must specify Users and/or Accounts.
+
+.TP
+\fIAccounts\fP=<account list>
+List of accounts permitted to use the reserved nodes.  
+E.g.  Accounts=physcode1,physcode2.  A user in any of the accounts
+may use the reserved nodes.
+A new reservation must specify Users and/or Accounts.
+
 .TP
 \fBSPECIFICATIONS FOR UPDATE, BLOCK \fR
 .TP
@@ -527,7 +668,7 @@ to run on the block. \fBWARNING!!!!\fR This will cancel any
 running job on the block!
 .TP
 \fISubBPName\fP=<name>
-Identify the bluegene ionodes to be updated (i.e. bg000[0-3]). This
+Identify the bluegene ionodes to be updated (i.e. bg000[0\-3]). This
 specification is required.
 .TP
 
@@ -585,13 +726,21 @@ tux2
 .br
 tux3
 .br
+scontrol: create res StartTime=2009-04-01T08:00:00 Duration=5:00:00 Users=dbremer NodeCnt=10
+.br
+Reservation created: dbremer_1
+.br
+scontrol: update Reservation=dbremer_1 Flags=Maint NodeCnt=20
+.br
+scontrol: delete Reservation=dbremer_1
+.br
 scontrol: quit
 .ec
 
 .SH "COPYING"
 Copyright (C) 2002\-2007 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
@@ -611,12 +760,14 @@ details.
 .SH "SEE ALSO"
 \fBscancel\fR(1), \fBsinfo\fR(1), \fBsqueue\fR(1), 
 \fBslurm_checkpoint\fR(3),
+\fBslurm_create_partition\fR(3),
 \fBslurm_delete_partition\fR(3),
 \fBslurm_load_ctl_conf\fR(3), 
 \fBslurm_load_jobs\fR(3), \fBslurm_load_node\fR(3), 
 \fBslurm_load_partitions\fR(3), 
 \fBslurm_reconfigure\fR(3),  \fBslurm_requeue\fR(3), \fBslurm_resume\fR(3),
 \fBslurm_shutdown\fR(3), \fBslurm_suspend\fR(3),
+\fBslurm_takeover\fR(3),
 \fBslurm_update_job\fR(3), \fBslurm_update_node\fR(3), 
 \fBslurm_update_partition\fR(3),
 \fBslurm.conf\fR(5)
diff --git a/doc/man/man1/sinfo.1 b/doc/man/man1/sinfo.1
index d0c73845f..7203cad04 100644
--- a/doc/man/man1/sinfo.1
+++ b/doc/man/man1/sinfo.1
@@ -1,4 +1,4 @@
-.TH SINFO "1" "July 2007" "sinfo 1.3" "Slurm components"
+.TH SINFO "1" "May 2008" "sinfo 2.0" "Slurm components"
 
 .SH "NAME"
 sinfo \- view information about SLURM nodes and partitions.
@@ -94,7 +94,7 @@ when running with various options are
 "%#N %.5D %9P %11T %.4c %.8z %.6m %.8d %.6w %8f %R"
 .TP
 .I "\-\-list\-reasons"
-"%35R %N"
+"%50R %N"
 .TP
 .I "\-\-long \-\-list\-reasons"
 "%50R %6t %N"
@@ -153,6 +153,9 @@ Jobs may share nodes, "yes", "no", or "force"
 \fB%l\fR 
 Maximum time for any job in the format "days\-hours:minutes:seconds"
 .TP
+\fB%L\fR
+Default time for any job in the format "days\-hours:minutes:seconds"
+.TP
 \fB%m\fR 
 Size of memory per node in megabytes
 .TP
@@ -172,6 +175,9 @@ fail or failing states)
 \fB%s\fR 
 Maximum job size in nodes
 .TP
+\fB%S\fR 
+Allowed allocating nodes
+.TP
 \fB%t\fR 
 State of nodes, compact form
 .TP
@@ -251,8 +257,9 @@ default sort value is "N" (increasing node name).
 List nodes only having the given state(s).  Multiple states
 may be comma separated and the comparison is case insensitive.
 Possible values include (case insensitive): ALLOC, ALLOCATED,
-COMP, COMPLETING, DOWN, DRAIN, DRAINED, DRNG, DRAINING, FAIL, 
-FAILING, IDLE, UNK, and UNKNOWN.  
+COMP, COMPLETING, DOWN, DRAIN (for node in DRAINING or DRAINED
+states), DRAINED, DRAINING, FAIL, FAILING, IDLE, MAINT, NO_RESPOND, 
+POWER_SAVE, UNK, and UNKNOWN.  
 By default nodes in the specified state are reported whether 
 they are responding or not.  
 The \fB\-\-dead\fR and \fB\-\-responding\fR options may be 
@@ -420,6 +427,9 @@ man page or the \fBslurm.conf\fR(5) man page for more information.
 \fBIDLE\fR
 The node is not allocated to any jobs and is available for use.
 .TP
+\fBMAINT\fR
+The node is currently in a reservation with a flag value of "maintainence".
+.TP
 \fBUNKNOWN\fR
 The SLURM controller has just started and the node's state
 has not yet been determined.
@@ -514,7 +524,7 @@ Not Responding                      dev8
 .SH "COPYING"
 Copyright (C) 2002\-2007 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/slurm.1 b/doc/man/man1/slurm.1
index 3e4626bf6..20ab95650 100644
--- a/doc/man/man1/slurm.1
+++ b/doc/man/man1/slurm.1
@@ -1,27 +1,32 @@
-.TH SLURM "1" "November 2006" "slurm 1.2" "Slurm system"
+.TH SLURM "1" "March 2009" "slurm 2.0" "Slurm system"
 
 .SH "NAME"
 slurm \- SLURM system overview.
 
 .SH "DESCRIPTION"
 The Simple Linux Utility for Resource Management (SLURM) is an open source,
-fault\-tolerant, and highly scalable cluster management and job scheduling system 
+fault-tolerant, and highly scalable cluster management and job scheduling system
 for large and small Linux clusters. SLURM requires no kernel modifications for
-its operation and is relatively self\-contained. As a cluster resource manager,
-SLURM has three key functions. First, it allocates exclusive and/or non\-exclusive 
+its operation and is relatively self-contained. As a cluster resource manager,
+SLURM has three key functions. First, it allocates exclusive and/or non-exclusive
 access to resources (compute nodes) to users for some duration of time so they
 can perform work. Second, it provides a framework for starting, executing, and
-monitoring work (normally a parallel job) on the set of allocated nodes. Finally, 
-it arbitrates conflicting requests for resources by managing a queue of pending
-work.
+monitoring work (normally a parallel job) on the set of allocated nodes.
+Finally, it arbitrates contention for resources by managing a queue of
+pending work.
+Optional plugins can be used for accounting, advanced reservation,
+gang scheduling (time sharing for parallel jobs), backfill scheduling,
+resource limits by user or bank account,
+and sophisticated multifactor job prioritization algorithms.
 
 SLURM has a centralized manager, \fBslurmctld\fR, to monitor resources and
 work. There may also be a backup manager to assume those responsibilities in the 
 event of failure. Each compute server (node) has a \fBslurmd\fR daemon, which
 can be compared to a remote shell: it waits for work, executes that work, returns 
-status, and waits for more work. 
+status, and waits for more work. An optional \fBslurmDBD\fR (SLURM DataBase Daemon)
+can be used for accounting purposes and to maintain resource limit information.
 
-User tools include \fBsrun\fR to initiate jobs, 
+Basic user tools include \fBsrun\fR to initiate jobs, 
 \fBscancel\fR to terminate queued or running jobs, \fBsinfo\fR to report system 
 status, and \fBsqueue\fR to report the status of jobs. There is also an administrative
 tool \fBscontrol\fR available to monitor and/or modify configuration and state
@@ -36,8 +41,9 @@ Extensive documenation is also available on the internet at
 
 .SH "COPYING"
 Copyright (C) 2005\-2007 The Regents of the University of California.
+Copyright (C) 2008\-2009 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
@@ -53,10 +59,13 @@ FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 details.
 
 .SH "SEE ALSO"
-\fBsacct\fR(1), \fBsalloc\fR(1), \fBsattach\fR(1), \fBsbatch\fR(1), 
-\fBsbcast\fR(1), \fBscancel\fR(1), \fBscontrol\fR(1), \fBsinfo\fR(1), 
-\fBsmap\fR(1), \fBsqueue\fR(1), \fBsrun\fR(1),
+\fBsacct\fR(1), \fBsacctmgr\fR(1), \fBsalloc\fR(1), \fBsattach\fR(1), 
+\fBsbatch\fR(1), \fBsbcast\fR(1), \fBscancel\fR(1), \fBscontrol\fR(1), 
+\fBsinfo\fR(1), \fBsmap\fR(1), \fBsqueue\fR(1), \fBsreport\fR(1), 
+\fBsrun\fR(1),\fBsshare\fR(1), \fBsstate\fR(1), \fBstrigger\fR(1),
 \fBsview\fR(1), 
-\fBbluegene.conf\fR(5), \fBslurm.conf\fR(5), \fBwiki.conf\fR(5),
-\fBslurmctld\fR(8), \fBslurmd\fR(8), \fBslurmstepd\fR(8), \fBspank\fR(8)
+\fBbluegene.conf\fR(5), \fBslurm.conf\fR(5), \fBslurmdbd.conf\fR(5), 
+\fBwiki.conf\fR(5),
+\fBslurmctld\fR(8), \fBslurmd\fR(8), \fBslurmdbd\fR(8), \fBslurmstepd\fR(8), 
+\fBspank\fR(8)
 
diff --git a/doc/man/man1/smap.1 b/doc/man/man1/smap.1
index 3319ce082..c0522ab6c 100644
--- a/doc/man/man1/smap.1
+++ b/doc/man/man1/smap.1
@@ -1,4 +1,4 @@
-.TH SMAP "1" "May 2007" "smap 1.3" "Slurm components"
+.TH SMAP "1" "April 2009" "smap 2.0" "Slurm components"
 
 .SH "NAME"
 smap \- graphically view information about SLURM jobs, partitions, and set 
@@ -30,17 +30,22 @@ Note that unallocated nodes are indicated by a '.' and nodes in the
 DOWN, DRAINED or FAIL state by a '#'.
 .RS
 .TP 15
+.I "b"
+Displays information about BlueGene partitions on the system
+.TP
+.I "c"
+Displays current BlueGene node states and allows users to configure the system.
+.TP
 .I "j"
 Displays information about jobs running on system.
+.TP
+.I "r"
+Display information about advanced reservations. 
+While all current and future reservations will be listed, 
+only currently active reservations will appear on the node map.
 .TP 
 .I "s"
 Displays information about slurm partitions on the system
-.TP
-.I "b"
-Displays information about BG partitions on the system
-.TP
-.I "c"
-Displays current node states and allows users to configure the system.
 .RE
 
 .TP
@@ -90,6 +95,11 @@ scroll the window containing the text information.
 
 .SH "OUTPUT FIELD DESCRIPTIONS"
 .TP
+\fBACCESS_CONTROL\fR
+Identifies the users or bank accounts which can use this advanced reservation.
+A prefix of "A:" indicates that the following account names may use this reservation.
+A prefix of "U:" indicates that the following user names may use this reservation.
+.TP
 \fBAVAIL\fR
 Partition state: \fBup\fR or \fBdown\fR.
 .TP
@@ -99,6 +109,9 @@ BlueGene Block Name\fR.
 \fBCONN\fR
 Connection Type: \fBTORUS\fR or \fBMESH\fR or \fBSMALL\fR (for small blocks).
 .TP
+\fBEND_TIME\fR
+The time when an advanced reservation ended.
+.TP
 \fBID\fR
 Key to identify the nodes associated with this entity in the node chart.
 .TP
@@ -106,10 +119,11 @@ Key to identify the nodes associated with this entity in the node chart.
 Mode Type: \fBCOPROCESS\fR or \fBVIRTUAL\fR.
 .TP
 \fBNAME\fR
-Name of the job.
+Name of the job or advanced reservation.
 .TP
 \fBNODELIST\fR or \fBBP_LIST\fR
-Names of nodes or base partitions associated with this configuration/partition.
+Names of nodes or base partitions associated with this configuration, 
+partition or reservation.
 .TP
 \fBNODES\fR
 Count of nodes or base partitions with this particular configuration.
@@ -125,6 +139,9 @@ CG (completing), CD  (completed),
 F (failed), TO (timeout), and NF (node failure). See 
 \fBJOB STATE CODES\fR section below for more information.
 .TP
+\fBSTART_TIME\fR
+The time when an advanced reservation started.
+.TP
 \fBSTATE\fR
 State of the nodes. 
 Possible states include: allocated, completing, down, 
@@ -388,6 +405,9 @@ man page or the \fBslurm.conf\fR(5) man page for more information.
 \fBIDLE\fR
 The node is not allocated to any jobs and is available for use.
 .TP
+\fBMAINT\fR
+The node is currently in a reservation with a flag value of "maintainence".
+.TP
 \fBUNKNOWN\fR
 The SLURM controller has just started and the node's state
 has not yet been determined.
@@ -436,8 +456,9 @@ The location of the SLURM configuration file.
 
 .SH "COPYING"
 Copyright (C) 2004\-2007 The Regents of the University of California.
+Copyright (C) 2008\-2009 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/sprio.1 b/doc/man/man1/sprio.1
new file mode 100644
index 000000000..379432758
--- /dev/null
+++ b/doc/man/man1/sprio.1
@@ -0,0 +1,221 @@
+.TH SPRIO "1" "March 2009" "sprio 2.0" "SLURM commands"
+
+.SH "NAME"
+sprio \- view the factors that comprise a job's scheduling priority
+
+.SH "SYNOPSIS"
+\fBsprio\fR [\fIOPTIONS\fR...]
+
+.SH "DESCRIPTION"
+\fBsprio\fR is used to view the components of a job's scheduling
+priority when the multi-factor priority plugin is installed.
+\fBsprio\fR is a read-only utility that extracts information from the
+multi-factor priority plugin.  By default, \fBsprio\fR returns
+information for all pending jobs.  Options exist to display specific
+jobs by job ID and user name.
+
+.SH "OPTIONS"
+
+.TP
+\fB\-h\fR, \fB\-\-noheader\fR
+Do not print a header on the output.
+
+.TP
+\fB\-\-help\fR
+Print a help message describing all options \fBsprio\fR.
+
+.TP
+\fB\-j <job_id_list>\fR, \fB\-\-jobs=<job_id_list>\fR
+Requests a comma separated list of job ids to display.  Defaults to all jobs.
+
+.TP
+\fB\-l\fR, \fB\-\-long\fR
+Report more of the available information for the selected jobs.
+
+.TP
+\fB\-n\fR, \fB\-\-norm\fR
+Display the normalized priority factors for the selected jobs.
+
+.TP
+\fB\-o <output_format>\fR, \fB\-\-format=<output_format>\fR
+Specify the information to be displayed, its size and position
+(right or left justified).
+The default formats with various options are
+
+.RS
+.TP 15
+\fIdefault\fR
+"%.7i %.8u %.10A %.10F %.10J %.10P %.10Q"
+.TP
+\fI\-l, \-\-long\fR
+"%.7i %.8u %.10Y %.10A %.10F %.10J %.10P %.10Q %.6N"
+.RE
+
+.IP
+The format of each field is "%[.][size]type".
+.RS
+.TP 8
+\fIsize\fR
+is the minimum field size.
+If no size is specified, whatever is needed to print the information will be used.
+.TP
+\fI .\fR
+indicates the output should be left justified.
+By default, output is right justified.
+.RE
+
+.IP
+Valid \fItype\fR specifications include:
+
+.RS
+.TP 4
+\fB%a\fR
+Normalized age priority
+.TP
+\fB%A\fR
+Weighted age priority
+.TP
+\fB%f\fR
+Normalized fair-share priority
+.TP
+\fB%F\fR
+Weighted fair-share priority
+.TP
+\fB%i\fR
+Job ID
+.TP
+\fB%j\fR
+Normalized job size priority
+.TP
+\fB%J\fR
+Weighted job size priority
+.TP
+\fB%N\fR
+Nice adjustment
+.TP
+\fB%p\fR
+Normalized partition priority
+.TP
+\fB%P\fR
+Weighted partition priority
+.TP
+\fB%q\fR
+Normalized quality of service priority
+.TP
+\fB%Q\fR
+Weighted quality of service priority
+.TP
+\fB%u\fR
+User name for a job
+.TP
+\fB%Y\fR
+Job priority
+.TP
+\fB%y\fR
+Normalized job priority
+.RE
+
+.TP
+\fB\-u <user_list>\fR, \fB\-\-user=<user_list>\fR
+Request jobs from a comma separated list of users.  The list can
+consist of user names or user id numbers.
+
+.TP
+\fB\-\-usage\fR
+Print a brief help message listing the \fBsprio\fR options.
+
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+Report details of sprios actions.
+
+.TP
+\fB\-V\fR , \fB\-\-version\fR
+Print version information and exit.
+
+.TP
+\fB\-w\fR , \fB\-\-weights\fR Display the configured weights for each
+factor.  This is for information purposes only.  Actual job data is
+suppressed.
+
+.SH "EXAMPLES"
+.eo
+Print the list of all pending jobs with their weighted priorities
+.br
+> sprio
+.br
+  JOBID   PRIORITY        AGE  FAIRSHARE    JOBSIZE  PARTITION        QOS
+.br
+  65539      62664          0      51664       1000      10000          0
+.br
+  65540      62663          0      51663       1000      10000          0
+.br
+  65541      62662          0      51662       1000      10000          0
+.ec
+
+.eo
+Print the list of all pending jobs with their normalized priorities
+.br
+> sprio -n
+.br
+  JOBID PRIORITY   AGE        FAIRSHARE  JOBSIZE    PARTITION  QOS
+.br
+  65539 0.00001459 0.0007180  0.5166470  1.0000000  1.0000000  0.0000000
+.br
+  65540 0.00001459 0.0007180  0.5166370  1.0000000  1.0000000  0.0000000
+.br
+  65541 0.00001458 0.0007180  0.5166270  1.0000000  1.0000000  0.0000000
+.ec
+
+.eo
+Print the job priorities for specific jobs
+.br
+> sprio --jobs=65548,65547
+.br
+  JOBID   PRIORITY        AGE  FAIRSHARE    JOBSIZE  PARTITION        QOS
+.br
+  65547      62078          0      51078       1000      10000          0
+.br
+  65548      62077          0      51077       1000      10000          0
+.ec
+
+.eo
+Print the job priorities for jobs of specific users
+.br
+> sprio --users=fred,sally
+.br
+  JOBID     USER  PRIORITY       AGE  FAIRSHARE   JOBSIZE  PARTITION     QOS
+.br
+  65548     fred     62079         1      51077      1000      10000       0
+.br
+  65549    sally     62080         1      51078      1000      10000       0
+.ec
+
+.eo
+Print the configured weights for each priority component
+.br
+> sprio -w
+.br
+  JOBID   PRIORITY        AGE  FAIRSHARE    JOBSIZE  PARTITION        QOS
+.br
+  Weights                1000     100000       1000      10000          1
+.ec
+
+.SH "COPYING"
+Copyright (C) 2009 Lawrence Livermore National Security.
+Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+CODE\-OCEC\-09\-009. All rights reserved.
+.LP
+This file is part of SLURM, a resource management program.
+For details, see <https://computing.llnl.gov/linux/slurm/>.
+.LP
+SLURM 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.
+.LP
+SLURM 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.
+.SH "SEE ALSO"
+\fBsqueue\fR(1), \fBsshare\fR(1)
diff --git a/doc/man/man1/squeue.1 b/doc/man/man1/squeue.1
index f933846ed..349da10d5 100644
--- a/doc/man/man1/squeue.1
+++ b/doc/man/man1/squeue.1
@@ -1,4 +1,4 @@
-.TH SQUEUE "1" "May 2008" "squeue 1.3" "Slurm components"
+.TH SQUEUE "1" "May 2008" "squeue 2.0" "Slurm components"
 
 .SH "NAME"
 squeue \- view information about jobs located in the SLURM scheduling queue.
@@ -39,10 +39,8 @@ specified (in seconds).
 By default, prints a time stamp with the header.
 
 .TP
-\fB\-j\fR, \fB\-\-jobs\fR
-Specify the jobs to view.  This flag indicates that a comma separated list 
-of jobs to view follows without an equal sign (see examples).
-Defaults to all jobs.
+\fB\-j <job_id_list>\fR, \fB\-\-jobs=<job_id_list>\fR
+Requests a comma separated list of job ids to display.  Defaults to all jobs.
 
 .TP
 \fB\-l\fR, \fB\-\-long\fR
@@ -65,10 +63,10 @@ The default formats with various options are
 .RS
 .TP 15
 \fIdefault\fR
-"%.7i %.9P %.8j %.8u %.2t %.9M %.6D %R"
+"%.7i %.9P %.8j %.8u %.2t %.10M %.6D %R"
 .TP
 \fI\-l, \-\-long\fR
-".7i %.9P %.8j %.8u %.8T %.9M %.9l %.6D %R"
+"%.7i %.9P %.8j %.8u %.8T %.10M %.9l %.6D %R"
 .TP
 \fI\-s, \-\-steps\fR
 "%10i %.8j %.9P %.8u %.9M %N"
@@ -247,6 +245,9 @@ User name for a job or job step.
 \fB%U\fR 
 User ID for a job or job step.
 .TP
+\fB%v\fR 
+Reservation for the job.
+.TP
 \fB%x\fR 
 List of node names explicitly excluded by the job.
 .TP
@@ -287,7 +288,7 @@ This uses the same field specifciation as the <output_format>.
 Multiple sorts may be performed by listing multiple sort fields 
 separated by commas.
 The field specifications may be preceeded by "+" or "\-" for 
-assending (default) and desending order respectively. 
+ascending (default) and descending order respectively. 
 For example, a sort value of "P,U" will sort the
 records by partition name then by user id. 
 The default value of sort for jobs is "P,t,\-p" (increasing partition 
@@ -310,8 +311,8 @@ See the \fBJOB STATE CODES\fR section below for more information.
 
 .TP
 \fB\-u <user_list>\fR, \fB\-\-user=<user_list>\fR
-Specifies a comma separated list of users whose jobs or job steps are to be
-reported. The list can consist of user names or user id numbers.
+Request jobs or job steps from a comma separated list of users.  The
+list can consist of user names or user id numbers.
 
 .TP
 \fB\-\-usage\fR
@@ -494,7 +495,7 @@ Print information only about job step 65552.1:
 .SH "COPYING"
 Copyright (C) 2002\-2007 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/sreport.1 b/doc/man/man1/sreport.1
index 3232b168f..115f29d45 100644
--- a/doc/man/man1/sreport.1
+++ b/doc/man/man1/sreport.1
@@ -1,14 +1,13 @@
-.TH SREPORT "1" "October 2008" "sreport 1.3" "Slurm components"
+.TH SREPORT "1" "February 2009" "sreport 2.0" "Slurm components"
 
 .SH "NAME"
-sreport \- Used to generate reports from the slurm accounting data.
+sreport \- Generate reports from the slurm accounting data.
 
 .SH "SYNOPSIS"
 \fBsreport\fR [\fIOPTIONS\fR...] [\fICOMMAND\fR...]
 
 .SH "DESCRIPTION"
-\fBsreport\fR is used to generate certain reports.  More can be added
-at any time.  It provides a view into accounting data gathered from slurm via
+\fBsreport\fR is used to generate certain reports. It provides a view into accounting data gathered from slurm via
 the account information maintained within a database with the interface 
 being provided by the \fBslurmdbd\fR (Slurm Database daemon).
 
@@ -16,49 +15,43 @@ being provided by the \fBslurmdbd\fR (Slurm Database daemon).
 
 .TP
 \fB\-a\fR, \fB\-\-all_clusters\fR
-Use all clusters instead of only cluster from where the command was run.
-
+Use all clusters instead of only the cluster from where the command was run.
 .TP
 \fB\-h\fR, \fB\-\-help\fR
 Print a help message describing the usage of \fBsreport\fR.
-This is equivalent to the \fBhelp\fR command.
-
 .TP
-\fB\-n\fR, \fB\-\-no_header\fR
+\fB\-n\fR, \fB\-\-noheader\fR
 Don't display header when listing results.
-
 .TP
 \fB\-p\fR, \fB\-\-parsable\fR
 Output will be '|' delimited with a '|' at the end.
-
 .TP
 \fB\-P\fR, \fB\-\-parsable2\fR
 Output will be '|' delimited without a '|' at the end.
-
 .TP
 \fB\-q\fR, \fB\-\-quiet\fR
 Print no warning or informational messages, only error messages.
-This is equivalent to the \fBquiet\fR command.
-
 .TP
 \fB\-t <format>\fR
 Specify the output time format. 
 Time format options are case insensitive and may be abbreviated.
 The default format is Minutes.
-Supported time format options are listed with the \fBtime\fP command below.
-
+Supported time format options are listed in the \fBtime\fP command
+section below.
 .TP
 \fB\-v\fR, \fB\-\-verbose\fR
 Print detailed event logging. 
-This is equivalent to the \fBverbose\fR command.
-
 .TP
 \fB\-V\fR , \fB\-\-version\fR
 Print version information and exit.
-This is equivalent to the \fBversion\fR command.
 
 .SH "COMMANDS"
 
+.TP
+\<keyword\> may be omitted from the execute line and sreport will
+execute in interactive mode. sreport will process commands as entered until
+explicitly terminated.
+
 .TP
 \fBexit\fP
 Terminate the execution of sreport.
@@ -68,6 +61,14 @@ Identical to the \fBquit\fR command.
 \fBhelp\fP
 Display a description of sreport options and commands.
 
+.TP
+\fBparsable\fP
+Output will be | delimited with an ending '|'.
+
+.TP
+\fBparsable2\fP
+Output will be | delimited without an ending '|'.
+
 .TP
 \fBquiet\fP
 Print no warning or informational messages, only fatal error messages.
@@ -109,14 +110,11 @@ Percentage of Total
 
 .TP
 \fBverbose\fP
-Print detailed event logging. 
-This includes time\-stamps on data structures, record counts, etc.
-This is an independent command with no options meant for use in interactive mode.
+Enable detailed event logging. 
 
 .TP
 \fBversion\fP
-Display the version number of sreport being executed.
-     \-q or \-\-quiet: equivalent to \"quiet\" command                        \n\
+Display the sreport version number.
 
 .TP
 \fB!!\fP
@@ -124,17 +122,28 @@ Repeat the last command executed.
 
 .SH "REPORT TYPES"
 .TP
-\fBcluster\fP, \fBjob\fP, and \fBuser\fP
+Valid report types are:
+\fBcluster\fP \<REPORT\> \<OPTIONS\>
+
+\fBjob\fP \<REPORT\> \<OPTIONS\>
+
+\fBuser\fP \<REPORT\> \<OPTIONS\>
+.RE
 
 .TP
-Various reports are as follows...
-     cluster \- AccountUtilizationByUser, UserUtilizationByAccount,
-     UserUtilizationByWckey, Utilization, WCKeyUtilizationByUser
-     job     \- SizesByAccount, SizesByWckey
-     user    \- TopUsage
+\<REPORT\> options for each type include:
+\fBcluster\fP	  \- AccountUtilizationByUser, UserUtilizationByAccount,
+UserUtilizationByWckey, Utilization, WCKeyUtilizationByUser
+
+\fBjob\fP	  \- SizesByAccount, SizesByWckey
+
+\fBreservation\fP \- Utilization
+
+\fBuser\fP	\- TopUsage
 
 .TP
 
+
 .TP
 REPORT DESCRIPTION
 .RS
@@ -158,7 +167,7 @@ on separate lines.
 .TP
 .B cluster Utilization
 This report will display total usage divided by Allocated, Down,
-Idle, and resrved time for selected clusters.  Reserved time
+Idle, and Reserved time for selected clusters.  Reserved time
 refers to time that a job was waiting for resources after the job
 had become eligible.  If the value is not of importance for you
 the number should be grouped with idle time.
@@ -180,6 +189,10 @@ accounts listed.
 This report will dispay the amount of time for each wckey for job ranges
 specified by the 'grouping=' option.  
 
+.TP
+.B reservation Utilization
+This report will display total usage for reservations on the systems.
+
 .TP
 .B user TopUsage
 Displays the top users on a cluster.  Use the group option to group
@@ -194,7 +207,7 @@ COMMON FOR ALL TYPES
 .RS
 .TP
 .B All_Clusters
-Use all monitored clusters default is local cluster.
+Use all monitored clusters. Default is local cluster.
 .TP
 .B Clusters=<OPT>
 List of clusters to include in report.  Default is local cluster.
@@ -205,6 +218,7 @@ Valid time formats are...
 HH:MM[:SS] [AM|PM]
 MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]
 MM/DD[/YY]-HH:MM[:SS]         
+YYYY-MM-DD[THH[:MM[:SS]]]
 .TP
 .B Format=<OPT>
 Comma separated list of fields to display in report.
@@ -215,6 +229,7 @@ Valid time formats are...
 HH:MM[:SS] [AM|PM]
 MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]
 MM/DD[/YY]-HH:MM[:SS]         
+YYYY-MM-DD[THH[:MM[:SS]]]
 .RE
 
 .TP
@@ -228,7 +243,7 @@ Default is all.
 .TP
 .B Tree
 When used with the AccountUtilizationByUser report will span the
-accounts as they in the hierarchy.
+accounts as they are in the hierarchy.
 .TP
 .B Users=<OPT>
 When used with any report other than Utilization, List of users to
@@ -265,6 +280,9 @@ Comma separated list of size groupings.   (i.e. 50,100,150 would group job cpu c
 .B Jobs=<OPT>
 List of jobs/steps to include in report.  Default is all.
 .TP
+.B Nodes=<OPT>
+Only show jobs that ran on these nodes. Default is all.
+.TP
 .B Partitions=<OPT>
 List of partitions jobs ran on to include in report.  Default is all.
 .TP
@@ -281,6 +299,16 @@ SizesbyWckey report all users summed together.  If you want only
 certain users specify them them with the Users= option.
 .RE
 
+.TP
+RESERVATION
+.TP
+.B Names=<OPT>
+List of reservations to use for the report. Default is all.
+.TP
+.B Nodes=<OPT>
+Only show reservations that used these nodes. Default is all.
+.RE
+
 .TP
 USER
 .RS
@@ -298,7 +326,7 @@ Default is 10.
 .TP
 .B Users=<OPT>
 List of users jobs to include in report.  Default is all.
-.RE
+.RE  
 
 .TP
  
@@ -321,16 +349,24 @@ List of users jobs to include in report.  Default is all.
        SizesByWckey
              \- Wckey, Cluster
 
+\fBReservation\fP
+       Utilization
+             \- Allocated, Associations, Cluster, CPUCount, CPUTime,
+                End, Idle, Name, Nodes, Start, TotalTime
+
 \fBUser\fP
        TopUsage
              \- Account, Cluster, Login, Proper, Used
                                                                            
-.TP         
+.TP
+All commands and options are case-insensitive.
+.TP
+
 .SH "EXAMPLES"
 .TP
 \fBsreport job sizesbyaccount\fP
 .TP
-\fBreport cluster utilization\fP
+\fBsreport cluster utilization\fP
 .TP
 \fBsreport user top\fP
 .TP
@@ -348,12 +384,11 @@ cluster zeus
 \fBsreport user topusage start=2/16/09 end=2/23/09 \-t percent account=lc\fP
 Report top usage in percent of the lc account during the specified week
 .TP
-               
 
 .SH "COPYING"
-Copyright (C) 2008 Lawrence Livermore National Security.
+Copyright (C) 2009 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
@@ -369,4 +404,4 @@ FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 details.
 
 .SH "SEE ALSO"
-\fBsacct\fR(1), \fBslurmdbe\fR(8)
+\fBsacct\fR(1), \fBslurmdbd\fR(8)
diff --git a/doc/man/man1/srun.1 b/doc/man/man1/srun.1
index c4d024785..d7696d45a 100644
--- a/doc/man/man1/srun.1
+++ b/doc/man/man1/srun.1
@@ -1,12 +1,12 @@
-.TH SRUN "1" "August 2008" "srun 1.3" "slurm components"
+.TH "srun" "1" "SLURM 2.0" "April 2009" "SLURM Commands"
 
 .SH "NAME"
-srun \- run parallel jobs
+srun \- Run parallel jobs
 
-.SH SYNOPSIS
+.SH "SYNOPSIS"
 \fBsrun\fR            [\fIOPTIONS\fR...]  \fIexecutable \fR[\fIargs\fR...]
 
-.SH DESCRIPTION
+.SH "DESCRIPTION"
 Run a parallel job on cluster managed by SLURM.  If necessary, srun will
 first create a resource allocation in which to run the parallel job.
 
@@ -14,15 +14,15 @@ first create a resource allocation in which to run the parallel job.
 .LP
 
 .TP
-\fB\-\-acctg\-freq\fR=\fIseconds\fR
+\fB\-\-acctg\-freq\fR=<\fIseconds\fR>
 Define the job accounting sampling interval.
-This can be used to override the \fIJobAcctGatherFrequency\fR parameter in SLURM's 
+This can be used to override the \fIJobAcctGatherFrequency\fR parameter in SLURM's
 configuration file, \fIslurm.conf\fR.
 A value of zero disables real the periodic job sampling and provides accounting
 information only on job termination (reducing SLURM interference with the job).
 
 .TP
-\fB\-B\fR \fB\-\-extra\-node\-info\fR=\fIsockets\fR[:\fIcores\fR[:\fIthreads\fR]]
+\fB\-B\fR \fB\-\-extra\-node\-info\fR=<\fIsockets\fR[:\fIcores\fR[:\fIthreads\fR]]>
 Request a specific allocation of resources with details as to the
 number and type of computational resources within a cluster:
 number of sockets (or physical processors) per node,
@@ -35,9 +35,9 @@ resources of that type are to be utilized.
 As with nodes, the individual levels can also be specified in separate
 options if desired:
 .nf
-    \fB\-\-sockets\-per\-node\fR=\fIsockets\fR
-    \fB\-\-cores\-per\-socket\fR=\fIcores\fR
-    \fB\-\-threads\-per\-core\fR=\fIthreads\fR
+    \fB\-\-sockets\-per\-node\fR=<\fIsockets\fR>
+    \fB\-\-cores\-per\-socket\fR=<\fIcores\fR>
+    \fB\-\-threads\-per\-core\fR=<\fIthreads\fR>
 .fi
 When the task/affinity plugin is enabled,
 specifying an allocation in this manner also instructs SLURM to use
@@ -50,21 +50,22 @@ If select/cons_res is configured, it must have a parameter of CR_Core,
 CR_Core_Memory, CR_Socket, or CR_Socket_Memory. 
 
 .TP
-\fB\-\-begin\fR=\fItime\fR
+\fB\-\-begin\fR=<\fItime\fR>
 Defer initiation of this job until the specified time.
-It accepts times of the form \fIHH:MM:SS\fR to run a job at 
+It accepts times of the form \fIHH:MM:SS\fR to run a job at
 a specific time of day (seconds are optional).
-(If that time is already past, the next day is assumed.) 
-You may also specify \fImidnight\fR, \fInoon\fR, or 
-\fIteatime\fR (4pm) and you can have a time\-of\-day suffixed 
-with \fIAM\fR or \fIPM\fR for running in the morning or the evening.  
+(If that time is already past, the next day is assumed.)
+You may also specify \fImidnight\fR, \fInoon\fR, or
+\fIteatime\fR (4pm) and you can have a time\-of\-day suffixed
+with \fIAM\fR or \fIPM\fR for running in the morning or the evening.
 You can also say what day the job will be run, by specifying
 a date of the form \fIMMDDYY\fR or \fIMM/DD/YY\fR
-or \fIMM.DD.YY\fR. You can also
+\fIYYYY-MM-DD\fR. Combine date and time using the following
+format \fIYYYY\-MM\-DD[THH[:MM[:SS]]]\fR. You can also
 give times like \fInow + count time\-units\fR, where the time\-units
-can be \fIseconds\fR (default), \fIminutes\fR, \fIhours\fR, 
-\fIdays\fR, or \fIweeks\fR and you can tell SLURM to run 
-the job today with the keyword \fItoday\fR and to run the 
+can be \fIseconds\fR (default), \fIminutes\fR, \fIhours\fR,
+\fIdays\fR, or \fIweeks\fR and you can tell SLURM to run
+the job today with the keyword \fItoday\fR and to run the
 job tomorrow with the keyword \fItomorrow\fR.
 The value may be changed after job submission using the
 \fBscontrol\fR command.
@@ -73,11 +74,11 @@ For example:
    \-\-begin=16:00
    \-\-begin=now+1hour
    \-\-begin=now+60           (seconds by default)
-   \-\-begin=02/22/08-12:34:67
+   \-\-begin=2010-01-20T12:34:00
 .fi
 
 .TP
-\fB\-\-checkpoint\fR=\fItime\fR
+\fB\-\-checkpoint\fR=<\fItime\fR>
 Specifies the interval between creating checkpoints of the job step. 
 By default, the job step will no checkpoints created.
 Acceptable time formats include "minutes", "minutes:seconds", 
@@ -85,12 +86,19 @@ Acceptable time formats include "minutes", "minutes:seconds",
 "days\-hours:minutes:seconds".
 
 .TP
-\fB\-\-checkpoint\-path\fR=\fIdirectory\fR
-Specifies the directory into which the job step's checkpoint should 
-be written (used by the checkpoint/xlch plugin only).
+\fB\-\-checkpoint\-dir\fR=<\fIdirectory\fR>
+Specifies the directory into which the job or job step's checkpoint should 
+be written (used by the checkpoint/blcr and checkpoint/xlch plugins only).
+The default value is the current working directory.
+Checkpoint files will be of the form "<job_id>.ckpt" for jobs
+and "<job_id>.<step_id>.ckpt" for job steps.
 
 .TP
-\fB\-C\fR, \fB\-\-constraint\fR[=]<\fIlist\fR>
+\fB\-\-comment\fR=<\fIstring\fR>
+An arbitrary comment.
+
+.TP
+\fB\-C\fR, \fB\-\-constraint\fR=<\fIlist\fR>
 Specify a list of constraints. 
 The constraints are features that have been assigned to the nodes by 
 the slurm administrator. 
@@ -105,7 +113,7 @@ There is no mechanism to specify that you want one node with feature
 node has both features.
 If only one of a set of possible options should be used for all allocated 
 nodes, then use the OR operator and enclose the options within square brackets. 
-For example: "\fB\-\-constraint="[rack1|rack2|rack3|rack4]"\fR might 
+For example: "\fB\-\-constraint=[rack1|rack2|rack3|rack4]"\fR might 
 be used to specify that all nodes must be allocated on a single rack of 
 the cluster, but any of those four racks can be used.
 A request can also specify the number of nodes needed with some feature
@@ -117,84 +125,144 @@ Constraints with node counts may only be combined with AND operators.
 If no nodes have the requested features, then the job will be rejected 
 by the slurm job manager.
 
+.TP
+\fB\-\-contiguous\fR
+If set, then the allocated nodes must form a contiguous set.
+Not honored with the \fBtopology/tree\fR or \fBtopology/3d_torus\fR
+plugins, both of which can modify the node ordering.
+Not honored for a job step's allocation.
+
+.TP
+\fB\-\-core\fR=<\fItype\fR>
+Adjust corefile format for parallel job. If possible, srun will set
+up the environment for the job such that a corefile format other than
+full core dumps is enabled. If run with type = "list", srun will
+print a list of supported corefile format types to stdout and exit.
+
 .TP
 \fB\-\-cpu_bind\fR=[{\fIquiet,verbose\fR},]\fItype\fR
 Bind tasks to CPUs. Used only when the task/affinity plugin is enabled.
+The configuration parameter \fBTaskPluginParam\fR may override these options.
+For example, if \fBTaskPluginParam\fR is configured to bind to cores,
+your job will not be able to bind tasks to sockets.
 NOTE: To have SLURM always report on the selected CPU binding for all
 commands executed in a shell, you can enable verbose mode by setting
 the SLURM_CPU_BIND environment variable value to "verbose".
 
-Note that the SLURM_CPU_BIND environment variable will propagate into the
-tasks' environment in order to perform binding in batch submissions.
-If you do not wish to propagate \-\-cpu_bind to successive srun commands,
-simply clear the variable in the task's script before executing srun:
-
-.nf
-        unsetenv SLURM_CPU_BIND
-.fi
-
-In addition, to SLURM_CPU_BIND, the following informational environment
-variables are also set when SLURM_CPU_BIND is in use:
+The following informational environment variables are set when \fB\-\-cpu_bind\fR
+is in use:
 .nf
         SLURM_CPU_BIND_VERBOSE
         SLURM_CPU_BIND_TYPE
         SLURM_CPU_BIND_LIST
 .fi
 
-See the \fBENVIRONMENT VARIABLE\fR section for a more detailed description 
+See the \fBENVIRONMENT VARIABLE\fR section for a more detailed description
 of the individual SLURM_CPU_BIND* variables.
 
-When using \-\-cpus\-per\-task to run multithreaded tasks, be aware that
+When using \fB\-\-cpus\-per\-task\fR to run multithreaded tasks, be aware that
 CPU binding is inherited from the parent of the process.  This means that
 the multithreaded task should either specify or clear the CPU binding
 itself to avoid having all threads of the multithreaded task use the same
-mask/CPU as the parent.  Alternatively, fat masks (masks which specify more 
+mask/CPU as the parent.  Alternatively, fat masks (masks which specify more
 than one allowed CPU) could be used for the tasks in order to provide
 multiple CPUs for the multithreaded tasks.
 
+By default, a job step has access to every CPU allocated to the job.
+To ensure that distinct CPUs are allocated to each job step, us the
+\fB\-\-exclusive\fR option.
+
+If the job step allocation includes an allocation with a number of
+sockets, cores, or threads equal to the number of tasks to be started
+then the tasks will by default be bound to the appropriate resources.
+Disable this mode of operation by explicitly setting "-\-cpu\-bind=none".
+
+Note that a job step can be allocated different numbers of CPUs on each node
+or be allocated CPUs not starting at location zero. Therefore one of the
+options which automatically generate the task binding is recommended.
+Explicitly specified masks or bindings are only honored when the job step
+has been allocated every available CPU on the node.
+
+Binding a task to a NUMA locality domain means to bind the task to the set of
+CPUs that belong to the NUMA locality domain or "NUMA node".
+If NUMA locality domain options are used on systems with no NUMA support, then
+each socket is considered a locality domain.
+
 Supported options include:
 .PD 1
 .RS
 .TP
 .B q[uiet]
-quietly bind before task runs (default)
+Quietly bind before task runs (default)
 .TP
 .B v[erbose]
-verbosely report binding before task runs
+Verbosely report binding before task runs
 .TP
 .B no[ne]
-don't bind tasks to CPUs (default)
+Do not bind tasks to CPUs (default)
 .TP
 .B rank
-bind by task rank
+Automatically bind by task rank.
+Task zero is bound to socket (or core or thread) zero, etc.
+Not supported unless the entire node is allocated to the job.
 .TP
 .B map_cpu:<list>
-bind by mapping CPU IDs to tasks as specified
+Bind by mapping CPU IDs to tasks as specified
 where <list> is <cpuid1>,<cpuid2>,...<cpuidN>.
 CPU IDs are interpreted as decimal values unless they are preceded
-with '0x' in which case they interpreted as hexadecimal values.
+with '0x' in which case they are interpreted as hexadecimal values.
+Not supported unless the entire node is allocated to the job.
 .TP
 .B mask_cpu:<list>
-bind by setting CPU masks on tasks as specified
+Bind by setting CPU masks on tasks as specified
 where <list> is <mask1>,<mask2>,...<maskN>.
 CPU masks are \fBalways\fR interpreted as hexadecimal values but can be
 preceded with an optional '0x'.
+Not supported unless the entire node is allocated to the job.
+.TP
+.B rank_ldom
+Bind to a NUMA locality domain by rank
+.TP
+.B map_ldom:<list>
+Bind by mapping NUMA locality domain IDs to tasks as specified where
+<list> is <ldom1>,<ldom2>,...<ldomN>.
+The locality domain IDs are interpreted as decimal values unless they are
+preceded with '0x' in which case they areinterpreted as hexadecimal values.
+Not supported unless the entire node is allocated to the job.
+.TP
+.B mask_ldom:<list>
+Bind by setting NUMA locality domain masks on tasks as specified
+where <list> is <mask1>,<mask2>,...<maskN>.
+NUMA locality domain masks are \fBalways\fR interpreted as hexadecimal
+values but can be preceded with an optional '0x'.
+Not supported unless the entire node is allocated to the job.
 .TP
 .B sockets
-auto\-generated masks bind to sockets
+Automatically generate masks binding tasks to sockets.
+If the number of tasks differs from the number of allocated sockets
+this can result in sub\-optimal binding.
 .TP
 .B cores
-auto\-generated masks bind to cores
+Automatically generate masks binding tasks to cores.
+If the number of tasks differs from the number of allocated cores
+this can result in sub\-optimal binding.
 .TP
 .B threads
-auto\-generated masks bind to threads
+Automatically generate masks binding tasks to threads.
+If the number of tasks differs from the number of allocated threads
+this can result in sub\-optimal binding.
+.TP
+.B ldoms
+Automatically generate masks binding tasks to NUMA locality domains.
+If the number of tasks differs from the number of allocated locality domains
+this can result in sub\-optimal binding.
 .TP
 .B help
-show this help message
+Show this help message
 .RE
 
 .TP
-\fB\-c\fR, \fB\-\-cpus\-per\-task\fR=\fIncpus\fR
+\fB\-c\fR, \fB\-\-cpus\-per\-task\fR=<\fIncpus\fR>
 Request that \fIncpus\fR be allocated \fBper process\fR. This may be
 useful if the job is multithreaded and requires more than one CPU
 per task for optimal performance. The default is one CPU per process.
@@ -210,44 +278,20 @@ resources to the job step from the job's allocation when running
 multiple job steps with the \fB\-\-exclusive\fR option.
 
 .TP
-\fB\-\-comment\fR=<\fIstring\fR>
-An arbitrary comment.
-
-.TP
-\fB\-\-contiguous\fR
-Demand a contiguous range of nodes. The default is "yes". Specify
-\-\-contiguous=no if a contiguous range of nodes is not a constraint.
-
-.TP
-\fB\-\-core\fR=\fItype\fR
-Adjust corefile format for parallel job. If possible, srun will set
-up the environment for the job such that a corefile format other than
-full core dumps is enabled. If run with type = "list", srun will
-print a list of supported corefile format types to stdout and exit.
-
-.TP
-\fB\-\-ctrl\-comm\-ifhn\fR=\fIaddr\fR
-Specify the address or hostname to be used for PMI communications only
-(task communication and synchronization primitives for MPCIH2).
-Defaults to hostname (response from getnodename function).
-Use of this is required if a DNS lookup can not be performed on 
-the hostname or if that address is blocked from the compute nodes.
-
-.TP
-\fB\-D\fR, \fB\-\-chdir\fR=\fIpath\fR
+\fB\-D\fR, \fB\-\-chdir\fR=<\fIpath\fR>
 have the remote processes do a chdir to \fIpath\fR before beginning
 execution. The default is to chdir to the current working directory
 of the \fBsrun\fR process.
 
 .TP
-\fB\-d\fR, \fB\-\-slurmd\-debug\fR=\fIlevel\fR
+\fB\-d\fR, \fB\-\-slurmd\-debug\fR=<\fIlevel\fR>
 Specify a debug level for slurmd(8). \fIlevel\fR may be an integer value
 between 0 [quiet, only errors are displayed] and 4 [verbose operation]. 
 The slurmd debug information is copied onto the stderr of
 the job. By default only errors are displayed. 
 
 .TP
-\fB\-e\fR, \fB\-\-error\fR=\fImode\fR
+\fB\-e\fR, \fB\-\-error\fR=<\fImode\fR>
 Specify how stderr is to be redirected. By default in interactive mode,
 .B srun
 redirects stderr to the same file as stdout, if one is specified. The
@@ -257,7 +301,13 @@ See \fBIO Redirection\fR below for more options.
 If the specified file already exists, it will be overwritten.
 
 .TP
-\fB\-\-epilog\fR=\fIexecutable\fR
+\fB\-E\fR, \fB\-\-preserve-env\fR
+Pass the current values of environment variables SLURM_NNODES and 
+SLURM_NPROCS through to the \fIexecutable\fR, rather than computing them
+from commandline parameters.
+
+.TP
+\fB\-\-epilog\fR=<\fIexecutable\fR>
 \fBsrun\fR will run \fIexecutable\fR just after the job step completes.
 The command line arguments for \fIexecutable\fR will be the command
 and arguments of the job step.  If \fIexecutable\fR is "none", then
@@ -276,14 +326,16 @@ an existing resource allocation and you want separate processors to
 be dedicated to each job step. If sufficient processors are not 
 available to initiate the job step, it will be deferred. This can 
 be thought of as providing resource management for the job within
-it's allocation. Since resource management is provided  by 
+it's allocation. Note that all CPUs allocated to a job are available
+to each job step unless the \fB\-\-exclusive\fR option is used plus
+task affinity is configured. Since resource management is provided by 
 processor, the \fB\-\-ntasks\fR option must be specified, but the 
 following options should NOT be specified \fB\-\-nodes\fR, 
-\fB\-\-relative\fR, \fB\-\-relative\fR=\fIarbitrary\fR.
+\fB\-\-relative\fR, \fB\-\-distribution\fR=\fIarbitrary\fR.
 See \fBEXAMPLE\fR below.
 
 .TP
-\fB\-\-gid\fR=\fIgroup\fR
+\fB\-\-gid\fR=<\fIgroup\fR>
 If \fBsrun\fR is run as root, and the \fB\-\-gid\fR option is used, 
 submit the job with \fIgroup\fR's group access permissions.  \fIgroup\fR 
 may be the group name or the numerical group ID.
@@ -296,10 +348,10 @@ may be the group name or the numerical group ID.
 
 .TP
 \fB\-\-help\fR
-Display verbose help message and exit.
+Display help information and exit.
 
 .TP
-\fB\-\-hint\fR=\fItype\fR
+\fB\-\-hint\fR=<\fItype\fR>
 Bind tasks according to application hints
 .RS
 .TP
@@ -321,13 +373,13 @@ show this help message
 
 .TP
 \fB\-I\fR, \fB\-\-immediate\fR
-exit if resources are not immediately
-available. By default, \fB\-\-immediate\fR is off, and
+exit if resources are not immediately available. By default,
+\fB\-\-immediate\fR is off, and
 .B srun
 will block until resources become available.
 
 .TP
-\fB\-i\fR, \fB\-\-input\fR=\fImode\fR
+\fB\-i\fR, \fB\-\-input\fR=<\fImode\fR>
 Specify how stdin is to redirected. By default,
 .B srun
 redirects stdin from the terminal all tasks. See \fBIO Redirection\fR
@@ -336,16 +388,16 @@ For OS X, the poll() function does not support stdin, so input from
 a terminal is not possible.
 
 .TP
-\fB\-J\fR, \fB\-\-job\-name\fR=\fIjobname\fR
+\fB\-J\fR, \fB\-\-job\-name\fR=<\fIjobname\fR>
 Specify a name for the job. The specified name will appear along with
 the job id number when querying running jobs on the system. The default
 is the supplied \fBexecutable\fR program's name.
 
 .TP
-\fB\-\-jobid\fR=\fIid\fR
+\fB\-\-jobid\fR=<\fIjobid\fR>
 Initiate a job step under an already allocated job with job id \fIid\fR.
 Using this option will cause \fBsrun\fR to behave exactly as if the
-SLURM_JOBID environment variable was set.
+SLURM_JOB_ID environment variable was set.
 
 .TP
 \fB\-K\fR, \fB\-\-kill\-on\-bad\-exit\fR
@@ -353,7 +405,7 @@ Terminate a job if any task exits with a non\-zero exit code.
 
 .TP
 \fB\-k\fR, \fB\-\-no\-kill\fR
-Do not automatically terminate a job of one of the nodes it has been 
+Do not automatically terminate a job of one of the nodes it has been
 allocated fails.  This option is only recognized on a job allocation, 
 not for the submission of individual job steps. 
 The job will assume all responsibilities for fault\-tolerance. The 
@@ -370,7 +422,7 @@ The \fB\-\-label\fR option will prepend lines of output with the remote
 task id.
 
 .TP
-\fB\-L\fR, \fB\-\-licenses\fR=
+\fB\-L\fR, \fB\-\-licenses\fR=<\fBlicense\fR>
 Specification of licenses (or other resources available on all 
 nodes of the cluster) which must be allocated to this job.
 License names can be followed by an asterisk and count 
@@ -379,8 +431,8 @@ Multiple license names should be comma separated (e.g.
 "\-\-licenses=foo*4,bar").
 
 .TP
-\fB\-m\fR, \fB\-\-relative\fR
-(\fIblock\fR|\fIcyclic\fR|\fIarbitrary\fR|\fIplane=<options>\fR)
+\fB\-m\fR, \fB\-\-distribution\fR=
+<\fIblock\fR|\fIcyclic\fR|\fIarbitrary\fR|\fIplane=<options>\fR>
 Specify an alternate distribution method for remote processes.
 .RS
 .TP
@@ -424,19 +476,19 @@ contain at minimum the number of hosts requested.  If requesting tasks
 .RE
 
 .TP
-\fB\-\-mail\-type\fR=\fItype\fR
+\fB\-\-mail\-type\fR=<\fItype\fR>
 Notify user by email when certain event types occur. 
 Valid \fItype\fR values are BEGIN, END, FAIL, ALL (any state change). 
 The user to be notified is indicated with \fB\-\-mail\-user\fR. 
 
 .TP
-\fB\-\-mail\-user\fR=\fIuser\fR
+\fB\-\-mail\-user\fR=<\fIuser\fR>
 User to receive email notification of state changes as defined by 
 \fB\-\-mail\-type\fR.
 The default value is the submitting user.
 
 .TP
-\fB\-\-mem\fR[=]<\fIMB\fR>
+\fB\-\-mem\fR=<\fIMB\fR>
 Specify the real memory required per node in MegaBytes.
 Default value is \fBDefMemPerNode\fR and the maximum value is
 \fBMaxMemPerNode\fR. If configured, both of parameters can be
@@ -447,7 +499,7 @@ Also see \fB\-\-mem\-per\-cpu\fR.
 \fB\-\-mem\fR and \fB\-\-mem\-per\-cpu\fR are mutually exclusive.
 
 .TP
-\fB\-\-mem\-per\-cpu\fR[=]<\fIMB\fR>
+\fB\-\-mem\-per\-cpu\fR=<\fIMB\fR>
 Mimimum memory required per allocated CPU in MegaBytes.
 Default value is \fBDefMemPerCPU\fR and the maximum value is
 \fBMaxMemPerCPU\fR. If configured, both of parameters can be 
@@ -471,21 +523,12 @@ If you want greater control, try running a simple test code with the
 options "\-\-cpu_bind=verbose,none \-\-mem_bind=verbose,none" to determine 
 the specific configuration.
 
-NOTE: To have SLURM always report on the selected memory binding for 
-all commands executed in a shell, you can enable verbose mode by 
+NOTE: To have SLURM always report on the selected memory binding for
+all commands executed in a shell, you can enable verbose mode by
 setting the SLURM_MEM_BIND environment variable value to "verbose".
 
-Note that the SLURM_MEM_BIND environment variable will propagate into the
-tasks' environment in order to perform binding in batch submissions.
-If you do not wish to propagate \-\-mem_bind to successive srun commands,
-simply clear the variable in the task's script before executing srun:
-
-.nf
-        unsetenv SLURM_MEM_BIND
-.fi
-
-In addition, to SLURM_MEM_BIND, the following informational environment
-variables are also set when SLURM_MEM_BIND is in use:
+The following informational environment variables are set when \fB\-\-mem_bind\
+is in use:
 
 .nf
         SLURM_MEM_BIND_VERBOSE
@@ -533,29 +576,29 @@ show this help message
 .RE
 
 .TP
-\fB\-\-mincpus\fR=\fIn\fR
-Specify a minimum number of logical cpus/processors per node.
+\fB\-\-mincores\fR=<\fIn\fR>
+Specify a minimum number of cores per socket.
 
 .TP
-\fB\-\-minsockets\fR=\fIn\fR
-Specify a minimum number of sockets (physical processors) per node.
+\fB\-\-mincpus\fR=<\fIn\fR>
+Specify a minimum number of logical cpus/processors per node.
 
 .TP
-\fB\-\-mincores\fR=\fIn\fR
-Specify a minimum number of cores per socket.
+\fB\-\-minsockets\fR=<\fIn\fR>
+Specify a minimum number of sockets (physical processors) per node.
 
 .TP
-\fB\-\-minthreads\fR=\fIn\fR
+\fB\-\-minthreads\fR=<\fIn\fR>
 Specify a minimum number of threads per core.
 
 .TP
-\fB\-\-msg\-timeout\fR=\fIseconds\fR
+\fB\-\-msg\-timeout\fR=<\fIseconds\fR>
 Modify the job launch message timeout.
 The default value is \fBMessageTimeout\fR in the SLURM configuration file slurm.conf. 
 Changes to this are typically not recommended, but could be useful to diagnose problems.
 
 .TP
-\fB\-\-mpi\fR=\fImpi_type\fR
+\fB\-\-mpi\fR=<\fImpi_type\fR>
 Identify the type of MPI to be used. May result in unique initiation 
 procedures.
 .RS
@@ -595,13 +638,13 @@ arguments for each task. See \fBMULTIPLE PROGRAM CONFIGURATION\fR
 below for details on the configuration file contents. 
 
 .TP
-\fB\-N\fR, \fB\-\-nodes\fR=\fIminnodes\fR[\-\fImaxnodes\fR]
+\fB\-N\fR, \fB\-\-nodes\fR=<\fIminnodes\fR[\-\fImaxnodes\fR]>
 Request that a minimum of \fIminnodes\fR nodes be allocated to this job.
 The scheduler may decide to launch the job on more than \fIminnodes\fR nodes.
 A limit on the maximum node count may be specified with \fImaxnodes\fR
 (e.g. "\-\-nodes=2\-4").  The minimum and maximum node count may be the
 same to specify a specific number of nodes (e.g. "\-\-nodes=2\-2" will ask
-for two and ONLY two nodes).  
+for two and ONLY two nodes).
 The partition's node limits supersede those of the job. 
 If a job's node limits are outside of the range permitted for its 
 associated partition, the job will be left in a PENDING state. 
@@ -619,7 +662,7 @@ The job will be allocated as many nodes as possible within the range specified
 and without delaying the initiation of the job.
 
 .TP
-\fB\-n\fR, \fB\-\-ntasks\fR=\fIntasks\fR
+\fB\-n\fR, \fB\-\-ntasks\fR=<\fInumber\fR>
 Specify the number of tasks to run. Request that \fBsrun\fR
 allocate resources for \fIntasks\fR tasks.  
 The default is one task per socket or core (depending upon the value 
@@ -627,53 +670,55 @@ of the \fISelectTypeParameters\fR parameter in slurm.conf), but note
 that the \fB\-\-cpus\-per\-task\fR option will change this default.
 
 .TP
-\fB\-\-network\fR=\fItype\fR
+\fB\-\-network\fR=<\fItype\fR>
 Specify the communication protocol to be used. 
 This option is supported on AIX systems.
 Since POE is used to launch tasks, this option is not normally used or 
 is specified using the \fBSLURM_NETWORK\fR environment variable.
-The interpretation of \fItype\fR is system dependent. 
+The interpretation of \fItype\fR is system dependent.
 For systems with an IBM Federation switch, the following 
 comma\-separated and case insensitive types are recognized:
 \fBIP\fR (the default is user\-space), \fBSN_ALL\fR, \fBSN_SINGLE\fR, 
 \fBBULK_XFER\fR and adapter names  (e.g. \fBSNI0\fR and \fBSNI1\fR). 
-For more information, on IBM systems see \fIpoe\fR documentation on 
+For more information, on IBM systems see \fIpoe\fR documentation on
 the environment variables \fBMP_EUIDEVICE\fR and \fBMP_USE_BULK_XFER\fR.
 Note that only four jobs steps may be active at once on a node with the 
 \fBBULK_XFER\fR option due to limitations in the Federation switch driver.
 
 .TP
-\fB\-\-nice\fR[=\fIadjustment]\fR
-Run the job with an adjusted scheduling priority within SLURM. 
-With no adjustment value the scheduling priority is decreased 
+\fB\-\-nice\fR[=\fIadjustment\fR]
+Run the job with an adjusted scheduling priority within SLURM.
+With no adjustment value the scheduling priority is decreased
 by 100. The adjustment range is from \-10000 (highest priority)
-to 10000 (lowest priority). Only privileged users can specify 
-a negative adjustment. NOTE: This option is presently 
+to 10000 (lowest priority). Only privileged users can specify
+a negative adjustment. NOTE: This option is presently
 ignored if \fISchedulerType=sched/wiki\fR or 
 \fISchedulerType=sched/wiki2\fR.
 
 .TP
-\fB\-\-ntasks\-per\-core\fR=\fIntasks\fR
+\fB\-\-ntasks\-per\-core\fR=<\fIntasks\fR>
 Request that no more than \fIntasks\fR be invoked on each core.
 Similar to \fB\-\-ntasks\-per\-node\fR except at the core level
 instead of the node level.  Masks will automatically be generated
 to bind the tasks to specific core unless \fB\-\-cpu_bind=none\fR
 is specified.
-NOTE: This option is not supported unless \fISelectType=CR_Core\fR
-or \fISelectType=CR_Core_Memory\fR is configured.
+NOTE: This option is not supported unless
+\fISelectTypeParameters=CR_Core\fR or
+\fISelectTypeParameters=CR_Core_Memory\fR is configured.
 
 .TP
-\fB\-\-ntasks\-per\-socket\fR=\fIntasks\fR
+\fB\-\-ntasks\-per\-socket\fR=<\fIntasks\fR>
 Request that no more than \fIntasks\fR be invoked on each socket.
 Similar to \fB\-\-ntasks\-per\-node\fR except at the socket level
 instead of the node level.  Masks will automatically be generated
 to bind the tasks to specific sockets unless \fB\-\-cpu_bind=none\fR
 is specified.
-NOTE: This option is not supported unless \fISelectType=CR_Socket\fR 
-or \fISelectType=CR_Socket_Memory\fR is configured.
+NOTE: This option is not supported unless
+\fISelectTypeParameters=CR_Socket\fR or
+\fISelectTypeParameters=CR_Socket_Memory\fR is configured.
 
 .TP
-\fB\-\-ntasks\-per\-node\fR=\fIntasks\fR
+\fB\-\-ntasks\-per\-node\fR=<\fIntasks\fR>
 Request that no more than \fIntasks\fR be invoked on each node.
 This is similar to using \fB\-\-cpus\-per\-task\fR=\fIncpus\fR
 but does not require knowledge of the actual number of cpus on
@@ -683,20 +728,18 @@ on each node.  Examples of this include submitting
 a hybrid MPI/OpenMP app where only one MPI "task/rank" should be
 assigned to each node while allowing the OpenMP portion to utilize
 all of the parallelism present in the node, or submitting a single
-setup/cleanup/monitoring job to each node of a pre\-existing  
+setup/cleanup/monitoring job to each node of a pre\-existing
 allocation as one step in a larger job script.
 
 .TP
 \fB\-O\fR, \fB\-\-overcommit\fR
-overcommit resources. Normally,
-.B srun
-will not allocate more than one process per cpu. By specifying
-\fB\-\-overcommit\fR you are explicitly allowing more than one process
-per cpu. However no more than \fBMAX_TASKS_PER_NODE\fR tasks are 
-permitted to execute per node.
+Overcommit resources.  Normally, \fBsrun\fR will allocate one task
+per processor.  By specifying \fB\-\-overcommit\fR you are explicitly
+allowing more than one task per processor.  However no more than
+\fBMAX_TASKS_PER_NODE\fR tasks are permitted to execute per node.
 
 .TP
-\fB\-o\fR, \fB\-\-output\fR=\fImode\fR
+\fB\-o\fR, \fB\-\-output\fR=<\fImode\fR>
 Specify the mode for stdout redirection. By default in interactive mode,
 .B srun
 collects stdout from all tasks and line buffers this output to
@@ -710,13 +753,13 @@ If \fB\-\-error\fR is not also specified on the command line, both
 stdout and stderr will directed to the file specified by \fB\-\-output\fR.
 
 .TP
-\fB\-\-open\-mode\fR=append|truncate
+\fB\-\-open\-mode\fR=<\fIappend|truncate\fR>
 Open the output and error files using append or truncate mode as specified.
 The default value is specified by the system configuration parameter
 \fIJobFileAppend\fR.
 
-.TP 
-\fB\-P\fR, \fB\-\-dependency\fR[=]<\fIdependency_list\fR>
+.TP
+\fB\-P\fR, \fB\-\-dependency\fR=<\fIdependency_list\fR>
 Defer the start of this job until the specified dependencies have been
 satisfied completed.
 <\fIdependency_list\fR> is of the form 
@@ -748,13 +791,13 @@ job name and user have terminated.
 .RE
 
 .TP
-\fB\-p\fR, \fB\-\-partition\fR=\fIpartition\fR
-Request resources from partition "\fIpartition\fR." Partitions
-are created by the slurm administrator, who also identify one 
-of those partitions as the default. 
+\fB\-p\fR, \fB\-\-partition\fR=<\fIpartition name\fR>
+Request a specific partition for the resource allocation.  If not specified,
+the default behaviour is to allow the slurm controller to select the default
+partition as designated by the system administrator.
 
 .TP
-\fB\-\-prolog\fR=\fIexecutable\fR
+\fB\-\-prolog\fR=<\fIexecutable\fR>
 \fBsrun\fR will run \fIexecutable\fR just before launching the job step.
 The command line arguments for \fIexecutable\fR will be the command
 and arguments of the job step.  If \fIexecutable\fR is "none", then
@@ -815,8 +858,7 @@ Not currently supported on AIX platforms.
 
 .TP
 \fB\-Q\fR, \fB\-\-quiet\fR
-Quiet operation. Suppress informational messages. Errors will still
-be displayed.
+Suppress informational messages from srun. Errors will still be displayed.
 
 .TP
 \fB\-q\fR, \fB\-\-quit\-on\-interrupt\fR
@@ -826,7 +868,7 @@ a single Ctrl\-C and causes \fBsrun\fR to instead immediately terminate the
 running job. 
 
 .TP
-\fB\-r\fR, \fB\-\-relative\fR=\fIn\fR
+\fB\-r\fR, \fB\-\-relative\fR=<\fIn\fR>
 Run a job step relative to node \fIn\fR of the current allocation. 
 This option may be used to spread several job steps out among the
 nodes of the current job. If \fB\-r\fR is used, the current job
@@ -834,18 +876,32 @@ step will begin at node \fIn\fR of the allocated nodelist, where
 the first node is considered node 0.  The \fB\-r\fR option is not 
 permitted along with \fB\-w\fR or \fB\-x\fR, and will be silently
 ignored when not running within a prior allocation (i.e. when
-SLURM_JOBID is not set). The default for \fIn\fR is 0. If the 
+SLURM_JOB_ID is not set). The default for \fIn\fR is 0. If the 
 value of \fB\-\-nodes\fR exceeds the number of nodes identified 
 with the \fB\-\-relative\fR option, a warning message will be 
 printed and the \fB\-\-relative\fR option will take precedence.
 
+.TP
+\fB\-\-resv-ports\fR
+Reserve communication ports for this job.
+Used for OpenMPI.
+
+.TP
+\fB\-\-reservation\fR=<\fIname\fR>
+Allocate resources for the job from the named reservation.
+
+.TP
+\fB\-\-restart\-dir\fR=<\fIdirectory\fR>
+Specifies the directory from which the job or job step's checkpoint should 
+be read (used by the checkpoint/blcrm and checkpoint/xlch plugins only).
+
 .TP
 \fB\-s\fR, \fB\-\-share\fR
 The job can share nodes with other running jobs. This may result in faster job 
 initiation and higher system utilization, but lower application performance.
 
 .TP
-\fB\-T\fR, \fB\-\-threads\fR=\fInthreads\fR
+\fB\-T\fR, \fB\-\-threads\fR=<\fInthreads\fR>
 Request that \fBsrun\fR
 use \fInthreads\fR to initiate and control the parallel job. The 
 default value is the smaller of 60 or the number of nodes allocated.
@@ -853,28 +909,28 @@ This should only be used to set a low thread count for testing on
 very small memory computers.
 
 .TP
-\fB\-t\fR, \fB\-\-time\fR=\fItime\fR
-Establish a time limit to terminate the job after the specified period of
-time. If the job's time limit exceeds the partition's time limit, the 
-job will be left in a PENDING state. The default value is the partition's 
-time limit. When the time limit is reached, the job's processes are sent 
-SIGTERM followed by SIGKILL. The interval between signals is specified by 
-the SLURM configuration parameter \fBKillWait\fR. A time limit of 0 minutes
-indicates that an infinite timelimit should be used. 
-Acceptable time formats include "minutes", "minutes:seconds", 
-"hours:minutes:seconds", "days\-hours", "days\-hours:minutes" and 
-"days\-hours:minutes:seconds".
+\fB\-t\fR, \fB\-\-time\fR=<\fItime\fR>
+Set a limit on the total run time of the job step.  If the
+requested time limit exceeds the partition's time limit, the job will
+be left in a PENDING state (possibly indefinitely).  The default time
+limit is the partition's time limit.  When the time limit is reached,
+all of the job's tasks are sent SIGTERM followed by SIGKILL.  The
+interval between signals is specified by the SLURM configuration
+parameter \fBKillWait\fR.  A time limit of zero requests that no time
+limit be imposed.  Acceptable time formats include "minutes",
+"minutes:seconds", "hours:minutes:seconds", "days\-hours",
+"days\-hours:minutes" and "days\-hours:minutes:seconds".
 
 .TP
-\fB\-\-task\-epilog\fR=\fIexecutable\fR
+\fB\-\-task\-epilog\fR=<\fIexecutable\fR>
 The \fBslurmd\fR daemon will run \fIexecutable\fR just after each task
-terminates. This will be before after any TaskEpilog parameter      
+terminates. This will be before after any TaskEpilog parameter
 in slurm.conf is executed. This is meant to be a very short\-lived 
 program. If it fails to terminate within a few seconds, it will 
 be killed along with any descendant processes.
 
 .TP
-\fB\-\-task\-prolog\fR=\fIexecutable\fR
+\fB\-\-task\-prolog\fR=<\fIexecutable\fR>
 The \fBslurmd\fR daemon will run \fIexecutable\fR just before launching 
 each task. This will be executed after any TaskProlog parameter 
 in slurm.conf is executed.
@@ -885,23 +941,27 @@ Standard output from this program of the form
 for the task being spawned.
 
 .TP
-\fB\-\-tmp\fR=\fIMB\fR
+\fB\-\-tmp\fR=<\fIMB\fR>
 Specify a minimum amount of temporary disk space.
 
 .TP
-\fB\-U\fR, \fB\-\-account\fR=\fIaccount\fR
+\fB\-U\fR, \fB\-\-account\fR=<\fIaccount\fR>
 Change resource use by this job to specified account.
-The \fIaccount\fR is an arbitrary string. The may 
-be changed after job submission using the \fBscontrol\fR 
+The \fIaccount\fR is an arbitrary string. The account name may
+be changed after job submission using the \fBscontrol\fR
 command.
 
 .TP
 \fB\-u\fR, \fB\-\-unbuffered\fR
-do not line buffer stdout from remote tasks. This option cannot be used
-with \fI\-\-label\fR. 
+Do not line buffer stdout from remote tasks. This option cannot be used
+with \fI\-\-label\fR.
 
 .TP
-\fB\-\-uid\fR=\fIuser\fR
+\fB\-\-usage\fR
+Display brief help message and exit.
+
+.TP
+\fB\-\-uid\fR=<\fIuser\fR>
 Attempt to submit and/or run a job as \fIuser\fR instead of the
 invoking user id. The invoking user's credentials will be used
 to check access permissions for the target partition. User root
@@ -910,21 +970,18 @@ partition for example. If run as root, \fBsrun\fR will drop
 its permissions to the uid specified after node allocation is
 successful. \fIuser\fR may be the user name or numerical user ID.
 
-.TP
-\fB\-\-usage\fR
-Display brief help message and exit.
-
 .TP
 \fB\-V\fR, \fB\-\-version\fR
 Display version information and exit.
 
 .TP
 \fB\-v\fR, \fB\-\-verbose\fR
-Print detailed event logging. Multiple \fB\-v\fR's will further increase 
-the verbosity of logging. By default only errors will be displayed.
+Increase the verbosity of srun's informational messages.  Multiple
+\fB\-v\fR's will further increase srun's verbosity.  By default only
+errors will be displayed.
 
 .TP
-\fB\-W\fR, \fB\-\-wait\fR=\fIseconds\fR
+\fB\-W\fR, \fB\-\-wait\fR=<\fIseconds\fR>
 Specify how long to wait after the first task terminates before terminating
 all remaining tasks. A value of 0 indicates an unlimited wait (a warning will
 be issued after 60 seconds). The default value is set by the WaitTime
@@ -933,7 +990,7 @@ option can be useful to insure that a job is terminated in a timely fashion
 in the event that one or more tasks terminate prematurely.
 
 .TP
-\fB\-w\fR, \fB\-\-nodelist\fR=\fIhost1,host2,...\fR or \fIfilename\fR
+\fB\-w\fR, \fB\-\-nodelist\fR=<\fIhost1,host2,...\fR or \fIfilename\fR>
 Request a specific list of hosts. The job will contain \fIat least\fR
 these hosts. The list may be specified as a comma\-separated list of
 hosts, a range of hosts (host[1\-5,7,...] for example), or a filename.
@@ -943,9 +1000,9 @@ than 2 hosts in the file only the first 2 nodes will be used in the
 request list.
 
 .TP
-\fB\-\-wckey\fR=\fIwckey\fR
+\fB\-\-wckey\fR=<\fIwckey\fR>
 Specify wckey to be used with job.  If TrackWCKey=no (default) in the
-slurm.conf this value does not get looked at. 
+slurm.conf this value is ignored.
 
 .TP
 \fB\-X\fR, \fB\-\-disable\-status\fR
@@ -956,27 +1013,27 @@ A second Ctrl\-C in one second will forcibly terminate the job and
 variable SLURM_DISABLE_STATUS.
 
 .TP
-\fB\-x\fR, \fB\-\-exclude\fR=\fIhost1,host2,...\fR or \fIfilename\fR
-Request that a specific list of hosts not be included in the resources 
-allocated to this job. The host list will be assumed to be a filename 
+\fB\-x\fR, \fB\-\-exclude\fR=<\fIhost1,host2,...\fR or \fIfilename\fR>
+Request that a specific list of hosts not be included in the resources
+allocated to this job. The host list will be assumed to be a filename
 if it contains a "/"character.
 
 .PP
-The following options support Blue Gene systems, but may be 
+The following options support Blue Gene systems, but may be
 applicable to other systems as well.
 
 .TP
-\fB\-\-blrts\-image\fR=\fIpath\fR
+\fB\-\-blrts\-image\fR=<\fIpath\fR>
 Path to blrts image for bluegene block.  BGL only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-cnload\-image\fR=\fIpath\fR
+\fB\-\-cnload\-image\fR=<\fIpath\fR>
 Path to compute node image for bluegene block.  BGP only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-conn\-type\fR=\fItype\fR
+\fB\-\-conn\-type\fR=<\fItype\fR>
 Require the partition connection type to be of a certain type.  
 On Blue Gene the acceptable of \fItype\fR are MESH, TORUS and NAV.  
 If NAV, or if not set, then SLURM will try to fit a TORUS else MESH.
@@ -987,7 +1044,7 @@ midplane and below).  You can use HTC_S for SMP, HTC_D for Dual, HTC_V
 for virtual node mode, and HTC_L for Linux mode.
 
 .TP
-\fB\-g\fR, \fB\-\-geometry\fR=\fIXxYxZ\fR
+\fB\-g\fR, \fB\-\-geometry\fR=<\fIXxYxZ\fR>
 Specify the geometry requirements for the job. The three numbers 
 represent the required geometry giving dimensions in the X, Y and 
 Z directions. For example "\-\-geometry=2x3x4", specifies a block 
@@ -995,17 +1052,17 @@ of nodes having 2 x 3 x 4 = 24 nodes (actually base partitions on
 Blue Gene).
 
 .TP
-\fB\-\-ioload\-image\fR=\fIpath\fR
+\fB\-\-ioload\-image\fR=<\fIpath\fR>
 Path to io image for bluegene block.  BGP only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-linux\-image\fR=\fIpath\fR
+\fB\-\-linux\-image\fR=<\fIpath\fR>
 Path to linux image for bluegene block.  BGL only.
 Default from \fIblugene.conf\fR if not set.
 
 .TP
-\fB\-\-mloader\-image\fR=\fIpath\fR
+\fB\-\-mloader\-image\fR=<\fIpath\fR>
 Path to mloader image for bluegene block.
 Default from \fIblugene.conf\fR if not set.
 
@@ -1016,7 +1073,7 @@ appropriate partition.
 By default the specified geometry can rotate in three dimensions.
 
 .TP
-\fB\-\-ramdisk\-image\fR=\fIpath\fR
+\fB\-\-ramdisk\-image\fR=<\fIpath\fR>
 Path to ramdisk image for bluegene block.  BGL only.
 Default from \fIblugene.conf\fR if not set.
 
@@ -1037,7 +1094,7 @@ will terminate if resources are not immediately available.
 When initiating remote processes
 .B srun
 will propagate the current working directory, unless
-\fB\-\-chdir\fR=\fIpath\fR is specified, in which case \fIpath\fR will
+\fB\-\-chdir\fR=<\fIpath\fR> is specified, in which case \fIpath\fR will
 become the working directory for the remote processes.
 .PP
 The \fB\-n\fB, \fB\-c\fR, and \fB\-N\fR options control how CPUs  and
@@ -1158,7 +1215,7 @@ job128\-00.out, job128\-01.out, ...
 .RS -10
 .PP
 
-.SH "ENVIRONMENT VARIABLES"
+.SH "INPUT ENVIRONMENT VARIABLES"
 .PP
 Some srun options may be set via environment variables. 
 These environment variables, along with their corresponding options, 
@@ -1203,22 +1260,28 @@ may be required.
 The location of the SLURM configuration file.
 .TP
 \fBSLURM_ACCOUNT\fR
-Same as \fB\-U, \-\-account\fR=\fIaccount\fR
+Same as \fB\-U, \-\-account\fR
 .TP
-\fBSLURM_CHECKPOINT\fR
-Same as \fB\-\-checkpoint\fR=\fItime\fR
+\fBSLURM_ACCTG_FREQ\fR
+Same as \fB\-\-acctg\-freq\fR
 .TP
-\fBSLURM_CPU_BIND\fR
-Same as \fB\-\-cpu_bind\fR=\fItype\fR
+\fBSLURM_CHECKPOINT\fR
+Same as \fB\-\-checkpoint\fR
 .TP
-\fBSLURM_CPUS_PER_TASK\fR
-Same as \fB\-c, \-\-ncpus\-per\-task\fR=\fIn\fR
+\fBSLURM_CHECKPOINT_DIR\fR
+Same as \fB\-\-checkpoint\-dir\fR
 .TP
 \fBSLURM_CONN_TYPE\fR
-Same as \fB\-\-conn\-type\fR=(\fImesh|nav|torus\fR)
+Same as \fB\-\-conn\-type\fR
 .TP
 \fBSLURM_CORE_FORMAT\fR
-Same as \fB\-\-core\fR=\fIformat\fR
+Same as \fB\-\-core\fR
+.TP
+\fBSLURM_CPU_BIND\fR
+Same as \fB\-\-cpu_bind\fR
+.TP
+\fBSLURM_CPUS_PER_TASK\fR
+Same as \fB\-c, \-\-ncpus\-per\-task\fR
 .TP
 \fBSLURM_DEBUG\fR
 Same as \fB\-v, \-\-verbose\fR
@@ -1227,7 +1290,7 @@ Same as \fB\-v, \-\-verbose\fR
 Same as \fB\-d, \-\-slurmd\-debug\fR
 .TP
 \fBSLURM_DEPENDENCY\fR
-\fB\-P, \-\-dependency\fR=\fIjobid\fR
+\fB\-P, \-\-dependency\fR=<\fIjobid\fR>
 .TP
 \fBSLURM_DISABLE_STATUS\fR
 Same as \fB\-X, \-\-disable\-status\fR
@@ -1236,48 +1299,48 @@ Same as \fB\-X, \-\-disable\-status\fR
 Same as \fB\-m plane\fR
 .TP
 \fBSLURM_DISTRIBUTION\fR
-Same as \fB\-m, \-\-distribution\fR=(\fIblock|cyclic|arbitrary\fR)
+Same as \fB\-m, \-\-distribution\fR
 .TP
 \fBSLURM_EPILOG\fR
-Same as \fB\-\-epilog\fR=\fIexecutable\fR
+Same as \fB\-\-epilog\fR
 .TP
 \fBSLURM_EXCLUSIVE\fR
 Same as \fB\-\-exclusive\fR
 .TP
 \fBSLURM_GEOMETRY\fR
-Same as \fB\-g, \-\-geometry\fR=\fIX,Y,Z\fR
+Same as \fB\-g, \-\-geometry\fR
 .TP
 \fBSLURM_JOB_NAME\fR
-Same as \fB\-J, \-\-job\-name\fR=\fIjobname\fR except within an existing 
+Same as \fB\-J, \-\-job\-name\fR except within an existing
 allocation, in which case it is ignored to avoid using the batch job's name
-as the name of each job step. 
+as the name of each job step.
 .TP
 \fBSLURM_LABELIO\fR
 Same as \fB\-l, \-\-label\fR
 .TP
 \fBSLURM_MEM_BIND\fR
-Same as \fB\-\-mem_bind\fR=\fItype\fR
+Same as \fB\-\-mem_bind\fR
 .TP
 \fBSLURM_NETWORK\fR
-Same as \fB\-\-network\fR=\fItype\fR
+Same as \fB\-\-network\fR
 .TP
 \fBSLURM_NNODES\fR
-Same as \fB\-N, \-\-nodes\fR=(\fIn|min\-max\fR)
+Same as \fB\-N, \-\-nodes\fR
 .TP
-\fBSLURN_NTASKS_PER_CORE\fR
+\fBSLURM_NTASKS_PER_CORE\fR
 Same as \fB\-\-ntasks\-per\-core\fR
 .TP
-\fBSLURN_NTASKS_PER_NODE\fR
-Same as \fB\-\-ntasks\-per\-node\fRa
+\fBSLURM_NTASKS_PER_NODE\fR
+Same as \fB\-\-ntasks\-per\-node\fR
 .TP
-\fBSLURN_NTASKS_PER_SOCKET\fR
-Same as \fB\-\-ntasks\-per\-socket\fRa
+\fBSLURM_NTASKS_PER_SOCKET\fR
+Same as \fB\-\-ntasks\-per\-socket\fR
 .TP
 \fBSLURM_NO_ROTATE\fR
-Same as \fB\-\-no\-rotate\fR
+Same as \fB\-R, \-\-no\-rotate\fR
 .TP
 \fBSLURM_NPROCS\fR
-Same as \fB\-n, \-\-ntasks\fR=\fIn\fR
+Same as \fB\-n, \-\-ntasks\fR
 .TP
 \fBSLURM_OPEN_MODE\fR
 Same as \fB\-\-open\-mode\fR
@@ -1286,54 +1349,62 @@ Same as \fB\-\-open\-mode\fR
 Same as \fB\-O, \-\-overcommit\fR
 .TP
 \fBSLURM_PARTITION\fR
-Same as \fB\-p, \-\-partition\fR=\fIpartition\fR
+Same as \fB\-p, \-\-partition\fR
 .TP
 \fBSLURM_PROLOG\fR
-Same as \fB\-\-prolog\fR=\fIexecutable\fR
+Same as \fB\-\-prolog\fR
 .TP
 \fBSLURM_REMOTE_CWD\fR
-Same as \fB\-D, \-\-chdir=\fR=\fIdir\fR
+Same as \fB\-D, \-\-chdir=\fR
 .TP
-\fBSLURM_SRUN_COMM_IFHN\fR
-Same as \fB\-\-ctrl\-comm\-ifhn\fR=\fIaddr\fR
+\fBSLURM_RESTART_DIR\fR
+Same as \fB\-\-restart-dir\fR
 .TP
 \fBSLURM_STDERRMODE\fR
-Same as \fB\-e, \-\-error\fR=\fImode\fR
+Same as \fB\-e, \-\-error\fR
 .TP
 \fBSLURM_STDINMODE\fR
-Same as \fB\-i, \-\-input\fR=\fImode\fR
+Same as \fB\-i, \-\-input\fR
 .TP
 \fBSLURM_STDOUTMODE\fR
-Same as \fB\-o, \-\-output\fR=\fImode\fR
+Same as \fB\-o, \-\-output\fR
 .TP
 \fBSLURM_TASK_EPILOG\fR
-Same as \fB\-\-task\-epilog\fR=\fIexecutable\fR
-.TP
-\fBSLURM_TASK_MEM\fR
-Same as \fB\-\-task\-mem\fR
+Same as \fB\-\-task\-epilog\fR
 .TP
 \fBSLURM_TASK_PROLOG\fR
-Same as \fB\-\-task\-prolog\fR=\fIexecutable\fR
+Same as \fB\-\-task\-prolog
 .TP
 \fBSLURM_THREADS\fR
 Same as \fB\-T, \-\-threads\fR
 .TP
 \fBSLURM_TIMELIMIT\fR
-Same as \fB\-t, \-\-time\fR=\fIminutes\fR
+Same as \fB\-t, \-\-time\fR
 .TP
 \fBSLURM_UNBUFFEREDIO\fR
 Same as \fB\-u, \-\-unbuffered\fR
 .TP
 \fBSLURM_WAIT\fR
-Same as \fB\-W, \-\-wait\fR=\fIseconds\fR
+Same as \fB\-W, \-\-wait\fR
 .TP
 \fBSLURM_WORKING_DIR\fR
-\fB\-D, \-\-chdir\fR=\fIpath\fR
+\fB\-D, \-\-chdir\fR
+
+.SH "OUTPUT ENVIRONMENT VARIABLES"
 .PP
-Additionally, srun will set some environment variables in the environment 
+srun will set some environment variables in the environment 
 of the executing tasks on the remote compute nodes. 
 These environment variables are:
 
+.TP 22
+\fBBASIL_RESERVATION_ID\fR
+The reservation ID on Cray systems running ALPS/BASIL only.
+
+.TP
+\fBSLURM_CHECKPOINT_IMAGE_DIR\fR
+Directory into which checkpoint images should be written
+if specified on the execute line.
+
 .TP
 \fBSLURM_CPU_BIND_VERBOSE\fR
 \-\-cpu_bind verbosity (quiet,verbose).
@@ -1361,7 +1432,7 @@ Zero origin and comma separated.
 \fBSLURM_JOB_DEPENDENCY\fR
 Set to value of the \-\-dependency option.
 .TP
-\fBSLURM_JOBID\fR
+\fBSLURM_JOB_ID\fR (and \fBSLURM_JOBID\fR for backwards compatibility)
 Job id of the executing job
 
 .TP
@@ -1409,12 +1480,12 @@ The step ID of the current job
 The process ID of the task being started.
 .TP
 \fBSLURM_TASKS_PER_NODE\fR
-Number of tasks to be initiated on each node. Values are 
+Number of tasks to be initiated on each node. Values are
 comma separated and in the same order as SLURM_NODELIST.
-If two or more consecutive nodes are to have the same task 
-count, that count is followed by "(x#)" where "#" is the 
+If two or more consecutive nodes are to have the same task
+count, that count is followed by "(x#)" where "#" is the
 repetition count. For example, "SLURM_TASKS_PER_NODE=2(x3),1"
-indicates that the first three nodes will each execute three 
+indicates that the first three nodes will each execute three
 tasks and the fourth node will execute one task.
 .TP
 \fBSLURM_UMASK\fR
@@ -1466,7 +1537,7 @@ These tasks initiated outside of SLURM's monitoring
 or control. SLURM's epilog should be configured to purge
 these tasks when the job's allocation is relinquished.
 
-See \fIhttps://computing.llnl.gov/linux/slurm/quickstart.html#mpi\fR 
+See \fIhttps://computing.llnl.gov/linux/slurm/mpi_guide.html\fR 
 for more information on use of these various MPI implementation 
 with SLURM.
 
@@ -1602,7 +1673,7 @@ the script to be executed follow.
 
 > cat test.sh
 #!/bin/sh
-MACHINEFILE="nodes.$SLURM_JOBID"
+MACHINEFILE="nodes.$SLURM_JOB_ID"
 
 # Generate Machinefile for mpich such that hosts are in the same
 #  order as if run via srun
@@ -1670,9 +1741,9 @@ wait
 
 .SH "COPYING"
 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).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/srun_cr.1 b/doc/man/man1/srun_cr.1
new file mode 100644
index 000000000..6e67a44d8
--- /dev/null
+++ b/doc/man/man1/srun_cr.1
@@ -0,0 +1,73 @@
+.TH SRUN_CR "1" "March 2009" "srun_cr 2.0" "slurm components"
+
+.SH "NAME"
+srun_cr \- run parallel jobs with checkpoint/restart support
+
+.SH SYNOPSIS
+\fBsrun_cr\fR [\fIOPTIONS\fR...]
+
+.SH DESCRIPTION
+The design of \fBsrun_cr\fR is inspired by \fBmpiexec_cr\fR from MVAPICH2 and
+\fBcr_restart\fR form BLCR.
+It is a wrapper around the \fBsrun\fR command to enable batch job 
+checkpoint/restart support when used with SLURM's \fBcheckpoint/blcr\fR plugin.
+
+.SH "OPTIONS"
+
+The \fBsrun_cr\fR execute line options are identical to those of the \fBsrun\fR
+command.
+See "man srun" for details.
+
+.SH "DETAILS"
+After initialization, \fBsrun_cr\fR registers a thread context callback
+function.
+Then it forks a process and executes "cr_run --omit srun" with its arguments.
+\fBcr_run\fR is employed to exclude the \fBsrun\fR process from being dumped 
+upon checkpoint.
+All catchable signals except SIGCHLD sent to \fBsrun_cr\fR will be forwarded 
+to the child \fBsrun\fR process.
+SIGCHLD will be captured to mimic the exit status of \fBsrun\fR when it exits.
+Then \fBsrun_cr\fR loops waiting for termination of tasks being launched 
+from \fBsrun\fR.
+
+The step launch logic of SLURM is augmented to check if \fBsrun\fR is running
+under \fBsrun_cr\fR.
+If true, the environment variable \fBSURN_SRUN_CR_SOCKET\fR should be present,
+the value of which is the address of a Unix domain socket created and listened
+to be \fBsrun_cr\fR.
+After launching the tasks, \fBsrun\fR tires to connect to the socket and sends
+the job ID, step ID and the nodes allocated to the step to \fBsrun_cr\fR.
+
+Upon checkpoint, \fRsrun_cr\fR checks to see if the tasks have been launched.
+If not \fRsrun_cr\fR first forwards the checkpoint request to the tasks by 
+calling the SLURM API \fBslurm_checkpoint_tasks()\fR before dumping its process
+context.
+
+Upon restart, \fBsrun_cr\fR checks to see if the tasks have been previously 
+launched and checkpointed. 
+If true, the environment variable \fRSLURM_RESTART_DIR\fR is set to the directory
+of the checkpoint image files of the tasks.
+Then \fBsrun\fR is forked and executed again. 
+The environment variable will be used by the \fBsrun\fR command to restart 
+execution of the tasks from the previous checkpoint.
+
+.SH "COPYING"
+Copyright (C) 2009 National University of Defense Technology, China.
+Produced at National University of Defense Technology, China (cf, DISCLAIMER).
+CODE\-OCEC\-09\-009. All rights reserved.
+.LP
+This file is part of SLURM, a resource management program.
+For details, see <https://computing.llnl.gov/linux/slurm/>.
+.LP
+SLURM 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.
+.LP
+SLURM 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.
+
+.SH "SEE ALSO"
+\fBsrun\fR(1)
diff --git a/doc/man/man1/sshare.1 b/doc/man/man1/sshare.1
new file mode 100644
index 000000000..2f8a890ba
--- /dev/null
+++ b/doc/man/man1/sshare.1
@@ -0,0 +1,95 @@
+.TH SSHARE "1" "November 2008" "sshare 2.0" "SLURM Commands"
+
+.SH "NAME"
+sshare \- Tool for listing the shares of associations to a cluster.
+
+.SH "SYNOPSIS"
+\fBsshare\fR [\fIOPTIONS\fR...]
+
+.SH "DESCRIPTION"
+\fBsshare\fR is used to view SLURM share information.  This command is
+only viable when running with the priority/multifactor plugin.
+The sshare information is derived from a database with the interface 
+being provided by \fBslurmdbd\fR (SLURM Database daemon) which is
+read in from the slurmctld and used to process the shares available
+to a given association.  sshare provides SLURM share information of
+Account, User, Raw Shares, Normalized Shares, Raw Usage, Normalized
+Usage, Effective Usage, and the Fair-share factor for each association.
+
+
+.SH "OPTIONS"
+
+.TP
+\fB\-A\fR, \fB\-\-accounts=\fR
+Display information for specific accounts (comma separated list).
+
+.TP
+\fB\-a\fR, \fB\-\-all\fR
+Display information for all users.
+
+.TP
+\fB\-h\fR, \fB\-\-noheader\fR
+No header will be added to the beginning of the output.
+
+.TP
+\fB\-l\fR, \fB\-\-long\fR
+Long listing - includes the normalized usage information.
+
+.TP
+\fB\-p\fR, \fB\-\-parsable\fR
+Output will be '|' delimited with a '|' at the end.
+
+.TP
+\fB\-P\fR, \fB\-\-parsable2\fR
+Output will be '|' delimited without a '|' at the end.
+
+.TP
+\fB\-u\fR, \fB\-\-users=\fR
+Display information for specific users (comma separated list).
+
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+Display more information about the specified options.
+
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+Display the version number of sshare.
+
+.TP
+\fB\-\-help\fR
+\fB\-\-usage\fR
+Display a description of sshare options and commands.
+
+
+.SH "EXAMPLES"
+.eo
+.br
+> sshare -A <Account>
+.br
+.br
+> sshare --parsable --users=<User>
+.br
+
+.ec
+
+.SH "COPYING"
+Copyright (C) 2008 Lawrence Livermore National Security.
+Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+CODE\-OCEC\-09\-009. All rights reserved.
+.LP
+This file is part of SLURM, a resource management program.
+For details, see <https://computing.llnl.gov/linux/slurm/>.
+.LP
+SLURM 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.
+.LP
+SLURM 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.
+
+.SH "SEE ALSO"
+\fBslurm.conf\fR(5)
+\fBslurmdbd\fR(8)
diff --git a/doc/man/man1/sstat.1 b/doc/man/man1/sstat.1
index d8ca661fc..cca62bdbf 100644
--- a/doc/man/man1/sstat.1
+++ b/doc/man/man1/sstat.1
@@ -1,25 +1,24 @@
-.TH SSTAT "1" "May 2008" "sacctmgr 1.3" "Slurm components"
+.TH SSTAT "1" "January 2009" "sstat 2.0" "Slurm components"
 
 .SH "NAME"
-sstat \- Used to query running job and see various usage information
-of job/step running.
+sstat \- Display various status information
+of a running job/step.
 
 .SH "SYNOPSIS"
-.BR "sstat "
-\fBsstat\fR [\fIOPTIONS\fR...] 
+.BR "sstat " 
+[\fIOPTIONS\fR...] 
 
 .SH "DESCRIPTION"
 .PP
-Status information for jobs invoked with SLURM.
+Status information for running jobs invoked with SLURM.
 .PP
 The 
 .BR "sstat "
-command displays job accounting data stored in the job accounting log 
-file in a variety of forms for your analysis.
+command displays job status information for your analysis.
 The 
 .BR "sstat "
-command displays information on jobs, job steps, status, and exitcodes by 
-default.
+command displays information pertaining to CPU, Task, Node, Resident
+Set Size (RSS) and Virtual Memory (VM).
 You can tailor the output with the use of the 
 \f3\-\-fields=\fP 
 option to specify the fields to be shown.
@@ -31,219 +30,155 @@ command displays job status data for any job running on the system.
 For the non\-root user, the 
 .BR "sstat "
 command limits the display of job status data to jobs that were 
-launched with their own user identifier (UID) by default.
-
-.SS "Options"
-.TP "10"
-
-.TP "3"
-\(bu
-\f3jobid\fP 
-.IP 
-and 
-\f3\-\-fields=\fP 
-options.
-.IP 
+launched with their own user identifier (UID).
 
 .TP 
-\f3\-F \fP\f2field_list\fP \f3,\fP  \f3\-\-fields\fP\f3=\fP\f2field_list\fP
-Displays the job status data specified by the 
-\f2field_list\fP 
-operand, which is a comma\-separated list of fields.
-Space characters are not allowed in the 
-\f2field_list\fP\c
-\&. 
-.IP 
-See the 
-\f3\-\-help\-fields\fP 
-option for a list of the available fields.
-See the section titled "Job Status Fields" for a description of 
-each field.
-.IP 
-The job accounting data is displayed in the order specified by the 
-\f2field_list\fP 
-operand.
-Thus, the following two commands display the same data but in different order:
-.RS 
-.PP
-.nf 
-.ft 3
-# sstat \-\-fields=jobid,state
-Jobid    State
-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-
-3          COMPLETED
-3.0        COMPLETED
-
-.ft 1
-.fi 
-.RE 
-.RS 
-.PP
-.nf 
-.ft 3
-# sacct \-\-fields=status,jobid
-State     Jobid
-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-
-COMPLETED  3
-COMPLETED  3.0
-
-.ft 1
-.fi 
-.RE 
-.IP 
-The default value for the 
-\f2field_list\fP 
-operand is 
-\f3"jobid,vsize,rss,pages,cputime,ntasks,state"\fP\c
-\&.
-.IP 
-This option has no effect when the 
-\f3\-\-dump\fP 
-option is also specified.
+\f3\-a \fP\f3,\fP \f3\-\-allsteps\fP
+Print all steps for the given job(s) when no step is specified.
 
+.TP 
+\f3\-e \fP\f3,\fP \f3\-\-helpformat\fP
+Print a list of fields that can be specified with the '\-\-format' option.
 
 .TP 
 \f3\-h \fP\f3,\fP \f3\-\-help\fP
 Displays a general help message.
+
 .TP 
-\f3\-\-help\-fields\fP
-Displays a list of fields that can be specified with the 
-\f3\-\-fields\fP 
-option.
-.RS 
-.PP
-.nf 
-.ft 3
-Fields available:
-cputime     jobid       ntasks      pages
-rss         state       vsize
-
-.ft 1
-.fi 
-.RE 
-.IP 
-The section titled "Job Accounting Fields" describes these fields.
+\f3\-j \fP\f3,\fP \f3\-\-jobs\fP
+Format is <job(.step)>. Stat this job step or comma-separated list of
+job steps. This option is required.  The step portion will default to
+step 0 if not specified, unless the --allsteps flag is set where not
+specifing a step will result in all running steps to be displayed.
 
 .TP 
-\f3\-j \fP\f2job(.step)\fP \f3,\fP  \f3\-\-jobs\fP\f3=\fP\f2job(.step)\fP
-Displays information about the specified job(.step) or list of job(.step)s.
-.IP 
-The 
-\f2job(.step)\fP 
-parameter is a comma\-separated list of jobs.
-Space characters are not permitted in this list.
-.IP 
-The default is to display information on all jobs.
+\f3\-n \fP\f3,\fP \f3\-\-noheader\fP
+No header will be added to the beginning of output. The default is to print a header.
 
 .TP 
-\f3\-\-noheader\fP
-Prevents the display of the heading over the output.
-The default action is to display a header.
-.IP 
-This option has no effect when used with the 
-\f3\-\-dump\fP 
-option.
-
-\f3\-S \fP\f3,\fP \f3\-\-stat\fP
-.IP
-Queries the status of a job as the job is running displaying
-the following data:
-.RS 
-.TP "3"
-\(bu
-\f3jobid\fP 
-.TP "3"
-\(bu
-\f3vsize\fP 
-.TP "3"
-\(bu
-\f3rss\fP 
-.TP "3"
-\(bu
-\f3pages\fP 
-.TP "3"
-\(bu
-\f3cputime\fP 
-.TP "3"
-\(bu
-\f3ntasks\fP 
-.TP "3"
-\(bu
-\f3status\fP 
-.RE 
-.IP
-You must also include the \-\-jobs=job(.step) option if no (.step) is 
-given you will recieve the job.0 step.
+\f3\-o \fP\f3,\fP \f3\-\-format\fP,\fP \f3\-\-fields\fP
+Comma seperated list of fields. (use
+'\-\-helpformat' for a list of available fields).
+
+.TP 
+\f3\-p \fP\f3,\fP \f3\-\-parsable\fP
+output will be '|' delimited with a '|' at the end.
+
+.TP 
+\f3\-P \fP\f3,\fP \f3\-\-parsable2\fP
+output will be '|' delimited without a '|' at the end
 
 .TP 
 \f3\-\-usage\fP
-Displays a help message.
+Display brief usage message.
 
 .TP 
-\f3\-v \fP\f3,\fP \f3\-\-verbose\fP
-Reports the state of certain variables during processing.
-This option is primarily used for debugging.
+\f3\-v\fP\f3,\fP \f3\-\-verbose\fP
+Primarily for debugging purposes, report the state of various variables during processing.
+
+.TP 
+\f3\-V \fP\f3,\fP \f3\-\-version\fP
+Print version.
+
 
 .SS "Job Status Fields"
-The following describes each job accounting field:
+The following are the field options:
 .RS 
 .TP
-\f3cputime\fP
-Minimum CPU time of any process followed by its task id along with
-the average of all processes running in the step.
+\f3AveCPU\fP
+
 
 .TP 
-\f3jobid\fP 
-The number of the job or job step.
-It is in the form: 
-\f2job.jobstep\fP\c
-\&.
+\f3AvePages\fP 
+
 
 .TP
-\f3ntasks\fP 
-Total number of tasks in job.
+\f3AveRSS\fP 
+
 
 .TP
-\f3pages\fP
-Maximum page faults of any process followed by its task id along with
-the average of all processes running in the step.
+\f3AveVMSize\fP
+
 
 .TP 
-\f3rss\fP 
-Maximum resident set size of any process followed by its task id along with
-the average of all processes running in the step.
+\f3JobID\fP 
+
+
+.TP
+\f3MaxPages\fP
+
+
+.TP
+\f3MaxPagesNode\fP
+
+
+.TP
+\f3MaxPagesTask\fP
+
+
+.TP
+\f3MaxRSS\fP
+
+
+.TP
+\f3MaxRSSNode\fP
+
+
+.TP
+\f3MaxRSSTask\fP
+
+
+.TP
+\f3MaxVMSize\fP
+
+
+.TP
+\f3MaxVMSizeNode\fP
+
+
+.TP
+\f3MaxVMSizeTask\fP
+
+
+.TP
+\f3MinCPU\fP
+
+
+.TP
+\f3MinCPUNode\fP
+
+
+.TP
+\f3MinCPUTask\fP
+
+
+.TP
+\f3NTasks\fP
+
 
 .TP
-\f3state\fP
-Displays the job state.
-.IP 
-Output can be 
-\f3RUNNING\fP\c
-\&, 
-\f3SUSPENDED\fP\c
-\&,
-\f3COMPLETED\fP\c
-\&, 
-\f3CANCELLED\fP\c
-\&, 
-\f3FAILED\fP\c
-\&, 
-\f3TIMEOUT\fP\c
-\&, or 
-\f3NODE_FAIL\fP\c
-\&.
+\f3SystemCPU\fP
+
 
 .TP
-\f3vsize\fP
-Maximum Virtual Memory size of any process followed by its task id along with
-the average of all processes running in the step.
+\f3TotalCPU\fP
+
+
 
 .SH "EXAMPLES"
 
+.TP
+\f3sstat --format=AveCPU,AvePages,AveRSS,AveVSize,JobID -j 11\fP
+25:02.000  0K         1.37M      5.93M      9.0
+
+.TP
+\f3sstat -p --format=AveCPU,AvePages,AveRSS,AveVSize,JobID -j 11\fP
+25:02.000|0K|1.37M|5.93M|9.0|
+
 .SH "COPYING"
-Copyright (C) 2008 Lawrence Livermore National Security.
+Copyright (C) 2009 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/strigger.1 b/doc/man/man1/strigger.1
index f7f298ad8..f3119511e 100644
--- a/doc/man/man1/strigger.1
+++ b/doc/man/man1/strigger.1
@@ -1,4 +1,4 @@
-.TH STRIGGER "1" "May 2008" "strigger 1.3" "Slurm components"
+.TH STRIGGER "1" "May 2008" "strigger 2.0" "Slurm components"
 
 .SH "NAME"
 strigger \- Used set, get or clear Slurm trigger information.
@@ -272,7 +272,7 @@ Execute /home/joe/job_fini upon completion of job 1237.
 .SH "COPYING"
 Copyright (C) 2007 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man1/sview.1 b/doc/man/man1/sview.1
index a6ca8cf1f..5d9fad1ea 100644
--- a/doc/man/man1/sview.1
+++ b/doc/man/man1/sview.1
@@ -1,4 +1,4 @@
-.TH "sview" "1" "SLURM 1.2" "October 2006" "SLURM Commands"
+.TH "sview" "1" "SLURM 2.0" "October 2006" "SLURM Commands"
 .SH "NAME"
 .LP 
 sview \- graphical user interface to view and modify SLURM state.
@@ -49,7 +49,7 @@ the sview command.
 .SH "COPYING"
 Copyright (C) 2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_allocate_resources.3 b/doc/man/man3/slurm_allocate_resources.3
index d157071c9..6f18756e2 100644
--- a/doc/man/man3/slurm_allocate_resources.3
+++ b/doc/man/man3/slurm_allocate_resources.3
@@ -418,7 +418,7 @@ which must be linked to your process for use
 .SH "COPYING"
 Copyright (C) 2002\-2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_checkpoint_error.3 b/doc/man/man3/slurm_checkpoint_error.3
index f79cb65ec..a99912742 100644
--- a/doc/man/man3/slurm_checkpoint_error.3
+++ b/doc/man/man3/slurm_checkpoint_error.3
@@ -1,4 +1,4 @@
-.TH "Slurm API" "3" "December 2005" "Morris Jette" "Slurm checkpoint functions"
+.TH "Slurm API" "3" "March 2009" "Morris Jette" "Slurm checkpoint functions"
 
 .SH "NAME"
 slurm_checkpoint_able, slurm_checkpoint_complete, slurm_checkpoint_create,
@@ -40,7 +40,9 @@ int \fBslurm_checkpoint_create\fR (
 .br
 	uint32_t \fIstep_id\fP,
 .br
-	uint16_t \fImax_wait\fP
+	uint16_t \fImax_wait\fP,
+.br
+	char *\fIimage_dir\fP
 .br
 );
 .LP
@@ -77,7 +79,28 @@ int \fBslurm_checkpoint_restart\fR (
 .br
 	uint32_t \fIjob_id\fP,
 .br
-	uint32_t \fIstep_id\fP
+	uint32_t \fIstep_id\fP,
+.br
+	uint16_t \fIstick\fP,
+.br
+	char *\fIimage_dir\fP
+.br
+);
+.LP
+.LP
+int \fBslurm_checkpoint_tasks\fR (
+.br
+	uint32_t \fIjob_id\fP,
+.br
+	uint32_t \fIstep_id\fP,
+.br
+	time_t \fIbegin_time\fP,
+.br
+	char *\fIimage_dir\fP,
+.br
+	uint16_t \fImax_wait\fP,
+.br
+	char *\fInodelist\fP
 .br
 );
 .LP
@@ -87,13 +110,18 @@ int \fBslurm_checkpoint_vacate\fR (
 .br
 	uint32_t \fIstep_id\fP,
 .br
-	uint16_t \fImax_wait\fP
+	uint16_t \fImax_wait\fP,
+.br
+	char *\fIimage_dir\fP
 .br
 );
 
 .SH "ARGUMENTS"
 .LP 
 .TP
+\fIbegin_time\fP
+When to begin the operation.
+.TP
 \fIerror_code\fP
 Error code for checkpoint operation. Only the highest value is preserved.
 .TP
@@ -101,18 +129,30 @@ Error code for checkpoint operation. Only the highest value is preserved.
 Error message for checkpoint operation. Only the \fIerror_msg\fP value for the highest 
 \fIerror_code\fP is preserved.
 .TP
+\fIimage_dir\fP
+Directory specification for where the checkpoint file should be read from or 
+written to. The default value is specified by the \fIJobCheckpointDir\fP
+SLURM configuration parameter.
+.TP
 \fIjob_id\fP
 SLURM job ID to perform the operation upon.
 .TP
 \fImax_wait\fP
 Maximum time to allow for the operation to complete in seconds.
 .TP
+\fInodelist\fP
+Nodes to send the request.
+.TP
 \fIstart_time\fP
 Time at which last checkpoint operation began (if one is in progress), otherwise zero.
 .TP
 \fIstep_id\fP
 SLURM job step ID to perform the operation upon. 
 May be NO_VAL if the operation is to be performed on all steps of the specified job.
+Specify SLURM_BATCH_SCRIPT to checkpoint a batch job.
+.TP
+\fIstick\fP
+If non\-zero then restart the job on the same nodes that it was checkpointed from.
 
 .SH "DESCRIPTION"
 .LP
@@ -217,9 +257,10 @@ which must be linked to your process for use
 (e.g. "cc \-lslurm myprog.c").
 
 .SH "COPYING"
-Copyright (C) 2004 The Regents of the University of California.
+Copyright (C) 2004\-2007 The Regents of the University of California.
+Copyright (C) 2008\-2009 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
@@ -236,4 +277,4 @@ details.
 
 .SH "SEE ALSO"
 .LP 
-\fBsrun\fR(1), \fBsqueue\fR(1), \fBfree\fR(3) 
+\fBsrun\fR(1), \fBsqueue\fR(1), \fBfree\fR(3), \fBslurm.conf\fR(5)
diff --git a/doc/man/man3/slurm_checkpoint_tasks.3 b/doc/man/man3/slurm_checkpoint_tasks.3
new file mode 100644
index 000000000..32120a6bb
--- /dev/null
+++ b/doc/man/man3/slurm_checkpoint_tasks.3
@@ -0,0 +1 @@
+.so man3/slurm_checkpoint_error.3
diff --git a/doc/man/man3/slurm_complete_job.3 b/doc/man/man3/slurm_complete_job.3
index 5c3a1221b..882d926c0 100644
--- a/doc/man/man3/slurm_complete_job.3
+++ b/doc/man/man3/slurm_complete_job.3
@@ -1,6 +1,6 @@
-.TH "Slurm API" "3" "September 2003" "Morris Jette" "Slurm job completion calls"
+.TH "Slurm API" "3" "March 2009" "Morris Jette" "Slurm job completion calls"
 .SH "NAME"
-slurm_complete_job, slurm_complete_job_step \- Slurm job completion calls
+slurm_complete_job \- Slurm job completion call
 .SH "SYNTAX"
 .LP 
 #include <slurm/slurm.h>
@@ -9,21 +9,7 @@ int \fBslurm_complete_job\fR (
 .br 
 	uint32_t \fIjob_id\fP, 
 .br
-	uint32_t \fIjob_return_code\fP,
-.br
-	uint32_t \fIsystem_return_code\fP
-.br 
-);
-.LP
-int \fBslurm_complete_job_step\fR (
-.br 
-	uint32_t \fIjob_id\fP,
-.br 
-	uint32_t \fIjob_step_id\fP,
-.br
-	uint32_t \fIjob_return_code\fP,
-.br
-	uint32_t \fIsystem_return_code\fP
+	uint32_t \fIjob_return_code\fP
 .br 
 );
 .SH "ARGUMENTS"
@@ -31,26 +17,20 @@ int \fBslurm_complete_job_step\fR (
 .TP 
 \fIjob_id\fP
 Slurm job id number.
-.TP
-\fIjob_step_id\fp
-Slurm job step id number.
 .TP 
 \fIjob_return_code\fP
-Highest exit code of any task of the user's application. A non\-zero value is considered as an indication of job failure.
-.TP 
-\fIsystem_return_code\fP
-Highest exit code of any system daemon executing the user's application. A non\-zero value is considered as an indication of failure, such as error setting the job's session ID, error creating a log file, etc.
+Exit code of the program executed.
+
 .SH "DESCRIPTION"
 .LP 
 \fBslurm_complete_job\fR Note the termination of a job. This function may only be 
 successfully executed by the job's owner or user root.
-.LP 
-\fBslurm_complete_job_step\fR Note the termination of a job step. This function 
-may only be successfully executed by the job's owner or user root.
+
 .SH "RETURN VALUE"
 .LP
 On success, zero is returned. On error, \-1 is returned, and Slurm error code 
 is set appropriately.
+
 .SH "ERRORS"
 .LP
 \fBSLURM_PROTOCOL_VERSION_ERROR\fR Protocol version has changed, re\-link your code.
@@ -73,9 +53,10 @@ which must be linked to your process for use
 (e.g. "cc \-lslurm myprog.c").
 
 .SH "COPYING"
-Copyright (C) 2002 The Regents of the University of California.
+Copyright (C) 2002\-2007 The Regents of the University of California.
+Copyright (C) 2008\-2009 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_complete_job_step.3 b/doc/man/man3/slurm_complete_job_step.3
deleted file mode 100644
index 117b5dc59..000000000
--- a/doc/man/man3/slurm_complete_job_step.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slurm_complete_job.3
diff --git a/doc/man/man3/slurm_create_partition.3 b/doc/man/man3/slurm_create_partition.3
new file mode 100644
index 000000000..8c2ed9814
--- /dev/null
+++ b/doc/man/man3/slurm_create_partition.3
@@ -0,0 +1 @@
+.so man3/slurm_reconfigure.3
diff --git a/doc/man/man3/slurm_create_reservation.3 b/doc/man/man3/slurm_create_reservation.3
new file mode 100644
index 000000000..8c2ed9814
--- /dev/null
+++ b/doc/man/man3/slurm_create_reservation.3
@@ -0,0 +1 @@
+.so man3/slurm_reconfigure.3
diff --git a/doc/man/man3/slurm_delete_reservation.3 b/doc/man/man3/slurm_delete_reservation.3
new file mode 100644
index 000000000..8c2ed9814
--- /dev/null
+++ b/doc/man/man3/slurm_delete_reservation.3
@@ -0,0 +1 @@
+.so man3/slurm_reconfigure.3
diff --git a/doc/man/man3/slurm_free_ctl_conf.3 b/doc/man/man3/slurm_free_ctl_conf.3
index 04faaed7a..aa9091b80 100644
--- a/doc/man/man3/slurm_free_ctl_conf.3
+++ b/doc/man/man3/slurm_free_ctl_conf.3
@@ -148,7 +148,7 @@ which must be linked to your process for use
 .SH "COPYING"
 Copyright (C) 2002\-2007 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_free_job_info_msg.3 b/doc/man/man3/slurm_free_job_info_msg.3
index ff193a185..e8ec50e9e 100644
--- a/doc/man/man3/slurm_free_job_info_msg.3
+++ b/doc/man/man3/slurm_free_job_info_msg.3
@@ -110,7 +110,7 @@ REM_TIME = ISLURM_GET_REM_TIME(JOBID)
 REM_TIME = ISLURM_GET_REM_TIME2()
 .LP
 ISLURM_GET_REM_TIME2() is equivalent to ISLURM_GET_REM_TIME() except 
-that the JOBID is taken from the SLURM_JOBID environment variable, 
+that the JOBID is taken from the SLURM_JOB_ID environment variable, 
 which is set by SLURM for tasks which it launches.
 Both functions return the number of seconds remaining before the job 
 reaches the end of it's allocated time.
@@ -143,7 +143,7 @@ number into the node information records and the data is terminated with a
 value of \-1. See slurm.h for full details on the data structure's contents. 
 .TP 
 \fIjob_id\fP
-Specifies a slurm job id. If zero, use the SLURM_JOBID environment variable
+Specifies a slurm job id. If zero, use the SLURM_JOB_ID environment variable
 to get the jobid.
 .TP 
 \fIjob_id_ptr\fP
@@ -356,7 +356,7 @@ expressions into a collection of individual node names.
 Copyright (C) 2002\-2006 The Regents of the University of California.
 Copyright (C) 2008 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_free_job_step_info_response_msg.3 b/doc/man/man3/slurm_free_job_step_info_response_msg.3
index cc76f32df..a393e79bf 100644
--- a/doc/man/man3/slurm_free_job_step_info_response_msg.3
+++ b/doc/man/man3/slurm_free_job_step_info_response_msg.3
@@ -204,7 +204,7 @@ expressions into a collection of individual node names.
 .SH "COPYING"
 Copyright (C) 2002\-2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_free_node_info.3 b/doc/man/man3/slurm_free_node_info.3
index 3ce4424e4..f1a868f8a 100644
--- a/doc/man/man3/slurm_free_node_info.3
+++ b/doc/man/man3/slurm_free_node_info.3
@@ -241,7 +241,7 @@ data, these index values will be invalid.
 .SH "COPYING"
 Copyright (C) 2002\-2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_free_partition_info.3 b/doc/man/man3/slurm_free_partition_info.3
index 37191e03b..617f7fa31 100644
--- a/doc/man/man3/slurm_free_partition_info.3
+++ b/doc/man/man3/slurm_free_partition_info.3
@@ -1,15 +1,15 @@
 .TH "Slurm API" "3" "September 2006" "Morris Jette" "Slurm partition information reporting functions"
 .SH "NAME"
-slurm_free_partition_info, slurm_load_partitions, 
+slurm_free_partition_info_msg, slurm_load_partitions, 
 slurm_print_partition_info, slurm_print_partition_info_msg
-\- Slurm partitioninformation reporting functions
+\- Slurm partition information reporting functions
 .SH "SYNTAX"
 .LP
 #include <stdio.h>
 .br
 #include <slurm/slurm.h>
 .LP
-void \fBslurm_free_partition_info\fR (
+void \fBslurm_free_partition_info_msg\fR (
 .br 
 	partition_info_msg_t *\fIpartition_info_msg_ptr\fP
 .br 
@@ -27,7 +27,7 @@ int \fBslurm_load_partitions\fR (
 .LP 
 void \fBslurm_print_partition_info\fR (
 .br
-	FILE *\fIout_file\fp,
+	FILE *\fIout_file\fP,
 .br
 	partition_info_t *\fIpartition_ptr\fP,
 .br
@@ -37,7 +37,7 @@ void \fBslurm_print_partition_info\fR (
 .LP 
 void \fBslurm_print_partition_info_msg\fR (
 .br
-	FILE *\fIout_file\fp,
+	FILE *\fIout_file\fP,
 .br
 	partition_info_msg_t *\fIpartition_info_msg_ptr\fP,
 .br
@@ -81,7 +81,7 @@ not returned.  Otherwise all the configuration. job, node, or partition records
 are returned.
 .SH "DESCRIPTION"
 .LP 
-\fBslurm_free_partition_info\fR Release the storage generated by the 
+\fBslurm_free_partition_info_msg\fR Release the storage generated by the 
 \fBslurm_load_partitions\fR function.
 .LP 
 \fBslurm_load_partitions\fR Returns a partition_info_msg_t that contains an 
@@ -108,6 +108,8 @@ SLURM controller.
 .LP 
 #include <stdio.h>
 .br
+#include <stdlib.h>
+.br
 #include <slurm/slurm.h>
 .br
 #include <slurm/slurm_errno.h>
@@ -126,7 +128,7 @@ int main (int argc, char *argv[])
 .br
 	if (slurm_load_partitions((time_t)NULL,
 .br
-	                          &part_buffer_ptr, SHOW_ALL)) {
+	                          &part_info_ptr, SHOW_ALL)) {
 .br
 		slurm_perror ("slurm_load_partitions error");
 .br
@@ -138,15 +140,15 @@ int main (int argc, char *argv[])
 .br
 	slurm_print_partition_info_msg (stdout, 
 .br
-	                                part_buffer_ptr);
+	                                part_info_ptr, 0);
 .LP
 	/* A harder way.. */
 .br
-	for (i = 0; i < part_buffer_ptr\->record_count; i++) {
+	for (i = 0; i < part_info_ptr\->record_count; i++) {
 .br
 		part_ptr = &part_info_ptr\->partition_array[i];
 .br
-		slurm_print_partition_info(stdout, part_ptr);
+		slurm_print_partition_info(stdout, part_ptr, 0);
 .br
 	}
 .LP
@@ -154,11 +156,11 @@ int main (int argc, char *argv[])
 .br
 	printf("Partitions updated at %lx, records=%d\\n",
 .br
-	       part_buffer_ptr\->last_update, 
+	       part_info_ptr\->last_update, 
 .br
-	       part_buffer_ptr\->record_count);
+	       part_info_ptr\->record_count);
 .br
-	for (i = 0; i < part_buffer_ptr\->record_count; i++) {
+	for (i = 0; i < part_info_ptr\->record_count; i++) {
 .br
 		printf ("PartitionName=%s Nodes=%s\\n", 
 .br
@@ -168,7 +170,7 @@ int main (int argc, char *argv[])
 .br
 	}
 .LP
-	slurm_free_partition_info (part_buffer_ptr);
+	slurm_free_partition_info_msg (part_info_ptr);
 .br
 	exit (0);
 .br 
@@ -189,7 +191,7 @@ expressions into a collection of individual node names.
 .SH "COPYING"
 Copyright (C) 2002\-2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_free_reservation_info_msg.3 b/doc/man/man3/slurm_free_reservation_info_msg.3
new file mode 100644
index 000000000..3c9d6c9bc
--- /dev/null
+++ b/doc/man/man3/slurm_free_reservation_info_msg.3
@@ -0,0 +1,2 @@
+.so man3/slurm_load_reservations.3
+
diff --git a/doc/man/man3/slurm_get_errno.3 b/doc/man/man3/slurm_get_errno.3
index 51b93cd69..6b03c37ab 100644
--- a/doc/man/man3/slurm_get_errno.3
+++ b/doc/man/man3/slurm_get_errno.3
@@ -74,7 +74,7 @@ which must be linked to your process for use
 .SH "COPYING"
 Copyright (C) 2002 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_hostlist_create.3 b/doc/man/man3/slurm_hostlist_create.3
index d08f47feb..5cbb3a64f 100644
--- a/doc/man/man3/slurm_hostlist_create.3
+++ b/doc/man/man3/slurm_hostlist_create.3
@@ -108,7 +108,7 @@ which must be linked to your process for use
 .SH "COPYING"
 Copyright (C) 2002\-2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_init_resv_desc_msg.3 b/doc/man/man3/slurm_init_resv_desc_msg.3
new file mode 100644
index 000000000..8c2ed9814
--- /dev/null
+++ b/doc/man/man3/slurm_init_resv_desc_msg.3
@@ -0,0 +1 @@
+.so man3/slurm_reconfigure.3
diff --git a/doc/man/man3/slurm_init_update_node_msg.3 b/doc/man/man3/slurm_init_update_node_msg.3
new file mode 100644
index 000000000..8c2ed9814
--- /dev/null
+++ b/doc/man/man3/slurm_init_update_node_msg.3
@@ -0,0 +1 @@
+.so man3/slurm_reconfigure.3
diff --git a/doc/man/man3/slurm_job_step_create.3 b/doc/man/man3/slurm_job_step_create.3
index 67d848ba0..af9356b51 100644
--- a/doc/man/man3/slurm_job_step_create.3
+++ b/doc/man/man3/slurm_job_step_create.3
@@ -75,7 +75,7 @@ which must be linked to your process for use
 .SH "COPYING"
 Copyright (C) 2002-2007 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_kill_job.3 b/doc/man/man3/slurm_kill_job.3
index e07d6f7db..c16953501 100644
--- a/doc/man/man3/slurm_kill_job.3
+++ b/doc/man/man3/slurm_kill_job.3
@@ -122,7 +122,7 @@ which must be linked to your process for use
 .SH "COPYING"
 Copyright (C) 2002 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_load_reservations.3 b/doc/man/man3/slurm_load_reservations.3
new file mode 100644
index 000000000..8aebc9e44
--- /dev/null
+++ b/doc/man/man3/slurm_load_reservations.3
@@ -0,0 +1,216 @@
+.TH "Slurm API" "3" "January 2009" "David Bremer" "Slurm reservation information reporting functions"
+.SH "NAME"
+slurm_load_reservations, slurm_free_reservation_info_msg, 
+slurm_print_reservation_info, slurm_sprint_reservation_info,
+slurm_print_reservation_info_msg
+\- Slurm reservation information reporting functions
+.SH "SYNTAX"
+.LP
+#include <stdio.h>
+.br
+#include <slurm/slurm.h>
+.LP 
+int \fBslurm_load_reservations\fR (
+.br 
+	time_t \fIupdate_time\fR, 
+.br 
+	reserve_info_msg_t **\fIreservation_info_msg_pptr\fP
+.br 
+ );
+.LP
+void \fBslurm_free_reservation_info_msg\fR (
+.br 
+	reserve_info_msg_t *\fIreservation_info_msg_ptr\fP
+.br 
+);
+.LP 
+void \fBslurm_print_reservation_info\fR (
+.br
+	FILE *\fIout_file\fP, 
+.br
+	reserve_info_t *\fIreservation_ptr\fP,
+.br
+	int \fIone_liner\fP
+.br 
+);
+.LP 
+char * \fBslurm_sprint_reservation_info\fR (
+.br
+	reserve_info_t *\fIreservation_ptr\fP,
+.br
+	int \fIone_liner\fP
+.br 
+);
+.LP 
+void \fBslurm_print_reservation_info_msg\fR (
+.br
+	FILE *\fIout_file\fP,
+.br
+	reserve_info_msg_t *\fIreservation_info_msg_ptr\fP,
+.br
+	int \fIone_liner\fP
+.br 
+);
+.SH "ARGUMENTS"
+.LP 
+.TP 
+\fIone_liner\fP
+Print one record per line if non\-zero.
+.TP 
+\fIout_file\fP
+Specifies the file to print data to.
+.TP
+\fIreservation_info_msg_pptr\fP
+Specifies the double pointer to the structure to be created and filled 
+with the time of the last reservation update, a record count, and detailed 
+information about each reservation.  Detailed reservation information is 
+written to fixed sized records and includes:  reservation name, time limits, 
+access restrictions, etc.  See slurm.h for full details on the data 
+structure's contents. 
+.TP 
+\fIreservation_info_msg_ptr\fP
+Specifies the pointer to the structure created by \fBslurm_load_reservations\fP. 
+.TP
+\fIupdate_time\fP
+For all of the following informational calls, if update_time is equal to or greater 
+than the last time changes where made to that information, new information is 
+not returned.  Otherwise all the configuration. job, node, or reservation records 
+are returned.
+.SH "DESCRIPTION"
+.LP 
+\fBslurm_load_reservations\fR Returns a reserve_info_msg_t that contains an 
+update time, record count, and array of reservation_table records for all reservations.
+.LP 
+\fBslurm_free_reservation_info_msg\fR Release the storage generated by the 
+\fBslurm_load_reservations\fR function.
+.LP 
+\fBslurm_print_reservation_info\fR  Prints the contents of the data structure 
+describing one of the reservation records from the data loaded by the 
+\fBslurm_load_reservations\fR function.
+.LP 
+\fBslurm_sprint_reservation_info\fR  Prints the sames info as 
+\fBslurm_print_reservation_info\fR, but prints to a string that must be freed 
+by the caller, rather than printing to a file.
+.LP 
+\fBslurm_print_reservation_info_msg\fR Prints the contents of the data 
+structure describing all reservation records loaded by the 
+\fBslurm_load_reservations\fR function.
+.SH "RETURN VALUE"
+.LP
+On success, zero is returned. On error, \-1 is returned, and Slurm error code 
+is set appropriately.
+.SH "ERRORS"
+.LP
+\fBSLURM_NO_CHANGE_IN_DATA\fR Data has not changed since \fBupdate_time\fR.
+.LP
+\fBSLURM_PROTOCOL_VERSION_ERROR\fR Protocol version has changed, re\-link 
+your code.
+.LP
+\fBSLURM_PROTOCOL_SOCKET_IMPL_TIMEOUT\fR Timeout in communicating with 
+SLURM controller.
+.SH "EXAMPLE"
+.LP 
+#include <stdio.h>
+.br
+#include <stdlib.h>
+.br
+#include <slurm/slurm.h>
+.br
+#include <slurm/slurm_errno.h>
+.LP 
+int main (int argc, char *argv[])
+.br 
+{
+.br
+	int i;
+.br
+	reserve_info_msg_t *res_info_ptr = NULL;
+.br
+	reserve_info_t *res_ptr;
+.LP
+	/* get and dump all reservation information */
+.br
+	if (slurm_load_reservations((time_t)NULL,
+.br
+	                            &res_info_ptr)) {
+.br
+		slurm_perror ("slurm_load_reservations error");
+.br
+		exit (1);
+.br
+	}
+.LP
+	/* The easy way to print... */
+.br
+	slurm_print_reservation_info_msg(stdout, 
+.br
+	                                 res_info_ptr, 0);
+.LP
+	/* A harder way.. */
+.br
+	for (i = 0; i < res_info_ptr\->record_count; i++) {
+.br
+		res_ptr = &res_info_ptr\->reservation_array[i];
+.br
+		slurm_print_reservation_info(stdout, res_ptr, 0);
+.br
+	}
+.LP
+	/* The hardest way. */
+.br
+	printf("reservations updated at %lx, records=%d\\n",
+.br
+	       res_info_ptr\->last_update, 
+.br
+	       res_info_ptr\->record_count);
+.br
+	for (i = 0; i < res_info_ptr\->record_count; i++) {
+.br
+		printf ("reservationName=%s Nodes=%s\\n", 
+.br
+			res_info_ptr\->reservation_array[i].name, 
+.br
+			res_info_ptr\->reservation_array[i].node_list );
+.br
+	}
+.LP
+	slurm_free_reservation_info_msg (res_info_ptr);
+.br
+	return 0;
+.br 
+}
+
+.SH "NOTES"
+These functions are included in the libslurm library, 
+which must be linked to your process for use
+(e.g. "cc \-lslurm myprog.c").
+.LP
+The \fBslurm_hostlist_\fR functions can be used to convert SLURM node list
+expressions into a collection of individual node names.
+
+.SH "COPYING"
+Copyright (C) 2002\-2006 The Regents of the University of California.
+Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+CODE\-OCEC\-09\-009. All rights reserved.
+.LP
+This file is part of SLURM, a resource management program.
+For details, see <https://computing.llnl.gov/linux/slurm/>.
+.LP
+SLURM 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.
+.LP
+SLURM 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.
+
+.SH "SEE ALSO"
+.LP 
+\fBscontrol\fR(1), \fBsinfo\fR(1), \fBsqueue\fR(1), 
+\fBslurm_hostlist_create\fR(3), \fBslurm_hostlist_shift\fR(3), 
+\fBslurm_hostlist_destroy\fR(3),
+\fBslurm_get_errno\fR(3), \fBslurm_load_node\fR(3), 
+\fBslurm_perror\fR(3), \fBslurm_strerror\fR(3)
+
diff --git a/doc/man/man3/slurm_print_reservation_info.3 b/doc/man/man3/slurm_print_reservation_info.3
new file mode 100644
index 000000000..3c9d6c9bc
--- /dev/null
+++ b/doc/man/man3/slurm_print_reservation_info.3
@@ -0,0 +1,2 @@
+.so man3/slurm_load_reservations.3
+
diff --git a/doc/man/man3/slurm_print_reservation_info_msg.3 b/doc/man/man3/slurm_print_reservation_info_msg.3
new file mode 100644
index 000000000..3c9d6c9bc
--- /dev/null
+++ b/doc/man/man3/slurm_print_reservation_info_msg.3
@@ -0,0 +1,2 @@
+.so man3/slurm_load_reservations.3
+
diff --git a/doc/man/man3/slurm_reconfigure.3 b/doc/man/man3/slurm_reconfigure.3
index 60c06fd62..a04c25569 100644
--- a/doc/man/man3/slurm_reconfigure.3
+++ b/doc/man/man3/slurm_reconfigure.3
@@ -1,26 +1,61 @@
-.TH "Slurm API" "3" "May 2007" "Morris Jette" "Slurm administrative calls"
+.TH "Slurm API" "3" "May 2009" "Morris Jette" "Slurm administrative calls"
 .SH "NAME"
-slurm_delete_partition, slurm_init_part_desc_msg,
-slurm_reconfigure, slurm_shutdown, slurm_update_job, 
-slurm_update_node, slurm_update_partition
+slurm_create_partition, slurm_create_reservation, 
+slurm_delete_partition, slurm_delete_reservation, 
+slurm_init_part_desc_msg, slurm_init_resv_desc_msg,
+slurm_reconfigure, slurm_shutdown, slurm_takeover, slurm_update_job, 
+,slurm_init_update_node_msg slurm_update_node, slurm_update_partition,
+slurm_update_reservation
 \- Slurm administrative functions 
 .SH "SYNTAX"
 .LP 
 #include <slurm/slurm.h>
 .LP
+int \fBslurm_create_partition\fR ( 
+.br 
+	update_part_msg_t *\fIupdate_part_msg_ptr\fP 
+.br 
+);
+.LP
+int \fBslurm_create_reservation\fR ( 
+.br 
+	reserve_request_msg_t *\fIupdate_resv_msg_ptr\fP 
+.br 
+);
+.LP
+int \fBslurm_delete_partition\fR ( 
+.br 
+	delete_part_msg_t *\fIdelete_part_msg_ptr\fP 
+.br 
+);
+.LP
+int \fBslurm_delete_reservation\fR ( 
+.br 
+	reservation_name_msg_t *\fIdelete_resv_msg_ptr\fP 
+.br 
+);
+.LP
 void \fBslurm_init_part_desc_msg\fR (
 .br
 	update_part_msg_t *\fIupdate_part_msg_ptr\fP 
 .br 
 );
+.LP
+void \fBslurm_init_resv_desc_msg\fR (
+.br
+	reserve_request_msg_t *\fIupdate_resv_msg_ptr\fP 
+.br 
+);
 .LP 
 int \fBslurm_reconfigure\fR ( );
 .LP 
 int \fBslurm_shutdown\fR ( 
 .br
-	uint16_t \fIoptions\fP
+	uint16_t \fIshutdown_options\fP
 .br
 );
+.LP 
+int \fBslurm_takeover\fR ( );
 .LP
 int \fBslurm_update_job\fR (
 .br 
@@ -28,15 +63,15 @@ int \fBslurm_update_job\fR (
 .br 
 );
 .LP
-int \fBslurm_update_node\fR ( 
-.br 
+void \fBslurm_init_update_node_msg\fR(
+.br
 	update_node_msg_t *\fIupdate_node_msg_ptr\fP 
 .br 
 );
 .LP
-int \fBslurm_delete_partition\fR ( 
+int \fBslurm_update_node\fR ( 
 .br 
-	delete_part_msg_t *\fIdelete_part_msg_ptr\fP 
+	update_node_msg_t *\fIupdate_node_msg_ptr\fP 
 .br 
 );
 .LP
@@ -45,10 +80,16 @@ int \fBslurm_update_partition\fR (
 	update_part_msg_t *\fIupdate_part_msg_ptr\fP 
 .br 
 );
+.LP
+int \fBslurm_update_reservation\fR ( 
+.br 
+	reserve_request_msg_t *\fIupdate_resv_msg_ptr\fP 
+.br 
+);
 .SH "ARGUMENTS"
 .LP 
 .TP 
-\fIoptions\fP
+\fIshutdown_options\fP
 0: all slurm daemons are shutdown
 .br
 1: slurmctld generates a core file
@@ -56,37 +97,76 @@ int \fBslurm_update_partition\fR (
 2: only the slurmctld is shutdown (no core file)
 .TP 
 \fIdelete_part_msg_ptr\fP
-Specifies the pointer to a partition delete request specification. See slurm.h for 
-full details on the data structure's contents. 
+Specifies the pointer to a partition delete request specification. 
+See slurm.h for full details on the data structure's contents. 
+.TP 
+\fIdelete_resv_msg_ptr\fP
+Specifies the pointer to a reservation delete request specification. 
+See slurm.h for full details on the data structure's contents. 
 .TP
 \fIupdate_job_msg_ptr\fP
-Specifies the pointer to a job update request specification. See slurm.h for full 
-details on the data structure's contents. 
+Specifies the pointer to a job update request specification. See slurm.h 
+for full details on the data structure's contents. 
 .TP 
 \fIupdate_node_msg_ptr\fP
-Specifies the pointer to a node update request specification. See slurm.h for full 
-details on the data structure's contents. 
+Specifies the pointer to a node update request specification. See slurm.h 
+for full details on the data structure's contents. 
 .TP 
 \fIupdate_part_msg_ptr\fP
-Specifies the pointer to a partition update request specification. See slurm.h for 
-full details on the data structure's contents. 
+Specifies the pointer to a partition create or update request specification. 
+See slurm.h for full details on the data structure's contents. 
+.TP 
+\fIupdate_resv_msg_ptr\fP
+Specifies the pointer to a reservation create or update request specification. 
+See slurm.h for full details on the data structure's contents. 
 .SH "DESCRIPTION"
 .LP 
-\fBslurm_delete_partition\fR Request that the specified partition be deleted. 
-All jobs associated with the identified partition will be terminated and purged.
+\fBslurm_create_partition\fR Request that a new partition be created. 
+Initialize the data structure using the \fBslurm_init_part_desc_msg\fR 
+function prior to setting values of the parameters to be changed.
+Note: \fBslurm_init_part_desc_msg\fR is not equivalent to setting the data 
+structure values to zero.  A partition name must be set for the call to
+succeed.
+This function may only be successfully executed by user root.
+.LP 
+\fBslurm_create_reservation\fR Request that a new reservation be created. 
+Initialize the data structure using the \fBslurm_init_resv_desc_msg\fR 
+function prior to setting values of the parameters to be changed.
+Note: \fBslurm_init_resv_desc_msg\fR is not equivalent to setting the data 
+structure values to zero.  The reservation's time limits, user or 
+account restrictions, and node names or a node count must be specified for
+the call to succeed.
 This function may only be successfully executed by user root.
 .LP 
-\fBslurm_init_part_desc_msg\fR Initialize the contents of a partition descriptor 
-with default values. Note: \fBslurm_init_part_desc_msg\fR is not equivalent to 
-setting the data structure values to zero. Execute this function before executing 
-\fBslurm_update_part\fR.
+\fBslurm_delete_partition\fR Request that the specified partition be deleted. 
+All jobs associated with the identified partition will be terminated and 
+purged.  This function may only be successfully executed by user root.
+.LP 
+\fBslurm_delete_reservation\fR Request that the specified reservation be 
+deleted. This function may only be successfully executed by user root.
+.LP 
+\fBslurm_init_part_desc_msg\fR Initialize the contents of a partition 
+descriptor with default values. Note: \fBslurm_init_part_desc_msg\fR is 
+not equivalent to setting the data structure values to zero. Execute 
+this function before executing \fBslurm_create_partition\fR or 
+\fBslurm_update_partition\fR.
+.LP 
+\fBslurm_init_resv_desc_msg\fR Initialize the contents of a reservation 
+descriptor with default values. Note: \fBslurm_init_resv_desc_msg\fR is 
+not equivalent to setting the data structure values to zero. Execute this 
+function before executing \fBslurm_create_reservation\fR or 
+\fBslurm_update_reservation\fR.
 .LP 
-\fBslurm_reconfigure\fR Request that the Slurm controller re\-read its configuration 
-file. The new configuration parameters take effect immediately. This function may 
-only be successfully executed by user root.
+\fBslurm_reconfigure\fR Request that the Slurm controller re\-read its 
+configuration file. The new configuration parameters take effect 
+immediately. This function may only be successfully executed by user root.
 .LP 
-\fBslurm_shutdown\fR Request that the Slurm controller terminate. This function may 
-only be successfully executed by user root.
+\fBslurm_shutdown\fR Request that the Slurm controller terminate. This 
+function may only be successfully executed by user root.
+.LP 
+\fBslurm_takeover\fR Request that the Slurm primary controller shutdown 
+immediately and the backup controller take over.
+This function may only be successfully executed by user root.
 .LP 
 \fBslurm_update_job\fR Request that the configuration of a job be updated. Note 
 that most, but not all parameters of a job may be changed by this function. 
@@ -99,10 +179,15 @@ Slurm uses the priority one to represent jobs that can not be scheduled until
 additional nodes are returned to service (i.e. not DOWN, DRAINED, or FAILED). 
 This permits lower priority jobs to utilize those resources which are available.
 .LP 
+\fBslurm_init_update_node_msg\fR Initialize the contents of an update mpde 
+descriptor with default values. Note: \fBslurm_init_update_node_msg\fR is 
+not equivalent to setting the data structure values to zero. Execute 
+this function before executing \fBslurm_update_node\fR.
+.LP 
 \fBslurm_update_node\fR Request that the state of one or more nodes be updated. 
 Note that the state of a node (e.g. DRAINING, IDLE, etc.) may be changed, but 
 its hardware configuration may not be changed by this function. If the hardware 
-configuration of a node changes, update the Slurm configuration file and execute 
+configuration of a node changes, update the Slurm configuration file and execute
 the \fBslurm_reconfigure\fR function. This function may only be successfully 
 executed by user root. If used by some autonomous program, the state value 
 most likely to be used is \fBNODE_STATE_DRAIN\fR or \fBNODE_STATE_FAILING\fR. 
@@ -115,18 +200,29 @@ is not responding (and has not responded for an interval at least as long
 as the \fBSlurmdTimeout\fR configuration parameter). The node will leave the 
 \fBNODE_STATE_DOWN\fR state as soon as  the slurmd daemon communicates.
 .LP 
-\fBslurm_update_partition\fR Request that the configuration of a partition be updated. 
-Note that most, but not all parameters of a partition may be changed by this 
-function. Initialize the data structure using the \fBslurm_init_part_desc_msg\fR 
-function prior to setting values of the parameters to be changed. Note: 
-\fBslurm_init_part_desc_msg\fR is not equivalent to setting the data structure 
-values to zero. If the partition name specified by this function does not 
-already exist, a new partition is created with the supplied parameters. This 
+\fBslurm_update_partition\fR Request that the configuration of a 
+partition be updated.  Note that most, but not all parameters of a 
+partition may be changed by this function. Initialize the data 
+structure using the \fBslurm_init_part_desc_msg\fR function prior 
+to setting values of the parameters to be changed. Note: 
+\fBslurm_init_part_desc_msg\fR is not equivalent to setting the 
+data structure values to zero. This function may only be 
+successfully executed by user root.
+.LP 
+\fBslurm_update_reservation\fR Request that the configuration of a 
+reservation be updated.  Initialize the data structure using the 
+\fBslurm_init_resv_desc_msg\fR function prior to setting values of 
+the parameters to be changed. Note:  \fBslurm_init_resv_desc_msg\fR 
+is not equivalent to setting the data structure values to zero. This 
 function may only be successfully executed by user root.
 .SH "RETURN VALUE"
 .LP
 On success, zero is returned. On error, \-1 is returned, and the Slurm error 
 code is set appropriately.
+.LP
+Exception:  A successful slurm_create_reservation call returns a string 
+containing the name of the reservation, in memory to be freed by the caller.
+A failed call returns NULL and sets the Slurm error code.
 .SH "ERRORS"
 .LP
 \fBSLURM_PROTOCOL_VERSION_ERROR\fR Protocol version has changed, re\-link your 
@@ -141,7 +237,8 @@ node state transition is not valid.
 .LP
 \fBESLURM_INVALID_AUTHTYPE_CHANGE\fR The \fBAuthType\fR parameter can
 not be changed using the \fBslurm_reconfigure\fR function, but all SLURM
-daemons and commands must be restarted. See \fBslurm.conf\fR(5) for more information.
+daemons and commands must be restarted. See \fBslurm.conf\fR(5) for more 
+information.
 .LP
 \fBESLURM_INVALID_SCHEDTYPE_CHANGE\fR The \fBSchedulerType\fR parameter can 
 not be changed using the \fBslurm_reconfigure\fR function, but the 
@@ -158,6 +255,20 @@ the requested action (e.g. trying to delete or modify another user's job).
 .LP
 \fBSLURM_PROTOCOL_SOCKET_IMPL_TIMEOUT\fR Timeout in communicating with 
 SLURM controller.
+.LP
+\fBESLURM_RESERVATION_ACCESS\fR  Requestor is not authorized to access the 
+reservation.
+.LP
+\fBESLURM_RESERVATION_INVALID\fR  Invalid reservation parameter given, 
+e.g. wrong name given.
+.LP
+\fBESLURM_INVALID_TIME_VALUE\fR  Invalid time value.
+.LP
+\fBESLURM_RESERVATION_BUSY\fR  Reservation is busy, e.g. trying to delete a 
+reservation while in use.
+.LP
+\fBESLURM_RESERVATION_NOT_USABLE\fR  Reservation not usable, e.g. trying to 
+use an expired reservation.
 .SH "EXAMPLE"
 .LP 
 #include <stdio.h>
@@ -170,13 +281,17 @@ int main (int argc, char *argv[])
 .br 
 {
 .br 
-	job_desc_msg_t update_job_msg;
+	job_desc_msg_t          update_job_msg;
+.br
+	update_node_msg_t       update_node_msg;
+.br
+	partition_desc_msg_t    update_part_msg;
 .br
-	update_node_msg_t update_node_msg;
+	delete_part_msg_t       delete_part_msg;
 .br
-	partition_desc_msg_t update_part_msg ;
+	reserve_request_msg_t   resv_msg;
 .br
-	delete_part_msg_t delete_part_msg ;
+	char                   *resv_name = NULL;
 .LP 
 	if (slurm_reconfigure ( )) {
 .br
@@ -205,6 +320,16 @@ int main (int argc, char *argv[])
 	update_part_msg.name = "test.partition";
 .br
 	update_part_msg.state_up = 0;  /* partition down */
+.br 
+	if (slurm_create_partition (&update_part_msg)) { 
+.br
+		slurm_perror ("slurm_create_partition error");
+.br 
+		exit (1);
+.br
+	}
+.LP 
+	update_part_msg.state_up = 1;  /* partition up */
 .br 
 	if (slurm_update_partition (&update_part_msg)) { 
 .br
@@ -224,6 +349,8 @@ int main (int argc, char *argv[])
 .br
 	}
 .LP 
+	slurm_init_update_node_msg (&update_node_msg);
+.br
 	update_node_msg.node_names = "lx[10\-12]";
 .br
 	update_node_msg.node_state = NODE_STATE_DRAINING ;
@@ -235,6 +362,28 @@ int main (int argc, char *argv[])
 		exit (1);
 .br 
 	}
+.LP 
+	slurm_init_resv_desc_msg ( &resv_msg );
+.br
+	resv_msg.start_time = time(NULL) + 60*60;  /* One hour from now */ 
+.br
+	resv_msg.duration = 720;  /* 12 hours/720 minutes */
+.br
+	resv_msg.node_cnt = 10; 
+.br
+	resv_msg.accounts = "admin";
+.br 
+	resv_name = slurm_create_reservation (&resv_msg); 
+.br
+	if (!resv_name) {
+.br
+		slurm_perror ("slurm_create_reservation error");
+.br 
+		exit (1);
+.br
+	}
+.br
+	free(resv_name);
 .br 
 	exit (0);
 .br 
@@ -248,7 +397,7 @@ which must be linked to your process for use
 .SH "COPYING"
 Copyright (C) 2002\-2007 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_resume.3 b/doc/man/man3/slurm_resume.3
index c31c9741b..70942cb8c 100644
--- a/doc/man/man3/slurm_resume.3
+++ b/doc/man/man3/slurm_resume.3
@@ -75,7 +75,7 @@ which must be linked to your process for use
 .SH "COPYING"
 Copyright (C) 2005\-2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_slurmd_status.3 b/doc/man/man3/slurm_slurmd_status.3
index 60ef74bcb..1f4ff24fa 100644
--- a/doc/man/man3/slurm_slurmd_status.3
+++ b/doc/man/man3/slurm_slurmd_status.3
@@ -52,7 +52,7 @@ message as loaded using slurm_load_slurmd_status.
 Copyright (C) 2006-2007 The Regents of the University of California.
 Copyright (C) 2008 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_sprint_reservation_info.3 b/doc/man/man3/slurm_sprint_reservation_info.3
new file mode 100644
index 000000000..3c9d6c9bc
--- /dev/null
+++ b/doc/man/man3/slurm_sprint_reservation_info.3
@@ -0,0 +1,2 @@
+.so man3/slurm_load_reservations.3
+
diff --git a/doc/man/man3/slurm_step_ctx_create.3 b/doc/man/man3/slurm_step_ctx_create.3
index 54a96c299..13b35e7f6 100644
--- a/doc/man/man3/slurm_step_ctx_create.3
+++ b/doc/man/man3/slurm_step_ctx_create.3
@@ -236,7 +236,7 @@ which must be linked to your process for use
 .SH "COPYING"
 Copyright (C) 2004-2007 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_step_launch.3 b/doc/man/man3/slurm_step_launch.3
index 6e6c10c20..fb2c4a739 100644
--- a/doc/man/man3/slurm_step_launch.3
+++ b/doc/man/man3/slurm_step_launch.3
@@ -20,8 +20,6 @@ void \fBslurm_step_launch_params_t_init\fR (
 int \fBslurm_step_launch\fR (
 .br
 	slurm_step_ctx \fIctx\fP,
-.br
-	char * \fIlauncher_host\fP,
 .br
 	const slurm_step_launch_params_t *\fIlaunch_req\fP,
 .br
@@ -68,12 +66,6 @@ function calls, and destroyed by \fBslurm_step_ctx_destroy\fR.
 \fIlaunch_req\fP
 Pointer to a structure allocated by the user containing specifications of 
 the job step to be launched.
-.TP
-\fIlauncher_host\fP
-Host name or address to be used to identify the destination of PMI communications
-for MPICH2. We intend to embed this information within \fIlaunch_req\fP in the
-next major release of SLURM, when changes to the protocol can be more easily
-addressed.
 
 .SH "DESCRIPTION"
 .LP
@@ -238,7 +230,7 @@ which must be linked to your process for use
 Copyright (C) 2006-2007 The Regents of the University of California.
 Copyright (C) 2008 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man3/slurm_takeover.3 b/doc/man/man3/slurm_takeover.3
new file mode 100644
index 000000000..8c2ed9814
--- /dev/null
+++ b/doc/man/man3/slurm_takeover.3
@@ -0,0 +1 @@
+.so man3/slurm_reconfigure.3
diff --git a/doc/man/man3/slurm_trigger.3 b/doc/man/man3/slurm_trigger.3
deleted file mode 100644
index e69de29bb..000000000
diff --git a/doc/man/man3/slurm_update_reservation.3 b/doc/man/man3/slurm_update_reservation.3
new file mode 100644
index 000000000..8c2ed9814
--- /dev/null
+++ b/doc/man/man3/slurm_update_reservation.3
@@ -0,0 +1 @@
+.so man3/slurm_reconfigure.3
diff --git a/doc/man/man5/bluegene.conf.5 b/doc/man/man5/bluegene.conf.5
index eb2426123..484360c51 100644
--- a/doc/man/man5/bluegene.conf.5
+++ b/doc/man/man5/bluegene.conf.5
@@ -1,4 +1,4 @@
-.TH "bluegene.conf" "5" "April 2008" "bluegene.conf 1.2" "Slurm configuration file"
+.TH "bluegene.conf" "5" "April 2008" "bluegene.conf 2.0" "Slurm configuration file"
 .SH "NAME"
 bluegene.conf \- Slurm configuration file for BlueGene systems 
 .SH "DESCRIPTION"
@@ -27,7 +27,7 @@ Alternative BlrtsImage.  This is an optional field only used for
 mulitple images on a system and should be followed by a Groups= with
 the user groups allowed to use this image (i.e. Groups=da,jette) if 
 Groups= is not stated then this image will be able to be used by all
-groups. You can but as many alternative images as you want in the conf file.
+groups. You can put as many alternative images as you want in the conf file.
 
 .TP
 \fBAltLinuxImage\fR
@@ -35,7 +35,7 @@ Alternative LinuxImage.  This is an optional field only used for
 mulitple images on a system and should be followed by a Groups= with
 the user groups allowed to use this image (i.e. Groups=da,jette) if 
 Groups= is not stated then this image will be able to be used by all
-groups. You can but as many alternative images as you want in the conf file.
+groups. You can put as many alternative images as you want in the conf file.
 
 .TP
 \fBAltRamDiskImage\fR
@@ -43,7 +43,7 @@ Alternative RamDiskImage.  This is an optional field only used for
 mulitple images on a system and should be followed by a Groups= with
 the user groups allowed to use this image (i.e. Groups=da,jette) if 
 Groups= is not stated then this image will be able to be used by all
-groups. You can but as many alternative images as you want in the conf file.
+groups. You can put as many alternative images as you want in the conf file.
 
 .TP
 \fBBlrtsImage\fR
@@ -67,7 +67,7 @@ Alternative CnloadImage.  This is an optional field only used for
 mulitple images on a system and should be followed by a Groups= with
 the user groups allowed to use this image (i.e. Groups=da,jette) if 
 Groups= is not stated then this image will be able to be used by all
-groups. You can but as many alternative images as you want in the conf file.
+groups. You can put as many alternative images as you want in the conf file.
 
 .TP
 \fBAltIoloadImage\fR
@@ -75,7 +75,7 @@ Alternative IoloadImage.  This is an optional field only used for
 mulitple images on a system and should be followed by a Groups= with
 the user groups allowed to use this image (i.e. Groups=da,jette) if 
 Groups= is not stated then this image will be able to be used by all
-groups. You can but as many alternative images as you want in the conf file.
+groups. You can put as many alternative images as you want in the conf file.
 
 .TP
 \fBCnloadImage\fR
@@ -94,7 +94,7 @@ Alternative MloaderImage.  This is an optional field only used for
 mulitple images on a system and should be followed by a Groups= with
 the user groups allowed to use this image (i.e. Groups=da,jette) if 
 Groups= is not stated then this image will be able to be used by all
-groups. You can but as many alternative images as you want in the conf file.
+groups. You can put as many alternative images as you want in the conf file.
 
 .TP
 \fBBasePartitionNodeCount\fR
@@ -266,7 +266,7 @@ BPs=[333x333] Type=SMALL NodeCards=4 Quarters=3 # 1/16 * 4 + 1/4 * 3
 .SH "COPYING"
 Copyright (C) 2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man5/slurm.conf.5 b/doc/man/man5/slurm.conf.5
index eb8618009..d82014881 100644
--- a/doc/man/man5/slurm.conf.5
+++ b/doc/man/man5/slurm.conf.5
@@ -1,4 +1,4 @@
-.TH "slurm.conf" "5" "September 2008" "slurm.conf 1.3" "Slurm configuration file"
+.TH "slurm.conf" "5" "May 2009" "slurm.conf 2.0" "Slurm configuration file"
 
 .SH "NAME"
 slurm.conf \- Slurm configuration file 
@@ -38,95 +38,96 @@ The overall configuration parameters available include:
 
 .TP
 \fBAccountingStorageEnforce\fR
-If set to a non-zero value and the user, partition, account association is not 
-defined for a job in the accounting database then prevent the job from being 
-executed. This needs to be set to '2' if you the association limits will also 
-be enforced.  If set to anything else limits of associations will not be 
-enforced.
-The default value is zero.
+This controls what level of enforcement you want on associations when new
+jobs are submitted.  Valid options are any combination of associations, limits,
+and wckeys, or all for all things.  If limits is set associations is implied.  
+If wckeys is set both limits and associations are implied along with 
+TrackWckey being set.  By enforcing Associations no new job is allowed to run 
+unless a corresponding association exists in the system.  If limits are 
+enforced users can be limited by association to how many nodes or how long 
+jobs can run or other limits.  With wckeys enforced jobs will not be scheduled 
+unless a valid workload characterization key is specified.
+
+.TP
+\fBAccountingStorageBackupHost\fR
+The name of the backup machine hosting the accounting storage database.
+Only used for accounting_storage/slurmdbd plugin, ignored otherwise.
 
 .TP
 \fBAccountingStorageHost\fR
-Define the name of the host where the database is running we are going
-to store the accounting data.
+The name of the machine hosting the accounting storage database.
 Only used for database type storage plugins, ignored otherwise.
 Also see \fBDefaultStorageHost\fR.
 
 .TP
 \fBAccountingStorageLoc\fR
-Specifies the location of the file or database where accounting 
-records are written.
+The fully qualified file name where accounting records are written
+when the \fBAccountingStorageType\fR is "accounting_storage/filetxt"
+or else the name of the database where accounting records are stored when the
+\fBAccountingStorageType\fR is a database.
 Also see \fBDefaultStorageLoc\fR.
 
 .TP
 \fBAccountingStoragePass\fR
-Define the password used to gain access to the database to store the
-accounting data.
-Only used for database type storage plugins, ignored otherwise.
-In the case of Slurm DBD (Data Base Daemon) with Munge authentication this can be 
-configured to use a Munge daemon specifically configured to provide authentication 
-between clusters while the default Munge daemon provides authentication within a cluster. 
-In that case, \fBAccountingStoragePass\fR should specify the named port to be used
-for communications with the alternate Munge daemon (e.g. 
-"/var/run/munge/global.socket.2"). The default value is NULL.
-Also see \fBDefaultStoragePass\fR.
+The password used to gain access to the database to store the
+accounting data.  Only used for database type storage plugins, ignored
+otherwise.  In the case of SLURM DBD (Database Daemon) with Munge
+authentication this can be configured to use a Munge daemon
+specifically configured to provide authentication between clusters
+while the default Munge daemon provides authentication within a
+cluster.  In that case, \fBAccountingStoragePass\fR should specify the
+named port to be used for communications with the alternate Munge
+daemon (e.g.  "/var/run/munge/global.socket.2"). The default value is
+NULL.  Also see \fBDefaultStoragePass\fR.
 
 .TP
 \fBAccountingStoragePort\fR
-Define the port the database server is listening on where we are going
-to store the accounting data.
+The listening port of the accounting storage database server.
 Only used for database type storage plugins, ignored otherwise.
 Also see \fBDefaultStoragePort\fR.
 
 .TP
 \fBAccountingStorageType\fR
-Define the accounting storage mechanism type.
-Acceptable values at present include 
-"accounting_storage/filetxt", "accounting_storage/gold",
-"accounting_storage/mysql", "accounting_storage/none", 
-"accounting_storage/pgsql", and "accounting_storage/slurmdbd".
-The value "accounting_storage/filetxt" indicates that accounting records
-will be written to a the file specified by the 
-\fBAccountingStorageLoc\fR parameter.
-The value "accounting_storage/gold" indicates that account records
-will be written to Gold
-(http://www.clusterresources.com/pages/products/gold-allocation-manager.php),
-which maintains its own database.
-The value "accounting_storage/mysql" indicates that accounting records
-should be written to a MySQL database specified by the 
-\fBAccountingStorageLoc\fR parameter.
-The default value is "accounting_storage/none", which means that
-account records are not maintained. 
-The value "accounting_storage/pgsql" indicates that accounting records
-should be written to a PostgreSQL database specified by the 
-\fBAccountingStorageLoc\fR parameter.  This plugin is not complete and 
-should not be used if wanting to use associations.  It will however work with
-basic accounting of jobs and job steps.  If interested in 
-completing please email slurm-dev@lists.llnl.gov.
-The value "accounting_storage/slurmdbd" indicates that accounting records
-will be written to SlurmDDB, which manages an underlying MySQL or 
-PostgreSQL database. See "man slurmdbd" for more information.
-Also see \fBDefaultStorageType\fR.
+The accounting storage mechanism type.  Acceptable values at
+present include "accounting_storage/filetxt",
+"accounting_storage/mysql", "accounting_storage/none",
+"accounting_storage/pgsql", and "accounting_storage/slurmdbd".  The
+"accounting_storage/filetxt" value indicates that accounting records
+will be written to the file specified by the
+\fBAccountingStorageLoc\fR parameter.  The "accounting_storage/mysql"
+value indicates that accounting records will be written to a MySQL
+database specified by the \fBAccountingStorageLoc\fR parameter.  The
+"accounting_storage/pgsql" value indicates that accounting records
+will be written to a PostgreSQL database specified by the
+\fBAccountingStorageLoc\fR parameter.  The
+"accounting_storage/slurmdbd" value indicates that accounting records
+will be written to the SLURM DBD, which manages an underlying MySQL or
+PostgreSQL database. See "man slurmdbd" for more information.  The
+default value is "accounting_storage/none" and indicates that account
+records are not maintained.  Note: the PostgreSQL plugin is not
+complete and should not be used if wanting to use associations.  It
+will however work with basic accounting of jobs and job steps.  If
+interested in completing, please email slurm-dev@lists.llnl.gov.  Also
+see \fBDefaultStorageType\fR.
 
 .TP
 \fBAccountingStorageUser\fR
-Define the name of the user we are going to connect to the database
-with to store the accounting data.
+The user account for accessing the accounting storage database.
 Only used for database type storage plugins, ignored otherwise.
 Also see \fBDefaultStorageUser\fR.
 
 .TP
 \fBAuthType\fR
-Define the authentication method for communications between SLURM 
+The authentication method for communications between SLURM 
 components. 
 Acceptable values at present include "auth/none", "auth/authd", 
 and "auth/munge".
-The default value is "auth/none", which means the UID included in 
-communication messages is not verified. 
+The default value is "auth/munge".
+"auth/none" includes the UID in each communication, but it is not verified. 
 This may be fine for testing purposes, but 
 \fBdo not use "auth/none" if you desire any security\fR.
 "auth/authd" indicates that Brett Chun's authd is to be used (see
-"http://www.theether.org/authd/" for more information, Note that
+"http://www.theether.org/authd/" for more information. Note that
 authd is no longer actively supported).
 "auth/munge" indicates that LLNL's MUNGE is to be used
 (this is the best supported authentication mechanism for SLURM, 
@@ -137,7 +138,7 @@ preserved).
 
 .TP
 \fBBackupAddr\fR
-Name that \fBBackupController\fR should be referred to in 
+The name that \fBBackupController\fR should be referred to in
 establishing a communications path. This name will 
 be used as an argument to the gethostbyname() function for 
 identification. For example, "elx0000" might be used to designate 
@@ -152,20 +153,20 @@ executed in the event that \fBControlMachine\fR fails. This node
 may also be used as a compute server if so desired. It will come into service 
 as a controller only upon the failure of ControlMachine and will revert 
 to a "standby" mode when the ControlMachine becomes available once again. 
-This should be a node name without the full domain name (e.g. "lx0002"). 
+This should be a node name without the full domain name.   I.e., the hostname
+returned by the \fIgethostname()\fR function cut at the first dot (e.g. use 
+"tux001" rather than "tux001.my.com"). 
 While not essential, it is recommended that you specify a backup controller.
 See  the \fBRELOCATING CONTROLLERS\fR section if you change this.
 
 .TP
 \fBBatchStartTimeout\fR
-The maximum time (in seconds) that a batch job is permitted for 
-launching before being considered missing and releasing the 
-allocation. The default value is 10 (seconds). Larger values may 
-be required if more time is required to execute the \fBProlog\fR, 
-loading user environment variables (for Moab spawned jobs), or the 
-slurmd daemon gets paged from memory.
-NOTE: The value will not be reported by "scontrol show config" command 
-until SLURM version 1.4.
+The maximum time (in seconds) that a batch job is permitted for
+launching before being considered missing and releasing the
+allocation. The default value is 10 (seconds). Larger values may be
+required if more time is required to execute the \fBProlog\fR, load
+user environment variables (for Moab spawned jobs), or if the slurmd
+daemon gets paged from memory.
 
 .TP
 \fBCacheGroups\fR
@@ -176,7 +177,7 @@ The default value is 0 to disable caching group data.
 
 .TP
 \fBCheckpointType\fR
-Define the system\-initiated checkpoint method to be used for user jobs. 
+The system\-initiated checkpoint method to be used for user jobs. 
 The slurmctld daemon must be restarted for a change in \fBCheckpointType\fR 
 to take effect. 
 Acceptable values at present include
@@ -188,9 +189,25 @@ The default value is "checkpoint/none".
 
 .TP
 \fBClusterName\fR
-The name by which this SLURM managed cluster is known for accounting 
-purposes. This is needed distinguish between accounting data from 
-multiple clusters being recorded in a single database.
+The name by which this SLURM managed cluster is known in the
+accounting database.  This is needed distinguish accounting records
+when multiple clusters report to the same database.
+
+.TP
+\fBCompleteWait\fR
+The time, in seconds, given for a job to remain in COMPLETING state
+before any additional jobs are scheduled. 
+If set to zero, pending jobs will be started as soon as possible.
+Since a COMPLETING job's resources are released for use by other 
+jobs as soon as the \fBEpilog\fR completes on each individual node, 
+this can result in very fragmented resource allocations. 
+To provide jobs with the minimum response time, a value of zero is 
+recommended (no waiting).
+To minimize fragmentation of resources, a value equal to \fBKillWait\fR 
+plus two is recommended. 
+In that case, setting \fBKillWait\fR to a small value may be beneficial.
+The default value of \fBCompleteWait\fR is zero seconds.
+The value may not exceed 65533.
 
 .TP
 \fBControlAddr\fR
@@ -204,20 +221,40 @@ By default the \fBControlAddr\fR will be identical in value to
 
 .TP
 \fBControlMachine\fR
-The name of the machine where SLURM control functions are executed
-as returned by the \fIgethostname()\fR function the cut at the first dot
-or the \fIhostname \-s\fR command (e.g. use "tux001" rather than "tux001.my.com"). 
-This value must be specified.
-See  the \fBRELOCATING CONTROLLERS\fR section if you change this.
+The short hostname of the machine where SLURM control functions are
+executed.  I.e., the hostname returned by the \fIgethostname()\fR
+function cut at the first dot (e.g. use "tux001" rather than
+"tux001.my.com").  This value must be specified.  See the
+\fBRELOCATING CONTROLLERS\fR section if you change this.
 
 .TP
 \fBCryptoType\fR
-Define the cryptographic signature tool to be used in the creation of 
+The cryptographic signature tool to be used in the creation of 
 job step credentials.
 The slurmctld daemon must be restarted for a change in \fBCryptoType\fR
 to take effect.
 Acceptable values at present include "crypto/munge" and "crypto/openssl".
-The default value is "crypto/openssl".
+The default value is "crypto/munge".
+
+.TP
+\fBDebugFlags\fR
+Defines specific subsystems which should provide more detailed event logging.
+Multiple subsystems can be specified with comma separators. 
+Valid subsystems available today (with more to come) include:
+.RS
+.TP 15
+\fBCPU_Bind\fR
+CPU binding details for jobs and steps
+.TP
+\fBSteps\fR
+Slurmctld resource allocation for job steps
+.TP
+\fBTriggers\fR
+Slurmctld triggers
+.TP
+\fBWiki\fR
+Sched/wiki and wiki2 communications
+.RE
 
 .TP
 \fBDefMemPerCPU\fR
@@ -228,6 +265,9 @@ are alocated to jobs (\fBSelectType=select/cons_res\fR).
 The default value is 0 (unlimited).
 Also see \fBDefMemPerNode\fR and \fBMaxMemPerCPU\fR.
 \fBDefMemPerCPU\fR and \fBDefMemPerNode\fR are mutually exclusive.
+NOTE: Enforcement of memory limits currently requires enabling of 
+accounting, which samples memory use on a periodic basis (data need
+not be stored, just collected).
 
 .TP
 \fBDefMemPerNode\fR
@@ -239,58 +279,59 @@ resources are shared (\fBShared=yes\fR or \fBShared=force\fR).
 The default value is 0 (unlimited).
 Also see \fBDefMemPerCPU\fR and \fBMaxMemPerNode\fR.
 \fBDefMemPerCPU\fR and \fBDefMemPerNode\fR are mutually exclusive.
+NOTE: Enforcement of memory limits currently requires enabling of 
+accounting, which samples memory use on a periodic basis (data need
+not be stored, just collected).
 
 .TP
 \fBDefaultStorageHost\fR
-Define the name of the host where the database is running and used to
-to store the accounting and job completion data.
-Only used for database type storage plugins, ignored otherwise.
-Also see \fBAccountingStorageHost\fR and \fBJobCompHost\fR.
+The default name of the machine hosting the accounting storage and
+job completion databases.
+Only used for database type storage plugins and when the
+\fBAccountingStorageHost\fR and \fBJobCompHost\fR have not been
+defined.
 
 .TP
 \fBDefaultStorageLoc\fR
-Specifies the location of the file or database where accounting 
-and job completion records are written.
+The fully qualified file name where accounting records and/or job
+completion records are written when the \fBDefaultStorageType\fR is
+"filetxt" or the name of the database where accounting records and/or job
+completion records are stored when the \fBDefaultStorageType\fR is a
+database.
 Also see \fBAccountingStorageLoc\fR and \fBJobCompLoc\fR.
 
 .TP
 \fBDefaultStoragePass\fR
-Define the password used to gain access to the database to store the
+The password used to gain access to the database to store the
 accounting and job completion data.
 Only used for database type storage plugins, ignored otherwise.
 Also see \fBAccountingStoragePass\fR and \fBJobCompPass\fR.
 
 .TP
 \fBDefaultStoragePort\fR
-Define the port the database server is listening on where we are going
-to store the accounting and job completion data.
+The listening port of the accounting storage and/or job completion
+database server.
 Only used for database type storage plugins, ignored otherwise.
 Also see \fBAccountingStoragePort\fR and \fBJobCompPort\fR.
 
 .TP
 \fBDefaultStorageType\fR
-Define the accounting and job completion storage mechanism type.
-Acceptable values at present include 
-"filetxt", "gold", "mysql", "none", "pgsql", and "slurmdbd".
-The value "filetxt" indicates that records will be written to a the file.
-The value "gold" indicates that records will be written to Gold
-(http://www.clusterresources.com/pages/products/gold-allocation-manager.php),
-.na
-which maintains its own database.
-.ad
-The value "mysql" indicates that accounting records will be written to 
-a mysql database.
-The default value is "none", which means that records are not maintained. 
-The value "pgsql" indicates that records will be written to a postresql 
-database.
-The value "slurmdbd" indicates that records will be written to SlurmDbd,
-which maintains its own database. See "man slurmdbd for more information".
-Also see \fBAccountingStorageType\fR  and \fBJobCompType\fR.
+The accounting and job completion storage mechanism type.  Acceptable
+values at present include "filetxt", "mysql", "none", "pgsql", and
+"slurmdbd".  The value "filetxt" indicates that records will be
+written to a file.  The value "mysql" indicates that accounting
+records will be written to a mysql database.  The default value is
+"none", which means that records are not maintained.  The value
+"pgsql" indicates that records will be written to a PostgreSQL
+database.  The value "slurmdbd" indicates that records will be written
+to the SLURM DBD, which maintains its own database. See "man slurmdbd"
+for more information.
+Also see \fBAccountingStorageType\fR and \fBJobCompType\fR.
 
 .TP
 \fBDefaultStorageUser\fR
-Define the name of the user we are going to connect to the database
-with to store the accounting and job completion data.
+The user account for accessing the accounting storage and/or job
+completion database.
 Only used for database type storage plugins, ignored otherwise.
 Also see \fBAccountingStorageUser\fR and \fBJobCompUser\fR.
 
@@ -307,10 +348,13 @@ will be rejected at submission time. If set to "NO" then the job will be
 accepted and remain queued until the partition limits are altered.
 The default value is "NO".
 
+.TP
 \fBEpilog\fR
 Fully qualified pathname of a script to execute as user root on every 
 node when a user's job completes (e.g. "/usr/local/slurm/epilog"). This may 
-be used to purge files, disable user login, etc. By default there is no epilog.
+be used to purge files, disable user login, etc. 
+By default there is no epilog.
+See \fBProlog and Epilog Scripts\fR for more information.
 
 .TP
 \fBEpilogMsgTime\fR
@@ -323,28 +367,43 @@ The default value is 2000 microseconds.
 For a 1000 node job, this spreads the epilog completion messages out over
 two seconds.
 
+.TP
+\fBEpilogSlurmctld\fR
+Fully qualified pathname of a program for the slurmctld to execute 
+upon termination of a job allocation (e.g.
+"/usr/local/slurm/epilog_controller"). 
+The program executes as SlurmUser, which gives it permission to drain 
+nodes and requeue the job if a failure occurs or cancel the job if appropriate.
+The program can be used to reboot nodes or perform other work to prepare 
+resources for use. 
+See \fBProlog and Epilog Scripts\fR for more information.
+
 .TP
 \fBFastSchedule\fR
-Controls how a nodes configuration specifications in slurm.conf are used.
+Controls how a node's configuration specifications in slurm.conf are used.
 If the number of node configuration entries in the configuration file
 is significantly lower than the number of nodes, setting FastSchedule to
 1 will permit much faster scheduling decisions to be made.
 (The scheduler can just check the values in a few configuration records
-instead of possibly thousands of node records. If a job can't be initiated
-immediately, the scheduler may execute these tests repeatedly.)
+instead of possibly thousands of node records.)
 Note that on systems with hyper\-threading, the processor count
-reported by the node will be twice the actually processor count.
+reported by the node will be twice the actual processor count.
 Consider which value you want to be used for scheduling purposes.
 .RS
 .TP 5
 \fB1\fR (default)
 Consider the configuration of each node to be that specified in the
-configuration file and any node with less
-than the configured resources will be set DOWN.
+configuration file and any node with less than the configured resources 
+will be set DOWN.
 .TP
 \fB0\fR
-Base scheduling decisions upon the actual configuration of 
-each individual node. 
+Base scheduling decisions upon the actual configuration of each individual 
+node except that the node's processor count in SLURM's configuration must
+match the actual hardware configuration if \fBSchedulerType=sched/gang\fR 
+or \fBSelectType=select/cons_res\fR are configured (both of those plugins
+maintain resource allocation information using bitmaps for the cores in the
+system and must remain static, while the node's memory and disk space can
+be esblished later).
 .TP
 \fB2\fR
 Consider the configuration of each node to be that specified in the 
@@ -412,7 +471,7 @@ May not exceed 65533.
 
 .TP
 \fBJobAcctGatherType\fR
-Define the job accounting mechanism type.
+The job accounting mechanism type.
 Acceptable values at present include "jobacct_gather/aix" (for AIX operating
 system), "jobacct_gather/linux" (for Linux operating system) and "jobacct_gather/none"
 (no accounting data collected).
@@ -422,7 +481,7 @@ must be configured.
 
 .TP
 \fBJobAcctGatherFrequency\fR
-Define the job accounting sampling interval.
+The job accounting sampling interval.
 For jobacct_gather/none this parameter is ignored.
 For  jobacct_gather/aix and jobacct_gather/linux the parameter is a number is 
 seconds between sampling job state.
@@ -430,36 +489,41 @@ The default value is 30 seconds.
 A value of zero disables real the periodic job sampling and provides accounting 
 information only on job termination (reducing SLURM interference with the job).
 
+.TP
+\fBJobCheckpointDir\fR
+Set the default directory used to store job checkpoint files.
+The default value is "/var/slurm/checkpoint".
+
 .TP
 \fBJobCompHost\fR
-Define the name of the host where the database is running and used
-to store the job completion data.
+The name of the machine hosting the job completion database.
 Only used for database type storage plugins, ignored otherwise.
 Also see \fBDefaultStorageHost\fR.
 
 .TP
 \fBJobCompLoc\fR
-The interpretation of this value depends upon the logging mechanism 
-specified by the \fBJobCompType\fR parameter either a filename or a 
-database name. 
+The fully qualified file name where job completion records are written
+when the \fBJobCompType\fR is "jobcomp/filetxt" or the database where
+job completion records are stored when the \fBJobCompType\fR is a
+database.
 Also see \fBDefaultStorageLoc\fR.
 
 .TP
 \fBJobCompPass\fR
-Define the password used to gain access to the database to store the job completion data.
+The password used to gain access to the database to store the job
+completion data.
 Only used for database type storage plugins, ignored otherwise.
 Also see \fBDefaultStoragePass\fR.
 
 .TP
 \fBJobCompPort\fR
-Define the port the database server is listening on where we are going
-to store the job completion data.
+The listening port of the job completion database server.
 Only used for database type storage plugins, ignored otherwise.
 Also see \fBDefaultStoragePort\fR.
 
 .TP
 \fBJobCompType\fR
-Define the job completion logging mechanism type.
+The job completion logging mechanism type.
 Acceptable values at present include "jobcomp/none", "jobcomp/filetxt", 
 "jobcomp/mysql", "jobcomp/pgsql", and "jobcomp/script"".
 The default value is "jobcomp/none", which means that upon job completion 
@@ -471,28 +535,27 @@ written to a text file specified by the \fBJobCompLoc\fR parameter.
 The value "jobcomp/mysql" indicates that a record of the job should be 
 written to a mysql database specified by the \fBJobCompLoc\fR parameter.
 The value "jobcomp/pgsql" indicates that a record of the job should be 
-written to a postgresql database specified by the \fBJobCompLoc\fR parameter.
+written to a PostgreSQL database specified by the \fBJobCompLoc\fR parameter.
 The value "jobcomp/script" indicates that a script specified by the 
 \fBJobCompLoc\fR parameter is to be executed with environment variables 
 indicating the job information.
 
 .TP
 \fBJobCompUser\fR
-Define the name of the user we are going to connect to the database
-with to store the job completion data.
+The user account for accessing the job completion database.
 Only used for database type storage plugins, ignored otherwise.
 Also see \fBDefaultStorageUser\fR.
 
 .TP
 \fBJobCredentialPrivateKey\fR
 Fully qualified pathname of a file containing a private key used for 
-authentication by Slurm daemons.
+authentication by SLURM daemons.
 This parameter is ignored if \fBCryptType=munge\fR.
 
 .TP
 \fBJobCredentialPublicCertificate\fR
 Fully qualified pathname of a file containing a public key used for 
-authentication by Slurm daemons.
+authentication by SLURM daemons.
 This parameter is ignored if \fBCryptType=munge\fR.
 
 .TP
@@ -514,14 +577,21 @@ Use the \fBsbatch\fR \fI\-\-no\-requeue\fR or \fI\-\-requeue\fR
 option to change the default behavior for individual jobs.
 The default value is 1.
 
+.TP
+\fBKillOnBadExit\fR
+If set to 1, the job will be terminated immediately when one of the 
+processes is crashed or aborted. With default value of 0, if one of 
+the processes is crashed or aborted the other processes will continue 
+to run.
+
 .TP
 \fBKillWait\fR
 The interval, in seconds, given to a job's processes between the 
 SIGTERM and SIGKILL signals upon reaching its time limit. 
-If the job fails to terminate gracefully 
-in the interval specified, it will be forcibly terminated. 
+If the job fails to terminate gracefully in the interval specified, 
+it will be forcibly terminated. 
 The default value is 30 seconds.
-May not exceed 65533.
+The value may not exceed 65533.
 
 .TP
 \fBLicenses\fR
@@ -561,6 +631,9 @@ are alocated to jobs (\fBSelectType=select/cons_res\fR).
 The default value is 0 (unlimited).
 Also see \fBDefMemPerCPU\fR and \fBMaxMemPerNode\fR.
 \fBMaxMemPerCPU\fR and \fBMaxMemPerNode\fR are mutually exclusive.
+NOTE: Enforcement of memory limits currently requires enabling of 
+accounting, which samples memory use on a periodic basis (data need
+not be stored, just collected).
 
 .TP
 \fBMaxMemPerNode\fR
@@ -572,6 +645,9 @@ resources are shared (\fBShared=yes\fR or \fBShared=force\fR).
 The default value is 0 (unlimited).
 Also see \fBDefMemPerNode\fR and \fBMaxMemPerCPU\fR.
 \fBMaxMemPerCPU\fR and \fBMaxMemPerNode\fR are mutually exclusive.
+NOTE: Enforcement of memory limits currently requires enabling of 
+accounting, which samples memory use on a periodic basis (data need
+not be stored, just collected).
 
 .TP
 \fBMessageTimeout\fR
@@ -599,6 +675,25 @@ Currently supported versions include:
 \fBnone\fR (default, which works for many other versions of MPI including 
 LAM MPI and Open MPI).
 
+.TP
+\fBMpiParams\fR
+MPI parameters. 
+Used to identify ports used by OpenMPI only and the input format is
+"ports=12000\-12999" to identify a range of communcation ports to be used.
+
+.TP
+\fBOverTimeLimit\fR
+Number of minutes by which a job can exceed its time limit before 
+being cancelled. 
+The configured job time limit is treated as a \fIsoft\fR limit.
+Adding \fBOverTimeLimit\fR to the \fIsoft\fR limit provides a \fIhard\fR
+limit, at which point the job is cancelled.
+This is particularly useful for backfill scheduling, which bases upon
+each job's soft time limit.
+The default value is zero.
+Man not exceed exceed 65533 minutes.
+A value of "UNLIMITED" is also supported.
+
 .TP
 \fBPluginDir\fR
 Identifies the places in which to look for SLURM plugins. 
@@ -616,6 +711,113 @@ part of a user's job step.  Default location is "plugstack.conf"
 in the same directory as the system slurm.conf. For more information
 on SPANK plugins, see the \fBspank\fR(8) manual.
 
+.TP
+\fBPriorityDecayHalfLife\fR
+This controls how long prior resource use is considered in determining
+how over\- or under\-serviced an association is (user, bank account and 
+cluster) in determining job priority.  If set to 0 no decay will be applied.  
+This is helpful if you want to enforce hard time limits per association.  If 
+set to 0 PriorityUsageResetPeriod must be set to some interval.
+Applicable only if PriorityType=priority/multifactor.
+The unit is a time string (i.e. min, hr:min:00, days\-hr:min:00, 
+or days\-hr).  The default value is 7\-0 (7 days).
+
+.TP
+\fBPriorityFavorSmall\fR
+Specifies that small jobs should be given preferencial scheduling priority.
+Applicable only if PriorityType=priority/multifactor.
+Supported values are "YES" and "NO". 
+Applicable only if PriorityType=priority/multifactor.
+The default value is "NO".
+
+.TP
+\fBPriorityMaxAge\fR
+Specifies the job age which will be given the maximum age factor in computing
+priority. For example, a value of 30 minutes would result in all jobs over
+30 minutes old would get the same age\-based priority.
+Applicable only if PriorityType=priority/multifactor.
+The unit is a time string (i.e. min, hr:min:00, days\-hr:min:00, 
+or days\-hr).  The default value is 7\-0 (7 days).
+
+.TP
+\fBPriorityUsageResetPeriod\fR
+At this interval the usage of associations will be reset to 0.  This is used 
+if you want to enforce hard limits of time usage per association.  If 
+PriorityDecayHalfLife is set to be 0 no decay will happen and this is the 
+only way to reset the usage accumulated by running jobs.  By default this is 
+turned off and it is advised to use the PriorityDecayHalfLife option to avoid
+not having anything running on your cluster, but if your schema is set up to 
+only allow certain amounts of time on your system this is the way to do it.
+Applicable only if PriorityType=priority/multifactor.
+.RS
+.TP 12
+\fBNONE\fR
+Never clear historic usage. The default value.
+.TP
+\fBNOW\fR
+Clear the historic usage now. 
+Executed at startup and reconfiguration time.
+.TP
+\fBDAILY\fR
+Cleared every day at midnight.
+.TP
+\fBWEEKLY\fR
+Cleared every week on Sunday at time 00:00.
+.TP
+\fBMONTHLY\fR
+Cleared on the first day of each month at time 00:00.
+.TP
+\fBQUARTERLY\fR
+Cleared on the first day of each quarter at time 00:00.
+.TP
+\fBYEARLY\fR
+Cleared on the first day of each year at time 00:00.
+.RE
+
+.TP
+\fBPriorityType\fR
+This specifies the plugin to be used in establishing a job's scheduling
+priority. Supported values are "priority/basic" (jobs are prioritized
+by order of arrival, also suitable for sched/wiki and sched/wiki2) and
+"priority/multifactor" (jobs are prioritized based upon size, age, 
+fair\-share of allocation, etc). 
+The default value is "priority/basic".
+
+.TP
+\fBPriorityWeightAge\fR
+An integer value that sets the degree to which the queue wait time
+component contributes to the job's priority.
+Applicable only if PriorityType=priority/multifactor.
+The default value is 0.
+
+.TP
+\fBPriorityWeightFairshare\fR
+An integer value that sets the degree to which the fair-share
+component contributes to the job's priority.
+Applicable only if PriorityType=priority/multifactor.
+The default value is 0.
+
+.TP
+\fBPriorityWeightJobSize\fR
+An integer value that sets the degree to which the job size
+component contributes to the job's priority.
+Applicable only if PriorityType=priority/multifactor.
+The default value is 0.
+
+.TP
+\fBPriorityWeightPartition\fR
+An integer value that sets the degree to which the node partition
+component contributes to the job's priority.
+Applicable only if PriorityType=priority/multifactor.
+The default value is 0.
+
+.TP
+\fBPriorityWeightQOS\fR
+An integer value that sets the degree to which the Quality Of Service
+component contributes to the job's priority.
+Applicable only if PriorityType=priority/multifactor.
+The default value is 0.
+
 .TP
 \fBPrivateData\fR
 This controls what type of information is hidden from regular users.
@@ -641,6 +843,12 @@ prevents users from viewing node state information.
 \fBpartitions\fR 
 prevents users from viewing partition state information.
 .TP
+\fBreservations\fR 
+prevents regular users from viewing reservations.
+.TP
+\fBusage\fR 
+(NON-SLURMDBD ACCOUNTING ONLY) prevents users from viewing 
+usage of any other user.  This applys to sreport.
 \fBusers\fR 
 (NON-SLURMDBD ACCOUNTING ONLY) prevents users from viewing 
 information of any user other than themselves, this also makes it so users can 
@@ -648,9 +856,6 @@ only see associations they deal with.
 Coordinators can see associations of all users they are coordinator of, 
 but can only see themselves when listing users.
 .TP
-\fBusage\fR 
-(NON-SLURMDBD ACCOUNTING ONLY) prevents users from viewing 
-usage of any other user.  This applys to sreport.
 .RE
 
 
@@ -690,19 +895,24 @@ default for all other systems
 
 .TP
 \fBProlog\fR
-Fully qualified pathname of a script for the slurmd to execute whenever
-it is asked to run a job step from a new job allocation.  (e.g.
+Fully qualified pathname of a program for the slurmd to execute 
+whenever it is asked to run a job step from a new job allocation (e.g.
 "/usr/local/slurm/prolog").  The slurmd executes the script before starting
-the job step.  This may be used to purge files, enable user login, etc.
+the first job step.  This may be used to purge files, enable user login, etc.
 By default there is no prolog. Any configured script is expected to 
 complete execution quickly (in less time than \fBMessageTimeout\fR).
+See \fBProlog and Epilog Scripts\fR for more information.
 
-NOTE:  The Prolog script is ONLY run on any individual
-node when it first sees a job step from a new allocation; it does not
-run the Prolog immediately when an allocation is granted.  If no job steps
-from an allocation are run on a node, it will never run the Prolog for that
-allocation.  The Epilog, on the other hand, always runs on every node of an
-allocation when the allocation is released.
+.TP
+\fBPrologSlurmctld\fR
+Fully qualified pathname of a program for the slurmctld to execute 
+before granting a new job allocation (e.g.
+"/usr/local/slurm/prolog_controller"). 
+The program executes as SlurmUser, which gives it permission to drain 
+nodes and requeue the job if a failure occurs or cancel the job if appropriate.
+The program can be used to reboot nodes or perform other work to prepare 
+resources for use. 
+See \fBProlog and Epilog Scripts\fR for more information.
 
 .TP
 \fBPropagatePrioProcess\fR
@@ -728,7 +938,7 @@ the default action is to propagate all limits.
 Only one of the parameters, either
 \fBPropagateResourceLimits\fR or \fBPropagateResourceLimitsExcept\fR,
 may be specified.
-The following limit names are supported by Slurm (although some 
+The following limit names are supported by SLURM (although some 
 options may not be supported on some systems):
 .RS
 .TP 10
@@ -782,17 +992,22 @@ See \fBPropagateResourceLimits\fR above for a list of valid limit names.
 \fBResumeProgram\fR
 SLURM supports a mechanism to reduce power consumption on nodes that 
 remain idle for an extended period of time. 
-This is typically accomplished by reducing voltage and frequency. 
+This is typically accomplished by reducing voltage and frequency or powering
+the node down. 
 \fBResumeProgram\fR is the program that will be executed when a node 
 in power save mode is assigned work to perform.
+For reasons of reliability, \fBResumeProgram\fR may execute more than once
+for a node when the \fBslurmctld\fR daemon crashes and is restarted.
+If \fBResumeProgram\fR is unable to restore a node to service, it should
+requeue any node associated with the node and set the node state to DRAIN.
 The program executes as \fBSlurmUser\fR.
 The argument to the program will be the names of nodes to
 be removed from power savings mode (using SLURM's hostlist
 expression format).
 By default no program is run.
-Related configuration options include \fBResumeRate\fR, \fBSuspendRate\fR,
-\fBSuspendTime\fR, \fBSuspendProgram\fR, \fBSuspendExcNodes\fR, and
-\fBSuspendExcParts\fR.
+Related configuration options include \fBResumeTimeout\fR, \fBResumeRate\fR, 
+\fBSuspendRate\fR, \fBSuspendTime\fR, \fBResumeTimeout\fR, \fBSuspendProgram\fR, 
+\fBSuspendExcNodes\fR, and \fBSuspendExcParts\fR.
 More information is available at the SLURM web site
 (https://computing.llnl.gov/linux/slurm/power_save.html).
 
@@ -803,11 +1018,35 @@ operation by \fBResumeProgram\fR.
 The value is number of nodes per minute and it can be used to prevent 
 power surges if a large number of nodes in power save mode are 
 assigned work at the same time (e.g. a large job starts).
-A value of zero results in no limits being imposed.
-The default value is 60 nodes per minute.
-Related configuration options include \fBResumeProgram\fR, \fBSuspendRate\fR,
-\fBSuspendTime\fR, \fBSuspendProgram\fR, \fBSuspendExcNodes\fR, and
-\fBSuspendExcParts\fR.
+A value of zero results in no limits being imposed. 
+The default value is 300 nodes per minute.
+Related configuration options include \fBResumeTimeout\fR, \fBResumeProgram\fR, 
+\fBSuspendRate\fR, \fBSuspendTime\fR, \fBResumeTimeout\fR, \fBSuspendProgram\fR, 
+\fBSuspendExcNodes\fR, and \fBSuspendExcParts\fR.
+
+.TP
+\fBResumeTimeout\fR
+Maximum time permitted (in second) between when a node is resume request 
+is issued and when the node is actually available for use. 
+Nodes which fail to respond in this time frame may be marked DOWN and
+the jobs scheduled on the node requeued.
+The default value is 60 seconds.
+Related configuration options include \fBResumeProgram\fR, \fBResumeRate\fR, 
+\fBSuspendRate\fR, \fBSuspendTime\fR, \fBSuspendTimeout\fR, \fBSuspendProgram\fR, 
+\fBSuspendExcNodes\fR and \fBSuspendExcParts\fR.
+More information is available at the SLURM web site
+(https://computing.llnl.gov/linux/slurm/power_save.html).
+
+.TP
+\fBResvOverRun\fR
+Describes how long a job already running in a reservation should be 
+permitted to execute after the end time of the reservation has been 
+reached. 
+The time period is specified in minutes and the default value is 0
+(kill the job immediately).
+The value may not exceed 65533 minutes, although a value of "UNLIMITED"
+is supported to permit a job to run indefinitely after its reservation
+is terminated.
 
 .TP
 \fBReturnToService\fR
@@ -855,6 +1094,15 @@ and
 
 would run \fBxterm\fR with the title set to the SLURM jobid.
 
+.TP
+\fBSchedulerParameters\fR
+The interprettation of this parameter varies by \fBSchedulerType\fR.
+In the case of \fBSchedulerType=sched/backfill\fR, there is one 
+optional argument of the form "interval=#", where "#" is number of
+seconds between iterations. Higher values result in less overhead 
+and responsivenss, The default value is 5 secondson BlueGene systems 
+and 10 seconds otherwise.
+
 .TP
 \fBSchedulerPort\fR
 The port number on which slurmctld should listen for connection requests.
@@ -873,7 +1121,7 @@ scheduling module "sched/backfill" (see \fBSchedulerType\fR).
 .TP
 \fBSchedulerTimeSlice\fR
 Number of seconds in each time slice when \fBSchedulerType=sched/gang\fR.
-The default value is 30.
+The default value is 30 seconds.
 
 .TP
 \fBSchedulerType\fR
@@ -966,16 +1214,32 @@ Setting a value for \fBDefMemPerCPU\fR is strongly recommended.
 .TP
 \fBCR_Core\fR
 Cores are consumable resources.
+On nodes with hyper\-threads, each thread is counted as a CPU to 
+satisfy a job's resource requirement, but multiple jobs are not 
+allocated threads on the same core.
 .TP
 \fBCR_Core_Memory\fR
 Cores and memory are consumable resources.
+On nodes with hyper\-threads, each thread is counted as a CPU to 
+satisfy a job's resource requirement, but multiple jobs are not 
+allocated threads on the same core.
 Setting a value for \fBDefMemPerCPU\fR is strongly recommended.
 .TP
 \fBCR_Socket\fR
-Sockets are consumable resources.
+Sockets are consumable resources. 
+On nodes with multiple cores, each core or thread is counted as a CPU 
+to satisfy a job's resource requirement, but multiple jobs are not 
+allocated resources on the same socket.
+Note that jobs requesting one CPU will only be given access to 
+that one CPU, but no other job will share the socket.
 .TP
 \fBCR_Socket_Memory\fR
-Memory and CPUs are consumable resources.
+Memory and sockets are consumable resources. 
+On nodes with multiple cores, each core or thread is counted as a CPU 
+to satisfy a job's resource requirement, but multiple jobs are not
+allocated resources on the same socket.
+Note that jobs requesting one CPU will only be given access to 
+that one CPU, but no other job will share the socket.
 Setting a value for \fBDefMemPerCPU\fR is strongly recommended.
 .TP
 \fBCR_Memory\fR
@@ -992,6 +1256,13 @@ This user must exist on all nodes of the cluster for authentication
 of communications between SLURM components.
 The default value is "root". 
 
+.TP
+\fBSlurmdUser\fR
+The name of the user that the \fBslurmd\fR daemon executes as. 
+This user must exist on all nodes of the cluster for authentication 
+of communications between SLURM components.
+The default value is "root". 
+
 .TP
 \fBSlurmctldDebug\fR
 The level of detail to provide \fBslurmctld\fR daemon's logs. 
@@ -1091,6 +1362,21 @@ completion of a job step.  The command line arguments for the executable will
 be the command and arguments of the job step.  This configuration parameter
 may be overridden by srun's \fB\-\-epilog\fR parameter.
 
+.TP
+\fBSrunIOTimeout\fR
+While the \fBsrun\fR detects the termination of tasks under almost all 
+circumstances, there are abnormal deamon failures which may not be 
+detected immediately. 
+Such abnormal failures can be detected by \fBsrun\fR using a more active
+polling mechanism. 
+Note that polling does have an impact upon application performance.
+The interval of polling is specified by the \fBSrunIOTimeout\fR 
+parameter and its units are seconds. 
+\fBsrun\fR's \fB\-\-io\-timeout\fR option takes precedence over
+this configuration parameter.
+The default value is 0 (no polling).
+The value may not exceed 65533 seconds.
+
 .TP
 \fBSrunProlog\fR
 Fully qualified pathname of an executable to be run by srun prior to the
@@ -1118,9 +1404,9 @@ Specifies the nodes which are to not be placed in power save mode, even
 if the node remains idle for an extended period of time.
 Use SLURM's hostlist expression to identify nodes.
 By default no nodes are excluded.
-Related configuration options include \fBResumeProgram\fR, \fBResumeRate\fR,
-\fBSuspendProgram\fR, \fBSuspendRate\fR, \fBSuspendTime\fR and
-\fBSuspendExcParts\fR.
+Related configuration options include \fBResumeTimeout\fR, \fBResumeProgram\fR, 
+\fBResumeRate\fR, \fBSuspendProgram\fR, \fBSuspendRate\fR, \fBSuspendTime\fR, 
+\fBResumeTimeout\fR, and \fBSuspendExcParts\fR.
 
 .TP
 \fBSuspendExcParts\fR
@@ -1128,23 +1414,25 @@ Specifies the partitions whose nodes are to not be placed in power save
 mode, even if the node remains idle for an extended period of time.
 Multiple partitions can be identified and separated by commas.
 By default no nodes are excluded.
-Related configuration options include \fBResumeProgram\fR, \fBResumeRate\fR,
-\fBSuspendProgram\fR, \fBSuspendRate\fR, \fBSuspendTime\fR and
-\fBSuspendExcNodes\fR.
+Related configuration options include \fBResumeTimeout\fR, \fBResumeProgram\fR, 
+\fBResumeRate\fR, \fBSuspendProgram\fR, \fBSuspendRate\fR, \fBSuspendTime\fR 
+\fBResumeTimeout\fR, and \fBSuspendExcNodes\fR.
 
 .TP
 \fBSuspendProgram\fR
 \fBSuspendProgram\fR is the program that will be executed when a node
 remains idle for an extended period of time.
 This program is expected to place the node into some power save mode.
+This can be used to reduce the frequency and voltage of a node or 
+completely power the node off.
 The program executes as \fBSlurmUser\fR.
 The argument to the program will be the names of nodes to
 be placed into power savings mode (using SLURM's hostlist
 expression format).
-By default no program is run.
-Related configuration options include \fBResumeProgram\fR, \fBResumeRate\fR,
-\fBSuspendRate\fR, \fBSuspendTime\fR, \fBSuspendExcNodes\fR, and
-\fBSuspendExcParts\fR.
+By default, no program is run.
+Related configuration options include \fBResumeTimeout\fR, \fBResumeProgram\fR, 
+\fBResumeRate\fR, \fBSuspendRate\fR, \fBSuspendTime\fR, \fBResumeTimeout\fR, 
+\fBSuspendExcNodes\fR, and \fBSuspendExcParts\fR.
 
 .TP
 \fBSuspendRate\fR
@@ -1153,18 +1441,31 @@ The value is number of nodes per minute and it can be used to prevent
 a large drop in power power consumption (e.g. after a large job completes).
 A value of zero results in no limits being imposed.
 The default value is 60 nodes per minute.
-Related configuration options include \fBResumeProgram\fR, \fBResumeRate\fR,
-\fBSuspendProgram\fR, \fBSuspendTime\fR, \fBSuspendExcNodes\fR, and
-\fBSuspendExcParts\fR.
+Related configuration options include \fBResumeTimeout\fR, \fBResumeProgram\fR, 
+\fBResumeRate\fR, \fBSuspendProgram\fR, \fBSuspendTime\fR, \fBSuspendTimeout\fR, 
+\fBSuspendExcNodes\fR, and \fBSuspendExcParts\fR.
 
 .TP
 \fBSuspendTime\fR
 Nodes which remain idle for this number of seconds will be placed into 
-power save mode by \fBSuspendProgram\fR,
+power save mode by \fBSuspendProgram\fR. 
 A value of \-1 disables power save mode and is the default.
-Related configuration options include \fBResumeProgram\fR, \fBResumeRate\fR,
-\fBSuspendProgram\fR, \fBSuspendRate\fR, \fBSuspendExcNodes\fR, and
-\fBSuspendExcParts\fR.
+Related configuration options include \fBResumeTimeout\fR, \fBResumeProgram\fR, 
+\fBResumeRate\fR, \fBSuspendProgram\fR, \fBSuspendRate\fR, \fBSuspendTimeout\fR, 
+\fBSuspendExcNodes\fR, and \fBSuspendExcParts\fR.
+
+.TP
+\fBSuspendTimeout\fR
+Maximum time permitted (in second) between when a node suspend request 
+is issued and when the node shutdown.
+At that time the node must ready for a resume request to be issued 
+as needed for new work. 
+The default value is 30 seconds.
+Related configuration options include \fBResumeProgram\fR, \fBResumeRate\fR, 
+\fBResumeTimeout\fR, \fBSuspendRate\fR, \fBSuspendTime\fR, \fBSuspendProgram\fR, 
+\fBSuspendExcNodes\fR and \fBSuspendExcParts\fR.
+More information is available at the SLURM web site
+(https://computing.llnl.gov/linux/slurm/power_save.html).
 
 .TP
 \fBSwitchType\fR
@@ -1206,15 +1507,46 @@ which is supported by SLURM.
 .TP
 \fBTaskPluginParam\fR
 Optional parameters for the task plugin.
+Multiple options should be comma separated
+If \fBNone\fR, \fBSockets\fR, \fBCores\fR, \fBThreads\fR,
+and/or \fBVerbose\fR are specified, they will override
+the \fB\-\-cpu_bind\fR option specified by the user
+in the \fBsrun\fR command.
+\fBNone\fR, \fBSockets\fR, \fBCores\fR and \fBThreads\fR are mutually 
+exclusive and since they decrease scheduling flexibility are not generally 
+recommended (select no more than one of them).
+\fBCpusets\fR and \fBSched\fR
+are mutually exclusive (select only one of them).
+
 .RS
 .TP 10
+\fBCores\fR
+Always bind to cores. 
+Overrides user options or automatic binding.
+.TP
 \fBCpusets\fR
-Use cpusets to perform task affinity functions
+Use cpusets to perform task affinity functions.
+By default, \fBSched\fR task binding is performed.
+.TP
+\fBNone\fR
+Perform no task binding. 
+Overrides user options or automatic binding.
 .TP
 \fBSched\fR
 Use \fIsched_setaffinity\fR or \fIplpa_sched_setaffinity\fR
 (if available) to bind tasks to processors.
-This is the default mode of operation is no parameters are specified.
+.TP
+\fBSockets\fR
+Always bind to sockets. 
+Overrides user options or automatic binding.
+.TP
+\fBThreads\fR
+Always bind to threads. 
+Overrides user options or automatic binding.
+.TP
+\fBVerbose\fR
+Verbosely report binding before tasks run. 
+Overrides user options.
 .RE
 
 .TP
@@ -1258,6 +1590,21 @@ temporary storage. This parameter is used in establishing a node's \fBTmpDisk\fR
 space. 
 The default value is "/tmp".
 
+.TP
+\fBTopologyPlugin\fR
+Identifies the plugin to be used for determining the network topology
+and optimizing job allocations to minimize network contention. 
+Acceptable values include 
+"topology/3d_torus" (default for Cray XT, IBM BlueGene and Sun Constellation 
+systems, best\-fit logic over three\-dimensional topology)
+"topology/none" (default for other systems, best\-fit
+logic over one\-dimensional topology) and 
+"topology/tree" (determine the network topology based
+upon information contained in a topology.conf file).
+See \fBNETWORK TOPOLOGY\fR below for details.
+Additional plugins may be provided in the future which gather topology
+information directly from the network.
+
 .TP
 \fBTrackWCKey\fR
 Boolean yes or no.  Used to set display and track of the Workload  
@@ -1324,10 +1671,10 @@ Specifies how many seconds the srun command should by default wait after
 the first task terminates before terminating all remaining tasks. The 
 "\-\-wait" option on the srun command line overrides this value. 
 If set to 0, this feature is disabled.
-May not exceed 65533.
+May not exceed 65533 seconds.
 
 .LP
-The configuration of nodes (or machines) to be managed by Slurm is 
+The configuration of nodes (or machines) to be managed by SLURM is 
 also specified in \fB/etc/slurm.conf\fR. 
 Changes in node configuration (e.g. adding nodes, changing their
 processor count, etc.) require restarting the slurmctld daemon.
@@ -1474,7 +1821,7 @@ By default a node has no features.
 .TP
 \fBProcs\fR
 Number of logical processors on the node (e.g. "2").
-If Procs is omitted, it will be inferred from
+If \fBProcs\fR is omitted, it will set equal to the product of
 \fBSockets\fR, \fBCoresPerSocket\fR, and \fBThreadsPerCore\fR.
 The default value is 1. 
 
@@ -1519,6 +1866,12 @@ Also see the \fBDownNodes\fR parameter below.
 .TP
 \fBThreadsPerCore\fR
 Number of logical threads in a single physical core (e.g. "2").
+Note that the SLURM can allocate resources to jobs down to the
+resolution of a core. If your system is configured with more than
+one thread per core, execution of a different job on each thread 
+is not supported. 
+A job can execute a one task per thread from within one job step or
+execute a distinct job step on each of the threads.
 The default value is 1.
 
 .TP
@@ -1558,6 +1911,7 @@ scheduling overhead), give each node a distinct \fBWeight\fR
 value and they will be added to the pool of nodes being 
 considered for scheduling individually.
 The default value is 1.
+
 .LP
 The "DownNodes=" configuration permits you to mark certain nodes as in a 
 DOWN, DRAIN, FAIL, or FAILING state without altering the permanent 
@@ -1586,10 +1940,18 @@ to any new jobs.
 "FAILING" indicates the node is expected to fail soon, has
 one or more jobs allocated to it, but will not be allocated
 to any new jobs.
+"FUTURE" indicates the node is defined for future use and need not 
+exist when the SLURM daemons are started. These nodes can be made available 
+for use simply by updating the node state using the scontrol command rather 
+than restarting the slurmctld daemon. After these nodes are made available, 
+change their \fRState\fR in the slurm.conf file. Until these nodes are made 
+available, they will not be seen using any SLURM commands or APIs nor will 
+any attempt be made to contact them. 
 "UNKNOWN" indicates the node's state is undefined (BUSY or IDLE), 
 but will be established when the \fBslurmd\fR daemon on that node 
 registers.
 The default value is "UNKNOWN".
+
 .LP
 The partition configuration permits you to establish different job 
 limits or access controls for various groups (or partitions) of nodes. 
@@ -1611,6 +1973,14 @@ Each line of partition configuration information should
 represent a different partition.
 The partition configuration file contains the following information:
 
+.TP
+\fBAllocNodes\fR
+Comma separated list of nodes from which users can execute jobs in the
+partition.
+Node names may be specified using the node range expression syntax
+described above.
+The default value is "ALL".
+
 .TP
 \fBAllowGroups\fR
 Comma separated list of group IDs which may execute jobs in the partition. 
@@ -1663,6 +2033,12 @@ Time resolution is one minute and second values are rounded up to
 the next minute.
 This limit does not apply to jobs executed by SlurmUser or user root.
 
+.TP
+\fBDefaultTime\fR
+Run time limit used for jobs that don't specify a value. If not set
+then MaxTime will be used.
+Format is the same as for MaxTime.
+
 .TP
 \fBMinNodes\fR
 Minimum count of nodes (or base partitions for BlueGene systems) which 
@@ -1772,6 +2148,103 @@ Recommended only for systems running with gang scheduling
 State of partition or availability for use.  Possible values 
 are "UP" or "DOWN". The default value is "UP".
 
+.SH "Prolog and Epilog Scripts"
+There are a variety of prolog and epilog program options that 
+execute with various permissions and at various times. 
+The four options most likely to be used are: 
+\fBProlog\fR and \fBEpilog\fR (executed once on each compute node
+for each job) plus \fBPrologSlurmctld\fR and \fBEpilogSlurmctld\fR
+(executed once on the \fBControlMachine\fR for each job).
+ 
+NOTE:  The Prolog script is ONLY run on any individual
+node when it first sees a job step from a new allocation; it does not
+run the Prolog immediately when an allocation is granted.  If no job steps
+from an allocation are run on a node, it will never run the Prolog for that
+allocation.  The Epilog, on the other hand, always runs on every node of an
+allocation when the allocation is released.
+
+Information about the job is passed to the script using environment
+variables.
+Unless otherwise specified, these environment variables are available
+to all of the programs.
+.TP
+\fBBASIL_RESERVATION_ID\fR
+Basil reservation ID.
+Available on Cray XT systems only.
+.TP
+\fBMPIRUN_PARTITION\fR
+BlueGene partition name.
+Available on BlueGene systems only.
+.TP
+\fBSLURM_JOB_ACCOUNT\fR
+Account name used for the job. 
+Available in \fBPrologSlurmctld\fR and \fBEpilogSlurmctld\fR only.
+.TP
+\fBSLURM_JOB_CONSTRAINTS\fR
+Features required to run the job. 
+Available in \fBPrologSlurmctld\fR and \fBEpilogSlurmctld\fR only.
+.TP
+\fBSLURM_JOB_GID\fR
+Group ID of the job's owner.
+Available in \fBPrologSlurmctld\fR and \fBEpilogSlurmctld\fR only.
+.TP
+\fBSLURM_JOB_GROUP\fR
+Group name of the job's owner.
+Available in \fBPrologSlurmctld\fR and \fBEpilogSlurmctld\fR only.
+.TP
+\fBSLURM_JOB_ID\fR
+Job ID.
+.TP
+\fBSLURM_JOB_NAME\fR
+Name of the job.
+Available in \fBPrologSlurmctld\fR and \fBEpilogSlurmctld\fR only.
+.TP
+\fBSLURM_JOB_NODELIST\fR
+Nodes assigned to job. A SLURM hostlist expression.
+"scontrol show hostnames" can be used to convert this to a
+list of individual host names.
+Available in \fBPrologSlurmctld\fR and \fBEpilogSlurmctld\fR only.
+.TP
+\fBSLURM_JOB_PARTITION\fR
+Partition that job runs in.
+Available in \fBPrologSlurmctld\fR and \fBEpilogSlurmctld\fR only.
+.TP
+\fBSLURM_JOB_UID\fR
+User ID of the job's owner.
+.TP
+\fBSLURM_JOB_USER\fR
+User name of the job's owner.
+
+.SH "NETWORK TOPOLOGY"
+SLURM is able to optimze job allocations to minimize network contention.
+Special SLURM logic is used to optimize allocations on systems with a 
+three\-dimensional interconnect (BlueGene, Sun Constellation, etc.)
+and information about configuring those systems are availble on 
+web pages available here: <https://computing.llnl.gov/linux/slurm/>.
+For a hierarchical network, SLURM needs to have detailed information 
+about how nodes are configured on the network switches.
+.LP
+Given network topology information, SLURM allocates all of a job's 
+resources onto a single leaf of the network (if possible) using a best\-fit 
+algorithm.
+Otherwise it will allocate a job's resources onto multiple leaf switches
+so as to minimize the use of higher\-level switches. 
+The \fBTopologyPlugin\fR parameter controls which plugin is used to
+collect network topology information. 
+The only values presently supported are 
+"topology/3d_torus" (default for IBM BlueGene, Sun Constellation and 
+Cray XT systems, performs best\-fit logic over three\-dimensional topology),
+"topology/none" (default for other systems, 
+best\-fit logic over one\-dimensional topology),
+"topology/tree" (determine the network topology based
+upon information contained in a topology.conf file,
+see "man topology.conf" for more information).
+Future plugins may gather topology information directly from the network.
+The topology information is optional. 
+If not provided, SLURM will perform a best\-fit algorithm assuming the
+nodes are in a one\-dimensional array as configured and the communications 
+cost is related to the node distance in this array.
+
 .SH "RELOCATING CONTROLLERS"
 If the cluster's computers used for the primary or backup controller 
 will be out of service for an extended period of time, it may be 
@@ -1902,9 +2375,9 @@ PartitionName=long Nodes=dev[9\-17] MaxTime=120 AllowGroups=admin
 
 .SH "COPYING"
 Copyright (C) 2002\-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).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
@@ -1918,12 +2391,14 @@ SLURM 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.
+
 .SH "FILES"
 /etc/slurm.conf
+
 .SH "SEE ALSO"
 .LP
 \fBbluegene.conf\fR(5), \fBgethostbyname\fR(3), 
 \fBgetrlimit\fR(2), \fBgroup\fR(5), \fBhostname\fR(1), 
 \fBscontrol\fR(1), \fBslurmctld\fR(8), \fBslurmd\fR(8), 
-\fBslurmdbd\fR(8), \fBslurmdbd.conf\fR(5), \fBspank(8)\fR,
-\fBsyslog\fR(2), \fBwiki.conf\fR(5)
+\fBslurmdbd\fR(8), \fBslurmdbd.conf\fR(5), \fBsrun(1)\fR, 
+\fBspank(8)\fR, \fBsyslog\fR(2), \fBtopology.conf\fR(5), \fBwiki.conf\fR(5)
diff --git a/doc/man/man5/slurmdbd.conf.5 b/doc/man/man5/slurmdbd.conf.5
index c94a518de..ec35744be 100644
--- a/doc/man/man5/slurmdbd.conf.5
+++ b/doc/man/man5/slurmdbd.conf.5
@@ -1,4 +1,4 @@
-.TH "slurmdbd.conf" "5" "Feb 2009" "slurmdbd.conf 1.3" "Slurm configuration file"
+.TH "slurmdbd.conf" "5" "February 2009" "slurmdbd.conf 2.0" "Slurm configuration file"
 .SH "NAME"
 slurmdbd.conf \- Slurm Database Daemon (SlurmDBD) configuration file 
 
@@ -27,6 +27,10 @@ If ArchiveScript is not set the slurmdbd will generate a text file that can be
 read in anytime with sacctmgr load filename.  This directory is where the 
 file will be placed archive has ran.  Default is /tmp.
 
+.TP
+\fBArchiveEvents\fR
+Boolean, yes to archive event data, no other wise.  Default is no.
+
 .TP
 \fBArchiveJobs\fR
 Boolean, yes to archive job data, no other wise.  Default is no.
@@ -38,23 +42,40 @@ records out of the database into an archive. The script is executed
 with a no arguments, The following environment variables are set.
 .RS
 .TP
-\fBSLURM_ARCHIVE_STEPS\fR 
-1 for archive steps 0 otherwise.
+\fBSLURM_ARCHIVE_EVENTS\fR 
+1 for archive events 0 otherwise.
 .TP
-\fBSLURM_ARCHIVE_LAST_STEP\fR
-Time of last step start to archive.
+\fBSLURM_ARCHIVE_LAST_EVENT\fR
+Time of last event start to archive.
 .TP
 \fBSLURM_ARCHIVE_JOBS\fR
 1 for achive jobs 0 otherwise.
 .TP
 \fBSLURM_ARCHIVE_LAST_JOB\fR
 Time of last job submit to archive.
+.TP
+\fBSLURM_ARCHIVE_STEPS\fR 
+1 for archive steps 0 otherwise.
+.TP
+\fBSLURM_ARCHIVE_LAST_STEP\fR
+Time of last step start to archive.
+.TP
+\fBSLURM_ARCHIVE_SUSPEND\fR 
+1 for archive suspend data 0 otherwise.
+.TP
+\fBSLURM_ARCHIVE_LAST_SUSPEND\fR
+Time of last suspend start to archive.
+.TP
 .RE
 
 .TP
 \fBArchiveSteps\fR
 Boolean, yes to archive step data, no other wise.  Default is no.
 
+.TP
+\fBArchiveSuspend\fR
+Boolean, yes to archive suspend data, no other wise.  Default is no.
+
 .TP
 \fBAuthInfo\fR
 Additional information to be used for authentication of communications 
@@ -86,22 +107,20 @@ SlurmDbd must be terminated prior to changing the value of \fBAuthType\fR
 and later restarted.
 
 .TP
-\fBDbdAddr\fR
-Name that \fBDbdHost\fR should be referred to in 
-establishing a communications path to the Slurm Database Daemon. 
-This name will be used as an argument to the gethostbyname() 
-function for identification. For example, "elx0000" might be used 
-to designate the ethernet address for node "lx0000". 
-By default the \fBDbdAddr\fR will be identical in value to 
-\fBDbdHost\fR.
-This value must be equal to the \fBSlurmDbdAddr\fR parameter in 
-the slurm.conf file.
+\fBDbdBackupHost\fR
+The name of the machine where the backup Slurm Database Daemon is executed. 
+This host must have access to the same underlying database specified by the 
+'Storage' options mentioned below.
+This should be a node name without the full domain name.  I.e., the hostname
+returned by the \fIgethostname()\fR function cut at the first dot (e.g. use 
+"tux001" rather than "tux001.my.com").
 
 .TP
 \fBDbdHost\fR
 The name of the machine where the Slurm Database Daemon is executed. 
-This should be a node name without the full domain name (e.g. "lx0001"). 
-This value must be specified.
+This should be a node name without the full domain name.  I.e., the hostname
+returned by the \fIgethostname()\fR function cut at the first dot (e.g. use 
+"tux001" rather than "tux001.my.com").  This value must be specified.
 
 .TP
 \fBDbdPort\fR
@@ -123,13 +142,6 @@ The default value is 3.
 When adding a new cluster this will be used as the qos for the cluster 
 unless something is explicitly set by the admin with the create.
  
-.TP
-\fBJobPurge\fR
-Individual job records over this age are purged from the database.
-Aggregated information will be preserved indefinitely.
-The time is a numeric value and is a number of months.
-If zero (default), then job records are never purged.
-
 .TP
 \fBLogFile\fR
 Fully qualified pathname of a file into which the Slurm Database Daemon's 
@@ -173,39 +185,71 @@ prevents users from viewing job records belonging
 to other users unless they are coordinators of the association running the job
 when using sacct.
 .TP
+\fBreservations\fR 
+restricts getting reservation information to users with operator status 
+and above.
+.TP
+\fBusage\fR  
+prevents users from viewing usage of any other user.  
+This applys to sreport.
+.TP
 \fBusers\fR  
 prevents users from viewing information of any user 
 other than themselves, this also makes it so users can only see 
 associations they deal with.  
 Coordinators can see associations of all users they are coordinator of, 
 but can only see themselves when listing users.
-.TP
-\fBusage\fR  
-prevents users from viewing usage of any other user.  
-This applys to sreport.
 .RE
 
 .TP
-\fBSlurmUser\fR
-The name of the user that the \fBslurmctld\fR daemon executes as. 
-This user must exist on the machine executing the Slurm Database Daemon
-and have the same user ID as the hosts on which \fBslurmctld\fR execute.
-For security purposes, a user other than "root" is recommended.
-The default value is "root". 
+\fBPurgeEventMonths\fR
+Events happening on the cluster over this age are purged from the database.
+This includeds node down times and such.
+The time is a numeric value and is a number of months.
+If zero (default), then job step records are never purged.
 
 .TP
-\fBStepPurge\fR
+\fBPurgeJobMonths\fR
+Individual job records over this age are purged from the database.
+Aggregated information will be preserved indefinitely.
+The time is a numeric value and is a number of months.
+If zero (default), then job records are never purged.
+
+.TP
+\fBPurgeStepMonths\fR
 Individual job step records over this age are purged from the database.
 Aggregated information will be preserved indefinitely.
 The time is a numeric value and is a number of months.
 If zero (default), then job step records are never purged.
 
+.TP
+\fBPurgeSuspendMonths\fR
+Records of individual suspend times for jobs over this age are purged from the 
+database.
+Aggregated information will be preserved indefinitely.
+The time is a numeric value and is a number of months.
+If zero (default), then job step records are never purged.
+
+.TP
+\fBSlurmUser\fR
+The name of the user that the \fBslurmctld\fR daemon executes as. 
+This user must exist on the machine executing the Slurm Database Daemon
+and have the same user ID as the hosts on which \fBslurmctld\fR execute.
+For security purposes, a user other than "root" is recommended.
+The default value is "root". 
+
 .TP
 \fBStorageHost\fR
 Define the name of the host the database is running where we are going
 to store the data.
 Ideally this should be the host on which slurmdbd executes.
 
+.TP
+\fBStorageBackupHost\fR
+Define the name of the backup host the database is running where we are going
+to store the data.
+Default is none.
+
 .TP
 \fBStorageLoc\fR
 Specify the name of the database as the location where accounting 
@@ -260,10 +304,14 @@ Characterization Key. Must be set to track wckey usage.
 .br
 #
 .br
+ArchiveEvents=yes
+.br
 ArchiveJobs=yes
 .br
 ArchiveSteps=no
 .br
+ArchiveSuspend=no
+.br
 #ArchiveScript=/usr/sbin/slurm.dbd.archive
 .br
 AuthInfo=/var/run/munge/munge.socket.2
@@ -274,9 +322,13 @@ DbdHost=db_host
 .br
 DebugLevel=4
 .br
-JobPurge=12
+PurgeEventMonths=1
+.br
+PurgeJobMonths=12
+.br
+PurgeStepMonths=1
 .br
-StepPurge=1
+PurgeSuspendMonths=1
 .br
 LogFile=/var/log/slurmdbd.log
 .br
@@ -293,7 +345,7 @@ StorageUser=database_mgr
 .SH "COPYING"
 Copyright (C) 2008 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man5/topology.conf.5 b/doc/man/man5/topology.conf.5
new file mode 100644
index 000000000..e14eb927b
--- /dev/null
+++ b/doc/man/man5/topology.conf.5
@@ -0,0 +1,88 @@
+.TH "topology.conf" "5" "March 2009" "topology.conf 2.0" "Slurm configuration file"
+
+.SH "NAME"
+topology.conf \- Slurm configuration file for defining the network topology
+
+.SH "DESCRIPTION"
+\fB/etc/topology.conf\fP is an ASCII file which describes the
+cluster's network topology for optimized job resource allocation. 
+The file location can be modified at system build time using the
+DEFAULT_SLURM_CONF parameter. The file will always be located in the 
+same directory as the \fBslurm.conf\fP file. 
+.LP
+Paramter names are case insensitive.
+Any text following a "#" in the configuration file is treated 
+as a comment through the end of that line. 
+The size of each line in the file is limited to 1024 characters.
+Changes to the configuration file take effect upon restart of 
+SLURM daemons, daemon receipt of the SIGHUP signal, or execution 
+of the command "scontrol reconfigure" unless otherwise noted.
+.LP
+The network topology configuration one one line defining a switch name and
+its children, either node names or switch names.
+SLURM's hostlist expression parser is used, so the node and switch
+names need not be consecutive (e.g. "Nodes=tux[0\-3,12,18\-20]"
+and "Swithces=s[0\-2,4\-8,12]" will parse fine).
+An optional link speed may also be specified.
+.LP
+The overall configuration parameters available include:
+
+.TP
+\fBSwitchName\fR
+The name of a switch. This name is internal to SLURM and arbitrary.
+Each switch should have a unique name.
+This field must be specified.
+.TP
+\fBSwitches\fR
+Child switches of the named switch.
+Either this option or the \fBNodes\fR option must be specified.
+.TP
+\fBNodes\fR
+Child Nodes of the named leaf switch.
+Either this option or the \fBSwitches\fR option must be specified.
+.TP
+\fBLinkSpeed\fR
+An optional value specifying the performance of this communication link.
+The units used are arbitrary and this information is currently not used.
+It may be used in the future to optimize resource allocations.
+
+.SH "EXAMPLE"
+.LP 
+.br
+##################################################################
+.br
+# SLURM's network topology configuration file for use with the
+.br
+# topology/tree plugin
+.br
+##################################################################
+.br
+SwitchName=s0 Nodes=dev[0\-5]
+.br
+SwitchName=s1 Nodes=dev[6\-11]
+.br
+SwitchName=s2 Nodes=dev[12\-17]
+.br
+SwitchName=s3 Switches=s[0\-2]
+
+.SH "COPYING"
+Copyright (C) 2009 Lawrence Livermore National Security.
+Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+CODE\-OCEC\-09\-009. All rights reserved.
+.LP
+This file is part of SLURM, a resource management program.
+For details, see <https://computing.llnl.gov/linux/slurm/>.
+.LP
+SLURM 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.
+.LP
+SLURM 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.
+
+.SH "SEE ALSO"
+.LP
+\fBslurm.conf\fR(5)
diff --git a/doc/man/man5/wiki.conf.5 b/doc/man/man5/wiki.conf.5
index ddc81f090..c7004b5fe 100644
--- a/doc/man/man5/wiki.conf.5
+++ b/doc/man/man5/wiki.conf.5
@@ -1,4 +1,4 @@
-.TH "wiki.conf" "5" "December 2007" "wiki.conf 1.2" "Slurm configuration file"
+.TH "wiki.conf" "5" "December 2007" "wiki.conf 2.0" "Slurm configuration file"
 .SH "NAME"
 wiki.conf \- Slurm configuration file for wiki and wiki2 scheduler plugins
 .SH "DESCRIPTION"
@@ -173,7 +173,7 @@ JobAggregationTime=15
 .SH "COPYING"
 Copyright (C) 2006-2007 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man8/slurmctld.8 b/doc/man/man8/slurmctld.8
index 67f64b5b3..563eee744 100644
--- a/doc/man/man8/slurmctld.8
+++ b/doc/man/man8/slurmctld.8
@@ -1,4 +1,4 @@
-.TH SLURMCTLD "8" "June 2006" "slurmctld 1.1" "Slurm components"
+.TH SLURMCTLD "8" "June 2006" "slurmctld 12.0" "Slurm components"
 .SH "NAME"
 slurmctld \- The central management daemon of Slurm.
 .SH "SYNOPSIS"
@@ -57,7 +57,7 @@ configuration file, \fBslurm.conf\fR.
 .SH "COPYING"
 Copyright (C) 2002\-2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man8/slurmd.8 b/doc/man/man8/slurmd.8
index 8cb552111..e81a7a57f 100644
--- a/doc/man/man8/slurmd.8
+++ b/doc/man/man8/slurmd.8
@@ -1,8 +1,11 @@
-.TH SLURMD "8" "June 2006" "slurmd 1.1" "Slurm components"
+.TH SLURMD "8" "March 2009" "slurmd 2.0" "Slurm components"
+
 .SH "NAME"
 slurmd \- The compute node daemon for SLURM.
+
 .SH "SYNOPSIS"
 \fBslurmd\fR [\fIOPTIONS\fR...]
+
 .SH "DESCRIPTION"
 \fBslurmd\fR is the compute node daemon of Slurm. It monitors all tasks 
 running on the compute node , accepts work (tasks), launches tasks, and kills 
@@ -14,25 +17,29 @@ OPTIONS
 Clear system locks as needed. This may be required if \fBslurmd\fR terminated 
 abnormally.
 .TP
+\fB\-d <file>\fR
+Specify the fully qualified pathname to the \fBslurmstepd\fR program to be used
+for sheperding user job steps. This can be useful for testing purposes.
+.TP
 \fB\-D\fR
 Run slurmd in the foreground. Error and debug messages will be copied to stderr.
 .TP
-\fB\-M\fR
-Lock slurmd pages into system memory using mlockall(2) to disable
-paging of the slurmd process. This may help in cases where nodes are
-marked DOWN during periods of heavy swap activity. If the mlockall(2)
-system call is not available, an error will be printed to the log
-and slurmd will continue as normal.
+\fB\-f <file>\fR
+Read configuration from the specified file. See \fBNOTES\fR below.
 .TP
 \fB\-h\fR
 Help; print a brief summary of command options.
 .TP
-\fB\-f <file>\fR
-Read configuration from the specified file. See \fBNOTES\fR below.
-.TP
 \fB\-L <file>\fR
 Write log messages to the specified file.
 .TP
+\fB\-M\fR
+Lock slurmd pages into system memory using mlockall(2) to disable
+paging of the slurmd process. This may help in cases where nodes are
+marked DOWN during periods of heavy swap activity. If the mlockall(2)
+system call is not available, an error will be printed to the log
+and slurmd will continue as normal.
+.TP
 \fB\-v\fR
 Verbose operation. Multiple \-v's increase verbosity.
 .TP
@@ -58,9 +65,10 @@ other parameters used by other Slurm components, change the common
 configuration file, \fBslurm.conf\fR.
 
 .SH "COPYING"
-Copyright (C) 2002\-2006 The Regents of the University of California.
+Copyright (C) 2002\-2007 The Regents of the University of California.
+Copyright (C) 2008\-2009 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
@@ -78,5 +86,6 @@ details.
 .SH "FILES"
 .LP
 /etc/slurm.conf
+
 .SH "SEE ALSO"
 \fBslurm.conf\fR(5), \fBslurmctld\fR(8)
diff --git a/doc/man/man8/slurmdbd.8 b/doc/man/man8/slurmdbd.8
index 0b3b656c6..0a3f377f0 100644
--- a/doc/man/man8/slurmdbd.8
+++ b/doc/man/man8/slurmdbd.8
@@ -1,4 +1,4 @@
-.TH slurmdbd "8" "February 2008" "slurmdbd 1.3" "Slurm components"
+.TH slurmdbd "8" "February 2008" "slurmdbd 2.0" "Slurm components"
 .SH "NAME"
 slurmdbd \- Slurm Database Daemon.
 
@@ -36,7 +36,7 @@ configuration file, \fBslurm.conf\fR.
 .SH "COPYING"
 Copyright (C) 2008 Lawrence Livermore National Security.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man8/slurmstepd.8 b/doc/man/man8/slurmstepd.8
index 24748ec2b..3a81beca9 100644
--- a/doc/man/man8/slurmstepd.8
+++ b/doc/man/man8/slurmstepd.8
@@ -1,4 +1,4 @@
-.TH SLURMSTEPD "8" "September 2006" "slurmstepd 1.1" "Slurm components"
+.TH SLURMSTEPD "8" "September 2006" "slurmstepd 2.0" "Slurm components"
 .SH "NAME"
 slurmstepd \- The job step manager for SLURM.
 .SH "SYNOPSIS"
@@ -13,7 +13,7 @@ for the job step along with its accounting and signal processing.
 .SH "COPYING"
 Copyright (C) 2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/doc/man/man8/spank.8 b/doc/man/man8/spank.8
index 047569102..29495c78a 100644
--- a/doc/man/man8/spank.8
+++ b/doc/man/man8/spank.8
@@ -1,4 +1,5 @@
 .TH "SPANK" "8" "February 2009" "SPANK" "SLURM plug\-in architecture for Node and job (K)control"
+
 .SH "NAME"
 \fBSPANK\fR \- SLURM Plug\-in Architecture for Node and job (K)control 
 
@@ -19,16 +20,27 @@ behavior of SLURM job launch.
 .LP
 
 .SH "SPANK PLUGINS"
-\fBSPANK\fR plugins are loaded in two separate contexts during a 
-\fBSLURM\fR job.  In "local" context, the plugin is loaded by \fBsrun\fR
-(NOTE: the \fBsalloc\fR and \fBsbatch\fR commands do not support \fBSPANK\fR).
-In local context, options provided by 
-plugins are read by \fBSPANK\fR, and these options are presented to the user. 
-In "remote" context, the plugin is loaded on a compute node of the job,
-in other words, the plugin is loaded by \fBslurmd\fR. In local context, only
-the \fBinit\fR, \fBexit\fR, and \fBuser_local_init\fR functions are called.
+\fBSPANK\fR plugins are loaded in up to three separate contexts during a
+\fBSLURM\fR job. Briefly, the three contexts are:
+.TP 8
+\fBlocal\fB
+In \fBlocal\fR context, the plugin is loaded by \fBsrun\fR. (i.e. the "local"
+part of a parallel job).
+.TP
+\fBremote\fR
+In \fBremote\fR context, the plugin is loaded by \fBslurmd\fR. (i.e. the "remote"
+part of a parallel job).
+.TP
+\fBallocator\fR
+In \fBallocator\fR context, the plugin is loaded in one of the job allocation
+utilities \fBsbatch\fR or \fBsalloc\fR.
+.LP
+In local context, only the \fBinit\fR, \fBexit\fR, \fBinit_post_opt\fR, and
+\fBuser_local_init\fR functions are called. In allocator context, only the
+\fBinit\fR, \fBexit\fR, and \fBinit_post_opt\fR functions are called.
 Plugins may query the context in which they are running with the
-\fBspank_remote\fR function defined in \fB<slurm/spank.h>\fR.
+\fBspank_context\fR and \fBspank_remote\fR functions defined in
+\fB<slurm/spank.h>\fR.
 .LP
 \fBSPANK\fR plugins may be called from multiple points during the SLURM job
 launch. A plugin may define the following functions:
@@ -41,7 +53,7 @@ option processing.
 \fBslurm_spank_init_post_opt\fR
 Called at the same point as \fBslurm_spank_init\fR, but after all
 user options to the plugin have been processed. The reason that the
-\fBinit\fR and \fBinit_post_opt\fR callbacks are separated is so that
+\fBunit\fR and \fBinit_post_opt\fR callbacks are separated is so that
 plugins can process system-wide options specified in plugstack.conf in
 the \fBinit\fR callback, then process user options, and finaly take some
 action in \fBslurm_spank_init_post_opt\fR if necessary.
@@ -56,6 +68,10 @@ tasks are launched.
 \fBslurm_spank_user_init\fR 
 Called after privileges are temporarily dropped. (remote context only)
 .TP
+\fBslurm_spank_task_init_privileged\fR
+Called for each task just after fork, but before all elevated privileges
+are dropped. (remote context only)
+.TP
 \fBslurm_spank_task_init\fR 
 Called for each task just before execve(2). (remote context only)
 .TP
@@ -155,15 +171,29 @@ and \fBunsetenv\fR(3) may be used in local context.
 .LP
 See \fBspank.h\fR for more information, and \fBEXAMPLES\fR below for an example
 for \fBspank_getenv\fR usage.
+.LP
+Many of the described \fBSPANK\fR functions available to plugins return
+errors via the \fBspank_err_t\fR error type. On success, the return value
+will be set to \fBESPANK_SUCCESS\fR, while on failure, the return value
+will be set to one of many error values defined in slurm/spank.h. The
+\fBSPANK\fR interface provides a simple function
+.nf
+
+  const char * \fBspank_strerror (spank_err_t err);
+
+.fi
+which may be used to translate a \fBspank_err_t\fR value into its
+string representation.
 
 .SH "SPANK OPTIONS"
 .LP
 SPANK plugins also have an interface through which they may define
 and implement extra job options. These options are made available to
-the user through SLURM commands such as \fBsrun\fR(1), and if the
-option is specified, its value is forwarded and registered with
-the plugin on the remote side. In this way, \fBSPANK\fR plugins
-may dynamically provide new options and functionality to SLURM.
+the user through SLURM commands such as \fBsrun\fR(1), \fBsalloc\fR(1),
+and \fBsbatch\fR(1). if the option is specified by the user, its value is
+forwarded and registered with the plugin in slurmd when the job is run.
+In this way, \fBSPANK\fR plugins may dynamically provide new options and
+functionality to SLURM.
 .LP
 Each option registered by a plugin to SLURM takes the form of
 a \fBstruct spank_option\fR which is declared in \fB<slurm/spank.h>\fR as
@@ -215,14 +245,7 @@ struct, \fIoptarg\fR is the supplied argument if applicable, and \fIremote\fR
 is 0 if the function is being called from the "local" host 
 (e.g. \fBsrun\fR) or 1 from the "remote" host (\fBslurmd\fR).
 .LP
-There are two methods by which the plugin can register these options
-with SLURM. The simplest method is for the plugin to define an array
-of \fBstruct spank_option\fR with the symbol name \fBspank_options\fR. 
-This final element in the options table must be filled with zeros. A
-\fBSPANK_OPTIONS_TABLE_END\fR macro is defined in \fB<slurm/spank.h>\fR
-for this purpose.
-.LP
-Plugin options may also be dynamically registered with SLURM using 
+Plugin options may be registered with SLURM using
 the \fBspank_option_register\fR function. This function is only valid
 when called from the plugin's \fBslurm_spank_init\fR handler, and 
 registers one option at a time. The prototype is
@@ -235,7 +258,27 @@ registers one option at a time. The prototype is
 This function will return \fBESPANK_SUCCESS\fR on successful registration
 of an option, or \fBESPANK_BAD_ARG\fR for errors including invalid spank_t
 handle, or when the function is not called from the \fBslurm_spank_init\fR
-function.
+function. All options need to be registered from all contexts in which
+they will be used. For instance, if an option is only used in local (srun)
+and remote (slurmd) contexts, then \fBspank_option_register\fR
+should only be called from within those contexts. For example:
+.nf
+
+   if (spank_context() != S_CTX_ALLOCATOR)
+      spank_option_register (sp, opt);
+
+.fi
+If, however, the option is used in all contexts, the \fBspank_option_register\fR
+needs to be called everywhere.
+.LP
+In addition to \fBspank_option_register\fR, plugins may also export options
+to SLURM by defining a table of \fBstruct spank_option\fR with the
+symbol name \fBspank_options\fR. This method, however, is not supported
+for use with \fBsbatch\fR and \fBsalloc\fR (allocator context), thus
+the use of \fBspank_option_register\fR is preferred. When using the
+\fBspank_options\fR table, the final element in the array must be
+filled with zeros. A \fBSPANK_OPTIONS_TABLE_END\fR macro is provided
+in \fB<slurm/spank.h>\fR for this purpose.
 .LP
 When an option is provided by the user on the local side, \fBSLURM\fR will 
 immediately invoke the option's callback with \fIremote\fR=0. This
@@ -383,6 +426,11 @@ int slurm_spank_init (spank_t sp, int ac, char **av)
 {
     int i;
 
+	/* Don't do anything in sbatch/salloc
+	 */
+	if (spank_context () == S_CTX_ALLOCATOR)
+		return (0);
+
     for (i = 0; i < ac; i++) {
         if (strncmp ("min_prio=", av[i], 9) == 0) {
             const char *optarg = av[i] + 9;
@@ -479,7 +527,7 @@ static int _renice_opt_process (int val, const char *optarg, int remote)
 .SH "COPYING"
 Copyright (C) 2006 The Regents of the University of California.
 Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
-LLNL\-CODE\-402394.
+CODE\-OCEC\-09\-009. All rights reserved.
 .LP
 This file is part of SLURM, a resource management program.
 For details, see <https://computing.llnl.gov/linux/slurm/>.
diff --git a/etc/bluegene.conf.example b/etc/bluegene.conf.example
index 8ce73bd51..d35e068aa 100644
--- a/etc/bluegene.conf.example
+++ b/etc/bluegene.conf.example
@@ -34,6 +34,8 @@
 #                    2: Log level 1 and basic debug messages
 #                    3: Log level 2 and more debug message
 #                    4: Log all messages
+# DenyPassthrough:   Prevents use of passthrough ports in specific
+#                    dimensions, X, Y, and/or Z, plus ALL
 # 
 # NOTE: The bgl_serial value is set at configuration time using the 
 #       "--with-bgl-serial=" option. Its default value is "BGL".
diff --git a/etc/slurm.conf.example b/etc/slurm.conf.example
index f0c5780d1..425f4ff95 100644
--- a/etc/slurm.conf.example
+++ b/etc/slurm.conf.example
@@ -8,12 +8,14 @@
 #
 # See the slurm.conf man page for more information.
 #
+ClusterName=linux
 ControlMachine=linux0
 #ControlAddr=
 #BackupController=
 #BackupAddr=
 #
 SlurmUser=slurm
+#SlurmdUser=root
 SlurmctldPort=6817
 SlurmdPort=6818
 AuthType=auth/munge
@@ -62,6 +64,14 @@ SchedulerType=sched/backfill
 #SchedulerRootFilter=
 SelectType=select/linear
 FastSchedule=1
+#PriorityType=priority/multifactor
+#PriorityDecayHalfLife=14-0
+#PriorityUsageResetPeriod=14-0
+#PriorityWeightFairshare=100000
+#PriorityWeightAge=1000
+#PriorityWeightPartition=10000
+#PriorityWeightJobSize=1000
+#PriorityMaxAge=1-0
 #
 # LOGGING
 SlurmctldDebug=3
@@ -70,14 +80,16 @@ SlurmdDebug=3
 #SlurmdLogFile=
 JobCompType=jobcomp/none
 #JobCompLoc=
-JobAcctType=jobacct/none
-#JobAcctLoc=
-#JobAcctFrequency=
-DatabaseType=database/flatfile
-#DatabaseHost=localhost
-#DatabasePort=1234
-#DatabaseUser=mysql
-#DatabasePass=mysql
+#
+# ACCOUNTING
+#JobAcctGatherType=jobacct_gather/linux
+#JobAcctGatherFrequency=30
+#
+#AccountingStorageType=accounting_storage/slurmdbd
+#AccountingStorageHost=
+#AccountingStorageLoc=
+#AccountingStoragePass=
+#AccountingStorageUser=
 #
 # COMPUTE NODES
 NodeName=linux[1-32] Procs=1 State=UNKNOWN
diff --git a/etc/slurm.epilog.clean b/etc/slurm.epilog.clean
index 4ae37ae46..60df570c6 100644
--- a/etc/slurm.epilog.clean
+++ b/etc/slurm.epilog.clean
@@ -11,7 +11,7 @@
 if [ x$SLURM_UID == "x" ] ; then 
 	exit 0
 fi
-if [ x$SLURM_JOBID == "x" ] ; then 
+if [ x$SLURM_JOB_ID == "x" ] ; then 
         exit 0
 fi
 
@@ -25,7 +25,7 @@ fi
 job_list=`${SLURM_BIN}squeue --noheader --format=%i --user=$SLURM_UID --node=localhost`
 for job_id in $job_list
 do
-	if [ $job_id -ne $SLURM_JOBID ] ; then
+	if [ $job_id -ne $SLURM_JOB_ID ] ; then
 		exit 0
 	fi
 done
diff --git a/slurm.spec b/slurm.spec
index 7a4d191f7..c0ba49b7b 100644
--- a/slurm.spec
+++ b/slurm.spec
@@ -1,4 +1,4 @@
-# $Id: slurm.spec 16983 2009-03-24 16:33:55Z da $
+# $Id: slurm.spec 17631 2009-05-28 21:18:15Z jette $
 #
 # Note that this package is not relocatable
 
@@ -9,6 +9,7 @@
 # --with authd       %_with_authd       1    build auth-authd RPM
 # --with auth_none   %_with_auth_none   1    build auth-none RPM
 # --with bluegene    %_with_bluegene    1    build bluegene RPM
+# --with cray_xt     %_with_cray_xt     1    build for Cray XT system
 # --with debug       %_with_debug       1    enable extra debugging within SLURM
 # --with elan        %_with_elan        1    build switch-elan RPM
 # --without munge    %_without_munge    1    don't build auth-munge RPM
@@ -33,11 +34,12 @@
 %define slurm_with() %{expand:%%{?slurm_with_%{1}:1}%%{!?slurm_with_%{1}:0}}
 
 #  Options that are off by default (enable with --with <opt>)
-%slurm_without_opt elan
+%slurm_without_opt auth_none
 %slurm_without_opt authd
 %slurm_without_opt bluegene
-%slurm_without_opt auth_none
+%slurm_without_opt cray
 %slurm_without_opt debug
+%slurm_without_opt elan
 %slurm_without_opt sun_const
 
 # These options are only here to force there to be these on the build.  
@@ -73,14 +75,14 @@
 %endif
 
 Name:    slurm
-Version: 1.3.15
+Version: 2.0.2
 Release: 1%{?dist}
 
 Summary: Simple Linux Utility for Resource Management
 
 License: GPL 
 Group: System Environment/Base
-Source: slurm-1.3.15.tar.bz2
+Source: slurm-2.0.2.tar.bz2
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
 URL: https://computing.llnl.gov/linux/slurm/
 
@@ -91,7 +93,9 @@ BuildRequires: python
 %endif
 
 %if %{?chaos}0
+BuildRequires: gtk2-devel >= 2.7.1
 BuildRequires: ncurses-devel
+BuildRequires: pkgconfig
 %endif
 
 %if %{slurm_with pam}
@@ -265,10 +269,11 @@ SLURM process tracking plugin for SGI job containers.
 #############################################################################
 
 %prep
-%setup -n slurm-1.3.15
+%setup -n slurm-2.0.2
 
 %build
 %configure --program-prefix=%{?_program_prefix:%{_program_prefix}} \
+	%{?slurm_with_cray_xt:--enable-cray-xt} \
 	%{?slurm_with_debug:--enable-debug} \
 	%{?slurm_with_sun_const:--enable-sun-const} \
 	%{?with_proctrack}	\
@@ -312,6 +317,7 @@ install -D -m644 etc/federation.conf.example ${RPM_BUILD_ROOT}%{_sysconfdir}/fed
 %endif
 
 %if %{slurm_with bluegene}
+rm ${RPM_BUILD_ROOT}%{_bindir}/srun
 install -D -m644 etc/bluegene.conf.example ${RPM_BUILD_ROOT}%{_sysconfdir}/bluegene.conf.example
 %endif
 
@@ -322,11 +328,20 @@ if [ -d /etc/init.d ]; then
 fi
 
 LIST=./plugins.files
-test -f $RPM_BUILD_ROOT/%{_libdir}/slurm/task_affinity.so &&
-   echo %{_libdir}/slurm/task_affinity.so >> $LIST
-test -f $RPM_BUILD_ROOT/%{_libdir}/slurm/crypto_openssl.so &&
-   echo %{_libdir}/slurm/crypto_openssl.so >> $LIST
-
+test -f $RPM_BUILD_ROOT/%{_libdir}/slurm/accounting_storage_mysql.so &&
+   echo %{_libdir}/slurm/accounting_storage_mysql.so >> $LIST
+test -f $RPM_BUILD_ROOT/%{_libdir}/slurm/accounting_storage_pgsql.so &&
+   echo %{_libdir}/slurm/accounting_storage_pgsql.so >> $LIST
+test -f $RPM_BUILD_ROOT/%{_libdir}/slurm/checkpoint_blcr.so          &&
+   echo %{_libdir}/slurm/checkpoint_blcr.so          >> $LIST
+test -f $RPM_BUILD_ROOT/%{_libdir}/slurm/crypto_openssl.so           &&
+   echo %{_libdir}/slurm/crypto_openssl.so           >> $LIST
+test -f $RPM_BUILD_ROOT/%{_libdir}/slurm/jobcomp_mysql.so            &&
+   echo %{_libdir}/slurm/jobcomp_mysql.so            >> $LIST
+test -f $RPM_BUILD_ROOT/%{_libdir}/slurm/jobcomp_pgsql.so            &&
+   echo %{_libdir}/slurm/jobcomp_pgsql.so            >> $LIST
+test -f $RPM_BUILD_ROOT/%{_libdir}/slurm/task_affinity.so            &&
+   echo %{_libdir}/slurm/task_affinity.so             >> $LIST
 
 #############################################################################
 
@@ -441,9 +456,7 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(-,root,root)
 %dir %{_libdir}/slurm
 %{_libdir}/slurm/accounting_storage_filetxt.so
-%{_libdir}/slurm/accounting_storage_mysql.so
 %{_libdir}/slurm/accounting_storage_none.so
-%{_libdir}/slurm/accounting_storage_pgsql.so
 %{_libdir}/slurm/accounting_storage_slurmdbd.so
 %{_libdir}/slurm/checkpoint_none.so
 %{_libdir}/slurm/checkpoint_ompi.so
@@ -453,9 +466,9 @@ rm -rf $RPM_BUILD_ROOT
 %{_libdir}/slurm/jobacct_gather_none.so
 %{_libdir}/slurm/jobcomp_none.so
 %{_libdir}/slurm/jobcomp_filetxt.so
-%{_libdir}/slurm/jobcomp_mysql.so
-%{_libdir}/slurm/jobcomp_pgsql.so
 %{_libdir}/slurm/jobcomp_script.so
+%{_libdir}/slurm/priority_basic.so
+%{_libdir}/slurm/priority_multifactor.so
 %{_libdir}/slurm/proctrack_pgid.so
 %{_libdir}/slurm/proctrack_linuxproc.so
 %{_libdir}/slurm/sched_backfill.so
@@ -467,6 +480,9 @@ rm -rf $RPM_BUILD_ROOT
 %{_libdir}/slurm/select_cons_res.so
 %{_libdir}/slurm/select_linear.so
 %{_libdir}/slurm/switch_none.so
+%{_libdir}/slurm/topology_3d_torus.so
+%{_libdir}/slurm/topology_none.so
+%{_libdir}/slurm/topology_tree.so
 %{_libdir}/slurm/mpi_lam.so
 %{_libdir}/slurm/mpi_mpich1_p4.so
 %{_libdir}/slurm/mpi_mpich1_shmem.so
diff --git a/slurm/pmi.h b/slurm/pmi.h
index 9621077da..6740a8b68 100644
--- a/slurm/pmi.h
+++ b/slurm/pmi.h
@@ -389,7 +389,7 @@ communicate through IPC mechanisms (e.g., shared memory) and other network
 mechanisms.
 
 @*/
-int PMI_Get_clique_ranks( char ranks[], int length);
+int PMI_Get_clique_ranks( int ranks[], int length);
 
 /*@
 PMI_Abort - abort the process group associated with this process
diff --git a/slurm/slurm.h.in b/slurm/slurm.h.in
index b63eb1e23..95511f00f 100644
--- a/slurm/slurm.h.in
+++ b/slurm/slurm.h.in
@@ -2,14 +2,15 @@
  *  slurm.h - Definitions for all of the SLURM RPCs
  *****************************************************************************
  *  Copyright (C) 2002-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>, 
  *	Joey Ekstrom <ekstrom1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -133,10 +134,12 @@ BEGIN_C_DECLS
    typedef struct switch_jobinfo *switch_jobinfo_t;	/* opaque data type */
 #endif
 
-/* Define select_jobinfo_t below to avoid including extraneous slurm headers */
+/* Define select_jobinfo_t and select_job_res_t below 
+ * to avoid including extraneous slurm headers */
 #ifndef __select_jobinfo_t_defined
-#  define  __select_jobinfo_t_defined
-   typedef struct select_jobinfo *select_jobinfo_t;     /* opaque data type */
+#  define  __select_jobinfo_t_defined	/* Opaque data for select plugins */
+   typedef struct select_jobinfo *select_jobinfo_t;  /* for BlueGene */
+   typedef struct select_job_res *select_job_res_t;  /* for non-BlueGene */
 #endif
 
 /* Define jobacctinfo_t below to avoid including extraneous slurm headers */
@@ -221,7 +224,10 @@ enum job_state_reason {
 	WAIT_HELD,		/* job is held, priority==0 */
 	WAIT_TIME,		/* job waiting for specific begin time */
 	WAIT_LICENSES,		/* job is waiting for licenses */
-	WAIT_ASSOC_LIMIT,	/* user/bank job limit reached */
+	WAIT_ASSOC_JOB_LIMIT,	/* user/bank job limit reached */
+	WAIT_ASSOC_RESOURCE_LIMIT,/* user/bank resource limit reached */
+	WAIT_ASSOC_TIME_LIMIT,  /* user/bank time limit reached */
+	WAIT_RESERVATION,	/* reservation not available */
 	WAIT_TBD1,
 	WAIT_TBD2,
 	FAIL_DOWN_PARTITION,	/* partition for job is DOWN */
@@ -281,6 +287,7 @@ enum select_data_type {
 	SELECT_DATA_MLOADER_IMAGE,/* data-> char *mloaderimage */
 	SELECT_DATA_RAMDISK_IMAGE,/* data-> char *ramdiskimage */
 	SELECT_DATA_REBOOT,	/* data-> uint16_t reboot */
+	SELECT_DATA_RESV_ID,	/* data-> char *reservation_id */
 };
 
 enum select_print_mode {
@@ -299,6 +306,7 @@ enum select_print_mode {
 	SELECT_PRINT_MLOADER_IMAGE,/* Print just the MLOADER IMAGE */
 	SELECT_PRINT_RAMDISK_IMAGE,/* Print just the RAMDISK IMAGE */
 	SELECT_PRINT_REBOOT,	/* Print just the REBOOT */
+	SELECT_PRINT_RESV_ID,	/* Print just Cray/BASIL reservation ID */
 };
 
 enum select_node_cnt {
@@ -356,18 +364,26 @@ typedef enum task_dist_states {
 #define OPEN_MODE_TRUNCATE	2
 
 typedef enum cpu_bind_type {	/* cpu binding type from --cpu_bind=... */
-	/* the following auto-binding flags are mutually exclusive */
-	CPU_BIND_TO_THREADS= 0x01, /* =threads */ 
-	CPU_BIND_TO_CORES  = 0x02, /* =cores */
-	CPU_BIND_TO_SOCKETS= 0x04, /* =sockets */
 	/* verbose can be set with any other flag */
-	CPU_BIND_VERBOSE   = 0x08, /* =v, */
+	CPU_BIND_VERBOSE   = 0x01, /* =v, */
+	/* the following auto-binding flags are mutually exclusive */
+	CPU_BIND_TO_THREADS= 0x02, /* =threads */ 
+	CPU_BIND_TO_CORES  = 0x04, /* =cores */
+	CPU_BIND_TO_SOCKETS= 0x08, /* =sockets */
+	CPU_BIND_TO_LDOMS  = 0x10, /* locality domains */
 	/* the following manual binding flags are mutually exclusive */
-	/* CPU_BIND_NONE needs to be the first in this sub-list */
-	CPU_BIND_NONE	   = 0x10, /* =no */
-	CPU_BIND_RANK  	   = 0x20, /* =rank */
-	CPU_BIND_MAP	   = 0x40, /* =map_cpu:<list of CPU IDs> */
-	CPU_BIND_MASK	   = 0x80  /* =mask_cpu:<list of CPU masks> */
+	/* CPU_BIND_NONE needs to be the lowest value among manual bindings */
+	CPU_BIND_NONE	   = 0x20, /* =no */
+	CPU_BIND_RANK  	   = 0x40, /* =rank */
+	CPU_BIND_MAP	   = 0x80, /* =map_cpu:<list of CPU IDs> */
+	CPU_BIND_MASK	   = 0x100,/* =mask_cpu:<list of CPU masks> */
+	CPU_BIND_LDRANK    = 0x200,/* =locality domain rank */
+	CPU_BIND_LDMAP	   = 0x400,/* =map_ldom:<list of locality domains> */
+	CPU_BIND_LDMASK	   = 0x800,/* =mask_ldom:<list of ldom masks> */
+	
+	/* the following is used only as a flag for expressing 
+	 * the contents of TaskPluginParams */
+	CPU_BIND_CPUSETS   = 0x8000
 } cpu_bind_type_t;
 
 typedef enum mem_bind_type {    /* memory binding type from --mem_bind=... */
@@ -392,6 +408,7 @@ enum node_states {
 	NODE_STATE_DOWN,	/* node in non-usable state */
 	NODE_STATE_IDLE,	/* node idle and available for use */
 	NODE_STATE_ALLOCATED,	/* node has been allocated to a job */
+	NODE_STATE_FUTURE,	/* node slot reserved for future use */
 	NODE_STATE_END		/* last entry in table */
 };
 #define NODE_STATE_BASE       0x00ff
@@ -406,6 +423,8 @@ enum node_states {
 #define NODE_STATE_POWER_SAVE 0x1000	/* node in power save mode */
 #define NODE_STATE_FAIL       0x2000	/* node is failing, do not allocate
 					 * new work */
+#define NODE_STATE_POWER_UP   0x4000	/* restore power to a node */
+#define NODE_STATE_MAINT      0x8000	/* node in maintenance reservation */
 
 /* used to define the size of the credential.signature size
  * used to define the key size of the io_stream_header_t
@@ -447,20 +466,24 @@ typedef enum select_type_plugin_info {
 	CR_CPU_MEMORY     /* CPU and Memory are CRs */
 } select_type_plugin_info_t ;
 
-/* Values for slurm_ctl_conf.task_plugin_param */
-#define TASK_PARAM_NONE    0x0000
-#define TASK_PARAM_CPUSETS 0x0001
-#define TASK_PARAM_SCHED   0x0002
-
 #define MEM_PER_CPU  0x80000000
 #define SHARED_FORCE 0x8000
 
-#define PRIVATE_DATA_JOBS	0x0001	/* job/step data is private */
-#define PRIVATE_DATA_NODES	0x0002	/* node data is private */
-#define PRIVATE_DATA_PARTITIONS	0x0004	/* partition data is private */
-#define PRIVATE_DATA_USAGE	0x0008	/* accounting usage data is private */
-#define PRIVATE_DATA_USERS	0x0010	/* accounting user data is private */
-#define PRIVATE_DATA_ACCOUNTS	0x0020	/* accounting account data is private */
+#define PRIVATE_DATA_JOBS	  0x0001 /* job/step data is private */
+#define PRIVATE_DATA_NODES	  0x0002 /* node data is private */
+#define PRIVATE_DATA_PARTITIONS	  0x0004 /* partition data is private */
+#define PRIVATE_DATA_USAGE	  0x0008 /* accounting usage data is private */
+#define PRIVATE_DATA_USERS	  0x0010 /* accounting user data is private */
+#define PRIVATE_DATA_ACCOUNTS	  0x0020 /* accounting account data is private*/
+#define PRIVATE_DATA_RESERVATIONS 0x0040 /* reservation data is private */
+
+#define PRIORITY_RESET_NONE	0x0000	/* never clear */
+#define PRIORITY_RESET_NOW	0x0001	/* clear now (when slurmctld restarts) */
+#define PRIORITY_RESET_DAILY	0x0002	/* clear daily at midnight */
+#define PRIORITY_RESET_WEEKLY	0x0003	/* clear weekly at Sunday 00:00 */
+#define PRIORITY_RESET_MONTHLY	0x0004	/* clear monthly on first at 00:00 */
+#define PRIORITY_RESET_QUARTERLY 0x0005	/* clear quarterly on first at 00:00 */
+#define PRIORITY_RESET_YEARLY	0x0006	/* clear yearly on first at 00:00 */
 
 /*****************************************************************************\
  *	PROTOCOL DATA STRUCTURE DEFINITIONS
@@ -479,9 +502,13 @@ typedef struct job_descriptor {	/* For submit, allocate, and update requests */
 	uint32_t argc;		/* number of arguments to the script */
 	char **argv;		/* arguments to the script */
 	time_t begin_time;	/* delay initiation until this time */
+	uint16_t ckpt_interval;	/* periodically checkpoint this job */
+	char *ckpt_dir;  	/* directory to store checkpoint images */
 	char *comment;		/* arbitrary comment (used by Moab scheduler) */
 	uint16_t contiguous;	/* 1 if job requires contiguous nodes,
 				 * 0 otherwise,default=0 */
+	char *cpu_bind;		/* binding map for map/mask_cpu */
+	uint16_t cpu_bind_type;	/* see cpu_bind_type_t */
 	char *dependency;	/* syncrhonize job execution with other jobs */
 	char **environment;	/* environment variables to set for job, 
 				 *  name=value pairs, one per line */
@@ -501,11 +528,14 @@ typedef struct job_descriptor {	/* For submit, allocate, and update requests */
 	char *licenses;		/* licenses required by the job */
 	uint16_t mail_type;	/* see MAIL_JOB_ definitions above */
 	char *mail_user;	/* user to receive notification */
+	char *mem_bind;		/* binding map for map/mask_cpu */
+	uint16_t mem_bind_type;	/* see mem_bind_type_t */
 	char *name;		/* name of the job, default "" */
 	char *network;		/* network use spec */
 	uint16_t nice;		/* requested priority change, 
 				 * NICE_OFFSET == no change */
-	uint32_t num_tasks;	/* number of tasks to be started, for batch only */
+	uint32_t num_tasks;	/* number of tasks to be started, 
+				 * for batch only */
 	uint8_t open_mode;	/* out/err open mode truncate or append,
 				 * see OPEN_MODE_* */
 	uint16_t other_port;	/* port to send various notification msg to */
@@ -522,7 +552,7 @@ typedef struct job_descriptor {	/* For submit, allocate, and update requests */
 	char *req_nodes;	/* comma separated list of required nodes
 				 * default NONE */
 	uint16_t requeue;	/* enable or disable job requeue option */
-
+	char *reservation;	/* name of reservation to use */
 	char *script;		/* the actual job script, default NONE */
 	uint16_t shared;	/* 1 if job can share nodes with other jobs,
 				 * 0 if job needs exclusive access to the node,
@@ -588,17 +618,21 @@ typedef struct job_descriptor {	/* For submit, allocate, and update requests */
 /* End of Blue Gene specific values */
 
 	select_jobinfo_t select_jobinfo; /* opaque data type,
-			* SLURM internal use only */
+					  * SLURM internal use only */
+	char *wckey;            /* wckey for job */
 } job_desc_msg_t;
 
 typedef struct job_info {
 	char *account;		/* charge to specified account */
 	char    *alloc_node;	/* local node making resource alloc */
 	uint32_t alloc_sid;	/* local sid making resource alloc */
+	uint32_t assoc_id;	/* association id for job */
 	uint16_t batch_flag;	/* 1 if batch: queued job with script */
 	char *command;		/* command to be executed */
 	char *comment;		/* arbitrary comment (used by Moab scheduler) */
 	uint16_t contiguous;	/* 1 if job requires contiguous nodes */
+	uint32_t *cpu_count_reps;/* how many nodes have same cpu count */
+	uint16_t *cpus_per_node;/* cpus per node */
 	uint16_t cpus_per_task;	/* number of processors required for each task */
 	char *dependency;	/* syncrhonize job execution with other jobs */
 	time_t end_time;	/* time of termination, actual or expected */
@@ -618,6 +652,13 @@ typedef struct job_info {
 	uint32_t job_min_tmp_disk; /* minimum tmp disk per node, default=0 */
 	uint16_t job_state;	/* state of the job, see enum job_states */
 	char *licenses;		/* licenses required by the job */
+	uint16_t max_cores;	/* maximum number of cores per cpu */
+	uint32_t max_nodes;	/* maximum number of nodes usable by job */
+	uint16_t max_sockets;	/* maximum number of sockets per node */
+	uint16_t max_threads;	/* maximum number of threads per core */
+	uint16_t min_cores;	/* minimum number of cores per cpu */
+	uint16_t min_sockets;	/* minimum number of sockets per node */
+	uint16_t min_threads;	/* minimum number of threads per core */
 	char *name;		/* name of the job */
 	char *network;		/* network specification */
 	char *nodes;		/* list of nodes allocated to job */
@@ -627,6 +668,10 @@ typedef struct job_info {
 	uint16_t ntasks_per_core;/* number of tasks to invoke on each core */
 	uint16_t ntasks_per_node;/* number of tasks to invoke on each node */
 	uint16_t ntasks_per_socket;/* number of tasks to invoke on each socket */
+	uint32_t num_cpu_groups;/* elements in cpu arrays below */
+
+	uint32_t num_nodes;	/* minimum number of nodes required by job */
+	uint32_t num_procs;	/* number of processors required by job */
 	char *partition;	/* name of assigned partition */
 	time_t pre_sus_time;	/* time job ran prior to last suspend */
 	uint32_t priority;	/* relative priority of the job, 
@@ -636,30 +681,21 @@ typedef struct job_info {
 				 * start_range_1, end_range_1, 
 				 * start_range_2, .., -1  */
         uint16_t requeue;       /* enable or disable job requeue option */
+	uint16_t restart_cnt;	/* count of job restarts */
+	char *resv_name;	/* reservation name */
 	select_jobinfo_t select_jobinfo; /* opaque data type,
 				 * process using select_g_get_jobinfo() */
 	uint16_t shared;	/* 1 if job can share nodes with other jobs */
 	time_t start_time;	/* time execution begins, actual or expected */
+	char *state_desc;	/* optional details for state_reason */
 	uint16_t state_reason;	/* reason job still pending or failed, see
 				 * slurm.h:enum job_state_reason */
 	time_t submit_time;	/* time of job submission */
 	time_t suspend_time;	/* time job last suspended or resumed */
 	uint32_t time_limit;	/* maximum run time in minutes or INFINITE */
 	uint32_t user_id;	/* user the job runs as */
+	char *wckey;            /* wckey for job */
 	char *work_dir;		/* pathname of working directory */
-
-	uint16_t num_cpu_groups;/* elements in below cpu arrays */
-	uint32_t *cpus_per_node;/* cpus per node */
-	uint32_t *cpu_count_reps;/* how many nodes have same cpu count */
-	uint32_t num_procs;	/* number of processors required by job */
-	uint32_t num_nodes;	/* minimum number of nodes required by job */
-	uint32_t max_nodes;	/* maximum number of nodes usable by job */
-	uint16_t min_sockets;	/* minimum number of sockets per node */
-	uint16_t max_sockets;	/* maximum number of sockets per node */
-	uint16_t min_cores;	/* minimum number of cores per cpu */
-	uint16_t max_cores;	/* maximum number of cores per cpu */
-	uint16_t min_threads;	/* minimum number of threads per core */
-	uint16_t max_threads;	/* maximum number of threads per core */
 } job_info_t;
 
 typedef struct job_info_msg {
@@ -670,21 +706,18 @@ typedef struct job_info_msg {
 
 typedef struct slurm_step_layout {
 	uint32_t node_cnt;	/* node count */
-	uint32_t task_cnt;	/* total number of tasks in the step */
-
 	char *node_list;        /* list of nodes in step */
+	uint16_t plane_size;	/* plane size when task_dist =
+				 * SLURM_DIST_PLANE */
 	/* Array of length "node_cnt". Each element of the array
 	 * is the number of tasks assigned to the corresponding node */
 	uint16_t *tasks;
-
+	uint32_t task_cnt;	/* total number of tasks in the step */
+	uint16_t task_dist;	/* see enum task_dist_state */
 	/* Array (of length "node_cnt") of task ID arrays.  The length
 	 * of each subarray is designated by the corresponding value in
          * the tasks array. */
 	uint32_t **tids;	/* host id => task id mapping */
-
-	uint16_t task_dist;	/* see enum task_dist_state */
-	uint16_t plane_size;	/* plane size when task_dist =
-				 * SLURM_DIST_PLANE */
 } slurm_step_layout_t;
 
 typedef struct slurm_step_io_fds {
@@ -739,38 +772,45 @@ typedef struct srun_user_msg {
 
 typedef struct srun_node_fail_msg {
 	uint32_t job_id;	/* slurm job_id */
-	uint32_t step_id;	/* step_id or NO_VAL */
 	char *nodelist;		/* name of failed node(s) */
+	uint32_t step_id;	/* step_id or NO_VAL */
 } srun_node_fail_msg_t;
 
+typedef struct srun_step_missing_msg {
+	uint32_t job_id;	/* slurm job_id */
+	char *nodelist;		/* name of node(s) lacking this step */
+	uint32_t step_id;	/* step_id or NO_VAL */
+} srun_step_missing_msg_t;
+
 typedef struct {
+	uint16_t ckpt_interval;	/* checkpoint interval in minutes */
+	uint32_t cpu_count;	/* number of required processors */
+	uint16_t exclusive;	/* 1 if CPUs not shared with other steps */
+	uint16_t immediate;	/* 1 if allocate to run or fail immediately, 
+				 * 0 if to be queued awaiting resources */
 	uint32_t job_id;	/* job ID */
-	uid_t uid;
+	uint32_t mem_per_task;	/* memory required per task (MB), 
+				 * use job limit if 0 */
+	char *ckpt_dir;		/* directory to store checkpoint image files */
 	char *name;		/* name of the job step */
+	char *network;		/* network use spec */
+	uint8_t no_kill;	/* 1 if no kill on node failure */
 	uint32_t node_count;	/* number of required nodes */
-	uint32_t cpu_count;	/* number of required processors */
-	uint32_t task_count;	/* number of tasks required */
-	uint16_t relative;	/* first node to use of job's allocation */
-	uint16_t task_dist;	/* see enum task_dist_state, default
-				   is SLURM_DIST_CYCLIC */
-	uint16_t plane_size;	/* plane size when task_dist =
-				   SLURM_DIST_PLANE */
 	char *node_list;	/* list of required nodes */
-	char *network;		/* network use spec */
-	uint16_t immediate;	/* 1 if allocate to run or fail immediately, 
-				 * 0 if to be queued awaiting resources */
-	uint16_t exclusive;	/* 1 if CPUs not shared with other steps */
 	bool overcommit;	/* "true" to allow the allocation of more tasks
-				   to a node than available processors,
-				   "false" to accept at most one task per
-				   processor. "false" by default. */
-	bool no_kill;		/* true of no kill on node failure */
-	uint16_t ckpt_interval;	/* checkpoint interval in minutes */
-	char *ckpt_path;	/* path to store checkpoint image files */
+				 * to a node than available processors,
+				 * "false" to accept at most one task per
+				 * processor. "false" by default. */
+	uint16_t plane_size;	/* plane size when task_dist =
+				 * SLURM_DIST_PLANE */
+	uint16_t relative;	/* first node to use of job's allocation */
+	uint16_t resv_port_cnt;	/* reserve ports if set */
+	uint32_t task_count;	/* number of tasks required */
+	uint16_t task_dist;	/* see enum task_dist_state, default
+				 * is SLURM_DIST_CYCLIC */
+	uid_t uid;		/* user ID */
 	uint16_t verbose_level; /* for extra logging decisions in step
-				   launch api */
-
-	uint16_t mem_per_task;	/* memory required per task (MB), 0=no limit */
+				 * launch api */
 } slurm_step_ctx_params_t;
 
 typedef struct {
@@ -806,17 +846,15 @@ typedef struct {
 	uint16_t max_cores;
 	uint16_t max_threads;
 	uint16_t cpus_per_task;
-	uint16_t ntasks_per_node;
-	uint16_t ntasks_per_socket;
-	uint16_t ntasks_per_core;
 	uint16_t task_dist;
-	uint16_t plane_size;
+	bool preserve_env;
 
 	char *mpi_plugin_name;
 	uint8_t open_mode;
 	uint16_t acctg_freq;
 	bool pty;
-	char *ckpt_path;
+	char *ckpt_dir;
+	char *restart_dir;
 } slurm_step_launch_params_t;
 
 typedef struct {
@@ -833,21 +871,22 @@ typedef struct {
 } slurm_allocation_callbacks_t;
 
 typedef struct {
+	char *ckpt_dir;	        /* path to store checkpoint image files */
+	uint16_t ckpt_interval;	/* checkpoint interval in minutes */
 	uint32_t job_id;	/* job ID */
-	uint16_t step_id;	/* step ID */
-	uint32_t user_id;	/* user the job runs as */
-	uint32_t num_tasks;	/* number of tasks */
-	time_t start_time;	/* step start time */
-	time_t run_time;	/* net run time (factor out time suspended) */
-	char *partition;	/* name of assigned partition */
-	char *nodes;		/* list of nodes allocated to job_step */
 	char *name;		/* name of job step */
 	char *network;		/* network specs for job step */
+	char *nodes;		/* list of nodes allocated to job_step */
 	int *node_inx;		/* list index pairs into node_table for *nodes:
 				 * start_range_1, end_range_1,
 				 * start_range_2, .., -1  */
-	uint16_t ckpt_interval;	/* checkpoint interval in minutes */
-	char *ckpt_path;	/* path to store checkpoint image files */
+	uint32_t num_tasks;	/* number of tasks */
+	char *partition;	/* name of assigned partition */
+	char *resv_ports;	/* ports allocated for MPI */
+	time_t run_time;	/* net run time (factor out time suspended) */
+	time_t start_time;	/* step start time */
+	uint32_t step_id;	/* step ID */
+	uint32_t user_id;	/* user the job runs as */
 } job_step_info_t;
 
 typedef struct job_step_info_response_msg {
@@ -857,21 +896,21 @@ typedef struct job_step_info_response_msg {
 } job_step_info_response_msg_t;
 
 typedef struct node_info {
-	char *name;		/* node name */
-	uint16_t node_state;	/* see enum node_states */
+	char *arch;		/* computer architecture */
+	uint16_t cores;         /* number of cores per CPU */
 	uint16_t cpus;		/* configured count of cpus running on 
 				 * the node */
-	uint16_t used_cpus;	/* count of used cpus on this node */
+	char *features;		/* arbitrary list of features for node */
+	char *name;		/* node name */
+	uint16_t node_state;	/* see enum node_states */
+	char *os;		/* operating system currently running */
+	uint32_t real_memory;	/* configured MB of real memory on the node */
+	char *reason;   	/* reason for node being DOWN or DRAINING */
 	uint16_t sockets;       /* number of sockets per node */
-	uint16_t cores;         /* number of cores per CPU */
 	uint16_t threads;       /* number of threads per core */
-	uint32_t real_memory;	/* configured MB of real memory on the node */
 	uint32_t tmp_disk;	/* configured MB of total disk in TMP_FS */
+	uint16_t used_cpus;	/* count of used cpus on this node */
 	uint32_t weight;	/* arbitrary priority of node for scheduling */
-	char *arch;		/* computer architecture */
-	char *features;		/* arbitrary list of features for node */
-	char *os;		/* operating system currently running */
-	char *reason;   	/* reason for node being DOWN or DRAINING */
 } node_info_t;
 
 typedef struct node_info_msg {
@@ -880,14 +919,29 @@ typedef struct node_info_msg {
 	node_info_t *node_array;	/* the node records */
 } node_info_msg_t;
 
+typedef struct topo_info {
+	uint16_t level;			/* level in hierarchy, leaf=0 */
+	uint32_t link_speed;		/* link speed, arbitrary units */
+	char *name;			/* switch name */
+	char *nodes;			/* name if direct descendent nodes */
+	char *switches;			/* name if direct descendent switches */
+} topo_info_t;
+
+typedef struct topo_info_response_msg {
+	uint32_t record_count;		/* number of records */
+	topo_info_t *topo_array;	/* the switch topology records */
+} topo_info_response_msg_t;
+
 typedef struct job_alloc_info_msg {
 	uint32_t job_id;	/* job ID */
 } job_alloc_info_msg_t;
 
 typedef struct partition_info {
+	char *allow_alloc_nodes;/* list names of allowed allocating nodes */
 	char *allow_groups;	/* comma delimited list of groups, 
 				 * null indicates all */
 	uint16_t default_part;	/* 1 if this is default partition */
+	uint32_t default_time;	/* minutes, NO_VAL or INFINITE */
 	uint16_t disable_root_jobs; /* 1 if user root jobs disabled */
 	uint16_t hidden;	/* 1 if partition is hidden by default */
 	uint32_t max_nodes;	/* per job or INFINITE */
@@ -914,8 +968,8 @@ typedef struct delete_partition_msg {
 typedef struct resource_allocation_response_msg {
 	uint32_t job_id;	/* assigned job id */
 	char *node_list;	/* assigned list of nodes */
-	uint16_t num_cpu_groups;/* elements in below cpu arrays */
-	uint32_t *cpus_per_node;/* cpus per node */
+	uint32_t num_cpu_groups;/* elements in below cpu arrays */
+	uint16_t *cpus_per_node;/* cpus per node */
 	uint32_t *cpu_count_reps;/* how many nodes have same cpu count */
 	uint32_t node_cnt;	/* count of nodes */
 	uint32_t error_code;	/* error code for warning message */
@@ -926,8 +980,8 @@ typedef struct resource_allocation_response_msg {
 typedef struct job_alloc_info_response_msg {
 	uint32_t job_id;	/* assigned job id */
 	char *node_list;	/* assigned list of nodes */
-	uint16_t num_cpu_groups;/* elements in below cpu arrays */
-	uint32_t *cpus_per_node;/* cpus per node */
+	uint32_t num_cpu_groups;/* elements in below cpu arrays */
+	uint16_t *cpus_per_node;/* cpus per node */
 	uint32_t *cpu_count_reps;/* how many nodes have same cpu count */
 	uint32_t node_cnt;	/* count of nodes */
 	slurm_addr *node_addr;	/* network addresses */
@@ -942,15 +996,81 @@ typedef struct partition_info_msg {
 	partition_info_t *partition_array; /* the partition records */
 } partition_info_msg_t;
 
+/*
+ * Resource reservation data structures.
+ * Create, show, modify and delete functions are required
+ */
+#define RESERVE_FLAG_MAINT	0x0001		/* Set MAINT flag */
+#define RESERVE_FLAG_NO_MAINT	0x0002		/* Clear MAINT flag */
+#define RESERVE_FLAG_DAILY	0x0004		/* Set DAILY flag */
+#define RESERVE_FLAG_NO_DAILY	0x0008		/* Clear DAILY flag */
+#define RESERVE_FLAG_WEEKLY	0x0010		/* Set WEEKLY flag */
+#define RESERVE_FLAG_NO_WEEKLY	0x0020		/* Clear WEEKLY flag */
+#define RESERVE_FLAG_SPEC_NODES 0x8000		/* Contains specific nodes */
+
+typedef struct reserve_info {
+	char *accounts;		/* names of accounts permitted to use */
+	time_t end_time;	/* end time of reservation */
+	char *features;		/* required node features */
+	uint16_t flags;		/* see RESERVE_FLAG_* above */
+	char *name;		/* name of reservation */
+	uint32_t node_cnt;	/* count of nodes required */
+	int *node_inx;		/* list index pairs into node_table for *nodes:
+				 * start_range_1, end_range_1,
+				 * start_range_2, .., -1  */
+	char *node_list;	/* list of reserved nodes or ALL */
+	char *partition;	/* name of partition to be used */
+	time_t start_time;	/* start time of reservation */
+	char *users;		/* names of users permitted to use */
+} reserve_info_t;
+
+typedef struct reserve_info_msg {
+	time_t last_update;	/* time of latest info */
+	uint32_t record_count;	/* number of records */
+	reserve_info_t *reservation_array; /* the reservation records */
+} reserve_info_msg_t;
+
+typedef struct resv_desc_msg {
+	char *accounts;		/* names of accounts permitted to use */
+	uint32_t duration;	/* duration of reservation in seconds */
+	time_t end_time;	/* end time of reservation */
+	char *features;		/* required node features */
+	uint16_t flags;		/* see RESERVE_FLAG_* above */
+	char *name;		/* name of reservation (optional on create) */
+	uint32_t node_cnt;	/* count of nodes required */
+	char *node_list;	/* list of reserved nodes or ALL */
+	char *partition;	/* name of partition to be used */
+	time_t start_time;	/* start time of reservation */
+	char *users;		/* names of users permitted to use */
+} resv_desc_msg_t;
+
+typedef struct reserve_response_msg {
+	char *name;		/* name of reservation */
+} reserve_response_msg_t;
+
+typedef struct reservation_name_msg {
+	char *name;		/* name of reservation just created or
+				 * to be delete */
+} reservation_name_msg_t;
+
+
+#define DEBUG_FLAG_SELECT_TYPE	0x00000001	/* SelectType plugin */
+#define DEBUG_FLAG_STEPS	0x00000002	/* slurmctld steps */
+#define DEBUG_FLAG_TRIGGERS	0x00000004	/* slurmctld triggers */
+#define DEBUG_FLAG_CPU_BIND	0x00000008	/* CPU binding */
+#define DEBUG_FLAG_WIKI		0x00000010	/* wiki communications */
+
 typedef struct slurm_ctl_conf {
 	time_t last_update;	/* last update time of the build parameters */
 	uint16_t accounting_storage_enforce; /* job requires valid association:
-					* user/account/partition/cluster */
-	char *accounting_storage_host; /* accounting storage host */
-	char *accounting_storage_loc; /* accounting storage (db table)
-				       * location */
-	char *accounting_storage_pass; /* accounting storage
-					    password */
+					 * user/account/partition/cluster */
+	char *accounting_storage_backup_host;	/* accounting storage
+						 * backup host */
+	char *accounting_storage_host;	/* accounting storage host */
+	char *accounting_storage_loc;	/* accounting storage (db table)
+					 * location */
+	char *accounting_storage_pass;	/* accounting storage
+					 * password */
 	uint32_t accounting_storage_port;/* node accountinging storage port */
 	char *accounting_storage_type; /* accounting storage type */
 	char *accounting_storage_user; /* accounting storage user */
@@ -962,9 +1082,12 @@ typedef struct slurm_ctl_conf {
 	uint16_t cache_groups;	/* cache /etc/groups to avoid initgroups(2) */
 	char *checkpoint_type;	/* checkpoint plugin type */
 	char *cluster_name;     /* general name of the entire cluster */
+	uint16_t complete_wait;	/* seconds to wait for job completion before
+				 * scheduling another job */
 	char *control_addr;	/* comm path of slurmctld primary server */
 	char *control_machine;	/* name of slurmctld primary server */
 	char *crypto_type;	/* cryptographic signature plugin */
+	uint32_t debug_flags;	/* see DEBUG_FLAG_* above for values */
 	uint32_t def_mem_per_task; /* default MB memory per spawned task */
 	uint16_t disable_root_jobs; /* if set then user root can't run jobs */
 	uint16_t enforce_part_limits;	/* if set, reject job exceeding 
@@ -972,18 +1095,19 @@ typedef struct slurm_ctl_conf {
 	char *epilog;		/* pathname of job epilog */
 	uint32_t epilog_msg_time;  /* usecs for slurmctld to process an
 				 * epilog complete message */
+	char *epilog_slurmctld;	/* pathname of job epilog run by slurmctld */
 	uint16_t fast_schedule;	/* 1 to *not* check configurations by node
 				 * (only check configuration file, faster) */
 	uint32_t first_job_id;	/* first slurm generated job_id to assign */
-	uint32_t next_job_id;	/* next slurm generated job_id to assign */
 	uint16_t get_env_timeout; /* timeout for srun --get-user-env option */
 	uint16_t health_check_interval;	/* secs between health checks */
 	char * health_check_program;	/* pathname of health check program */
 	uint16_t inactive_limit;/* seconds of inactivity before a
 				 * inactive resource allocation is released */
-	char *job_acct_gather_type; /* job accounting gather type */
 	uint16_t job_acct_gather_freq; /* poll frequency for job accounting 
 					* gather plugins */
+	char *job_acct_gather_type; /* job accounting gather type */
+	char *job_ckpt_dir;	/* directory saving job record checkpoint */
 	char *job_comp_host;	/* job completion logging host */
 	char *job_comp_loc;	/* job completion logging location */
 	char *job_comp_pass;	/* job completion storage password */
@@ -994,6 +1118,9 @@ typedef struct slurm_ctl_conf {
 	char *job_credential_public_certificate;/* path to public certificate*/
 	uint16_t job_file_append; /* if set, append to stdout/err file */
 	uint16_t job_requeue;	/* If set, jobs get requeued on node failre */
+	uint16_t kill_on_bad_exit; /* If set, the job will be
+				 * terminated immediately when one of
+				 * the processes is aborted or crashed */ 
 	uint16_t kill_wait;	/* seconds between SIGXCPU to SIGKILL 
 				 * on job termination */
 	char *licenses;		/* licenses available on this cluster */
@@ -1003,23 +1130,47 @@ typedef struct slurm_ctl_conf {
 	uint16_t min_job_age;	/* COMPLETED jobs over this age (secs) 
 	                         * purged from in memory records */
 	char *mpi_default;	/* Default version of MPI in use */
+	char *mpi_params;	/* MPI parameters */
 	uint16_t msg_timeout;	/* message timeout */
+	uint32_t next_job_id;	/* next slurm generated job_id to assign */
 	char *node_prefix;      /* prefix of nodes in partition, only set in 
 				   bluegene clusters NULL otherwise */
+	uint16_t over_time_limit; /* job's time limit can be exceeded by this
+				   * number of minutes before cancellation */
 	char *plugindir;	/* pathname to plugins */
-	char *plugstack;        /* pathname to plugin stack config file */
+	char *plugstack;        /* pathname to plugin stack config
+				 * file */
+	uint32_t priority_decay_hl; /* priority decay half life in
+				     * seconds */
+	uint16_t priority_favor_small; /* favor small jobs over large */
+	uint32_t priority_max_age; /* time when not to add any more
+				    * priority to a job if reached */
+	uint16_t priority_reset_period; /* when to clear usage,
+					 * see PRIORITY_RESET_* */
+	char *priority_type;    /* priority type plugin */
+	uint32_t priority_weight_age; /* weight for age factor */
+	uint32_t priority_weight_fs; /* weight for Fairshare factor */
+	uint32_t priority_weight_js; /* weight for Job Size factor */
+	uint32_t priority_weight_part; /* weight for Partition factor */
+	uint32_t priority_weight_qos; /* weight for QOS factor */
 	uint16_t private_data;	/* block viewing of information, 
 				 * see PRIVATE_DATA_* */
 	char *proctrack_type;	/* process tracking plugin type */
-	char *prolog;		/* pathname of job prolog */
+	char *prolog;		/* pathname of job prolog run by slurmd */
+	char *prolog_slurmctld;	/* pathname of job prolog run by slurmctld */
 	uint16_t propagate_prio_process; /* 1 if process priority should
 				          * be propagated */
         char *propagate_rlimits;/* Propagate (all/specific) resource limits */
         char *propagate_rlimits_except;/* Propagate all rlimits except these */
-	uint16_t resume_rate;	/* nodes to make full power, per minute */
 	char *resume_program;	/* program to make nodes full power */
+	uint16_t resume_rate;	/* nodes to make full power, per minute */
+	uint16_t resume_timeout;/* time required in order to perform a node
+				 * resume operation */
+	uint16_t resv_over_run;	/* how long a running job can exceed 
+				 * reservation time */
 	uint16_t ret2service;	/* 1 return DOWN node to service at 
 				 * registration */
+	char *salloc_default_command; /* default salloc command */
 	char *sched_params;	/* SchedulerParameters OR 
 				 * contents of scheduler plugin config file */
 	uint16_t sched_time_slice;	/* gang scheduler slice time, secs */
@@ -1028,10 +1179,14 @@ typedef struct slurm_ctl_conf {
 	uint16_t schedrootfltr;	/* 1 if rootOnly partitions should be
 				 * filtered from scheduling (if needed) */
 	char *select_type;	/* type of node selector to use */
+	void *select_conf_key_pairs; /* key-pair list which can be
+				      * listed with slurm_print_key_pairs */
 	uint16_t select_type_param; /* Parameters 
 				 * describing the select_type plugin */
 	uint32_t slurm_user_id;	/* uid of slurm_user_name */
 	char *slurm_user_name;	/* user that slurmctld runs as */
+	uint32_t slurmd_user_id;/* uid of slurmd_user_name */
+	char *slurmd_user_name;	/* user that slurmd runs as */
 	uint16_t slurmctld_debug; /* slurmctld logging level */
 	char *slurmctld_logfile;/* where slurmctld error log gets written */
 	char *slurmctld_pidfile;/* where to put slurmctld pidfile         */
@@ -1047,6 +1202,7 @@ typedef struct slurm_ctl_conf {
 				 * considering node DOWN */
 	char *slurm_conf;	/* pathname of slurm config file */
 	char *srun_epilog;      /* srun epilog program */
+	uint16_t srun_io_timeout; /* timeout for non-responsive tasks */
 	char *srun_prolog;      /* srun prolog program */
 	char *state_save_location;/* pathname of slurmctld state save
 				 * directory */
@@ -1055,12 +1211,15 @@ typedef struct slurm_ctl_conf {
 	char *suspend_program;	/* program to make nodes power saving */
 	uint16_t suspend_rate;	/* nodes to make power saving, per minute */
 	uint16_t suspend_time;	/* node idle for this long before power save mode */
+	uint16_t suspend_timeout;/* time required in order to perform a node
+				 * suspend operation */
 	char *switch_type;	/* switch or interconnect type */
 	char *task_epilog;	/* pathname of task launch epilog */
 	char *task_plugin;	/* task launch plugin */
 	uint16_t task_plugin_param;	/* see TASK_PARAM_* */
 	char *task_prolog;	/* pathname of task launch prolog */
 	char *tmp_fs;		/* pathname of temporary file system */
+	char *topology_plugin;	/* network topology plugin */
 	uint16_t track_wckey;    /* see if we are using wckey or not */
 	uint16_t tree_width;    /* number of threads per node to span */
 	char *unkillable_program; /* program run by the slurmstepd when
@@ -1070,7 +1229,9 @@ typedef struct slurm_ctl_conf {
                                       * they are considered "unkillable". */
 	uint16_t use_pam;	/* enable/disable PAM support */
 	uint16_t wait_time;	/* default job --wait time */
-	char *salloc_default_command; /* default salloc command */
+	uint16_t z_16;		/* reserved for future use */
+	uint32_t z_32;		/* reserved for future use */
+	char *z_char;		/* reserved for future use */
 } slurm_ctl_conf_t;
 
 typedef struct slurmd_status_msg {
@@ -1101,6 +1262,7 @@ typedef struct slurm_update_node_msg {
 	uint16_t node_state;	/* see enum node_states */
 	char *reason;   	/* reason for node being DOWN or DRAINING */
 	char *features;		/* new feature for node */
+	uint32_t weight;	/* new weight for node */
 } update_node_msg_t;
 
 typedef struct partition_info update_part_msg_t;
@@ -1457,12 +1619,10 @@ extern void slurm_step_launch_params_t_init
 /*
  * slurm_step_launch - launch a parallel job step
  * IN ctx - job step context generated by slurm_step_ctx_create
- * IN launcher_host - address used for PMI communications
  * IN callbacks - Identify functions to be called when various events occur
  * RET SLURM_SUCCESS or SLURM_ERROR (with errno set)
  */
 extern int slurm_step_launch PARAMS((slurm_step_ctx_t *ctx,
-	char *launcher_host,
 	const slurm_step_launch_params_t *params,
 	const slurm_step_launch_callbacks_t *callbacks));
 
@@ -1556,6 +1716,16 @@ extern void slurm_free_slurmd_status PARAMS((
 void slurm_print_slurmd_status PARAMS((
 		FILE* out, slurmd_status_t * slurmd_status_ptr));
 
+/*
+ * slurm_print_key_pairs - output the contents of key_pairs 
+ *	which is a list of opaque data type config_key_pair_t
+ * IN out - file to write to
+ * IN key_pairs - List contianing key pairs to be printed
+ * IN title - title of key pair list
+ */
+void slurm_print_key_pairs PARAMS((
+                FILE* out, void* key_pairs, char *title));
+
 /*****************************************************************************\
  *	SLURM JOB CONTROL CONFIGURATION READ/PRINT/UPDATE FUNCTIONS
 \*****************************************************************************/
@@ -1804,6 +1974,12 @@ extern void slurm_print_node_table PARAMS((
 extern char *slurm_sprint_node_table PARAMS(( node_info_t * node_ptr, 
 					     int one_liner ));
 
+/*
+ * slurm_init_update_node_msg - initialize node update message
+ * OUT update_node_msg - user defined node descriptor
+ */
+void slurm_init_update_node_msg (update_node_msg_t * update_node_msg);
+
 /*
  * slurm_update_node - issue RPC to a node's configuration per request, 
  *	only usable by user root
@@ -1813,6 +1989,50 @@ extern char *slurm_sprint_node_table PARAMS(( node_info_t * node_ptr,
 extern int slurm_update_node PARAMS(( update_node_msg_t * node_msg ));
 
 
+/*****************************************************************************\
+ *	SLURM SWITCH TOPOLOGY CONFIGURATION READ/PRINT FUNCTIONS
+\*****************************************************************************/
+
+/*
+ * slurm_load_topo - issue RPC to get slurm all switch topology configuration 
+ *	information 
+ * IN node_info_msg_pptr - place to store a node configuration pointer
+ * RET 0 or a slurm error code
+ * NOTE: free the response using slurm_free_topo_info_msg
+ */
+extern int slurm_load_topo PARAMS(( 
+	topo_info_response_msg_t **topo_info_msg_pptr ));
+
+/*
+ * slurm_free_topo_info_msg - free the switch topology configuration 
+ *	information response message
+ * IN msg - pointer to switch topology configuration response message
+ * NOTE: buffer is loaded by slurm_load_topo.
+ */
+extern void slurm_free_topo_info_msg PARAMS(( topo_info_response_msg_t *msg ));
+
+/*
+ * slurm_print_topo_info_msg - output information about all switch topology 
+ *	configuration information based upon message as loaded using 
+ *	slurm_load_topo
+ * IN out - file to write to
+ * IN topo_info_msg_ptr - switch topology information message pointer
+ * IN one_liner - print as a single line if not zero
+ */
+extern void slurm_print_topo_info_msg PARAMS(( 
+	FILE * out, topo_info_response_msg_t *topo_info_msg_ptr, int one_liner )) ;
+
+/*
+ * slurm_print_topo_record - output information about a specific Slurm topology
+ *	record based upon message as loaded using slurm_load_topo
+ * IN out - file to write to
+ * IN topo_ptr - an individual switch information record pointer
+ * IN one_liner - print as a single line if not zero
+ * RET out - char * containing formatted output (must be freed after call)
+ *	   NULL is returned on failure.
+ */
+extern void slurm_print_topo_record PARAMS((FILE * out, topo_info_t *topo_ptr, 
+				    int one_liner ));
 /*****************************************************************************\
  *	SLURM PARTITION CONFIGURATION READ/PRINT/UPDATE FUNCTIONS
 \*****************************************************************************/
@@ -1820,7 +2040,7 @@ extern int slurm_update_node PARAMS(( update_node_msg_t * node_msg ));
 /* 
  * slurm_init_part_desc_msg - initialize partition descriptor with 
  *	default values 
- * OUT job_desc_msg - user defined partition descriptor
+ * IN/OUT update_part_msg - user defined partition descriptor
  */
 extern void slurm_init_part_desc_msg PARAMS((update_part_msg_t * update_part_msg ));
 
@@ -1877,6 +2097,14 @@ extern void slurm_print_partition_info PARAMS((
  */
 extern char *slurm_sprint_partition_info PARAMS(( 
 		partition_info_t * part_ptr, int one_liner ));
+
+/*
+ * slurm_create_partition - create a new partition, only usable by user root
+ * IN part_msg - description of partition configuration
+ * RET 0 on success, otherwise return -1 and set errno to indicate the error
+ */
+extern int slurm_create_partition PARAMS(( update_part_msg_t * part_msg ));
+
 /*
  * slurm_update_partition - issue RPC to update a partition's configuration
  *	per request, only usable by user root
@@ -1893,6 +2121,95 @@ extern int slurm_update_partition PARAMS(( update_part_msg_t * part_msg ));
  */
 extern int slurm_delete_partition PARAMS(( delete_part_msg_t * part_msg ));
 
+/*****************************************************************************\
+ *	SLURM RESERVATION CONFIGURATION READ/PRINT/UPDATE FUNCTIONS
+\*****************************************************************************/
+
+/*
+ * slurm_init_resv_desc_msg - initialize reservation descriptor with 
+ *	default values 
+ * OUT job_desc_msg - user defined partition descriptor
+ */
+extern void slurm_init_resv_desc_msg PARAMS(( 
+		resv_desc_msg_t * update_resv_msg ));
+/*
+ * slurm_create_reservation - create a new reservation, only usable by user root
+ * IN resv_msg - description of reservation
+ * RET name of reservation on success (caller must free the memory),
+ *	otherwise return NULL and set errno to indicate the error
+ */
+extern char * slurm_create_reservation PARAMS((
+		resv_desc_msg_t * resv_msg ));
+
+/*
+ * slurm_update_reservation - modify an existing reservation, only usable by 
+ *	user root
+ * IN resv_msg - description of reservation
+ * RET 0 on success, otherwise return -1 and set errno to indicate the error
+ */
+extern int slurm_update_reservation PARAMS((resv_desc_msg_t * resv_msg));
+
+/*
+ * slurm_delete_reservation - issue RPC to delete a reservation, only usable 
+ *	by user root
+ * IN resv_msg - description of reservation to delete
+ * RET 0 on success, otherwise return -1 and set errno to indicate the error
+ */
+extern int slurm_delete_reservation PARAMS(( 
+		reservation_name_msg_t * resv_msg ));
+
+/*
+ * slurm_load_reservations - issue RPC to get all slurm reservation 
+ *	configuration information if changed since update_time 
+ * IN update_time - time of current configuration data
+ * IN reserve_info_msg_pptr - place to store a reservation configuration 
+ *	pointer
+ * RET 0 or a slurm error code
+ * NOTE: free the response using slurm_free_reservation_info_msg
+ */
+extern int slurm_load_reservations PARAMS(( time_t update_time, 
+		reserve_info_msg_t **resp ));
+
+/*
+ * slurm_print_reservation_info_msg - output information about all Slurm 
+ *	reservations based upon message as loaded using slurm_load_reservation
+ * IN out - file to write to
+ * IN resv_info_ptr - reservation information message pointer
+ * IN one_liner - print as a single line if true
+ */
+void slurm_print_reservation_info_msg PARAMS(( FILE* out, 
+		reserve_info_msg_t * resv_info_ptr, int one_liner ));
+
+/*
+ * slurm_print_reservation_info - output information about a specific Slurm 
+ *	reservation based upon message as loaded using slurm_load_reservation
+ * IN out - file to write to
+ * IN resv_ptr - an individual reservation information record pointer
+ * IN one_liner - print as a single line if true
+ */
+void slurm_print_reservation_info PARAMS(( FILE* out, 
+		reserve_info_t * resv_ptr, int one_liner ));
+
+/*
+ * slurm_sprint_reservation_info - output information about a specific Slurm 
+ *	reservation based upon message as loaded using slurm_load_reservations
+ * IN resv_ptr - an individual reservation information record pointer
+ * IN one_liner - print as a single line if true
+ * RET out - char * containing formatted output (must be freed after call)
+ *           NULL is returned on failure.
+ */
+char *slurm_sprint_reservation_info PARAMS(( reserve_info_t * resv_ptr, 
+		int one_liner ));
+
+/*
+ * slurm_free_reservation_info_msg - free the reservation information 
+ *	response message
+ * IN msg - pointer to reservation information response message
+ * NOTE: buffer is loaded by slurm_load_reservation
+ */
+extern void slurm_free_reservation_info_msg PARAMS(( 
+	reserve_info_msg_t * resv_info_ptr ));
+
 /*****************************************************************************\
  *	SLURM PING/RECONFIGURE/SHUTDOWN FUNCTIONS
 \*****************************************************************************/
@@ -1922,6 +2239,14 @@ extern int slurm_reconfigure PARAMS(( void ));
  */
 extern int slurm_shutdown PARAMS(( uint16_t options ));
 
+/*
+ * slurm_takeover - issue RPC to have Slurm backup controller (slurmctld)
+ *	take over the primary controller.
+ *
+ * RET 0 or a slurm error code
+ */
+extern int slurm_takeover PARAMS(( void ));
+
 /*
  * slurm_set_debug_level - issue RPC to set slurm controller debug level
  * IN debug_level - requested debug level
@@ -1987,7 +2312,7 @@ extern int slurm_checkpoint_disable PARAMS(( uint32_t job_id,
  * RET 0 or a slurm error code
  */
 extern int slurm_checkpoint_enable PARAMS(( uint32_t job_id, 
-		uint32_t step_id ));
+					    uint32_t step_id ));
 
 /*
  * slurm_checkpoint_create - initiate a checkpoint requests for some job step.
@@ -1995,10 +2320,13 @@ extern int slurm_checkpoint_enable PARAMS(( uint32_t job_id,
  * IN job_id  - job on which to perform operation
  * IN step_id - job step on which to perform operation
  * IN max_wait - maximum wait for operation to complete, in seconds
+ * IN image_dir - directory to store image files
  * RET 0 or a slurm error code
  */
 extern int slurm_checkpoint_create PARAMS(( uint32_t job_id, 
-		uint32_t step_id, uint16_t max_wait ));
+					    uint32_t step_id, 
+					    uint16_t max_wait, 
+					    char *image_dir ));
 
 /*
  * slurm_checkpoint_vacate - initiate a checkpoint requests for some job step.
@@ -2006,19 +2334,26 @@ extern int slurm_checkpoint_create PARAMS(( uint32_t job_id,
  * IN job_id  - job on which to perform operation
  * IN step_id - job step on which to perform operation
  * IN max_wait - maximum wait for operation to complete, in seconds
+ * IN image_dir - directory to store image files
  * RET 0 or a slurm error code
  */
 extern int slurm_checkpoint_vacate PARAMS(( uint32_t job_id, 
-		uint32_t step_id, uint16_t max_wait ));
+					    uint32_t step_id, 
+					    uint16_t max_wait, 
+					    char *image_dir ));
 
 /*
  * slurm_checkpoint_restart - restart execution of a checkpointed job step.
  * IN job_id  - job on which to perform operation
  * IN step_id - job step on which to perform operation
+ * IN stick - stick to nodes previously running on
+ * IN image_dir - directory to find checkpoint image files
  * RET 0 or a slurm error code
  */
 extern int slurm_checkpoint_restart PARAMS(( uint32_t job_id, 
-		uint32_t step_id ));
+					     uint32_t step_id, 
+					     uint16_t stick, 
+					     char *image_dir ));
 
 /*
  * slurm_checkpoint_complete - note the completion of a job step's checkpoint
@@ -2031,8 +2366,10 @@ extern int slurm_checkpoint_restart PARAMS(( uint32_t job_id,
  * RET 0 or a slurm error code
  */
 extern int slurm_checkpoint_complete PARAMS(( uint32_t job_id, 
-		uint32_t step_id, time_t begin_time, 
-		uint32_t error_code, char *error_msg ));
+					      uint32_t step_id, 
+					      time_t begin_time, 
+					      uint32_t error_code, 
+					      char *error_msg ));
 
 /*
  * slurm_checkpoint_task_complete - note the completion of a task's checkpoint
@@ -2045,9 +2382,12 @@ extern int slurm_checkpoint_complete PARAMS(( uint32_t job_id,
  * IN error_msg - error message, preserved for highest error_code
  * RET 0 or a slurm error code
  */
-extern int slurm_checkpoint_task_complete (uint32_t job_id, uint32_t step_id,
-					   uint32_t task_id, time_t begin_time, 
-					   uint32_t error_code, char *error_msg);
+extern int slurm_checkpoint_task_complete PARAMS(( uint32_t job_id, 
+						   uint32_t step_id,
+						   uint32_t task_id, 
+						   time_t begin_time, 
+						   uint32_t error_code, 
+						   char *error_msg ));
 
 /*
  * slurm_checkpoint_error - gather error information for the last checkpoint
@@ -2062,18 +2402,24 @@ extern int slurm_checkpoint_task_complete (uint32_t job_id, uint32_t step_id,
  *	must be freed by the caller to prevent memory leak
  * RET 0 or a slurm error code
  */
-extern int slurm_checkpoint_error PARAMS(( uint32_t job_id, 
-		uint32_t step_id, uint32_t *error_code, 
-		char **error_msg ));
+extern int slurm_checkpoint_error PARAMS(( uint32_t job_id, uint32_t step_id, 
+					   uint32_t *error_code, 
+					   char **error_msg ));
 
 /*
- * slurm_get_checkpoint_file_path - return the checkpoint file
- *      path of this process, creating the directory if needed.
- * IN len: length of the file path buffer
- * OUT buf: buffer to store the checkpoint file path
- * RET: 0 on success, -1 on failure with errno set
+ * slurm_checkpoint_tasks - send checkpoint request to tasks of
+ *     specified step
+ * IN job_id: job ID of step
+ * IN step_id: step ID of step
+ * IN image_dir: location to store ckpt images. parameter to plugin.
+ * IN max_wait: seconds to wait for the operation to complete
+ * IN nodelist: nodes to send the request
+ * RET: 0 on success, non-zero on failure with errno set
  */
-extern int slurm_get_checkpoint_file_path(size_t len, char *buf);
+extern int slurm_checkpoint_tasks PARAMS(( uint32_t job_id, uint16_t step_id, 
+					   time_t begin_time, char *image_dir, 
+					   uint16_t max_wait, char *nodelist));
+
 
 /*****************************************************************************\
  *      SLURM HOSTLIST FUNCTIONS
@@ -2123,6 +2469,64 @@ extern int slurm_get_checkpoint_file_path(size_t len, char *buf);
  */
 extern hostlist_t slurm_hostlist_create PARAMS(( const char *hostlist ));
 
+/* slurm_hostlist_count():
+ *
+ * Return the number of hosts in hostlist hl.
+ */ 
+extern int slurm_hostlist_count PARAMS((hostlist_t hl));
+
+/*
+ * slurm_hostlist_destroy():
+ *
+ * Destroy a hostlist object. Frees all memory allocated to the hostlist.
+ */
+extern void slurm_hostlist_destroy PARAMS(( hostlist_t hl ));
+
+/* slurm_hostlist_find():
+ *
+ * Searches hostlist hl for the first host matching hostname 
+ * and returns position in list if found. 
+ *
+ * Returns -1 if host is not found.
+ *
+ */
+extern int slurm_hostlist_find PARAMS((hostlist_t hl, const char *hostname));
+
+/* slurm_hostlist_push():
+ *
+ * push a string representation of hostnames onto a hostlist.
+ *
+ * The hosts argument may take the same form as in slurm_hostlist_create()
+ *
+ * Returns the number of hostnames inserted into the list, 
+ * or 0 on failure.
+ */
+extern int slurm_hostlist_push PARAMS((hostlist_t hl, const char *hosts));
+
+/* slurm_hostlist_push_host():
+ *
+ * Push a single host onto the hostlist hl. 
+ * This function is more efficient than slurm_hostlist_push() for a single
+ * hostname, since the argument does not need to be checked for ranges.
+ *
+ * return value is 1 for success, 0 for failure.
+ */
+extern int slurm_hostlist_push_host PARAMS((hostlist_t hl, const char *host));
+
+/* slurm_hostlist_ranged_string():
+ *
+ * Write the string representation of the hostlist hl into buf,
+ * writing at most n chars. Returns the number of bytes written,
+ * or -1 if truncation occurred.
+ *
+ * The result will be NULL terminated.
+ * 
+ * slurm_hostlist_ranged_string() will write a bracketed hostlist representation
+ * where possible.
+ */
+extern ssize_t slurm_hostlist_ranged_string PARAMS((hostlist_t hl,
+						    size_t n, char *buf));
+
 /*
  * slurm_hostlist_shift():
  *
@@ -2134,12 +2538,12 @@ extern hostlist_t slurm_hostlist_create PARAMS(( const char *hostlist ));
  */
 extern char * slurm_hostlist_shift PARAMS(( hostlist_t hl ));
 
-/*
- * slurm_hostlist_destroy():
+/* slurm_hostlist_uniq():
  *
- * Destroy a hostlist object. Frees all memory allocated to the hostlist.
+ * Sort the hostlist hl and remove duplicate entries.
+ * 
  */
-extern void slurm_hostlist_destroy PARAMS(( hostlist_t hl ));
+extern void slurm_hostlist_uniq PARAMS((hostlist_t hl));
 
 /*****************************************************************************\
  *      SLURM TRIGGER FUNCTIONS
diff --git a/slurm/slurm_errno.h b/slurm/slurm_errno.h
index 0cb0d1b82..2a788973f 100644
--- a/slurm/slurm_errno.h
+++ b/slurm/slurm_errno.h
@@ -1,14 +1,16 @@
 /*****************************************************************************\
  *  slurm_errno.h - error codes and functions for slurm
  ******************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov>, 
  *	Jim Garlick <garlick@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -16,7 +18,7 @@
  *  any later version.
  *
  *  In addition, as a special exception, the copyright holders give permission 
- *  to link the code of portions of this program with the OpenSSL library under 
+ *  to link the code of portions of this program with the OpenSSL library under
  *  certain conditions as described in each individual source file, and 
  *  distribute linked combinations including the two. You must obey the GNU 
  *  General Public License in all respects for all of the code used other than 
@@ -159,7 +161,16 @@ enum {
 	ESLURM_NEED_RESTART,
 	ESLURM_ACCOUNTING_POLICY,
 	ESLURM_INVALID_TIME_LIMIT,
+	ESLURM_RESERVATION_ACCESS,
+	ESLURM_RESERVATION_INVALID,
+	ESLURM_INVALID_TIME_VALUE,
+	ESLURM_RESERVATION_BUSY,
+	ESLURM_RESERVATION_NOT_USABLE,
 	ESLURM_INVALID_WCKEY,
+	ESLURM_RESERVATION_OVERLAP,
+	ESLURM_PORTS_BUSY,
+	ESLURM_PORTS_INVALID,
+	ESLURM_PROLOG_RUNNING,
 
 	/* switch specific error codes, specific values defined in plugin module */
 	ESLURM_SWITCH_MIN = 3000,
diff --git a/slurm/spank.h b/slurm/spank.h
index 3d59ba174..08e36fb88 100644
--- a/slurm/spank.h
+++ b/slurm/spank.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -68,7 +69,13 @@ typedef int (spank_f) (spank_t spank, int ac, char *argv[]);
  *               `-> user_init ()  
  *               + for each task
  *               |       + fork ()
- *               |       `-> user_task_init ()
+ *               |       |
+ *               |       + reclaim privileges
+ *               |       `-> task_init_privileged ()
+ *               |       |
+ *               |       + become_user ()
+ *               |       `-> task_init ()
+ *               |       |
  *               |       + execve ()
  *               |
  *               + reclaim privileges
@@ -78,9 +85,13 @@ typedef int (spank_f) (spank_t spank, int ac, char *argv[]);
  *               + for each task
  *               |       + wait ()
  *               |          `-> task_exit ()
- *               `-> fini ()
+ *               `-> exit ()
  *
- *   In srun only the init() and local_user_init() callbacks are used.
+ *   In srun only the init(), init_post_opt() and local_user_init(), and exit()
+ *    callbacks are used.
+ *
+ *   In sbatch/salloc only the init(), init_post_opt(), and exit() callbacks
+ *    are used.
  *
  */
 
@@ -88,6 +99,7 @@ extern spank_f slurm_spank_init;
 extern spank_f slurm_spank_init_post_opt;
 extern spank_f slurm_spank_local_user_init;
 extern spank_f slurm_spank_user_init;
+extern spank_f slurm_spank_task_init_privileged;
 extern spank_f slurm_spank_task_init;
 extern spank_f slurm_spank_task_post_fork;
 extern spank_f slurm_spank_task_exit;
@@ -154,11 +166,24 @@ enum spank_err {
     ESPANK_NOSPACE     = 6, /* Buffer too small.                             */
     ESPANK_NOT_REMOTE  = 7, /* Function only may be called in remote context */
     ESPANK_NOEXIST     = 8, /* Id/pid doesn't exist on this node             */
-    ESPANK_NOT_EXECD   = 9  /* Lookup by pid requested, but no tasks running */
+    ESPANK_NOT_EXECD   = 9, /* Lookup by pid requested, but no tasks running */
+    ESPANK_NOT_AVAIL   = 10,/* SPANK item not available from this callback   */
 };
 
 typedef enum spank_err spank_err_t;
 
+/*
+ *  SPANK plugin context
+ */
+enum spank_context {
+    S_CTX_ERROR,             /* Error obtaining current context              */
+    S_CTX_LOCAL,             /* Local context (srun)                         */
+    S_CTX_REMOTE,            /* Remote context (slurmd)                      */
+    S_CTX_ALLOCATOR          /* Allocator context (sbatch/salloc)            */
+};
+
+typedef enum spank_context spank_context_t;
+
 /*
  *  SPANK plugin options
  */
@@ -182,9 +207,10 @@ struct spank_option {
 };
 
 /*
- *  Plugin may declare spank_options option table:
- *   [Note: options may also be declared with spank_option_register(),
- *    defined below.]
+ *  Plugins may export a spank_options option table as symbol "spank_options".
+ *   This method only works in "local" and "remote" mode. To register options
+ *   in "allocator" mode (sbatch/salloc), use the preferred
+ *   spank_option_register function described below.
  */
 extern struct spank_option spank_options [];
 
@@ -203,6 +229,11 @@ extern struct spank_option spank_options [];
  */
 BEGIN_C_DECLS
 
+/*
+ *  Return the string representation of a spank_err_t error code.
+ */
+const char *spank_strerror (spank_err_t err);
+
 /*
  *  Determine whether a given spank plugin symbol is supported
  *   in this version of SPANK interface.
@@ -215,20 +246,33 @@ BEGIN_C_DECLS
 int spank_symbol_supported (const char *symbol);
 
 /*
- *  Determine whether plugin is loaded "local" or "remote."
+ *  Determine whether plugin is loaded in "remote" context
  * 
  *  Returns:
  *  = 1   remote context, i.e. plugin is loaded in slurmd.
- *  = 0   local context, i.e. plugin loaded in srun.
+ *  = 0   not remote context
  *  < 0   spank handle was not valid.
  */
 int spank_remote (spank_t spank);
 
+/*
+ *  Return the context in which the calling plugin is loaded.
+ *
+ *  Returns the spank_context for the calling plugin, or SPANK_CTX_ERROR
+ *   if the current context cannot be determined.
+ */
+spank_context_t spank_context (void);
+
 /*
  *  Register a plugin-provided option dynamically. This function
  *   is only valid when called from slurm_spank_init(), and must
- *   be called in both remote (slurmd) and local (srun) contexts.
- *   May be called multiple times to register many options.
+ *   be guaranteed to be called in all contexts in which it is
+ *   used (local, remote, allocator).
+ *
+ *  This function is the only method to register options in
+ *   allocator context.
+ *
+ *  May be called multiple times to register many options.
  *
  *  Returns ESPANK_SUCCESS on successful registration of the option
  *   or ESPANK_BAD_ARG if not called from slurm_spank_init().
diff --git a/src/Makefile.am b/src/Makefile.am
index a852e7d97..4392926da 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,6 +1,14 @@
+if WITH_BLCR 
+SRUN_CR = srun_cr
+else
+SRUN_CR = 
+endif
 
 SUBDIRS = common api database \
 	slurmctld slurmd slurmdbd plugins srun sbcast \
 	scontrol scancel squeue sinfo smap sview salloc \
-	sbatch sattach strigger sacct sacctmgr sreport sstat
+	sbatch sattach strigger sacct sacctmgr sreport sstat \
+	sshare sprio $(SRUN_CR)
+
+
 
diff --git a/src/Makefile.in b/src/Makefile.in
index 3e86c104e..1a818e953 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,7 +81,10 @@ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
+DIST_SUBDIRS = common api database slurmctld slurmd slurmdbd plugins \
+	srun sbcast scontrol scancel squeue sinfo smap sview salloc \
+	sbatch sattach strigger sacct sacctmgr sreport sstat sshare \
+	sprio srun_cr
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -89,6 +96,10 @@ 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@
@@ -248,10 +259,13 @@ target_os = @target_os@
 target_vendor = @target_vendor@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+@WITH_BLCR_FALSE@SRUN_CR = 
+@WITH_BLCR_TRUE@SRUN_CR = srun_cr
 SUBDIRS = common api database \
 	slurmctld slurmd slurmdbd plugins srun sbcast \
 	scontrol scancel squeue sinfo smap sview salloc \
-	sbatch sattach strigger sacct sacctmgr sreport sstat
+	sbatch sattach strigger sacct sacctmgr sreport sstat \
+	sshare sprio $(SRUN_CR)
 
 all: all-recursive
 
diff --git a/src/api/Makefile.am b/src/api/Makefile.am
index 0000a8549..762c91d60 100644
--- a/src/api/Makefile.am
+++ b/src/api/Makefile.am
@@ -76,7 +76,9 @@ slurmapi_src =           \
 	node_info.c      \
 	node_select_info.c node_select_info.h \
 	partition_info.c \
+	reservation_info.c \
 	signal.c         \
+	slurm_hostlist.c \
 	slurm_pmi.c slurm_pmi.h	\
 	step_ctx.c step_ctx.h \
 	step_io.c step_io.h \
@@ -84,6 +86,7 @@ slurmapi_src =           \
 	pmi_server.c pmi_server.h \
 	submit.c         \
 	suspend.c        \
+	topo_info.c      \
 	triggers.c       \
 	reconfigure.c    \
 	update_config.c
diff --git a/src/api/Makefile.in b/src/api/Makefile.in
index f4ad8b5d4..93e32d918 100644
--- a/src/api/Makefile.in
+++ b/src/api/Makefile.in
@@ -46,14 +46,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -97,8 +101,9 @@ libslurmhelper_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
 am__objects_1 = allocate.lo allocate_msg.lo cancel.lo checkpoint.lo \
 	complete.lo config_info.lo init_msg.lo job_info.lo \
 	job_step_info.lo node_info.lo node_select_info.lo \
-	partition_info.lo signal.lo slurm_pmi.lo step_ctx.lo \
-	step_io.lo step_launch.lo pmi_server.lo submit.lo suspend.lo \
+	partition_info.lo reservation_info.lo signal.lo \
+	slurm_hostlist.lo slurm_pmi.lo step_ctx.lo step_io.lo \
+	step_launch.lo pmi_server.lo submit.lo suspend.lo topo_info.lo \
 	triggers.lo reconfigure.lo update_config.lo
 am_libslurmhelper_la_OBJECTS = $(am__objects_1)
 libslurmhelper_la_OBJECTS = $(am_libslurmhelper_la_OBJECTS)
@@ -137,6 +142,10 @@ 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@
@@ -368,7 +377,9 @@ slurmapi_src = \
 	node_info.c      \
 	node_select_info.c node_select_info.h \
 	partition_info.c \
+	reservation_info.c \
 	signal.c         \
+	slurm_hostlist.c \
 	slurm_pmi.c slurm_pmi.h	\
 	step_ctx.c step_ctx.h \
 	step_io.c step_io.h \
@@ -376,6 +387,7 @@ slurmapi_src = \
 	pmi_server.c pmi_server.h \
 	submit.c         \
 	suspend.c        \
+	topo_info.c      \
 	triggers.c       \
 	reconfigure.c    \
 	update_config.c
@@ -533,13 +545,16 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pmi.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pmi_server.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reconfigure.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reservation_info.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_hostlist.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_pmi.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/step_ctx.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/step_io.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/step_launch.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/submit.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/suspend.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topo_info.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/triggers.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update_config.Plo@am__quote@
 
diff --git a/src/api/allocate.c b/src/api/allocate.c
index 0fea867c2..a650dffb9 100644
--- a/src/api/allocate.c
+++ b/src/api/allocate.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  allocate.c - allocate nodes for a job or step with supplied contraints
- *  $Id: allocate.c 14992 2008-09-05 20:10:34Z da $
+ *  $Id: allocate.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -717,6 +718,7 @@ _wait_for_alloc_rpc(const listen_t *listen, int sleep_time,
 			case EINTR:
 				*resp = NULL;
 				return -1;
+			case EBADF:
 			case ENOMEM:
 			case EINVAL:
 			case EFAULT:
diff --git a/src/api/allocate_msg.c b/src/api/allocate_msg.c
index 9ae77a6e8..18985bfe3 100644
--- a/src/api/allocate_msg.c
+++ b/src/api/allocate_msg.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/cancel.c b/src/api/cancel.c
index 678605d23..4d7f58663 100644
--- a/src/api/cancel.c
+++ b/src/api/cancel.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  cancel.c - cancel a slurm job or job step
- *  $Id: cancel.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: cancel.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/checkpoint.c b/src/api/checkpoint.c
index be3c46acb..174bc21ec 100644
--- a/src/api/checkpoint.c
+++ b/src/api/checkpoint.c
@@ -1,14 +1,16 @@
 /*****************************************************************************\
  *  checkpoint.c - Process checkpoint related functions.
- *  $Id: checkpoint.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: checkpoint.c 16867 2009-03-12 16:35:42Z jette $
  *****************************************************************************
- *  Copyright (C) 2004 The Regents of the University of California.
+ *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -58,29 +60,33 @@
 
 static int _handle_rc_msg(slurm_msg_t *msg);
 static int _checkpoint_op (uint16_t op, uint16_t data,
-		uint32_t job_id, uint32_t step_id);
+			   uint32_t job_id, uint32_t step_id,
+			   char *image_dir);
 /*
  * _checkpoint_op - perform many checkpoint operation for some job step.
- * IN op      - operation to perform
- * IN data    - operation-specific data
- * IN job_id  - job on which to perform operation
- * IN step_id - job step on which to perform operation
+ * IN op        - operation to perform
+ * IN data      - operation-specific data
+ * IN job_id    - job on which to perform operation
+ * IN step_id   - job step on which to perform operation
+ * IN image_dir - directory used to get/put checkpoint images
  * RET 0 or a slurm error code
  */
 static int _checkpoint_op (uint16_t op, uint16_t data,
-		uint32_t job_id, uint32_t step_id)
+			   uint32_t job_id, uint32_t step_id,
+			   char *image_dir)
 {
 	int rc;
 	checkpoint_msg_t ckp_req;
 	slurm_msg_t req_msg;
 
 	slurm_msg_t_init(&req_msg);
-	ckp_req.op       = op;
-	ckp_req.data     = data;
-	ckp_req.job_id   = job_id;
-	ckp_req.step_id  = step_id;
-	req_msg.msg_type = REQUEST_CHECKPOINT;
-	req_msg.data     = &ckp_req;
+	ckp_req.op        = op;
+	ckp_req.data      = data;
+	ckp_req.job_id    = job_id;
+	ckp_req.step_id   = step_id;
+	ckp_req.image_dir = image_dir;
+	req_msg.msg_type  = REQUEST_CHECKPOINT;
+	req_msg.data      = &ckp_req;
 
 	if (slurm_send_recv_controller_rc_msg(&req_msg, &rc) < 0)
 		return SLURM_ERROR;
@@ -105,13 +111,14 @@ extern int slurm_checkpoint_able (uint32_t job_id, uint32_t step_id,
 	checkpoint_msg_t ckp_req;
 	checkpoint_resp_msg_t *resp;
 
-	ckp_req.op       = CHECK_ABLE;
-	ckp_req.job_id   = job_id;
-	ckp_req.step_id  = step_id;
+	ckp_req.op        = CHECK_ABLE;
+	ckp_req.job_id    = job_id;
+	ckp_req.step_id   = step_id;
+	ckp_req.image_dir = NULL;
 	slurm_msg_t_init(&req_msg);
 	slurm_msg_t_init(&resp_msg);
-	req_msg.msg_type = REQUEST_CHECKPOINT;
-	req_msg.data     = &ckp_req;
+	req_msg.msg_type  = REQUEST_CHECKPOINT;
+	req_msg.data      = &ckp_req;
 
 	if (slurm_send_recv_controller_msg(&req_msg, &resp_msg) < 0)
 		return SLURM_ERROR;
@@ -141,7 +148,7 @@ extern int slurm_checkpoint_able (uint32_t job_id, uint32_t step_id,
  */
 extern int slurm_checkpoint_disable (uint32_t job_id, uint32_t step_id)
 {
-	return _checkpoint_op (CHECK_DISABLE, 0, job_id, step_id);
+	return _checkpoint_op (CHECK_DISABLE, 0, job_id, step_id, NULL);
 }
 
 
@@ -153,21 +160,23 @@ extern int slurm_checkpoint_disable (uint32_t job_id, uint32_t step_id)
  */
 extern int slurm_checkpoint_enable (uint32_t job_id, uint32_t step_id)
 {
-	return _checkpoint_op (CHECK_ENABLE, 0, job_id, step_id);
+	return _checkpoint_op (CHECK_ENABLE, 0, job_id, step_id, NULL);
 }
 
 /*
  * slurm_checkpoint_create - initiate a checkpoint requests for some job step.
  *	the job will continue execution after the checkpoint operation completes
- * IN job_id  - job on which to perform operation
- * IN step_id - job step on which to perform operation
- * IN max_wait - maximum wait for operation to complete, in seconds
+ * IN job_id   - job on which to perform operation
+ * IN step_id  - job step on which to perform operation
+ * IN max_wait  - maximum wait for operation to complete, in seconds
+ * IN image_dir - directory used to get/put checkpoint images
  * RET 0 or a slurm error code
  */
 extern int slurm_checkpoint_create (uint32_t job_id, uint32_t step_id, 
-		uint16_t max_wait)
+		uint16_t max_wait, char *image_dir)
 {
-	return _checkpoint_op (CHECK_CREATE, max_wait, job_id, step_id);
+	return _checkpoint_op (CHECK_CREATE, max_wait, job_id, step_id, 
+			       image_dir);
 }
 
 /*
@@ -176,12 +185,14 @@ extern int slurm_checkpoint_create (uint32_t job_id, uint32_t step_id,
  * IN job_id  - job on which to perform operation
  * IN step_id - job step on which to perform operation
  * IN max_wait - maximum wait for operation to complete, in seconds
+ * IN image_dir - directory used to get/put checkpoint images
  * RET 0 or a slurm error code
  */
 extern int slurm_checkpoint_vacate (uint32_t job_id, uint32_t step_id, 
-		uint16_t max_wait)
+		uint16_t max_wait, char *image_dir)
 {
-	return _checkpoint_op (CHECK_VACATE, max_wait, job_id, step_id);
+	return _checkpoint_op (CHECK_VACATE, max_wait, job_id, step_id, 
+			       image_dir);
 }
 
 /*
@@ -190,9 +201,10 @@ extern int slurm_checkpoint_vacate (uint32_t job_id, uint32_t step_id,
  * IN step_id - job step on which to perform operation
  * RET 0 or a slurm error code
  */
-extern int slurm_checkpoint_restart (uint32_t job_id, uint32_t step_id)
+extern int slurm_checkpoint_restart (uint32_t job_id, uint32_t step_id,
+				     uint16_t stick, char *image_dir)
 {
-	return _checkpoint_op (CHECK_RESTART, 0, job_id, step_id);
+	return _checkpoint_op (CHECK_RESTART, stick, job_id, step_id, image_dir);
 }
 
 /*
@@ -256,13 +268,14 @@ extern int slurm_checkpoint_error ( uint32_t job_id, uint32_t step_id,
 	/*
 	 * Request message:
 	 */
-	req.op       = CHECK_ERROR;
-	req.job_id   = job_id;
-	req.step_id  = step_id;
+	req.op        = CHECK_ERROR;
+	req.job_id    = job_id;
+	req.step_id   = step_id;
+	req.image_dir = NULL;
 	slurm_msg_t_init(&msg);
 	slurm_msg_t_init(&resp_msg);
-	msg.msg_type = REQUEST_CHECKPOINT;
-	msg.data     = &req;
+	msg.msg_type  = REQUEST_CHECKPOINT;
+	msg.data      = &req;
 
 	rc = slurm_send_recv_controller_msg(&msg, &resp_msg);
 
@@ -317,7 +330,9 @@ _handle_rc_msg(slurm_msg_t *msg)
  * RET 0 or a slurm error code
  */
 extern int slurm_checkpoint_task_complete (uint32_t job_id, uint32_t step_id,
-		uint32_t task_id, time_t begin_time, uint32_t error_code, char *error_msg)
+					   uint32_t task_id, time_t begin_time,
+					   uint32_t error_code, 
+					   char *error_msg)
 {
 	int rc;
 	slurm_msg_t msg;
@@ -341,77 +356,19 @@ extern int slurm_checkpoint_task_complete (uint32_t job_id, uint32_t step_id,
 }
 
 /*
- * slurm_get_checkpoint_file_path - return the checkpoint file
- *      path of this process, creating the directory if needed.
- * IN len: length of the file path buffer
- * OUT buf: buffer to store the checkpoint file path
- * RET: 0 on success, -1 on failure with errno set
+ * slurm_checkpoint_tasks - send checkpoint request to tasks of
+ *     specified step
+ * IN job_id: job ID of step
+ * IN step_id: step ID of step
+ * IN image_dir: location to store ckpt images. parameter to plugin.
+ * IN max_wait: seconds to wait for the operation to complete
+ * IN nodelist: nodes to send the request
+ * RET: 0 on success, non-zero on failure with errno set
  */
 extern int
-slurm_get_checkpoint_file_path(size_t len, char *buf)
+slurm_checkpoint_tasks(uint32_t job_id, uint16_t step_id, time_t begin_time,
+		       char *image_dir, uint16_t max_wait, char *nodelist)
 {
-       char *ckpt_path, *job_id, *step_id, *proc_id;
-       struct stat mystat;
-       int idx;
-
-       len --;                 /* for a terminating 0 */
-
-       ckpt_path = getenv("SLURM_CHECKPOINT_PATH");
-       if (ckpt_path == NULL) { /* this should not happen since the program may chdir */
-               ckpt_path = getcwd(buf, len);
-               if (ckpt_path == NULL)  /* ERANGE: len is too short */
-                       return -1;
-       } else {
-               if (snprintf(buf, len, "%s", ckpt_path) >= len) { /* glibc >= 2.1 */
-                       errno = ERANGE;
-                       return -1;
-               }
-               ckpt_path = buf;
-       }
-       idx = strlen(ckpt_path) - 1;
-       while (idx > 0 && ckpt_path[idx] == '/')
-               ckpt_path[idx --] = 0;
-
-       if (stat(ckpt_path, &mystat) < 0)
-               return -1;
-       if (! S_ISDIR(mystat.st_mode)) {
-               errno = ENOTDIR;
-               return -1;
-       }
-
-       job_id = getenv("SLURM_JOBID");
-       step_id = getenv("SLURM_STEPID");
-       proc_id = getenv("SLURM_PROCID");
-       if (job_id == NULL || step_id == NULL || proc_id == NULL) {
-               errno = ENODATA;
-               return -1;
-       }
-       idx = strlen(buf);
-       if (snprintf(buf + idx, len - idx, "/%s.%s", job_id, step_id) >= len - idx) {
-               errno = ERANGE;
-               return -1;
-       }
-
-       if (stat(buf, &mystat) < 0) {
-               if (errno == ENOENT) { /* dir does not exists */
-                       if (mkdir(buf, 0750) < 0 && errno != EEXIST)
-                               return -1;
-                       if (stat(buf, &mystat) < 0)
-                               return -1;
-               }
-               else
-                       return -1;
-       }
-       if (! S_ISDIR(mystat.st_mode)) {
-               errno = ENOTDIR;
-               return -1;
-       }
-
-       idx = strlen(buf);
-       if (snprintf(buf + idx, len - idx, "/%s.%s.ckpt", __progname, proc_id) >= len - idx) {
-               errno = ERANGE;
-               return -1;
-       }
-
-       return 0;
+	return checkpoint_tasks(job_id, step_id, begin_time,
+				image_dir, max_wait, nodelist);
 }
diff --git a/src/api/complete.c b/src/api/complete.c
index 15ce8c44a..e00f1103e 100644
--- a/src/api/complete.c
+++ b/src/api/complete.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  complete.c - note the completion a slurm job or job step
- *  $Id: complete.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: complete.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/config_info.c b/src/api/config_info.c
index f4afe4578..c645df051 100644
--- a/src/api/config_info.c
+++ b/src/api/config_info.c
@@ -2,13 +2,14 @@
  *  config_info.c - get/print the system configuration information of slurm
  *****************************************************************************
  *  Copyright (C) 2002-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> and Kevin Tew <tew1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -47,8 +48,13 @@
 
 #include "src/api/job_info.h"
 #include "src/common/parse_time.h"
+#include "src/common/read_config.h"
 #include "src/common/slurm_auth.h"
 #include "src/common/slurm_protocol_api.h"
+#include "src/common/slurm_resource_info.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
+#include "src/common/list.h"
 
 /*
  * slurm_api_version - Return a single number reflecting the SLURM API's 
@@ -87,17 +93,26 @@ _select_info(uint16_t select_type_param)
 	}
 }
 
-static char *_task_plugin_param(uint16_t task_plugin_param)
+static char *
+_reset_period_str(uint16_t reset_period)
 {
-	switch(task_plugin_param) {
-		case TASK_PARAM_NONE:
-			return "none";
-		case TASK_PARAM_CPUSETS:
-			return "cpusets";
-		case TASK_PARAM_SCHED:
-			return "sched";
+	switch (reset_period) {
+		case PRIORITY_RESET_NONE:
+			return "NONE";
+		case PRIORITY_RESET_NOW:
+			return "NOW";
+		case PRIORITY_RESET_DAILY:
+			return "DAILY";
+		case PRIORITY_RESET_WEEKLY:
+			return "WEEKLY";
+		case PRIORITY_RESET_MONTHLY:
+			return "MONTHLY";
+		case PRIORITY_RESET_QUARTERLY:
+			return "QUARTERLY";
+		case PRIORITY_RESET_YEARLY:
+			return "YEARLY";
 		default:
-			return "unknown";
+			return "UNKNOWN";
 	}
 }
 
@@ -110,16 +125,29 @@ static char *_task_plugin_param(uint16_t task_plugin_param)
 void slurm_print_ctl_conf ( FILE* out, 
                             slurm_ctl_conf_info_msg_t * slurm_ctl_conf_ptr )
 {
-	char time_str[32], tmp_str[128];
-
+	char time_str[32], tmp_str[128], *xbuf;
+	char *select_title = "";
+#ifdef HAVE_BGL
+	select_title = "Bluegene/L configuration";
+#endif
+#ifdef HAVE_BGP
+	select_title = "Bluegene/P configuration";
+#endif
+#ifdef HAVE_BGQ
+	select_title = "Bluegene/Q configuration";
+#endif
 	if ( slurm_ctl_conf_ptr == NULL )
 		return ;
 
 	slurm_make_time_str ((time_t *)&slurm_ctl_conf_ptr->last_update, 
 			     time_str, sizeof(time_str));
 	fprintf(out, "Configuration data as of %s\n", time_str);
-	fprintf(out, "AccountingStorageEnforce = %u\n",
-		slurm_ctl_conf_ptr->accounting_storage_enforce);
+	fprintf(out, "AccountingStorageBackupHost = %s\n", 
+		slurm_ctl_conf_ptr->accounting_storage_backup_host);
+	accounting_enforce_string(
+		slurm_ctl_conf_ptr->accounting_storage_enforce,
+		tmp_str, sizeof(tmp_str));
+	fprintf(out, "AccountingStorageEnforce = %s\n", tmp_str);
 	fprintf(out, "AccountingStorageHost   = %s\n", 
 		slurm_ctl_conf_ptr->accounting_storage_host);
 	fprintf(out, "AccountingStorageLoc    = %s\n", 
@@ -138,6 +166,8 @@ void slurm_print_ctl_conf ( FILE* out,
 		slurm_ctl_conf_ptr->backup_addr);
 	fprintf(out, "BackupController        = %s\n", 
 		slurm_ctl_conf_ptr->backup_controller);
+	fprintf(out, "BatchStartTime          = %u sec\n", 
+		slurm_ctl_conf_ptr->batch_start_timeout);
 	slurm_make_time_str ((time_t *)&slurm_ctl_conf_ptr->boot_time,
 			     time_str, sizeof(time_str));
 	fprintf(out, "BOOT_TIME               = %s\n",
@@ -148,55 +178,65 @@ void slurm_print_ctl_conf ( FILE* out,
 		slurm_ctl_conf_ptr->checkpoint_type);
 	fprintf(out, "ClusterName             = %s\n",
 		slurm_ctl_conf_ptr->cluster_name);
+	fprintf(out, "CompleteWait            = %u sec\n", 
+		slurm_ctl_conf_ptr->complete_wait);
 	fprintf(out, "ControlAddr             = %s\n", 
 		slurm_ctl_conf_ptr->control_addr);
 	fprintf(out, "ControlMachine          = %s\n", 
 		slurm_ctl_conf_ptr->control_machine);
 	fprintf(out, "CryptoType              = %s\n",
 		slurm_ctl_conf_ptr->crypto_type);
+
+	xbuf = debug_flags2str(slurm_ctl_conf_ptr->debug_flags);
+	fprintf(out, "DebugFlags              = %s\n", xbuf);
+	xfree(xbuf);
+
 	if (slurm_ctl_conf_ptr->def_mem_per_task & MEM_PER_CPU) {
-		fprintf(out, "DefMemPerCPU            = %u\n",
+		fprintf(out, "DefMemPerCPU            = %u MB\n",
 			slurm_ctl_conf_ptr->def_mem_per_task &
 			(~MEM_PER_CPU));
 	} else if (slurm_ctl_conf_ptr->def_mem_per_task) {
-		fprintf(out, "DefMemPerNode           = %u\n",
+		fprintf(out, "DefMemPerNode           = %u MB\n",
 			slurm_ctl_conf_ptr->def_mem_per_task);
 	} else
 		fprintf(out, "DefMemPerCPU            = UNLIMITED\n");
+
 	if (slurm_ctl_conf_ptr->disable_root_jobs)
 		fprintf(out, "DisableRootJobs         = YES\n");
 	else
 		fprintf(out, "DisableRootJobs         = NO\n");
-#if 0
-/* Add in Slurm v1.4 */
+
 	if (slurm_ctl_conf_ptr->enforce_part_limits)
 		fprintf(out, "EnforcePartLimits       = YES\n");
 	else
 		fprintf(out, "EnforcePartLimits       = NO\n");
-#endif
 	fprintf(out, "Epilog                  = %s\n",
 		slurm_ctl_conf_ptr->epilog);
-	fprintf(out, "EpilogMsgTime           = %u\n",
+	fprintf(out, "EpilogMsgTime           = %u usec\n",
 		slurm_ctl_conf_ptr->epilog_msg_time);
+	fprintf(out, "EpilogSlurmctld         = %s\n", 
+		slurm_ctl_conf_ptr->epilog_slurmctld);
 	fprintf(out, "FastSchedule            = %u\n",
 		slurm_ctl_conf_ptr->fast_schedule);
 	fprintf(out, "FirstJobId              = %u\n",
 		slurm_ctl_conf_ptr->first_job_id);
-	fprintf(out, "GetEnvTimeout           = %u\n",
+	fprintf(out, "GetEnvTimeout           = %u sec\n",
 		slurm_ctl_conf_ptr->get_env_timeout);
-	fprintf(out, "HealthCheckInterval     = %u\n",
+	fprintf(out, "HealthCheckInterval     = %u sec\n",
 		slurm_ctl_conf_ptr->health_check_interval);
 	fprintf(out, "HealthCheckProgram      = %s\n",
 		slurm_ctl_conf_ptr->health_check_program);
 #ifdef HAVE_XCPU
 	fprintf(out, "HAVE_XCPU               = %d\n", HAVE_XCPU);
 #endif
-	fprintf(out, "InactiveLimit           = %u\n",
+	fprintf(out, "InactiveLimit           = %u sec\n",
 		slurm_ctl_conf_ptr->inactive_limit);
-	fprintf(out, "JobAcctGatherFrequency  = %u\n",
+	fprintf(out, "JobAcctGatherFrequency  = %u sec\n",
 		slurm_ctl_conf_ptr->job_acct_gather_freq);
 	fprintf(out, "JobAcctGatherType       = %s\n",
 		slurm_ctl_conf_ptr->job_acct_gather_type);
+	fprintf(out, "JobCheckpointDir        = %s\n",
+		slurm_ctl_conf_ptr->job_ckpt_dir);
 	fprintf(out, "JobCompHost             = %s\n",
 		slurm_ctl_conf_ptr->job_comp_host);
 	fprintf(out, "JobCompLoc              = %s\n",
@@ -217,7 +257,9 @@ void slurm_print_ctl_conf ( FILE* out,
 		slurm_ctl_conf_ptr->job_file_append);
 	fprintf(out, "JobRequeue              = %u\n",
 		slurm_ctl_conf_ptr->job_requeue);
-	fprintf(out, "KillWait                = %u\n", 
+	fprintf(out, "KillOnBadExit           = %u\n", 
+		slurm_ctl_conf_ptr->kill_on_bad_exit);
+	fprintf(out, "KillWait                = %u sec\n", 
 		slurm_ctl_conf_ptr->kill_wait);
 	fprintf(out, "Licenses                = %s\n",
 		slurm_ctl_conf_ptr->licenses);
@@ -226,29 +268,67 @@ void slurm_print_ctl_conf ( FILE* out,
 	fprintf(out, "MaxJobCount             = %u\n", 
 		slurm_ctl_conf_ptr->max_job_cnt);
 	if (slurm_ctl_conf_ptr->max_mem_per_task & MEM_PER_CPU) {
-		fprintf(out, "MaxMemPerCPU            = %u\n",
+		fprintf(out, "MaxMemPerCPU            = %u MB\n",
 			slurm_ctl_conf_ptr->max_mem_per_task &
 			(~MEM_PER_CPU));
 	} else if (slurm_ctl_conf_ptr->max_mem_per_task) {
-		fprintf(out, "MaxMemPerNode           = %u\n",
+		fprintf(out, "MaxMemPerNode           = %u MB\n",
 			slurm_ctl_conf_ptr->max_mem_per_task);
 	} else
 		fprintf(out, "MaxMemPerCPU            = UNLIMITED\n");
-	fprintf(out, "MessageTimeout          = %u\n",
+	fprintf(out, "MessageTimeout          = %u sec\n",
 		slurm_ctl_conf_ptr->msg_timeout);
-	fprintf(out, "MinJobAge               = %u\n", 
+	fprintf(out, "MinJobAge               = %u sec\n", 
 		slurm_ctl_conf_ptr->min_job_age);
 	fprintf(out, "MpiDefault              = %s\n",
 		slurm_ctl_conf_ptr->mpi_default);
+	fprintf(out, "MpiParams               = %s\n",
+		slurm_ctl_conf_ptr->mpi_params);
 #ifdef MULTIPLE_SLURMD
 	fprintf(out, "MULTIPLE_SLURMD         = %d\n", MULTIPLE_SLURMD);
 #endif
 	fprintf(out, "NEXT_JOB_ID             = %u\n",
 		slurm_ctl_conf_ptr->next_job_id);
+	if (slurm_ctl_conf_ptr->over_time_limit == (uint16_t) INFINITE)
+		fprintf(out, "OverTimeLimit           = UNLIMITED\n");
+	else {
+		fprintf(out, "OverTimeLimit           = %u min\n",
+			slurm_ctl_conf_ptr->over_time_limit);
+	}
 	fprintf(out, "PluginDir               = %s\n", 
 		slurm_ctl_conf_ptr->plugindir);
 	fprintf(out, "PlugStackConfig         = %s\n",
 		slurm_ctl_conf_ptr->plugstack);
+
+	if (strcmp(slurm_ctl_conf_ptr->priority_type, "priority/basic") == 0) {
+		fprintf(out, "PriorityType            = %s\n",
+			slurm_ctl_conf_ptr->priority_type);
+	} else {
+		secs2time_str((time_t) slurm_ctl_conf_ptr->priority_decay_hl,
+			      tmp_str, sizeof(tmp_str));
+		fprintf(out, "PriorityDecayHalfLife   = %s\n", tmp_str);
+		fprintf(out, "PriorityFavorSmall      = %u\n",
+			slurm_ctl_conf_ptr->priority_favor_small);
+		secs2time_str((time_t) slurm_ctl_conf_ptr->priority_max_age,
+			      tmp_str, sizeof(tmp_str));
+		fprintf(out, "PriorityMaxAge          = %s\n", tmp_str);
+		fprintf(out, "PriorityUsageResetPeriod = %s\n", 
+			_reset_period_str(slurm_ctl_conf_ptr->
+					  priority_reset_period));
+		fprintf(out, "PriorityType            = %s\n",
+			slurm_ctl_conf_ptr->priority_type);
+		fprintf(out, "PriorityWeightAge       = %u\n",
+			slurm_ctl_conf_ptr->priority_weight_age);
+		fprintf(out, "PriorityWeightFairShare = %u\n",
+			slurm_ctl_conf_ptr->priority_weight_fs);
+		fprintf(out, "PriorityWeightJobSize   = %u\n",
+			slurm_ctl_conf_ptr->priority_weight_js);
+		fprintf(out, "PriorityWeightPartition = %u\n",
+			slurm_ctl_conf_ptr->priority_weight_part);
+		fprintf(out, "PriorityWeightQOS       = %u\n",
+			slurm_ctl_conf_ptr->priority_weight_qos);
+	}
+
 	private_data_string(slurm_ctl_conf_ptr->private_data,
 			    tmp_str, sizeof(tmp_str));
 	fprintf(out, "PrivateData             = %s\n", tmp_str);
@@ -256,6 +336,8 @@ void slurm_print_ctl_conf ( FILE* out,
 		slurm_ctl_conf_ptr->proctrack_type);
 	fprintf(out, "Prolog                  = %s\n", 
 		slurm_ctl_conf_ptr->prolog);
+	fprintf(out, "PrologSlurmctld         = %s\n", 
+		slurm_ctl_conf_ptr->prolog_slurmctld);
 	fprintf(out, "PropagatePrioProcess    = %u\n",
 		slurm_ctl_conf_ptr->propagate_prio_process);
         fprintf(out, "PropagateResourceLimits = %s\n",
@@ -264,17 +346,32 @@ void slurm_print_ctl_conf ( FILE* out,
                 slurm_ctl_conf_ptr->propagate_rlimits_except);
 	fprintf(out, "ResumeProgram           = %s\n", 
 		slurm_ctl_conf_ptr->resume_program);
-	fprintf(out, "ResumeRate              = %u\n", 
+	fprintf(out, "ResumeRate              = %u nodes/min\n", 
 		slurm_ctl_conf_ptr->resume_rate);
+	fprintf(out, "ResumeTimeout           = %u sec\n", 
+		slurm_ctl_conf_ptr->resume_timeout);
+	if (slurm_ctl_conf_ptr->resv_over_run == (uint16_t) INFINITE)
+		fprintf(out, "ResvOverRun             = UNLIMITED\n");
+	else {
+		fprintf(out, "ResvOverRun             = %u min\n",
+			slurm_ctl_conf_ptr->resv_over_run);
+	}
 	fprintf(out, "ReturnToService         = %u\n", 
 		slurm_ctl_conf_ptr->ret2service);
+	if (slurm_ctl_conf_ptr->salloc_default_command) {
+		fprintf(out, "SallocDefaultCommand    = \"%s\"\n",
+			slurm_ctl_conf_ptr->salloc_default_command);
+	} else {
+		fprintf(out, "SallocDefaultCommand    = %s\n",
+			slurm_ctl_conf_ptr->salloc_default_command);
+	}
 	fprintf(out, "SchedulerParameters     = %s\n",
 		slurm_ctl_conf_ptr->sched_params);
 	fprintf(out, "SchedulerPort           = %u\n",
 		slurm_ctl_conf_ptr->schedport);
 	fprintf(out, "SchedulerRootFilter     = %u\n",
 		slurm_ctl_conf_ptr->schedrootfltr);
-	fprintf(out, "SchedulerTimeSlice      = %u\n",
+	fprintf(out, "SchedulerTimeSlice      = %u sec\n",
 		slurm_ctl_conf_ptr->sched_time_slice);
 	fprintf(out, "SchedulerType           = %s\n",
 		slurm_ctl_conf_ptr->schedtype);
@@ -296,7 +393,7 @@ void slurm_print_ctl_conf ( FILE* out,
 		slurm_ctl_conf_ptr->slurmctld_pidfile);
 	fprintf(out, "SlurmctldPort           = %u\n", 
 		slurm_ctl_conf_ptr->slurmctld_port);
-	fprintf(out, "SlurmctldTimeout        = %u\n", 
+	fprintf(out, "SlurmctldTimeout        = %u sec\n", 
 		slurm_ctl_conf_ptr->slurmctld_timeout);
 	fprintf(out, "SlurmdDebug             = %u\n", 
 		slurm_ctl_conf_ptr->slurmd_debug);
@@ -310,13 +407,18 @@ void slurm_print_ctl_conf ( FILE* out,
 #endif
 	fprintf(out, "SlurmdSpoolDir          = %s\n", 
 		slurm_ctl_conf_ptr->slurmd_spooldir);
-	fprintf(out, "SlurmdTimeout           = %u\n", 
+	fprintf(out, "SlurmdTimeout           = %u sec\n", 
 		slurm_ctl_conf_ptr->slurmd_timeout);
-	fprintf(out, "SLURM_CONFIG_FILE       = %s\n", 
+	fprintf(out, "SlurmdUser              = %s(%u)\n", 
+		slurm_ctl_conf_ptr->slurmd_user_name,
+		slurm_ctl_conf_ptr->slurmd_user_id);
+	fprintf(out, "SLURM_CONF              = %s\n", 
 		slurm_ctl_conf_ptr->slurm_conf);
 	fprintf(out, "SLURM_VERSION           = %s\n", SLURM_VERSION);
 	fprintf(out, "SrunEpilog              = %s\n",
 		slurm_ctl_conf_ptr->srun_epilog);
+	fprintf(out, "SrunIOTimeout           = %u sec\n", 
+		slurm_ctl_conf_ptr->srun_io_timeout);
 	fprintf(out, "SrunProlog              = %s\n",
 		slurm_ctl_conf_ptr->srun_prolog);
 	fprintf(out, "StateSaveLocation       = %s\n", 
@@ -327,32 +429,46 @@ void slurm_print_ctl_conf ( FILE* out,
 		slurm_ctl_conf_ptr->suspend_exc_parts);
 	fprintf(out, "SuspendProgram          = %s\n", 
 		slurm_ctl_conf_ptr->suspend_program);
-	fprintf(out, "SuspendRate             = %u\n", 
+	fprintf(out, "SuspendRate             = %u nodes/min\n", 
 		slurm_ctl_conf_ptr->suspend_rate);
-	fprintf(out, "SuspendTime             = %d\n", 
-		((int)slurm_ctl_conf_ptr->suspend_time - 1));
+	if (slurm_ctl_conf_ptr->suspend_time == 0) {
+		fprintf(out, "SuspendTime             = NONE\n");
+	} else {
+		fprintf(out, "SuspendTime             = %d sec\n", 
+			((int)slurm_ctl_conf_ptr->suspend_time - 1));
+	}
+	fprintf(out, "SuspendTimeout          = %u sec\n", 
+		slurm_ctl_conf_ptr->suspend_timeout);
 	fprintf(out, "SwitchType              = %s\n",
 		slurm_ctl_conf_ptr->switch_type);
 	fprintf(out, "TaskEpilog              = %s\n",
 		slurm_ctl_conf_ptr->task_epilog);
 	fprintf(out, "TaskPlugin              = %s\n",
 		 slurm_ctl_conf_ptr->task_plugin);
-	fprintf(out, "TaskPluginParam         = %s\n",
-		_task_plugin_param(slurm_ctl_conf_ptr->task_plugin_param));
+	slurm_sprint_cpu_bind_type(tmp_str, 
+				   slurm_ctl_conf_ptr->task_plugin_param);
+	fprintf(out, "TaskPluginParam         = %s\n", tmp_str);
 	fprintf(out, "TaskProlog              = %s\n",
 		slurm_ctl_conf_ptr->task_prolog);
 	fprintf(out, "TmpFS                   = %s\n", 
 		slurm_ctl_conf_ptr->tmp_fs);
+	fprintf(out, "TopologyPlugin          = %s\n",
+		 slurm_ctl_conf_ptr->topology_plugin);
+	fprintf(out, "TrackWCKey              = %u\n",
+		slurm_ctl_conf_ptr->track_wckey);
 	fprintf(out, "TreeWidth               = %u\n",
 		slurm_ctl_conf_ptr->tree_width);
 	fprintf(out, "UsePam                  = %u\n",
 		slurm_ctl_conf_ptr->use_pam);
 	fprintf(out, "UnkillableStepProgram   = %s\n",
 		slurm_ctl_conf_ptr->unkillable_program);
-	fprintf(out, "UnkillableStepTimeout   = %u\n",
+	fprintf(out, "UnkillableStepTimeout   = %u sec\n",
 		slurm_ctl_conf_ptr->unkillable_timeout);
-	fprintf(out, "WaitTime                = %u\n", 
+	fprintf(out, "WaitTime                = %u sec\n", 
 		slurm_ctl_conf_ptr->wait_time);
+
+	slurm_print_key_pairs(out, slurm_ctl_conf_ptr->select_conf_key_pairs,
+			      select_title);
 }
 
 /*
@@ -412,15 +528,21 @@ slurm_load_slurmd_status(slurmd_status_t **slurmd_status_ptr)
 	int rc;
 	slurm_msg_t req_msg;
 	slurm_msg_t resp_msg;
-	
+	char this_host[256], *this_addr;
+
 	slurm_msg_t_init(&req_msg);
 	slurm_msg_t_init(&resp_msg);
 
 	/*
 	 *  Set request message address to slurmd on localhost
 	 */
+	gethostname_short(this_host, sizeof(this_host));
+	this_addr = slurm_conf_get_nodeaddr(this_host);
+	if (this_addr == NULL)
+		this_addr = xstrdup("localhost");
 	slurm_set_addr(&req_msg.address, (uint16_t)slurm_get_slurmd_port(), 
-		       "localhost");
+		       this_addr);
+	xfree(this_addr);
 
 	req_msg.msg_type = REQUEST_DAEMON_STATUS;
 	req_msg.data     = NULL;
@@ -509,3 +631,20 @@ void slurm_print_slurmd_status (FILE* out,
 		slurmd_status_ptr->version);
 	return;
 }
+
+extern void slurm_print_key_pairs(FILE* out, void *key_pairs, char *title)
+{
+	List config_list = (List)key_pairs;
+	ListIterator iter = NULL;
+	config_key_pair_t *key_pair;
+
+	if (!config_list)
+		return;
+	
+	fprintf(out, "\n%s:\n", title);
+	iter = list_iterator_create(config_list);
+	while((key_pair = list_next(iter))) {
+		fprintf(out, "%-23s = %s\n", key_pair->name, key_pair->value);
+	}
+	list_iterator_destroy(iter);
+}
diff --git a/src/api/init_msg.c b/src/api/init_msg.c
index 333752b31..f62e7e9b6 100644
--- a/src/api/init_msg.c
+++ b/src/api/init_msg.c
@@ -2,13 +2,14 @@
  *  init_msg.c - initialize RPC messages contents
  *****************************************************************************
  *  Copyright (C) 2002-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>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -51,7 +52,7 @@
 /*
  * slurm_init_job_desc_msg - initialize job descriptor with 
  *	default values 
- * OUT job_desc_msg - user defined job descriptor
+ * IN/OUT job_desc_msg - user defined job descriptor
  */
 void slurm_init_job_desc_msg(job_desc_msg_t * job_desc_msg)
 {
@@ -64,9 +65,13 @@ void slurm_init_job_desc_msg(job_desc_msg_t * job_desc_msg)
 	job_desc_msg->argv		= ((char **) NULL);
 	job_desc_msg->begin_time	= 0;
 	job_desc_msg->blrtsimage	= NULL;
+	job_desc_msg->ckpt_dir          = NULL;
+	job_desc_msg->ckpt_interval     = 0;
 	job_desc_msg->comment		= NULL;
 	job_desc_msg->conn_type		= (uint16_t) NO_VAL;
 	job_desc_msg->contiguous	= (uint16_t) NO_VAL;
+	job_desc_msg->cpu_bind		= NULL;
+	job_desc_msg->cpu_bind_type	= (uint16_t) NO_VAL;
 	job_desc_msg->cpus_per_task	= (uint16_t) NO_VAL;
 	job_desc_msg->dependency	= NULL;
 	job_desc_msg->environment	= ((char **) NULL);
@@ -100,6 +105,8 @@ void slurm_init_job_desc_msg(job_desc_msg_t * job_desc_msg)
 	job_desc_msg->max_nodes		= NO_VAL;
 	job_desc_msg->max_sockets	= (uint16_t) NO_VAL;
 	job_desc_msg->max_threads	= (uint16_t) NO_VAL;
+	job_desc_msg->mem_bind		= NULL;
+	job_desc_msg->mem_bind_type	= (uint16_t) NO_VAL;
 	job_desc_msg->min_cores		= (uint16_t) NO_VAL;
 	job_desc_msg->min_nodes		= NO_VAL;
 	job_desc_msg->min_sockets	= (uint16_t) NO_VAL;
@@ -125,6 +132,7 @@ void slurm_init_job_desc_msg(job_desc_msg_t * job_desc_msg)
 	job_desc_msg->resp_host		= NULL;
 	job_desc_msg->req_nodes		= NULL;
 	job_desc_msg->requeue		= (uint16_t) NO_VAL;
+	job_desc_msg->reservation	= NULL;
 	job_desc_msg->rotate		= (uint16_t) NO_VAL;
 	job_desc_msg->script		= NULL;
 	job_desc_msg->select_jobinfo	= NULL;
@@ -132,19 +140,21 @@ void slurm_init_job_desc_msg(job_desc_msg_t * job_desc_msg)
 	job_desc_msg->task_dist		= (uint16_t) NO_VAL;
 	job_desc_msg->time_limit	= NO_VAL;
 	job_desc_msg->user_id		= NO_VAL;
+	job_desc_msg->wckey		= NULL;
 	job_desc_msg->work_dir		= NULL;
 }
 
 /*
  * slurm_init_part_desc_msg - initialize partition descriptor with 
  *	default values 
- * OUT job_desc_msg - user defined partition descriptor
+ * IN/OUT update_part_msg - user defined partition descriptor
  */
 void slurm_init_part_desc_msg (update_part_msg_t * update_part_msg)
 {
 	update_part_msg->name 		= NULL;
 	update_part_msg->nodes 		= NULL;
 	update_part_msg->allow_groups 	= NULL;
+	update_part_msg->default_time   = (uint32_t) NO_VAL;
 	update_part_msg->max_time 	= (uint32_t) NO_VAL;
 	update_part_msg->max_nodes 	= NO_VAL;
 	update_part_msg->min_nodes 	= NO_VAL;
@@ -154,5 +164,38 @@ void slurm_init_part_desc_msg (update_part_msg_t * update_part_msg)
 	update_part_msg->max_share 	= (uint16_t) NO_VAL;
 	update_part_msg->priority 	= (uint16_t) NO_VAL;
 	update_part_msg->state_up 	= (uint16_t) NO_VAL;
+	update_part_msg->allow_alloc_nodes = NULL;
+}
+
+/*
+ * slurm_init_resv_desc_msg - initialize reservation descriptor with 
+ *	default values 
+ * OUT job_desc_msg - user defined partition descriptor
+ */
+void slurm_init_resv_desc_msg (resv_desc_msg_t * resv_msg)
+{
+	resv_msg->name		= NULL;
+	resv_msg->start_time	= (time_t) NO_VAL;
+	resv_msg->end_time	= (time_t) NO_VAL;
+	resv_msg->duration	= NO_VAL;
+	resv_msg->flags		= (uint16_t) NO_VAL;
+	resv_msg->node_cnt	= NO_VAL;
+	resv_msg->node_list	= NULL;
+	resv_msg->features	= NULL;
+	resv_msg->partition	= NULL;
+	resv_msg->users		= NULL;
+	resv_msg->accounts	= NULL;
 }
 
+/*
+ * slurm_init_update_node_msg - initialize node update message
+ * OUT update_node_msg - user defined node descriptor
+ */
+void slurm_init_update_node_msg (update_node_msg_t * update_node_msg)
+{
+	update_node_msg->node_names = NULL;
+	update_node_msg->features = NULL;
+	update_node_msg->reason = NULL;
+	update_node_msg->node_state = (uint16_t) NO_VAL;
+	update_node_msg->weight = (uint32_t) NO_VAL;
+}
diff --git a/src/api/job_info.c b/src/api/job_info.c
index e52641612..c3f00de88 100644
--- a/src/api/job_info.c
+++ b/src/api/job_info.c
@@ -2,13 +2,14 @@
  *  job_info.c - get/print the job state information of slurm
  *****************************************************************************
  *  Copyright (C) 2002-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> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -40,9 +41,10 @@
 #  include "config.h"
 #endif
 
+#include <ctype.h>
 #include <errno.h>
-#include <pwd.h>
 #include <grp.h>
+#include <pwd.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -54,13 +56,13 @@
 #include <slurm/slurm_errno.h>
 
 #include "src/api/job_info.h"
+#include "src/common/forward.h"
 #include "src/common/node_select.h"
 #include "src/common/parse_time.h"
 #include "src/common/slurm_auth.h"
 #include "src/common/slurm_protocol_api.h"
 #include "src/common/uid.h"
 #include "src/common/xstring.h"
-#include "src/common/forward.h"
 
 /*
  * slurm_print_job_info_msg - output information about all Slurm 
@@ -125,7 +127,6 @@ slurm_sprint_job_info ( job_info_t * job_ptr, int one_liner )
 {
 	int i, j;
 	char time_str[32], select_buf[122], *group_name, *user_name;
-	char *wckey = NULL, *jname = NULL;
 	char tmp1[128], tmp2[128], *tmp3_ptr;
 	char tmp_line[512];
 	char *ionodes = NULL;
@@ -159,26 +160,11 @@ slurm_sprint_job_info ( job_info_t * job_ptr, int one_liner )
 		xstrcat(out, "\n   ");
 
 	/****** Line 2 ******/
-	if (job_ptr->name && job_ptr->name[0]) {
-		char *temp = NULL;
-		/* first set the jname to the job_ptr->name */
-		jname = xstrdup(job_ptr->name);
-		/* then grep for " since that is the delimiter for
-		   the wckey */
-		if((temp = strchr(jname, '\"'))) {
-			/* if we have a wckey set the " to NULL to
-			 * end the jname */
-			temp[0] = '\0';
-			/* increment and copy the remainder */
-			temp++;
-			wckey = xstrdup(temp);
-		}
-	}
 	if(slurm_get_track_wckey())
 		snprintf(tmp_line, sizeof(tmp_line), "Name=%s WCKey=%s",
-			 jname, wckey);
+			 job_ptr->name, job_ptr->wckey);
 	else
-		snprintf(tmp_line, sizeof(tmp_line), "Name=%s", jname);
+		snprintf(tmp_line, sizeof(tmp_line), "Name=%s", job_ptr->name);
 		
 	xstrcat(out, tmp_line);
 	if (one_liner)
@@ -188,9 +174,9 @@ slurm_sprint_job_info ( job_info_t * job_ptr, int one_liner )
 
 	/****** Line 3 ******/
 	snprintf(tmp_line, sizeof(tmp_line), 
-		"Priority=%u Partition=%s BatchFlag=%u", 
-		job_ptr->priority, job_ptr->partition, 
-		job_ptr->batch_flag);
+		 "Priority=%u Partition=%s BatchFlag=%u Reservation=%s", 
+		 job_ptr->priority, job_ptr->partition, 
+		 job_ptr->batch_flag, job_ptr->resv_name);
 	xstrcat(out, tmp_line);
 	if (one_liner)
 		xstrcat(out, " ");
@@ -408,8 +394,9 @@ slurm_sprint_job_info ( job_info_t * job_ptr, int one_liner )
 
 	/****** Line 11 ******/
 	snprintf(tmp_line, sizeof(tmp_line), 
-		"Dependency=%s Account=%s Requeue=%u",
-		job_ptr->dependency, job_ptr->account, job_ptr->requeue);
+		"Dependency=%s Account=%s Requeue=%u Restarts=%u",
+		job_ptr->dependency, job_ptr->account, job_ptr->requeue,
+		job_ptr->restart_cnt);
 	xstrcat(out, tmp_line);
 	if (one_liner)
 		xstrcat(out, " ");
@@ -417,10 +404,18 @@ slurm_sprint_job_info ( job_info_t * job_ptr, int one_liner )
 		xstrcat(out, "\n   ");
 
 	/****** Line 12 ******/
+	if (job_ptr->state_desc) {
+		/* Replace white space with underscore for easier parsing */
+		for (j=0; job_ptr->state_desc[j]; j++) {
+			if (isspace(job_ptr->state_desc[j]))
+				job_ptr->state_desc[j] = '_';
+		}
+		tmp3_ptr = job_ptr->state_desc;
+	} else
+		tmp3_ptr = job_reason_string(job_ptr->state_reason);
 	snprintf(tmp_line, sizeof(tmp_line), 
 		"Reason=%s Network=%s",
-		job_reason_string(job_ptr->state_reason), 
-		job_ptr->network);
+		tmp3_ptr, job_ptr->network);
 	xstrcat(out, tmp_line);
 	if (one_liner)
 		xstrcat(out, " ");
@@ -516,6 +511,7 @@ slurm_sprint_job_info ( job_info_t * job_ptr, int one_liner )
 			xstrcat(out, "\n   ");
 		xstrcat(out, select_buf);
 	}
+#ifdef HAVE_BG
 	/****** Line 20 (optional) ******/
 	select_g_sprint_jobinfo(job_ptr->select_jobinfo,
 				select_buf, sizeof(select_buf),
@@ -578,6 +574,7 @@ slurm_sprint_job_info ( job_info_t * job_ptr, int one_liner )
 #endif
 		xstrcat(out, tmp_line);
 	}
+#endif
 	xstrcat(out, "\n\n");
 
 	return out;
@@ -688,15 +685,21 @@ slurm_pid2jobid (pid_t job_pid, uint32_t *jobid)
 	slurm_msg_t req_msg;
 	slurm_msg_t resp_msg;
 	job_id_request_msg_t req;
-	
+	char this_host[256], *this_addr;
+
 	slurm_msg_t_init(&req_msg);
 	slurm_msg_t_init(&resp_msg);
 
 	/*
 	 *  Set request message address to slurmd on localhost
 	 */
+	gethostname_short(this_host, sizeof(this_host));
+	this_addr = slurm_conf_get_nodeaddr(this_host);
+	if (this_addr == NULL)
+		this_addr = xstrdup("localhost");
 	slurm_set_addr(&req_msg.address, (uint16_t)slurm_get_slurmd_port(), 
-		       "localhost");
+		       this_addr);
+	xfree(this_addr);
 
 	req.job_pid      = job_pid;
 	req_msg.msg_type = REQUEST_JOB_ID;
@@ -770,11 +773,11 @@ extern int32_t islurm_get_rem_time__(uint32_t *jobid)
 extern int32_t islurm_get_rem_time2__()
 {
 	uint32_t jobid;
-	char *slurm_jobid = getenv("SLURM_JOBID");
+	char *slurm_job_id = getenv("SLURM_JOB_ID");
 
-	if (slurm_jobid == NULL)
+	if (slurm_job_id == NULL)
 		return 0;
-	jobid = atol(slurm_jobid);
+	jobid = atol(slurm_job_id);
 	return islurm_get_rem_time__(&jobid);
 }
 
@@ -809,7 +812,7 @@ slurm_get_end_time(uint32_t jobid, time_t *end_time_ptr)
 		if (jobid_env) {
 			jobid = jobid_env;
 		} else {
-			char *env = getenv("SLURM_JOBID");
+			char *env = getenv("SLURM_JOB_ID");
 			if (env) {
 				jobid = (uint32_t) atol(env);
 				jobid_env = jobid;
diff --git a/src/api/job_info.h b/src/api/job_info.h
index b9fe249ba..6037fcbc8 100644
--- a/src/api/job_info.h
+++ b/src/api/job_info.h
@@ -1,15 +1,16 @@
 /*****************************************************************************\
  *  job_info.h - get/print the job state information of slurm
  *
- *  $Id: job_info.h 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: job_info.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/job_step_info.c b/src/api/job_step_info.c
index f90d56f92..31bf6114f 100644
--- a/src/api/job_step_info.c
+++ b/src/api/job_step_info.c
@@ -1,15 +1,17 @@
 /*****************************************************************************\
  *  job_step_info.c - get/print the job step state information of slurm
- *  $Id: job_step_info.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: job_step_info.c 16867 2009-03-12 16:35:42Z jette $
  *****************************************************************************
  *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>, 
  *             Joey Ekstrom <ekstrom1@llnl.gov>,  et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -128,10 +130,9 @@ slurm_sprint_job_step_info ( job_step_info_t * job_step_ptr,
 
 	/****** Line 2 ******/
 	snprintf(tmp_line, sizeof(tmp_line),
-		"Partition=%s Nodes=%s Name=%s Network=%s Checkpoint=%u", 
+		"Partition=%s Nodes=%s Name=%s Network=%s", 
 		job_step_ptr->partition, job_step_ptr->nodes,
-		job_step_ptr->name, job_step_ptr->network,
-		job_step_ptr->ckpt_interval);
+		job_step_ptr->name, job_step_ptr->network);
 	xstrcat(out, tmp_line);
 	if (one_liner)
 		xstrcat(out, " ");
@@ -140,8 +141,9 @@ slurm_sprint_job_step_info ( job_step_info_t * job_step_ptr,
 
 	/****** Line 3 ******/
 	snprintf(tmp_line, sizeof(tmp_line),
-		"CheckpointPath=%s\n\n", 
-		 job_step_ptr->ckpt_path);
+		"ResvPorts=%s Checkpoint=%u CheckpointDir=%s\n\n", 
+		 job_step_ptr->resv_ports,
+		 job_step_ptr->ckpt_interval, job_step_ptr->ckpt_dir);
 	xstrcat(out, tmp_line);
 
 	return out;
diff --git a/src/api/node_info.c b/src/api/node_info.c
index b26c8c365..4f5b3a149 100644
--- a/src/api/node_info.c
+++ b/src/api/node_info.c
@@ -1,14 +1,16 @@
 /*****************************************************************************\
  *  node_info.c - get/print the node state information of slurm
- *  $Id: node_info.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: node_info.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -113,7 +115,7 @@ char *
 slurm_sprint_node_table (node_info_t * node_ptr, int one_liner )
 {
 	uint16_t my_state = node_ptr->node_state;
-	char *comp_str = "", *drain_str = "";
+	char *comp_str = "", *drain_str = "", *power_str = "";
 	char tmp_line[512];
 	char *out = NULL;
 
@@ -125,13 +127,18 @@ slurm_sprint_node_table (node_info_t * node_ptr, int one_liner )
 		my_state &= (~NODE_STATE_DRAIN);
 		drain_str = "+DRAIN";
 	}
+	if (my_state & NODE_STATE_POWER_SAVE) {
+		my_state &= (~NODE_STATE_POWER_SAVE);
+		power_str = "+POWER";
+	}
 
 	/****** Line 1 ******/
 	snprintf(tmp_line, sizeof(tmp_line),
-		"NodeName=%s State=%s%s%s CPUs=%u AllocCPUs=%u "
+		"NodeName=%s State=%s%s%s%s Procs=%u AllocProcs=%u "
 		"RealMemory=%u TmpDisk=%u",
 		node_ptr->name, node_state_string(my_state),
-		comp_str, drain_str, node_ptr->cpus, node_ptr->used_cpus,
+		comp_str, drain_str, power_str,
+		node_ptr->cpus, node_ptr->used_cpus,
 		node_ptr->real_memory, node_ptr->tmp_disk);
 	xstrcat(out, tmp_line);
 	if (one_liner)
@@ -141,14 +148,22 @@ slurm_sprint_node_table (node_info_t * node_ptr, int one_liner )
 
 	/****** Line 2 ******/
 	snprintf(tmp_line, sizeof(tmp_line),
-		"Sockets=%u Cores=%u Threads=%u "
+		"Sockets=%u CoresPerSocket=%u ThreadsPerCore=%u",
+		node_ptr->sockets, node_ptr->cores, node_ptr->threads);
+	xstrcat(out, tmp_line);
+	if (one_liner)
+		xstrcat(out, " ");
+	else
+		xstrcat(out, "\n   ");
+
+	/****** Line 3 ******/
+	snprintf(tmp_line, sizeof(tmp_line),
 		"Weight=%u Features=%s Reason=%s" ,
-		node_ptr->sockets, node_ptr->cores, node_ptr->threads,
 		node_ptr->weight, node_ptr->features,
 		node_ptr->reason);
 	xstrcat(out, tmp_line);
 
-	/****** Line 3 (optional) ******/
+	/****** Line 4 (optional) ******/
 	if (node_ptr->arch || node_ptr->os) {
 		if (one_liner)
 			xstrcat(out, " ");
diff --git a/src/api/node_select_info.c b/src/api/node_select_info.c
index 2e5f2f982..513c3ae93 100644
--- a/src/api/node_select_info.c
+++ b/src/api/node_select_info.c
@@ -1,15 +1,16 @@
 /*****************************************************************************\
  *  node_select_info.c - get the node select plugin state information of slurm
  *
- *  $Id: node_select_info.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: node_select_info.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/node_select_info.h b/src/api/node_select_info.h
index be41041e5..62e6508db 100644
--- a/src/api/node_select_info.h
+++ b/src/api/node_select_info.h
@@ -5,15 +5,16 @@
  *  NOTE: This software specifically supports only BlueGene/L for now. It 
  *	will be made more general in the future
  *
- *  $Id: node_select_info.h 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: node_select_info.h 17534 2009-05-19 00:58:46Z da $
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -48,33 +49,32 @@
 #include <time.h>
 
 typedef struct {
-	char *nodes;
-	char *ionodes;
-	char *owner_name;
 	char *bg_block_id;
-	int state;
-	int conn_type;
-	int node_use;
-	int quarter;
-	int nodecard;
-	int node_cnt;
+	char *blrtsimage;       /* BlrtsImage for this block */
 	int *bp_inx;            /* list index pairs into node_table for *nodes:
 				 * start_range_1, end_range_1,
 				 * start_range_2, .., -1  */
+	int conn_type;
+	char *ionodes;
 	int *ionode_inx;        /* list index pairs for ionodes in the
 				 * node listed for *ionodes:
 				 * start_range_1, end_range_1,
 				 * start_range_2, .., -1  */
-	char *blrtsimage;       /* BlrtsImage for this block */
+	int job_running;
 	char *linuximage;       /* LinuxImage for this block */
 	char *mloaderimage;     /* mloaderImage for this block */
+	char *nodes;
+	int node_cnt;
+	int node_use;
+	char *owner_name;
 	char *ramdiskimage;     /* RamDiskImage for this block */
+	int state;
 } bg_info_record_t;
 
 typedef struct {
+	bg_info_record_t *bg_info_array;
 	time_t    last_update;
 	uint32_t  record_count;
-	bg_info_record_t *bg_info_array;
 } node_select_info_msg_t;
 
 /*
diff --git a/src/api/partition_info.c b/src/api/partition_info.c
index 9bc41dd76..28ead16cb 100644
--- a/src/api/partition_info.c
+++ b/src/api/partition_info.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *   
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -221,6 +222,19 @@ char *slurm_sprint_partition_info ( partition_info_t * part_ptr,
 		xstrcat(out, "\n   ");
 	
 	/****** Line 4 ******/
+	if (part_ptr->allow_alloc_nodes == NULL)
+		snprintf(tmp_line, sizeof(tmp_line), "AllocNodes=%s","ALL");
+	else
+		snprintf(tmp_line, sizeof(tmp_line), "AllocNodes=%s",
+			 part_ptr->allow_alloc_nodes);
+	xstrcat(out, tmp_line);
+	if (one_liner)
+		xstrcat(out, " ");
+	else
+		xstrcat(out, "\n   ");
+	
+
+	/****** Line 5 ******/
 #ifdef HAVE_BG
 	snprintf(tmp_line, sizeof(tmp_line), "BasePartitions=%s BPIndices=", 
 		part_ptr->nodes);
@@ -237,6 +251,19 @@ char *slurm_sprint_partition_info ( partition_info_t * part_ptr,
 			part_ptr->node_inx[j+1]);
 		xstrcat(out, tmp_line);
 	}
+
+	if (part_ptr->default_time == INFINITE)
+		sprintf(tmp_line, " DefaultTime=UNLIMITED ");
+	else if (part_ptr->default_time == NO_VAL)
+		sprintf(tmp_line, " DefaultTime=NONE ");	  
+	else {
+		char time_line[32];
+		secs2time_str(part_ptr->default_time * 60, time_line, 
+			sizeof(time_line));
+		sprintf(tmp_line, " DefaultTime=%s ", time_line);
+	}
+	xstrcat(out, tmp_line);
+
 	if (one_liner)
 		xstrcat(out, "\n");
 	else
diff --git a/src/api/pmi.c b/src/api/pmi.c
index d0a7754be..549226efa 100644
--- a/src/api/pmi.c
+++ b/src/api/pmi.c
@@ -49,10 +49,11 @@
  *  Copyright (C) 2005-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -184,7 +185,7 @@ int PMI_Init( int *spawned )
 	if (pmi_init)
 		goto replay;
 
-	env = getenv("SLURM_JOBID");
+	env = getenv("SLURM_JOB_ID");
 	if (env)
 		pmi_jobid = atoi(env);
 	else
@@ -445,7 +446,7 @@ int PMI_Get_appnum( int *appnum )
 	if (appnum == NULL)
 		return PMI_ERR_INVALID_ARG;
 
-	env = getenv("SLURM_JOBID");
+	env = getenv("SLURM_JOB_ID");
 	if (env) {
 		*appnum = atoi(env);
 		return PMI_SUCCESS;
@@ -711,9 +712,14 @@ int PMI_Get_clique_size( int *size )
 	if (size == NULL)
 		return PMI_ERR_INVALID_ARG;
 
-	env = getenv("SLURM_CPUS_ON_NODE");
+	env = getenv("SLURM_GTIDS");
 	if (env) {
-		*size = atoi(env);
+		int i, tids=1;
+		for (i=0; env[i]; i++) {
+			if (env[i] == ',')
+				tids++;
+		}
+		*size = tids;
 		return PMI_SUCCESS;
 	}
 	return PMI_FAIL;
@@ -742,7 +748,7 @@ communicate through IPC mechanisms (e.g., shared memory) and other network
 mechanisms.
 
 @*/
-int PMI_Get_clique_ranks( char ranks[], int length )
+int PMI_Get_clique_ranks( int ranks[], int length )
 {
 	char *env;
 
@@ -754,7 +760,19 @@ int PMI_Get_clique_ranks( char ranks[], int length )
 
 	env = getenv("SLURM_GTIDS");
 	if (env) {
-		strcpy(ranks, env);
+		int i = 0;
+		char *tid, *tids, *last = NULL;
+		tids = strdup(env);
+		tid = strtok_r(tids, ",", &last);
+		while (tid) {
+			if (i >= length) {
+				free(tids);
+				return PMI_ERR_INVALID_LENGTH;
+			}
+			ranks[i++] = atoi(tid);
+			tid = strtok_r(NULL, ",", &last);
+		}
+		free(tids);
 		return PMI_SUCCESS;
 	}
 
diff --git a/src/api/pmi_server.c b/src/api/pmi_server.c
index d621d590e..b0d32873a 100644
--- a/src/api/pmi_server.c
+++ b/src/api/pmi_server.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  pmi_server.c - Global PMI data as maintained within srun
- *  $Id: pmi_server.c 15376 2008-10-10 19:28:11Z da $
+ *  $Id: pmi_server.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2005-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/pmi_server.h b/src/api/pmi_server.h
index 03e42c52e..035965536 100644
--- a/src/api/pmi_server.h
+++ b/src/api/pmi_server.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  pmi.h - Global PMI data as maintained within srun
- *  $Id: pmi_server.h 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: pmi_server.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/reconfigure.c b/src/api/reconfigure.c
index 4e865fd4d..7f164b48c 100644
--- a/src/api/reconfigure.c
+++ b/src/api/reconfigure.c
@@ -1,15 +1,16 @@
 /*****************************************************************************\
  *  reconfigure.c - request that slurmctld shutdown or re-read the 
  *	            configuration files
- *  $Id: reconfigure.c 14872 2008-08-25 16:25:28Z jette $
+ *  $Id: reconfigure.c 17450 2009-05-12 16:22:58Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -133,6 +134,23 @@ slurm_shutdown (uint16_t options)
 	return _send_message_controller(PRIMARY_CONTROLLER,   &req_msg);
 }
 
+/*
+ * slurm_takeover - issue RPC to have Slurm backup controller take over the 
+ *                  primary controller. REQUEST_CONTROL is sent by the backup 
+ *                  to the primary controller to take control
+ * RET 0 or a slurm error code
+ */
+int
+slurm_takeover ( void )
+{
+	slurm_msg_t req_msg;
+
+	slurm_msg_t_init(&req_msg);
+	req_msg.msg_type     = REQUEST_TAKEOVER;
+		
+	return _send_message_controller(SECONDARY_CONTROLLER, &req_msg);
+}
+
 int
 _send_message_controller (enum controller_id dest, slurm_msg_t *req) 
 {
diff --git a/src/api/reservation_info.c b/src/api/reservation_info.c
new file mode 100644
index 000000000..77e3991f7
--- /dev/null
+++ b/src/api/reservation_info.c
@@ -0,0 +1,199 @@
+/*****************************************************************************\
+ *  reseration_info.c - get/print the reservation state information of slurm
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Morris Jette <jette1@llnl.gov> et. al.
+ *  CODE-OCEC-09-009. All rights reserved.
+ *   
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <slurm/slurm.h>
+
+#include "src/api/job_info.h"
+#include "src/common/parse_time.h"
+#include "src/common/slurm_protocol_api.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
+
+/*
+ * slurm_print_reservation_info_msg - output information about all Slurm 
+ *	reservations based upon message as loaded using slurm_load_reservation
+ * IN out - file to write to
+ * IN resv_info_ptr - reservation information message pointer
+ * IN one_liner - print as a single line if true
+ */
+void slurm_print_reservation_info_msg ( FILE* out, 
+		reserve_info_msg_t * resv_info_ptr, int one_liner )
+{
+	int i ;
+	reserve_info_t * resv_ptr = resv_info_ptr->reservation_array ;
+	char time_str[32];
+
+	slurm_make_time_str( (time_t *)&resv_info_ptr->last_update, time_str, 
+			     sizeof(time_str));
+	fprintf( out, "Reservation data as of %s, record count %d\n",
+		time_str, resv_info_ptr->record_count);
+
+	for (i = 0; i < resv_info_ptr->record_count; i++) {
+		slurm_print_reservation_info ( out, & resv_ptr[i], one_liner );
+	}
+
+}
+
+/*
+ * slurm_print_reservation_info - output information about a specific Slurm 
+ *	reservation based upon message as loaded using slurm_load_reservation
+ * IN out - file to write to
+ * IN resv_ptr - an individual reservation information record pointer
+ * IN one_liner - print as a single line if true
+ */
+void slurm_print_reservation_info ( FILE* out, reserve_info_t * resv_ptr, 
+				    int one_liner )
+{
+	char *print_this = slurm_sprint_reservation_info(resv_ptr, one_liner);
+	fprintf ( out, "%s", print_this);
+	xfree(print_this);
+}
+
+
+/*
+ * slurm_sprint_reservation_info - output information about a specific Slurm 
+ *	reservation based upon message as loaded using slurm_load_reservations
+ * IN resv_ptr - an individual reservation information record pointer
+ * IN one_liner - print as a single line if true
+ * RET out - char * containing formatted output (must be freed after call)
+ *           NULL is returned on failure.
+ */
+char *slurm_sprint_reservation_info ( reserve_info_t * resv_ptr, 
+				      int one_liner )
+{
+	char tmp1[32], tmp2[32], *flag_str = NULL;
+	char tmp_line[MAXHOSTRANGELEN];
+	char *out = NULL;
+
+	/****** Line 1 ******/
+	slurm_make_time_str(&resv_ptr->start_time, tmp1, sizeof(tmp1));
+	slurm_make_time_str(&resv_ptr->end_time,   tmp2, sizeof(tmp2));
+	snprintf(tmp_line, sizeof(tmp_line),
+		 "ReservationName=%s StartTime=%s EndTime=%s Duration=%u",
+		 resv_ptr->name, tmp1, tmp2, 
+		 (uint32_t) (difftime(resv_ptr->end_time, 
+				      resv_ptr->start_time) / 60));
+	xstrcat(out, tmp_line);
+
+	if (one_liner)
+		xstrcat(out, " ");
+	else
+		xstrcat(out, "\n   ");
+	
+	/****** Line 2 ******/
+	flag_str = reservation_flags_string(resv_ptr->flags);
+
+	snprintf(tmp_line, sizeof(tmp_line), 
+		 "Nodes=%s NodeCnt=%u Features=%s PartitionName=%s Flags=%s",
+		 resv_ptr->node_list, resv_ptr->node_cnt,
+		 resv_ptr->features,  resv_ptr->partition, flag_str);
+	xfree(flag_str);
+	xstrcat(out, tmp_line);
+	if (one_liner)
+		xstrcat(out, " ");
+	else
+		xstrcat(out, "\n   ");
+	
+	/****** Line 3 ******/
+	snprintf(tmp_line, sizeof(tmp_line), 
+		 "Users=%s Accounts=%s", 
+		 resv_ptr->users, resv_ptr->accounts);
+	xstrcat(out, tmp_line);
+	if (one_liner)
+		xstrcat(out, "\n");
+	else
+		xstrcat(out, "\n\n");
+	
+	return out;
+}
+
+
+
+/*
+ * slurm_load_reservations - issue RPC to get all slurm reservation 
+ *	configuration information if changed since update_time 
+ * IN update_time - time of current configuration data
+ * IN reserve_info_msg_pptr - place to store a reservation configuration 
+ *	pointer
+ * RET 0 or a slurm error code
+ * NOTE: free the response using slurm_free_reservation_info_msg
+ */
+extern int slurm_load_reservations (time_t update_time, 
+		reserve_info_msg_t **resp)
+{
+        int rc;
+        slurm_msg_t req_msg;
+        slurm_msg_t resp_msg;
+        resv_info_request_msg_t req;
+
+	slurm_msg_t_init(&req_msg);
+	slurm_msg_t_init(&resp_msg);
+
+        req.last_update  = update_time;
+        req_msg.msg_type = REQUEST_RESERVATION_INFO;
+        req_msg.data     = &req;
+	
+	if (slurm_send_recv_controller_msg(&req_msg, &resp_msg) < 0)
+		return SLURM_ERROR;
+	
+	switch (resp_msg.msg_type) {
+	case RESPONSE_RESERVATION_INFO:
+		*resp = (reserve_info_msg_t *) resp_msg.data;
+		break;
+	case RESPONSE_SLURM_RC:
+		rc = ((return_code_msg_t *) resp_msg.data)->return_code;
+		slurm_free_return_code_msg(resp_msg.data);	
+		if (rc) 
+			slurm_seterrno_ret(rc);
+		*resp = NULL;
+		break;
+	default:
+		slurm_seterrno_ret(SLURM_UNEXPECTED_MSG_ERROR);
+		break;
+	}
+
+	return SLURM_PROTOCOL_SUCCESS;
+}
diff --git a/src/api/signal.c b/src/api/signal.c
index 3ea420ec6..48020e169 100644
--- a/src/api/signal.c
+++ b/src/api/signal.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  signal.c - Send a signal to a slurm job or job step
- *  $Id: signal.c 15602 2008-11-04 23:36:01Z jette $
+ *  $Id: signal.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/slurm_hostlist.c b/src/api/slurm_hostlist.c
new file mode 100644
index 000000000..16e9fb06b
--- /dev/null
+++ b/src/api/slurm_hostlist.c
@@ -0,0 +1,96 @@
+/****************************************************************************\
+ *  slurm_hostname.c - wrapper functions to allow for systems that
+ *                     don't allow strong alias'
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>.
+ *  LLNL-CODE-402394.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif                /* HAVE_CONFIG_H */
+
+#if USE_ALIAS == 0
+/* only do anything if we don't use alias */
+#include "src/common/hostlist.h"
+
+// make wrappers
+extern hostlist_t slurm_hostlist_count(const char *hostlist)
+{
+	return hostlist_create(hostlist);
+}
+
+extern int slurm_hostlist_create(hostlist_t hl)
+{
+	return hostlist_count(hl);
+}
+
+extern void slurm_hostlist_destroy(hostlist_t hl)
+{
+	hostlist_count(hl);
+	return;
+}
+
+extern int slurm_hostlist_find(hostlist_t hl, const char *hostname)
+{
+	return hostlist_find(hl, hostname);
+}
+
+extern int slurm_hostlist_push(hostlist_t hl, const char *hosts)
+{
+	return hostlist_push(hl, hosts);
+}
+
+extern int slurm_hostlist_push_host(hostlist_t hl, const char *host)
+{
+	return hostlist_push_host(hl, host);
+}
+
+extern ssize_t slurm_hostlist_ranged_string(hostlist_t hl, size_t n, char *buf)
+{
+	return hostlist_ranged_string(hl, n, buf);
+}
+
+extern char *slurm_hostlist_shift(hostlist_t hl)
+{
+	return hostlist_shift(hl);
+}
+
+extern void slurm_hostlist_uniq(hostlist_t hl)
+{
+	hostlist_uniq(hl);
+	return;
+}
+
+#endif
diff --git a/src/api/slurm_pmi.c b/src/api/slurm_pmi.c
index 54165bfd1..f3c556d5e 100644
--- a/src/api/slurm_pmi.c
+++ b/src/api/slurm_pmi.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/slurm_pmi.h b/src/api/slurm_pmi.h
index 8b0a61ba2..675fbfae9 100644
--- a/src/api/slurm_pmi.h
+++ b/src/api/slurm_pmi.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/step_ctx.c b/src/api/step_ctx.c
index 95956f3ac..b1bb5cf87 100644
--- a/src/api/step_ctx.c
+++ b/src/api/step_ctx.c
@@ -1,15 +1,15 @@
 /*****************************************************************************\
  *  step_ctx.c - step_ctx task functions for use by AIX/POE
- *
- *  $Id: step_ctx.c 15262 2008-10-01 22:58:26Z jette $
  *****************************************************************************
- *  Copyright (C) 2004 The Regents of the University of California.
+ *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -44,28 +44,38 @@
 
 #include <slurm/slurm.h>
 
+#include "src/common/bitstring.h"
 #include "src/common/hostlist.h"
 #include "src/common/net.h"
+#include "src/common/slurm_cred.h"
 #include "src/common/slurm_protocol_api.h"
 #include "src/common/slurm_protocol_defs.h"
 #include "src/common/xmalloc.h"
 #include "src/common/xstring.h"
 #include "src/common/slurm_cred.h"
-
 #include "src/api/step_ctx.h"
 
 static void
 _job_fake_cred(struct slurm_step_ctx_struct *ctx)
 {
 	slurm_cred_arg_t arg;
-	arg.alloc_lps_cnt = 0;
-	arg.alloc_lps     = NULL;
+	uint32_t node_cnt = ctx->step_resp->step_layout->node_cnt;
+
 	arg.hostlist      = ctx->step_req->node_list;
 	arg.job_mem       = 0;
 	arg.jobid         = ctx->job_id;
 	arg.stepid        = ctx->step_resp->job_step_id;
-	arg.task_mem      = 0;
 	arg.uid           = ctx->user_id;
+	arg.core_bitmap   = bit_alloc(node_cnt);
+	bit_nset(arg.core_bitmap, 0, node_cnt-1);
+	arg.cores_per_socket = xmalloc(sizeof(uint16_t));
+	arg.cores_per_socket[0] = 1;
+	arg.sockets_per_node = xmalloc(sizeof(uint16_t));
+	arg.sockets_per_node[0] = 1;
+	arg.sock_core_rep_count = xmalloc(sizeof(uint32_t));
+	arg.sock_core_rep_count[0] = node_cnt;
+	arg.job_nhosts    = node_cnt;
+	arg.job_hostlist  = ctx->step_resp->step_layout->node_list;
 	ctx->step_resp->cred = slurm_cred_faker(&arg);
 }
 
@@ -80,15 +90,17 @@ static job_step_create_request_msg_t *_create_step_request(
 	step_req->cpu_count = step_params->cpu_count;
 	step_req->num_tasks = step_params->task_count;
 	step_req->relative = step_params->relative;
+	step_req->resv_port_cnt = step_params->resv_port_cnt;
 	step_req->exclusive  = step_params->exclusive;
 	step_req->immediate  = step_params->immediate;
 	step_req->ckpt_interval = step_params->ckpt_interval;
-	step_req->ckpt_path = xstrdup(step_params->ckpt_path);
+	step_req->ckpt_dir = xstrdup(step_params->ckpt_dir);
 	step_req->task_dist = step_params->task_dist;
 	step_req->plane_size = step_params->plane_size;
 	step_req->node_list = xstrdup(step_params->node_list);
 	step_req->network = xstrdup(step_params->network);
 	step_req->name = xstrdup(step_params->name);
+	step_req->no_kill = step_params->no_kill;
 	step_req->overcommit = step_params->overcommit ? 1 : 0;
 	step_req->mem_per_task = step_params->mem_per_task;
 
@@ -140,7 +152,6 @@ slurm_step_ctx_create (const slurm_step_ctx_params_t *step_params)
 	ctx->magic	= STEP_CTX_MAGIC;
 	ctx->job_id	= step_req->job_id;
 	ctx->user_id	= step_req->user_id;
-	ctx->no_kill	= step_params->no_kill;
 	ctx->step_req   = step_req;
 	ctx->step_resp	= step_resp;
 	ctx->verbose_level = step_params->verbose_level;
@@ -215,7 +226,6 @@ slurm_step_ctx_create_no_alloc (const slurm_step_ctx_params_t *step_params,
 	ctx->magic	= STEP_CTX_MAGIC;
 	ctx->job_id	= step_req->job_id;
 	ctx->user_id	= step_req->user_id;
-	ctx->no_kill	= step_params->no_kill;
 	ctx->step_req   = step_req;
 	ctx->step_resp	= step_resp;
 	ctx->verbose_level = step_params->verbose_level;
@@ -445,6 +455,7 @@ extern void slurm_step_ctx_params_t_init (slurm_step_ctx_params_t *ptr)
 	ptr->relative = (uint16_t)NO_VAL;
 	ptr->task_dist = SLURM_DIST_CYCLIC;
 	ptr->plane_size = (uint16_t)NO_VAL;
+	ptr->resv_port_cnt = (uint16_t)NO_VAL;
 
 	ptr->uid = getuid();
 
diff --git a/src/api/step_ctx.h b/src/api/step_ctx.h
index 74dc6e397..8ecd26597 100644
--- a/src/api/step_ctx.h
+++ b/src/api/step_ctx.h
@@ -7,10 +7,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>,
  *  Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -55,7 +56,6 @@ struct slurm_step_ctx_struct {
 	struct step_launch_state *launch_state;
 	uint16_t verbose_level; /* for extra logging decisions in step
 				 * launch api */
-	bool no_kill;		/* if set, don't kill step on node DOWN */
 };
 
 #endif /* _STEP_CTX_H */
diff --git a/src/api/step_io.c b/src/api/step_io.c
index 37e673bd9..acc6e5550 100644
--- a/src/api/step_io.c
+++ b/src/api/step_io.c
@@ -1,14 +1,15 @@
 /****************************************************************************\
  *  step_io.c - process stdin, stdout, and stderr for parallel jobs.
- *  $Id: step_io.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: step_io.c 17056 2009-03-26 23:35:52Z dbremer $
  *****************************************************************************
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -57,6 +58,7 @@
 #include "src/common/eio.h"
 #include "src/common/io_hdr.h"
 #include "src/common/net.h"
+#include "src/common/write_labelled_message.h"
 
 #include "src/api/step_io.h"
 
@@ -490,139 +492,6 @@ create_file_write_eio_obj(int fd, uint32_t taskid, uint32_t nodeid,
 	return eio;
 }
 
-static int _write_label(int fd, int taskid, int label_width)
-{
-	int n;
-	int left = label_width + 2;
-	char buf[16];
-	void *ptr = buf;
-
-	snprintf(buf, 16, "%0*d: ", label_width, taskid);
-	while (left > 0) {
-	again:
-		if ((n = write(fd, ptr, left)) < 0) {
-			if (errno == EINTR)
-				goto again;
-			if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) {
-				debug3("  got EAGAIN in _write_label");
-				goto again;
-			}
-			error("In _write_label: %m");
-			return SLURM_ERROR;
-		}
-		left -= n;
-		ptr += n;
-	}
-
-	return SLURM_SUCCESS;
-}
-
-static int _write_newline(int fd)
-{
-	int n;
-
-	debug2("Called _write_newline");
-again:
-	if ((n = write(fd, "\n", 1)) < 0) {
-		if (errno == EINTR
-		    || errno == EAGAIN
-		    || errno == EWOULDBLOCK) {
-			goto again;
-		}
-		error("In _write_newline: %m");
-		return SLURM_ERROR;
-	}
-	return SLURM_SUCCESS;
-}
-
-/*
- * Blocks until write is complete, regardless of the file
- * descriptor being in non-blocking mode.
- */
-static int _write_line(int fd, void *buf, int len)
-{
-	int n;
-	int left = len;
-	void *ptr = buf;
-
-	debug2("Called _write_line");
-	while (left > 0) {
-	again:
-		if ((n = write(fd, ptr, left)) < 0) {
-			if (errno == EINTR)
-				goto again;
-			if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) {
-				debug3("  got EAGAIN in _write_line");
-				goto again;
-			}
-			return -1;
-		}
-		left -= n;
-		ptr += n;
-	}
-	
-	return len;
-}
-
-
-/*
- * Write as many lines from the message as possible.  Return
- * the number of bytes from the message that have been written,
- * or -1 on error.
- *
- * Prepend a label of the task number if label parameter was
- * specified.
- *
- * If the message ends in a partial line (line does not end
- * in a '\n'), then add a newline to the output file, but only
- * in label mode.
- */
-static int _write_msg(int fd, void *buf, int len, int taskid,
-		      bool label, int label_width)
-{
-	void *start;
-	void *end;
-	int remaining = len;
-	int written = 0;
-	int line_len;
-	int rc = -1;
-
-	while (remaining > 0) {
-		start = buf + written;
-		end = memchr(start, '\n', remaining);
-		if (label)
-			if (_write_label(fd, taskid, label_width)
-			    != SLURM_SUCCESS)
-				goto done;
-		if (end == NULL) { /* no newline found */
-			rc = _write_line(fd, start, remaining);
-			if (rc <= 0) {
-				goto done;
-			} else {
-				remaining -= rc;
-				written += rc;
-			}
-			if (label)
-				if (_write_newline(fd) != SLURM_SUCCESS)
-					goto done;
-		} else {
-			line_len = (int)(end - start) + 1;
-			rc = _write_line(fd, start, line_len);
-			if (rc <= 0) {
-				goto done;
-			} else {
-				remaining -= rc;
-				written += rc;
-			}
-		}
-
-	}
-done:
-	if (written > 0)
-		return written;
-	else
-		return rc;
-}
 
 static bool _file_writable(eio_obj_t *obj)
 {
@@ -667,11 +536,11 @@ static int _file_write(eio_obj_t *obj, List objs)
 	} else if (!info->eof) {
 		ptr = info->out_msg->data + (info->out_msg->length
 					     - info->out_remaining);
-		if ((n = _write_msg(obj->fd, ptr,
-				    info->out_remaining,
-				    info->out_msg->header.gtaskid,
-				    info->cio->label,
-				    info->cio->label_width)) < 0) {
+		if ((n = write_labelled_message(obj->fd, ptr,
+					        info->out_remaining,
+					        info->out_msg->header.gtaskid,
+					        info->cio->label,
+					        info->cio->label_width)) < 0) {
 			list_enqueue(info->cio->free_outgoing, info->out_msg);
 			info->eof = true;
 			return SLURM_ERROR;
diff --git a/src/api/step_io.h b/src/api/step_io.h
index 477eb9a64..2a9ca6179 100644
--- a/src/api/step_io.h
+++ b/src/api/step_io.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/api/step_io.h - job-step client-side I/O routines
- * $Id: step_io.h 13672 2008-03-19 23:10:58Z jette $
+ * $Id: step_io.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/step_launch.c b/src/api/step_launch.c
index d73b3c472..068fd7dd4 100644
--- a/src/api/step_launch.c
+++ b/src/api/step_launch.c
@@ -2,13 +2,14 @@
  *  step_launch.c - launch a parallel job step
  *****************************************************************************
  *  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 Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -91,6 +92,7 @@ static int  _msg_thr_create(struct step_launch_state *sls, int num_nodes);
 static void _handle_msg(struct step_launch_state *sls, slurm_msg_t *msg);
 static bool _message_socket_readable(eio_obj_t *obj);
 static int  _message_socket_accept(eio_obj_t *obj, List objs);
+static int  _cr_notify_step_launch(slurm_step_ctx_t *ctx);
 
 static struct io_operations message_socket_ops = {
 	readable:	&_message_socket_readable,
@@ -119,17 +121,19 @@ void slurm_step_launch_params_t_init (slurm_step_launch_params_t *ptr)
 	ptr->buffered_stdio = true;
 	memcpy(&ptr->local_fds, &fds, sizeof(fds));
 	ptr->gid = getgid();
-	ptr->acctg_freq = (uint16_t) NO_VAL;
+	ptr->acctg_freq  = (uint16_t) NO_VAL;
+	ptr->max_cores   = 0xffff;
+	ptr->max_sockets = 0xffff;
+	ptr->max_threads = 0xffff;
 }
 
 /*
  * slurm_step_launch - launch a parallel job step
  * IN ctx - job step context generated by slurm_step_ctx_create
- * IN launcher_host - address used for PMI communications
  * IN callbacks - Identify functions to be called when various events occur
  * RET SLURM_SUCCESS or SLURM_ERROR (with errno set)
  */
-int slurm_step_launch (slurm_step_ctx_t *ctx, char *launcher_host,
+int slurm_step_launch (slurm_step_ctx_t *ctx,
 		       const slurm_step_launch_params_t *params,
 		       const slurm_step_launch_callbacks_t *callbacks)
 {
@@ -195,8 +199,9 @@ int slurm_step_launch (slurm_step_ctx_t *ctx, char *launcher_host,
 	} else {
 		env_array_merge(&env, (const char **)params->env);
 	}
-	env_array_for_step(&env, ctx->step_resp, launcher_host,
-			   ctx->launch_state->resp_port[0]);
+	env_array_for_step(&env, ctx->step_resp,
+			   ctx->launch_state->resp_port[0], 
+			   params->preserve_env);
 	env_array_merge(&env, (const char **)mpi_env);
 	env_array_free(mpi_env);
 
@@ -222,13 +227,10 @@ int slurm_step_launch (slurm_step_ctx_t *ctx, char *launcher_host,
 	launch.max_cores	= params->max_cores;
 	launch.max_threads	= params->max_threads;
 	launch.cpus_per_task	= params->cpus_per_task;
-	launch.ntasks_per_node	= params->ntasks_per_node;
-	launch.ntasks_per_socket= params->ntasks_per_socket;
-	launch.ntasks_per_core	= params->ntasks_per_core;
 	launch.task_dist	= params->task_dist;
-	launch.plane_size	= params->plane_size;
 	launch.pty              = params->pty;
-	launch.ckpt_path        = params->ckpt_path;
+	launch.ckpt_dir         = params->ckpt_dir;
+	launch.restart_dir      = params->restart_dir;
 	launch.acctg_freq	= params->acctg_freq;
 	launch.open_mode        = params->open_mode;
 	launch.options          = job_options_create();
@@ -251,6 +253,7 @@ int slurm_step_launch (slurm_step_ctx_t *ctx, char *launcher_host,
 		launch.efname = params->remote_error_filename;
 		launch.ifname = params->remote_input_filename;
 		launch.buffered_stdio = params->buffered_stdio ? 1 : 0;
+		launch.labelio = params->labelio ? 1 : 0;
 		ctx->launch_state->io.normal =
 			client_io_handler_create(params->local_fds,
 						 ctx->step_req->num_tasks,
@@ -345,6 +348,8 @@ int slurm_step_launch_wait_start(slurm_step_ctx_t *ctx)
 		}
 	}
 
+	_cr_notify_step_launch(ctx);
+
 	pthread_mutex_unlock(&sls->lock);
 	return SLURM_SUCCESS;
 }
@@ -422,6 +427,17 @@ void slurm_step_launch_wait_finish(slurm_step_ctx_t *ctx)
 		info("Force Terminated job step %u.%u",
 		     ctx->job_id, ctx->step_resp->job_step_id);
 
+	/* task_exit_signal != 0 when srun receives a message that a task
+	   exited with a SIGTERM or SIGKILL.  Without this test, a hang in srun
+	   might occur when a node gets a hard power failure, and TCP does not
+	   indicate that the I/O connection closed.  The I/O thread could 
+	   block waiting for an EOF message, even though the remote process
+	   has died.  In this case, use client_io_handler_abort to force the 
+	   I/O thread to stop listening for stdout or stderr and shutdown.*/
+	if (task_exit_signal && !sls->user_managed_io) {
+		client_io_handler_abort(sls->io.normal);
+	}
+
 	/* Then shutdown the message handler thread */
 	eio_signal_shutdown(sls->msg_handle);
 	pthread_mutex_unlock(&sls->lock);
@@ -571,7 +587,6 @@ struct step_launch_state *step_launch_state_create(slurm_step_ctx_t *ctx)
 	sls->resp_port = NULL;
 	sls->abort = false;
 	sls->abort_action_taken = false;
-	sls->no_kill = ctx->no_kill;
 	sls->mpi_info->jobid = ctx->step_req->job_id;
 	sls->mpi_info->stepid = ctx->step_resp->job_step_id;
 	sls->mpi_info->step_layout = layout;
@@ -598,6 +613,82 @@ void step_launch_state_destroy(struct step_launch_state *sls)
 	}
 }
 
+/**********************************************************************
+ * CR functions
+ **********************************************************************/
+
+/* connect to srun_cr */
+static int _connect_srun_cr(char *addr)
+{
+	struct sockaddr_un sa;
+	unsigned int sa_len;
+	int fd, rc;
+
+	fd = socket(AF_UNIX, SOCK_STREAM, 0);
+	if (fd < 0) {
+		error("failed creating cr socket: %m");
+		return -1;
+	}
+	memset(&sa, 0, sizeof(sa));
+
+	sa.sun_family = AF_UNIX;
+	strcpy(sa.sun_path, addr);
+	sa_len = strlen(sa.sun_path) + sizeof(sa.sun_family);
+
+	while ((rc = connect(fd, (struct sockaddr *)&sa, sa_len) < 0) &&
+	       (errno == EINTR));
+
+	if (rc < 0) {
+		debug2("failed connecting cr socket: %m");
+		close(fd);
+		return -1;
+	}
+	return fd;
+}
+
+/* send job_id, step_id, node_list to srun_cr */
+static int _cr_notify_step_launch(slurm_step_ctx_t *ctx)
+{
+	int fd, len, rc = 0;
+	char *cr_sock_addr = NULL;
+
+	cr_sock_addr = getenv("SLURM_SRUN_CR_SOCKET");
+	if (cr_sock_addr == NULL) { /* not run under srun_cr */
+		return 0;
+	}
+
+	if ((fd = _connect_srun_cr(cr_sock_addr)) < 0) {
+		debug2("failed connecting srun_cr. take it not running under "
+		       "srun_cr.");
+		return 0;
+	}
+	if (write(fd, &ctx->job_id, sizeof(uint32_t)) != sizeof(uint32_t)) {
+		error("failed writing job_id to srun_cr: %m");
+		rc = -1;
+		goto out;
+	}
+	if (write(fd, &ctx->step_resp->job_step_id, sizeof(uint32_t)) != 
+	    sizeof(uint32_t)) {
+		error("failed writing job_step_id to srun_cr: %m");
+		rc = -1;
+		goto out;
+	}
+	len = strlen(ctx->step_resp->step_layout->node_list);
+	if (write(fd, &len, sizeof(int)) != sizeof(int)) {
+		error("failed writing nodelist length to srun_cr: %m");
+		rc = -1;
+		goto out;
+	}
+	if (write(fd, ctx->step_resp->step_layout->node_list, len + 1) != 
+	    (len + 1)) {
+		error("failed writing nodelist to srun_cr: %m");
+		rc = -1;
+	}
+ out:
+	close (fd);
+	return rc;
+}
+
 /**********************************************************************
  * Message handler functions
  **********************************************************************/
@@ -856,14 +947,6 @@ _node_fail_handler(struct step_launch_state *sls, slurm_msg_t *fail_msg)
 	int node_id, num_tasks;
 
 	error("Node failure on %s", nf->nodelist);
-	if (!sls->no_kill) {
-		info("Cancelling job step %u.%u", nf->job_id, nf->step_id);
-		slurm_kill_job_step(nf->job_id, nf->step_id, SIGKILL);
-		/* In an ideal world, we close the socket to this node and
-		 * normally terminate the remaining tasks. In practice this
-		 * is very difficult. The exercise is left to the reader. */
-		exit(1);
-	}
 
 	fail_nodes = hostset_create(nf->nodelist);
 	fail_itr = hostset_iterator_create(fail_nodes);
@@ -906,6 +989,21 @@ _node_fail_handler(struct step_launch_state *sls, slurm_msg_t *fail_msg)
 	hostset_destroy(all_nodes);
 }
 
+/*
+ * FIXME: Verify that tasks on these nodes(s) are still alive.
+ * This message could be the result of the slurmd daemon cold-starting
+ * or a race condition when tasks are starting or terminating.
+ */
+static void
+_step_missing_handler(struct step_launch_state *sls, slurm_msg_t *missing_msg)
+{
+	srun_step_missing_msg_t *step_missing = missing_msg->data;
+
+	debug("Step %u.%u missing from node(s) %s", 
+	      step_missing->job_id, step_missing->step_id,
+	      step_missing->nodelist);
+}
+
 /*
  * The TCP connection that was used to send the task_spawn_io_msg_t message
  * will be used as the user managed IO stream.  The remote end of the TCP stream
@@ -1004,6 +1102,11 @@ _handle_msg(struct step_launch_state *sls, slurm_msg_t *msg)
 		_node_fail_handler(sls, msg);
 		slurm_free_srun_node_fail_msg(msg->data);
 		break;
+	case SRUN_STEP_MISSING:
+		debug2("received notice of missing job step");
+		_step_missing_handler(sls, msg);
+		slurm_free_srun_step_missing_msg(msg->data);
+		break;
 	case PMI_KVS_PUT_REQ:
 		debug2("PMI_KVS_PUT_REQ received");
 		rc = pmi_kvs_put((struct kvs_comm_set *) msg->data);
@@ -1030,6 +1133,38 @@ _handle_msg(struct step_launch_state *sls, slurm_msg_t *msg)
 /**********************************************************************
  * Task launch functions
  **********************************************************************/
+
+/* Since the slurmd usually controls the finishing of tasks to the
+ * controller this needs to happen here if there was a problem with a
+ * task launch to the slurmd since there will not be cleanup of this
+ * anywhere else.
+ */
+static int _fail_step_tasks(slurm_step_ctx_t *ctx, char *node, int ret_code)
+{
+	slurm_msg_t req;
+	step_complete_msg_t msg;
+	int rc = -1;
+	int nodeid = NO_VAL;
+
+	nodeid = nodelist_find(ctx->step_resp->step_layout->node_list, node);
+
+	memset(&msg, 0, sizeof(step_complete_msg_t));
+	msg.job_id = ctx->job_id;
+	msg.job_step_id = ctx->step_resp->job_step_id;
+
+	msg.range_first = msg.range_last = nodeid;
+	msg.step_rc = ret_code;
+
+	slurm_msg_t_init(&req);
+	req.msg_type = REQUEST_STEP_COMPLETE;
+	req.data = &msg;
+	
+	if (slurm_send_recv_controller_rc_msg(&req, &rc) < 0)
+	       return SLURM_ERROR;
+	
+	return SLURM_SUCCESS;
+}
+
 static int _launch_tasks(slurm_step_ctx_t *ctx,
 			 launch_tasks_request_msg_t *launch_msg,
 			 uint32_t timeout)
@@ -1071,13 +1206,17 @@ static int _launch_tasks(slurm_step_ctx_t *ctx,
 		      rc, ret_data->err, ret_data->type);
 		if (rc != SLURM_SUCCESS) {
 			if (ret_data->err)
-				errno = ret_data->err;
+				tot_rc = ret_data->err;
 			else
-				errno = rc;
-			error("Task launch failed on node %s: %m",
+				tot_rc = rc;
+	
+			_fail_step_tasks(ctx, ret_data->node_name, tot_rc);
+
+			errno = tot_rc;
+			tot_rc = SLURM_ERROR;
+			error("Task launch for %u.%u failed on node %s: %m",
+			      ctx->job_id, ctx->step_resp->job_step_id,
 			      ret_data->node_name);
-			rc = SLURM_ERROR;
-			tot_rc = rc;
 		} else {
 #if 0 /* only for debugging, might want to make this a callback */
 			errno = ret_data->err;
diff --git a/src/api/step_launch.h b/src/api/step_launch.h
index e4d99903e..53b72dcd0 100644
--- a/src/api/step_launch.h
+++ b/src/api/step_launch.h
@@ -1,15 +1,16 @@
 /*****************************************************************************\
  *  step_launch.h - launch a parallel job step
  *
- *  $Id: step_launch.h 15262 2008-10-01 22:58:26Z jette $
+ *  $Id: step_launch.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -58,7 +59,6 @@ struct step_launch_state {
 	bitstr_t *tasks_exited;  /* or never started correctly */
 	bool abort;
 	bool abort_action_taken;
-	bool no_kill;
 
 	/* message thread variables */
 	eio_handle_t *msg_handle;
diff --git a/src/api/submit.c b/src/api/submit.c
index c66b34961..e4bdd0266 100644
--- a/src/api/submit.c
+++ b/src/api/submit.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  submit.c - submit a job with supplied contraints
- *  $Id: submit.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: submit.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/suspend.c b/src/api/suspend.c
index d447a8d97..540dd50d0 100644
--- a/src/api/suspend.c
+++ b/src/api/suspend.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  suspend.c - job step suspend and resume functions.
- *  $Id: suspend.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: suspend.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2005-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/topo_info.c b/src/api/topo_info.c
new file mode 100644
index 000000000..4cfa670a7
--- /dev/null
+++ b/src/api/topo_info.c
@@ -0,0 +1,164 @@
+/*****************************************************************************\
+ *  topo_info.c - get/print the switch topology state information of slurm
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#ifdef HAVE_SYS_SYSLOG_H
+#  include <sys/syslog.h>
+#endif
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+
+#include <slurm/slurm.h>
+
+#include "src/common/parse_time.h"
+#include "src/common/slurm_protocol_api.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
+
+/*
+ * slurm_load_topo - issue RPC to get slurm all switch topology configuration 
+ *	information 
+ * IN node_info_msg_pptr - place to store a node configuration pointer
+ * RET 0 or a slurm error code
+ * NOTE: free the response using slurm_free_topo_info_msg
+ */
+extern int slurm_load_topo(topo_info_response_msg_t **resp)
+{
+	int rc;
+	slurm_msg_t req_msg;
+	slurm_msg_t resp_msg;
+	
+	slurm_msg_t_init(&req_msg);
+	slurm_msg_t_init(&resp_msg);
+	req_msg.msg_type = REQUEST_TOPO_INFO;
+	req_msg.data     = NULL;
+	
+	if (slurm_send_recv_controller_msg(&req_msg, &resp_msg) < 0)
+		return SLURM_ERROR;
+		
+	switch (resp_msg.msg_type) {
+	case RESPONSE_TOPO_INFO:
+		*resp = (topo_info_response_msg_t *) resp_msg.data;
+		break;
+	case RESPONSE_SLURM_RC:
+		rc = ((return_code_msg_t *) resp_msg.data)->return_code;
+		slurm_free_return_code_msg(resp_msg.data);	
+		if (rc) 
+			slurm_seterrno_ret(rc);
+		*resp = NULL;
+		break;
+	default:
+		slurm_seterrno_ret(SLURM_UNEXPECTED_MSG_ERROR);
+		break;
+	}
+
+	return SLURM_PROTOCOL_SUCCESS;
+}
+
+/*
+ * slurm_print_topo_info_msg - output information about all switch topology 
+ *	configuration information based upon message as loaded using 
+ *	slurm_load_topo
+ * IN out - file to write to
+ * IN topo_info_msg_ptr - switch topology information message pointer
+ * IN one_liner - print as a single line if not zero
+ */
+extern void slurm_print_topo_info_msg(FILE * out, 
+				      topo_info_response_msg_t *topo_info_msg_ptr, 
+				      int one_liner)
+{
+	int i;
+	topo_info_t *topo_ptr = topo_info_msg_ptr->topo_array;
+
+	if (topo_info_msg_ptr->record_count == 0) {
+		error("No topology information available");
+		return;
+	}
+
+	for (i = 0; i < topo_info_msg_ptr->record_count; i++)
+		slurm_print_topo_record(out, &topo_ptr[i], one_liner);
+}
+
+
+
+/*
+ * slurm_print_topo_record - output information about a specific Slurm topology
+ *	record based upon message as loaded using slurm_load_topo
+ * IN out - file to write to
+ * IN topo_ptr - an individual switch information record pointer
+ * IN one_liner - print as a single line if not zero
+ * RET out - char * containing formatted output (must be freed after call)
+ *	   NULL is returned on failure.
+ */
+extern void slurm_print_topo_record(FILE * out, topo_info_t *topo_ptr, 
+				    int one_liner)
+{
+	char tmp_line[512];
+	char *out_buf = NULL;
+
+	/****** Line 1 ******/
+	snprintf(tmp_line, sizeof(tmp_line),
+		"SwitchName=%s Level=%u LinkSpeed=%u ",
+		topo_ptr->name, topo_ptr->level, topo_ptr->link_speed);
+	xstrcat(out_buf, tmp_line);
+
+	if (topo_ptr->nodes && topo_ptr->nodes[0]) {
+		snprintf(tmp_line, sizeof(tmp_line), 
+			 "Nodes=%s ", topo_ptr->nodes);
+		xstrcat(out_buf, tmp_line);
+	}
+	if (topo_ptr->switches && topo_ptr->switches[0]) {
+		snprintf(tmp_line, sizeof(tmp_line), 
+			 "Switches=%s ", topo_ptr->switches);
+		xstrcat(out_buf, tmp_line);
+	}
+
+	xstrcat(out_buf, "\n");
+	fprintf(out, "%s", out_buf);
+	xfree(out_buf);
+}
diff --git a/src/api/triggers.c b/src/api/triggers.c
index 67981abd3..6d03bfbaa 100644
--- a/src/api/triggers.c
+++ b/src/api/triggers.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/api/update_config.c b/src/api/update_config.c
index b317331d6..c04ffb007 100644
--- a/src/api/update_config.c
+++ b/src/api/update_config.c
@@ -1,14 +1,16 @@
 /****************************************************************************\
  *  update_config.c - request that slurmctld update its configuration
- *  $Id: update_config.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: update_config.c 17334 2009-04-22 23:49:13Z da $
  *****************************************************************************
- *  Copyright (C) 2002 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> and Kevin Tew <tew1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -16,7 +18,7 @@
  *  any later version.
  *
  *  In addition, as a special exception, the copyright holders give permission 
- *  to link the code of portions of this program with the OpenSSL library under 
+ *  to link the code of portions of this program with the OpenSSL library under
  *  certain conditions as described in each individual source file, and 
  *  distribute linked combinations including the two. You must obey the GNU 
  *  General Public License in all respects for all of the code used other than 
@@ -43,6 +45,7 @@
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 
 #include <slurm/slurm.h>
 
@@ -74,6 +77,17 @@ slurm_update_node ( update_node_msg_t * node_msg )
 	return _slurm_update ((void *) node_msg, REQUEST_UPDATE_NODE);
 }
 
+/*
+ * slurm_create_partition - create a new partition, only usable by user root
+ * IN part_msg - description of partition configuration
+ * RET 0 on success, otherwise return -1 and set errno to indicate the error
+ */
+int 
+slurm_create_partition ( update_part_msg_t * part_msg ) 
+{
+	return _slurm_update ((void *) part_msg, REQUEST_CREATE_PARTITION);
+}
+
 /*
  * slurm_update_partition - issue RPC to a partition's configuration per  
  *	request, only usable by user root
@@ -89,7 +103,7 @@ slurm_update_partition ( update_part_msg_t * part_msg )
 /*
  * slurm_delete_partition - issue RPC to delete a partition, only usable 
  *	by user root
- * IN part_msg - description of partition updates
+ * IN part_msg - description of partition to delete
  * RET 0 on success, otherwise return -1 and set errno to indicate the error
  */
 int 
@@ -98,6 +112,69 @@ slurm_delete_partition ( delete_part_msg_t * part_msg )
 	return _slurm_update ((void *) part_msg, REQUEST_DELETE_PARTITION);
 }
 
+/*
+ * slurm_create_reservation - create a new reservation, only usable by user root
+ * IN resv_msg - description of reservation
+ * RET name of reservation on success (caller must free the memory),
+ *	otherwise return NULL and set errno to indicate the error
+ */
+char * 
+slurm_create_reservation (resv_desc_msg_t * resv_msg ) 
+{
+	int rc;
+	char *resv_name = NULL;
+	slurm_msg_t req_msg;
+	slurm_msg_t resp_msg;
+	reservation_name_msg_t *resp;
+
+	slurm_msg_t_init(&req_msg);
+	slurm_msg_t_init(&resp_msg);
+
+	req_msg.msg_type = REQUEST_CREATE_RESERVATION;
+	req_msg.data     = resv_msg; 
+			
+	rc = slurm_send_recv_controller_msg(&req_msg, &resp_msg);
+	switch (resp_msg.msg_type) {
+	case RESPONSE_CREATE_RESERVATION:
+		resp = (reservation_name_msg_t *) resp_msg.data;
+		resv_name = strdup(resp->name);
+		break;
+	case RESPONSE_SLURM_RC:
+		rc = ((return_code_msg_t *) resp_msg.data)->return_code;
+		if (rc) 
+			slurm_seterrno(rc);
+		break;
+	default:
+		slurm_seterrno(SLURM_UNEXPECTED_MSG_ERROR);
+	}
+	slurm_free_msg_data(resp_msg.msg_type, resp_msg.data);
+	return resv_name;
+}
+
+/*
+ * slurm_update_reservation - modify an existing reservation, only usable by 
+ *	user root
+ * IN resv_msg - description of reservation
+ * RET 0 on success, otherwise return -1 and set errno to indicate the error
+ */
+extern int slurm_update_reservation ( resv_desc_msg_t * resv_msg )
+{
+	return _slurm_update ((void *) resv_msg, REQUEST_UPDATE_RESERVATION);
+}
+
+/*
+ * slurm_delete_reservation - issue RPC to delete a reservation, only usable 
+ *	by user root
+ * IN resv_msg - description of reservation to delete
+ * RET 0 on success, otherwise return -1 and set errno to indicate the error
+ */
+int 
+slurm_delete_reservation ( reservation_name_msg_t * resv_msg ) 
+{
+	return _slurm_update ((void *) resv_msg, REQUEST_DELETE_RESERVATION);
+}
+
+
 /* _slurm_update - issue RPC for all update requests */
 static int 
 _slurm_update (void *data, slurm_msg_type_t msg_type)
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index f6127ebe2..50976649a 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -30,6 +30,7 @@ noinst_LTLIBRARIES = 			\
 
 libcommon_la_SOURCES = 			\
 	assoc_mgr.c assoc_mgr.h 	\
+	basil_resv_conf.c basil_resv_conf.h \
 	xmalloc.c xmalloc.h 		\
 	xassert.c xassert.h		\
 	xstring.c xstring.h		\
@@ -56,6 +57,8 @@ libcommon_la_SOURCES = 			\
 	slurm_cred.h       		\
 	slurm_cred.c			\
 	slurm_errno.c			\
+	slurm_priority.c		\
+	slurm_priority.h		\
 	slurm_protocol_api.c		\
 	slurm_protocol_api.h		\
 	slurm_protocol_pack.c		\
@@ -90,13 +93,17 @@ libcommon_la_SOURCES = 			\
 	hostlist.c hostlist.h		\
 	slurm_step_layout.c slurm_step_layout.h	\
 	checkpoint.c checkpoint.h	\
+	select_job_res.c select_job_res.h	\
 	parse_time.c parse_time.h	\
 	job_options.c job_options.h	\
 	global_defaults.c		\
 	timers.c timers.h		\
 	slurm_xlator.h			\
 	stepd_api.c stepd_api.h		\
-	proc_args.c proc_args.h		
+	write_labelled_message.c	\
+	write_labelled_message.h	\
+	proc_args.c proc_args.h		\
+	slurm_strcasestr.c slurm_strcasestr.h		
 
 EXTRA_libcommon_la_SOURCES = 	\
 	$(extra_unsetenv_src)
@@ -118,19 +125,19 @@ libcommon_la_LIBADD   = -ldl
 
 libcommon_la_LDFLAGS  = $(LIB_LDFLAGS) -module --export-dynamic
 
-# This was made so we chould export all symbols from libcommon 
+# This was made so we could export all symbols from libcommon 
 # on multiple platforms
 libcommon_o_SOURCES = 
 libcommon.o :  $(libcommon_la_OBJECTS) $(libcommon_la_DEPENDENCIES) 
-	$(libcommon_la_LINK)  $(libcommon_la_OBJECTS) 
+	$(LINK)  $(libcommon_la_OBJECTS) 
 
-# This was made so we chould export all symbols from libeio 
+# This was made so we could export all symbols from libeio 
 # on multiple platforms
 libeio_o_SOURCES = 
 libeio.o :  $(libeio_la_OBJECTS) $(libeio_la_DEPENDENCIES) 
 	$(LINK)  $(libeio_la_OBJECTS) 
 
-# This was made so we chould export all symbols from libspank 
+# This was made so we could export all symbols from libspank 
 # on multiple platforms
 libspank_o_SOURCES = 
 libspank.o :  $(libspank_la_OBJECTS) $(libspank_la_DEPENDENCIES) 
diff --git a/src/common/Makefile.in b/src/common/Makefile.in
index b614f6703..32ae8009d 100644
--- a/src/common/Makefile.in
+++ b/src/common/Makefile.in
@@ -54,14 +54,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -80,19 +84,21 @@ CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/slurm/slurm.h
 CONFIG_CLEAN_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libcommon_la_DEPENDENCIES =
-am__libcommon_la_SOURCES_DIST = assoc_mgr.c assoc_mgr.h xmalloc.c \
-	xmalloc.h xassert.c xassert.h xstring.c xstring.h xsignal.c \
-	xsignal.h forward.c forward.h strlcpy.c strlcpy.h list.c \
-	list.h net.c net.h fd.c fd.h log.c log.h cbuf.c cbuf.h \
-	safeopen.c safeopen.h bitstring.c bitstring.h mpi.c mpi.h \
-	pack.c pack.h parse_config.c parse_config.h parse_spec.c \
-	parse_spec.h plugin.c plugin.h plugrack.c plugrack.h \
-	print_fields.c print_fields.h read_config.c read_config.h \
-	node_select.c node_select.h env.c env.h slurm_cred.h \
-	slurm_cred.c slurm_errno.c slurm_protocol_api.c \
-	slurm_protocol_api.h slurm_protocol_pack.c \
-	slurm_protocol_pack.h slurm_protocol_util.c \
-	slurm_protocol_util.h slurm_protocol_socket_implementation.c \
+am__libcommon_la_SOURCES_DIST = assoc_mgr.c assoc_mgr.h \
+	basil_resv_conf.c basil_resv_conf.h xmalloc.c xmalloc.h \
+	xassert.c xassert.h xstring.c xstring.h xsignal.c xsignal.h \
+	forward.c forward.h strlcpy.c strlcpy.h list.c list.h net.c \
+	net.h fd.c fd.h log.c log.h cbuf.c cbuf.h safeopen.c \
+	safeopen.h bitstring.c bitstring.h mpi.c mpi.h pack.c pack.h \
+	parse_config.c parse_config.h parse_spec.c parse_spec.h \
+	plugin.c plugin.h plugrack.c plugrack.h print_fields.c \
+	print_fields.h read_config.c read_config.h node_select.c \
+	node_select.h env.c env.h slurm_cred.h slurm_cred.c \
+	slurm_errno.c slurm_priority.c slurm_priority.h \
+	slurm_protocol_api.c slurm_protocol_api.h \
+	slurm_protocol_pack.c slurm_protocol_pack.h \
+	slurm_protocol_util.c slurm_protocol_util.h \
+	slurm_protocol_socket_implementation.c \
 	slurm_protocol_socket_common.h slurm_protocol_common.h \
 	slurm_protocol_interface.h slurm_protocol_defs.c \
 	slurm_protocol_defs.h slurm_rlimits_info.h \
@@ -106,26 +112,29 @@ am__libcommon_la_SOURCES_DIST = assoc_mgr.c assoc_mgr.h xmalloc.c \
 	slurm_selecttype_info.c slurm_resource_info.c \
 	slurm_resource_info.h hostlist.c hostlist.h \
 	slurm_step_layout.c slurm_step_layout.h checkpoint.c \
-	checkpoint.h parse_time.c parse_time.h job_options.c \
-	job_options.h global_defaults.c timers.c timers.h \
-	slurm_xlator.h stepd_api.c stepd_api.h proc_args.c proc_args.h
+	checkpoint.h select_job_res.c select_job_res.h parse_time.c \
+	parse_time.h job_options.c job_options.h global_defaults.c \
+	timers.c timers.h slurm_xlator.h stepd_api.c stepd_api.h \
+	write_labelled_message.c write_labelled_message.h proc_args.c \
+	proc_args.h slurm_strcasestr.c slurm_strcasestr.h
 @HAVE_UNSETENV_FALSE@am__objects_1 = unsetenv.lo
-am_libcommon_la_OBJECTS = assoc_mgr.lo xmalloc.lo xassert.lo \
-	xstring.lo xsignal.lo forward.lo strlcpy.lo list.lo net.lo \
-	fd.lo log.lo cbuf.lo safeopen.lo bitstring.lo mpi.lo pack.lo \
-	parse_config.lo parse_spec.lo plugin.lo plugrack.lo \
+am_libcommon_la_OBJECTS = assoc_mgr.lo basil_resv_conf.lo xmalloc.lo \
+	xassert.lo xstring.lo xsignal.lo forward.lo strlcpy.lo list.lo \
+	net.lo fd.lo log.lo cbuf.lo safeopen.lo bitstring.lo mpi.lo \
+	pack.lo parse_config.lo parse_spec.lo plugin.lo plugrack.lo \
 	print_fields.lo read_config.lo node_select.lo env.lo \
-	slurm_cred.lo slurm_errno.lo slurm_protocol_api.lo \
-	slurm_protocol_pack.lo slurm_protocol_util.lo \
-	slurm_protocol_socket_implementation.lo slurm_protocol_defs.lo \
-	slurm_rlimits_info.lo slurmdbd_defs.lo uid.lo util-net.lo \
-	slurm_auth.lo jobacct_common.lo slurm_accounting_storage.lo \
-	slurm_jobacct_gather.lo slurm_jobcomp.lo switch.lo arg_desc.lo \
-	malloc.lo getopt.lo getopt1.lo $(am__objects_1) \
-	slurm_selecttype_info.lo slurm_resource_info.lo hostlist.lo \
-	slurm_step_layout.lo checkpoint.lo parse_time.lo \
-	job_options.lo global_defaults.lo timers.lo stepd_api.lo \
-	proc_args.lo
+	slurm_cred.lo slurm_errno.lo slurm_priority.lo \
+	slurm_protocol_api.lo slurm_protocol_pack.lo \
+	slurm_protocol_util.lo slurm_protocol_socket_implementation.lo \
+	slurm_protocol_defs.lo slurm_rlimits_info.lo slurmdbd_defs.lo \
+	uid.lo util-net.lo slurm_auth.lo jobacct_common.lo \
+	slurm_accounting_storage.lo slurm_jobacct_gather.lo \
+	slurm_jobcomp.lo switch.lo arg_desc.lo malloc.lo getopt.lo \
+	getopt1.lo $(am__objects_1) slurm_selecttype_info.lo \
+	slurm_resource_info.lo hostlist.lo slurm_step_layout.lo \
+	checkpoint.lo select_job_res.lo parse_time.lo job_options.lo \
+	global_defaults.lo timers.lo stepd_api.lo \
+	write_labelled_message.lo proc_args.lo slurm_strcasestr.lo
 am__EXTRA_libcommon_la_SOURCES_DIST = unsetenv.c unsetenv.h
 libcommon_la_OBJECTS = $(am_libcommon_la_OBJECTS)
 libcommon_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -184,6 +193,10 @@ 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@
@@ -357,6 +370,7 @@ noinst_LTLIBRARIES = \
 
 libcommon_la_SOURCES = \
 	assoc_mgr.c assoc_mgr.h 	\
+	basil_resv_conf.c basil_resv_conf.h \
 	xmalloc.c xmalloc.h 		\
 	xassert.c xassert.h		\
 	xstring.c xstring.h		\
@@ -383,6 +397,8 @@ libcommon_la_SOURCES = \
 	slurm_cred.h       		\
 	slurm_cred.c			\
 	slurm_errno.c			\
+	slurm_priority.c		\
+	slurm_priority.h		\
 	slurm_protocol_api.c		\
 	slurm_protocol_api.h		\
 	slurm_protocol_pack.c		\
@@ -417,13 +433,17 @@ libcommon_la_SOURCES = \
 	hostlist.c hostlist.h		\
 	slurm_step_layout.c slurm_step_layout.h	\
 	checkpoint.c checkpoint.h	\
+	select_job_res.c select_job_res.h	\
 	parse_time.c parse_time.h	\
 	job_options.c job_options.h	\
 	global_defaults.c		\
 	timers.c timers.h		\
 	slurm_xlator.h			\
 	stepd_api.c stepd_api.h		\
-	proc_args.c proc_args.h		
+	write_labelled_message.c	\
+	write_labelled_message.h	\
+	proc_args.c proc_args.h		\
+	slurm_strcasestr.c slurm_strcasestr.h		
 
 EXTRA_libcommon_la_SOURCES = \
 	$(extra_unsetenv_src)
@@ -444,15 +464,15 @@ libspank_la_SOURCES = \
 libcommon_la_LIBADD = -ldl 
 libcommon_la_LDFLAGS = $(LIB_LDFLAGS) -module --export-dynamic
 
-# This was made so we chould export all symbols from libcommon 
+# This was made so we could export all symbols from libcommon 
 # on multiple platforms
 libcommon_o_SOURCES = 
 
-# This was made so we chould export all symbols from libeio 
+# This was made so we could export all symbols from libeio 
 # on multiple platforms
 libeio_o_SOURCES = 
 
-# This was made so we chould export all symbols from libspank 
+# This was made so we could export all symbols from libspank 
 # on multiple platforms
 libspank_o_SOURCES = 
 all: all-am
@@ -521,6 +541,7 @@ distclean-compile:
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arg_desc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assoc_mgr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basil_resv_conf.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitstring.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cbuf.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkpoint.Plo@am__quote@
@@ -554,12 +575,14 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proc_args.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read_config.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/safeopen.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select_job_res.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_accounting_storage.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_auth.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_cred.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_errno.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_jobacct_gather.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_jobcomp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_priority.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_protocol_api.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_protocol_defs.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_protocol_pack.Plo@am__quote@
@@ -569,6 +592,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_rlimits_info.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_selecttype_info.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_step_layout.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurm_strcasestr.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurmdbd_defs.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stepd_api.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strlcpy.Plo@am__quote@
@@ -577,6 +601,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uid.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util-net.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/write_labelled_message.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xassert.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsignal.Plo@am__quote@
@@ -786,7 +811,7 @@ uninstall-am:
 	tags uninstall uninstall-am
 
 libcommon.o :  $(libcommon_la_OBJECTS) $(libcommon_la_DEPENDENCIES) 
-	$(libcommon_la_LINK)  $(libcommon_la_OBJECTS) 
+	$(LINK)  $(libcommon_la_OBJECTS) 
 libeio.o :  $(libeio_la_OBJECTS) $(libeio_la_DEPENDENCIES) 
 	$(LINK)  $(libeio_la_OBJECTS) 
 libspank.o :  $(libspank_la_OBJECTS) $(libspank_la_DEPENDENCIES) 
diff --git a/src/common/arg_desc.c b/src/common/arg_desc.c
index 72b82dfeb..79bb8714b 100644
--- a/src/common/arg_desc.c
+++ b/src/common/arg_desc.c
@@ -3,10 +3,11 @@
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/common/arg_desc.h b/src/common/arg_desc.h
index f365582ef..331c3fb6e 100644
--- a/src/common/arg_desc.h
+++ b/src/common/arg_desc.h
@@ -3,10 +3,11 @@
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/common/assoc_mgr.c b/src/common/assoc_mgr.c
index 3d281c479..befdea1a7 100644
--- a/src/common/assoc_mgr.c
+++ b/src/common/assoc_mgr.c
@@ -7,7 +7,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -43,21 +44,31 @@
 
 #include "src/common/uid.h"
 #include "src/common/xstring.h"
+#include "src/common/slurm_priority.h"
 #include "src/slurmdbd/read_config.h"
 
-static List local_association_list = NULL;
-static List local_qos_list = NULL;
-static List local_user_list = NULL;
-static List assoc_mgr_wckey_list = NULL;
-static char *local_cluster_name = NULL;
+#define ASSOC_USAGE_VERSION 1
+
+acct_association_rec_t *assoc_mgr_root_assoc = NULL;
+uint32_t qos_max_priority = 0;
+
+List assoc_mgr_association_list = NULL;
+List assoc_mgr_qos_list = NULL;
+List assoc_mgr_user_list = NULL;
+List assoc_mgr_wckey_list = NULL;
+
+static char *assoc_mgr_cluster_name = NULL;
+static int setup_childern = 0;
 
 void (*remove_assoc_notify) (acct_association_rec_t *rec) = NULL;
 
 pthread_mutex_t assoc_mgr_association_lock = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t local_file_lock = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t local_qos_lock = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t local_user_lock = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t assoc_mgr_wckey_lock = PTHREAD_MUTEX_INITIALIZER;
+
+pthread_mutex_t assoc_mgr_qos_lock = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t assoc_mgr_user_lock = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t assoc_mgr_file_lock = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t assoc_mgr_wckey_lock = PTHREAD_MUTEX_INITIALIZER;
+
 
 /* 
  * Comparator used for sorting assocs largest cpu to smallest cpu
@@ -74,20 +85,32 @@ static int _sort_assoc_dec(acct_association_rec_t *assoc_a,
 	return -1;
 }
 
+/* you should check for assoc == NULL before this function */
+static void _normalize_assoc_shares(acct_association_rec_t *assoc)
+{
+	acct_association_rec_t *assoc2 = assoc;
+
+	assoc2->shares_norm = 1.0;
+	while(assoc->parent_assoc_ptr) {
+		assoc2->shares_norm *=
+			(double)assoc->shares_raw / (double)assoc->level_shares;
+		assoc = assoc->parent_assoc_ptr;
+	}
+}
+
 static int _addto_used_info(acct_association_rec_t *assoc1,
 			    acct_association_rec_t *assoc2)
 {
 	if(!assoc1 || !assoc2)
 		return SLURM_ERROR;
 
-	assoc1->grp_used_cpu_mins += assoc2->grp_used_cpu_mins;
 	assoc1->grp_used_cpus += assoc2->grp_used_cpus;
 	assoc1->grp_used_nodes += assoc2->grp_used_nodes;
 	assoc1->grp_used_wall += assoc2->grp_used_wall;
 	
 	assoc1->used_jobs += assoc2->used_jobs;
 	assoc1->used_submit_jobs += assoc2->used_submit_jobs;
-	assoc1->used_shares += assoc2->used_shares;
+	assoc1->usage_raw += assoc2->usage_raw;
 
 	return SLURM_SUCCESS;
 }
@@ -97,14 +120,13 @@ static int _clear_used_info(acct_association_rec_t *assoc)
 	if(!assoc)
 		return SLURM_ERROR;
 
-	assoc->grp_used_cpu_mins = 0;
 	assoc->grp_used_cpus = 0;
 	assoc->grp_used_nodes = 0;
-	assoc->grp_used_wall = 0;
 	
 	assoc->used_jobs  = 0;
 	assoc->used_submit_jobs = 0;
-	/* do not reset used_shares if you need to reset it do it
+	/* do not reset usage_raw or grp_used_wall.
+	 * if you need to reset it do it
 	 * else where since sometimes we call this and do not want
 	 * shares reset */
 
@@ -243,13 +265,22 @@ static int _set_assoc_parent_and_user(acct_association_rec_t *assoc,
 			}
 			list_iterator_destroy(itr);
 		}
+		if(assoc->parent_assoc_ptr && setup_childern) {
+			if(!assoc->parent_assoc_ptr->childern_list) 
+				assoc->parent_assoc_ptr->childern_list = 
+					list_create(NULL);
+			list_append(assoc->parent_assoc_ptr->childern_list,
+				    assoc);
+		}	
+			
 		if(assoc == assoc->parent_assoc_ptr) {
 			assoc->parent_assoc_ptr = NULL;
 			error("association %u was pointing to "
 			      "itself as it's parent");
 		}
-	}
-
+	} else 
+		assoc_mgr_root_assoc = assoc;
+		
 	if(assoc->user) {
 		uid_t pw_uid = uid_from_string(assoc->user);
 		if(pw_uid == (uid_t) -1) 
@@ -263,7 +294,7 @@ static int _set_assoc_parent_and_user(acct_association_rec_t *assoc,
 
 	return SLURM_SUCCESS;
 }
-
+	
 static int _post_association_list(List assoc_list)
 {
 	acct_association_rec_t *assoc = NULL;
@@ -280,11 +311,35 @@ static int _post_association_list(List assoc_list)
 		_set_assoc_parent_and_user(assoc, assoc_list, reset);
 		reset = 0;
 	}
+
+	if(setup_childern) {
+		acct_association_rec_t *assoc2 = NULL;
+		ListIterator itr2 = NULL;
+		/* Now set the shares on each level */
+		list_iterator_reset(itr);
+		while((assoc = list_next(itr))) {
+			int count = 0;
+			if(!assoc->childern_list
+			   || !list_count(assoc->childern_list))
+				continue;
+			itr2 = list_iterator_create(assoc->childern_list);
+			while((assoc2 = list_next(itr2))) 
+				count += assoc2->shares_raw;
+			list_iterator_reset(itr2);
+			while((assoc2 = list_next(itr2))) 
+				assoc2->level_shares = count;
+			list_iterator_destroy(itr2);
+		}	
+		/* Now normalize the static shares */
+		list_iterator_reset(itr);
+		while((assoc = list_next(itr))) 
+			_normalize_assoc_shares(assoc);
+	}
 	list_iterator_destroy(itr);
 	//END_TIMER2("load_associations");
 	return SLURM_SUCCESS;
 }
-	
+
 static int _post_user_list(List user_list)
 {
 	acct_user_rec_t *user = NULL;
@@ -324,43 +379,42 @@ static int _post_wckey_list(List wckey_list)
 	list_iterator_destroy(itr);
 	return SLURM_SUCCESS;
 }
-
-static int _get_local_association_list(void *db_conn, int enforce)
+static int _get_assoc_mgr_association_list(void *db_conn, int enforce)
 {
 	acct_association_cond_t assoc_q;
 	uid_t uid = getuid();
 
 //	DEF_TIMERS;
 	slurm_mutex_lock(&assoc_mgr_association_lock);
-	if(local_association_list)
-		list_destroy(local_association_list);
+	if(assoc_mgr_association_list)
+		list_destroy(assoc_mgr_association_list);
 
 	memset(&assoc_q, 0, sizeof(acct_association_cond_t));
-	if(local_cluster_name) {
+	if(assoc_mgr_cluster_name) {
 		assoc_q.cluster_list = list_create(NULL);
-		list_append(assoc_q.cluster_list, local_cluster_name);
+		list_append(assoc_q.cluster_list, assoc_mgr_cluster_name);
 	} else if((enforce & ACCOUNTING_ENFORCE_ASSOCS) && !slurmdbd_conf) {
-		error("_get_local_association_list: "
+		error("_get_assoc_mgr_association_list: "
 		      "no cluster name here going to get "
 		      "all associations.");
 	}
 
 //	START_TIMER;
-	local_association_list =
+	assoc_mgr_association_list =
 		acct_storage_g_get_associations(db_conn, uid, &assoc_q);
 //	END_TIMER2("get_associations");
 
 	if(assoc_q.cluster_list)
 		list_destroy(assoc_q.cluster_list);
 	
-	if(!local_association_list) {
+	if(!assoc_mgr_association_list) {
 		/* create list so we don't keep calling this if there
 		   isn't anything there */
-		local_association_list = 
+		assoc_mgr_association_list = 
 			list_create(destroy_acct_association_rec);
 		slurm_mutex_unlock(&assoc_mgr_association_lock);
 		if(enforce & ACCOUNTING_ENFORCE_ASSOCS) {
-			error("_get_local_association_list: "
+			error("_get_assoc_mgr_association_list: "
 			      "no list was made.");
 			return SLURM_ERROR;
 		} else {
@@ -370,37 +424,54 @@ static int _get_local_association_list(void *db_conn, int enforce)
 		}
 	} 
 
-	_post_association_list(local_association_list);
+	_post_association_list(assoc_mgr_association_list);
 
 	slurm_mutex_unlock(&assoc_mgr_association_lock);
 
 	return SLURM_SUCCESS;
 }
 
-static int _get_local_qos_list(void *db_conn, int enforce)
+static int _get_assoc_mgr_qos_list(void *db_conn, int enforce)
 {
 	uid_t uid = getuid();
 
-	slurm_mutex_lock(&local_qos_lock);
-	if(local_qos_list)
-		list_destroy(local_qos_list);
-	local_qos_list = acct_storage_g_get_qos(db_conn, uid, NULL);
+	slurm_mutex_lock(&assoc_mgr_qos_lock);
+	if(assoc_mgr_qos_list)
+		list_destroy(assoc_mgr_qos_list);
+	assoc_mgr_qos_list = acct_storage_g_get_qos(db_conn, uid, NULL);
 
-	if(!local_qos_list) {
-		slurm_mutex_unlock(&local_qos_lock);
+	if(!assoc_mgr_qos_list) {
+		slurm_mutex_unlock(&assoc_mgr_qos_lock);
 		if(enforce & ACCOUNTING_ENFORCE_ASSOCS) {
-			error("_get_local_qos_list: no list was made.");
+			error("_get_assoc_mgr_qos_list: no list was made.");
 			return SLURM_ERROR;
 		} else {
 			return SLURM_SUCCESS;
 		}		
+	} else {
+		ListIterator itr = list_iterator_create(assoc_mgr_qos_list);
+		acct_qos_rec_t *qos = NULL;
+		while((qos = list_next(itr))) {
+			if(qos->priority > qos_max_priority) 
+				qos_max_priority = qos->priority;
+		}
+
+		if(qos_max_priority) {
+			list_iterator_reset(itr);
+			
+			while((qos = list_next(itr))) {
+				qos->norm_priority = (double)qos->priority 
+					/ (double)qos_max_priority;
+			}
+		}
+		list_iterator_destroy(itr);
 	}
 
-	slurm_mutex_unlock(&local_qos_lock);
+	slurm_mutex_unlock(&assoc_mgr_qos_lock);
 	return SLURM_SUCCESS;
 }
 
-static int _get_local_user_list(void *db_conn, int enforce)
+static int _get_assoc_mgr_user_list(void *db_conn, int enforce)
 {
 	acct_user_cond_t user_q;
 	uid_t uid = getuid();
@@ -408,15 +479,15 @@ static int _get_local_user_list(void *db_conn, int enforce)
 	memset(&user_q, 0, sizeof(acct_user_cond_t));
 	user_q.with_coords = 1;
 	
-	slurm_mutex_lock(&local_user_lock);
-	if(local_user_list)
-		list_destroy(local_user_list);
-	local_user_list = acct_storage_g_get_users(db_conn, uid, &user_q);
+	slurm_mutex_lock(&assoc_mgr_user_lock);
+	if(assoc_mgr_user_list)
+		list_destroy(assoc_mgr_user_list);
+	assoc_mgr_user_list = acct_storage_g_get_users(db_conn, uid, &user_q);
 
-	if(!local_user_list) {
-		slurm_mutex_unlock(&local_user_lock);
+	if(!assoc_mgr_user_list) {
+		slurm_mutex_unlock(&assoc_mgr_user_lock);
 		if(enforce & ACCOUNTING_ENFORCE_ASSOCS) {
-			error("_get_local_user_list: "
+			error("_get_assoc_mgr_user_list: "
 			      "no list was made.");
 			return SLURM_ERROR;
 		} else {
@@ -424,12 +495,13 @@ static int _get_local_user_list(void *db_conn, int enforce)
 		}		
 	} 
 
-	_post_user_list(local_user_list);
+	_post_user_list(assoc_mgr_user_list);
 	
-	slurm_mutex_unlock(&local_user_lock);
+	slurm_mutex_unlock(&assoc_mgr_user_lock);
 	return SLURM_SUCCESS;
 }
 
+
 static int _get_local_wckey_list(void *db_conn, int enforce)
 {
 	acct_wckey_cond_t wckey_q;
@@ -441,9 +513,9 @@ static int _get_local_wckey_list(void *db_conn, int enforce)
 		list_destroy(assoc_mgr_wckey_list);
 
 	memset(&wckey_q, 0, sizeof(acct_wckey_cond_t));
-	if(local_cluster_name) {
+	if(assoc_mgr_cluster_name) {
 		wckey_q.cluster_list = list_create(NULL);
-		list_append(wckey_q.cluster_list, local_cluster_name);
+		list_append(wckey_q.cluster_list, assoc_mgr_cluster_name);
 	} else if((enforce & ACCOUNTING_ENFORCE_WCKEYS) && !slurmdbd_conf) {
 		error("_get_local_wckey_list: "
 		      "no cluster name here going to get "
@@ -481,48 +553,48 @@ static int _get_local_wckey_list(void *db_conn, int enforce)
 	return SLURM_SUCCESS;
 }
 
-static int _refresh_local_association_list(void *db_conn, int enforce)
+static int _refresh_assoc_mgr_association_list(void *db_conn, int enforce)
 {
 	acct_association_cond_t assoc_q;
 	List current_assocs = NULL;
 	uid_t uid = getuid();
 	ListIterator curr_itr = NULL;
-	ListIterator local_itr = NULL;
+	ListIterator assoc_mgr_itr = NULL;
 	acct_association_rec_t *curr_assoc = NULL, *assoc = NULL;
 //	DEF_TIMERS;
 
 	memset(&assoc_q, 0, sizeof(acct_association_cond_t));
-	if(local_cluster_name) {
+	if(assoc_mgr_cluster_name) {
 		assoc_q.cluster_list = list_create(NULL);
-		list_append(assoc_q.cluster_list, local_cluster_name);
+		list_append(assoc_q.cluster_list, assoc_mgr_cluster_name);
 	} else if((enforce & ACCOUNTING_ENFORCE_ASSOCS) && !slurmdbd_conf) {
-		error("_refresh_local_association_list: "
+		error("_refresh_assoc_mgr_association_list: "
 		      "no cluster name here going to get "
 		      "all associations.");
 	}
 
 	slurm_mutex_lock(&assoc_mgr_association_lock);
 
-	current_assocs = local_association_list;
+	current_assocs = assoc_mgr_association_list;
 
 //	START_TIMER;
-	local_association_list = 
+	assoc_mgr_association_list = 
 		acct_storage_g_get_associations(db_conn, uid, &assoc_q);
 //	END_TIMER2("get_associations");
 
 	if(assoc_q.cluster_list)
 		list_destroy(assoc_q.cluster_list);
 	
-	if(!local_association_list) {
-		local_association_list = current_assocs;
+	if(!assoc_mgr_association_list) {
+		assoc_mgr_association_list = current_assocs;
 		slurm_mutex_unlock(&assoc_mgr_association_lock);
 		
-		error("_refresh_local_association_list: "
+		error("_refresh_assoc_mgr_association_list: "
 		      "no new list given back keeping cached one.");
 		return SLURM_ERROR;
 	}
- 
-	_post_association_list(local_association_list);
+
+	_post_association_list(assoc_mgr_association_list);
 	
 	if(!current_assocs) {
 		slurm_mutex_unlock(&assoc_mgr_association_lock);
@@ -530,29 +602,29 @@ static int _refresh_local_association_list(void *db_conn, int enforce)
 	}
 	
 	curr_itr = list_iterator_create(current_assocs);
-	local_itr = list_iterator_create(local_association_list);
+	assoc_mgr_itr = list_iterator_create(assoc_mgr_association_list);
 	
 	/* add used limits We only look for the user associations to
 	 * do the parents since a parent may have moved */
 	while((curr_assoc = list_next(curr_itr))) {
 		if(!curr_assoc->user)
 			continue;
-		while((assoc = list_next(local_itr))) {
+		while((assoc = list_next(assoc_mgr_itr))) {
 			if(assoc->id == curr_assoc->id) 
 				break;
 		}
-		
+
 		while(assoc) {
 			_addto_used_info(assoc, curr_assoc);
 			/* get the parent last since this pointer is
 			   different than the one we are updating from */
 			assoc = assoc->parent_assoc_ptr;
 		}
-		list_iterator_reset(local_itr);			
+		list_iterator_reset(assoc_mgr_itr);			
 	}
 	
 	list_iterator_destroy(curr_itr);
-	list_iterator_destroy(local_itr);
+	list_iterator_destroy(assoc_mgr_itr);
 		
 	slurm_mutex_unlock(&assoc_mgr_association_lock);
 
@@ -565,7 +637,7 @@ static int _refresh_local_association_list(void *db_conn, int enforce)
 /* This only gets a new list if available dropping the old one if
  * needed
  */
-static int _refresh_local_qos_list(void *db_conn, int enforce)
+static int _refresh_assoc_mgr_qos_list(void *db_conn, int enforce)
 {
 	List current_qos = NULL;
 	uid_t uid = getuid();
@@ -573,18 +645,18 @@ static int _refresh_local_qos_list(void *db_conn, int enforce)
 	current_qos = acct_storage_g_get_qos(db_conn, uid, NULL);
 
 	if(!current_qos) {
-		error("_refresh_local_qos_list: "
+		error("_refresh_assoc_mgr_qos_list: "
 		      "no new list given back keeping cached one.");
 		return SLURM_ERROR;
 	}
 
-	slurm_mutex_lock(&local_qos_lock);
-	if(local_qos_list)
-		list_destroy(local_qos_list);
+	slurm_mutex_lock(&assoc_mgr_qos_lock);
+	if(assoc_mgr_qos_list)
+		list_destroy(assoc_mgr_qos_list);
 
-	local_qos_list = current_qos;
+	assoc_mgr_qos_list = current_qos;
 
-	slurm_mutex_unlock(&local_qos_lock);
+	slurm_mutex_unlock(&assoc_mgr_qos_lock);
 
 	return SLURM_SUCCESS;
 }
@@ -592,7 +664,7 @@ static int _refresh_local_qos_list(void *db_conn, int enforce)
 /* This only gets a new list if available dropping the old one if
  * needed 
  */
-static int _refresh_local_user_list(void *db_conn, int enforce)
+static int _refresh_assoc_mgr_user_list(void *db_conn, int enforce)
 {
 	List current_users = NULL;
 	acct_user_cond_t user_q;
@@ -604,20 +676,20 @@ static int _refresh_local_user_list(void *db_conn, int enforce)
 	current_users = acct_storage_g_get_users(db_conn, uid, &user_q);
 
 	if(!current_users) {
-		error("_refresh_local_user_list: "
+		error("_refresh_assoc_mgr_user_list: "
 		      "no new list given back keeping cached one.");
 		return SLURM_ERROR;
 	}
 	_post_user_list(current_users);
 
-	slurm_mutex_lock(&local_user_lock);
+	slurm_mutex_lock(&assoc_mgr_user_lock);
 
-	if(local_user_list) 
-		list_destroy(local_user_list);
+	if(assoc_mgr_user_list) 
+		list_destroy(assoc_mgr_user_list);
 
-	local_user_list = current_users;
+	assoc_mgr_user_list = current_users;
 	
-	slurm_mutex_unlock(&local_user_lock);
+	slurm_mutex_unlock(&assoc_mgr_user_lock);
 
 	return SLURM_SUCCESS;
 }
@@ -625,18 +697,18 @@ static int _refresh_local_user_list(void *db_conn, int enforce)
 /* This only gets a new list if available dropping the old one if
  * needed
  */
-static int _refresh_local_wckey_list(void *db_conn, int enforce)
+static int _refresh_assoc_wckey_list(void *db_conn, int enforce)
 {
 	acct_wckey_cond_t wckey_q;
 	List current_wckeys = NULL;
 	uid_t uid = getuid();
 
 	memset(&wckey_q, 0, sizeof(acct_wckey_cond_t));
-	if(local_cluster_name) {
+	if(assoc_mgr_cluster_name) {
 		wckey_q.cluster_list = list_create(NULL);
-		list_append(wckey_q.cluster_list, local_cluster_name);
+		list_append(wckey_q.cluster_list, assoc_mgr_cluster_name);
 	} else if((enforce & ACCOUNTING_ENFORCE_WCKEYS) && !slurmdbd_conf) {
-		error("_refresh_local_wckey_list: "
+		error("_refresh_assoc_wckey_list: "
 		      "no cluster name here going to get "
 		      "all wckeys.");
 	}
@@ -644,7 +716,7 @@ static int _refresh_local_wckey_list(void *db_conn, int enforce)
 	current_wckeys = acct_storage_g_get_wckeys(db_conn, uid, &wckey_q);
 
 	if(!current_wckeys) {
-		error("_refresh_local_wckey_list: "
+		error("_refresh_assoc_wckey_list: "
 		      "no new list given back keeping cached one.");
 		return SLURM_ERROR;
 	}
@@ -665,6 +737,16 @@ extern int assoc_mgr_init(void *db_conn, assoc_init_args_t *args)
 {
 	static uint16_t enforce = 0;
 	static uint16_t cache_level = ASSOC_MGR_CACHE_ALL;
+	static uint16_t checked_prio = 0;
+
+	if(!checked_prio) {
+		char *prio = slurm_get_priority_type();
+		if(prio && !strcmp(prio, "priority/multifactor")) 
+			setup_childern = 1;
+		
+		xfree(prio);
+		checked_prio = 1;
+	}
 
 	if(args) {
 		enforce = args->enforce;
@@ -681,27 +763,37 @@ extern int assoc_mgr_init(void *db_conn, assoc_init_args_t *args)
 		return SLURM_SUCCESS;
 	}
 
-	if((!local_cluster_name) && !slurmdbd_conf) {
-		xfree(local_cluster_name);
-		local_cluster_name = slurm_get_cluster_name();
+	if((!assoc_mgr_cluster_name) && !slurmdbd_conf) {
+		xfree(assoc_mgr_cluster_name);
+		assoc_mgr_cluster_name = slurm_get_cluster_name();
 	}
 
 	/* check if we can't talk to the db yet */
 	if(errno == ESLURM_ACCESS_DENIED)
 		return SLURM_ERROR;
 	
-	if((!local_association_list) && (cache_level & ASSOC_MGR_CACHE_ASSOC)) 
-		if(_get_local_association_list(db_conn, enforce) == SLURM_ERROR)
+	if((!assoc_mgr_association_list)
+	   && (cache_level & ASSOC_MGR_CACHE_ASSOC)) 
+		if(_get_assoc_mgr_association_list(db_conn, enforce)
+		   == SLURM_ERROR)
 			return SLURM_ERROR;
-
-	if((!local_qos_list) && (cache_level & ASSOC_MGR_CACHE_QOS))
-		if(_get_local_qos_list(db_conn, enforce) == SLURM_ERROR)
+		
+	if((!assoc_mgr_qos_list) && (cache_level & ASSOC_MGR_CACHE_QOS))
+		if(_get_assoc_mgr_qos_list(db_conn, enforce) == SLURM_ERROR)
 			return SLURM_ERROR;
 
-	if((!local_user_list) && (cache_level & ASSOC_MGR_CACHE_USER))
-		if(_get_local_user_list(db_conn, enforce) == SLURM_ERROR)
+	if((!assoc_mgr_user_list) && (cache_level & ASSOC_MGR_CACHE_USER))
+		if(_get_assoc_mgr_user_list(db_conn, enforce) == SLURM_ERROR)
 			return SLURM_ERROR;
-
+	if(assoc_mgr_association_list && !setup_childern) {
+		acct_association_rec_t *assoc = NULL;
+		ListIterator itr =
+			list_iterator_create(assoc_mgr_association_list);
+		while((assoc = list_next(itr))) {
+			log_assoc_rec(assoc, assoc_mgr_qos_list);
+		}
+		list_iterator_destroy(itr);
+	}
 	if((!assoc_mgr_wckey_list) && (cache_level & ASSOC_MGR_CACHE_WCKEY))
 		if(_get_local_wckey_list(db_conn, enforce) == SLURM_ERROR)
 			return SLURM_ERROR;
@@ -714,23 +806,70 @@ extern int assoc_mgr_fini(char *state_save_location)
 	if(state_save_location)
 		dump_assoc_mgr_state(state_save_location);
 
-	if(local_association_list) 
-		list_destroy(local_association_list);
-	if(local_qos_list)
-		list_destroy(local_qos_list);
-	if(local_user_list)
-		list_destroy(local_user_list);
+	if(assoc_mgr_association_list) 
+		list_destroy(assoc_mgr_association_list);
+	if(assoc_mgr_qos_list)
+		list_destroy(assoc_mgr_qos_list);
+	if(assoc_mgr_user_list)
+		list_destroy(assoc_mgr_user_list);
 	if(assoc_mgr_wckey_list)
 		list_destroy(assoc_mgr_wckey_list);
-	xfree(local_cluster_name);
-	local_association_list = NULL;
-	local_qos_list = NULL;
-	local_user_list = NULL;
+	xfree(assoc_mgr_cluster_name);
+	assoc_mgr_association_list = NULL;
+	assoc_mgr_qos_list = NULL;
+	assoc_mgr_user_list = NULL;
 	assoc_mgr_wckey_list = NULL;
 
 	return SLURM_SUCCESS;
 }
 
+extern int assoc_mgr_get_user_assocs(void *db_conn,
+				     acct_association_rec_t *assoc,
+				     int enforce, 
+				     List assoc_list)
+{
+	ListIterator itr = NULL;
+	acct_association_rec_t *found_assoc = NULL;
+	int set = 1;
+
+	xassert(assoc);
+	xassert(assoc->uid != (uint32_t)NO_VAL);
+	xassert(assoc_list);
+
+	if(!assoc_mgr_association_list) {
+		if(_get_assoc_mgr_association_list(db_conn, enforce) 
+		   == SLURM_ERROR)
+			return SLURM_ERROR;
+	}
+
+	if((!assoc_mgr_association_list
+	    || !list_count(assoc_mgr_association_list))
+	   && !(enforce & ACCOUNTING_ENFORCE_ASSOCS)) 
+		return SLURM_SUCCESS;
+
+	slurm_mutex_lock(&assoc_mgr_association_lock);
+	itr = list_iterator_create(assoc_mgr_association_list);
+	while((found_assoc = list_next(itr))) {
+		if(assoc->uid != found_assoc->uid) {
+			debug4("not the right user %u != %u",
+			       assoc->uid, found_assoc->uid);
+			continue;
+		}
+
+		list_append(assoc_list, found_assoc);
+		set = 1;
+	}
+	list_iterator_destroy(itr);
+	slurm_mutex_unlock(&assoc_mgr_association_lock);
+
+	if(set)
+		return SLURM_SUCCESS;
+	else {
+		debug("user %u does not have any associations", assoc->uid);
+		return SLURM_ERROR;
+	}
+}
+
 extern int assoc_mgr_fill_in_assoc(void *db_conn, acct_association_rec_t *assoc,
 				   int enforce, 
 				   acct_association_rec_t **assoc_pptr)
@@ -741,11 +880,13 @@ extern int assoc_mgr_fill_in_assoc(void *db_conn, acct_association_rec_t *assoc,
 
 	if (assoc_pptr)
 		*assoc_pptr = NULL;
-	if(!local_association_list) {
-		if(_get_local_association_list(db_conn, enforce) == SLURM_ERROR)
+	if(!assoc_mgr_association_list) {
+		if(_get_assoc_mgr_association_list(db_conn, enforce) 
+		   == SLURM_ERROR)
 			return SLURM_ERROR;
 	}
-	if((!local_association_list || !list_count(local_association_list))
+	if((!assoc_mgr_association_list
+	    || !list_count(assoc_mgr_association_list))
 	   && !(enforce & ACCOUNTING_ENFORCE_ASSOCS)) 
 		return SLURM_SUCCESS;
 
@@ -765,7 +906,8 @@ extern int assoc_mgr_fill_in_assoc(void *db_conn, acct_association_rec_t *assoc,
 			}
 			memset(&user, 0, sizeof(acct_user_rec_t));
 			user.uid = assoc->uid;
-			if(assoc_mgr_fill_in_user(db_conn, &user, enforce) 
+			if(assoc_mgr_fill_in_user(db_conn, &user,
+						  enforce, NULL) 
 			   == SLURM_ERROR) {
 				if(enforce & ACCOUNTING_ENFORCE_ASSOCS) 
 					return SLURM_ERROR;
@@ -778,14 +920,14 @@ extern int assoc_mgr_fill_in_assoc(void *db_conn, acct_association_rec_t *assoc,
 		}		
 		
 		if(!assoc->cluster)
-			assoc->cluster = local_cluster_name;
+			assoc->cluster = assoc_mgr_cluster_name;
 	}
 /* 	info("looking for assoc of user=%s(%u), acct=%s, " */
 /* 	     "cluster=%s, partition=%s", */
 /* 	     assoc->user, assoc->uid, assoc->acct, */
 /* 	     assoc->cluster, assoc->partition); */
 	slurm_mutex_lock(&assoc_mgr_association_lock);
-	itr = list_iterator_create(local_association_list);
+	itr = list_iterator_create(assoc_mgr_association_list);
 	while((found_assoc = list_next(itr))) {
 		if(assoc->id) {
 			if(assoc->id == found_assoc->id) {
@@ -813,7 +955,7 @@ extern int assoc_mgr_fill_in_assoc(void *db_conn, acct_association_rec_t *assoc,
 			}
 
 			/* only check for on the slurmdbd */
-			if(!local_cluster_name && found_assoc->cluster
+			if(!assoc_mgr_cluster_name && found_assoc->cluster
 			   && strcasecmp(assoc->cluster,
 					 found_assoc->cluster)) {
 				debug4("not the right cluster");
@@ -856,7 +998,7 @@ extern int assoc_mgr_fill_in_assoc(void *db_conn, acct_association_rec_t *assoc,
 	if(!assoc->partition)
 		assoc->partition = ret_assoc->partition;
 
-	assoc->fairshare       = ret_assoc->fairshare;
+	assoc->shares_raw       = ret_assoc->shares_raw;
 
 	assoc->grp_cpu_mins   = ret_assoc->grp_cpu_mins;
 	assoc->grp_cpus        = ret_assoc->grp_cpus;
@@ -877,7 +1019,6 @@ extern int assoc_mgr_fill_in_assoc(void *db_conn, acct_association_rec_t *assoc,
 		assoc->parent_acct       = xstrdup(ret_assoc->parent_acct);
 	} else 
 		assoc->parent_acct       = ret_assoc->parent_acct;
-
 	assoc->parent_assoc_ptr          = ret_assoc->parent_assoc_ptr;
 	assoc->parent_id                 = ret_assoc->parent_id;
 
@@ -887,21 +1028,24 @@ extern int assoc_mgr_fill_in_assoc(void *db_conn, acct_association_rec_t *assoc,
 }
 
 extern int assoc_mgr_fill_in_user(void *db_conn, acct_user_rec_t *user,
-				  int enforce)
+				  int enforce,
+				  acct_user_rec_t **user_pptr)
 {
 	ListIterator itr = NULL;
 	acct_user_rec_t * found_user = NULL;
 
-	if(!local_user_list) 
-		if(_get_local_user_list(db_conn, enforce) == SLURM_ERROR)
+	if(user_pptr)
+		*user_pptr = NULL;
+	if(!assoc_mgr_user_list) 
+		if(_get_assoc_mgr_user_list(db_conn, enforce) == SLURM_ERROR) 
 			return SLURM_ERROR;
 
-	if((!local_user_list || !list_count(local_user_list)) 
+	if((!assoc_mgr_user_list || !list_count(assoc_mgr_user_list))
 	   && !(enforce & ACCOUNTING_ENFORCE_ASSOCS)) 
 		return SLURM_SUCCESS;
 
-	slurm_mutex_lock(&local_user_lock);
-	itr = list_iterator_create(local_user_list);
+	slurm_mutex_lock(&assoc_mgr_user_lock);
+	itr = list_iterator_create(assoc_mgr_user_list);
 	while((found_user = list_next(itr))) {
 		if(user->uid != NO_VAL) {
 			if(user->uid == found_user->uid)
@@ -912,18 +1056,119 @@ extern int assoc_mgr_fill_in_user(void *db_conn, acct_user_rec_t *user,
 	}
 	list_iterator_destroy(itr);
 
-	if(found_user) {
-		/* This needs to be here just incase we don't have a
-		   list since it gets checked outside here and needs
-		   to exist. */
-		if(!found_user->coord_accts)
-			found_user->coord_accts = 
-				list_create(destroy_acct_coord_rec);
-		memcpy(user, found_user, sizeof(acct_user_rec_t));		
-		slurm_mutex_unlock(&local_user_lock);
+	if(!found_user) {
+		slurm_mutex_unlock(&assoc_mgr_user_lock);
+		if(enforce) 
+			return SLURM_ERROR;
+		else
+			return SLURM_SUCCESS;
+	}
+
+	debug3("found correct user");	
+	if(user_pptr)
+		*user_pptr = found_user;
+
+	/* create coord_accts just incase the list does not exist */
+	if(!found_user->coord_accts)
+		found_user->coord_accts = list_create(destroy_acct_coord_rec);
+
+	user->admin_level = found_user->admin_level;
+	if(!user->assoc_list)
+		user->assoc_list = found_user->assoc_list;
+	if(!user->coord_accts)
+		user->coord_accts = found_user->coord_accts;
+	if(!user->default_acct)
+		user->default_acct = found_user->default_acct;
+	if(!user->default_wckey)
+		user->default_wckey = found_user->default_wckey;
+	if(!user->name)
+		user->name = found_user->name;
+
+	slurm_mutex_unlock(&assoc_mgr_user_lock);
+	return SLURM_SUCCESS;
+
+}
+
+extern int assoc_mgr_fill_in_qos(void *db_conn, acct_qos_rec_t *qos,
+				 int enforce,
+				 acct_qos_rec_t **qos_pptr)
+{
+	ListIterator itr = NULL;
+	acct_qos_rec_t * found_qos = NULL;
+
+	if(qos_pptr)
+		*qos_pptr = NULL;
+	if(!assoc_mgr_qos_list) 
+		if(_get_assoc_mgr_qos_list(db_conn, enforce) == SLURM_ERROR)
+			return SLURM_ERROR;
+
+	if((!assoc_mgr_qos_list 
+	    || !list_count(assoc_mgr_qos_list)) && !enforce) 
 		return SLURM_SUCCESS;
+
+	slurm_mutex_lock(&assoc_mgr_qos_lock);
+	itr = list_iterator_create(assoc_mgr_qos_list);
+	while((found_qos = list_next(itr))) {
+		if(qos->id == found_qos->id) 
+			break;
+		else if(qos->name && strcasecmp(qos->name, found_qos->name))
+			break;
+	}
+	list_iterator_destroy(itr);
+	
+	if(!found_qos) {
+		slurm_mutex_unlock(&assoc_mgr_qos_lock);
+		if(enforce) 
+			return SLURM_ERROR;
+		else
+			return SLURM_SUCCESS;
 	}
-	slurm_mutex_unlock(&local_user_lock);
+
+	debug3("found correct qos");
+	if (qos_pptr)
+		*qos_pptr = found_qos;
+
+	if(!qos->description)
+		qos->description = found_qos->description;
+
+	qos->id = found_qos->id;
+
+	if(!qos->job_flags)
+		qos->job_flags = found_qos->job_flags;
+
+	if(!qos->job_list)
+		qos->job_list = found_qos->job_list;
+
+	qos->grp_cpu_mins    = found_qos->grp_cpu_mins;
+	qos->grp_cpus        = found_qos->grp_cpus;
+	qos->grp_jobs        = found_qos->grp_jobs;
+	qos->grp_nodes       = found_qos->grp_nodes;
+	qos->grp_submit_jobs = found_qos->grp_submit_jobs;
+	qos->grp_wall        = found_qos->grp_wall;
+
+	qos->max_cpu_mins_pu = found_qos->max_cpu_mins_pu;
+	qos->max_cpus_pu     = found_qos->max_cpus_pu;
+	qos->max_jobs_pu     = found_qos->max_jobs_pu;
+	qos->max_nodes_pu    = found_qos->max_nodes_pu;
+	qos->max_submit_jobs_pu = found_qos->max_submit_jobs_pu;
+	qos->max_wall_pu     = found_qos->max_wall_pu;
+
+	if(!qos->name) 
+		qos->name = found_qos->name;
+
+	qos->norm_priority = found_qos->norm_priority;
+
+	if(!qos->preemptee_list)
+		qos->preemptee_list = found_qos->preemptee_list;
+	if(!qos->preemptor_list)
+		qos->preemptor_list = found_qos->preemptor_list;
+
+	qos->priority = found_qos->priority;
+
+	if(!qos->user_limit_list)
+		qos->user_limit_list = found_qos->user_limit_list;
+
+	slurm_mutex_unlock(&assoc_mgr_qos_lock);
 	return SLURM_ERROR;
 }
 
@@ -962,7 +1207,8 @@ extern int assoc_mgr_fill_in_wckey(void *db_conn, acct_wckey_rec_t *wckey,
 			memset(&user, 0, sizeof(acct_user_rec_t));
 			user.uid = wckey->uid;
 			user.name = wckey->user;
-			if(assoc_mgr_fill_in_user(db_conn, &user, enforce) 
+			if(assoc_mgr_fill_in_user(db_conn, &user,
+						  enforce, NULL) 
 			   == SLURM_ERROR) {
 				if(enforce & ACCOUNTING_ENFORCE_WCKEYS) 
 					return SLURM_ERROR;
@@ -986,7 +1232,7 @@ extern int assoc_mgr_fill_in_wckey(void *db_conn, acct_wckey_rec_t *wckey,
 			
 		
 		if(!wckey->cluster)
-			wckey->cluster = local_cluster_name;
+			wckey->cluster = assoc_mgr_cluster_name;
 	}
 /* 	info("looking for wckey of user=%s(%u), name=%s, " */
 /* 	     "cluster=%s", */
@@ -1021,7 +1267,7 @@ extern int assoc_mgr_fill_in_wckey(void *db_conn, acct_wckey_rec_t *wckey,
 			}
 
 			/* only check for on the slurmdbd */
-			if(!local_cluster_name) {
+			if(!assoc_mgr_cluster_name) {
 				if(!wckey->cluster) {
 					error("No cluster name was given "
 					      "to check against, "
@@ -1076,21 +1322,21 @@ extern acct_admin_level_t assoc_mgr_get_admin_level(void *db_conn,
 	ListIterator itr = NULL;
 	acct_user_rec_t * found_user = NULL;
 
-	if(!local_user_list) 
-		if(_get_local_user_list(db_conn, 0) == SLURM_ERROR)
+	if(!assoc_mgr_user_list) 
+		if(_get_assoc_mgr_user_list(db_conn, 0) == SLURM_ERROR)
 			return ACCT_ADMIN_NOTSET;
 
-	if(!local_user_list) 
+	if(!assoc_mgr_user_list) 
 		return ACCT_ADMIN_NOTSET;
 
-	slurm_mutex_lock(&local_user_lock);
-	itr = list_iterator_create(local_user_list);
+	slurm_mutex_lock(&assoc_mgr_user_lock);
+	itr = list_iterator_create(assoc_mgr_user_list);
 	while((found_user = list_next(itr))) {
 		if(uid == found_user->uid) 
 			break;
 	}
 	list_iterator_destroy(itr);
-	slurm_mutex_unlock(&local_user_lock);
+	slurm_mutex_unlock(&assoc_mgr_user_lock);
 		
 	if(found_user) 
 		return found_user->admin_level;
@@ -1106,15 +1352,15 @@ extern int assoc_mgr_is_user_acct_coord(void *db_conn,
 	acct_coord_rec_t *acct = NULL;
 	acct_user_rec_t * found_user = NULL;
 
-	if(!local_user_list) 
-		if(_get_local_user_list(db_conn, 0) == SLURM_ERROR)
+	if(!assoc_mgr_user_list) 
+		if(_get_assoc_mgr_user_list(db_conn, 0) == SLURM_ERROR)
 			return ACCT_ADMIN_NOTSET;
 
-	if(!local_user_list) 
+	if(!assoc_mgr_user_list) 
 		return ACCT_ADMIN_NOTSET;
 
-	slurm_mutex_lock(&local_user_lock);
-	itr = list_iterator_create(local_user_list);
+	slurm_mutex_lock(&assoc_mgr_user_lock);
+	itr = list_iterator_create(assoc_mgr_user_list);
 	while((found_user = list_next(itr))) {
 		if(uid == found_user->uid) 
 			break;
@@ -1122,7 +1368,7 @@ extern int assoc_mgr_is_user_acct_coord(void *db_conn,
 	list_iterator_destroy(itr);
 		
 	if(!found_user || !found_user->coord_accts) {
-		slurm_mutex_unlock(&local_user_lock);
+		slurm_mutex_unlock(&assoc_mgr_user_lock);
 		return 0;
 	}
 	itr = list_iterator_create(found_user->coord_accts);
@@ -1133,15 +1379,166 @@ extern int assoc_mgr_is_user_acct_coord(void *db_conn,
 	list_iterator_destroy(itr);
 	
 	if(acct) {
-		slurm_mutex_unlock(&local_user_lock);
+		slurm_mutex_unlock(&assoc_mgr_user_lock);
 		return 1;
 	}
-	slurm_mutex_unlock(&local_user_lock);
+	slurm_mutex_unlock(&assoc_mgr_user_lock);
 
 	return 0;	
 }
 
-extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
+extern List assoc_mgr_get_shares(void *db_conn,
+				 uid_t uid, List acct_list, List user_list)
+{
+	ListIterator itr = NULL;
+	ListIterator user_itr = NULL;
+	ListIterator acct_itr = NULL;
+	acct_association_rec_t *assoc = NULL;
+	association_shares_object_t *share = NULL;
+	List ret_list = NULL;
+	char *tmp_char = NULL;
+	acct_user_rec_t user;
+	int is_admin=1;
+	uint16_t private_data = slurm_get_private_data();
+
+	if(!assoc_mgr_association_list
+	   || !list_count(assoc_mgr_association_list))
+		return NULL;
+
+	memset(&user, 0, sizeof(acct_user_rec_t));
+	user.uid = uid;
+	
+	if(user_list && list_count(user_list)) 
+		user_itr = list_iterator_create(user_list);
+
+	if(acct_list && list_count(acct_list)) 
+		acct_itr = list_iterator_create(acct_list);
+
+	if (private_data & PRIVATE_DATA_USAGE) {
+		uint32_t slurm_uid = slurm_get_slurm_user_id();
+		is_admin = 0;
+		/* Check permissions of the requesting user.
+		 */
+		if((uid == slurm_uid || uid == 0)
+		   || assoc_mgr_get_admin_level(db_conn, uid) 
+		   >= ACCT_ADMIN_OPERATOR) 
+			is_admin = 1;	
+		else {
+			assoc_mgr_fill_in_user(db_conn, &user, 1, NULL);
+		}
+	}
+
+	ret_list = list_create(slurm_destroy_association_shares_object);
+
+	slurm_mutex_lock(&assoc_mgr_association_lock);
+	itr = list_iterator_create(assoc_mgr_association_list);
+	while((assoc = list_next(itr))) {		
+		if(user_itr && assoc->user) {
+			while((tmp_char = list_next(user_itr))) {
+				if(!strcasecmp(tmp_char, assoc->user))
+					break;
+			}
+			list_iterator_reset(user_itr);
+			/* not correct user */
+			if(!tmp_char) 
+				continue;
+		}
+
+		if(acct_itr) {
+			while((tmp_char = list_next(acct_itr))) {
+				if(!strcasecmp(tmp_char, assoc->acct))
+					break;
+			}
+			list_iterator_reset(acct_itr);
+			/* not correct account */
+			if(!tmp_char) 
+				continue;
+		}
+
+		if (private_data & PRIVATE_DATA_USAGE) {
+			if(!is_admin) {
+				ListIterator itr = NULL;
+				acct_coord_rec_t *coord = NULL;
+
+				if(assoc->user && 
+				   !strcmp(assoc->user, user.name)) 
+					goto is_user;
+				
+				if(!user.coord_accts) {
+					debug4("This user isn't a coord.");
+					goto bad_user;
+				}
+
+				if(!assoc->acct) {
+					debug("No account name given "
+					      "in association.");
+					goto bad_user;				
+				}
+				
+				itr = list_iterator_create(user.coord_accts);
+				while((coord = list_next(itr))) {
+					if(!strcasecmp(coord->name, 
+						       assoc->acct))
+						break;
+				}
+				list_iterator_destroy(itr);
+				
+				if(coord) 
+					goto is_user;
+				
+			bad_user:
+				continue;
+			}
+		}
+	is_user:
+
+		share = xmalloc(sizeof(association_shares_object_t));
+		list_append(ret_list, share);
+
+		share->assoc_id = assoc->id;
+		share->cluster = xstrdup(assoc->cluster);
+
+		if(assoc == assoc_mgr_root_assoc) 
+			share->shares_raw = NO_VAL;
+		else 
+			share->shares_raw = assoc->shares_raw;
+
+		share->shares_norm = assoc->shares_norm;
+		share->usage_raw = (uint64_t)assoc->usage_raw;
+
+		if(assoc->user) {
+			/* We only calculate user effective usage when
+			 * we need it
+			 */
+			if(assoc->usage_efctv == (long double)NO_VAL) 
+				priority_g_set_assoc_usage(assoc);
+			
+			share->name = xstrdup(assoc->user);
+			share->parent = xstrdup(assoc->acct);
+			share->user = 1;
+		} else {
+			share->name = xstrdup(assoc->acct);
+			if(!assoc->parent_acct && assoc->parent_assoc_ptr)
+				share->parent = 
+					xstrdup(assoc->parent_assoc_ptr->acct);
+			else
+				share->parent = xstrdup(assoc->parent_acct);
+		}
+		share->usage_norm = (double)assoc->usage_norm;
+		share->usage_efctv = (double)assoc->usage_efctv;
+	}
+	list_iterator_destroy(itr);
+	slurm_mutex_unlock(&assoc_mgr_association_lock);
+	
+	if(user_itr) 
+		list_iterator_destroy(user_itr);
+	if(acct_itr) 
+		list_iterator_destroy(acct_itr);
+		
+	return ret_list;
+}
+
+extern int assoc_mgr_update_assocs(acct_update_object_t *update)
 {
 	acct_association_rec_t * rec = NULL;
 	acct_association_rec_t * object = NULL;
@@ -1150,15 +1547,16 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 	int parents_changed = 0;
 	List remove_list = NULL;
 
-	if(!local_association_list)
+	if(!assoc_mgr_association_list)
 		return SLURM_SUCCESS;
 
 	slurm_mutex_lock(&assoc_mgr_association_lock);
-	itr = list_iterator_create(local_association_list);
+	itr = list_iterator_create(assoc_mgr_association_list);
 	while((object = list_pop(update->objects))) {
-		if(object->cluster && local_cluster_name) {
+		if(object->cluster && assoc_mgr_cluster_name) {
 			/* only update the local clusters assocs */
-			if(strcasecmp(object->cluster, local_cluster_name)) {
+			if(strcasecmp(object->cluster, 
+				      assoc_mgr_cluster_name)) {
 				destroy_acct_association_rec(object);	
 				continue;
 			}
@@ -1197,7 +1595,7 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 				}
 
 				/* only check for on the slurmdbd */
-				if(!local_cluster_name && object->cluster
+				if(!assoc_mgr_cluster_name && object->cluster
 				   && (!rec->cluster
 				       || strcasecmp(object->cluster,
 						     rec->cluster))) {
@@ -1215,9 +1613,17 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 				break;
 			}
 
-			if(object->fairshare != NO_VAL) 
-				rec->fairshare = object->fairshare;
-			
+			if(object->shares_raw != NO_VAL) {
+				rec->shares_raw = object->shares_raw;
+				if(setup_childern) {
+					/* we need to update the shares on
+					   each sibling and child
+					   association now 
+					*/
+					parents_changed = 1;
+				}
+			}
+
 			if(object->grp_cpu_mins != NO_VAL) 
 				rec->grp_cpu_mins = object->grp_cpu_mins;
 			if(object->grp_cpus != NO_VAL) 
@@ -1254,7 +1660,6 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 				// after all new parents have been set we will
 				// reset the parent pointers below
 				parents_changed = 1;
-				
 			}
 
 			if(object->qos_list) {
@@ -1266,11 +1671,12 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 					object->qos_list = NULL;
 				}
 			}
-			if(!slurmdbd_conf) {
+
+			if(!slurmdbd_conf && !parents_changed) {
 				debug("updating assoc %u", rec->id);
-				slurm_mutex_lock(&local_qos_lock);
-				log_assoc_rec(rec, local_qos_list);
-				slurm_mutex_unlock(&local_qos_lock);
+				slurm_mutex_lock(&assoc_mgr_qos_lock);
+				log_assoc_rec(rec, assoc_mgr_qos_list);
+				slurm_mutex_unlock(&assoc_mgr_qos_lock);
 			}
 			break;
 		case ACCT_ADD_ASSOC:
@@ -1278,7 +1684,7 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 				//rc = SLURM_ERROR;
 				break;
 			}
-			list_append(local_association_list, object);
+			list_append(assoc_mgr_association_list, object);
 			object = NULL;
 			parents_changed = 1; // set since we need to
 					     // set the parent
@@ -1288,6 +1694,12 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 				//rc = SLURM_ERROR;
 				break;
 			}
+
+			if(setup_childern)
+				parents_changed = 1; /* set since we need to
+							set the shares
+							of surrounding childern
+						     */
 			if(remove_assoc_notify) {
 				/* since there are some deadlock
 				   issues while inside our lock here
@@ -1300,7 +1712,6 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 				list_append(remove_list, rec);
 			} else
 				list_delete_item(itr);
-
 			break;
 		default:
 			break;
@@ -1314,31 +1725,64 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 	 */
 	if(parents_changed) {
 		int reset = 1;
-		list_sort(local_association_list, 
+		list_sort(assoc_mgr_association_list, 
 			  (ListCmpF)_sort_assoc_dec);
 
 		list_iterator_reset(itr);
+		/* flush the childern lists */
+		if(setup_childern) {
+			while((object = list_next(itr))) {
+				if(object->childern_list)
+					list_flush(object->childern_list);
+			}
+			list_iterator_reset(itr);
+		}
 		while((object = list_next(itr))) {
+			/* The root never changes so just continue
+			   here. */
+			if (object == assoc_mgr_root_assoc)
+				continue;
+
 			/* reset the limits because since a parent
 			   changed we could have different usage
 			*/
 			if(!object->user) {
 				_clear_used_info(object);
-				object->used_shares = 0;
+				object->usage_raw = 0;
+				object->grp_used_wall = 0;
 			}
 			_set_assoc_parent_and_user(
-				object, local_association_list, reset);
+				object, assoc_mgr_association_list, reset);
 			reset = 0;
 		}
 		/* Now that we have set up the parents correctly we
 		   can update the used limits
 		*/
 		list_iterator_reset(itr);
-		while((object = list_next(itr))) {			
+		while((object = list_next(itr))) {
+			if(setup_childern) {
+				int count = 0;
+				ListIterator itr2 = NULL;
+				if(!object->childern_list
+				   || !list_count(object->childern_list))
+					goto is_user;
+				itr2 = list_iterator_create(
+					object->childern_list);
+				while((rec = list_next(itr2))) 
+					count += rec->shares_raw;
+				list_iterator_reset(itr2);
+				while((rec = list_next(itr2))) 
+					rec->level_shares = count;
+				list_iterator_destroy(itr2);
+			}
+		is_user:
 			if(!object->user)
 				continue;
 
 			rec = object;
+			/* look for a parent since we are starting at
+			   the parent instead of the child
+			*/
 			while(object->parent_assoc_ptr) {
 				/* we need to get the parent first
 				   here since we start at the child
@@ -1348,6 +1792,16 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 				_addto_used_info(object, rec);
 			}
 		}
+		if(setup_childern) {
+			/* Now normalize the static shares */
+			slurm_mutex_lock(&assoc_mgr_qos_lock);
+			list_iterator_reset(itr);
+			while((object = list_next(itr))) {
+				_normalize_assoc_shares(object);
+				log_assoc_rec(object, assoc_mgr_qos_list);
+			}
+			slurm_mutex_unlock(&assoc_mgr_qos_lock);
+		}
 	}
 
 	list_iterator_destroy(itr);
@@ -1368,7 +1822,7 @@ extern int assoc_mgr_update_local_assocs(acct_update_object_t *update)
 	return rc;	
 }
 
-extern int assoc_mgr_update_local_wckeys(acct_update_object_t *update)
+extern int assoc_mgr_update_wckeys(acct_update_object_t *update)
 {
 	acct_wckey_rec_t * rec = NULL;
 	acct_wckey_rec_t * object = NULL;
@@ -1382,9 +1836,9 @@ extern int assoc_mgr_update_local_wckeys(acct_update_object_t *update)
 	slurm_mutex_lock(&assoc_mgr_wckey_lock);
 	itr = list_iterator_create(assoc_mgr_wckey_list);
 	while((object = list_pop(update->objects))) {
-		if(object->cluster && local_cluster_name) {
+		if(object->cluster && assoc_mgr_cluster_name) {
 			/* only update the local clusters assocs */
-			if(strcasecmp(object->cluster, local_cluster_name)) {
+			if(strcasecmp(object->cluster, assoc_mgr_cluster_name)) {
 				destroy_acct_wckey_rec(object);	
 				continue;
 			}
@@ -1411,7 +1865,7 @@ extern int assoc_mgr_update_local_wckeys(acct_update_object_t *update)
 				}
 				
 				/* only check for on the slurmdbd */
-				if(!local_cluster_name && object->cluster
+				if(!assoc_mgr_cluster_name && object->cluster
 				   && (!rec->cluster
 				       || strcasecmp(object->cluster,
 						     rec->cluster))) {
@@ -1465,7 +1919,7 @@ extern int assoc_mgr_update_local_wckeys(acct_update_object_t *update)
 	return rc;	
 }
 
-extern int assoc_mgr_update_local_users(acct_update_object_t *update)
+extern int assoc_mgr_update_users(acct_update_object_t *update)
 {
 	acct_user_rec_t * rec = NULL;
 	acct_user_rec_t * object = NULL;
@@ -1474,11 +1928,11 @@ extern int assoc_mgr_update_local_users(acct_update_object_t *update)
 	int rc = SLURM_SUCCESS;
 	uid_t pw_uid;
 
-	if(!local_user_list)
+	if(!assoc_mgr_user_list)
 		return SLURM_SUCCESS;
 
-	slurm_mutex_lock(&local_user_lock);
-	itr = list_iterator_create(local_user_list);
+	slurm_mutex_lock(&assoc_mgr_user_lock);
+	itr = list_iterator_create(assoc_mgr_user_list);
 	while((object = list_pop(update->objects))) {
 		list_iterator_reset(itr);
 		while((rec = list_next(itr))) {
@@ -1522,7 +1976,7 @@ extern int assoc_mgr_update_local_users(acct_update_object_t *update)
 				object->uid = NO_VAL;
 			} else
 				object->uid = pw_uid;
-			list_append(local_user_list, object);
+			list_append(assoc_mgr_user_list, object);
 			object = NULL;
 			break;
 		case ACCT_REMOVE_USER:
@@ -1557,12 +2011,12 @@ extern int assoc_mgr_update_local_users(acct_update_object_t *update)
 		destroy_acct_user_rec(object);			
 	}
 	list_iterator_destroy(itr);
-	slurm_mutex_unlock(&local_user_lock);
+	slurm_mutex_unlock(&assoc_mgr_user_lock);
 
 	return rc;	
 }
 
-extern int assoc_mgr_update_local_qos(acct_update_object_t *update)
+extern int assoc_mgr_update_qos(acct_update_object_t *update)
 {
 	acct_qos_rec_t *rec = NULL;
 	acct_qos_rec_t *object = NULL;
@@ -1574,11 +2028,11 @@ extern int assoc_mgr_update_local_qos(acct_update_object_t *update)
 	acct_association_rec_t *assoc = NULL;
 	int rc = SLURM_SUCCESS;
 
-	if(!local_qos_list)
+	if(!assoc_mgr_qos_list)
 		return SLURM_SUCCESS;
 
-	slurm_mutex_lock(&local_qos_lock);
-	itr = list_iterator_create(local_qos_list);
+	slurm_mutex_lock(&assoc_mgr_qos_lock);
+	itr = list_iterator_create(assoc_mgr_qos_list);
 	while((object = list_pop(update->objects))) {
 		list_iterator_reset(itr);
 		while((rec = list_next(itr))) {
@@ -1594,7 +2048,7 @@ extern int assoc_mgr_update_local_qos(acct_update_object_t *update)
 				//rc = SLURM_ERROR;
 				break;
 			}
-			list_append(local_qos_list, object);
+			list_append(assoc_mgr_qos_list, object);
 			object = NULL;			
 			break;
 		case ACCT_MODIFY_QOS:
@@ -1607,7 +2061,7 @@ extern int assoc_mgr_update_local_qos(acct_update_object_t *update)
 			tmp_char = xstrdup_printf("%d", object->id);
 			slurm_mutex_lock(&assoc_mgr_association_lock);
 			assoc_itr = list_iterator_create(
-				local_association_list);
+				assoc_mgr_association_list);
 			while((assoc = list_next(assoc_itr))) {
 				if(!assoc->qos_list
 				   || !list_count(assoc->qos_list))
@@ -1637,7 +2091,7 @@ extern int assoc_mgr_update_local_qos(acct_update_object_t *update)
 		destroy_acct_qos_rec(object);			
 	}
 	list_iterator_destroy(itr);
-	slurm_mutex_unlock(&local_qos_lock);
+	slurm_mutex_unlock(&assoc_mgr_qos_lock);
 
 	return rc;	
 }
@@ -1649,16 +2103,18 @@ extern int assoc_mgr_validate_assoc_id(void *db_conn,
 	ListIterator itr = NULL;
 	acct_association_rec_t * found_assoc = NULL;
 
-	if(!local_association_list) 
-		if(_get_local_association_list(db_conn, enforce) == SLURM_ERROR)
+	if(!assoc_mgr_association_list) 
+		if(_get_assoc_mgr_association_list(db_conn, enforce) 
+		   == SLURM_ERROR)
 			return SLURM_ERROR;
 
-	if((!local_association_list || !list_count(local_association_list))
+	if((!assoc_mgr_association_list
+	    || !list_count(assoc_mgr_association_list))
 	   && !(enforce & ACCOUNTING_ENFORCE_ASSOCS)) 
 		return SLURM_SUCCESS;
 	
 	slurm_mutex_lock(&assoc_mgr_association_lock);
-	itr = list_iterator_create(local_association_list);
+	itr = list_iterator_create(assoc_mgr_association_list);
 	while((found_assoc = list_next(itr))) {
 		if(assoc_id == found_assoc->id) 
 			break;
@@ -1677,11 +2133,11 @@ extern void assoc_mgr_clear_used_info(void)
 	ListIterator itr = NULL;
 	acct_association_rec_t * found_assoc = NULL;
 
-	if (!local_association_list)
+	if (!assoc_mgr_association_list)
 		return;
 
 	slurm_mutex_lock(&assoc_mgr_association_lock);
-	itr = list_iterator_create(local_association_list);
+	itr = list_iterator_create(assoc_mgr_association_list);
 	while((found_assoc = list_next(itr))) {
 		_clear_used_info(found_assoc);
 	}
@@ -1703,10 +2159,10 @@ extern int dump_assoc_mgr_state(char *state_save_location)
 	pack16(SLURMDBD_VERSION, buffer);
 	pack_time(time(NULL), buffer);
 
-	if(local_association_list) {
+	if(assoc_mgr_association_list) {
 		memset(&msg, 0, sizeof(dbd_list_msg_t));
 		slurm_mutex_lock(&assoc_mgr_association_lock);
-		msg.my_list = local_association_list;
+		msg.my_list = assoc_mgr_association_list;
 		/* let us know what to unpack */
 		pack16(DBD_ADD_ASSOCS, buffer);
 		slurmdbd_pack_list_msg(SLURMDBD_VERSION, 
@@ -1714,26 +2170,26 @@ extern int dump_assoc_mgr_state(char *state_save_location)
 		slurm_mutex_unlock(&assoc_mgr_association_lock);
 	}
 	
-	if(local_user_list) {
+	if(assoc_mgr_user_list) {
 		memset(&msg, 0, sizeof(dbd_list_msg_t));
-		slurm_mutex_lock(&local_user_lock);
-		msg.my_list = local_user_list;
+		slurm_mutex_lock(&assoc_mgr_user_lock);
+		msg.my_list = assoc_mgr_user_list;
 		/* let us know what to unpack */
 		pack16(DBD_ADD_USERS, buffer);
 		slurmdbd_pack_list_msg(SLURMDBD_VERSION, 
 				       DBD_ADD_USERS, &msg, buffer);
-		slurm_mutex_unlock(&local_user_lock);
+		slurm_mutex_unlock(&assoc_mgr_user_lock);
 	}
 
-	if(local_qos_list) {		
+	if(assoc_mgr_qos_list) {		
 		memset(&msg, 0, sizeof(dbd_list_msg_t));
-		slurm_mutex_lock(&local_qos_lock);
-		msg.my_list = local_qos_list;
+		slurm_mutex_lock(&assoc_mgr_qos_lock);
+		msg.my_list = assoc_mgr_qos_list;
 		/* let us know what to unpack */
 		pack16(DBD_ADD_QOS, buffer);
 		slurmdbd_pack_list_msg(SLURMDBD_VERSION, 
 				       DBD_ADD_QOS, &msg, buffer);	
-		slurm_mutex_unlock(&local_qos_lock);
+		slurm_mutex_unlock(&assoc_mgr_qos_lock);
 	}
 
 	if(assoc_mgr_wckey_list) {		
@@ -1748,14 +2204,78 @@ extern int dump_assoc_mgr_state(char *state_save_location)
 	}
 
 	/* write the buffer to file */
-	old_file = xstrdup(state_save_location);
-	xstrcat(old_file, "/assoc_mgr_state.old");
-	reg_file = xstrdup(state_save_location);
-	xstrcat(reg_file, "/assoc_mgr_state");
-	new_file = xstrdup(state_save_location);
-	xstrcat(new_file, "/assoc_mgr_state.new");
+	reg_file = xstrdup_printf("%s/assoc_mgr_state", state_save_location);
+	old_file = xstrdup_printf("%s.old", reg_file);
+	new_file = xstrdup_printf("%s.new", reg_file);
+	
+	slurm_mutex_lock(&assoc_mgr_file_lock);
+	log_fd = creat(new_file, 0600);
+	if (log_fd == 0) {
+		error("Can't save state, create file %s error %m",
+		      new_file);
+		error_code = errno;
+	} else {
+		int pos = 0, nwrite = get_buf_offset(buffer), amount;
+		char *data = (char *)get_buf_data(buffer);
+		high_buffer_size = MAX(nwrite, high_buffer_size);
+		while (nwrite > 0) {
+			amount = write(log_fd, &data[pos], nwrite);
+			if ((amount < 0) && (errno != EINTR)) {
+				error("Error writing file %s, %m", new_file);
+				error_code = errno;
+				break;
+			}
+			nwrite -= amount;
+			pos    += amount;
+		}
+		fsync(log_fd);
+		close(log_fd);
+	}
+	if (error_code)
+		(void) unlink(new_file);
+	else {			/* file shuffle */
+		(void) unlink(old_file);
+		(void) link(reg_file, old_file);
+		(void) unlink(reg_file);
+		(void) link(new_file, reg_file);
+		(void) unlink(new_file);
+	}
+	xfree(old_file);
+	xfree(reg_file);
+	xfree(new_file);
+
+	free_buf(buffer);
+	/* now make a file for assoc_usage */
+
+	buffer = init_buf(high_buffer_size);
+	/* write header: version, time */
+	pack16(ASSOC_USAGE_VERSION, buffer);
+	pack_time(time(NULL), buffer);
+
+	if(assoc_mgr_association_list) {
+		ListIterator itr = NULL;
+		acct_association_rec_t *assoc = NULL;
+		slurm_mutex_lock(&assoc_mgr_association_lock);
+		itr = list_iterator_create(assoc_mgr_association_list);
+		while((assoc = list_next(itr))) {
+			if(!assoc->user)
+				continue;
+			
+			pack32(assoc->id, buffer);
+			/* we only care about the main part here so
+			   anything under 1 we are dropping 
+			*/
+			pack64((uint64_t)assoc->usage_raw, buffer);
+			pack32(assoc->grp_used_wall, buffer);
+		}
+		list_iterator_destroy(itr);
+		slurm_mutex_unlock(&assoc_mgr_association_lock);
+	}
+
+	reg_file = xstrdup_printf("%s/assoc_usage", state_save_location);
+	old_file = xstrdup_printf("%s.old", reg_file);
+	new_file = xstrdup_printf("%s.new", reg_file);
 	
-	slurm_mutex_lock(&local_file_lock);
 	log_fd = creat(new_file, 0600);
 	if (log_fd == 0) {
 		error("Can't save state, create file %s error %m",
@@ -1790,7 +2310,7 @@ extern int dump_assoc_mgr_state(char *state_save_location)
 	xfree(old_file);
 	xfree(reg_file);
 	xfree(new_file);
-	slurm_mutex_unlock(&local_file_lock);
+	slurm_mutex_unlock(&assoc_mgr_file_lock);
 	
 	free_buf(buffer);
 	END_TIMER2("dump_assoc_mgr_state");
@@ -1798,6 +2318,110 @@ extern int dump_assoc_mgr_state(char *state_save_location)
 
 }
 
+extern int load_assoc_usage(char *state_save_location)
+{
+	int data_allocated, data_read = 0, error_code = SLURM_SUCCESS;
+	uint32_t data_size = 0;
+	uint16_t ver = 0;
+	int state_fd;
+	char *data = NULL, *state_file;
+	Buf buffer;
+	time_t buf_time;
+	ListIterator itr = NULL;
+
+	if(!assoc_mgr_association_list)
+		return SLURM_SUCCESS;
+
+	/* read the file */
+	state_file = xstrdup(state_save_location);
+	xstrcat(state_file, "/assoc_usage");
+	//info("looking at the %s file", state_file);
+	slurm_mutex_lock(&assoc_mgr_file_lock);
+	state_fd = open(state_file, O_RDONLY);
+	if (state_fd < 0) {
+		debug2("No Assoc usage file (%s) to recover", state_file);
+		error_code = ENOENT;
+	} else {
+		data_allocated = BUF_SIZE;
+		data = xmalloc(data_allocated);
+		while (1) {
+			data_read = read(state_fd, &data[data_size],
+					 BUF_SIZE);
+			if (data_read < 0) {
+				if (errno == EINTR)
+					continue;
+				else {
+					error("Read error on %s: %m", 
+					      state_file);
+					break;
+				}
+			} else if (data_read == 0)	/* eof */
+				break;
+			data_size      += data_read;
+			data_allocated += data_read;
+			xrealloc(data, data_allocated);
+		}
+		close(state_fd);
+	}
+	xfree(state_file);
+	slurm_mutex_unlock(&assoc_mgr_file_lock);
+
+	buffer = create_buf(data, data_size);
+
+	safe_unpack16(&ver, buffer);
+	debug3("Version in assoc_mgr_state header is %u", ver);
+	if (ver != ASSOC_USAGE_VERSION) {
+		error("***********************************************");
+		error("Can not recover usage_mgr state, incompatable version, "
+		      "got %u need %u", ver, ASSOC_USAGE_VERSION);
+		error("***********************************************");
+		free_buf(buffer);
+		return EFAULT;
+	}
+
+	safe_unpack_time(&buf_time, buffer);
+	
+	slurm_mutex_lock(&assoc_mgr_association_lock);
+	itr = list_iterator_create(assoc_mgr_association_list);
+	while (remaining_buf(buffer) > 0) {
+		uint32_t assoc_id = 0;
+		uint32_t grp_used_wall = 0;
+		uint64_t usage_raw = 0;
+		acct_association_rec_t *assoc = NULL;
+
+		safe_unpack32(&assoc_id, buffer);
+		safe_unpack64(&usage_raw, buffer);
+		safe_unpack32(&grp_used_wall, buffer);
+		while((assoc = list_next(itr))) 
+			if(assoc->id == assoc_id)
+				break;
+		
+		while(assoc) {
+			assoc->grp_used_wall += grp_used_wall;
+			assoc->usage_raw += (long double)usage_raw;
+
+			assoc = assoc->parent_assoc_ptr;
+			if(assoc == assoc_mgr_root_assoc)
+				break;
+		}
+		list_iterator_reset(itr);
+	}
+	list_iterator_destroy(itr);
+	slurm_mutex_unlock(&assoc_mgr_association_lock);
+			
+	free_buf(buffer);
+	return SLURM_SUCCESS;
+
+unpack_error:
+	if(buffer)
+		free_buf(buffer);
+	if(itr) {
+		list_iterator_destroy(itr);
+		slurm_mutex_unlock(&assoc_mgr_association_lock);
+	}
+	return SLURM_ERROR;
+}
+
 extern int load_assoc_mgr_state(char *state_save_location)
 {
 	int data_allocated, data_read = 0, error_code = SLURM_SUCCESS;
@@ -1814,10 +2438,10 @@ extern int load_assoc_mgr_state(char *state_save_location)
 	state_file = xstrdup(state_save_location);
 	xstrcat(state_file, "/assoc_mgr_state");
 	//info("looking at the %s file", state_file);
-	slurm_mutex_lock(&local_file_lock);
+	slurm_mutex_lock(&assoc_mgr_file_lock);
 	state_fd = open(state_file, O_RDONLY);
 	if (state_fd < 0) {
-		info("No job state file (%s) to recover", state_file);
+		debug2("No association state file (%s) to recover", state_file);
 		error_code = ENOENT;
 	} else {
 		data_allocated = BUF_SIZE;
@@ -1842,7 +2466,7 @@ extern int load_assoc_mgr_state(char *state_save_location)
 		close(state_fd);
 	}
 	xfree(state_file);
-	slurm_mutex_unlock(&local_file_lock);
+	slurm_mutex_unlock(&assoc_mgr_file_lock);
 
 	buffer = create_buf(data, data_size);
 
@@ -1850,7 +2474,9 @@ extern int load_assoc_mgr_state(char *state_save_location)
 	debug3("Version in assoc_mgr_state header is %u", ver);
 	if (ver > SLURMDBD_VERSION || ver < SLURMDBD_VERSION_MIN) {
 		error("***********************************************");
-		error("Can not recover assoc_mgr state, incompatable version, got %u need > %u <= %u", ver, SLURMDBD_VERSION_MIN, SLURMDBD_VERSION);
+		error("Can not recover assoc_mgr state, incompatable version, "
+		      "got %u need > %u <= %u", ver,
+		      SLURMDBD_VERSION_MIN, SLURMDBD_VERSION);
 		error("***********************************************");
 		free_buf(buffer);
 		return EFAULT;
@@ -1870,12 +2496,13 @@ extern int load_assoc_mgr_state(char *state_save_location)
 				break;
 			}
 			slurm_mutex_lock(&assoc_mgr_association_lock);
-			if(local_association_list)
-				list_destroy(local_association_list);
-			local_association_list = msg->my_list;
-			_post_association_list(local_association_list);
+			if(assoc_mgr_association_list)
+				list_destroy(assoc_mgr_association_list);
+			assoc_mgr_association_list = msg->my_list;
+			_post_association_list(assoc_mgr_association_list);
+
 			debug("Recovered %u associations", 
-			      list_count(local_association_list));
+			      list_count(assoc_mgr_association_list));
 			slurm_mutex_unlock(&assoc_mgr_association_lock);
 			msg->my_list = NULL;
 			slurmdbd_free_list_msg(SLURMDBD_VERSION, msg);
@@ -1889,14 +2516,14 @@ extern int load_assoc_mgr_state(char *state_save_location)
 				error("No users retrieved");
 				break;
 			}
-			slurm_mutex_lock(&local_user_lock);
-			if(local_user_list)
-				list_destroy(local_user_list);
-			local_user_list = msg->my_list;
-			_post_user_list(local_user_list);
+			slurm_mutex_lock(&assoc_mgr_user_lock);
+			if(assoc_mgr_user_list)
+				list_destroy(assoc_mgr_user_list);
+			assoc_mgr_user_list = msg->my_list;
+			_post_user_list(assoc_mgr_user_list);
 			debug("Recovered %u users", 
-			      list_count(local_user_list));
-			slurm_mutex_unlock(&local_user_lock);
+			      list_count(assoc_mgr_user_list));
+			slurm_mutex_unlock(&assoc_mgr_user_lock);
 			msg->my_list = NULL;
 			slurmdbd_free_list_msg(SLURMDBD_VERSION, msg);
 			break;
@@ -1909,13 +2536,13 @@ extern int load_assoc_mgr_state(char *state_save_location)
 				error("No qos retrieved");
 				break;
 			}
-			slurm_mutex_lock(&local_qos_lock);
-			if(local_qos_list)
-				list_destroy(local_qos_list);
-			local_qos_list = msg->my_list;
+			slurm_mutex_lock(&assoc_mgr_qos_lock);
+			if(assoc_mgr_qos_list)
+				list_destroy(assoc_mgr_qos_list);
+			assoc_mgr_qos_list = msg->my_list;
 			debug("Recovered %u qos", 
-			      list_count(local_qos_list));
-			slurm_mutex_unlock(&local_qos_lock);
+			      list_count(assoc_mgr_qos_list));
+			slurm_mutex_unlock(&assoc_mgr_qos_lock);
 			msg->my_list = NULL;
 			slurmdbd_free_list_msg(SLURMDBD_VERSION, msg);	
 			break;
@@ -1970,25 +2597,27 @@ extern int assoc_mgr_refresh_lists(void *db_conn, assoc_init_args_t *args)
 		return SLURM_SUCCESS;
 	}
 
-	if(cache_level & ASSOC_MGR_CACHE_ASSOC) 
-		if(_refresh_local_association_list(db_conn, enforce)
+	if(cache_level & ASSOC_MGR_CACHE_ASSOC) {
+		if(_refresh_assoc_mgr_association_list(db_conn, enforce)
 		   == SLURM_ERROR)
 			return SLURM_ERROR;
-
+	}
 	if(cache_level & ASSOC_MGR_CACHE_QOS)
-		if(_refresh_local_qos_list(db_conn, enforce) == SLURM_ERROR)
+		if(_refresh_assoc_mgr_qos_list(db_conn, enforce) == SLURM_ERROR)
 			return SLURM_ERROR;
 
 	if(cache_level & ASSOC_MGR_CACHE_USER)
-		if(_refresh_local_user_list(db_conn, enforce) == SLURM_ERROR)
+		if(_refresh_assoc_mgr_user_list(db_conn, enforce)
+		   == SLURM_ERROR)
 			return SLURM_ERROR;
 
 	if(cache_level & ASSOC_MGR_CACHE_WCKEY)
-		if(_refresh_local_wckey_list(db_conn, enforce) == SLURM_ERROR)
+		if(_refresh_assoc_wckey_list(db_conn, enforce) == SLURM_ERROR)
 			return SLURM_ERROR;
 
 	running_cache = 0;
-	
-	return SLURM_SUCCESS;
+
+	return SLURM_SUCCESS;	
 }
 
+
diff --git a/src/common/assoc_mgr.h b/src/common/assoc_mgr.h
index 6c8414d4a..a2c3e9dc1 100644
--- a/src/common/assoc_mgr.h
+++ b/src/common/assoc_mgr.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -62,7 +63,35 @@ typedef struct {
  	void (*remove_assoc_notify) (acct_association_rec_t *rec);
 } assoc_init_args_t;
 
+extern List assoc_mgr_association_list;
+extern List assoc_mgr_qos_list;
+extern List assoc_mgr_user_list;
+extern List assoc_mgr_wckey_list;
+
+extern acct_association_rec_t *assoc_mgr_root_assoc;
 extern pthread_mutex_t assoc_mgr_association_lock;
+extern pthread_mutex_t assoc_mgr_qos_lock;
+extern pthread_mutex_t assoc_mgr_user_lock;
+extern pthread_mutex_t assoc_mgr_file_lock;
+extern pthread_mutex_t assoc_mgr_wckey_lock;
+
+/* 
+ * get info from the storage 
+ * IN:  assoc - acct_association_rec_t with at least cluster and
+ *		    account set for account association.  To get user
+ *		    association set user, and optional partition.
+ *		    Sets "id" field with the association ID.
+ * IN: enforce - return an error if no such association exists
+ * IN/OUT: assoc_list - contains a list of assoc_rec ptrs to
+ *                      associations this user has in the list.  This
+ *                      list should be created with list_create(NULL)
+ *                      since we are putting pointers to memory used elsewhere.
+ * RET: SLURM_SUCCESS on success, else SLURM_ERROR
+ */
+extern int assoc_mgr_get_user_assocs(void *db_conn,
+				     acct_association_rec_t *assoc,
+				     int enforce, 
+				     List assoc_list);
 
 /* 
  * get info from the storage 
@@ -73,6 +102,7 @@ extern pthread_mutex_t assoc_mgr_association_lock;
  * IN: enforce - return an error if no such association exists
  * IN/OUT: assoc_pptr - if non-NULL then return a pointer to the 
  *			acct_association record in cache on success
+ *                      DO NOT FREE.
  * RET: SLURM_SUCCESS on success, else SLURM_ERROR
  */
 extern int assoc_mgr_fill_in_assoc(void *db_conn,
@@ -85,11 +115,26 @@ extern int assoc_mgr_fill_in_assoc(void *db_conn,
  * IN/OUT:  user - acct_user_rec_t with the name set of the user.
  *                 "default_account" will be filled in on
  *                 successful return DO NOT FREE.
+ * IN/OUT: user_pptr - if non-NULL then return a pointer to the 
+ *		       acct_user record in cache on success
+ *                     DO NOT FREE.
  * RET: SLURM_SUCCESS on success SLURM_ERROR else
  */
 extern int assoc_mgr_fill_in_user(void *db_conn, acct_user_rec_t *user,
-				  int enforce);
+				  int enforce,
+				  acct_user_rec_t **user_pptr);
 
+/* 
+ * get info from the storage 
+ * IN/OUT:  qos - acct_qos_rec_t with the id set of the qos.
+ * IN/OUT:  qos_pptr - if non-NULL then return a pointer to the 
+ *		       acct_qos record in cache on success
+ *                     DO NOT FREE.
+ * RET: SLURM_SUCCESS on success SLURM_ERROR else
+ */
+extern int assoc_mgr_fill_in_qos(void *db_conn, acct_qos_rec_t *qos,
+				 int enforce,
+				 acct_qos_rec_t **qos_pptr);
 /* 
  * get info from the storage 
  * IN/OUT:  wckey - acct_wckey_rec_t with the name, cluster and user
@@ -125,33 +170,43 @@ extern int assoc_mgr_is_user_acct_coord(void *db_conn, uint32_t uid,
 extern int assoc_mgr_init(void *db_conn, assoc_init_args_t *args);
 extern int assoc_mgr_fini(char *state_save_location);
 
+/*
+ * get the share information from the association list in the form of
+ * a list containing association_share_object_t's 
+ * IN: uid: uid_t of user issuing the request
+ * IN: acct_list: char * list of accounts you want (NULL for all)
+ * IN: user_list: char * list of user names you want (NULL for all)
+ */
+extern List assoc_mgr_get_shares(
+	void *db_conn, uid_t uid, List acct_list, List user_list);
+
 /* 
- * update associations in local cache 
+ * update associations in cache 
  * IN:  acct_update_object_t *object
  * RET: SLURM_SUCCESS on success (or not found) SLURM_ERROR else
  */
-extern int assoc_mgr_update_local_assocs(acct_update_object_t *update);
+extern int assoc_mgr_update_assocs(acct_update_object_t *update);
 
 /* 
- * update wckeys in local cache 
+ * update wckeys in cache 
  * IN:  acct_update_object_t *object
  * RET: SLURM_SUCCESS on success (or not found) SLURM_ERROR else
  */
-extern int assoc_mgr_update_local_wckeys(acct_update_object_t *update);
+extern int assoc_mgr_update_wckeys(acct_update_object_t *update);
 
 /* 
- * update qos in local cache 
+ * update qos in cache 
  * IN:  acct_update_object_t *object
  * RET: SLURM_SUCCESS on success (or not found) SLURM_ERROR else
  */
-extern int assoc_mgr_update_local_qos(acct_update_object_t *update);
+extern int assoc_mgr_update_qos(acct_update_object_t *update);
 
 /* 
- * update users in local cache 
+ * update users in cache 
  * IN:  acct_update_object_t *object
  * RET: SLURM_SUCCESS on success (or not found) SLURM_ERROR else
  */
-extern int assoc_mgr_update_local_users(acct_update_object_t *update);
+extern int assoc_mgr_update_users(acct_update_object_t *update);
 
 /* 
  * validate that an association ID is still valid 
@@ -177,6 +232,12 @@ extern void assoc_mgr_clear_used_info(void);
  */
 extern int dump_assoc_mgr_state(char *state_save_location);
 
+/*
+ * Read in the usage for association if the database
+ * is up when starting.
+ */
+extern int load_assoc_usage(char *state_save_location);
+
 /*
  * Read in the information of the association mgr if the database
  * isn't up when starting.
diff --git a/src/common/basil_resv_conf.c b/src/common/basil_resv_conf.c
new file mode 100644
index 000000000..7f185cd7b
--- /dev/null
+++ b/src/common/basil_resv_conf.c
@@ -0,0 +1,85 @@
+/*****************************************************************************\
+ *  basil_resv_conf.h - user interface to BASIL for confirming a resource
+ *	reservation. BASIL is Cray's Batch Application Scheduler Interface 
+ *	Layer.
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#if HAVE_CONFIG_H
+#  include "config.h"
+#  if HAVE_INTTYPES_H
+#    include <inttypes.h>
+#  else
+#    if HAVE_STDINT_H
+#      include <stdint.h>
+#    endif
+#  endif		/* HAVE_INTTYPES_H */
+#endif
+
+#include <slurm/slurm_errno.h>
+
+#include "src/common/log.h"
+
+#define BASIL_DEBUG 1
+
+/*
+ * basil_resv_conf - confirm a previously created BASIL resource reservation.
+ *	This must be called from the same container from which the user 
+ *	application is to run. The container is normally a Linux Process
+ *	Group or SGI Process Aggregate (see http://oss.sgi.com/projects/pagg).
+ * IN reservation_id - ID of reservation conform
+ * IN job_id - SLURM job ID
+ * RET 0 or error code
+ */
+extern int basil_resv_conf(char *reservation_id, uint32_t job_id)
+{
+	int error_code = SLURM_SUCCESS;
+#ifdef HAVE_CRAY_XT
+#ifdef APBASIL_LOC
+	/* Issue the BASIL CONFIRM request */
+	if (request_failure) {
+		error("basil confirm of %s error: %s", reservation_id, "TBD");
+		return SLURM_ERROR;
+	}
+	debug("basil confirm of reservation %s by job %u complete", 
+	      reservation_id, job_id);
+#else
+	debug("basil confirm of reservation %s by job %u complete",
+	      reservation_id, job_id);
+#endif	/* APBASIL_LOC */
+#endif	/* HAVE_CRAY_XT */
+	return error_code;
+}
diff --git a/src/common/basil_resv_conf.h b/src/common/basil_resv_conf.h
new file mode 100644
index 000000000..ab72578f9
--- /dev/null
+++ b/src/common/basil_resv_conf.h
@@ -0,0 +1,66 @@
+/*****************************************************************************\
+ *  basil_resv_conf.h - user interface to BASIL for confirming a resource
+ *	reservation. BASIL is Cray's Batch Application Scheduler Interface 
+ *	Layer.
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _HAVE_BASIL_RESV_CONF_H
+#define _HAVE_BASIL_RESV_CONF_H
+
+#if HAVE_CONFIG_H
+#  include "config.h"
+#  if HAVE_INTTYPES_H
+#    include <inttypes.h>
+#  else
+#    if HAVE_STDINT_H
+#      include <stdint.h>
+#    endif
+#  endif		/* HAVE_INTTYPES_H */
+#endif
+
+/*
+ * basil_resv_conf - confirm a previously created BASIL resource reservation.
+ *	This must be called from the same container from which the user 
+ *	application is to run. The container is normally a Linux Process
+ *	Group or SGI Process Aggregate (see http://oss.sgi.com/projects/pagg).
+ * IN reservation_id - ID of reservation conform
+ * IN job_id - SLURM job ID
+ * RET 0 or error code
+ */
+extern int basil_resv_conf(char *reservation_id, uint32_t job_id);
+
+#endif	/* !_HAVE_BASIL_RESV_CONF_H */
diff --git a/src/common/bitstring.c b/src/common/bitstring.c
index a1ecb9473..e99faa631 100644
--- a/src/common/bitstring.c
+++ b/src/common/bitstring.c
@@ -7,10 +7,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jim Garlick <garlick@llnl.gov>, Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -654,12 +655,21 @@ int
 bit_set_count(bitstr_t *b)
 {
 	int count = 0;
-	bitoff_t bit;
+	bitoff_t bit, bit_cnt;
+	int word_size = sizeof(bitstr_t) * 8;
 
 	_assert_bitstr_valid(b);
 
-	for (bit = 0; bit < _bitstr_bits(b); bit += sizeof(bitstr_t)*8)
+	bit_cnt = _bitstr_bits(b);
+	for (bit = 0; bit < bit_cnt; bit += word_size) {
+		if ((bit + word_size - 1) >= bit_cnt)
+			break;
 		count += hweight(b[_bit_word(bit)]);
+	}
+	for ( ; bit < bit_cnt; bit++) {
+		if (bit_test(b, bit))
+			count++;
+	}
 
 	return count;
 }
@@ -671,14 +681,23 @@ extern int
 bit_overlap(bitstr_t *b1, bitstr_t *b2)
 {
 	int count = 0;
-	bitoff_t bit;
-	
+	bitoff_t bit, bit_cnt;
+	int word_size = sizeof(bitstr_t) * 8;
+
 	_assert_bitstr_valid(b1);
 	_assert_bitstr_valid(b2);
 	assert(_bitstr_bits(b1) == _bitstr_bits(b2));
 
-	for (bit = 0; bit < _bitstr_bits(b1); bit += sizeof(bitstr_t)*8) 
+	bit_cnt = _bitstr_bits(b1);
+	for (bit = 0; bit < bit_cnt; bit += word_size) {
+		if ((bit + word_size - 1) >= bit_cnt)
+			break;
 		count += hweight(b1[_bit_word(bit)] & b2[_bit_word(bit)]);
+	}
+	for ( ; bit < bit_cnt; bit++) {
+		if (bit_test(b1, bit) && bit_test(b2, bit))
+			count++;
+	}
 
 	return count;
 }
@@ -824,6 +843,7 @@ bitstr_t *
 bit_pick_cnt(bitstr_t *b, bitoff_t nbits) {
 	bitoff_t bit = 0, new_bits, count = 0;
 	bitstr_t *new;
+	int word_size = sizeof(bitstr_t) * 8;
 
 	_assert_bitstr_valid(b);
 
@@ -838,15 +858,16 @@ bit_pick_cnt(bitstr_t *b, bitoff_t nbits) {
 		int word = _bit_word(bit);
 
 		if (b[word] == 0) {
-			bit += sizeof(bitstr_t)*8;
+			bit += word_size;
 			continue;
 		}
 
 		new_bits = hweight(b[word]);
-		if ((count + new_bits) <= nbits) {
+		if (((count + new_bits) <= nbits) && 
+		    ((bit + word_size - 1) < _bitstr_bits(b))) {
 			new[word] = b[word];
 			count += new_bits;
-			bit += sizeof(bitstr_t)*8;
+			bit += word_size;
 			continue;
 		}
 		while ((bit < _bitstr_bits(b)) && (count < nbits)) {
@@ -930,6 +951,8 @@ bit_unfmt(bitstr_t *b, char *str)
 	int *intvec, *p, rc = 0; 
 
 	_assert_bitstr_valid(b);
+	if (str[0] == '\0')	/* no bits set */
+		return rc;
 	intvec = bitfmt2int(str);
 	if (intvec == NULL) 
 		return -1;
diff --git a/src/common/bitstring.h b/src/common/bitstring.h
index e937b5725..b34d7cb2b 100644
--- a/src/common/bitstring.h
+++ b/src/common/bitstring.h
@@ -8,10 +8,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jim Garlick <garlick@llnl.gov>, Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/checkpoint.c b/src/common/checkpoint.c
index aae9f9f84..ee2a606fc 100644
--- a/src/common/checkpoint.c
+++ b/src/common/checkpoint.c
@@ -1,14 +1,16 @@
 /*****************************************************************************\
  *  checkpoint.c - implementation-independent checkpoint functions
- *  $Id: checkpoint.c 17005 2009-03-24 21:57:43Z da $
+ *  $Id: checkpoint.c 17008 2009-03-24 23:28:13Z da $
  *****************************************************************************
- *  Copyright (C) 2004 The Regents of the University of California.
+ *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -57,18 +59,22 @@
  * at the end of the structure.
  */
 typedef struct slurm_checkpoint_ops {
-	int     (*ckpt_op) (uint16_t op, uint16_t data, 
-			struct step_record * step_ptr, time_t * event_time,
-			 uint32_t *error_code, char **error_msg);
+	int     (*ckpt_op) (uint32_t job_id, uint32_t step_id, 
+			    struct step_record *step_ptr, uint16_t op,
+			    uint16_t data, char *image_dir, time_t *event_time,
+			    uint32_t *error_code, char **error_msg);
 	int	(*ckpt_comp) (struct step_record * step_ptr, time_t event_time,
-			 uint32_t error_code, char *error_msg);
+			      uint32_t error_code, char *error_msg);
 	int	(*ckpt_task_comp) (struct step_record * step_ptr, uint32_t task_id,
-			 time_t event_time, uint32_t error_code, char *error_msg);
+				   time_t event_time, uint32_t error_code, char *error_msg);
 
 	int	(*ckpt_alloc_jobinfo) (check_jobinfo_t *jobinfo);
 	int	(*ckpt_free_jobinfo) (check_jobinfo_t jobinfo);
 	int	(*ckpt_pack_jobinfo) (check_jobinfo_t jobinfo, Buf buffer);
 	int	(*ckpt_unpack_jobinfo) (check_jobinfo_t jobinfo, Buf buffer);
+	int     (*ckpt_stepd_prefork) (void *slurmd_job);
+	int     (*ckpt_signal_tasks) (void *slurmd_job, char *image_dir);
+	int     (*ckpt_restart_task) (void *slurmd_job, char *image_dir, int gtid);
 } slurm_checkpoint_ops_t;
 
 /*
@@ -155,7 +161,10 @@ _slurm_checkpoint_get_ops( slurm_checkpoint_context_t c )
 		"slurm_ckpt_alloc_job",
 		"slurm_ckpt_free_job",
 		"slurm_ckpt_pack_job",
-		"slurm_ckpt_unpack_job"
+		"slurm_ckpt_unpack_job",
+		"slurm_ckpt_stepd_prefork",
+		"slurm_ckpt_signal_tasks",
+		"slurm_ckpt_restart_task"
 	};
         int n_syms = sizeof( syms ) / sizeof( char * );
 
@@ -256,17 +265,20 @@ checkpoint_fini(void)
 
 /* perform some checkpoint operation */
 extern int
-checkpoint_op(uint16_t op, uint16_t data, void * step_ptr,
-		time_t * event_time, uint32_t *error_code, char **error_msg)
+checkpoint_op(uint32_t job_id, uint32_t step_id, 
+	      void *step_ptr, uint16_t op,
+	      uint16_t data, char *image_dir, time_t *event_time,
+	      uint32_t *error_code, char **error_msg)
 {
 	int retval = SLURM_SUCCESS;
 
 	slurm_mutex_lock( &context_lock );
-	if ( g_context )
-		retval = (*(g_context->ops.ckpt_op))(op, data, 
-			(struct step_record *) step_ptr, event_time, 
-			error_code, error_msg);
-	else {
+	if ( g_context ) {
+		retval = (*(g_context->ops.ckpt_op))(job_id, step_id, 
+					(struct step_record *) step_ptr,
+					op, data, image_dir, 
+					event_time, error_code, error_msg);
+	} else {
 		error ("slurm_checkpoint plugin context not initialized");
 		retval = ENOENT;
 	}
@@ -378,3 +390,84 @@ extern int  checkpoint_unpack_jobinfo  (check_jobinfo_t jobinfo, Buf buffer)
 	slurm_mutex_unlock( &context_lock );
 	return retval;
 }
+
+extern int checkpoint_stepd_prefork (void *job)
+{
+        int retval = SLURM_SUCCESS;
+
+        slurm_mutex_lock( &context_lock );
+        if ( g_context )
+                retval = (*(g_context->ops.ckpt_stepd_prefork))(job);
+        else {
+                error ("slurm_checkpoint plugin context not initialized");
+                retval = ENOENT;
+        }
+        slurm_mutex_unlock( &context_lock );
+        return retval;
+}
+
+extern int checkpoint_signal_tasks (void *job, char *image_dir)
+{
+        int retval = SLURM_SUCCESS;
+
+        slurm_mutex_lock( &context_lock );
+        if ( g_context )
+                retval = (*(g_context->ops.ckpt_signal_tasks))(job, image_dir);
+        else {
+                error ("slurm_checkpoint plugin context not initialized");
+                retval = ENOENT;
+        }
+        slurm_mutex_unlock( &context_lock );
+        return retval;
+}
+
+
+extern int checkpoint_restart_task (void *job, char *image_dir, int gtid)
+{
+        int retval = SLURM_SUCCESS;
+
+        slurm_mutex_lock( &context_lock );
+        if ( g_context ) {
+                retval = (*(g_context->ops.ckpt_restart_task))(job, image_dir, 
+							       gtid);
+        } else {
+                error ("slurm_checkpoint plugin context not initialized");
+                retval = ENOENT;
+        }
+        slurm_mutex_unlock( &context_lock );
+        return retval;
+}
+
+extern int checkpoint_tasks (uint32_t job_id, uint32_t step_id, 
+			     time_t begin_time, char *image_dir, 
+			     uint16_t wait, char *nodelist)
+{
+	int rc = SLURM_SUCCESS, temp_rc;
+	checkpoint_tasks_msg_t ckpt_req;
+	slurm_msg_t req_msg;
+	List ret_list;
+        ret_data_info_t *ret_data_info = NULL;
+
+	slurm_msg_t_init(&req_msg);
+	ckpt_req.job_id		= job_id;
+	ckpt_req.job_step_id 	= step_id;
+	ckpt_req.timestamp	= begin_time,
+	ckpt_req.image_dir	= image_dir;
+	req_msg.msg_type	= REQUEST_CHECKPOINT_TASKS;
+	req_msg.data		= &ckpt_req;
+
+	if ((ret_list = slurm_send_recv_msgs(nodelist, &req_msg, (wait*1000),
+					     false))) {
+		while((ret_data_info = list_pop(ret_list))) {
+                        temp_rc = slurm_get_return_code(ret_data_info->type,
+                                                        ret_data_info->data);
+                        if(temp_rc)
+                                rc = temp_rc;
+                }
+	} else {
+                error("slurm_checkpoint_tasks: no list was returned");
+                rc = SLURM_ERROR;
+	}
+	slurm_seterrno(rc);
+	return rc;
+}
diff --git a/src/common/checkpoint.h b/src/common/checkpoint.h
index 0a5c8b92c..ce367c2fe 100644
--- a/src/common/checkpoint.h
+++ b/src/common/checkpoint.h
@@ -1,14 +1,16 @@
 /*****************************************************************************\
  *  checkpoint.h - implementation-independent checkpoint API definitions. 
- *  $Id: checkpoint.h 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: checkpoint.h 16867 2009-03-12 16:35:42Z jette $
  *****************************************************************************
- *  Copyright (C) 2004 The Regents of the University of California.
+ *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -36,8 +38,8 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
 \*****************************************************************************/
 
-#ifndef __CHECKPOINT_H__
-#define __CHECKPOINT_H__
+#ifndef _HAVE_SLURM_CHECKPOINT_H__
+#define _HAVE_SLURM_CHECKPOINT_H__
 
 #include "slurm/slurm.h"
 #include "src/common/macros.h"
@@ -70,9 +72,11 @@ extern int checkpoint_init(char *checkpoint_type);
 /* shutdown checkpoint plugin */
 extern int checkpoint_fini(void);
 
-/* perform many checkpoint operation */
-extern int checkpoint_op(uint16_t op, uint16_t data, void * step_ptr, 
-		time_t * event_time, uint32_t *error_code, char **error_msg);
+/* perform many checkpoint operation on job/step */
+extern int checkpoint_op(uint32_t job_id, uint32_t step_id, 
+			 void *step_ptr, uint16_t op,
+			 uint16_t data, char *image_dir, time_t *event_time,
+			 uint32_t *error_code, char **error_msg);
 
 /* note checkpoint completion */
 extern int checkpoint_comp(void * step_ptr, time_t event_time, uint32_t error_code,
@@ -95,5 +99,18 @@ extern int checkpoint_free_jobinfo(check_jobinfo_t jobinfo);
 extern int  checkpoint_pack_jobinfo  (check_jobinfo_t jobinfo, Buf buffer);
 extern int  checkpoint_unpack_jobinfo  (check_jobinfo_t jobinfo, Buf buffer);
 
-#endif /*__CHECKPOINT_H__*/
+/* create the necessary threads before forking the tasks */
+extern int checkpoint_stepd_prefork (void *slurmd_job);
+
+/* send the checkpoint request to the tasks */
+extern int checkpoint_signal_tasks (void *slurmd_job, char *image_dir);
+
+/* restart the requested job task */
+extern int checkpoint_restart_task(void *slurmd_job, char *image_dir, int gtid);
+
+/* send checkpoint request to specified job/step */
+extern int checkpoint_tasks (uint32_t job_id, uint32_t step_id, 
+			     time_t begin_time, char *image_dir, 
+			     uint16_t wait, char *nodelist);
+#endif /*_HAVE_SLURM_CHECKPOINT_H__*/
 
diff --git a/src/common/daemonize.c b/src/common/daemonize.c
index c396d8431..4182100bf 100644
--- a/src/common/daemonize.c
+++ b/src/common/daemonize.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  daemonize.c - daemonization routine
- *  $Id: daemonize.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: daemonize.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark A. Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/daemonize.h b/src/common/daemonize.h
index 93c57a1c0..39eeff6e9 100644
--- a/src/common/daemonize.h
+++ b/src/common/daemonize.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/slurmd/daemonize.h - function definition for making a daemon
- * $Id: daemonize.h 13672 2008-03-19 23:10:58Z jette $
+ * $Id: daemonize.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/eio.c b/src/common/eio.c
index 3f7ce2ca8..8f5485e09 100644
--- a/src/common/eio.c
+++ b/src/common/eio.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/eio.h b/src/common/eio.h
index 1351ad560..53479bd8d 100644
--- a/src/common/eio.h
+++ b/src/common/eio.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/env.c b/src/common/env.c
index 2b00701c9..78498e265 100644
--- a/src/common/env.c
+++ b/src/common/env.c
@@ -2,13 +2,14 @@
  *  src/common/env.c - add an environment variable to environment vector
  *****************************************************************************
  *  Copyright (C) 2002-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 Mark Grondona <mgrondona@llnl.gov>, Danny Auble <da@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -146,6 +147,48 @@ static bool _discard_env(char *name, char *value)
 	return false;
 }
 
+static void _set_distribution(task_dist_states_t distribution,
+			      char **dist, char **lllp_dist)
+{
+	if (((int)distribution >= 0)
+	    &&  (distribution != SLURM_DIST_UNKNOWN)) {
+		switch(distribution) {
+		case SLURM_DIST_CYCLIC:
+			*dist      = "cyclic";
+			break;
+		case SLURM_DIST_BLOCK:
+			*dist      = "block";
+			break;
+		case SLURM_DIST_PLANE:
+			*dist      = "plane";
+			*lllp_dist = "plane";
+			break;
+		case SLURM_DIST_ARBITRARY:
+			*dist      = "arbitrary";
+			break;
+		case SLURM_DIST_CYCLIC_CYCLIC:
+			*dist      = "cyclic";
+			*lllp_dist = "cyclic";
+			break;
+		case SLURM_DIST_CYCLIC_BLOCK:
+			*dist      = "cyclic";
+			*lllp_dist = "block";
+			break;
+		case SLURM_DIST_BLOCK_CYCLIC:
+			*dist      = "block";
+			*lllp_dist = "cyclic";
+			break;
+		case SLURM_DIST_BLOCK_BLOCK:
+			*dist      = "block";
+			*lllp_dist = "block";
+			break;
+		default:
+			error("unknown dist, type %d", distribution);
+			break;
+		}
+	}
+}
+
 /*
  * Return the number of elements in the environment `env'
  */
@@ -265,8 +308,7 @@ char *getenvp(char **env, const char *name)
 int setup_env(env_t *env)
 {
 	int rc = SLURM_SUCCESS;
-	char *dist = NULL;
-	char *lllp_dist = NULL;
+	char *dist = NULL, *lllp_dist = NULL;
 	char addrbuf[INET_ADDRSTRLEN];
 
 	if (env == NULL)
@@ -319,74 +361,44 @@ int setup_env(env_t *env)
 		rc = SLURM_FAILURE;
 	} 
 
-	if (((int)env->distribution >= 0)
-	&&  (env->distribution != SLURM_DIST_UNKNOWN)) {
-		switch(env->distribution) {
-		case SLURM_DIST_CYCLIC:
-			dist      = "cyclic";
-			lllp_dist = "";
-			break;
-		case SLURM_DIST_BLOCK:
-			dist      = "block";
-			lllp_dist = "";
-			break;
-		case SLURM_DIST_PLANE:
-			dist      = "plane";
-			lllp_dist = "plane";
-			break;
-		case SLURM_DIST_ARBITRARY:
-			dist      = "arbitrary";
-			lllp_dist = "";
-			break;
-		case SLURM_DIST_CYCLIC_CYCLIC:
-			dist      = "cyclic";
-			lllp_dist = "cyclic";
-			break;
-		case SLURM_DIST_CYCLIC_BLOCK:
-			dist      = "cyclic";
-			lllp_dist = "block";
-			break;
-		case SLURM_DIST_BLOCK_CYCLIC:
-			dist      = "block";
-			lllp_dist = "cyclic";
-			break;
-		case SLURM_DIST_BLOCK_BLOCK:
-			dist      = "block";
-			lllp_dist = "block";
-			break;
-		default:
-			error("unknown dist, type %d", env->distribution);
-			dist      = "unknown";
-			lllp_dist = "unknown";
-			break;
-		}
-
+	_set_distribution(env->distribution, &dist, &lllp_dist);
+	if(dist) 
 		if (setenvf(&env->env, "SLURM_DISTRIBUTION", "%s", dist)) {
 			error("Can't set SLURM_DISTRIBUTION env variable");
 			rc = SLURM_FAILURE;
 		}
 
-		if (setenvf(&env->env, "SLURM_DIST_PLANESIZE", "%d", 
+	if(env->distribution == SLURM_DIST_PLANE) 
+		if (setenvf(&env->env, "SLURM_DIST_PLANESIZE", "%u", 
 			    env->plane_size)) {
-			error("Can't set SLURM_DIST_PLANESIZE env variable");
+			error("Can't set SLURM_DIST_PLANESIZE "
+			      "env variable");
 			rc = SLURM_FAILURE;
 		}
-
+	
+	if(lllp_dist)
 		if (setenvf(&env->env, "SLURM_DIST_LLLP", "%s", lllp_dist)) {
 			error("Can't set SLURM_DIST_LLLP env variable");
 			rc = SLURM_FAILURE;
 		}
-	}
+	
 	
 	if (env->cpu_bind_type) {
 		char *str_verbose, *str_bind_type, *str_bind_list;
 		char *str_bind;
 		int len;
 
-		unsetenvp(env->env, "SLURM_CPU_BIND_VERBOSE");
-		unsetenvp(env->env, "SLURM_CPU_BIND_TYPE");
-		unsetenvp(env->env, "SLURM_CPU_BIND_LIST");
-		unsetenvp(env->env, "SLURM_CPU_BIND");
+		if (env->batch_flag) {
+			unsetenvp(env->env, "SBATCH_CPU_BIND_VERBOSE");
+			unsetenvp(env->env, "SBATCH_CPU_BIND_TYPE");
+			unsetenvp(env->env, "SBATCH_CPU_BIND_LIST");
+			unsetenvp(env->env, "SBATCH_CPU_BIND");
+		} else {
+			unsetenvp(env->env, "SLURM_CPU_BIND_VERBOSE");
+			unsetenvp(env->env, "SLURM_CPU_BIND_TYPE");
+			unsetenvp(env->env, "SLURM_CPU_BIND_LIST");
+			unsetenvp(env->env, "SLURM_CPU_BIND");
+		}
 
 		str_verbose = xstrdup ("");
 		if (env->cpu_bind_type & CPU_BIND_VERBOSE) {
@@ -394,11 +406,6 @@ int setup_env(env_t *env)
 		} else {
 			xstrcat(str_verbose, "quiet");
 		}
-		if (setenvf(&env->env, "SLURM_CPU_BIND_VERBOSE", str_verbose)) {
-			error("Unable to set SLURM_CPU_BIND_VERBOSE");
-			rc = SLURM_FAILURE;
-		}
-
 		str_bind_type = xstrdup ("");
 		if (env->cpu_bind_type & CPU_BIND_TO_THREADS) {
 			xstrcat(str_bind_type, "threads,");
@@ -406,6 +413,8 @@ int setup_env(env_t *env)
 			xstrcat(str_bind_type, "cores,");
 		} else if (env->cpu_bind_type & CPU_BIND_TO_SOCKETS) {
 			xstrcat(str_bind_type, "sockets,");
+		} else if (env->cpu_bind_type & CPU_BIND_TO_LDOMS) {
+			xstrcat(str_bind_type, "ldoms,");
 		}
 		if (env->cpu_bind_type & CPU_BIND_NONE) {
 			xstrcat(str_bind_type, "none");
@@ -415,6 +424,12 @@ int setup_env(env_t *env)
 			xstrcat(str_bind_type, "map_cpu:");
 		} else if (env->cpu_bind_type & CPU_BIND_MASK) {
 			xstrcat(str_bind_type, "mask_cpu:");
+		} else if (env->cpu_bind_type & CPU_BIND_LDRANK) {
+			xstrcat(str_bind_type, "rank_ldom");
+		} else if (env->cpu_bind_type & CPU_BIND_LDMAP) {
+			xstrcat(str_bind_type, "map_ldom:");
+		} else if (env->cpu_bind_type & CPU_BIND_LDMASK) {
+			xstrcat(str_bind_type, "mask_ldom:");
 		}
 		len = strlen(str_bind_type);
 		if (len) {		/* remove a possible trailing ',' */
@@ -422,31 +437,57 @@ int setup_env(env_t *env)
 			    	str_bind_type[len-1] = '\0';
 			}
 		}
-		if (setenvf(&env->env, "SLURM_CPU_BIND_TYPE", str_bind_type)) {
-			error("Unable to set SLURM_CPU_BIND_TYPE");
-			rc = SLURM_FAILURE;
-		}
-
 		str_bind_list = xstrdup ("");
 		if (env->cpu_bind) {
 			xstrcat(str_bind_list, env->cpu_bind);
 		}
-		if (setenvf(&env->env, "SLURM_CPU_BIND_LIST", str_bind_list)) {
-			error("Unable to set SLURM_CPU_BIND_LIST");
-			rc = SLURM_FAILURE;
-		}
-
 		str_bind = xstrdup ("");
 		xstrcat(str_bind, str_verbose);
-		if (str_bind[0]) {		/* add ',' if str_verbose */
+		if (str_bind[0] && str_bind_type && str_bind_type[0])
 			xstrcatchar(str_bind, ',');
-		}
 		xstrcat(str_bind, str_bind_type);
 		xstrcat(str_bind, str_bind_list);
 
-		if (setenvf(&env->env, "SLURM_CPU_BIND", str_bind)) {
-			error("Unable to set SLURM_CPU_BIND");
-			rc = SLURM_FAILURE;
+		if (env->batch_flag) {
+			if (setenvf(&env->env, "SBATCH_CPU_BIND_VERBOSE",
+				    str_verbose)) {
+				error("Unable to set SBATCH_CPU_BIND_VERBOSE");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SBATCH_CPU_BIND_TYPE",
+				    str_bind_type)) {
+				error("Unable to set SBATCH_CPU_BIND_TYPE");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SBATCH_CPU_BIND_LIST",
+				    str_bind_list)) {
+				error("Unable to set SBATCH_CPU_BIND_LIST");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SBATCH_CPU_BIND", str_bind)) {
+				error("Unable to set SBATCH_CPU_BIND");
+				rc = SLURM_FAILURE;
+			}
+		} else {
+			if (setenvf(&env->env, "SLURM_CPU_BIND_VERBOSE",
+				    str_verbose)) {
+				error("Unable to set SLURM_CPU_BIND_VERBOSE");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SLURM_CPU_BIND_TYPE",
+				    str_bind_type)) {
+				error("Unable to set SLURM_CPU_BIND_TYPE");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SLURM_CPU_BIND_LIST",
+				    str_bind_list)) {
+				error("Unable to set SLURM_CPU_BIND_LIST");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SLURM_CPU_BIND", str_bind)) {
+				error("Unable to set SLURM_CPU_BIND");
+				rc = SLURM_FAILURE;
+			}
 		}
 	}
 
@@ -454,10 +495,17 @@ int setup_env(env_t *env)
 		char *str_verbose, *str_bind_type, *str_bind_list;
 		char *str_bind;
 
-		unsetenvp(env->env, "SLURM_MEM_BIND_VERBOSE");
-		unsetenvp(env->env, "SLURM_MEM_BIND_TYPE");
-		unsetenvp(env->env, "SLURM_MEM_BIND_LIST");
-		unsetenvp(env->env, "SLURM_MEM_BIND");
+		if (env->batch_flag) {
+			unsetenvp(env->env, "SBATCH_MEM_BIND_VERBOSE");
+			unsetenvp(env->env, "SBATCH_MEM_BIND_TYPE");
+			unsetenvp(env->env, "SBATCH_MEM_BIND_LIST");
+			unsetenvp(env->env, "SBATCH_MEM_BIND");
+		} else {
+			unsetenvp(env->env, "SLURM_MEM_BIND_VERBOSE");
+			unsetenvp(env->env, "SLURM_MEM_BIND_TYPE");
+			unsetenvp(env->env, "SLURM_MEM_BIND_LIST");
+			unsetenvp(env->env, "SLURM_MEM_BIND");
+		}
 
 		str_verbose = xstrdup ("");
 		if (env->mem_bind_type & MEM_BIND_VERBOSE) {
@@ -465,11 +513,6 @@ int setup_env(env_t *env)
 		} else {
 			xstrcat(str_verbose, "quiet");
 		}
-		if (setenvf(&env->env, "SLURM_MEM_BIND_VERBOSE", str_verbose)) {
-			error("Unable to set SLURM_MEM_BIND_VERBOSE");
-			rc = SLURM_FAILURE;
-		}
- 
 		str_bind_type = xstrdup ("");
 		if (env->mem_bind_type & MEM_BIND_NONE) {
 			xstrcat(str_bind_type, "none");
@@ -482,20 +525,10 @@ int setup_env(env_t *env)
 		} else if (env->mem_bind_type & MEM_BIND_LOCAL) {
 			xstrcat(str_bind_type, "local");
 		}
-		if (setenvf(&env->env, "SLURM_MEM_BIND_TYPE", str_bind_type)) {
-			error("Unable to set SLURM_MEM_BIND_TYPE");
-			rc = SLURM_FAILURE;
-		}
-
 		str_bind_list = xstrdup ("");
 		if (env->mem_bind) {
 			xstrcat(str_bind_list, env->mem_bind);
 		}
-		if (setenvf(&env->env, "SLURM_MEM_BIND_LIST", str_bind_list)) {
-			error("Unable to set SLURM_MEM_BIND_LIST");
-			rc = SLURM_FAILURE;
-		}
-
 		str_bind = xstrdup ("");
 		xstrcat(str_bind, str_verbose);
 		if (str_bind[0]) {		/* add ',' if str_verbose */
@@ -504,9 +537,46 @@ int setup_env(env_t *env)
 		xstrcat(str_bind, str_bind_type);
 		xstrcat(str_bind, str_bind_list);
 
-		if (setenvf(&env->env, "SLURM_MEM_BIND", str_bind)) {
-			error("Unable to set SLURM_MEM_BIND");
-			rc = SLURM_FAILURE;
+		if (env->batch_flag) {
+			if (setenvf(&env->env, "SBATCH_MEM_BIND_VERBOSE",
+				    str_verbose)) {
+				error("Unable to set SBATCH_MEM_BIND_VERBOSE");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SBATCH_MEM_BIND_TYPE",
+				    str_bind_type)) {
+				error("Unable to set SBATCH_MEM_BIND_TYPE");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SBATCH_MEM_BIND_LIST",
+				    str_bind_list)) {
+				error("Unable to set SBATCH_MEM_BIND_LIST");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SBATCH_MEM_BIND", str_bind)) {
+				error("Unable to set SBATCH_MEM_BIND");
+				rc = SLURM_FAILURE;
+			}
+		} else {
+			if (setenvf(&env->env, "SLURM_MEM_BIND_VERBOSE",
+				    str_verbose)) {
+				error("Unable to set SLURM_MEM_BIND_VERBOSE");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SLURM_MEM_BIND_TYPE",
+				    str_bind_type)) {
+				error("Unable to set SLURM_MEM_BIND_TYPE");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SLURM_MEM_BIND_LIST",
+				    str_bind_list)) {
+				error("Unable to set SLURM_MEM_BIND_LIST");
+				rc = SLURM_FAILURE;
+			}
+			if (setenvf(&env->env, "SLURM_MEM_BIND", str_bind)) {
+				error("Unable to set SLURM_MEM_BIND");
+				rc = SLURM_FAILURE;
+			}
 		}
 	}
 
@@ -528,8 +598,8 @@ int setup_env(env_t *env)
 		rc = SLURM_FAILURE;
 	}
 
-#ifdef HAVE_BG
 	if(env->select_jobinfo) {
+#ifdef HAVE_BG
 		char *bgl_part_id = NULL;
 		select_g_get_jobinfo(env->select_jobinfo, 
 				     SELECT_DATA_BLOCK_ID, &bgl_part_id);
@@ -560,13 +630,36 @@ int setup_env(env_t *env)
 			error("Can't set MPIRUN_PARTITION "
 			      "environment variable");
 		
-	}
 #endif
 
-	if (env->jobid >= 0
-	    && setenvf(&env->env, "SLURM_JOBID", "%d", env->jobid)) {
-		error("Unable to set SLURM_JOBID environment");
-		rc = SLURM_FAILURE;
+#ifdef HAVE_CRAY_XT
+		char *resv_id = NULL;
+		select_g_get_jobinfo(env->select_jobinfo, 
+				     SELECT_DATA_RESV_ID, &resv_id);
+		if (resv_id) {
+			if(setenvf(&env->env, 
+				   "BASIL_RESVERATION_ID", "%s", resv_id))
+				rc = SLURM_FAILURE;
+		} else 
+			rc = SLURM_FAILURE;
+		
+		if(rc == SLURM_FAILURE)
+			error("Can't set BASIL_RESVERATION_ID "
+			      "environment variable");
+		xfree(resv_id);
+#endif
+	}
+
+	if (env->jobid >= 0) {
+		if (setenvf(&env->env, "SLURM_JOB_ID", "%d", env->jobid)) {
+			error("Unable to set SLURM_JOB_ID environment");
+			rc = SLURM_FAILURE;
+		}
+		/* and for backwards compatability... */
+		if (setenvf(&env->env, "SLURM_JOBID", "%d", env->jobid)) {
+			error("Unable to set SLURM_JOBID environment");
+			rc = SLURM_FAILURE;
+		}
 	}
 	
 	if (env->nodeid >= 0
@@ -618,13 +711,7 @@ int setup_env(env_t *env)
 		error ("Can't set SLURM_SRUN_COMM_PORT env variable");
 		rc = SLURM_FAILURE;
 	}
-	if (env->comm_hostname
-	    && setenvf (&env->env, "SLURM_SRUN_COMM_HOST", "%s", 
-			env->comm_hostname)) {
-		error ("Can't set SLURM_SRUN_COMM_HOST env variable");
-		rc = SLURM_FAILURE;
-	}
-		
+
 	if (env->cli) {
 		
 		slurm_print_slurm_addr (env->cli, addrbuf, INET_ADDRSTRLEN);
@@ -683,11 +770,19 @@ int setup_env(env_t *env)
 		error("Can't set SLURM_PTY_WIN_ROW env variable");
 		rc = SLURM_FAILURE;
 	}
-	if (env->ckpt_path 
-        && setenvf(&env->env, "SLURM_CHECKPOINT_PATH", "%s", env->ckpt_path)) {
-		error("Can't set SLURM_CHECKPOINT_PATH env variable");
+	if (env->ckpt_dir 
+	&& setenvf(&env->env, "SLURM_CHECKPOINT_IMAGE_DIR", "%s", 
+		   env->ckpt_dir)) {
+		error("Can't set SLURM_CHECKPOINT_IMAGE_DIR env variable");
+		rc = SLURM_FAILURE;
+	}
+
+	if (env->restart_cnt &&
+	    setenvf(&env->env, "SLURM_RESTART_COUNT", "%u", env->restart_cnt)) {
+		error("Can't set SLURM_RESTART_COUNT env variable");
 		rc = SLURM_FAILURE;
 	}
+
 	return rc;
 }
 
@@ -743,8 +838,8 @@ static char *_uint16_array_to_str(int array_len, const uint16_t *array)
 /*
  * The cpus-per-node representation in SLURM (and perhaps tasks-per-node
  * in the future) is stored in a compressed format comprised of two
- * equal-length arrays of uint32_t, and an integer holding the array length.
- * In one array an element represents a count (number of cpus, number of tasks,
+ * equal-length arrays, and an integer holding the array length.  In one
+ * array an element represents a count (number of cpus, number of tasks,
  * etc.), and the corresponding element in the other array contains the
  * number of times the count is repeated sequentially in the uncompressed
  * something-per-node array.
@@ -753,7 +848,7 @@ static char *_uint16_array_to_str(int array_len, const uint16_t *array)
  * array.  Free with xfree().
  */
 extern char *uint32_compressed_to_str(uint32_t array_len,
-				      const uint32_t *array,
+				      const uint16_t *array,
 				      const uint32_t *array_reps)
 {
 	int i;
@@ -799,7 +894,11 @@ void
 env_array_for_job(char ***dest, const resource_allocation_response_msg_t *alloc,
 		  const job_desc_msg_t *desc)
 {
+#ifdef HAVE_CRAY_XT
+	char *resv_id = NULL;
+#endif
 	char *tmp = NULL;
+	char *dist = NULL, *lllp_dist = NULL;
 	slurm_step_layout_t *step_layout = NULL;
 	uint32_t num_tasks = desc->num_tasks;
 
@@ -809,7 +908,20 @@ env_array_for_job(char ***dest, const resource_allocation_response_msg_t *alloc,
 	env_array_overwrite_fmt(dest, "SLURM_JOB_NODELIST", "%s",
 				alloc->node_list);
 
-	tmp = uint32_compressed_to_str((uint32_t)alloc->num_cpu_groups,
+	_set_distribution(desc->task_dist, &dist, &lllp_dist);
+	if(dist) 
+		env_array_overwrite_fmt(dest, "SLURM_DISTRIBUTION", "%s",
+					dist);
+	
+	if(desc->task_dist == SLURM_DIST_PLANE) 
+		env_array_overwrite_fmt(dest, "SLURM_DIST_PLANESIZE",
+					"%u", desc->plane_size);
+	
+	if(lllp_dist)
+		env_array_overwrite_fmt(dest, "SLURM_DIST_LLLP", "%s", 
+					lllp_dist);
+
+	tmp = uint32_compressed_to_str(alloc->num_cpu_groups,
 					alloc->cpus_per_node,
 					alloc->cpu_count_reps);
 	env_array_overwrite_fmt(dest, "SLURM_JOB_CPUS_PER_NODE", "%s", tmp);
@@ -842,6 +954,16 @@ env_array_for_job(char ***dest, const resource_allocation_response_msg_t *alloc,
 		xfree(tmp);
 	}
 #endif
+
+#ifdef HAVE_CRAY_XT
+	select_g_get_jobinfo(alloc->select_jobinfo, SELECT_DATA_RESV_ID,
+			     &resv_id);
+	if (resv_id) {
+		env_array_overwrite_fmt(dest, "BASIL_RESERVATION_ID", "%s",
+					resv_id);
+	}
+#endif
+
 	/* OBSOLETE, but needed by MPI, do not remove */
 	env_array_overwrite_fmt(dest, "SLURM_JOBID", "%u", alloc->job_id);
 	env_array_overwrite_fmt(dest, "SLURM_NNODES", "%u", alloc->node_cnt);
@@ -908,21 +1030,16 @@ extern void
 env_array_for_batch_job(char ***dest, const batch_job_launch_msg_t *batch,
 			const char *node_name)
 {
-	char *tmp = getenvp(batch->environment, "SLURM_CPUS_PER_TASK");
+	char *tmp = NULL;
 	uint32_t num_nodes = 0;
 	uint32_t num_cpus = 0;
 	int i;
 	slurm_step_layout_t *step_layout = NULL;
-	int cpus_per_task = 1;
 	uint32_t num_tasks = batch->nprocs;
+	uint16_t cpus_per_task;
 
-	if(tmp) 
-		cpus_per_task = atoi(tmp);
-	
 	/* There is no explicit node count in the batch structure,
-	   so we need to calculate the node count. We also need to
-	   figure out the explicit cpu count so we can figure out the
-	   cpus_per_task. */
+	 * so we need to calculate the node count. */
 	for (i = 0; i < batch->num_cpu_groups; i++) {
 		num_nodes += batch->cpu_count_reps[i];
 		num_cpus += batch->cpu_count_reps[i] * batch->cpus_per_node[i];
@@ -931,7 +1048,8 @@ env_array_for_batch_job(char ***dest, const batch_job_launch_msg_t *batch,
 	env_array_overwrite_fmt(dest, "SLURM_JOB_ID", "%u", batch->job_id);
 	env_array_overwrite_fmt(dest, "SLURM_JOB_NUM_NODES", "%u", num_nodes);
 	env_array_overwrite_fmt(dest, "SLURM_JOB_NODELIST", "%s", batch->nodes);
-	tmp = uint32_compressed_to_str((uint32_t)batch->num_cpu_groups,
+
+	tmp = uint32_compressed_to_str(batch->num_cpu_groups,
 					batch->cpus_per_node,
 					batch->cpu_count_reps);
 	env_array_overwrite_fmt(dest, "SLURM_JOB_CPUS_PER_NODE", "%s", tmp);
@@ -952,17 +1070,25 @@ env_array_for_batch_job(char ***dest, const batch_job_launch_msg_t *batch,
 	if(num_tasks) 
 		env_array_overwrite_fmt(dest, "SLURM_NPROCS", "%u", 
 					num_tasks);
-	else 
-		num_tasks = num_cpus / cpus_per_task;
+
+	if((batch->cpus_per_task != 0) &&
+	   (batch->cpus_per_task != (uint16_t) NO_VAL))
+		cpus_per_task = batch->cpus_per_task;
+	else
+		cpus_per_task = 1;	/* default value */
+	if (cpus_per_task > 1) {
+		env_array_overwrite_fmt(dest, "SLURM_CPUS_PER_TASK", "%u",
+					cpus_per_task);
+	}
+	num_tasks = num_cpus / cpus_per_task;
 	
 	step_layout = slurm_step_layout_create(batch->nodes,
 					       batch->cpus_per_node,
 					       batch->cpu_count_reps,
 					       num_nodes,
 					       num_tasks,
-					       (uint16_t)cpus_per_task,
-					       (uint16_t)
-					       SLURM_DIST_BLOCK,
+					       cpus_per_task,
+					       (uint16_t)SLURM_DIST_BLOCK,
 					       (uint16_t)NO_VAL);
 	tmp = _uint16_array_to_str(step_layout->node_cnt,
 				   step_layout->tasks);
@@ -976,16 +1102,17 @@ env_array_for_batch_job(char ***dest, const batch_job_launch_msg_t *batch,
  * overwriting any environment variables of the same name.  If the address
  * pointed to by "dest" is NULL, memory will automatically be xmalloc'ed.
  * The array is terminated by a NULL pointer, and thus is suitable for
- * use by execle() and other env_array_* functions.
+ * use by execle() and other env_array_* functions.  If preserve_env is
+ * true, the variables SLURM_NNODES and SLURM_NPROCS remain unchanged.
  *
  * Sets variables:
  *	SLURM_STEP_ID
  *	SLURM_STEP_NUM_NODES
  *	SLURM_STEP_NUM_TASKS
  *	SLURM_STEP_TASKS_PER_NODE
- *	SLURM_STEP_LAUNCHER_HOSTNAME
  *	SLURM_STEP_LAUNCHER_PORT
  *	SLURM_STEP_LAUNCHER_IPADDR
+ *	SLURM_STEP_RESV_PORTS
  *
  * Sets OBSOLETE variables:
  *	SLURM_STEPID
@@ -1000,8 +1127,8 @@ env_array_for_batch_job(char ***dest, const batch_job_launch_msg_t *batch,
 void
 env_array_for_step(char ***dest, 
 		   const job_step_create_response_msg_t *step,
-		   const char *launcher_hostname,
-		   uint16_t launcher_port)
+		   uint16_t launcher_port,
+		   bool preserve_env)
 {
 	char *tmp;
 
@@ -1015,17 +1142,21 @@ env_array_for_step(char ***dest,
 	env_array_overwrite_fmt(dest, "SLURM_STEP_NUM_TASKS",
 				"%u", step->step_layout->task_cnt);
 	env_array_overwrite_fmt(dest, "SLURM_STEP_TASKS_PER_NODE", "%s", tmp);
-	env_array_overwrite_fmt(dest, "SLURM_STEP_LAUNCHER_HOSTNAME",
-				"%s", launcher_hostname);
 	env_array_overwrite_fmt(dest, "SLURM_STEP_LAUNCHER_PORT",
 				"%hu", launcher_port);
+	if (step->resv_ports) {
+		env_array_overwrite_fmt(dest, "SLURM_STEP_RESV_PORTS",
+					"%s", step->resv_ports);
+	}
 
 	/* OBSOLETE, but needed by MPI, do not remove */
 	env_array_overwrite_fmt(dest, "SLURM_STEPID", "%u", step->job_step_id);
-	env_array_overwrite_fmt(dest, "SLURM_NNODES",
-				"%hu", step->step_layout->node_cnt);
-	env_array_overwrite_fmt(dest, "SLURM_NPROCS",
-				"%u", step->step_layout->task_cnt);
+	if (!preserve_env) {
+		env_array_overwrite_fmt(dest, "SLURM_NNODES",
+					"%hu", step->step_layout->node_cnt);
+		env_array_overwrite_fmt(dest, "SLURM_NPROCS",
+					"%u", step->step_layout->task_cnt);
+	}
 	env_array_overwrite_fmt(dest, "SLURM_TASKS_PER_NODE", "%s", tmp);
 	env_array_overwrite_fmt(dest, "SLURM_SRUN_COMM_PORT",
 				"%hu", launcher_port);
diff --git a/src/common/env.h b/src/common/env.h
index edcbb7ef5..94a715e53 100644
--- a/src/common/env.h
+++ b/src/common/env.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -40,7 +41,7 @@ typedef struct env_options {
 	bool nprocs_set;	/* true if nprocs explicitly set */
 	bool cpus_set;		/* true if cpus_per_task explicitly set */
 	task_dist_states_t distribution; /* --distribution=, -m dist	*/
-	int plane_size;         /* plane_size for SLURM_DIST_PLANE */
+	uint16_t plane_size;         /* plane_size for SLURM_DIST_PLANE */
 	cpu_bind_type_t
 		cpu_bind_type;	/* --cpu_bind=			*/
 	char *cpu_bind;		/* binding map for map/mask_cpu	*/
@@ -55,7 +56,6 @@ typedef struct env_options {
 	char *nodelist;		/* nodelist in string form */
 	char **env;             /* job environment */
 	uint16_t comm_port;	/* srun's communication port */
-	char *comm_hostname;	/* srun's hostname */
 	slurm_addr *cli;	/* launch node address */
 	slurm_addr *self;
 	int jobid;		/* assigned job id */
@@ -73,7 +73,9 @@ typedef struct env_options {
 	uint16_t pty_port;	/* used to communicate window size changes */
 	uint8_t ws_col;		/* window size, columns */
 	uint8_t ws_row;		/* window size, row count */
-	char *ckpt_path;	/* --ckpt-path=                 */
+	char *ckpt_dir;		/* --ckpt-dir=                 */
+	uint16_t restart_cnt;	/* count of job restarts	*/
+	uint16_t batch_flag;	/* 1 if batch: queued job with script */
 } env_t;
 
 
@@ -136,20 +138,21 @@ extern void env_array_for_batch_job(char ***dest,
 				    const char* node_name);
 
 /*
- * Set in "dest the environment variables relevant to a SLURM job step,
+ * Set in "dest" the environment variables relevant to a SLURM job step,
  * overwriting any environment variables of the same name.  If the address
  * pointed to by "dest" is NULL, memory will automatically be xmalloc'ed.
  * The array is terminated by a NULL pointer, and thus is suitable for
- * use by execle() and other env_array_* functions.
+ * use by execle() and other env_array_* functions.  If preserve_env is
+ * true, the variables SLURM_NNODES and SLURM_NPROCS remain unchanged.
  *
  * Sets variables:
  *	SLURM_STEP_ID
  *	SLURM_STEP_NUM_NODES
  *	SLURM_STEP_NUM_TASKS
  *	SLURM_STEP_TASKS_PER_NODE
- *	SLURM_STEP_LAUNCHER_HOSTNAME
  *	SLURM_STEP_LAUNCHER_PORT
  *	SLURM_STEP_LAUNCHER_IPADDR
+ *	SLURM_STEP_RESV_PORTS
  *
  * Sets OBSOLETE variables:
  *	SLURM_STEPID
@@ -165,8 +168,8 @@ extern void env_array_for_batch_job(char ***dest,
 void
 env_array_for_step(char ***dest,
 		   const job_step_create_response_msg_t *step,
-		   const char *launcher_hostname,
-		   uint16_t launcher_port);
+		   uint16_t launcher_port,
+		   bool preserve_env);
 
 /*
  * Return an empty environment variable array (contains a single
@@ -264,8 +267,8 @@ char **env_array_user_default(const char *username, int timeout, int mode);
 /*
  * The cpus-per-node representation in SLURM (and perhaps tasks-per-node
  * in the future) is stored in a compressed format comprised of two
- * equal-length arrays of uint32_t, and an integer holding the array length.
- * In one array an element represents a count (number of cpus, number of tasks,
+ * equal-length arrays, and an integer holding the array length. In one 
+ * array an element represents a count (number of cpus, number of tasks,
  * etc.), and the corresponding element in the other array contains the
  * number of times the count is repeated sequentially in the uncompressed
  * something-per-node array.
@@ -274,7 +277,7 @@ char **env_array_user_default(const char *username, int timeout, int mode);
  * array.  Free with xfree().
  */
 char *uint32_compressed_to_str(uint32_t array_len,
-			       const uint32_t *array,
+			       const uint16_t *array,
 			       const uint32_t *array_reps);
 
 #endif
diff --git a/src/common/forward.c b/src/common/forward.c
index 41a1a5879..f8e13c624 100644
--- a/src/common/forward.c
+++ b/src/common/forward.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <auble1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -61,10 +62,28 @@
 
 #define MAX_RETRIES 3
 
+typedef struct {
+	pthread_cond_t *notify;
+	slurm_msg_t *orig_msg;
+	List ret_list;
+	int timeout;
+	hostlist_t tree_hl;
+	pthread_mutex_t *tree_mutex;
+} fwd_tree_t;
+
+void _destroy_tree_fwd(fwd_tree_t *fwd_tree)
+{
+	if(fwd_tree) {
+		if(fwd_tree->tree_hl)
+			hostlist_destroy(fwd_tree->tree_hl);
+		xfree(fwd_tree);
+	}
+}
+
 void *_forward_thread(void *arg)
 {
 	forward_msg_t *fwd_msg = (forward_msg_t *)arg;
-	Buf buffer = init_buf(0);
+	Buf buffer = init_buf(fwd_msg->buf_len);
 	int i=0;
 	List ret_list = NULL;
 	slurm_fd fd = -1;
@@ -146,7 +165,7 @@ void *_forward_thread(void *arg)
 			free(name);
 			if(hostlist_count(hl) > 0) {
 				free_buf(buffer);	
-				buffer = init_buf(0);
+				buffer = init_buf(fwd_msg->buf_len);
 				slurm_mutex_unlock(fwd_msg->forward_mutex);
 				slurm_close_accepted_conn(fd);
 				fd = -1;
@@ -201,7 +220,7 @@ void *_forward_thread(void *arg)
 				list_destroy(ret_list);
 			if (hostlist_count(hl) > 0) {
 				free_buf(buffer);	
-				buffer = init_buf(0);
+				buffer = init_buf(fwd_msg->buf_len);
 				slurm_mutex_unlock(fwd_msg->forward_mutex);
 				slurm_close_accepted_conn(fd);
 				fd = -1;
@@ -257,7 +276,6 @@ void *_forward_thread(void *arg)
 		}
 		break;
 	}
-
 	slurm_mutex_lock(fwd_msg->forward_mutex);
 	if(ret_list) {
 		while((ret_data_info = list_pop(ret_list)) != NULL) {
@@ -283,6 +301,85 @@ cleanup:
 	return (NULL);
 }
 
+void *_fwd_tree_thread(void *arg)
+{
+	fwd_tree_t *fwd_tree = (fwd_tree_t *)arg;
+	List ret_list = NULL;
+	char *name = NULL;
+	char buf[8196];
+	slurm_msg_t send_msg;	
+	
+	slurm_msg_t_init(&send_msg);
+	send_msg.msg_type = fwd_tree->orig_msg->msg_type;
+	send_msg.data = fwd_tree->orig_msg->data;
+
+	/* repeat until we are sure the message was sent */ 
+	while((name = hostlist_shift(fwd_tree->tree_hl))) {
+		if(slurm_conf_get_addr(name, &send_msg.address)
+		   == SLURM_ERROR) {
+			error("fwd_tree_thread: can't find address for host "
+			      "%s, check slurm.conf", name);
+			slurm_mutex_lock(fwd_tree->tree_mutex);
+			mark_as_failed_forward(&fwd_tree->ret_list, name,
+					SLURM_COMMUNICATIONS_CONNECTION_ERROR);
+ 			pthread_cond_signal(fwd_tree->notify);
+			slurm_mutex_unlock(fwd_tree->tree_mutex);
+			free(name);
+		
+			continue;
+		}
+		
+		hostlist_ranged_string(fwd_tree->tree_hl, sizeof(buf), buf);
+		send_msg.forward.nodelist = xstrdup(buf);
+		send_msg.forward.timeout = fwd_tree->timeout;
+		send_msg.forward.cnt = hostlist_count(fwd_tree->tree_hl);
+		if (send_msg.forward.nodelist[0]) {
+			debug3("Tree sending to %s along with %s", 
+			       name, send_msg.forward.nodelist);
+		} else
+			debug3("Tree sending to %s", name);
+
+		ret_list = slurm_send_addr_recv_msgs(&send_msg, name,
+						     fwd_tree->timeout);
+
+		xfree(send_msg.forward.nodelist);
+
+		if(ret_list) {
+			slurm_mutex_lock(fwd_tree->tree_mutex);
+			list_transfer(fwd_tree->ret_list, ret_list);
+			pthread_cond_signal(fwd_tree->notify);
+			slurm_mutex_unlock(fwd_tree->tree_mutex);
+			list_destroy(ret_list);
+		} else {
+			/* This should never happen (when this was
+			   written slurm_send_addr_recv_msgs always
+			   returned a list */
+			error("fwd_tree_thread: no return list given from "
+			      "slurm_send_addr_recv_msgs", name);
+			slurm_mutex_lock(fwd_tree->tree_mutex);
+			mark_as_failed_forward(&fwd_tree->ret_list, name,
+					SLURM_COMMUNICATIONS_CONNECTION_ERROR);
+ 			pthread_cond_signal(fwd_tree->notify);
+			slurm_mutex_unlock(fwd_tree->tree_mutex);
+			free(name);
+			
+			continue;
+		}
+
+		free(name);
+		
+		/* check for error and try again */
+		if(errno == SLURM_COMMUNICATIONS_CONNECTION_ERROR) 
+ 			continue;						
+		
+		break;
+	}
+
+	_destroy_tree_fwd(fwd_tree);
+		
+	return NULL;
+}
+
 /*
  * forward_init    - initilize forward structure
  * IN: forward     - forward_t *   - struct to store forward info
@@ -320,7 +417,7 @@ extern void forward_init(forward_t *forward, forward_t *from)
 extern int forward_msg(forward_struct_t *forward_struct, 
 		       header_t *header)
 {
-	int i = 0, j = 0;
+	int j = 0;
 	int retries = 0;
 	forward_msg_t *forward_msg = NULL;
 	int thr_count = 0;
@@ -335,12 +432,7 @@ extern int forward_msg(forward_struct_t *forward_struct,
 		return SLURM_ERROR;
 	}
 	hl = hostlist_create(header->forward.nodelist);	
-	slurm_mutex_init(&forward_struct->forward_mutex);
-	pthread_cond_init(&forward_struct->notify, NULL);
-	
-	forward_struct->forward_msg = 
-		xmalloc(sizeof(forward_msg_t) * header->forward.cnt);
-	i = 0;
+	hostlist_uniq(hl);
 	
 	while((name = hostlist_shift(hl))) {
 		pthread_attr_t attr_agent;
@@ -379,7 +471,6 @@ extern int forward_msg(forward_struct_t *forward_struct,
 		forward_msg->header.ret_cnt = 0;
 		
 		forward_hl = hostlist_create(name);
-		i++;
 		free(name);
 		for(j = 0; j < span[thr_count]; j++) {
 			name = hostlist_shift(hl);
@@ -387,20 +478,21 @@ extern int forward_msg(forward_struct_t *forward_struct,
 				break;
 			hostlist_push(forward_hl, name);
 			free(name);
-			i++;
 		}
-		hostlist_uniq(forward_hl);
+
 		hostlist_ranged_string(forward_hl, sizeof(buf), buf);
 		hostlist_destroy(forward_hl);
+		forward_init(&forward_msg->header.forward, NULL);
 		forward_msg->header.forward.nodelist = xstrdup(buf);
 		while(pthread_create(&thread_agent, &attr_agent,
-				   _forward_thread, 
-				   (void *)forward_msg)) {
+				     _forward_thread, 
+				     (void *)forward_msg)) {
 			error("pthread_create error %m");
 			if (++retries > MAX_RETRIES)
 				fatal("Can't create pthread");
 			sleep(1);	/* sleep and try again */
 		}
+		slurm_attr_destroy(&attr_agent);
 		thr_count++; 
 	}
 	hostlist_destroy(hl);
@@ -408,6 +500,104 @@ extern int forward_msg(forward_struct_t *forward_struct,
 	return SLURM_SUCCESS;
 }
 
+/*
+ * start_msg_tree  - logic to begin the forward tree and
+ *                   accumulate the return codes from processes getting the
+ *                   the forwarded message
+ *
+ * IN: hl          - hostlist_t   - list of every node to send message to
+ * IN: msg         - slurm_msg_t  - message to send.
+ * IN: timeout     - int          - how long to wait in milliseconds.
+ * RET List 	   - List containing the responses of the childern
+ *		     (if any) we forwarded the message to. List
+ *		     containing type (ret_data_info_t).
+ */
+extern List start_msg_tree(hostlist_t hl, slurm_msg_t *msg, int timeout)
+{
+	int *span = NULL;
+	fwd_tree_t *fwd_tree = NULL;
+	pthread_mutex_t tree_mutex;
+	pthread_cond_t notify;
+	int j = 0, count = 0;
+	List ret_list = NULL;
+	char *name = NULL;
+	int thr_count = 0;
+	int host_count = 0;
+
+	xassert(hl);
+	xassert(msg);
+
+	hostlist_uniq(hl);		
+	host_count = hostlist_count(hl);
+
+	span = set_span(host_count, 0);
+
+	slurm_mutex_init(&tree_mutex);
+	pthread_cond_init(&notify, NULL);
+
+	ret_list = list_create(destroy_data_info);
+	
+	while((name = hostlist_shift(hl))) {
+		pthread_attr_t attr_agent;
+		pthread_t thread_agent;
+		int retries = 0;
+
+		slurm_attr_init(&attr_agent);
+		if (pthread_attr_setdetachstate
+		    (&attr_agent, PTHREAD_CREATE_DETACHED))
+			error("pthread_attr_setdetachstate error %m");
+
+		fwd_tree = xmalloc(sizeof(fwd_tree_t));
+		fwd_tree->orig_msg = msg;
+		fwd_tree->ret_list = ret_list;
+		fwd_tree->timeout = timeout;
+		fwd_tree->notify = &notify;
+		fwd_tree->tree_mutex = &tree_mutex;
+
+		if(fwd_tree->timeout <= 0) {
+			/* convert secs to msec */
+			fwd_tree->timeout  = slurm_get_msg_timeout() * 1000; 
+		}
+
+		fwd_tree->tree_hl = hostlist_create(name);
+		free(name);
+		for(j = 0; j < span[thr_count]; j++) {
+			name = hostlist_shift(hl);
+			if(!name)
+				break;
+			hostlist_push(fwd_tree->tree_hl, name);
+			free(name);
+		}
+
+		while(pthread_create(&thread_agent, &attr_agent,
+				     _fwd_tree_thread, (void *)fwd_tree)) {
+			error("pthread_create error %m");
+			if (++retries > MAX_RETRIES)
+				fatal("Can't create pthread");
+			sleep(1);	/* sleep and try again */
+		}
+		slurm_attr_destroy(&attr_agent);
+		thr_count++; 
+	}
+	xfree(span);
+	
+	slurm_mutex_lock(&tree_mutex);
+
+	count = list_count(ret_list);
+	debug2("Tree head got back %d looking for %d", count, host_count);
+	while((count < host_count)) {
+		pthread_cond_wait(&notify, &tree_mutex);
+		count = list_count(ret_list);
+		debug2("Tree head got back %d", count);
+	}
+	debug2("Tree head got them all");
+	slurm_mutex_unlock(&tree_mutex);
+
+	slurm_mutex_destroy(&tree_mutex);
+	pthread_cond_destroy(&notify);
+
+	return ret_list;
+}
 
 /*
  * mark_as_failed_forward- mark a node as failed and add it to "ret_list"
@@ -443,16 +633,16 @@ extern void forward_wait(slurm_msg_t * msg)
 		debug2("looking for %d", msg->forward_struct->fwd_cnt);
 		slurm_mutex_lock(&msg->forward_struct->forward_mutex);
 		count = 0;
-		if (msg->ret_list != NULL) {
-			count += list_count(msg->ret_list);
-		}
+		if (msg->ret_list != NULL) 
+			count = list_count(msg->ret_list);
+		
 		debug2("Got back %d", count);
 		while((count < msg->forward_struct->fwd_cnt)) {
 			pthread_cond_wait(&msg->forward_struct->notify, 
 					  &msg->forward_struct->forward_mutex);
-			count = 0;
+			
 			if (msg->ret_list != NULL) {
-				count += list_count(msg->ret_list);
+				count = list_count(msg->ret_list);
 			}
 			debug2("Got back %d", count);
 				
@@ -480,6 +670,8 @@ void destroy_forward(forward_t *forward)
 	if(forward->init == FORWARD_INIT) {
 		xfree(forward->nodelist);
 		forward->init = 0;
+	} else {
+		error("destroy_forward: no init");
 	}
 }
 
@@ -493,4 +685,3 @@ void destroy_forward_struct(forward_struct_t *forward_struct)
 		xfree(forward_struct);
 	}
 }
-
diff --git a/src/common/forward.h b/src/common/forward.h
index c7e92eee6..da707a571 100644
--- a/src/common/forward.h
+++ b/src/common/forward.h
@@ -6,10 +6,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <auble1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -87,6 +88,21 @@ if (forward_msg(forward_struct, &header) == SLURM_ERROR) {
 extern int forward_msg(forward_struct_t *forward_struct, 
 		       header_t *header);
 
+
+/*
+ * start_msg_tree  - logic to begin the forward tree and
+ *                   accumulate the return codes from processes getting the
+ *                   the forwarded message
+ *
+ * IN: hl          - hostlist_t   - list of every node to send message to
+ * IN: msg         - slurm_msg_t  - message to send.
+ * IN: timeout     - int          - how long to wait in milliseconds.
+ * RET List 	   - List containing the responses of the childern
+ *		     (if any) we forwarded the message to. List
+ *		     containing type (ret_data_info_t).
+ */
+extern List start_msg_tree(hostlist_t hl, slurm_msg_t *msg, int timeout);
+
 /*
  * mark_as_failed_forward- mark a node as failed and add it to "ret_list"
  *
@@ -128,6 +144,5 @@ if(!ret_list || list_count(ret_list) == 0) {
 extern void destroy_data_info(void *object);
 extern void destroy_forward(forward_t *forward);
 extern void destroy_forward_struct(forward_struct_t *forward_struct);
-extern void destroy_ret_types(void *object);
 	
 #endif
diff --git a/src/common/hostlist.c b/src/common/hostlist.c
index 28467a3d7..5cdb95fb1 100644
--- a/src/common/hostlist.c
+++ b/src/common/hostlist.c
@@ -1,15 +1,16 @@
 /*****************************************************************************\
- *  $Id: hostlist.c 16088 2008-12-29 21:56:17Z jette $
+ *  $Id: hostlist.c 17248 2009-04-14 20:14:06Z da $
  *****************************************************************************
  *  $LSDId: hostlist.c,v 1.14 2003/10/14 20:11:54 grondo Exp $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -2550,7 +2551,7 @@ _get_boxes(char *buf, int max_len)
 static void
 _clear_grid(void)
 {
-	bzero(axis, sizeof(axis));
+	memset(axis, 0, sizeof(axis));
 
 	axis_min_x = HOSTLIST_BASE;
 	axis_min_y = HOSTLIST_BASE;
diff --git a/src/common/hostlist.h b/src/common/hostlist.h
index 4b4e5aee0..19399e3d6 100644
--- a/src/common/hostlist.h
+++ b/src/common/hostlist.h
@@ -1,15 +1,16 @@
 /*****************************************************************************\
- *  $Id: hostlist.h 15870 2008-12-08 16:14:18Z jette $
+ *  $Id: hostlist.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  $LSDId: hostlist.h,v 1.4 2003/09/19 21:37:34 grondo Exp $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/io_hdr.c b/src/common/io_hdr.c
index 3a782025f..920d4a2fa 100644
--- a/src/common/io_hdr.c
+++ b/src/common/io_hdr.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/common/io_hdr.c - IO connection header functions
- * $Id: io_hdr.c 13672 2008-03-19 23:10:58Z jette $
+ * $Id: io_hdr.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark A. Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/io_hdr.h b/src/common/io_hdr.h
index ec6f3d149..0c8216476 100644
--- a/src/common/io_hdr.h
+++ b/src/common/io_hdr.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/common/io_hdr.h - IO connection header functions
- * $Id: io_hdr.h 13672 2008-03-19 23:10:58Z jette $
+ * $Id: io_hdr.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark A. Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/job_options.c b/src/common/job_options.c
index 95ae5be10..5d8e46881 100644
--- a/src/common/job_options.c
+++ b/src/common/job_options.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/job_options.h b/src/common/job_options.h
index 18a50a28c..09da3139a 100644
--- a/src/common/job_options.h
+++ b/src/common/job_options.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/jobacct_common.c b/src/common/jobacct_common.c
index 45c131f03..18dad2912 100644
--- a/src/common/jobacct_common.c
+++ b/src/common/jobacct_common.c
@@ -4,10 +4,11 @@
  *
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *  Written by Danny Auble, <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -146,6 +147,7 @@ extern jobacct_job_rec_t *create_jobacct_job_rec()
 	job->steps = list_create(destroy_jobacct_step_rec);
 	job->requid = -1;
 	job->lft = (uint32_t)NO_VAL;
+	job->resvid = (uint32_t)NO_VAL;
 
       	return job;
 }
@@ -212,7 +214,58 @@ extern void pack_jobacct_job_rec(void *object, uint16_t rpc_version, Buf buffer)
 	jobacct_step_rec_t *step = NULL;
 	uint32_t count = 0;
 
-	if(rpc_version >= 4) {
+	if(rpc_version >= 5) {
+		pack32(job->alloc_cpus, buffer);
+		pack32(job->alloc_nodes, buffer);
+		pack32(job->associd, buffer);
+		packstr(job->account, buffer);
+		packstr(job->blockid, buffer);
+		packstr(job->cluster, buffer);
+		pack32(job->elapsed, buffer);
+		pack_time(job->eligible, buffer);
+		pack_time(job->end, buffer);
+		pack32(job->exitcode, buffer);
+		pack32(job->gid, buffer);
+		pack32(job->jobid, buffer);
+		packstr(job->jobname, buffer);
+		pack32(job->lft, buffer);
+		packstr(job->partition, buffer);
+		packstr(job->nodes, buffer);
+		pack32(job->priority, buffer);
+		pack16(job->qos, buffer);
+		pack32(job->resvid, buffer);
+		pack32(job->req_cpus, buffer);
+		pack32(job->requid, buffer);
+		_pack_sacct(&job->sacct, buffer);
+		pack32(job->show_full, buffer);
+		pack_time(job->start, buffer);
+		pack16((uint16_t)job->state, buffer);
+		if(job->steps)
+			count = list_count(job->steps);
+		pack32(count, buffer);
+		if(count) {
+			itr = list_iterator_create(job->steps);
+			while((step = list_next(itr))) {
+				pack_jobacct_step_rec(step, rpc_version,
+						      buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		pack_time(job->submit, buffer);
+		pack32(job->suspended, buffer);
+		pack32(job->sys_cpu_sec, buffer);
+		pack32(job->sys_cpu_usec, buffer);
+		pack32(job->timelimit, buffer);
+		pack32(job->tot_cpu_sec, buffer);
+		pack32(job->tot_cpu_usec, buffer);
+		pack16(job->track_steps, buffer);
+		pack32(job->uid, buffer);
+		packstr(job->user, buffer);
+		pack32(job->user_cpu_sec, buffer);
+		pack32(job->user_cpu_usec, buffer);
+		packstr(job->wckey, buffer); /* added for rpc_version 4 */
+		pack32(job->wckeyid, buffer); /* added for rpc_version 4 */
+	} else if(rpc_version >= 4) {
 		pack32(job->alloc_cpus, buffer);
 		pack32(job->associd, buffer);
 		packstr(job->account, buffer);
@@ -320,8 +373,9 @@ extern int unpack_jobacct_job_rec(void **job, uint16_t rpc_version, Buf buffer)
 
 	*job = job_ptr;
 
-	if(rpc_version >= 4) {
+	if(rpc_version >= 5) {
 		safe_unpack32(&job_ptr->alloc_cpus, buffer);
+		safe_unpack32(&job_ptr->alloc_nodes, buffer);
 		safe_unpack32(&job_ptr->associd, buffer);
 		safe_unpackstr_xmalloc(&job_ptr->account, &uint32_tmp, buffer);
 		safe_unpackstr_xmalloc(&job_ptr->blockid, &uint32_tmp, buffer);
@@ -338,8 +392,62 @@ extern int unpack_jobacct_job_rec(void **job, uint16_t rpc_version, Buf buffer)
 		safe_unpackstr_xmalloc(&job_ptr->partition, &uint32_tmp,
 				       buffer);
 		safe_unpackstr_xmalloc(&job_ptr->nodes, &uint32_tmp, buffer);
+		safe_unpack32(&job_ptr->priority, buffer);
+		safe_unpack16(&job_ptr->qos, buffer);
+		safe_unpack32(&job_ptr->resvid, buffer);
+		safe_unpack32(&job_ptr->req_cpus, buffer);
+		safe_unpack32(&job_ptr->requid, buffer);
+		_pack_sacct(&job_ptr->sacct, buffer);
+		safe_unpack32(&job_ptr->show_full, buffer);
+		safe_unpack_time(&job_ptr->start, buffer);
+		safe_unpack16(&uint16_tmp, buffer);
+		job_ptr->state = uint16_tmp;
+		safe_unpack32(&count, buffer);
+
+		job_ptr->steps = list_create(destroy_jobacct_step_rec);
+		for(i=0; i<count; i++) {
+			unpack_jobacct_step_rec(&step, rpc_version, buffer);
+			if(step) {
+				step->job_ptr = job_ptr;
+				if(!job_ptr->first_step_ptr)
+					job_ptr->first_step_ptr = step;
+				list_append(job_ptr->steps, step);
+			}
+		}
+
+		safe_unpack_time(&job_ptr->submit, buffer);
+		safe_unpack32(&job_ptr->suspended, buffer);
+		safe_unpack32(&job_ptr->sys_cpu_sec, buffer);
+		safe_unpack32(&job_ptr->sys_cpu_usec, buffer);
+		safe_unpack32(&job_ptr->timelimit, buffer);
+		safe_unpack32(&job_ptr->tot_cpu_sec, buffer);
+		safe_unpack32(&job_ptr->tot_cpu_usec, buffer);
+		safe_unpack16(&job_ptr->track_steps, buffer);
+		safe_unpack32(&job_ptr->uid, buffer);
+		safe_unpackstr_xmalloc(&job_ptr->user, &uint32_tmp, buffer);
+		safe_unpack32(&job_ptr->user_cpu_sec, buffer);
+		safe_unpack32(&job_ptr->user_cpu_usec, buffer);
+		safe_unpackstr_xmalloc(&job_ptr->wckey, &uint32_tmp, buffer);
+		safe_unpack32(&job_ptr->wckeyid, buffer);
+	} else if(rpc_version >= 4) {
+		safe_unpack32(&job_ptr->alloc_cpus, buffer);
+		safe_unpack32(&job_ptr->associd, buffer);
+		safe_unpackstr_xmalloc(&job_ptr->account, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&job_ptr->blockid, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&job_ptr->cluster, &uint32_tmp, buffer);
+		safe_unpack32(&job_ptr->elapsed, buffer);
+		safe_unpack_time(&job_ptr->eligible, buffer);
+		safe_unpack_time(&job_ptr->end, buffer);
 		safe_unpack32(&uint32_tmp, buffer);
-		job_ptr->priority = (int32_t)uint32_tmp;
+		job_ptr->exitcode = (int32_t)uint32_tmp;
+		safe_unpack32(&job_ptr->gid, buffer);
+		safe_unpack32(&job_ptr->jobid, buffer);
+		safe_unpackstr_xmalloc(&job_ptr->jobname, &uint32_tmp, buffer);
+		safe_unpack32(&job_ptr->lft, buffer);
+		safe_unpackstr_xmalloc(&job_ptr->partition, &uint32_tmp,
+				       buffer);
+		safe_unpackstr_xmalloc(&job_ptr->nodes, &uint32_tmp, buffer);
+		safe_unpack32(&job_ptr->priority, buffer);
 		safe_unpack16(&job_ptr->qos, buffer);
 		safe_unpack32(&job_ptr->req_cpus, buffer);
 		safe_unpack32(&job_ptr->requid, buffer);
@@ -353,8 +461,12 @@ extern int unpack_jobacct_job_rec(void **job, uint16_t rpc_version, Buf buffer)
 		job_ptr->steps = list_create(destroy_jobacct_step_rec);
 		for(i=0; i<count; i++) {
 			unpack_jobacct_step_rec(&step, rpc_version, buffer);
-			if(step)
+			if(step) {
+				step->job_ptr = job_ptr;
+				if(!job_ptr->first_step_ptr)
+					job_ptr->first_step_ptr = step;
 				list_append(job_ptr->steps, step);
+			}
 		}
 
 		safe_unpack_time(&job_ptr->submit, buffer);
@@ -399,12 +511,15 @@ extern int unpack_jobacct_job_rec(void **job, uint16_t rpc_version, Buf buffer)
 		safe_unpack16(&uint16_tmp, buffer);
 		job_ptr->state = uint16_tmp;
 		safe_unpack32(&count, buffer);
-
 		job_ptr->steps = list_create(destroy_jobacct_step_rec);
 		for(i=0; i<count; i++) {
 			unpack_jobacct_step_rec(&step, rpc_version, buffer);
-			if(step)
+			if(step) {
+				step->job_ptr = job_ptr;
+				if(!job_ptr->first_step_ptr)
+					job_ptr->first_step_ptr = step;
 				list_append(job_ptr->steps, step);
+			}
 		}
 
 		safe_unpack_time(&job_ptr->submit, buffer);
@@ -431,25 +546,51 @@ unpack_error:
 extern void pack_jobacct_step_rec(jobacct_step_rec_t *step, 
 				  uint16_t rpc_version, Buf buffer)
 {
-	pack32(step->elapsed, buffer);
-	pack_time(step->end, buffer);
-	pack32((uint32_t)step->exitcode, buffer);
-	pack32(step->jobid, buffer);
-	pack32(step->ncpus, buffer);
-        packstr(step->nodes, buffer);
-	pack32(step->requid, buffer);
-	_pack_sacct(&step->sacct, buffer);
-	pack_time(step->start, buffer);
-	pack16(step->state, buffer);
-	pack32(step->stepid, buffer);	/* job's step number */
-	packstr(step->stepname, buffer);
-	pack32(step->suspended, buffer);
-	pack32(step->sys_cpu_sec, buffer);
-	pack32(step->sys_cpu_usec, buffer);
-	pack32(step->tot_cpu_sec, buffer);
-	pack32(step->tot_cpu_usec, buffer);
-	pack32(step->user_cpu_sec, buffer);
-	pack32(step->user_cpu_usec, buffer);
+	uint32_t uint32_tmp = NO_VAL;
+
+	if(rpc_version >= 5) {
+		pack32(step->elapsed, buffer);
+		pack_time(step->end, buffer);
+		pack32((uint32_t)step->exitcode, buffer);
+		pack32(step->ncpus, buffer);
+		pack32(step->nnodes, buffer);
+		packstr(step->nodes, buffer);
+		pack32(step->ntasks, buffer);
+		pack32(step->requid, buffer);
+		_pack_sacct(&step->sacct, buffer);
+		pack_time(step->start, buffer);
+		pack16(step->state, buffer);
+		pack32(step->stepid, buffer);	/* job's step number */
+		packstr(step->stepname, buffer);
+		pack32(step->suspended, buffer);
+		pack32(step->sys_cpu_sec, buffer);
+		pack32(step->sys_cpu_usec, buffer);
+		pack16(step->task_dist, buffer);
+		pack32(step->tot_cpu_sec, buffer);
+		pack32(step->tot_cpu_usec, buffer);
+		pack32(step->user_cpu_sec, buffer);
+		pack32(step->user_cpu_usec, buffer);
+	} else {
+		pack32(step->elapsed, buffer);
+		pack_time(step->end, buffer);
+		pack32((uint32_t)step->exitcode, buffer);
+		pack32(uint32_tmp, buffer);
+		pack32(step->ncpus, buffer);
+		packstr(step->nodes, buffer);
+		pack32(step->requid, buffer);
+		_pack_sacct(&step->sacct, buffer);
+		pack_time(step->start, buffer);
+		pack16(step->state, buffer);
+		pack32(step->stepid, buffer);	/* job's step number */
+		packstr(step->stepname, buffer);
+		pack32(step->suspended, buffer);
+		pack32(step->sys_cpu_sec, buffer);
+		pack32(step->sys_cpu_usec, buffer);
+		pack32(step->tot_cpu_sec, buffer);
+		pack32(step->tot_cpu_usec, buffer);
+		pack32(step->user_cpu_sec, buffer);
+		pack32(step->user_cpu_usec, buffer);
+	}
 }
 
 extern int unpack_jobacct_step_rec(jobacct_step_rec_t **step, 
@@ -461,28 +602,54 @@ extern int unpack_jobacct_step_rec(jobacct_step_rec_t **step,
 
 	*step = step_ptr;
 
-	safe_unpack32(&step_ptr->elapsed, buffer);
-	safe_unpack_time(&step_ptr->end, buffer);
-	safe_unpack32(&uint32_tmp, buffer);
-	step_ptr->exitcode = (int32_t)uint32_tmp;
-	safe_unpack32(&step_ptr->jobid, buffer);
-	safe_unpack32(&step_ptr->ncpus, buffer);
-        safe_unpackstr_xmalloc(&step_ptr->nodes, &uint32_tmp, buffer);
-	safe_unpack32(&step_ptr->requid, buffer);
-	_unpack_sacct(&step_ptr->sacct, buffer);
-	safe_unpack_time(&step_ptr->start, buffer);
-	safe_unpack16(&uint16_tmp, buffer);
-	step_ptr->state = uint16_tmp;
-	safe_unpack32(&step_ptr->stepid, buffer);	/* job's step number */
-	safe_unpackstr_xmalloc(&step_ptr->stepname, &uint32_tmp, buffer);
-	safe_unpack32(&step_ptr->suspended, buffer);
-	safe_unpack32(&step_ptr->sys_cpu_sec, buffer);
-	safe_unpack32(&step_ptr->sys_cpu_usec, buffer);
-	safe_unpack32(&step_ptr->tot_cpu_sec, buffer);
-	safe_unpack32(&step_ptr->tot_cpu_usec, buffer);
-	safe_unpack32(&step_ptr->user_cpu_sec, buffer);
-	safe_unpack32(&step_ptr->user_cpu_usec, buffer);
-
+	if(rpc_version >= 5) {
+		safe_unpack32(&step_ptr->elapsed, buffer);
+		safe_unpack_time(&step_ptr->end, buffer);
+		safe_unpack32(&uint32_tmp, buffer);
+		step_ptr->exitcode = (int32_t)uint32_tmp;
+		safe_unpack32(&step_ptr->ncpus, buffer);
+		safe_unpack32(&step_ptr->nnodes, buffer);
+		safe_unpackstr_xmalloc(&step_ptr->nodes, &uint32_tmp, buffer);
+		safe_unpack32(&step_ptr->ntasks, buffer);
+		safe_unpack32(&step_ptr->requid, buffer);
+		_unpack_sacct(&step_ptr->sacct, buffer);
+		safe_unpack_time(&step_ptr->start, buffer);
+		safe_unpack16(&uint16_tmp, buffer);
+		step_ptr->state = uint16_tmp;
+		safe_unpack32(&step_ptr->stepid, buffer);
+		safe_unpackstr_xmalloc(&step_ptr->stepname,
+				       &uint32_tmp, buffer);
+		safe_unpack32(&step_ptr->suspended, buffer);
+		safe_unpack32(&step_ptr->sys_cpu_sec, buffer);
+		safe_unpack32(&step_ptr->sys_cpu_usec, buffer);
+		safe_unpack16(&step_ptr->task_dist, buffer);
+		safe_unpack32(&step_ptr->tot_cpu_sec, buffer);
+		safe_unpack32(&step_ptr->tot_cpu_usec, buffer);
+		safe_unpack32(&step_ptr->user_cpu_sec, buffer);
+		safe_unpack32(&step_ptr->user_cpu_usec, buffer);
+	} else {
+		safe_unpack32(&step_ptr->elapsed, buffer);
+		safe_unpack_time(&step_ptr->end, buffer);
+		safe_unpack32(&uint32_tmp, buffer);
+		step_ptr->exitcode = (int32_t)uint32_tmp;
+		safe_unpack32(&uint32_tmp, buffer);
+		safe_unpack32(&step_ptr->ncpus, buffer);
+		safe_unpackstr_xmalloc(&step_ptr->nodes, &uint32_tmp, buffer);
+		safe_unpack32(&step_ptr->requid, buffer);
+		_unpack_sacct(&step_ptr->sacct, buffer);
+		safe_unpack_time(&step_ptr->start, buffer);
+		safe_unpack16(&uint16_tmp, buffer);
+		step_ptr->state = uint16_tmp;
+		safe_unpack32(&step_ptr->stepid, buffer);	/* job's step number */
+		safe_unpackstr_xmalloc(&step_ptr->stepname, &uint32_tmp, buffer);
+		safe_unpack32(&step_ptr->suspended, buffer);
+		safe_unpack32(&step_ptr->sys_cpu_sec, buffer);
+		safe_unpack32(&step_ptr->sys_cpu_usec, buffer);
+		safe_unpack32(&step_ptr->tot_cpu_sec, buffer);
+		safe_unpack32(&step_ptr->tot_cpu_usec, buffer);
+		safe_unpack32(&step_ptr->user_cpu_sec, buffer);
+		safe_unpack32(&step_ptr->user_cpu_usec, buffer);
+	}
 	return SLURM_SUCCESS;
 
 unpack_error:
diff --git a/src/common/jobacct_common.h b/src/common/jobacct_common.h
index 2eb69cdd3..c8d38037c 100644
--- a/src/common/jobacct_common.h
+++ b/src/common/jobacct_common.h
@@ -4,10 +4,11 @@
  *
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *  Written by Danny Auble, <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -88,24 +89,30 @@ typedef struct {
 
 typedef struct {
 	uint32_t alloc_cpus;
-	uint32_t associd;
+	uint32_t alloc_nodes;
 	char    *account;
+	uint32_t associd;
 	char	*blockid;
 	char    *cluster;
 	uint32_t elapsed;
 	time_t eligible;
 	time_t end;
 	int32_t	exitcode;
+	void *first_step_ptr; /* this pointer to a jobacct_step_rec_t 
+				 is set up on the
+				 client side so does not need to
+				 be packed */
 	uint32_t gid;
 	uint32_t jobid;
 	char	*jobname;
 	uint32_t lft;
 	char	*partition;
 	char	*nodes;
-	int32_t priority;
+	uint32_t priority;
 	uint16_t qos;
 	uint32_t req_cpus;
 	uint32_t requid;
+	uint32_t resvid;
 	sacct_t sacct;
 	uint32_t show_full;
 	time_t start;
@@ -115,6 +122,7 @@ typedef struct {
 	uint32_t suspended;
 	uint32_t sys_cpu_sec;
 	uint32_t sys_cpu_usec;
+	uint32_t timelimit;
 	uint32_t tot_cpu_sec;
 	uint32_t tot_cpu_usec;
 	uint16_t track_steps;
@@ -127,25 +135,16 @@ typedef struct {
 } jobacct_job_rec_t;
 
 typedef struct {
-	char    *account; /* This is a pointer to the account var inside
-			   * the jobacct_job_rec_t that contains this
-			   * step.  It is to be used only in the
-			   * client.  This should not be freed, packed
-			   * or unpacked
-			   */
-	uint32_t associd;
-	char    *cluster; /* This is a pointer to the cluster var inside
-			   * the jobacct_job_rec_t that contains this
-			   * step.  It is to be used only in the
-			   * client.  This should not be freed, packed
-			   * or unpacked
-			   */
 	uint32_t elapsed;
 	time_t end;
 	int32_t exitcode;
-	uint32_t jobid;
+	jobacct_job_rec_t *job_ptr; /* this pointer is set up on the
+				       client side so does not need to
+				       be packed */
 	uint32_t ncpus;
+	uint32_t nnodes;
 	char *nodes;
+	uint32_t ntasks;
 	uint32_t requid;
 	sacct_t sacct;
 	time_t start;
@@ -155,6 +154,7 @@ typedef struct {
 	uint32_t suspended;
 	uint32_t sys_cpu_sec;
 	uint32_t sys_cpu_usec;
+	uint16_t task_dist;
 	uint32_t tot_cpu_sec;
 	uint32_t tot_cpu_usec;
 	uint32_t user_cpu_sec;
diff --git a/src/common/log.c b/src/common/log.c
index 5c0f0719d..5c1fc315e 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -1,11 +1,11 @@
 /*****************************************************************************\
  *  log.c - slurm logging facilities
- *  $Id: log.c 15367 2008-10-09 20:51:36Z da $
+ *  $Id: log.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  Much of this code was derived or adapted from the log.c component of 
  *  openssh which contains the following notices:
@@ -400,9 +400,15 @@ static char *vxstrfmt(const char *fmt, va_list ap)
 			case 'T': 	/* "%T" => "dd Mon yyyy hh:mm:ss off" */
 				xstrftimecat(buf, "%a %d %b %Y %H:%M:%S %z");   
 				break;
+#ifdef USE_ISO_8601
+			case 'M':       /* "%M" => "yyyy-mm-ddThh:mm:ss"          */
+				xstrftimecat(buf, "%Y-%m-%dT%T");
+				break;
+#else
 			case 'M':       /* "%M" => "Mon DD hh:mm:ss"          */
 				xstrftimecat(buf, "%b %d %T");
 				break;
+#endif
 			case 's':	/* "%s" => append string */
 				/* we deal with this case for efficiency */
 				if (unprocessed == 0) 
diff --git a/src/common/log.h b/src/common/log.h
index e159a9b76..99d936f91 100644
--- a/src/common/log.h
+++ b/src/common/log.h
@@ -4,7 +4,7 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  Much of this code was derived or adapted from the log.c component of 
  *  openssh which contains the following notices:
diff --git a/src/common/macros.h b/src/common/macros.h
index a2492f767..7784ae6d3 100644
--- a/src/common/macros.h
+++ b/src/common/macros.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/common/macros.h - some standard macros for slurm
- * $Id: macros.h 13672 2008-03-19 23:10:58Z jette $
+ * $Id: macros.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/mpi.c b/src/common/mpi.c
index 96eb18cdf..eeea9fb39 100644
--- a/src/common/mpi.c
+++ b/src/common/mpi.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondo1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/mpi.h b/src/common/mpi.h
index 75255181a..2fa2e2b27 100644
--- a/src/common/mpi.h
+++ b/src/common/mpi.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondo1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/net.c b/src/common/net.c
index 5fb33c058..a65b9831b 100644
--- a/src/common/net.c
+++ b/src/common/net.c
@@ -5,10 +5,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, Kevin Tew <tew1@llnl.gov>, 
  *  et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/net.h b/src/common/net.h
index 7b5e8548b..ef19ce256 100644
--- a/src/common/net.h
+++ b/src/common/net.h
@@ -5,10 +5,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, Kevin Tew <tew1@llnl.gov>,
  *  et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/common/node_select.c b/src/common/node_select.c
index ebf6e78a7..2e7aa8d41 100644
--- a/src/common/node_select.c
+++ b/src/common/node_select.c
@@ -8,16 +8,16 @@
  *  front-end nodes, the functions they require are here rather than within 
  *  the plugin. This is because functions required by the plugin can not be 
  *  resolved on the front-end nodes, so we can't load the plugins there.
- *
- *  $Id: node_select.c 17005 2009-03-24 21:57:43Z da $
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -88,14 +88,8 @@ typedef struct slurm_select_ops {
 	int		(*job_fini)	       (struct job_record *job_ptr);
 	int		(*job_suspend)	       (struct job_record *job_ptr);
 	int		(*job_resume)	       (struct job_record *job_ptr);
-	int		(*get_job_cores)       (uint32_t job_id,
-						int alloc_index, int s);
 	int		(*pack_node_info)      (time_t last_query_time,
 						Buf *buffer_ptr);
-        int             (*get_extra_jobinfo)   (struct node_record *node_ptr,
-						struct job_record *job_ptr,
-						enum select_data_info cr_info,
-						void *data);
         int             (*get_select_nodeinfo) (struct node_record *node_ptr,
 						enum select_data_info cr_info, 
 						void *data);
@@ -105,13 +99,13 @@ typedef struct slurm_select_ops {
         int             (*update_sub_node)     (update_part_msg_t
 						*part_desc_ptr);
 	int             (*get_info_from_plugin)(enum select_data_info cr_info,
+						struct job_record *job_ptr,
 						void *data);
 	int             (*update_node_state)   (int index, uint16_t state);
 	int             (*alter_node_cnt)      (enum select_node_cnt type,
 						void *data);
 	int		(*reconfigure)         (void);
-	int		(*step_begin)          (struct step_record *step_ptr);
-	int		(*step_fini)           (struct step_record *step_ptr);
+	List		(*get_config)          (void);
 } slurm_select_ops_t;
 
 typedef struct slurm_select_context {
@@ -127,7 +121,9 @@ static pthread_mutex_t		g_select_context_lock =
 					PTHREAD_MUTEX_INITIALIZER;
 
 #ifdef HAVE_BG			/* node selection specific logic */
+
 #  define JOBINFO_MAGIC 0x83ac
+
 struct select_jobinfo {
 	uint16_t start[SYSTEM_DIMENSIONS];	/* start position of block
 						 *  e.g. XYZ */
@@ -150,7 +146,16 @@ struct select_jobinfo {
 	char *mloaderimage;     /* mloaderImage for this block */
 	char *ramdiskimage;     /* RamDiskImage for this block */
 };
-#endif
+
+#endif	/* HAVE_BG */
+
+#ifdef HAVE_CRAY_XT		/* node selection specific logic */
+#  define JOBINFO_MAGIC 0x8cb3
+struct select_jobinfo {
+	uint16_t magic;		/* magic number */
+	char *reservation_id;	/* BASIL reservation ID */
+};
+#endif	/* HAVE_CRAY_XT */
 
 /*
  * Local functions
@@ -180,9 +185,7 @@ static slurm_select_ops_t * _select_get_ops(slurm_select_context_t *c)
 		"select_p_job_fini",
 		"select_p_job_suspend",
 		"select_p_job_resume",
-		"select_p_get_job_cores",
 		"select_p_pack_node_info",
-                "select_p_get_extra_jobinfo",
                 "select_p_get_select_nodeinfo",
                 "select_p_update_nodeinfo",
 		"select_p_update_block",
@@ -191,8 +194,7 @@ static slurm_select_ops_t * _select_get_ops(slurm_select_context_t *c)
 		"select_p_update_node_state",
 		"select_p_alter_node_cnt",
 		"select_p_reconfigure",
-		"select_p_step_begin",
-		"select_p_step_fini",
+		"select_p_get_config"
 	};
 	int n_syms = sizeof( syms ) / sizeof( char * );
 
@@ -396,28 +398,6 @@ extern int select_g_block_init(List block_list)
 
 	return (*(g_select_context->ops.block_init))(block_list);
 }
- 
-/* 
- * Get selected data from a given node for a specific job. 
- * IN node_ptr  - current node record
- * IN job_ptr   - current job record
- * IN cr_info   - type of data to get from the node record 
- *                (see enum select_data_info)
- * IN/OUT data  - the data to get from node record
- */
-extern int select_g_get_extra_jobinfo (struct node_record *node_ptr, 
-				       struct job_record *job_ptr, 
-                                       enum select_data_info cr_info,
-                                       void *data)
-{
-       if (slurm_select_init() < 0)
-               return SLURM_ERROR;
-
-       return (*(g_select_context->ops.get_extra_jobinfo))(node_ptr, 
-							   job_ptr, 
-							   cr_info, 
-							   data);
-}
 
 /* 
  * Get select data from a specific node record
@@ -484,12 +464,14 @@ extern int select_g_update_sub_node (update_part_msg_t *part_desc_ptr)
  * IN/OUT data  - the data to get from node record
  */
 extern int select_g_get_info_from_plugin (enum select_data_info cr_info, 
+					  struct job_record *job_ptr,
 					  void *data)
 {
        if (slurm_select_init() < 0)
                return SLURM_ERROR;
 
-       return (*(g_select_context->ops.get_info_from_plugin))(cr_info, data);
+       return (*(g_select_context->ops.get_info_from_plugin))(cr_info, job_ptr,
+       								data);
 }
 
 /* 
@@ -535,6 +517,17 @@ extern int select_g_reconfigure (void)
 	return (*(g_select_context->ops.reconfigure))();
 }
 
+/* 
+ * Get configuration specific for this plugin.
+ */
+extern List select_g_get_config(void)
+{
+	if (slurm_select_init() < 0)
+		return NULL;
+
+	return (*(g_select_context->ops.get_config))();
+}
+
 /*
  * Select the "best" nodes for given job from those available
  * IN/OUT job_ptr - pointer to job being considered for initiation,
@@ -646,21 +639,6 @@ extern int select_g_job_resume(struct job_record *job_ptr)
 	return (*(g_select_context->ops.job_resume))(job_ptr);
 }
 
-/*
- * Get job core info. Executed from sched/gang.
- * IN job_id      - id of job from which to obtain data
- * IN alloc_index - allocated node index
- * IN s           - socket index
- * RET number of allocated cores on the given socket from the given node
- */
-extern int select_g_get_job_cores(uint32_t job_id, int alloc_index, int s)
-{
-	if (slurm_select_init() < 0)
-		return 0;
-
-	return (*(g_select_context->ops.get_job_cores))(job_id, alloc_index, s);
-}
-
 extern int select_g_pack_node_info(time_t last_query_time, Buf *buffer)
 {
 	if (slurm_select_init() < 0)
@@ -670,40 +648,18 @@ extern int select_g_pack_node_info(time_t last_query_time, Buf *buffer)
 		(last_query_time, buffer);
 }
 
-/* Prepare to start a job step, allocate memory as needed
- * RET - slurm error code
- */
-extern int select_g_step_begin(struct step_record *step_ptr)
-{
-	if (slurm_select_init() < 0)
-		return SLURM_ERROR;
-
-	return (*(g_select_context->ops.step_begin))(step_ptr);
-}
-
-/* Prepare to terminate a job step, release memory as needed
- * RET - slurm error code
- */
-extern int select_g_step_fini(struct step_record *step_ptr)
-{
-	if (slurm_select_init() < 0)
-		return SLURM_ERROR;
-
-	return (*(g_select_context->ops.step_fini))(step_ptr);
-}
-
 #ifdef HAVE_BG		/* node selection specific logic */
 static void _free_node_info(bg_info_record_t *bg_info_record)
 {
-	xfree(bg_info_record->nodes);
-	xfree(bg_info_record->ionodes);
-	xfree(bg_info_record->owner_name);
 	xfree(bg_info_record->bg_block_id);
+	xfree(bg_info_record->blrtsimage);
 	xfree(bg_info_record->bp_inx);
+	xfree(bg_info_record->ionodes);
 	xfree(bg_info_record->ionode_inx);
-	xfree(bg_info_record->blrtsimage);
 	xfree(bg_info_record->linuximage);
 	xfree(bg_info_record->mloaderimage);
+	xfree(bg_info_record->nodes);
+	xfree(bg_info_record->owner_name);
 	xfree(bg_info_record->ramdiskimage);
 }
 
@@ -731,13 +687,11 @@ static int _unpack_node_info(bg_info_record_t *bg_info_record, Buf buffer)
 #ifdef HAVE_BGL
 	safe_unpack16(&uint16_tmp, buffer);
 	bg_info_record->node_use = (int) uint16_tmp;
-	safe_unpack16(&uint16_tmp, buffer);
-	bg_info_record->quarter = (int) uint16_tmp;
-	safe_unpack16(&uint16_tmp, buffer);
-	bg_info_record->nodecard = (int) uint16_tmp;
 #endif
 	safe_unpack32(&uint32_tmp, buffer);
 	bg_info_record->node_cnt = (int) uint32_tmp;
+	safe_unpack32(&uint32_tmp, buffer);
+	bg_info_record->job_running = (int) uint32_tmp;
 	safe_unpackstr_xmalloc(&bp_inx_str, &uint32_tmp, buffer);
 	if (bp_inx_str == NULL) {
 		bg_info_record->bp_inx = bitfmt2int("");
@@ -830,16 +784,10 @@ extern int select_g_alloc_jobinfo (select_jobinfo_t *jobinfo)
 	(*jobinfo)->conn_type = SELECT_NAV;
 	(*jobinfo)->reboot = (uint16_t) NO_VAL;
 	(*jobinfo)->rotate = (uint16_t) NO_VAL;
-	(*jobinfo)->bg_block_id = NULL;
 	(*jobinfo)->magic = JOBINFO_MAGIC;
-	(*jobinfo)->nodes = NULL;
-	(*jobinfo)->ionodes = NULL;
 	(*jobinfo)->node_cnt = NO_VAL;
 	(*jobinfo)->max_procs =  NO_VAL;
-	(*jobinfo)->blrtsimage = NULL;
-	(*jobinfo)->linuximage = NULL;
-	(*jobinfo)->mloaderimage = NULL;
-	(*jobinfo)->ramdiskimage = NULL;
+	/* Remainder of structure is already NULL fulled */
 
 	return SLURM_SUCCESS;
 }
@@ -1036,8 +984,8 @@ extern int select_g_get_jobinfo (select_jobinfo_t jobinfo,
 			*tmp_char = xstrdup(jobinfo->ramdiskimage);
 		break;
 	default:
-		debug("select_g_get_jobinfo data_type %d invalid", 
-		      data_type);
+		debug2("select_g_get_jobinfo data_type %d invalid", 
+		       data_type);
 	}
 
 	return rc;
@@ -1186,7 +1134,7 @@ extern int  select_g_unpack_jobinfo(select_jobinfo_t jobinfo, Buf buffer)
 	safe_unpack32(&(jobinfo->max_procs), buffer);
 
 	safe_unpackstr_xmalloc(&(jobinfo->bg_block_id),  &uint32_tmp, buffer);
-	safe_unpackstr_xmalloc(&(jobinfo->nodes),      &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&(jobinfo->nodes),        &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&(jobinfo->ionodes),      &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&(jobinfo->blrtsimage),   &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&(jobinfo->linuximage),   &uint32_tmp, buffer);
@@ -1546,8 +1494,8 @@ extern char *select_g_xstrdup_jobinfo(select_jobinfo_t jobinfo, int mode)
 }
 
 /* Unpack node select info from a buffer */
-extern int select_g_unpack_node_info(node_select_info_msg_t **
-		node_select_info_msg_pptr, Buf buffer)
+extern int select_g_unpack_node_info(
+	node_select_info_msg_t **node_select_info_msg_pptr, Buf buffer)
 {
 	int i, record_count = 0;
 	node_select_info_msg_t *buf;
@@ -1595,6 +1543,313 @@ extern int select_g_free_node_info(node_select_info_msg_t **
 
 #else	/* !HAVE_BG */
 
+#ifdef HAVE_CRAY_XT
+
+/* allocate storage for a select job credential
+ * OUT jobinfo - storage for a select job credential
+ * RET         - slurm error code
+ * NOTE: storage must be freed using select_g_free_jobinfo
+ */
+extern int select_g_alloc_jobinfo (select_jobinfo_t *jobinfo)
+{
+	xassert(jobinfo != NULL);
+	
+	*jobinfo = xmalloc(sizeof(struct select_jobinfo));
+	(*jobinfo)->magic = JOBINFO_MAGIC;
+
+	return SLURM_SUCCESS;
+}
+
+/* fill in a previously allocated select job credential
+ * IN/OUT jobinfo  - updated select job credential
+ * IN data_type - type of data to enter into job credential
+ * IN data - the data to enter into job credential
+ */
+extern int select_g_set_jobinfo (select_jobinfo_t jobinfo,
+		enum select_data_type data_type, void *data)
+{
+	int rc = SLURM_SUCCESS;
+	char *tmp_char = (char *) data;
+
+	if (jobinfo == NULL) {
+		error("select_g_set_jobinfo: jobinfo not set");
+		return SLURM_ERROR;
+	}
+	if (jobinfo->magic != JOBINFO_MAGIC) {
+		error("select_g_set_jobinfo: jobinfo magic bad");
+		return SLURM_ERROR;
+	}
+
+	switch (data_type) {
+	case SELECT_DATA_RESV_ID:
+		/* we xfree() any preset value to avoid a memory leak */
+		xfree(jobinfo->reservation_id);
+		if (tmp_char)
+			jobinfo->reservation_id = xstrdup(tmp_char);
+		break;
+	default:
+		debug("select_g_set_jobinfo data_type %d invalid", 
+		      data_type);
+	}
+
+	return rc;
+}
+
+/* get data from a select job credential
+ * IN jobinfo  - updated select job credential
+ * IN data_type - type of data to enter into job credential
+ * OUT data - the data to get from job credential, caller must xfree 
+ *	data for data_tyep == SELECT_DATA_BLOCK_ID 
+ */
+extern int select_g_get_jobinfo (select_jobinfo_t jobinfo,
+		enum select_data_type data_type, void *data)
+{
+	int rc = SLURM_SUCCESS;
+	char **tmp_char = (char **) data;
+
+	if (jobinfo == NULL) {
+		error("select_g_get_jobinfo: jobinfo not set");
+		return SLURM_ERROR;
+	}
+	if (jobinfo->magic != JOBINFO_MAGIC) {
+		error("select_g_get_jobinfo: jobinfo magic bad");
+		return SLURM_ERROR;
+	}
+
+	switch (data_type) {
+	case SELECT_DATA_RESV_ID:
+		if ((jobinfo->reservation_id == NULL) ||
+		    (jobinfo->reservation_id[0] == '\0'))
+			*tmp_char = NULL;
+		else
+			*tmp_char = xstrdup(jobinfo->reservation_id);
+		break;
+	default:
+		/* There is some use of BlueGene specific params that 
+		 * are not supported on the Cray, but requested on
+		 * all systems */
+		debug2("select_g_get_jobinfo data_type %d invalid", 
+		       data_type);
+		return SLURM_ERROR;
+	}
+
+	return rc;
+}
+
+/* copy a select job credential
+ * IN jobinfo - the select job credential to be copied
+ * RET        - the copy or NULL on failure
+ * NOTE: returned value must be freed using select_g_free_jobinfo
+ */
+extern select_jobinfo_t select_g_copy_jobinfo(select_jobinfo_t jobinfo)
+{
+	struct select_jobinfo *rc = NULL;
+		
+	if (jobinfo == NULL)
+		;
+	else if (jobinfo->magic != JOBINFO_MAGIC)
+		error("select_g_copy_jobinfo: jobinfo magic bad");
+	else {
+		rc = xmalloc(sizeof(struct select_jobinfo));
+		rc->magic = JOBINFO_MAGIC;
+		rc->reservation_id = xstrdup(jobinfo->reservation_id);
+	}
+
+	return rc;
+}
+
+/* free storage previously allocated for a select job credential
+ * IN jobinfo  - the select job credential to be freed
+ */
+extern int select_g_free_jobinfo  (select_jobinfo_t *jobinfo)
+{
+	int rc = SLURM_SUCCESS;
+
+	xassert(jobinfo != NULL);
+	if (*jobinfo == NULL)	/* never set, treat as not an error */
+		;
+	else if ((*jobinfo)->magic != JOBINFO_MAGIC) {
+		error("select_g_free_jobinfo: jobinfo magic bad");
+		rc = EINVAL;
+	} else {
+		(*jobinfo)->magic = 0;
+		xfree((*jobinfo)->reservation_id);
+		xfree(*jobinfo);
+	}
+	return rc;
+}
+
+/* pack a select job credential into a buffer in machine independent form
+ * IN jobinfo  - the select job credential to be saved
+ * OUT buffer  - buffer with select credential appended
+ * RET         - slurm error code
+ */
+extern int  select_g_pack_jobinfo  (select_jobinfo_t jobinfo, Buf buffer)
+{
+	if (jobinfo) {
+		/* NOTE: If new elements are added here, make sure to 
+		 * add equivalant pack of zeros below for NULL pointer */
+		packstr(jobinfo->reservation_id, buffer);
+	} else {
+		packnull(buffer); //reservation_id
+	}
+
+	return SLURM_SUCCESS;
+}
+
+/* unpack a select job credential from a buffer
+ * OUT jobinfo - the select job credential read
+ * IN  buffer  - buffer with select credential read from current pointer loc
+ * RET         - slurm error code
+ * NOTE: returned value must be freed using select_g_free_jobinfo
+ */
+extern int  select_g_unpack_jobinfo(select_jobinfo_t jobinfo, Buf buffer)
+{
+	uint32_t uint32_tmp;
+
+	safe_unpackstr_xmalloc(&(jobinfo->reservation_id),  &uint32_tmp, buffer);
+
+	return SLURM_SUCCESS;
+
+      unpack_error:
+	return SLURM_ERROR;
+}
+
+/* write select job credential to a string
+ * IN jobinfo - a select job credential
+ * OUT buf    - location to write job credential contents
+ * IN size    - byte size of buf
+ * IN mode    - print mode, see enum select_print_mode
+ * RET        - the string, same as buf
+ */
+extern char *select_g_sprint_jobinfo(select_jobinfo_t jobinfo,
+				     char *buf, size_t size, int mode)
+{
+		
+	if (buf == NULL) {
+		error("select_g_sprint_jobinfo: buf is null");
+		return NULL;
+	}
+
+	if ((mode != SELECT_PRINT_DATA) &&
+	    jobinfo && (jobinfo->magic != JOBINFO_MAGIC)) {
+		error("select_g_sprint_jobinfo: jobinfo magic bad");
+		return NULL;
+	}
+
+	if (jobinfo == NULL) {
+		if (mode != SELECT_PRINT_HEAD) {
+			error("select_g_sprint_jobinfo: jobinfo bad");
+			return NULL;
+		}
+	}
+
+	switch (mode) {
+	case SELECT_PRINT_HEAD:
+		snprintf(buf, size,
+			 "RESV_ID");
+		break;
+	case SELECT_PRINT_DATA:
+		snprintf(buf, size, 
+			 "%7s",
+			 jobinfo->reservation_id);
+		break;
+	case SELECT_PRINT_MIXED:
+		snprintf(buf, size, 
+			 "Resv_ID=%s",
+			 jobinfo->reservation_id);
+		break;
+	case SELECT_PRINT_RESV_ID:
+		snprintf(buf, size, "%s", jobinfo->reservation_id);
+		break;	
+	default:
+		/* likely a BlueGene specific mode */
+		error("select_g_sprint_jobinfo: bad mode %d", mode);
+		if (size > 0)
+			buf[0] = '\0';
+	}
+	
+	return buf;
+}
+
+/* write select job info to a string
+ * IN jobinfo - a select job credential
+ * IN mode    - print mode, see enum select_print_mode
+ * RET        - char * containing string of request
+ */
+extern char *select_g_xstrdup_jobinfo(select_jobinfo_t jobinfo, int mode)
+{
+	char *buf = NULL;
+		
+	if ((mode != SELECT_PRINT_DATA) &&
+	    jobinfo && (jobinfo->magic != JOBINFO_MAGIC)) {
+		error("select_g_xstrdup_jobinfo: jobinfo magic bad");
+		return NULL;
+	}
+
+	if (jobinfo == NULL) {
+		if (mode != SELECT_PRINT_HEAD) {
+			error("select_g_xstrdup_jobinfo: jobinfo bad");
+			return NULL;
+		}
+	}
+
+	switch (mode) {
+	case SELECT_PRINT_HEAD:
+		xstrcat(buf, 
+			"RESV_ID");
+		break;
+	case SELECT_PRINT_DATA:
+		xstrfmtcat(buf, 
+			   "%7s",
+			   jobinfo->reservation_id);
+		break;
+	case SELECT_PRINT_MIXED:
+		xstrfmtcat(buf, 
+			   "Resv_ID=%s",
+			   jobinfo->reservation_id);
+		break;
+	case SELECT_PRINT_RESV_ID:
+		xstrfmtcat(buf, "%s", jobinfo->reservation_id);
+		break;
+	default:
+		error("select_g_xstrdup_jobinfo: bad mode %d", mode);
+	}
+	
+	return buf;
+}
+
+/* Unpack node select info from a buffer */
+extern int select_g_unpack_node_info(node_select_info_msg_t **
+		node_select_info_msg_pptr, Buf buffer)
+{
+	return SLURM_ERROR;
+}
+
+/* Free a node select information buffer */
+extern int select_g_free_node_info(node_select_info_msg_t **
+		node_select_info_msg_pptr)
+{
+	return SLURM_ERROR;
+}
+
+extern void select_g_print_config(List config_list)
+{
+	ListIterator iter = NULL;
+	config_key_pair_t *key_pair;
+
+	if (!config_list)
+		return;
+	
+	printf("\nCRAY XT configuration:\n");
+	iter = list_iterator_create(config_list);
+	while((key_pair = list_next(iter))) {
+		printf("%-22s = %s\n", key_pair->name, key_pair->value);
+	}
+	list_iterator_destroy(iter);
+}
+
+#else	/* !HAVE_CRAY_XT */
 /* allocate storage for a select job credential
  * OUT jobinfo - storage for a select job credential
  * RET         - slurm error code
@@ -1704,4 +1959,21 @@ extern int select_g_free_node_info(node_select_info_msg_t **
 	return SLURM_ERROR;
 }
 
-#endif
+extern void select_g_print_config(List config_list)
+{
+	ListIterator iter = NULL;
+	config_key_pair_t *key_pair;
+
+	if (!config_list)
+		return;
+	
+	printf("\nSelect configuration:\n");
+	iter = list_iterator_create(config_list);
+	while((key_pair = list_next(iter))) {
+		printf("%-22s = %s\n", key_pair->name, key_pair->value);
+	}
+	list_iterator_destroy(iter);
+}
+
+#endif	/* HAVE_CRAY_XT */
+#endif	/* HAVE_BG */
diff --git a/src/common/node_select.h b/src/common/node_select.h
index 7c0d957ae..60e2a9a98 100644
--- a/src/common/node_select.h
+++ b/src/common/node_select.h
@@ -1,15 +1,15 @@
 /*****************************************************************************\
  *  node_select.h - Define node selection plugin functions.
- *
- * $Id: node_select.h 15324 2008-10-07 00:16:53Z da $
  *****************************************************************************
- *  Copyright (C) 2004-2006 The Regents of the University of California.
+ *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -128,9 +128,11 @@ extern int select_g_update_sub_node (update_part_msg_t *part_desc_ptr);
  * IN node_pts  - current node record
  * IN cr_info   - type of data to get from the node record 
  *                (see enum select_data_info)
+ * IN job_ptr   - pointer to the job that's related to this query (may be NULL)
  * IN/OUT data  - the data to get from node record
  */
 extern int select_g_get_info_from_plugin (enum select_data_info cr_info, 
+					  struct job_record *job_ptr,
 					  void *data);
 
 /* 
@@ -238,14 +240,6 @@ extern int select_g_job_suspend(struct job_record *job_ptr);
  */
 extern int select_g_job_resume(struct job_record *job_ptr);
 
-/*
- * Get number of allocated cores per socket from a job
- * IN job_id      - identifies the job
- * IN alloc_index - allocated node index
- * IN s           - socket index
- */
-extern int select_g_get_job_cores(uint32_t job_id, int alloc_index, int s);
-
 /* allocate storage for a select job credential
  * OUT jobinfo - storage for a select job credential
  * RET         - slurm error code
@@ -282,18 +276,6 @@ extern select_jobinfo_t select_g_copy_jobinfo(select_jobinfo_t jobinfo);
  * RET         - slurm error code
  */
 extern int select_g_free_jobinfo  (select_jobinfo_t *jobinfo);
- 
-/* 
- * Get selected data from a given node for a specific job. 
- * IN node_ptr  - current node record
- * IN job_ptr   - current job record
- * IN cr_info   - type of data to get from the node record
- * IN/OUT data  - the data to get from node record
- */
-extern int select_g_get_extra_jobinfo (struct node_record *node_ptr, 
-				       struct job_record *job_ptr, 
-                                       enum select_data_info cr_info,
-                                       void *data);
 
 /* pack a select job credential into a buffer in machine independent form
  * IN jobinfo  - the select job credential to be saved
@@ -361,4 +343,7 @@ extern int select_g_free_node_info(node_select_info_msg_t **
 /* Note reconfiguration or change in partition configuration */
 extern int select_g_reconfigure(void);
 
+/*  Get configuration specific for this plugin */
+extern List select_g_get_config(void);
+
 #endif /*__SELECT_PLUGIN_API_H__*/
diff --git a/src/common/optz.c b/src/common/optz.c
index ec9d67d84..61d562d4f 100644
--- a/src/common/optz.c
+++ b/src/common/optz.c
@@ -3,10 +3,11 @@
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/optz.h b/src/common/optz.h
index 07cf1b257..5eedcc07b 100644
--- a/src/common/optz.h
+++ b/src/common/optz.h
@@ -3,10 +3,11 @@
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/pack.c b/src/common/pack.c
index 744c04b88..014a899b8 100644
--- a/src/common/pack.c
+++ b/src/common/pack.c
@@ -7,10 +7,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jim Garlick <garlick@llnl.gov>, 
  *             Morris Jette <jette1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -137,7 +138,8 @@ Buf init_buf(int size)
 		error("init_buf: buffer size too large");
 		return NULL;
 	}
-
+	if(size <= 0)
+		size = BUF_SIZE;
 	my_buf = xmalloc(sizeof(struct slurm_buf));
 	my_buf->magic = BUF_MAGIC;
 	my_buf->size = size;
@@ -193,6 +195,55 @@ int unpack_time(time_t * valp, Buf buffer)
 }
 
 
+/*
+ * Given a double, multiple by FLOAT_MULT and then
+ * typecast to a uint64_t in host byte order, convert to network byte order
+ * store in buffer, and adjust buffer counters.
+ */
+void 	packdouble(double val, Buf buffer)
+{
+	double nl1 =  (val * FLOAT_MULT) + .5; /* the .5 is here to
+						  round off.  We have
+						  found on systems
+						  going out more than
+						  15 decimals will
+						  mess things up so
+						  this is here to
+						  correct it. */
+	uint64_t nl =  HTON_uint64(nl1);
+	
+	if (remaining_buf(buffer) < sizeof(nl)) {
+		if (buffer->size > (MAX_BUF_SIZE - BUF_SIZE)) {
+			error("pack64: buffer size too large");
+			return;
+		}
+		buffer->size += BUF_SIZE;
+		xrealloc(buffer->head, buffer->size);
+	}
+
+	memcpy(&buffer->head[buffer->processed], &nl, sizeof(nl));
+	buffer->processed += sizeof(nl);
+
+}
+
+/*
+ * Given a buffer containing a network byte order 64-bit integer,
+ * typecast as double, and  divide by FLOAT_MULT 
+ * store a host double at 'valp', and adjust buffer counters.
+ */
+int	unpackdouble(double *valp, Buf buffer)
+{
+	uint64_t nl;
+	if (remaining_buf(buffer) < sizeof(nl))
+		return SLURM_ERROR;
+	
+	memcpy(&nl, &buffer->head[buffer->processed], sizeof(nl));
+
+	*valp = (double)NTOH_uint64(nl) / (double)FLOAT_MULT;
+	buffer->processed += sizeof(nl);
+	return SLURM_SUCCESS;
+}
+
 /*
  * Given a 64-bit integer in host byte order, convert to network byte order
  * store in buffer, and adjust buffer counters.
diff --git a/src/common/pack.h b/src/common/pack.h
index 78531c7b7..a3980de6e 100644
--- a/src/common/pack.h
+++ b/src/common/pack.h
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov>, Morris Jette <jette1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -60,6 +61,7 @@
 #define BUF_MAGIC 0x42554545
 #define BUF_SIZE (16 * 1024)
 #define MAX_BUF_SIZE ((uint32_t) 0xffff0000)	/* avoid going over 32-bits */
+#define FLOAT_MULT 1000000
 
 struct slurm_buf {
 	uint32_t magic;
@@ -85,6 +87,9 @@ void	*xfer_buf_data(Buf my_buf);
 void	pack_time(time_t val, Buf buffer);
 int	unpack_time(time_t *valp, Buf buffer);
 
+void 	packdouble(double val, Buf buffer);
+int	unpackdouble(double *valp, Buf buffer);
+
 void 	pack64(uint64_t val, Buf buffer);
 int	unpack64(uint64_t *valp, Buf buffer);
 
@@ -129,6 +134,20 @@ int	unpackmem_array(char *valp, uint32_t size_valp, Buf buffer);
 		goto unpack_error;			\
 } while (0)
 
+#define safe_packdouble(val,buf) do {			\
+	assert(sizeof(val) == sizeof(double));   	\
+	assert(buf->magic == BUF_MAGIC);		\
+	packdouble(val,buf);				\
+} while (0)
+
+#define safe_unpackdouble(valp,buf) do {		\
+	assert((valp) != NULL); 			\
+	assert(sizeof(*valp) == sizeof(double));        \
+	assert(buf->magic == BUF_MAGIC);		\
+        if (unpackdouble(valp,buf))			\
+		goto unpack_error;			\
+} while (0)
+
 #define safe_pack64(val,buf) do {			\
 	assert(sizeof(val) == sizeof(uint64_t)); 	\
 	assert(buf->magic == BUF_MAGIC);		\
diff --git a/src/common/parse_config.c b/src/common/parse_config.c
index 71539b749..b8a9f986a 100644
--- a/src/common/parse_config.c
+++ b/src/common/parse_config.c
@@ -7,10 +7,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -421,7 +422,7 @@ static int _handle_long(s_p_values_t *v,
 		    || (*endptr != '\0')) {
 			if (strcasecmp(value, "UNLIMITED") == 0
 			    || strcasecmp(value, "INFINITE") == 0) {
-				num = (long)-1;
+				num = (long) INFINITE;
 			} else {
 				error("\"%s\" is not a valid number", value);
 				return -1;
@@ -464,7 +465,7 @@ static int _handle_uint16(s_p_values_t *v,
 		    || (*endptr != '\0')) {
 			if (strcasecmp(value, "UNLIMITED") == 0
 			    || strcasecmp(value, "INFINITE") == 0) {
-				num = (uint16_t)-1;
+				num = (uint16_t) INFINITE;
 			} else {
 				error("%s value \"%s\" is not a valid number", 
 					v->key, value);
@@ -519,7 +520,7 @@ static int _handle_uint32(s_p_values_t *v,
 		    || (*endptr != '\0')) {
 			if ((strcasecmp(value, "UNLIMITED") == 0) ||
 			    (strcasecmp(value, "INFINITE")  == 0)) {
-				num = (uint32_t)-1;
+				num = (uint32_t) INFINITE;
 			} else {
 				error("%s value (%s) is not a valid number", 
 					v->key, value);
diff --git a/src/common/parse_config.h b/src/common/parse_config.h
index acbbdf02b..7d72af7b8 100644
--- a/src/common/parse_config.h
+++ b/src/common/parse_config.h
@@ -3,15 +3,16 @@
  *
  *  NOTE: when you see the prefix "s_p_", think "slurm parser".
  *
- *  $Id: parse_config.h 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: parse_config.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/parse_spec.c b/src/common/parse_spec.c
index e1ff00c3f..1f248bbed 100644
--- a/src/common/parse_spec.c
+++ b/src/common/parse_spec.c
@@ -1,14 +1,15 @@
-/* $Id: parse_spec.c 13672 2008-03-19 23:10:58Z jette $ */
+/* $Id: parse_spec.c 17458 2009-05-12 21:35:36Z dbremer $ */
 /*****************************************************************************\
  * parse_spec.c - configuration file parser
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -40,6 +41,10 @@
 #  include "config.h"
 #endif
 
+#ifndef   _GNU_SOURCE
+#  define _GNU_SOURCE
+#endif
+
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -51,6 +56,7 @@
 #include "src/common/parse_spec.h"
 #include "src/common/xmalloc.h"
 #include "src/common/xstring.h"
+#include "src/common/slurm_strcasestr.h"
 
 
 #define BUFFER_SIZE 1024
@@ -59,7 +65,6 @@
 static int   _load_long (long *destination, char *keyword, char *in_line) ;
 static int   _load_integer (int *destination, char *keyword, char *in_line) ;
 static int   _load_float (float *destination, char *keyword, char *in_line) ;
-static char *_strcasestr(char *haystack, char *needle);
 
 /* 
  * slurm_parser - parse the supplied specification into keyword/value pairs
@@ -136,7 +141,7 @@ _load_float (float *destination, char *keyword, char *in_line)
 	char *str_ptr1, *str_ptr2, *str_ptr3;
 	int i, str_len1, str_len2;
 
-	str_ptr1 = (char *) _strcasestr (in_line, keyword);
+	str_ptr1 = (char *) slurm_strcasestr (in_line, keyword);
 	if (str_ptr1 != NULL) {
 		str_len1 = strlen (keyword);
 		strcpy (scratch, str_ptr1 + str_len1);
@@ -174,7 +179,7 @@ _load_integer (int *destination, char *keyword, char *in_line)
 	char *str_ptr1, *str_ptr2, *str_ptr3;
 	int i, str_len1, str_len2;
 
-	str_ptr1 = (char *) _strcasestr (in_line, keyword);
+	str_ptr1 = (char *) slurm_strcasestr (in_line, keyword);
 	if (str_ptr1 != NULL) {
 		str_len1 = strlen (keyword);
 		strcpy (scratch, str_ptr1 + str_len1);
@@ -231,7 +236,7 @@ _load_long (long *destination, char *keyword, char *in_line)
 	char *str_ptr1, *str_ptr2, *str_ptr3;
 	int i, str_len1, str_len2;
 
-	str_ptr1 = (char *) _strcasestr (in_line, keyword);
+	str_ptr1 = (char *) slurm_strcasestr (in_line, keyword);
 	if (str_ptr1 != NULL) {
 		str_len1 = strlen (keyword);
 		strcpy (scratch, str_ptr1 + str_len1);
@@ -289,7 +294,7 @@ load_string  (char **destination, char *keyword, char *in_line)
 	char *str_ptr1, *str_ptr2, *str_ptr3;
 	int i, str_len1, str_len2;
 
-	str_ptr1 = (char *) _strcasestr (in_line, keyword);
+	str_ptr1 = (char *) slurm_strcasestr (in_line, keyword);
 	if (str_ptr1 != NULL) {
 		int quoted = 0;
 		str_len1 = strlen (keyword);
@@ -315,27 +320,3 @@ load_string  (char **destination, char *keyword, char *in_line)
 	}
 	return 0;
 }
-
-/* case insensitve version of strstr() */
-static char *
-_strcasestr(char *haystack, char *needle)
-{
-	int hay_inx,  hay_size  = strlen(haystack);
-	int need_inx, need_size = strlen(needle);
-	char *hay_ptr = haystack;
-
-	for (hay_inx=0; hay_inx<hay_size; hay_inx++) {
-		for (need_inx=0; need_inx<need_size; need_inx++) {
-			if (tolower((int) hay_ptr[need_inx]) != 
-			    tolower((int) needle [need_inx]))
-				break;		/* mis-match */
-		}
-
-		if (need_inx == need_size)	/* it matched */
-			return hay_ptr;
-		else				/* keep looking */
-			hay_ptr++;
-	}
-
-	return NULL;	/* no match anywhere in string */
-}
diff --git a/src/common/parse_spec.h b/src/common/parse_spec.h
index 6b4359c3c..c8f5009f7 100644
--- a/src/common/parse_spec.h
+++ b/src/common/parse_spec.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/parse_time.c b/src/common/parse_time.c
index 38576d74b..a70435cba 100644
--- a/src/common/parse_time.c
+++ b/src/common/parse_time.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -35,9 +36,15 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
 \*****************************************************************************/
 
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
 #include <stdio.h>
 #include <time.h>
+#include <string.h>
 #include <strings.h>
+
 #ifndef   __USE_ISOC99
 #  define __USE_ISOC99 /* isblank() */
 #endif
@@ -193,7 +200,8 @@ _get_time(char *time_str, int *pos, int *hour, int *minute, int * second)
 }
 
 /* convert "MMDDYY" "MM.DD.YY" or "MM/DD/YY" string to numeric values
- * time_str (in): string to parse
+ * or "YYYY-MM-DD string to numeric values
+* time_str (in): string to parse
  * pos (in/out): position of parse start/end
  * month, mday, year (out): numberic values
  * RET: -1 on error, 0 otherwise
@@ -203,11 +211,62 @@ static int _get_date(char *time_str, int *pos, int *month, int *mday, int *year)
 	int mon, day, yr;
 	int offset = *pos;
 
+	if(time_str[offset+4] && (time_str[offset+4] == '-')
+	   && time_str[offset+7] && (time_str[offset+7] == '-')) {
+		/* get year */
+		if ((time_str[offset] < '0') || (time_str[offset] > '9'))
+			goto prob;
+		yr = time_str[offset++] - '0';
+
+		if ((time_str[offset] < '0') || (time_str[offset] > '9'))
+			goto prob;
+		yr = (yr * 10) + time_str[offset++] - '0';
+
+		if ((time_str[offset] < '0') || (time_str[offset] > '9'))
+			goto prob;
+		yr = (yr * 10) + time_str[offset++] - '0';
+
+		if ((time_str[offset] < '0') || (time_str[offset] > '9'))
+			goto prob;
+		yr = (yr * 10) + time_str[offset++] - '0';
+		
+		offset++; // for the -
+		
+		/* get month */
+		mon = time_str[offset++] - '0';
+		if ((time_str[offset] >= '0') && (time_str[offset] <= '9'))
+			mon = (mon * 10) + time_str[offset++] - '0';
+		if ((mon < 1) || (mon > 12)) {
+			offset -= 2;
+			goto prob;
+		}
+		
+		offset++; // for the -
+		
+		/* get day */
+		if ((time_str[offset] < '0') || (time_str[offset] > '9'))
+			goto prob;
+		day = time_str[offset++] - '0';
+		if ((time_str[offset] >= '0') && (time_str[offset] <= '9'))
+			day = (day * 10) + time_str[offset++] - '0';
+		if ((day < 1) || (day > 31)) {
+			offset -= 2;
+			goto prob;
+		}
+		
+		*pos = offset - 1;
+		*month = mon - 1;	/* zero origin */
+		*mday  = day;
+		*year  = yr - 1900;     /* need to make it mktime
+					   happy 1900 == "00" */
+		return 0;
+	}
+	
 	/* get month */
 	mon = time_str[offset++] - '0';
 	if ((time_str[offset] >= '0') && (time_str[offset] <= '9'))
 		mon = (mon * 10) + time_str[offset++] - '0';
-	if ((mon < 1) || (mon > 12)) {
+       	if ((mon < 1) || (mon > 12)) {
 		offset -= 2;
 		goto prob;
 	}
@@ -255,6 +314,8 @@ static int _get_date(char *time_str, int *pos, int *month, int *mday, int *year)
  *   HH:MM[:SS] [AM|PM]
  *   MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]
  *   MM/DD[/YY]-HH:MM[:SS]
+ *   YYYY-MM-DD[THH[:MM[:SS]]]
+ *
  *   now + count [minutes | hours | days | weeks]
  * 
  * Invalid input results in message to stderr and return value of zero
@@ -273,7 +334,8 @@ extern time_t parse_time(char *time_str, int past)
 	time_now_tm = localtime(&time_now);
 
 	for (pos=0; ((time_str[pos] != '\0')&&(time_str[pos] != '\n')); pos++) {
-		if (isblank(time_str[pos]) || (time_str[pos] == '-'))
+		if (isblank(time_str[pos]) || (time_str[pos] == '-') 
+		    || (time_str[pos] == 'T'))
 			continue;
 		if (strncasecmp(time_str+pos, "today", 5) == 0) {
 			month = time_now_tm->tm_mon;
@@ -324,7 +386,8 @@ extern time_t parse_time(char *time_str, int past)
 				}
 				if (isblank(time_str[i]))
 					continue;
-				if ((time_str[i] == '\0') || (time_str[i] == '\n')) {
+				if ((time_str[i] == '\0') 
+				    || (time_str[i] == '\n')) {
 					pos += (i-1);
 					break;
 				}
@@ -342,7 +405,8 @@ extern time_t parse_time(char *time_str, int past)
 			continue;
 		}
 
-		if ((time_str[pos] < '0') || (time_str[pos] > '9'))	/* invalid */
+		if ((time_str[pos] < '0') || (time_str[pos] > '9'))
+			/* invalid */
 			goto prob;
 		/* We have some numeric value to process */
 		if (time_str[pos+2] == ':') {	/* time */
@@ -350,10 +414,11 @@ extern time_t parse_time(char *time_str, int past)
 				goto prob;
 			continue;
 		}
+		
 		if (_get_date(time_str, &pos, &month, &mday, &year))
 			goto prob;
 	}
-	/* printf("%d/%d/%d %d:%d\n",month+1,mday,year+1900,hour+1,minute); */
+/* 	printf("%d/%d/%d %d:%d\n",month+1,mday,year,hour+1,minute);  */
 
 
 	if ((hour == -1) && (month == -1))		/* nothing specified, time=0 */
@@ -407,7 +472,7 @@ extern time_t parse_time(char *time_str, int past)
 	}
 
 	/* convert the time into time_t format */
-	bzero(&res_tm, sizeof(res_tm));
+	memset(&res_tm, 0, sizeof(res_tm));
 	res_tm.tm_sec   = second;
 	res_tm.tm_min   = minute;
 	res_tm.tm_hour  = hour;
@@ -415,6 +480,9 @@ extern time_t parse_time(char *time_str, int past)
 	res_tm.tm_mon   = month;
 	res_tm.tm_year  = year;
 	res_tm.tm_isdst = -1;
+
+	/* printf("%d/%d/%d %d:%d\n",month+1,mday,year,hour+1,minute);  */
+
 	return mktime(&res_tm);
 
  prob:	fprintf(stderr, "Invalid time specification (pos=%d): %s\n", pos, time_str);
@@ -457,7 +525,7 @@ slurm_make_time_str (time_t *time, char *string, int size)
 	if ( *time == (time_t) 0 ) {
 		snprintf(string, size, "Unknown");
 	} else {
-#ifdef ISO8601
+#ifdef USE_ISO_8601
 		/* Format YYYY-MM-DDTHH:MM:SS, ISO8601 standard format,
 		 * NOTE: This is expected to break Maui, Moab and LSF
 		 * schedulers management of SLURM. */
diff --git a/src/common/parse_time.h b/src/common/parse_time.h
index 57a731668..c2af20d3e 100644
--- a/src/common/parse_time.h
+++ b/src/common/parse_time.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2005-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -60,6 +61,7 @@
  *   midnight, noon, teatime (4PM)
  *   HH:MM [AM|PM]
  *   MMDDYY or MM/DD/YY or MM.DD.YY
+ *   YYYY-MM-DD[THH[:MM[:SS]]]
  *   now + count [minutes | hours | days | weeks]
  *
  * Invalid input results in message to stderr and return value of zero
diff --git a/src/common/plugin.c b/src/common/plugin.c
index cab64e29b..142ef5f32 100644
--- a/src/common/plugin.c
+++ b/src/common/plugin.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
- * plugin.h - plugin architecture implementation.
+ *  plugin.h - plugin architecture implementation.
  *****************************************************************************
  *  Copyright (C) 2002-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 Jay Windley <jwindley@lnxi.com>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -43,7 +44,7 @@
 #include <errno.h>
 #include <sys/types.h>
 #include <stdio.h>
-#include <dlfcn.h>        /* don't know if there's an autoconf for this. */
+#include <dlfcn.h>	/* don't know if there's an autoconf for this. */
 #include <string.h>
 
 #include "src/common/xmalloc.h"
@@ -79,6 +80,25 @@ static char *_dlerror(void)
 	return rc;
 }
 
+const char * plugin_strerror(plugin_err_t e)
+{
+	switch (e) {
+		case EPLUGIN_SUCCESS:
+			return ("Success");
+		case EPLUGIN_NOTFOUND:
+			return ("Plugin file not found");
+		case EPLUGIN_ACCESS_ERROR:
+			return ("Plugin access denied");
+		case EPLUGIN_DLOPEN_FAILED:
+			return ("Dlopen of plugin file failed");
+		case EPLUGIN_INIT_FAILED:
+			return ("Plugin init() callback failed");
+		case EPLUGIN_MISSING_SYMBOL:
+			return ("Plugin name/type/version symbol missing");
+	}
+	return ("Unknown error");
+}
+
 int
 plugin_peek( const char *fq_path,
 			 char *plugin_type,
@@ -120,14 +140,26 @@ plugin_peek( const char *fq_path,
 	return SLURM_SUCCESS;
 }
 
-plugin_handle_t
-plugin_load_from_file( const char *fq_path )
+plugin_err_t
+plugin_load_from_file(plugin_handle_t *p, const char *fq_path)
 {
-        plugin_handle_t plug;
-        int (*init)( void );
-        
-        /*
-         * Try to open the shared object.  
+	plugin_handle_t plug;
+	int (*init)(void);
+
+	*p = PLUGIN_INVALID_HANDLE;
+
+	/*
+	 *  Check for file existence and access permissions
+	 */
+	if (access(fq_path, R_OK) < 0) {
+		if (errno == ENOENT)
+			return EPLUGIN_NOTFOUND;
+		else
+			return EPLUGIN_ACCESS_ERROR;
+	}
+
+	/*
+	 * Try to open the shared object.
 	 *
 	 * Use RTLD_LAZY to allow plugins to use symbols that may be 
 	 * defined in only one slurm entity (e.g. srun and not slurmd),
@@ -135,45 +167,43 @@ plugin_load_from_file( const char *fq_path )
 	 * entity from which it is available. (i.e. srun symbols are only
 	 * used in the context of srun, not slurmd.)
 	 *
-         */
-        plug = dlopen( fq_path, RTLD_LAZY );
-        if ( plug == NULL ) {
-		error( "plugin_load_from_file: dlopen(%s): %s",
-			fq_path,
-			_dlerror() );
-                return PLUGIN_INVALID_HANDLE;
-        }
-	
-        /* Now see if our required symbols are defined. */
-        if ( ( dlsym( plug, PLUGIN_NAME ) == NULL ) ||
-             ( dlsym( plug, PLUGIN_TYPE ) == NULL ) ||
-             ( dlsym( plug, PLUGIN_VERSION ) == NULL ) ) {
-		debug( "plugin_load_from_file: invalid symbol");
-                /* slurm_seterrno( SLURM_PLUGIN_SYMBOLS ); */
-                return PLUGIN_INVALID_HANDLE;
-        }
-
-        /*
-         * Now call its init() function, if present.  If the function
-         * returns nonzero, unload the plugin and signal an error.
-         */
-        if ( ( init = dlsym( plug, "init" ) ) != NULL ) {
-                if ( (*init)() != 0 ) {
-			error( "plugin_load_from_file(%s): init() returned SLURM_ERROR", 
-				fq_path );
-                        (void) dlclose( plug );
-                        return PLUGIN_INVALID_HANDLE;
-                }
-        }
-        
-        return plug;
+	 */
+	plug = dlopen(fq_path, RTLD_LAZY);
+	if (plug == NULL) {
+		error("plugin_load_from_file: dlopen(%s): %s",
+		      fq_path,
+		      _dlerror());
+		return EPLUGIN_DLOPEN_FAILED;
+	}
+
+	/* Now see if our required symbols are defined. */
+	if ((dlsym(plug, PLUGIN_NAME) == NULL) ||
+	    (dlsym(plug, PLUGIN_TYPE) == NULL) ||
+	    (dlsym(plug, PLUGIN_VERSION) == NULL)) {
+		dlclose (plug);
+		return EPLUGIN_MISSING_SYMBOL;
+	}
+
+	/*
+	 * Now call its init() function, if present.  If the function
+	 * returns nonzero, unload the plugin and signal an error.
+	 */
+	if ((init = dlsym(plug, "init")) != NULL) {
+		if ((*init)() != 0) {
+			dlclose(plug);
+			return EPLUGIN_INIT_FAILED;
+		}
+	}
+
+	*p = plug;
+	return EPLUGIN_SUCCESS;
 }
 
 plugin_handle_t
 plugin_load_and_link(const char *type_name, int n_syms,
 		    const char *names[], void *ptrs[])
 {
-        plugin_handle_t plug = PLUGIN_INVALID_HANDLE;
+	plugin_handle_t plug = PLUGIN_INVALID_HANDLE;
 	struct stat st;
 	char *head=NULL, *dir_array=NULL, *so_name = NULL,
 		*file_name=NULL;
@@ -210,7 +240,7 @@ plugin_load_and_link(const char *type_name, int n_syms,
 			debug4("No Good.");
 			xfree(file_name);
 		} else {
-			plug = plugin_load_from_file(file_name);
+			plugin_load_from_file(&plug, file_name);
 			xfree(file_name);
 			if (plugin_get_syms(plug, n_syms, names, ptrs) >= 
 			    n_syms) {
@@ -239,72 +269,72 @@ plugin_load_and_link(const char *type_name, int n_syms,
 void
 plugin_unload( plugin_handle_t plug )
 {
-        void (*fini)(void);
-        
-        if ( plug != PLUGIN_INVALID_HANDLE ) {
-                if ( ( fini = dlsym( plug, "fini" ) ) != NULL ) {
-                        (*fini)();
-                }
-                (void) dlclose( plug );
-        }
+	void (*fini)(void);
+	
+	if ( plug != PLUGIN_INVALID_HANDLE ) {
+		if ( ( fini = dlsym( plug, "fini" ) ) != NULL ) {
+			(*fini)();
+		}
+		(void) dlclose( plug );
+	}
 }
 
 
 void *
 plugin_get_sym( plugin_handle_t plug, const char *name )
 {
-        if ( plug != PLUGIN_INVALID_HANDLE )
-                return dlsym( plug, name );
-        else
-                return NULL;
+	if ( plug != PLUGIN_INVALID_HANDLE )
+		return dlsym( plug, name );
+	else
+		return NULL;
 }
 
 const char *
 plugin_get_name( plugin_handle_t plug )
 {
-        if ( plug != PLUGIN_INVALID_HANDLE )
-                return (const char *) dlsym( plug, PLUGIN_NAME );
-        else
-                return NULL;
+	if ( plug != PLUGIN_INVALID_HANDLE )
+		return (const char *) dlsym( plug, PLUGIN_NAME );
+	else
+		return NULL;
 }
 
 const char *
 plugin_get_type( plugin_handle_t plug )
 {
-        if ( plug != PLUGIN_INVALID_HANDLE )
-                return (const char *) dlsym( plug, PLUGIN_TYPE );
-        else
-                return NULL;
+	if ( plug != PLUGIN_INVALID_HANDLE )
+		return (const char *) dlsym( plug, PLUGIN_TYPE );
+	else
+		return NULL;
 }
 
 uint32_t
 plugin_get_version( plugin_handle_t plug )
 {
-        uint32_t *ptr;
+	uint32_t *ptr;
 
-        if ( plug == PLUGIN_INVALID_HANDLE ) return 0;        
-        ptr = (uint32_t *) dlsym( plug, PLUGIN_VERSION );
-        return ptr ? *ptr : 0;
+	if ( plug == PLUGIN_INVALID_HANDLE ) return 0;	
+	ptr = (uint32_t *) dlsym( plug, PLUGIN_VERSION );
+	return ptr ? *ptr : 0;
 }
 
 int
 plugin_get_syms( plugin_handle_t plug,
-                 int n_syms,
-                 const char *names[],
-                 void *ptrs[] )
+		 int n_syms,
+		 const char *names[],
+		 void *ptrs[] )
 {
-        int i, count;
+	int i, count;
 
-        count = 0;
-        for ( i = 0; i < n_syms; ++i ) {
-                ptrs[ i ] = dlsym( plug, names[ i ] );
-                if ( ptrs[ i ] ) 
+	count = 0;
+	for ( i = 0; i < n_syms; ++i ) {
+		ptrs[ i ] = dlsym( plug, names[ i ] );
+		if ( ptrs[ i ] ) 
 			++count;
 		else 
 			debug3("Couldn't find sym '%s' in the plugin",
 			       names[ i ]);
 	}
 
-        return count;
+	return count;
 }
 
diff --git a/src/common/plugin.h b/src/common/plugin.h
index e634320f1..1e5c3fbc8 100644
--- a/src/common/plugin.h
+++ b/src/common/plugin.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jay Windlay <jwindley@lnxi.com>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -80,6 +81,17 @@ typedef void *plugin_handle_t;
 
 #define PLUGIN_INVALID_HANDLE ((void*)0)
 
+typedef enum {
+	EPLUGIN_SUCCESS = 0,     /* Success                             */
+	EPLUGIN_NOTFOUND,        /* Plugin file does not exist          */
+	EPLUGIN_ACCESS_ERROR,    /* Access denied                       */
+	EPLUGIN_DLOPEN_FAILED,   /* Dlopen not successful               */
+	EPLUGIN_INIT_FAILED,     /* Plugin's init() callback failed     */
+	EPLUGIN_MISSING_SYMBOL   /* plugin_name/type/version missing    */
+} plugin_err_t;
+
+const char *plugin_strerror(plugin_err_t err);
+
 /*
  * "Peek" into a plugin to discover its type and version.  This does
  * not run the plugin's init() or fini() functions (as defined in this
@@ -107,15 +119,17 @@ int plugin_peek( const char *fq_path,
 /*
  * Simplest way to get a plugin -- load it from a file.
  *
+ * pph     - Pointer to a plugin handle
  * fq_path - the fully-qualified pathname (i.e., from root) to
  * the plugin to load.
  *
- * Returns a handle if successful, or NULL if not.
+ * Returns EPLUGIN_SUCCESS on success, and an plugin_err_t error
+ * code on failure.
  *
  * The plugin's initialization code will be executed prior
  * to this function's return.
  */
-plugin_handle_t plugin_load_from_file( const char *fq_path );
+plugin_err_t plugin_load_from_file(plugin_handle_t *pph, const char *fq_path);
 
 /*
  * load plugin and link hooks.
diff --git a/src/common/plugrack.c b/src/common/plugrack.c
index eb595df02..18e5c490b 100644
--- a/src/common/plugrack.c
+++ b/src/common/plugrack.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jay Windley <jwindley@lnxi.com>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -547,7 +548,7 @@ plugrack_load_all( plugrack_t rack )
         it = list_iterator_create( rack->entries );
         while ( ( e = list_next( it ) ) != NULL ) {
                 if ( e->plug == PLUGIN_INVALID_HANDLE ) {
-                        e->plug = plugin_load_from_file( e->fq_path );
+                        plugin_load_from_file(&e->plug, e->fq_path);
                 }
         }
 
@@ -584,7 +585,7 @@ plugrack_use_by_type( plugrack_t rack,
 		
                 /* See if plugin is loaded. */
                 if ( e->plug == PLUGIN_INVALID_HANDLE ) 
-			e->plug = plugin_load_from_file( e->fq_path );
+                        plugin_load_from_file(&e->plug, e->fq_path);
 
                 /* If load was successful, increment the reference count. */
                 if ( e->plug == PLUGIN_INVALID_HANDLE )
diff --git a/src/common/plugrack.h b/src/common/plugrack.h
index 3937f0bd1..2fd3a8502 100644
--- a/src/common/plugrack.h
+++ b/src/common/plugrack.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jay Windley <jwindley@lnxi.com>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/plugstack.c b/src/common/plugstack.c
index 9dea9a6c2..ac076ee0d 100644
--- a/src/common/plugstack.c
+++ b/src/common/plugstack.c
@@ -2,12 +2,13 @@
  *  plugstack.c -- stackable plugin architecture for node job kontrol (SPANK)
  *****************************************************************************
  *  Copyright (C) 2005-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).
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -55,6 +56,7 @@
 #include "src/common/plugstack.h"
 #include "src/common/optz.h"
 #include "src/common/job_options.h"
+#include "src/common/env.h"
 
 #include "src/slurmd/slurmstepd/slurmstepd_job.h"
 /*#include "src/srun/srun_job.h"*/
@@ -70,18 +72,20 @@ struct spank_plugin_operations {
 	spank_f *init_post_opt;
 	spank_f *local_user_init;
 	spank_f *user_init;
+	spank_f *task_init_privileged;
 	spank_f *user_task_init;
 	spank_f *task_post_fork;
 	spank_f *task_exit;
 	spank_f *exit;
 };
 
-const int n_spank_syms = 8;
+const int n_spank_syms = 9;
 const char *spank_syms[] = {
 	"slurm_spank_init",
 	"slurm_spank_init_post_opt",
 	"slurm_spank_local_user_init",
 	"slurm_spank_user_init",
+	"slurm_spank_task_init_privileged",
 	"slurm_spank_task_init",
 	"slurm_spank_task_post_fork",
 	"slurm_spank_task_exit",
@@ -102,6 +106,9 @@ struct spank_plugin {
 /*
  *  SPANK Plugin options 
  */
+
+#define SPANK_OPTION_ENV_PREFIX "_SLURM_SPANK_OPTION_"
+
 struct spank_plugin_opt {
 	struct spank_option *opt;   /* Copy of plugin option info           */
 	struct spank_plugin *plugin;/* Link back to plugin structure        */
@@ -123,14 +130,14 @@ static List option_cache = NULL;
 
 
 /*
- *  SPANK handle for plugins
- *
- *   Handle types: local or remote.
+ *  SPANK plugin context (local, remote, allocator)
  */
-typedef enum spank_handle_type {
-	S_TYPE_LOCAL,           /* LOCAL == srun         */
-	S_TYPE_REMOTE           /* REMOTE == slurmd      */
-} spank_handle_type_t;
+enum spank_context_type {
+	S_TYPE_NONE,
+	S_TYPE_LOCAL,           /* LOCAL == srun              */
+	S_TYPE_REMOTE,          /* REMOTE == slurmd           */
+	S_TYPE_ALLOCATOR        /* ALLOCATOR == sbatch/salloc */
+};
 
 /*
  *  SPANK plugin hook types:
@@ -140,6 +147,7 @@ typedef enum step_fn {
 	SPANK_INIT_POST_OPT,
 	LOCAL_USER_INIT,
 	STEP_USER_INIT,
+	STEP_TASK_INIT_PRIV,
 	STEP_USER_TASK_INIT,
 	STEP_TASK_POST_FORK,
 	STEP_TASK_EXIT,
@@ -150,7 +158,6 @@ struct spank_handle {
 #   define SPANK_MAGIC 0x00a5a500
 	int                  magic;  /* Magic identifier to ensure validity. */
 	struct spank_plugin *plugin; /* Current plugin using handle          */
-	spank_handle_type_t  type;   /* remote(slurmd) || local(srun)        */
 	step_fn_t            phase;  /* Which spank fn are we called from?   */
 	void               * job;    /* Reference to current srun|slurmd job */
 	slurmd_task_info_t * task;   /* Reference to current task (if valid) */
@@ -160,6 +167,7 @@ struct spank_handle {
  *  SPANK plugins stack
  */
 static List spank_stack = NULL;
+static enum spank_context_type spank_ctx = S_TYPE_NONE;
 
 static pthread_mutex_t spank_mutex = PTHREAD_MUTEX_INITIALIZER;
 
@@ -252,10 +260,13 @@ static struct spank_plugin *_spank_plugin_create(char *path, int ac,
 {
 	struct spank_plugin *plugin;
 	plugin_handle_t p;
+	plugin_err_t e;
 	struct spank_plugin_operations ops;
 
-	if (!(p = plugin_load_from_file(path)))
+	if ((e = plugin_load_from_file(&p, path)) != EPLUGIN_SUCCESS) {
+		error ("spank: %s: %s\n", path, plugin_strerror(e));
 		return NULL;
+	}
 
 	if (plugin_get_syms(p, n_spank_syms, spank_syms, (void **)&ops) == 0) {
 		error("spank: \"%s\" exports 0 symbols\n", path);
@@ -272,7 +283,11 @@ static struct spank_plugin *_spank_plugin_create(char *path, int ac,
 	plugin->argv = av;
 	plugin->ops = ops;
 
-	plugin->opts = plugin_get_sym(p, "spank_options");
+	/*
+	 *  Do not load static plugin options table in allocator context.
+	 */
+	if (spank_ctx != S_TYPE_ALLOCATOR)
+		plugin->opts = plugin_get_sym(p, "spank_options");
 
 	return (plugin);
 }
@@ -496,15 +511,9 @@ _spank_handle_init(struct spank_handle *spank, void * arg,
 
 	if (arg != NULL) {
 		spank->job = arg;
-		if (fn == LOCAL_USER_INIT)
-			spank->type = S_TYPE_LOCAL;
-		else {
-			spank->type = S_TYPE_REMOTE;
-			if (taskid >= 0)
-				spank->task = ((slurmd_job_t *) arg)->task[taskid];
+		if (spank_ctx == S_TYPE_REMOTE && taskid >= 0) {
+			spank->task = ((slurmd_job_t *) arg)->task[taskid];
 		}
-	} else {
-		spank->type = S_TYPE_LOCAL;
 	}
 	return (0);
 }
@@ -520,6 +529,8 @@ static const char *_step_fn_name(step_fn_t type)
 		return ("local_user_init");
 	case STEP_USER_INIT:
 		return ("user_init");
+	case STEP_TASK_INIT_PRIV:
+		return ("task_init_privileged");
 	case STEP_USER_TASK_INIT:
 		return ("task_init");
 	case STEP_TASK_POST_FORK:
@@ -591,6 +602,14 @@ static int _do_call_stack(step_fn_t type, void * job, int taskid)
 				       fn_name, rc);
 			}
 			break;
+		case STEP_TASK_INIT_PRIV:
+			if (sp->ops.task_init_privileged) {
+				rc = (*sp->ops.task_init_privileged)
+					(spank, sp->ac, sp->argv);
+				debug2("spank: %s: %s = %d\n", name,
+				       fn_name, rc);
+			}
+			break;
 		case STEP_USER_TASK_INIT:
 			if (sp->ops.user_task_init) {
 				rc = (*sp->ops.user_task_init) (spank,
@@ -640,13 +659,15 @@ static int _do_call_stack(step_fn_t type, void * job, int taskid)
 	return (rc);
 }
 
-int spank_init(slurmd_job_t * job)
+int _spank_init(enum spank_context_type context, slurmd_job_t * job)
 {
 	slurm_ctl_conf_t *conf = slurm_conf_lock();
 	const char *path = conf->plugstack;
 	default_spank_path = conf->plugindir;
 	slurm_conf_unlock();
 
+	spank_ctx = context;
+
 	if (_spank_stack_create(path, &spank_stack) < 0) {
 		/* No error if spank config doesn't exist */
 		if (errno == ENOENT)
@@ -658,17 +679,66 @@ int spank_init(slurmd_job_t * job)
 	if (_do_call_stack(SPANK_INIT, job, -1) < 0)
 		return (-1);
 
-	if (job && spank_get_remote_options(job->options) < 0) {
+	/*
+	 *  Nothing more to do unless we are in remote context:
+	 */
+	if (spank_ctx != S_CTX_REMOTE)
+		return (0);
+
+	/*
+	 *  Remote-specific code:
+	 */
+	if (!job) {
+		error("spank: spank_init called without job reference!");
+		return (-1);
+	}
+
+	/*
+	 *  Get any remote options from job launch message:
+	 */
+	if (spank_get_remote_options(job->options) < 0) {
 		error("spank: Unable to get remote options");
 		return (-1);
 	}
 
-	if (_do_call_stack(SPANK_INIT_POST_OPT, job, -1) < 0)
+	/*
+	 *  Get any remote option passed thru environment
+	 */
+	if (spank_get_remote_options_env(job->env) < 0) {
+		error("spank: Unable to get remote options from environment");
 		return (-1);
+	}
 
-	return (0);
+	/*
+	 *  Now that all options have been processed, we can
+	 *   call the post_opt handlers here in remote context.
+	 */
+	return (_do_call_stack(SPANK_INIT_POST_OPT, job, -1) < 0);
+}
+
+int spank_init (slurmd_job_t * job)
+{
+	if (job)
+		return _spank_init (S_TYPE_REMOTE, job);
+	else
+		return _spank_init (S_TYPE_LOCAL, NULL);
+}
+
+int spank_init_allocator (void)
+{
+	return _spank_init (S_TYPE_ALLOCATOR, NULL);
 }
 
+int spank_init_post_opt (void)
+{
+	/*
+	 *  In allocator context, set remote options in env here.
+	 */
+	if (spank_ctx == S_TYPE_ALLOCATOR)
+		spank_set_remote_options_env();
+
+	return (_do_call_stack(SPANK_INIT_POST_OPT, NULL, -1));
+}
 
 int spank_user(slurmd_job_t * job)
 {
@@ -680,6 +750,11 @@ int spank_local_user(struct spank_launcher_job_info *job)
 	return (_do_call_stack(LOCAL_USER_INIT, job, -1));
 }
 
+int spank_task_privileged(slurmd_job_t *job, int taskid)
+{
+	return (_do_call_stack(STEP_TASK_INIT_PRIV, job, taskid));
+}
+
 int spank_user_task(slurmd_job_t * job, int taskid)
 {
 	return (_do_call_stack(STEP_USER_TASK_INIT, job, taskid));
@@ -788,9 +863,13 @@ _spank_option_register(struct spank_plugin *p, struct spank_option *opt)
 	int disabled = 0;
 	struct spank_plugin_opt *spopt;
 
+	if (!option_cache) {
+		option_cache =
+		    list_create((ListDelF) _spank_plugin_opt_destroy);
+	}
+
 	spopt = list_find_first(option_cache, 
 			(ListFindF) _opt_by_name, opt->name);
-
 	if (spopt) {
 		struct spank_plugin *q = spopt->plugin;
 		info("spank: option \"%s\" provided by both %s and %s", 
@@ -837,11 +916,6 @@ static int _spank_plugin_options_cache(struct spank_plugin *p)
 	if ((opt == NULL) || opt->name == NULL)
 		return (0);
 
-	if (!option_cache) {
-		option_cache =
-		    list_create((ListDelF) _spank_plugin_opt_destroy);
-	}
-
 	for (; opt && opt->name != NULL; opt++)
 		_spank_option_register(p, opt);
 
@@ -915,6 +989,9 @@ int spank_process_option(int optval, const char *arg)
 	struct spank_plugin_opt *opt;
 	int rc = 0;
 
+	if (option_cache == NULL || (list_count(option_cache) == 0))
+		return (-1);
+
 	opt =
 	    list_find_first(option_cache, (ListFindF) _opt_by_val,
 			    &optval);
@@ -1078,7 +1155,7 @@ int spank_print_options(FILE * fp, int left_pad, int width)
 	if ((option_cache == NULL) || (list_count(option_cache) == 0))
 		return (0);
 
-	fprintf(fp, "Options provided by plugins:\n");
+	fprintf(fp, "\nOptions provided by plugins:\n");
 
 	i = list_iterator_create(option_cache);
 	while ((p = list_next(i))) {
@@ -1093,6 +1170,78 @@ int spank_print_options(FILE * fp, int left_pad, int width)
 
 #define OPT_TYPE_SPANK 0x4400
 
+static char _canonical_char (char c)
+{
+	if (!isalnum (c))
+		return '_';
+	else
+		return c;
+}
+
+/*
+ *  Create spank option environment variable name from option name.
+ */
+static char * _opt_env_name (struct spank_plugin_opt *p, char *buf, size_t siz)
+{
+	const char * name = p->opt->name;
+	const char * pname = p->plugin->name;
+	int i, n;
+
+	strlcpy (buf, SPANK_OPTION_ENV_PREFIX, siz);
+
+	/*
+	 *  First append the plugin name associated with this option:
+	 */
+	n = 0;
+	for (i = strlen (buf); i < siz - 1 && n < strlen (pname); i++)
+	    buf[i] = _canonical_char (pname[n++]);
+
+	/*
+	 *  Append _
+	 */
+	buf[i] = '_';
+	buf[i+1] = '\0';
+
+	/*
+	 *  Now incorporate the option name:
+	 */
+	n = 0;
+	for (i = strlen (buf); i < siz - 1 && n < strlen (name); i++)
+	    buf[i] = _canonical_char (name[n++]);
+	buf[i] = '\0';
+
+	return (buf);
+}
+
+static int _option_setenv (struct spank_plugin_opt *option)
+{
+	char var [1024];
+
+	_opt_env_name (option, var, sizeof (var));
+
+	if (setenv (var, option->optarg, 1) < 0)
+	    error ("failed to set %s=%s in env", var, option->optarg);
+
+	return (0);
+}
+
+int spank_set_remote_options_env(void)
+{
+	struct spank_plugin_opt *p;
+	ListIterator i;
+
+	if ((option_cache == NULL) || (list_count(option_cache) == 0))
+		return (0);
+
+	i = list_iterator_create(option_cache);
+	while ((p = list_next(i))) {
+		if (p->found)
+			_option_setenv (p);
+	}
+	list_iterator_destroy(i);
+	return (0);
+}
+
 int spank_set_remote_options(job_options_t opts)
 {
 	struct spank_plugin_opt *p;
@@ -1168,6 +1317,38 @@ static struct spank_plugin_opt *_find_remote_option_by_name(const char
 	return (opt);
 }
 
+int spank_get_remote_options_env (char **env)
+{
+	char var [1024];
+	const char *arg;
+	struct spank_plugin_opt *option;
+	ListIterator i;
+
+	if (!option_cache)
+		return (0);
+
+	i = list_iterator_create (option_cache);
+	while ((option = list_next (i))) {
+		struct spank_option *p = option->opt;
+
+		if (!(arg = getenvp (env, _opt_env_name (option, var, sizeof(var)))))
+			continue;
+
+		if (p->cb && (((*p->cb) (p->val, arg, 1)) < 0))
+			error ("spank: failed to process option %s=%s", p->name, arg);
+
+		/*
+		 *  Now remove the environment variable.
+		 *   It is no longer needed.
+		 */
+		unsetenvp (env, var);
+
+	}
+	list_iterator_destroy (i);
+
+	return (0);
+}
+
 int spank_get_remote_options(job_options_t opts)
 {
 	const struct job_option_info *j;
@@ -1255,29 +1436,89 @@ static int _valid_in_local_context (spank_item_t item)
 	return (rc);
 }
 
-/*
- *  Return 1 if spank_item_t is just getting version (valid anywhere)
- */
-static int _version_check (spank_item_t item)
+static int _valid_in_allocator_context (spank_item_t item)
 {
-	int rc = 0;
 	switch (item) {
-	case S_SLURM_VERSION:
-	case S_SLURM_VERSION_MAJOR:
-	case S_SLURM_VERSION_MINOR:
-	case S_SLURM_VERSION_MICRO:
-		rc = 1;
-		break;
-	default:
-		rc = 0;
+	  case S_JOB_UID:
+	  case S_JOB_GID:
+		  return 1;
+	  default:
+		  return 0;
 	}
-	return (rc);
+}
+
+static spank_err_t _check_spank_item_validity (spank_item_t item, void *job)
+{
+	/*
+	 *  Valid in all contexts:
+	 */
+	switch (item) {
+	  case S_SLURM_VERSION:
+	  case S_SLURM_VERSION_MAJOR:
+	  case S_SLURM_VERSION_MINOR:
+	  case S_SLURM_VERSION_MICRO:
+		  return ESPANK_SUCCESS;
+	  default:
+		  break; /* fallthru */
+	}
+
+	if (spank_ctx == S_TYPE_LOCAL) {
+		if (!_valid_in_local_context (item))
+			return ESPANK_NOT_REMOTE;
+		else if (job == NULL)
+			return ESPANK_NOT_AVAIL;
+	}
+	else if (spank_ctx == S_TYPE_ALLOCATOR) {
+		if (_valid_in_allocator_context (item)) {
+			if (job)
+				return ESPANK_SUCCESS;
+			else
+				return ESPANK_NOT_AVAIL;
+		}
+		else if (_valid_in_local_context (item))
+			return ESPANK_BAD_ARG;
+		else
+			return ESPANK_NOT_REMOTE;
+	}
+
+	/* All items presumably valid in remote context */
+	return ESPANK_SUCCESS;
 }
 
 /*
  *  Global functions for SPANK plugins
  */
 
+const char * spank_strerror (spank_err_t err)
+{
+	switch (err) {
+	case ESPANK_SUCCESS:
+		return "Success";
+	case ESPANK_ERROR:
+		return "Generic error";
+	case ESPANK_BAD_ARG:
+		return "Bad argument";
+	case ESPANK_NOT_TASK:
+		return "Not in task context";
+	case ESPANK_ENV_EXISTS:
+		return "Environment variable exists";
+	case ESPANK_ENV_NOEXIST:
+		return "No such environment variable";
+	case ESPANK_NOSPACE:
+		return "Buffer too small";
+	case ESPANK_NOT_REMOTE:
+		return "Valid only in remote context";
+	case ESPANK_NOEXIST:
+		return "Id/PID does not exist on this node";
+	case ESPANK_NOT_EXECD:
+		return "Lookup by PID requested, but no tasks running";
+	case ESPANK_NOT_AVAIL:
+		return "Item not available from this callback";
+	}
+
+	return "Unknown";
+}
+
 int spank_symbol_supported (const char *name)
 {
 	int i;
@@ -1297,12 +1538,28 @@ int spank_remote(spank_t spank)
 {
 	if ((spank == NULL) || (spank->magic != SPANK_MAGIC))
 		return (-1);
-	if (spank->type == S_TYPE_REMOTE)
+	if (spank_ctx == S_TYPE_REMOTE)
 		return (1);
 	else
 		return (0);
 }
 
+spank_context_t spank_context (void)
+{
+	switch (spank_ctx) {
+	  case S_TYPE_REMOTE:
+		  return S_CTX_REMOTE;
+	  case S_TYPE_LOCAL:
+		  return S_CTX_LOCAL;
+	  case S_TYPE_ALLOCATOR:
+		  return S_CTX_ALLOCATOR;
+	  default:
+		  return S_CTX_ERROR;
+	}
+
+	return S_CTX_ERROR;
+}
+
 spank_err_t spank_get_item(spank_t spank, spank_item_t item, ...)
 {
 	int *p2int;
@@ -1325,36 +1582,37 @@ spank_err_t spank_get_item(spank_t spank, spank_item_t item, ...)
 	if ((spank == NULL) || (spank->magic != SPANK_MAGIC))
 		return (ESPANK_BAD_ARG);
 
-	if (!_version_check(item)) {
-		/* Need job pointer to process other items */
-		if ( (spank->type != S_TYPE_REMOTE) 
-		  && (!_valid_in_local_context(item)))
-			return (ESPANK_NOT_REMOTE);
-
-		if (spank->job == NULL)
-			return (ESPANK_BAD_ARG);
+	/*
+	 *  Check for validity of the given item in the current context
+	 */
+	rc = _check_spank_item_validity (item, spank->job);
+	if (rc != ESPANK_SUCCESS)
+		return (rc);
 
-		if (spank->type == S_TYPE_LOCAL)
-			launcher_job = spank->job;
-		else
-			slurmd_job = spank->job;
-	}
+	if (spank_ctx == S_TYPE_LOCAL)
+		launcher_job = spank->job;
+	else if (spank_ctx == S_TYPE_REMOTE)
+		slurmd_job = spank->job;
 
 	va_start(vargs, item);
 	switch (item) {
 	case S_JOB_UID:
 		p2uid = va_arg(vargs, uid_t *);
-		if (spank->type == S_TYPE_LOCAL)
+		if (spank_ctx == S_TYPE_LOCAL)
 			*p2uid = launcher_job->uid;
-		else
+		else if (spank_ctx == S_TYPE_REMOTE)
 			*p2uid = slurmd_job->uid;
+		else
+			*p2uid = getuid();
 		break;
 	case S_JOB_GID:
 		p2gid = va_arg(vargs, gid_t *);
-		if (spank->type == S_TYPE_LOCAL)
+		if (spank_ctx == S_TYPE_LOCAL)
 			*p2gid = launcher_job->gid;
-		else
+		else if (spank_ctx == S_TYPE_REMOTE)
 			*p2gid = slurmd_job->gid;
+		else
+			*p2gid = getgid();
 		break;
 	case S_JOB_SUPPLEMENTARY_GIDS:
 		p2gids = va_arg(vargs, gid_t **);
@@ -1364,21 +1622,21 @@ spank_err_t spank_get_item(spank_t spank, spank_item_t item, ...)
 		break;
 	case S_JOB_ID:
 		p2uint32 = va_arg(vargs, uint32_t *);
-		if (spank->type == S_TYPE_LOCAL)
+		if (spank_ctx == S_TYPE_LOCAL)
 			*p2uint32 = launcher_job->jobid;
 		else
 			*p2uint32 = slurmd_job->jobid;
 		break;
 	case S_JOB_STEPID:
 		p2uint32 = va_arg(vargs, uint32_t *);
-		if (spank->type == S_TYPE_LOCAL)
+		if (spank_ctx == S_TYPE_LOCAL)
 			*p2uint32 = launcher_job->stepid;
 		else
 			*p2uint32 = slurmd_job->stepid;
 		break;
 	case S_JOB_NNODES:
 		p2uint32 = va_arg(vargs, uint32_t *);
-		if (spank->type == S_TYPE_LOCAL) {
+		if (spank_ctx == S_TYPE_LOCAL) {
 			if (launcher_job->step_layout)
 				*p2uint32 = launcher_job->step_layout->node_cnt;
 			else {
@@ -1398,7 +1656,7 @@ spank_err_t spank_get_item(spank_t spank, spank_item_t item, ...)
 		break;
 	case S_JOB_TOTAL_TASK_COUNT:
 		p2uint32 = va_arg(vargs, uint32_t *);
-		if (spank->type == S_TYPE_LOCAL) {
+		if (spank_ctx == S_TYPE_LOCAL) {
 			if (launcher_job->step_layout)
 				*p2uint32 = launcher_job->step_layout->task_cnt;
 			else {
@@ -1419,7 +1677,7 @@ spank_err_t spank_get_item(spank_t spank, spank_item_t item, ...)
 	case S_JOB_ARGV:
 		p2int = va_arg(vargs, int *);
 		p2argv = va_arg(vargs, char ***);
-		if (spank->type == S_TYPE_LOCAL) {
+		if (spank_ctx == S_TYPE_LOCAL) {
 			*p2int = launcher_job->argc;
 			*p2argv = launcher_job->argv;
 		} else {
@@ -1537,7 +1795,7 @@ spank_err_t spank_getenv(spank_t spank, const char *var, char *buf,
 	if ((spank == NULL) || (spank->magic != SPANK_MAGIC))
 		return (ESPANK_BAD_ARG);
 
-	if (spank->type != S_TYPE_REMOTE)
+	if (spank_ctx != S_TYPE_REMOTE)
 		return (ESPANK_NOT_REMOTE);
 
 	if (spank->job == NULL)
@@ -1563,7 +1821,7 @@ spank_err_t spank_setenv(spank_t spank, const char *var, const char *val,
 	if ((spank == NULL) || (spank->magic != SPANK_MAGIC))
 		return (ESPANK_BAD_ARG);
 
-	if (spank->type != S_TYPE_REMOTE)
+	if (spank_ctx != S_TYPE_REMOTE)
 		return (ESPANK_NOT_REMOTE);
 
 	if (spank->job == NULL)
@@ -1588,7 +1846,7 @@ spank_err_t spank_unsetenv (spank_t spank, const char *var)
 	if ((spank == NULL) || (spank->magic != SPANK_MAGIC))
 		return (ESPANK_BAD_ARG);
 
-	if (spank->type != S_TYPE_REMOTE)
+	if (spank_ctx != S_TYPE_REMOTE)
 		return (ESPANK_NOT_REMOTE);
 
 	if (spank->job == NULL)
diff --git a/src/common/plugstack.h b/src/common/plugstack.h
index 288663c76..1ac51e2ec 100644
--- a/src/common/plugstack.h
+++ b/src/common/plugstack.h
@@ -3,10 +3,11 @@
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -65,10 +66,16 @@ struct spank_launcher_job_info {
 
 int spank_init (slurmd_job_t *job);
 
+int spank_init_allocator (void);
+
+int spank_init_post_opt (void);
+
 int spank_user (slurmd_job_t *job);
 
 int spank_local_user (struct spank_launcher_job_info *job);
 
+int spank_task_privileged (slurmd_job_t *job, int taskid);
+
 int spank_user_task (slurmd_job_t *job, int taskid);
 
 int spank_task_post_fork (slurmd_job_t *job, int taskid);
@@ -124,6 +131,12 @@ int spank_print_options (FILE *fp, int width, int left_pad);
  */
 int spank_set_remote_options (job_options_t options);
 
+/*  Set all registered remote options (i.e. those passed to
+ *   spank_process_option) in the current environment for later
+ *   retreival by spank_get_remote_options_env().
+ */
+int spank_set_remote_options_env (void);
+
 /*  Register any remote spank options that exist in `options'
  *    to their respective spank plugins. This function ends up invoking
  *    all plugin option callbacks, and will fail (return < 0) if
@@ -134,4 +147,14 @@ int spank_set_remote_options (job_options_t options);
  */
 int spank_get_remote_options (job_options_t options);
 
+/*  Register any remote spank options that exist in the environment `env'
+ *    to their respective spank plugins. This function ends up invoking
+ *    all plugin option callbacks, and will fail (return < 0) if
+ *    a *required* plugin callback returns < 0.
+ *
+ *  A warning is printed if no plugin matches a remote option
+ *   in the job_options structure, but the funtion does not return failure.
+ */
+int spank_get_remote_options_env (char **env);
+
 #endif /* !_PLUGSTACK_H */
diff --git a/src/common/print_fields.c b/src/common/print_fields.c
index 707403f5a..0681f70da 100644
--- a/src/common/print_fields.c
+++ b/src/common/print_fields.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -69,6 +70,7 @@ extern void print_fields_header(List print_fields_list)
 	print_field_t *field = NULL;
 	int curr_inx = 1;
 	int field_count = 0;
+
 	if(!print_fields_list || !print_fields_have_header) 
 		return;
 
@@ -82,8 +84,10 @@ extern void print_fields_header(List print_fields_list)
 			printf("%s", field->name);	
 		else if(print_fields_parsable_print)
 			printf("%s|", field->name);
-		else
-			printf("%-*.*s ", field->len, field->len, field->name);
+		else {
+			int abs_len = abs(field->len);
+			printf("%*.*s ", abs_len, abs_len, field->name);
+		}
 		curr_inx++;
 	}
 	list_iterator_reset(itr);
@@ -91,7 +95,8 @@ extern void print_fields_header(List print_fields_list)
 	if(print_fields_parsable_print)
 		return;
 	while((field = list_next(itr))) {
-		printf("%-*.*s ", field->len, field->len, 
+		int abs_len = abs(field->len);
+		printf("%*.*s ", abs_len, abs_len, 
 		       "-----------------------------------------------------");
 	}
 	list_iterator_destroy(itr);
@@ -100,26 +105,29 @@ extern void print_fields_header(List print_fields_list)
 
 extern void print_fields_date(print_field_t *field, time_t value, int last)
 {
-	char temp_char[field->len];
+	int abs_len = abs(field->len);
+	char temp_char[abs_len+1];
 	time_t now = value;
 
 	if(!now)
 		now = time(NULL);
-	slurm_make_time_str(&value, (char *)temp_char, field->len);
+	slurm_make_time_str(&value, (char *)temp_char, sizeof(temp_char));
 	if(print_fields_parsable_print == PRINT_FIELDS_PARSABLE_NO_ENDING
 	   && last)
 		printf("%s", temp_char);	
 	else if(print_fields_parsable_print)
 		printf("%s|", temp_char);
-	else 
-		printf("%-*.*s ", field->len, field->len, temp_char);
+	else if(field->len == abs_len)
+		printf("%*.*s ", abs_len, abs_len, temp_char);
+	else
+		printf("%-*.*s ", abs_len, abs_len, temp_char); 
 }
 
 extern void print_fields_str(print_field_t *field, char *value, int last)
 {
-	char temp_char[field->len];
+	int abs_len = abs(field->len);
+	char temp_char[abs_len+1];
 	char *print_this = NULL;
-
 	if(!value) {
 		if(print_fields_parsable_print)
 			print_this = "";
@@ -135,18 +143,23 @@ extern void print_fields_str(print_field_t *field, char *value, int last)
 		printf("%s|", print_this);
 	else {
 		if(value) {
-			memcpy(&temp_char, value, field->len);
+			memcpy(&temp_char, value, abs_len);
 			
-			if(strlen(value) > field->len) 
-				temp_char[field->len-1] = '+';
+			if(strlen(value) > abs_len) 
+				temp_char[abs_len-1] = '+';
 			print_this = temp_char;
 		}
-		printf("%-*.*s ", field->len, field->len, print_this);
+
+		if(field->len == abs_len)
+			printf("%*.*s ", abs_len, abs_len, print_this);
+		else
+			printf("%-*.*s ", abs_len, abs_len, print_this);
 	}
 }
 
 extern void print_fields_int(print_field_t *field, int value, int last)
 {
+	int abs_len = abs(field->len);
 	/* (value == unset)  || (value == cleared) */
 	if((value == NO_VAL) || (value == INFINITE)) {
 		if(print_fields_parsable_print 
@@ -156,7 +169,7 @@ extern void print_fields_int(print_field_t *field, int value, int last)
 		else if(print_fields_parsable_print)
 			printf("|");	
 		else				
-			printf("%*s ", field->len, " ");
+			printf("%*s ", abs_len, " ");
 	} else {
 		if(print_fields_parsable_print
 		   == PRINT_FIELDS_PARSABLE_NO_ENDING
@@ -164,13 +177,16 @@ extern void print_fields_int(print_field_t *field, int value, int last)
 			printf("%d", value);	
 		else if(print_fields_parsable_print)
 			printf("%d|", value);	
+		else if(field->len == abs_len)
+			printf("%*d ", abs_len, value);
 		else
-			printf("%*d ", field->len, value);
+			printf("%-*d ", abs_len, value);
 	}
 }
 
 extern void print_fields_uint32(print_field_t *field, uint32_t value, int last)
 {
+	int abs_len = abs(field->len);
 	/* (value == unset)  || (value == cleared) */
 	if((value == NO_VAL) || (value == INFINITE)) {
 		if(print_fields_parsable_print 
@@ -188,13 +204,16 @@ extern void print_fields_uint32(print_field_t *field, uint32_t value, int last)
 			printf("%u", value);	
 		else if(print_fields_parsable_print)
 			printf("%u|", value);	
+		else if(field->len == abs_len)
+			printf("%*u ", abs_len, value);
 		else
-			printf("%*u ", field->len, value);
+			printf("%-*u ", abs_len, value);
 	}
 }
 
 extern void print_fields_uint64(print_field_t *field, uint64_t value, int last)
 {
+	int abs_len = abs(field->len);
 	/* (value == unset)  || (value == cleared) */
 	if((value == NO_VAL) || (value == INFINITE)) {
 		if(print_fields_parsable_print 
@@ -212,14 +231,72 @@ extern void print_fields_uint64(print_field_t *field, uint64_t value, int last)
 			printf("%llu", (long long unsigned) value);	
 		else if(print_fields_parsable_print)
 			printf("%llu|", (long long unsigned) value);	
+		else if(field->len == abs_len)
+			printf("%*llu ", abs_len, (long long unsigned) value);
+		else
+			printf("%-*llu ", abs_len, (long long unsigned) value);
+	}
+}
+
+extern void print_fields_double(print_field_t *field, double value, int last)
+{
+	int abs_len = abs(field->len);
+	/* (value == unset)  || (value == cleared) */
+	if((value == NO_VAL) || (value == INFINITE)) {
+		if(print_fields_parsable_print 
+		   == PRINT_FIELDS_PARSABLE_NO_ENDING
+		   && last)
+			;
+		else if(print_fields_parsable_print)
+			printf("|");	
+		else				
+			printf("%*s ", field->len, " ");
+	} else {
+		if(print_fields_parsable_print
+		   == PRINT_FIELDS_PARSABLE_NO_ENDING
+		   && last)
+			printf("%f", value);	
+		else if(print_fields_parsable_print)
+			printf("%f|", value);	
+		else if(field->len == abs_len)
+			printf("%*f ", abs_len, value);
+		else
+			printf("%-*f ", abs_len, value);
+	}
+}
+
+extern void print_fields_long_double(
+	print_field_t *field, long double value, int last)
+{
+	int abs_len = abs(field->len);
+	/* (value == unset)  || (value == cleared) */
+	if((value == NO_VAL) || (value == INFINITE)) {
+		if(print_fields_parsable_print 
+		   == PRINT_FIELDS_PARSABLE_NO_ENDING
+		   && last)
+			;
+		else if(print_fields_parsable_print)
+			printf("|");	
+		else				
+			printf("%*s ", field->len, " ");
+	} else {
+		if(print_fields_parsable_print
+		   == PRINT_FIELDS_PARSABLE_NO_ENDING
+		   && last)
+			printf("%Lf", value);	
+		else if(print_fields_parsable_print)
+			printf("%Lf|", value);	
+		else if(field->len == abs_len)
+			printf("%*Lf ", abs_len, value);
 		else
-			printf("%*llu ", field->len, 
-			       (long long unsigned) value);
+			printf("%-*Lf ", abs_len, value);
 	}
+
 }
 
 extern void print_fields_time(print_field_t *field, uint32_t value, int last)
 {
+	int abs_len = abs(field->len);
 	/* (value == unset)  || (value == cleared) */
 	if((value == NO_VAL) || (value == INFINITE)) {
 		if(print_fields_parsable_print 
@@ -239,13 +316,46 @@ extern void print_fields_time(print_field_t *field, uint32_t value, int last)
 			printf("%s", time_buf);
 		else if(print_fields_parsable_print)
 			printf("%s|", time_buf);
+		else if(field->len == abs_len)
+			printf("%*s ", abs_len, time_buf);
+		else
+			printf("%-*s ", abs_len, time_buf);
+	}
+}
+
+extern void print_fields_time_from_secs(print_field_t *field, 
+					uint32_t value, int last)
+{
+	int abs_len = abs(field->len);
+	/* (value == unset)  || (value == cleared) */
+	if((value == NO_VAL) || (value == INFINITE)) {
+		if(print_fields_parsable_print 
+		   == PRINT_FIELDS_PARSABLE_NO_ENDING
+		   && last)
+			;
+		else if(print_fields_parsable_print)
+			printf("|");	
+		else
+			printf("%*s ", field->len, " ");
+	} else {
+		char time_buf[32];
+		secs2time_str((time_t) value, time_buf, sizeof(time_buf));
+		if(print_fields_parsable_print 
+		   == PRINT_FIELDS_PARSABLE_NO_ENDING
+		   && last)
+			printf("%s", time_buf);
+		else if(print_fields_parsable_print)
+			printf("%s|", time_buf);
+		else if(field->len == abs_len)
+			printf("%*s ", abs_len, time_buf);
 		else
-			printf("%*s ", field->len, time_buf);
+			printf("%-*s ", abs_len, time_buf);
 	}
 }
 
 extern void print_fields_char_list(print_field_t *field, List value, int last)
 {
+	int abs_len = abs(field->len);
 	ListIterator itr = NULL;
 	char *print_this = NULL;
 	char *object = NULL;
@@ -273,10 +383,13 @@ extern void print_fields_char_list(print_field_t *field, List value, int last)
 	else if(print_fields_parsable_print)
 		printf("%s|", print_this);
 	else {
-		if(strlen(print_this) > field->len) 
-			print_this[field->len-1] = '+';
+		if(strlen(print_this) > abs_len) 
+			print_this[abs_len-1] = '+';
 		
-		printf("%-*.*s ", field->len, field->len, print_this);
+		if(field->len == abs_len)
+			printf("%*.*s ", abs_len, abs_len, print_this);
+		else
+			printf("%-*.*s ", abs_len, abs_len, print_this);
 	}
 	xfree(print_this);
 }
diff --git a/src/common/print_fields.h b/src/common/print_fields.h
index 8de6d6194..95cdf6204 100644
--- a/src/common/print_fields.h
+++ b/src/common/print_fields.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -68,7 +69,7 @@
 #include "src/common/list.h"
 
 typedef struct {
-	uint16_t len;  /* what is the width of the print */          
+	int len;  /* what is the width of the print */          
 	char *name;  /* name to be printed in header */
 	void (*print_routine) (); /* what is the function to print with  */
 	uint16_t type; /* defined in the local function */
@@ -88,12 +89,19 @@ extern void print_fields_header(List print_fields_list);
 extern void print_fields_date(print_field_t *field, time_t value, int last);
 extern void print_fields_str(print_field_t *field, char *value, int last);
 extern void print_fields_int(print_field_t *field, int value, int last);
+extern void print_fields_double(print_field_t *field, double value, int last);
+extern void print_fields_long_double(
+	print_field_t *field, long double value, int last);
 extern void print_fields_uint32(
 	print_field_t *field, uint32_t value, int last);
 extern void print_fields_uint64(
 	print_field_t *field, uint64_t value, int last);
-extern void print_fields_time(print_field_t *field, uint32_t value, int last);
+extern void print_fields_time_from_mins(print_field_t *field,
+					uint32_t value, int last);
+extern void print_fields_time_from_secs(print_field_t *field, 
+					uint32_t value, int last);
 extern void print_fields_char_list(print_field_t *field, List value, int last);
 
 #define print_fields_uint print_fields_uint32
+#define print_fields_time print_fields_time_from_mins
 #endif
diff --git a/src/common/proc_args.c b/src/common/proc_args.c
index 1a690c2ba..540f5fac5 100644
--- a/src/common/proc_args.c
+++ b/src/common/proc_args.c
@@ -7,7 +7,8 @@
  *  from existing SLURM source code, particularly src/srun/opt.c 
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -420,10 +421,12 @@ bool verify_socket_core_thread_count(const char *arg,
 
  	for (j=0;j<3;j++) {	
 		for (i=0;i<47;i++) {
-			if (*cur_ptr == '\0' || *cur_ptr ==':') break;
+			if (*cur_ptr == '\0' || *cur_ptr ==':')
+				break;
 			buf[j][i] = *cur_ptr++;
 		}
-		if (*cur_ptr == '\0') break;
+		if (*cur_ptr == '\0')
+			break;
 		xassert(*cur_ptr == ':');
 		buf[j][i] = '\0';
 		cur_ptr++;
@@ -511,7 +514,8 @@ bool verify_hint(const char *arg, int *min_sockets, int *max_sockets,
 		        *max_threads = 1;
 			*cpu_bind_type |= CPU_BIND_TO_THREADS;
 		} else {
-			error("unrecognized --hint argument \"%s\", see --hint=help", tok);
+			error("unrecognized --hint argument \"%s\", "
+			      "see --hint=help", tok);
 			xfree(buf);
 			return 1;
 		}
@@ -636,12 +640,17 @@ search_path(char *cwd, char *cmd, bool check_current_dir, int access_mode)
 char *print_commandline(const int script_argc, char **script_argv)
 {
 	int i;
-	char buf[256];
+	char tmp[256], *out_buf = NULL, *prefix;
 
-	buf[0] = '\0';
-	for (i = 0; i < script_argc; i++)
-		snprintf(buf, 256,  "%s", script_argv[i]);
-	return xstrdup(buf);
+	for (i = 0; i < script_argc; i++) {
+		if (out_buf)
+			prefix = " ";
+		else
+			prefix = "";
+		snprintf(tmp, 256,  "%s%s", prefix, script_argv[i]);
+		xstrcat(out_buf, tmp);
+	}
+	return out_buf;
 }
 
 char *print_geometry(const uint16_t *geometry)
diff --git a/src/common/proc_args.h b/src/common/proc_args.h
index 109556bad..7e715e1c3 100644
--- a/src/common/proc_args.h
+++ b/src/common/proc_args.h
@@ -7,7 +7,8 @@
  *  from existing SLURM source code, particularly src/srun/opt.c 
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/read_config.c b/src/common/read_config.c
index 38f56f8ce..b0a3e70f0 100644
--- a/src/common/read_config.c
+++ b/src/common/read_config.c
@@ -2,14 +2,15 @@
  *  read_config.c - read the overall slurm configuration file
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Portions Copyright (C) 2008 Vijay Ramasubramanian.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -106,27 +107,28 @@ bool nodehash_initialized = false;
 static names_ll_t *host_to_node_hashtbl[NAME_HASH_LEN] = {NULL};
 static names_ll_t *node_to_host_hashtbl[NAME_HASH_LEN] = {NULL};
 
-static int parse_nodename(void **dest, slurm_parser_enum_t type,
-			  const char *key, const char *value,
-			  const char *line, char **leftover);
-static void destroy_nodename(void *ptr);
-static int parse_partitionname(void **dest, slurm_parser_enum_t type,
-			       const char *key, const char *value,
-			       const char *line, char **leftover);
-static void destroy_partitionname(void *ptr);
-static int parse_downnodes(void **dest, slurm_parser_enum_t type,
+static int _parse_nodename(void **dest, slurm_parser_enum_t type,
 			   const char *key, const char *value,
 			   const char *line, char **leftover);
-static void destroy_downnodes(void *ptr);
-static int defunct_option(void **dest, slurm_parser_enum_t type,
-			  const char *key, const char *value,
-			  const char *line, char **leftover);
-static void validate_and_set_defaults(slurm_ctl_conf_t *conf,
-				      s_p_hashtbl_t *hashtbl);
+static void _destroy_nodename(void *ptr);
+static int _parse_partitionname(void **dest, slurm_parser_enum_t type,
+				const char *key, const char *value,
+				const char *line, char **leftover);
+static void _destroy_partitionname(void *ptr);
+static int _parse_downnodes(void **dest, slurm_parser_enum_t type,
+			    const char *key, const char *value,
+			    const char *line, char **leftover);
+static void _destroy_downnodes(void *ptr);
+static int _defunct_option(void **dest, slurm_parser_enum_t type,
+			   const char *key, const char *value,
+			   const char *line, char **leftover);
+static void _validate_and_set_defaults(slurm_ctl_conf_t *conf,
+				       s_p_hashtbl_t *hashtbl);
 
 s_p_options_t slurm_conf_options[] = {
 	{"AccountingStorageEnforce", S_P_STRING},
 	{"AccountingStorageHost", S_P_STRING},
+	{"AccountingStorageBackupHost", S_P_STRING},
 	{"AccountingStorageLoc", S_P_STRING},
 	{"AccountingStoragePass", S_P_STRING},
 	{"AccountingStoragePort", S_P_UINT32},
@@ -139,9 +141,11 @@ s_p_options_t slurm_conf_options[] = {
 	{"CheckpointType", S_P_STRING},
 	{"CacheGroups", S_P_UINT16},
 	{"ClusterName", S_P_STRING},
+	{"CompleteWait", S_P_UINT16},
 	{"ControlAddr", S_P_STRING},
 	{"ControlMachine", S_P_STRING},
 	{"CryptoType", S_P_STRING},
+	{"DebugFlags", S_P_STRING},
 	{"DefaultStorageHost", S_P_STRING},
 	{"DefaultStorageLoc", S_P_STRING},
 	{"DefaultStoragePass", S_P_STRING},
@@ -150,24 +154,25 @@ s_p_options_t slurm_conf_options[] = {
 	{"DefaultStorageUser", S_P_STRING},
 	{"DefMemPerCPU", S_P_UINT32},
 	{"DefMemPerNode", S_P_UINT32},
-	{"DefMemPerTask", S_P_UINT32},	/* defunct */
 	{"DisableRootJobs", S_P_BOOLEAN},
 	{"EnforcePartLimits", S_P_BOOLEAN},
 	{"Epilog", S_P_STRING},
 	{"EpilogMsgTime", S_P_UINT32},
+	{"EPilogSlurmctld", S_P_STRING},
 	{"FastSchedule", S_P_UINT16},
 	{"FirstJobId", S_P_UINT32},
 	{"GetEnvTimeout", S_P_UINT16},
-	{"HashBase", S_P_LONG, defunct_option},
-	{"HeartbeatInterval", S_P_LONG, defunct_option},
+	{"HashBase", S_P_LONG, _defunct_option},
+	{"HeartbeatInterval", S_P_LONG, _defunct_option},
 	{"HealthCheckInterval", S_P_UINT16},
 	{"HealthCheckProgram", S_P_STRING},
 	{"InactiveLimit", S_P_UINT16},
 	{"JobAcctGatherType", S_P_STRING},
-	{"JobAcctFrequency", S_P_UINT16, defunct_option},
+	{"JobAcctFrequency", S_P_UINT16, _defunct_option},
 	{"JobAcctGatherFrequency", S_P_UINT16},
 	{"JobAcctLogFile", S_P_STRING},
 	{"JobAcctType", S_P_STRING},
+	{"JobCheckpointDir", S_P_STRING},
 	{"JobCompHost", S_P_STRING},
 	{"JobCompLoc", S_P_STRING},
 	{"JobCompPass", S_P_STRING},
@@ -178,7 +183,8 @@ s_p_options_t slurm_conf_options[] = {
 	{"JobCredentialPublicCertificate", S_P_STRING},
 	{"JobFileAppend", S_P_UINT16},
 	{"JobRequeue", S_P_UINT16},
-	{"KillTree", S_P_UINT16, defunct_option},
+	{"KillTree", S_P_UINT16, _defunct_option},
+	{"KillOnBadExit", S_P_UINT16},
 	{"KillWait", S_P_UINT16},
 	{"Licenses", S_P_STRING},
 	{"MailProg", S_P_STRING},
@@ -188,21 +194,36 @@ s_p_options_t slurm_conf_options[] = {
 	{"MaxMemPerTask", S_P_UINT32},	/* defunct */
 	{"MessageTimeout", S_P_UINT16},
 	{"MinJobAge", S_P_UINT16},
-	{"MpichGmDirectSupport", S_P_LONG, defunct_option},
+	{"MpichGmDirectSupport", S_P_LONG, _defunct_option},
 	{"MpiDefault", S_P_STRING},
+	{"MpiParams", S_P_STRING},
+	{"OverTimeLimit", S_P_UINT16},
 	{"PluginDir", S_P_STRING},
 	{"PlugStackConfig", S_P_STRING},
+	{"PriorityDecayHalfLife", S_P_STRING},
+	{"PriorityFavorSmall", S_P_BOOLEAN},
+	{"PriorityMaxAge", S_P_STRING},
+	{"PriorityUsageResetPeriod", S_P_STRING},
+	{"PriorityType", S_P_STRING},
+	{"PriorityWeightAge", S_P_UINT32},
+	{"PriorityWeightFairshare", S_P_UINT32},
+	{"PriorityWeightJobSize", S_P_UINT32},
+	{"PriorityWeightPartition", S_P_UINT32},
+	{"PriorityWeightQOS", S_P_UINT32},
 	{"PrivateData", S_P_STRING},
 	{"ProctrackType", S_P_STRING},
 	{"Prolog", S_P_STRING},
+	{"PrologSlurmctld", S_P_STRING},
 	{"PropagatePrioProcess", S_P_UINT16},
 	{"PropagateResourceLimitsExcept", S_P_STRING},
 	{"PropagateResourceLimits", S_P_STRING},
 	{"ResumeProgram", S_P_STRING},
 	{"ResumeRate", S_P_UINT16},
+	{"ResumeTimeout", S_P_UINT16},
+	{"ResvOverRun", S_P_UINT16},
 	{"ReturnToService", S_P_UINT16},
 	{"SallocDefaultCommand", S_P_STRING},
-	{"SchedulerAuth", S_P_STRING, defunct_option},
+	{"SchedulerAuth", S_P_STRING, _defunct_option},
 	{"SchedulerParameters", S_P_STRING},
 	{"SchedulerPort", S_P_UINT16},
 	{"SchedulerRootFilter", S_P_UINT16},
@@ -211,6 +232,7 @@ s_p_options_t slurm_conf_options[] = {
 	{"SelectType", S_P_STRING},
 	{"SelectTypeParameters", S_P_STRING},
 	{"SlurmUser", S_P_STRING},
+	{"SlurmdUser", S_P_STRING},
 	{"SlurmctldDebug", S_P_UINT16},
 	{"SlurmctldLogFile", S_P_STRING},
 	{"SlurmctldPidFile", S_P_STRING},
@@ -223,6 +245,7 @@ s_p_options_t slurm_conf_options[] = {
 	{"SlurmdSpoolDir", S_P_STRING},
 	{"SlurmdTimeout", S_P_UINT16},
 	{"SrunEpilog", S_P_STRING},
+	{"SrunIOTimeout", S_P_UINT16},
 	{"SrunProlog", S_P_STRING},
 	{"StateSaveLocation", S_P_STRING},
 	{"SuspendExcNodes", S_P_STRING},
@@ -230,12 +253,14 @@ s_p_options_t slurm_conf_options[] = {
 	{"SuspendProgram", S_P_STRING},
 	{"SuspendRate", S_P_UINT16},
 	{"SuspendTime", S_P_LONG},
+	{"SuspendTimeout", S_P_UINT16},
 	{"SwitchType", S_P_STRING},
 	{"TaskEpilog", S_P_STRING},
 	{"TaskProlog", S_P_STRING},
 	{"TaskPlugin", S_P_STRING},
 	{"TaskPluginParam", S_P_STRING},
 	{"TmpFS", S_P_STRING},
+	{"TopologyPlugin", S_P_STRING},
 	{"TrackWCKey", S_P_BOOLEAN},
 	{"TreeWidth", S_P_UINT16},
 	{"UnkillableStepProgram", S_P_STRING},
@@ -243,16 +268,16 @@ s_p_options_t slurm_conf_options[] = {
 	{"UsePAM", S_P_BOOLEAN},
 	{"WaitTime", S_P_UINT16},
 
-	{"NodeName", S_P_ARRAY, parse_nodename, destroy_nodename},
-	{"PartitionName", S_P_ARRAY, parse_partitionname,
-	 destroy_partitionname},
-	{"DownNodes", S_P_ARRAY, parse_downnodes, destroy_downnodes},
+	{"NodeName", S_P_ARRAY, _parse_nodename, _destroy_nodename},
+	{"PartitionName", S_P_ARRAY, _parse_partitionname,
+	 _destroy_partitionname},
+	{"DownNodes", S_P_ARRAY, _parse_downnodes, _destroy_downnodes},
 
 	{NULL}
 };
 
 
-static int defunct_option(void **dest, slurm_parser_enum_t type,
+static int _defunct_option(void **dest, slurm_parser_enum_t type,
 			  const char *key, const char *value,
 			  const char *line, char **leftover)
 {
@@ -260,12 +285,46 @@ static int defunct_option(void **dest, slurm_parser_enum_t type,
 	return 0;
 }
 
-static int parse_nodename(void **dest, slurm_parser_enum_t type,
-			  const char *key, const char *value,
-			  const char *line, char **leftover)
+#ifdef HAVE_3D
+/* Used to get the general name of the machine, used primarily 
+ * for bluegene systems.  Not in general use because some systems 
+ * have multiple prefix's such as foo[1-1000],bar[1-1000].
+ */
+/* Caller must be holding slurm_conf_lock() */
+static void _set_node_prefix(const char *nodenames)
+{
+	int i;
+	char *tmp;
+
+	xassert(nodenames != NULL);
+	for (i = 1; nodenames[i] != '\0'; i++) {
+		if((nodenames[i-1] == '[') 
+		   || (nodenames[i-1] <= '9'
+		       && nodenames[i-1] >= '0'))
+			break;
+	}
+	xfree(conf_ptr->node_prefix);
+	if(nodenames[i] == '\0')
+		conf_ptr->node_prefix = xstrdup(nodenames);
+	else {
+		tmp = xmalloc(sizeof(char)*i+1);
+		memset(tmp, 0, i+1);
+		snprintf(tmp, i, "%s", nodenames);
+		conf_ptr->node_prefix = tmp;
+		tmp = NULL;
+	}
+	debug3("Prefix is %s %s %d", conf_ptr->node_prefix, nodenames, i);
+}
+#endif /* HAVE_BG */
+
+
+static int _parse_nodename(void **dest, slurm_parser_enum_t type,
+			   const char *key, const char *value,
+			   const char *line, char **leftover)
 {
 	s_p_hashtbl_t *tbl, *dflt;
 	slurm_conf_node_t *n;
+	int computed_procs;
 	static s_p_options_t _nodename_options[] = {
 		{"CoresPerSocket", S_P_UINT16},
 		{"Feature", S_P_STRING},
@@ -317,6 +376,11 @@ static int parse_nodename(void **dest, slurm_parser_enum_t type,
 		dflt = default_nodename_tbl;
 
 		n->nodenames = xstrdup(value);
+#ifdef HAVE_3D
+		if (conf_ptr->node_prefix == NULL)
+			_set_node_prefix(n->nodenames);
+#endif
+
 		if (!s_p_get_string(&n->hostnames, "NodeHostname", tbl))
 			n->hostnames = xstrdup(n->nodenames);
 		if (!s_p_get_string(&n->addresses, "NodeAddr", tbl))
@@ -409,6 +473,17 @@ static int parse_nodename(void **dest, slurm_parser_enum_t type,
 			}
 		}
 
+		computed_procs = n->sockets * n->cores * n->threads;
+		if ((n->cpus != n->sockets) &&
+		    (n->cpus != n->sockets * n->cores) &&
+		    (n->cpus != computed_procs)) {
+			error("Procs (%d) doesn't match "
+			      "Sockets*CoresPerSocket*ThreadsPerCore (%u), "
+			      "resetting Procs",
+			      n->cpus, computed_procs);
+			n->cpus = computed_procs;
+		}
+
 		*dest = (void *)n;
 
 		return 1;
@@ -417,7 +492,7 @@ static int parse_nodename(void **dest, slurm_parser_enum_t type,
 	/* should not get here */
 }
 
-static void destroy_nodename(void *ptr)
+static void _destroy_nodename(void *ptr)
 {
 	slurm_conf_node_t *n = (slurm_conf_node_t *)ptr;
 	xfree(n->nodenames);
@@ -443,7 +518,8 @@ int slurm_conf_nodename_array(slurm_conf_node_t **ptr_array[])
 	}
 }
 
-static int parse_partitionname(void **dest, slurm_parser_enum_t type,
+
+static int _parse_partitionname(void **dest, slurm_parser_enum_t type,
 			       const char *key, const char *value,
 			       const char *line, char **leftover)
 {
@@ -453,6 +529,7 @@ static int parse_partitionname(void **dest, slurm_parser_enum_t type,
 	static s_p_options_t _partition_options[] = {
 		{"AllowGroups", S_P_STRING},
 		{"Default", S_P_BOOLEAN}, /* YES or NO */
+		{"DefaultTime", S_P_STRING},
 		{"DisableRootJobs", S_P_BOOLEAN}, /* YES or NO */
 		{"Hidden", S_P_BOOLEAN}, /* YES or NO */
 		{"MaxTime", S_P_STRING},
@@ -463,6 +540,7 @@ static int parse_partitionname(void **dest, slurm_parser_enum_t type,
 		{"RootOnly", S_P_BOOLEAN}, /* YES or NO */
 		{"Shared", S_P_STRING}, /* YES, NO, or FORCE */
 		{"State", S_P_BOOLEAN}, /* UP or DOWN */
+		{"AllocNodes", S_P_STRING},
 		{NULL}
 	};
 
@@ -490,6 +568,16 @@ static int parse_partitionname(void **dest, slurm_parser_enum_t type,
 			p->allow_groups = NULL; /* NULL means allow all */
 		}
 
+		if (!s_p_get_string(&p->allow_alloc_nodes, "AllocNodes", tbl)) {
+			s_p_get_string(&p->allow_alloc_nodes, "AllocNodes", 
+				       dflt);
+			if (p->allow_alloc_nodes && 
+			    (strcasecmp(p->allow_alloc_nodes, "ALL") == 0)) {
+				/* NULL means to allow all submit notes */
+				xfree(p->allow_alloc_nodes);
+			}
+		}
+
 		if (!s_p_get_boolean(&p->default_flag, "Default", tbl)
 		    && !s_p_get_boolean(&p->default_flag, "Default", dflt))
 			p->default_flag = false;
@@ -509,7 +597,7 @@ static int parse_partitionname(void **dest, slurm_parser_enum_t type,
 			int max_time = time_str2mins(tmp);
 			if ((max_time < 0) && (max_time != INFINITE)) {
 				error("Bad value \"%s\" for MaxTime", tmp);
-				destroy_partitionname(p);
+				_destroy_partitionname(p);
 				s_p_hashtbl_destroy(tbl);
 				xfree(tmp);
 				return -1;
@@ -518,6 +606,22 @@ static int parse_partitionname(void **dest, slurm_parser_enum_t type,
 			xfree(tmp);
 		}
 
+		if (!s_p_get_string(&tmp, "DefaultTime", tbl) &&
+		    !s_p_get_string(&tmp, "DefaultTime", dflt))
+			p->default_time = NO_VAL;
+		else {
+			int default_time = time_str2mins(tmp);
+			if ((default_time < 0) && (default_time != INFINITE)) {
+				error("Bad value \"%s\" for DefaultTime", tmp);
+				_destroy_partitionname(p);
+				s_p_hashtbl_destroy(tbl);
+				xfree(tmp);
+				return -1;
+			}
+			p->default_time = default_time;
+			xfree(tmp);
+		}
+
 		if (!s_p_get_uint32(&p->max_nodes, "MaxNodes", tbl)
 		    && !s_p_get_uint32(&p->max_nodes, "MaxNodes", dflt))
 			p->max_nodes = INFINITE;
@@ -576,7 +680,7 @@ static int parse_partitionname(void **dest, slurm_parser_enum_t type,
 #endif
 			else {
 				error("Bad value \"%s\" for Shared", tmp);
-				destroy_partitionname(p);
+				_destroy_partitionname(p);
 				s_p_hashtbl_destroy(tbl);
 				xfree(tmp);
 				return -1;
@@ -600,13 +704,14 @@ static int parse_partitionname(void **dest, slurm_parser_enum_t type,
 	/* should not get here */
 }
 
-static void destroy_partitionname(void *ptr)
+static void _destroy_partitionname(void *ptr)
 {
 	slurm_conf_partition_t *p = (slurm_conf_partition_t *)ptr;
 
+	xfree(p->allow_alloc_nodes);
+	xfree(p->allow_groups);
 	xfree(p->name);
 	xfree(p->nodes);
-	xfree(p->allow_groups);
 	xfree(ptr);
 }
 
@@ -625,7 +730,7 @@ int slurm_conf_partition_array(slurm_conf_partition_t **ptr_array[])
 	}
 }
 
-static int parse_downnodes(void **dest, slurm_parser_enum_t type,
+static int _parse_downnodes(void **dest, slurm_parser_enum_t type,
 			   const char *key, const char *value,
 			   const char *line, char **leftover)
 {
@@ -659,7 +764,7 @@ static int parse_downnodes(void **dest, slurm_parser_enum_t type,
 	return 1;
 }
 
-static void destroy_downnodes(void *ptr)
+static void _destroy_downnodes(void *ptr)
 {
 	slurm_conf_downnodes_t *n = (slurm_conf_downnodes_t *)ptr;
 	xfree(n->nodenames);
@@ -668,7 +773,7 @@ static void destroy_downnodes(void *ptr)
 	xfree(ptr);
 }
 
-int slurm_conf_downnodes_array(slurm_conf_downnodes_t **ptr_array[])
+extern int slurm_conf_downnodes_array(slurm_conf_downnodes_t **ptr_array[])
 {
 	int count;
 	slurm_conf_downnodes_t **ptr;
@@ -805,6 +910,11 @@ static int _register_conf_node_aliases(slurm_conf_node_t *node_ptr)
 		goto cleanup;
 	}
 
+#ifdef HAVE_3D
+	if (conf_ptr->node_prefix == NULL)
+		_set_node_prefix(node_ptr->nodenames);
+#endif
+
 	/* some sanity checks */
 #ifdef HAVE_FRONT_END
 	if (hostlist_count(hostname_list) != 1
@@ -874,8 +984,10 @@ static void _init_slurmd_nodehash(void)
 	else
 		nodehash_initialized = true;
 
-	if(!conf_initialized) 
+	if(!conf_initialized) {
 		_init_slurm_conf(NULL);
+		conf_initialized = true;
+	}
 
 	count = slurm_conf_nodename_array(&ptr_array);
 	if (count == 0) {
@@ -925,6 +1037,9 @@ extern char *slurm_conf_get_hostname(const char *node_name)
 
 /*
  * slurm_conf_get_nodename - Return the NodeName for given NodeHostname
+ *
+ * NOTE: Call xfree() to release returned value's memory.
+ * NOTE: Caller must NOT be holding slurm_conf_lock().
  */
 extern char *slurm_conf_get_nodename(const char *node_hostname)
 {
@@ -949,6 +1064,39 @@ extern char *slurm_conf_get_nodename(const char *node_hostname)
 	return NULL;
 }
 
+/*
+ * slurm_conf_get_nodeaddr - Return the NodeAddr for given NodeHostname
+ *
+ * NOTE: Call xfree() to release returned value's memory.
+ * NOTE: Caller must NOT be holding slurm_conf_lock().
+ */
+extern char *slurm_conf_get_nodeaddr(const char *node_hostname)
+{
+	int idx;
+	names_ll_t *p;
+
+	slurm_conf_lock();
+	_init_slurmd_nodehash();
+	idx = _get_hash_idx(node_hostname);
+
+	p = host_to_node_hashtbl[idx];
+	while (p) {
+		if (strcmp(p->hostname, node_hostname) == 0) {
+			char *nodeaddr;
+			if (p->address != NULL)
+				nodeaddr = xstrdup(p->address);
+			else
+				nodeaddr = NULL;
+			slurm_conf_unlock();
+			return nodeaddr;
+		}
+		p = p->next_hostname;
+	}
+	slurm_conf_unlock();
+
+	return NULL;
+}
+
 /*
  * slurm_conf_get_aliased_nodename - Return the NodeName for the
  * complete hostname string returned by gethostname if there is
@@ -1139,6 +1287,7 @@ gethostname_short (char *name, size_t len)
 extern void
 free_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr, bool purge_node_hash)
 {
+	xfree (ctl_conf_ptr->accounting_storage_backup_host);
 	xfree (ctl_conf_ptr->accounting_storage_host);
 	xfree (ctl_conf_ptr->accounting_storage_loc);
 	xfree (ctl_conf_ptr->accounting_storage_pass);
@@ -1155,6 +1304,7 @@ free_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr, bool purge_node_hash)
 	xfree (ctl_conf_ptr->epilog);
 	xfree (ctl_conf_ptr->health_check_program);
 	xfree (ctl_conf_ptr->job_acct_gather_type);
+	xfree (ctl_conf_ptr->job_ckpt_dir);
 	xfree (ctl_conf_ptr->job_comp_host);
 	xfree (ctl_conf_ptr->job_comp_loc);
 	xfree (ctl_conf_ptr->job_comp_pass);
@@ -1165,9 +1315,11 @@ free_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr, bool purge_node_hash)
 	xfree (ctl_conf_ptr->licenses);
 	xfree (ctl_conf_ptr->mail_prog);
 	xfree (ctl_conf_ptr->mpi_default);
+	xfree (ctl_conf_ptr->mpi_params);
 	xfree (ctl_conf_ptr->node_prefix);
 	xfree (ctl_conf_ptr->plugindir);
 	xfree (ctl_conf_ptr->plugstack);
+	xfree (ctl_conf_ptr->priority_type);
 	xfree (ctl_conf_ptr->proctrack_type);
 	xfree (ctl_conf_ptr->prolog);
 	xfree (ctl_conf_ptr->propagate_rlimits_except);
@@ -1184,6 +1336,7 @@ free_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr, bool purge_node_hash)
 	xfree (ctl_conf_ptr->slurmd_logfile);
 	xfree (ctl_conf_ptr->slurmd_pidfile);
 	xfree (ctl_conf_ptr->slurmd_spooldir);
+	xfree (ctl_conf_ptr->slurmd_user_name);
 	xfree (ctl_conf_ptr->srun_epilog);
 	xfree (ctl_conf_ptr->srun_prolog);
 	xfree (ctl_conf_ptr->state_save_location);
@@ -1195,6 +1348,7 @@ free_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr, bool purge_node_hash)
 	xfree (ctl_conf_ptr->task_plugin);
 	xfree (ctl_conf_ptr->task_prolog);
 	xfree (ctl_conf_ptr->tmp_fs);
+	xfree (ctl_conf_ptr->topology_plugin);
 	xfree (ctl_conf_ptr->unkillable_program);
 
 	if (purge_node_hash)
@@ -1212,6 +1366,7 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 {
 	ctl_conf_ptr->last_update		= time(NULL);
 	ctl_conf_ptr->cache_groups		= (uint16_t) NO_VAL;
+	xfree (ctl_conf_ptr->accounting_storage_backup_host);
 	xfree (ctl_conf_ptr->accounting_storage_host);
 	xfree (ctl_conf_ptr->accounting_storage_loc);
 	xfree (ctl_conf_ptr->accounting_storage_pass);
@@ -1225,10 +1380,12 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 	ctl_conf_ptr->cache_groups		= 0;
 	xfree (ctl_conf_ptr->checkpoint_type);
 	xfree (ctl_conf_ptr->cluster_name);
+	ctl_conf_ptr->complete_wait		= (uint16_t) NO_VAL;
 	xfree (ctl_conf_ptr->control_addr);
 	xfree (ctl_conf_ptr->control_machine);
 	xfree (ctl_conf_ptr->crypto_type);
 	ctl_conf_ptr->def_mem_per_task          = 0;
+	ctl_conf_ptr->debug_flags		= 0;
 	ctl_conf_ptr->disable_root_jobs         = 0;
 	ctl_conf_ptr->enforce_part_limits       = 0;
 	xfree (ctl_conf_ptr->epilog);
@@ -1241,6 +1398,7 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 	ctl_conf_ptr->inactive_limit		= (uint16_t) NO_VAL;
 	xfree (ctl_conf_ptr->job_acct_gather_type);
 	ctl_conf_ptr->job_acct_gather_freq             = 0;
+	xfree (ctl_conf_ptr->job_ckpt_dir);
 	xfree (ctl_conf_ptr->job_comp_loc);
 	xfree (ctl_conf_ptr->job_comp_pass);
 	ctl_conf_ptr->job_comp_port             = 0;
@@ -1257,9 +1415,11 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 	ctl_conf_ptr->max_mem_per_task          = 0;
 	ctl_conf_ptr->min_job_age		= (uint16_t) NO_VAL;
 	xfree (ctl_conf_ptr->mpi_default);
+	xfree (ctl_conf_ptr->mpi_params);
 	ctl_conf_ptr->msg_timeout		= (uint16_t) NO_VAL;
 	ctl_conf_ptr->next_job_id		= (uint32_t) NO_VAL;
 	xfree (ctl_conf_ptr->node_prefix);
+	ctl_conf_ptr->over_time_limit           = 0;
 	xfree (ctl_conf_ptr->plugindir);
 	xfree (ctl_conf_ptr->plugstack);
 	ctl_conf_ptr->private_data              = 0;
@@ -1268,8 +1428,10 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 	ctl_conf_ptr->propagate_prio_process	= (uint16_t) NO_VAL;
 	xfree (ctl_conf_ptr->propagate_rlimits);
 	xfree (ctl_conf_ptr->propagate_rlimits_except);
+	ctl_conf_ptr->resume_timeout		= 0;
 	xfree (ctl_conf_ptr->resume_program);
 	ctl_conf_ptr->resume_rate		= (uint16_t) NO_VAL;
+	ctl_conf_ptr->resv_over_run		= 0;
 	ctl_conf_ptr->ret2service		= (uint16_t) NO_VAL;
 	xfree( ctl_conf_ptr->salloc_default_command);
 	xfree( ctl_conf_ptr->sched_params );
@@ -1281,6 +1443,8 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 	ctl_conf_ptr->select_type_param         = (uint16_t) NO_VAL;
 	ctl_conf_ptr->slurm_user_id		= (uint16_t) NO_VAL; 
 	xfree (ctl_conf_ptr->slurm_user_name);
+	ctl_conf_ptr->slurmd_user_id		= (uint16_t) NO_VAL; 
+	xfree (ctl_conf_ptr->slurmd_user_name);
 	ctl_conf_ptr->slurmctld_debug		= (uint16_t) NO_VAL; 
 	xfree (ctl_conf_ptr->slurmctld_logfile);
 	xfree (ctl_conf_ptr->slurmctld_pidfile);
@@ -1293,6 +1457,7 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 	xfree (ctl_conf_ptr->slurmd_spooldir);
 	ctl_conf_ptr->slurmd_timeout		= (uint16_t) NO_VAL;
 	xfree (ctl_conf_ptr->srun_prolog);
+	ctl_conf_ptr->srun_io_timeout		= 0;
 	xfree (ctl_conf_ptr->srun_epilog);
 	xfree (ctl_conf_ptr->state_save_location);
 	xfree (ctl_conf_ptr->suspend_exc_nodes);
@@ -1300,17 +1465,20 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 	xfree (ctl_conf_ptr->suspend_program);
 	ctl_conf_ptr->suspend_rate		= (uint16_t) NO_VAL;
 	ctl_conf_ptr->suspend_time		= (uint16_t) NO_VAL;
+	ctl_conf_ptr->suspend_timeout		= 0;
 	xfree (ctl_conf_ptr->switch_type);
 	xfree (ctl_conf_ptr->task_epilog);
 	xfree (ctl_conf_ptr->task_plugin);
 	ctl_conf_ptr->task_plugin_param		= 0;
 	xfree (ctl_conf_ptr->task_prolog);
 	xfree (ctl_conf_ptr->tmp_fs);
+	xfree (ctl_conf_ptr->topology_plugin);
 	ctl_conf_ptr->tree_width       		= (uint16_t) NO_VAL;
 	xfree (ctl_conf_ptr->unkillable_program);
 	ctl_conf_ptr->unkillable_timeout        = (uint16_t) NO_VAL;
 	ctl_conf_ptr->use_pam			= 0;
 	ctl_conf_ptr->wait_time			= (uint16_t) NO_VAL;
+	ctl_conf_ptr->kill_on_bad_exit	= 0;
 
 	_free_name_hashtbl();
 	_init_name_hashtbl();
@@ -1319,8 +1487,7 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 }
 
 /* caller must lock conf_lock */
-static void
-_init_slurm_conf(const char *file_name)
+static void _init_slurm_conf(const char *file_name)
 {
 	char *name = (char *)file_name;
 	/* conf_ptr = (slurm_ctl_conf_t *)xmalloc(sizeof(slurm_ctl_conf_t)); */
@@ -1338,7 +1505,7 @@ _init_slurm_conf(const char *file_name)
 	if(s_p_parse_file(conf_hashtbl, name) == SLURM_ERROR)
 		fatal("something wrong with opening/reading conf file");
 	/* s_p_dump_values(conf_hashtbl, slurm_conf_options); */
-	validate_and_set_defaults(conf_ptr, conf_hashtbl);
+	_validate_and_set_defaults(conf_ptr, conf_hashtbl);
 	conf_ptr->slurm_conf = xstrdup(name);
 }
 
@@ -1506,7 +1673,7 @@ static void _normalize_debug_level(uint16_t *level)
  * NOTE: if control_addr is NULL, it is over-written by control_machine
  */
 static void
-validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
+_validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 {
 	char *temp_str = NULL;
 	long long_suspend_time;
@@ -1540,8 +1707,11 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 
 	s_p_get_string(&conf->cluster_name, "ClusterName", hashtbl);
 
+	if (!s_p_get_uint16(&conf->complete_wait, "CompleteWait", hashtbl))
+		conf->complete_wait = DEFAULT_COMPLETE_WAIT;
+
 	if (!s_p_get_string(&conf->control_machine, "ControlMachine", hashtbl))
-		fatal ("validate_and_set_defaults: "
+		fatal ("_validate_and_set_defaults: "
 		       "ControlMachine not specified.");
 	else if (strcasecmp("localhost", conf->control_machine) == 0) {
 		xfree (conf->control_machine);
@@ -1565,7 +1735,7 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	s_p_get_string(&default_storage_host, "DefaultStorageHost", hashtbl);
 	s_p_get_string(&default_storage_user, "DefaultStorageUser", hashtbl);
 	s_p_get_string(&default_storage_pass, "DefaultStoragePass", hashtbl);
-	s_p_get_string(&default_storage_loc,  "DefaultStorageLoc", hashtbl);
+	s_p_get_string(&default_storage_loc,  "DefaultStorageLoc",  hashtbl);
 	s_p_get_uint32(&default_storage_port, "DefaultStoragePort", hashtbl);
 	s_p_get_string(&conf->job_credential_private_key,
 		       "JobCredentialPrivateKey", hashtbl);
@@ -1595,14 +1765,20 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 		      "JobCredentialPublicCertificate be set");
 	}
 
-	if ((s_p_get_uint32(&conf->def_mem_per_task,
-			    "DefMemPerCPU", hashtbl)) ||
-	    (s_p_get_uint32(&conf->def_mem_per_task, "DefMemPerTask", hashtbl)))
+	if (s_p_get_uint32(&conf->def_mem_per_task, "DefMemPerCPU", hashtbl))
 		conf->def_mem_per_task |= MEM_PER_CPU;
-	else if (!s_p_get_uint32(&conf->def_mem_per_task,
-				 "DefMemPerNode", hashtbl))
+	else if (!s_p_get_uint32(&conf->def_mem_per_task, "DefMemPerNode", 
+				 hashtbl))
 		conf->def_mem_per_task = DEFAULT_MEM_PER_CPU;
 
+	if (s_p_get_string(&temp_str, "DebugFlags", hashtbl)) {
+		conf->debug_flags = debug_str2flags(temp_str);
+		if (conf->debug_flags == NO_VAL)
+			fatal("DebugFlags invalid: %s", temp_str);
+		xfree(temp_str);
+	} else	/* Default: no DebugFlags */
+		conf->debug_flags = 0;
+
 	if (!s_p_get_boolean((bool *) &conf->disable_root_jobs, 
 			     "DisableRootJobs", hashtbl))
 		conf->disable_root_jobs = DEFAULT_DISABLE_ROOT_JOBS;
@@ -1616,6 +1792,8 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	if (!s_p_get_uint32(&conf->epilog_msg_time, "EpilogMsgTime", hashtbl))
 		conf->epilog_msg_time = DEFAULT_EPILOG_MSG_TIME;
 
+	s_p_get_string(&conf->epilog_slurmctld, "EpilogSlurmctld", hashtbl);
+
 	if (!s_p_get_uint16(&conf->fast_schedule, "FastSchedule", hashtbl))
 		conf->fast_schedule = DEFAULT_FAST_SCHEDULE;
 
@@ -1662,6 +1840,9 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 		conf->job_acct_gather_type =
 			xstrdup(DEFAULT_JOB_ACCT_GATHER_TYPE);
 
+	if (!s_p_get_string(&conf->job_ckpt_dir, "JobCheckpointDir", hashtbl))
+		conf->job_ckpt_dir = xstrdup(DEFAULT_JOB_CKPT_DIR);
+
 	if (!s_p_get_string(&conf->job_comp_type, "JobCompType", hashtbl)) {
 		if(default_storage_type) {
 			if(!strcasecmp("slurmdbd", default_storage_type)) {
@@ -1683,6 +1864,9 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	if (!s_p_get_string(&conf->job_comp_loc, "JobCompLoc", hashtbl)) {
 		if(default_storage_loc)
 			conf->job_comp_loc = xstrdup(default_storage_loc);
+		else if(!strcmp(conf->job_comp_type, "job_comp/mysql")
+			|| !strcmp(conf->job_comp_type, "job_comp/pgsql")) 
+			conf->job_comp_loc = xstrdup(DEFAULT_JOB_COMP_DB);
 		else
 			conf->job_comp_loc = xstrdup(DEFAULT_JOB_COMP_LOC);
 	}
@@ -1690,32 +1874,34 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	if (!s_p_get_string(&conf->job_comp_host, "JobCompHost",
 			    hashtbl)) {
 		if(default_storage_host)
-			conf->job_comp_host =
-				xstrdup(default_storage_host);
+			conf->job_comp_host = xstrdup(default_storage_host);
 		else
 			conf->job_comp_host = xstrdup(DEFAULT_STORAGE_HOST);
 	}
 	if (!s_p_get_string(&conf->job_comp_user, "JobCompUser",
 			    hashtbl)) {
 		if(default_storage_user)
-			conf->job_comp_user =
-				xstrdup(default_storage_user);
+			conf->job_comp_user = xstrdup(default_storage_user);
 		else
 			conf->job_comp_user = xstrdup(DEFAULT_STORAGE_USER);
 	}
 	if (!s_p_get_string(&conf->job_comp_pass, "JobCompPass",
 			    hashtbl)) {
 		if(default_storage_pass)
-			conf->job_comp_pass =
-				xstrdup(default_storage_pass);
+			conf->job_comp_pass = xstrdup(default_storage_pass);
 	}
 	if (!s_p_get_uint32(&conf->job_comp_port, "JobCompPort",
 			    hashtbl)) {
 		if(default_storage_port)
 			conf->job_comp_port = default_storage_port;
-		else
+		else if(!strcmp(conf->job_comp_type, "job_comp/mysql")) 
+			conf->job_comp_port = DEFAULT_MYSQL_PORT;
+		else if(!strcmp(conf->job_comp_type, "job_comp/pgsql")) 
+			conf->job_comp_port = DEFAULT_PGSQL_PORT;
+		else 
 			conf->job_comp_port = DEFAULT_STORAGE_PORT;
 	}
+
 	if (!s_p_get_uint16(&conf->job_file_append, "JobFileAppend", hashtbl))
 		conf->job_file_append = 0;
 
@@ -1727,10 +1913,13 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	if (!s_p_get_uint16(&conf->get_env_timeout, "GetEnvTimeout", hashtbl))
 		conf->get_env_timeout = DEFAULT_GET_ENV_TIMEOUT;
 
-	s_p_get_uint16(&conf->health_check_interval,
-		       "HealthCheckInterval", hashtbl);
-	s_p_get_string(&conf->health_check_program,
-		       "HealthCheckProgram", hashtbl);
+	s_p_get_uint16(&conf->health_check_interval, "HealthCheckInterval", 
+		       hashtbl);
+	s_p_get_string(&conf->health_check_program, "HealthCheckProgram", 
+		       hashtbl);
+
+	if (!s_p_get_uint16(&conf->kill_on_bad_exit, "KillOnBadExit", hashtbl))
+		conf->kill_on_bad_exit = DEFAULT_KILL_ON_BAD_EXIT;
 
 	if (!s_p_get_uint16(&conf->kill_wait, "KillWait", hashtbl))
 		conf->kill_wait = DEFAULT_KILL_WAIT;
@@ -1743,13 +1932,15 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	if (!s_p_get_uint16(&conf->max_job_cnt, "MaxJobCount", hashtbl))
 		conf->max_job_cnt = DEFAULT_MAX_JOB_COUNT;
 
-	if ((s_p_get_uint32(&conf->max_mem_per_task,
+	if ((s_p_get_uint32(&conf->max_mem_per_task, 
 			    "MaxMemPerCPU", hashtbl)) ||
-	    (s_p_get_uint32(&conf->max_mem_per_task, "MaxMemPerTask", hashtbl)))
+	    (s_p_get_uint32(&conf->max_mem_per_task, 
+			    "MaxMemPerTask", hashtbl))) {
 		conf->max_mem_per_task |= MEM_PER_CPU;
-	else if (!s_p_get_uint32(&conf->max_mem_per_task,
-				 "MaxMemPerNode", hashtbl))
+	} else if (!s_p_get_uint32(&conf->max_mem_per_task, 
+				 "MaxMemPerNode", hashtbl)) {
 		conf->max_mem_per_task = DEFAULT_MAX_MEM_PER_CPU;
+	}
 
 	if (!s_p_get_uint16(&conf->msg_timeout, "MessageTimeout", hashtbl))
 		conf->msg_timeout = DEFAULT_MSG_TIMEOUT;
@@ -1764,6 +1955,8 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	if (!s_p_get_string(&conf->mpi_default, "MpiDefault", hashtbl))
 		conf->mpi_default = xstrdup(DEFAULT_MPI_DEFAULT);
 
+	s_p_get_string(&conf->mpi_params, "MpiParams", hashtbl);
+
 	if(!s_p_get_boolean((bool *)&conf->track_wckey, 
 			    "TrackWCKey", hashtbl))
 		conf->track_wckey = false;
@@ -1804,6 +1997,10 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 		xfree(temp_str);
 	}
 
+	/* if no backup we don't care */
+	s_p_get_string(&conf->accounting_storage_backup_host,
+		       "AccountingStorageBackupHost", hashtbl);
+	
 	if (!s_p_get_string(&conf->accounting_storage_host,
 			    "AccountingStorageHost", hashtbl)) {
 		if(default_storage_host)
@@ -1825,11 +2022,16 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 		if(default_storage_loc)
 			conf->accounting_storage_loc =
 				xstrdup(default_storage_loc);
+		else if(!strcmp(conf->accounting_storage_type, 
+				"accounting_storage/mysql")
+			|| !strcmp(conf->accounting_storage_type, 
+				"accounting_storage/pgsql")) 
+			conf->accounting_storage_loc =
+				xstrdup(DEFAULT_ACCOUNTING_DB);
 		else
 			conf->accounting_storage_loc =
 				xstrdup(DEFAULT_STORAGE_LOC);
 	}
-
 	if (!s_p_get_string(&conf->accounting_storage_user,
 			    "AccountingStorageUser", hashtbl)) {
 		if(default_storage_user)
@@ -1849,9 +2051,30 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 			    "AccountingStoragePort", hashtbl)) {
 		if(default_storage_port)
 			conf->accounting_storage_port = default_storage_port;
+		else if(!strcmp(conf->accounting_storage_type,
+				"accounting_storage/slurmdbd")) 
+			conf->accounting_storage_port = SLURMDBD_PORT;
+		else if(!strcmp(conf->accounting_storage_type, 
+			  "accounting_storage/mysql")) 
+			conf->accounting_storage_port = DEFAULT_MYSQL_PORT;
+		else if(!strcmp(conf->accounting_storage_type,
+			  "accounting_storage/pgsql")) 
+			conf->accounting_storage_port = DEFAULT_PGSQL_PORT;
 		else
 			conf->accounting_storage_port = DEFAULT_STORAGE_PORT;
 	}
+	
+	/* remove the user and loc if using slurmdbd */
+	if(!strcmp(conf->accounting_storage_type,
+		   "accounting_storage/slurmdbd")) {
+		xfree(conf->accounting_storage_loc);
+		conf->accounting_storage_loc = xstrdup("N/A");
+		xfree(conf->accounting_storage_user);
+		conf->accounting_storage_user = xstrdup("N/A");
+	}
+
+	s_p_get_uint16(&conf->over_time_limit, "OverTimeLimit", hashtbl);
+
 	if (!s_p_get_string(&conf->plugindir, "PluginDir", hashtbl))
 		conf->plugindir = xstrdup(default_plugin_path);
 
@@ -1861,6 +2084,83 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	if (!s_p_get_string(&conf->switch_type, "SwitchType", hashtbl))
 		conf->switch_type = xstrdup(DEFAULT_SWITCH_TYPE);
 
+	if (s_p_get_string(&temp_str, "PriorityDecayHalfLife", hashtbl)) {
+		int max_time = time_str2mins(temp_str);
+		if ((max_time < 0) && (max_time != INFINITE)) {
+			fatal("Bad value \"%s\" for PriorityDecayHalfLife",
+			      temp_str);
+		}
+		conf->priority_decay_hl = max_time * 60;
+		xfree(temp_str);
+	} else 
+		conf->priority_decay_hl = DEFAULT_PRIORITY_DECAY;
+
+	if (s_p_get_boolean(&truth, "PriorityFavorSmall", hashtbl) && truth) 
+		conf->priority_favor_small = 1;
+	else 
+		conf->priority_favor_small = 0;
+	
+	if (s_p_get_string(&temp_str, "PriorityMaxAge", hashtbl)) {
+		int max_time = time_str2mins(temp_str);
+		if ((max_time < 0) && (max_time != INFINITE)) {
+			fatal("Bad value \"%s\" for PriorityMaxAge",
+			      temp_str);
+		}
+		conf->priority_max_age = max_time * 60;
+		xfree(temp_str);
+	} else 
+		conf->priority_max_age = DEFAULT_PRIORITY_DECAY;
+
+	if (s_p_get_string(&temp_str, "PriorityUsageResetPeriod", hashtbl)) {
+		if (strcasecmp(temp_str, "none") == 0)
+			conf->priority_reset_period = PRIORITY_RESET_NONE;
+		else if (strcasecmp(temp_str, "now") == 0)
+			conf->priority_reset_period = PRIORITY_RESET_NOW;
+		else if (strcasecmp(temp_str, "daily") == 0)
+			conf->priority_reset_period = PRIORITY_RESET_DAILY;
+		else if (strcasecmp(temp_str, "weekly") == 0)
+			conf->priority_reset_period = PRIORITY_RESET_WEEKLY;
+		else if (strcasecmp(temp_str, "monthly") == 0)
+			conf->priority_reset_period = PRIORITY_RESET_MONTHLY;
+		else if (strcasecmp(temp_str, "quarterly") == 0)
+			conf->priority_reset_period = PRIORITY_RESET_QUARTERLY;
+		else if (strcasecmp(temp_str, "yearly") == 0)
+			conf->priority_reset_period = PRIORITY_RESET_YEARLY;
+		else {
+			fatal("Bad value \"%s\" for PriorityUsageResetPeriod",
+			      temp_str);
+		}
+		xfree(temp_str);
+	} else {
+		conf->priority_reset_period = PRIORITY_RESET_NONE;
+		if(!conf->priority_decay_hl) {
+			fatal("You have to either have "
+			      "PriorityDecayHalfLife != 0 or "
+			      "PriorityUsageResetPeriod set to something "
+			      "or the priority plugin will result in "
+			      "rolling over.");
+		}
+	}
+
+	if (!s_p_get_string(&conf->priority_type, "PriorityType", hashtbl))
+		conf->priority_type = xstrdup(DEFAULT_PRIORITY_TYPE);
+
+	if (!s_p_get_uint32(&conf->priority_weight_age,
+			    "PriorityWeightAge", hashtbl))
+		conf->priority_weight_age = 0;
+	if (!s_p_get_uint32(&conf->priority_weight_fs,
+			    "PriorityWeightFairshare", hashtbl))
+		conf->priority_weight_fs = 0;
+	if (!s_p_get_uint32(&conf->priority_weight_js,
+			    "PriorityWeightJobSize", hashtbl))
+		conf->priority_weight_js = 0;
+	if (!s_p_get_uint32(&conf->priority_weight_part,
+			    "PriorityWeightPartition", hashtbl))
+		conf->priority_weight_part = 0;
+	if (!s_p_get_uint32(&conf->priority_weight_qos,
+			    "PriorityWeightQOS", hashtbl))
+		conf->priority_weight_qos = 0;
+
 	if (!s_p_get_string(&conf->proctrack_type, "ProctrackType", hashtbl)) {
 		if (!strcmp(conf->switch_type,"switch/elan"))
 			conf->proctrack_type = xstrdup("proctrack/rms");
@@ -1873,24 +2173,27 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 		fatal("proctrack/linuxproc is incompatable with switch/elan");
 
 	if (s_p_get_string(&temp_str, "PrivateData", hashtbl)) {
+		if (strstr(temp_str, "account"))
+			conf->private_data |= PRIVATE_DATA_ACCOUNTS;
 		if (strstr(temp_str, "job"))
 			conf->private_data |= PRIVATE_DATA_JOBS;
 		if (strstr(temp_str, "node"))
 			conf->private_data |= PRIVATE_DATA_NODES;
 		if (strstr(temp_str, "partition"))
 			conf->private_data |= PRIVATE_DATA_PARTITIONS;
+		if (strstr(temp_str, "reservation"))
+			conf->private_data |= PRIVATE_DATA_RESERVATIONS;
 		if (strstr(temp_str, "usage"))
 			conf->private_data |= PRIVATE_DATA_USAGE;
-		if (strstr(temp_str, "users"))
+		if (strstr(temp_str, "user"))
 			conf->private_data |= PRIVATE_DATA_USERS;
-		if (strstr(temp_str, "accounts"))
-			conf->private_data |= PRIVATE_DATA_ACCOUNTS;
 		if (strstr(temp_str, "all"))
 			conf->private_data = 0xffff;
 		xfree(temp_str);
 	}
 
 	s_p_get_string(&conf->prolog, "Prolog", hashtbl);
+	s_p_get_string(&conf->prolog_slurmctld, "PrologSlurmctld", hashtbl);
 
 	if (!s_p_get_uint16(&conf->propagate_prio_process,
 			"PropagatePrioProcess", hashtbl)) {
@@ -1919,9 +2222,13 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	if (!s_p_get_uint16(&conf->ret2service, "ReturnToService", hashtbl))
 		conf->ret2service = DEFAULT_RETURN_TO_SERVICE;
 
+	s_p_get_uint16(&conf->resv_over_run, "ResvOverRun", hashtbl);
+
 	s_p_get_string(&conf->resume_program, "ResumeProgram", hashtbl);
 	if (!s_p_get_uint16(&conf->resume_rate, "ResumeRate", hashtbl))
 		conf->resume_rate = DEFAULT_RESUME_RATE;
+	if (!s_p_get_uint16(&conf->resume_timeout, "ResumeTimeout", hashtbl))
+		conf->resume_timeout = DEFAULT_RESUME_TIMEOUT;
 
 	s_p_get_string(&conf->salloc_default_command, "SallocDefaultCommand",
 			hashtbl);
@@ -1950,6 +2257,16 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	else if ((strcmp(conf->schedtype, "sched/gang") == 0) &&
 		 (conf->fast_schedule == 0))
 		fatal("FastSchedule=0 is not supported with sched/gang");
+	if (strcmp(conf->priority_type, "priority/multifactor") == 0) {
+		if (strcmp(conf->schedtype, "sched/wiki") == 0) {
+			fatal("PriorityType=priority/multifactor is "
+			      "incompatible with SchedulerType=sched/wiki");
+		}
+		if (strcmp(conf->schedtype, "sched/wiki2") == 0) {
+			fatal("PriorityType=priority/multifactor is "
+			      "incompatible with SchedulerType=sched/wiki2");
+		}
+	}
 
 	if (!s_p_get_string(&conf->select_type, "SelectType", hashtbl))
 		conf->select_type = xstrdup(DEFAULT_SELECT_TYPE);
@@ -1977,7 +2294,7 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	} else {
 		uid_t my_uid = uid_from_string(conf->slurm_user_name);
 		if (my_uid == (uid_t) -1) {
-			error ("Invalid user for SlurmUser %s, ignored",
+			fatal ("Invalid user for SlurmUser %s, ignored",
 			       conf->slurm_user_name);
 			xfree(conf->slurm_user_name);
 		} else {
@@ -1985,6 +2302,20 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 		}
 	}
 
+	if (!s_p_get_string( &conf->slurmd_user_name, "SlurmdUser", hashtbl)) {
+		conf->slurmd_user_name = xstrdup("root");
+		conf->slurmd_user_id   = 0;
+	} else {
+		uid_t my_uid = uid_from_string(conf->slurmd_user_name);
+		if (my_uid == (uid_t) -1) {
+			fatal ("Invalid user for SlurmdUser %s, ignored",
+			       conf->slurmd_user_name);
+			xfree(conf->slurmd_user_name);
+		} else {
+			conf->slurmd_user_id = my_uid;
+		}
+	}
+
 	if (s_p_get_uint16(&conf->slurmctld_debug, "SlurmctldDebug", hashtbl))
 		_normalize_debug_level(&conf->slurmctld_debug);
 	else
@@ -2023,6 +2354,7 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 		conf->slurmd_timeout = DEFAULT_SLURMD_TIMEOUT;
 
 	s_p_get_string(&conf->srun_prolog, "SrunProlog", hashtbl);
+	s_p_get_uint16(&conf->srun_io_timeout, "SrunIOTimeout", hashtbl);
 	s_p_get_string(&conf->srun_epilog, "SrunEpilog", hashtbl);
 
 	if (!s_p_get_string(&conf->state_save_location,
@@ -2038,6 +2370,8 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 		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;
 
 	/* see above for switch_type, order dependent */
 
@@ -2045,13 +2379,46 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 		conf->task_plugin = xstrdup(DEFAULT_TASK_PLUGIN);
 
 	if (s_p_get_string(&temp_str, "TaskPluginParam", hashtbl)) {
-		if (strcasecmp(temp_str, "cpusets") == 0)
-			conf->task_plugin_param = TASK_PARAM_CPUSETS;
-		else if (strcasecmp(temp_str, "sched") == 0)
-			conf->task_plugin_param = TASK_PARAM_SCHED;
-		else {
-			fatal("Bad TaskPluginParam: %s", temp_str);
-			conf->task_plugin_param = TASK_PARAM_NONE;
+		char *last = NULL, *tok;
+		bool set_mode = false, set_unit = false;
+		tok = strtok_r(temp_str, ",", &last);
+		while (tok) {
+			if (strcasecmp(tok, "none") == 0) {
+				if (set_unit)
+					fatal("Bad TaskPluginParam: %s", tok);
+				set_unit = true;
+				conf->task_plugin_param |= CPU_BIND_NONE;
+			} else if (strcasecmp(tok, "sockets") == 0) {
+				if (set_unit)
+					fatal("Bad TaskPluginParam: %s", tok);
+				set_unit = true;
+				conf->task_plugin_param |= CPU_BIND_TO_SOCKETS;
+			} else if (strcasecmp(tok, "cores") == 0) {
+				if (set_unit)
+					fatal("Bad TaskPluginParam: %s", tok);
+				set_unit = true;
+				conf->task_plugin_param |= CPU_BIND_TO_CORES;
+			} else if (strcasecmp(tok, "threads") == 0) {
+				if (set_unit)
+					fatal("Bad TaskPluginParam: %s", tok);
+				set_unit = true;
+				conf->task_plugin_param |= CPU_BIND_TO_THREADS;
+			} else if (strcasecmp(tok, "cpusets") == 0) {
+				if (set_mode)
+					fatal("Bad TaskPluginParam: %s", tok);
+				set_mode = true;
+				conf->task_plugin_param |= CPU_BIND_CPUSETS;
+			} else if (strcasecmp(tok, "sched") == 0) {
+				if (set_mode)
+					fatal("Bad TaskPluginParam: %s", tok);
+				set_mode = true;
+				/* No change to task_plugin_param, 
+				 * this is the default */
+			} else if (strcasecmp(tok, "verbose") == 0) {
+				conf->task_plugin_param |= CPU_BIND_VERBOSE;
+			} else
+				fatal("Bad TaskPluginParam: %s", tok);
+			tok = strtok_r(NULL, ",", &last);
 		}
 		xfree(temp_str);
 	}
@@ -2064,7 +2431,10 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 
 	if (!s_p_get_uint16(&conf->wait_time, "WaitTime", hashtbl))
 		conf->wait_time = DEFAULT_WAIT_TIME;
-	
+
+	if (!s_p_get_string(&conf->topology_plugin, "TopologyPlugin", hashtbl))
+		conf->topology_plugin = xstrdup(DEFAULT_TOPOLOGY_PLUGIN);
+
 	if (s_p_get_uint16(&conf->tree_width, "TreeWidth", hashtbl)) {
 		if (conf->tree_width == 0) {
 			error("TreeWidth=0 is invalid");
@@ -2114,3 +2484,124 @@ slurm_conf_expand_slurmd_path(const char *path, const char *node_name)
 	
 	return dir;
 }
+
+/*
+ * debug_flags2str - convert a DebugFlags uint32_t to the equivalent string
+ */
+extern char * debug_flags2str(uint32_t debug_flags)
+{
+	char *rc = NULL;
+
+	if (debug_flags & DEBUG_FLAG_CPU_BIND) {
+		if (rc)
+			xstrcat(rc, ",");
+		xstrcat(rc, "CPU_Bind");
+	}
+	if (debug_flags & DEBUG_FLAG_SELECT_TYPE) {
+		if (rc)
+			xstrcat(rc, ",");
+		xstrcat(rc, "SelectType");
+	}
+	if (debug_flags & DEBUG_FLAG_STEPS) {
+		if (rc)
+			xstrcat(rc, ",");
+		xstrcat(rc, "Steps");
+	}
+	if (debug_flags & DEBUG_FLAG_TRIGGERS) {
+		if (rc)
+			xstrcat(rc, ",");
+		xstrcat(rc, "Triggers");
+	}
+	if (debug_flags & DEBUG_FLAG_WIKI) {
+		if (rc)
+			xstrcat(rc, ",");
+		xstrcat(rc, "Wiki");
+	}
+		
+	return rc;
+}
+
+/*
+ * debug_str2flags - Convert a DebugFlags string to the equivalent uint32_t
+ * Returns NO_VAL if invalid
+ */
+extern uint32_t debug_str2flags(char *debug_flags)
+{
+	uint32_t rc = 0;
+	char *tmp_str, *tok, *last = NULL;
+
+	if (!debug_flags)
+		return rc;
+
+	tmp_str = xstrdup(debug_flags);
+	tok = strtok_r(tmp_str, ",", &last);
+	while (tok) {
+		if      (strcasecmp(tok, "CPU_Bind") == 0)
+			rc |= DEBUG_FLAG_CPU_BIND;
+		else if (strcasecmp(tok, "SelectType") == 0)
+			rc |= DEBUG_FLAG_SELECT_TYPE;
+		else if (strcasecmp(tok, "Steps") == 0)
+			rc |= DEBUG_FLAG_STEPS;
+		else if (strcasecmp(tok, "Triggers") == 0)
+			rc |= DEBUG_FLAG_TRIGGERS;
+		else if (strcasecmp(tok, "Wiki") == 0)
+			rc |= DEBUG_FLAG_WIKI;
+		else {
+			error("Invalid DebugFlag: %s", tok);
+			rc = NO_VAL;
+			break;
+		}
+		tok = strtok_r(NULL, ",", &last);
+	}
+	xfree(tmp_str);
+
+	return rc;
+}
+
+extern void destroy_config_key_pair(void *object)
+{
+	config_key_pair_t *key_pair_ptr = (config_key_pair_t *)object;
+
+	if(key_pair_ptr) {
+		xfree(key_pair_ptr->name);
+		xfree(key_pair_ptr->value);
+		xfree(key_pair_ptr);
+	}
+}
+
+extern void pack_config_key_pair(void *in, uint16_t rpc_version, Buf buffer)
+{
+	config_key_pair_t *object = (config_key_pair_t *)in;
+	packstr(object->name,  buffer);
+	packstr(object->value, buffer);
+}
+
+extern int unpack_config_key_pair(void **object, uint16_t rpc_version,
+				  Buf buffer)
+{
+	uint32_t uint32_tmp;
+	config_key_pair_t *object_ptr = xmalloc(sizeof(config_key_pair_t));
+	
+	*object = object_ptr;
+	safe_unpackstr_xmalloc(&object_ptr->name,  &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&object_ptr->value, &uint32_tmp, buffer);
+	
+	return SLURM_SUCCESS;
+
+unpack_error:
+	destroy_config_key_pair(object_ptr);
+	*object = NULL;
+	return SLURM_ERROR;
+}
+
+extern int sort_key_pairs(config_key_pair_t *key_a, config_key_pair_t *key_b)
+{
+	int size_a = strcmp(key_a->name, key_b->name);
+
+	if (size_a < 0)
+		return -1;
+	else if (size_a > 0)
+		return 1;
+
+	return 0;
+}
diff --git a/src/common/read_config.h b/src/common/read_config.h
index b70006654..924d85175 100644
--- a/src/common/read_config.h
+++ b/src/common/read_config.h
@@ -3,14 +3,15 @@
  *  file
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Portions Copyright (C) 2008 Vijay Ramasubramanian.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Mette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -54,12 +55,14 @@ extern char *default_plugstack;
 #define ACCOUNTING_ENFORCE_LIMITS 0x0002
 #define ACCOUNTING_ENFORCE_WCKEYS 0x0004
 
+#define DEFAULT_ACCOUNTING_DB      "slurm_acct_db"
 #define DEFAULT_ACCOUNTING_ENFORCE  0
 #define DEFAULT_ACCOUNTING_STORAGE_TYPE "accounting_storage/none"
-#define DEFAULT_AUTH_TYPE          "auth/none"
+#define DEFAULT_AUTH_TYPE          "auth/munge"
 #define DEFAULT_BATCH_START_TIMEOUT 10
 #define DEFAULT_CACHE_GROUPS        0
-#define DEFAULT_CRYPTO_TYPE        "crypto/openssl"
+#define DEFAULT_COMPLETE_WAIT       0
+#define DEFAULT_CRYPTO_TYPE        "crypto/munge"
 #define DEFAULT_EPILOG_MSG_TIME     2000
 #define DEFAULT_FAST_SCHEDULE       1
 #define DEFAULT_FIRST_JOB_ID        1
@@ -72,8 +75,11 @@ extern char *default_plugstack;
 #define ACCOUNTING_STORAGE_TYPE_NONE "accounting_storage/none"
 #define DEFAULT_DISABLE_ROOT_JOBS   0
 #define DEFAULT_ENFORCE_PART_LIMITS 0
+#define DEFAULT_JOB_CKPT_DIR        "/var/slurm/checkpoint"
 #define DEFAULT_JOB_COMP_TYPE       "jobcomp/none"
 #define DEFAULT_JOB_COMP_LOC        "/var/log/slurm_jobcomp.log"
+#define DEFAULT_JOB_COMP_DB         "slurm_jobcomp_db"
+#define DEFAULT_KILL_ON_BAD_EXIT    0
 #define DEFAULT_KILL_TREE           0
 #define DEFAULT_KILL_WAIT           30
 #define DEFAULT_MAIL_PROG           "/bin/mail"
@@ -90,9 +96,12 @@ extern char *default_plugstack;
 #  define DEFAULT_CHECKPOINT_TYPE   "checkpoint/none"
 #  define DEFAULT_PROCTRACK_TYPE    "proctrack/pgid"
 #endif
+#define DEFAULT_PRIORITY_DECAY      604800 /* 7 days */
+#define DEFAULT_PRIORITY_TYPE       "priority/basic"
 #define DEFAULT_PROPAGATE_PRIO_PROCESS 0
 #define DEFAULT_RETURN_TO_SERVICE   0
-#define DEFAULT_RESUME_RATE         60
+#define DEFAULT_RESUME_RATE         300
+#define DEFAULT_RESUME_TIMEOUT      60
 #define DEFAULT_SAVE_STATE_LOC      "/tmp"
 #define DEFAULT_SCHEDROOTFILTER     1
 #define DEFAULT_SCHEDULER_PORT      7321
@@ -112,11 +121,19 @@ extern char *default_plugstack;
 #define DEFAULT_STORAGE_LOC         "/var/log/slurm_jobacct.log"
 #define DEFAULT_STORAGE_USER        "root"
 #define DEFAULT_STORAGE_PORT        0
+#define DEFAULT_PGSQL_PORT          5432
+#define DEFAULT_MYSQL_PORT          3306
 #define DEFAULT_SUSPEND_RATE        60
 #define DEFAULT_SUSPEND_TIME        0
+#define DEFAULT_SUSPEND_TIMEOUT     30
 #define DEFAULT_SWITCH_TYPE         "switch/none"
 #define DEFAULT_TASK_PLUGIN         "task/none"
 #define DEFAULT_TMP_FS              "/tmp"
+#ifdef HAVE_3D
+#  define DEFAULT_TOPOLOGY_PLUGIN     "topology/3d_torus"
+#else
+#  define DEFAULT_TOPOLOGY_PLUGIN     "topology/none"
+#endif
 #define DEFAULT_WAIT_TIME           0
 #define DEFAULT_TREE_WIDTH          50
 #define DEFAULT_UNKILLABLE_TIMEOUT  60 /* seconds */
@@ -140,25 +157,30 @@ typedef struct slurm_conf_node {
 } slurm_conf_node_t;
 
 typedef struct slurm_conf_partition {
+	char *allow_alloc_nodes;/* comma delimited list of allowed
+				 * allocating nodes 
+				 * NULL indicates all */
+	char *allow_groups;	/* comma delimited list of groups, 
+				 * NULL indicates all */
+	bool default_flag;	/* Set if default partition */
+	uint32_t default_time;	/* minutes or INFINITE */
 	uint16_t disable_root_jobs; /* if set then user root can't run
 				     * jobs if NO_VAL use global
 				     * default */
-	char	*name;		/* name of the partition */
+
 	bool     hidden_flag;	/* 1 if hidden by default */
+	uint16_t max_share;	/* number of jobs to gang schedule */
 	uint32_t max_time;	/* minutes or INFINITE */
 	uint32_t max_nodes;	/* per job or INFINITE */
 	uint32_t min_nodes;	/* per job */
-	uint32_t total_nodes;	/* total number of nodes in the partition */
-	uint32_t total_cpus;	/* total number of cpus in the partition */
+	char	*name;		/* name of the partition */
+	char 	*nodes;		/* comma delimited list names of nodes */
 	uint16_t priority;	/* scheduling priority for jobs */
 	bool     root_only_flag;/* 1 if allocate/submit RPC can only be 
 				   issued by user root */
-	uint16_t max_share;	/* number of jobs to gang schedule */
 	bool     state_up_flag;	/* 1 if state is up, 0 if down */
-	char *nodes;		/* comma delimited list names of nodes */
-	char *allow_groups;	/* comma delimited list of groups, 
-				 * NULL indicates all */
-	bool default_flag;
+	uint32_t total_nodes;	/* total number of nodes in the partition */
+	uint32_t total_cpus;	/* total number of cpus in the partition */
 } slurm_conf_partition_t;
 
 typedef struct slurm_conf_downnodes {
@@ -167,6 +189,11 @@ typedef struct slurm_conf_downnodes {
 	char *state;
 } slurm_conf_downnodes_t;
 
+typedef struct {
+	char *name;
+	char *value;
+} config_key_pair_t;
+
 /*
  * slurm_conf_init - load the slurm configuration from the a file.
  * IN file_name - name of the slurm configuration file to be read
@@ -232,7 +259,7 @@ extern int slurm_conf_partition_array(slurm_conf_partition_t **ptr_array[]);
 
 /*
  * Set "ptr_array" with the pointer to an array of pointers to
- * slurm_conf_node_t structures.
+ * slurm_conf_downnodes_t structures.
  * 
  * Return value is the length of the array.
  */
@@ -251,13 +278,19 @@ extern char *slurm_conf_get_hostname(const char *node_name);
 /*
  * slurm_conf_get_nodename - Return the NodeName for given NodeHostname
  *
- * Returned string was allocated with xmalloc(), and must be freed by
- * the caller using xfree().
- *
+ * NOTE: Call xfree() to release returned value's memory.
  * NOTE: Caller must NOT be holding slurm_conf_lock().
  */
 extern char *slurm_conf_get_nodename(const char *node_hostname);
 
+/*
+ * slurm_conf_get_nodeaddr - Return the NodeAddr for given NodeHostname
+ *
+ * NOTE: Call xfree() to release returned value's memory.
+ * NOTE: Caller must NOT be holding slurm_conf_lock().
+ */
+extern char *slurm_conf_get_nodeaddr(const char *node_hostname);
+
 /*
  * slurm_conf_get_aliased_nodename - Return the NodeName matching an alias
  * of the local hostname
@@ -333,4 +366,23 @@ extern int gethostname_short (char *name, size_t len);
 extern char *slurm_conf_expand_slurmd_path(const char *path,
 					   const char *node_name);
 
+/*
+ * debug_flags2str - convert a DebugFlags uint32_t to the equivalent string
+ * Returns an xmalloc()ed string which the caller must free with xfree().
+ */
+extern char *debug_flags2str(uint32_t debug_flags);
+
+/*
+ * debug_str2flags - Convert a DebugFlags string to the equivalent uint32_t
+ * Returns NO_VAL if invalid
+ */
+extern uint32_t debug_str2flags(char *debug_flags);
+
+extern void destroy_config_key_pair(void *object);
+extern void pack_config_key_pair(void *in, uint16_t rpc_version, Buf buffer);
+extern int unpack_config_key_pair(void **object, uint16_t rpc_version, 
+				  Buf buffer);
+extern int sort_key_pairs(config_key_pair_t *key_a, config_key_pair_t *key_b);
+
+
 #endif /* !_READ_CONFIG_H */
diff --git a/src/common/safeopen.c b/src/common/safeopen.c
index 21e1bd8c1..ea9236416 100644
--- a/src/common/safeopen.c
+++ b/src/common/safeopen.c
@@ -1,13 +1,14 @@
 /*****************************************************************************\
  *  safeopen.c - safer interface to open()
- *  $Id: safeopen.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: safeopen.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/common/safeopen.h b/src/common/safeopen.h
index 3708a2657..7a073900d 100644
--- a/src/common/safeopen.h
+++ b/src/common/safeopen.h
@@ -1,13 +1,14 @@
 /*****************************************************************************\
  *  safeopen.h - safer interface to open()
- *  $Id: safeopen.h 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: safeopen.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/common/select_job_res.c b/src/common/select_job_res.c
new file mode 100644
index 000000000..ab4cf8fc9
--- /dev/null
+++ b/src/common/select_job_res.c
@@ -0,0 +1,924 @@
+/*****************************************************************************\
+ *  select_job_res.c - functions to manage data structure identifying specific
+ *	CPUs allocated to a job, step or partition
+ *****************************************************************************
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Written by Morris Jette <jette1@llnl.gov>.
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *  
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
+\*****************************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <slurm/slurm_errno.h>
+
+#include "src/common/hostlist.h"
+#include "src/common/log.h"
+#include "src/common/select_job_res.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xassert.h"
+#include "src/slurmctld/slurmctld.h"
+
+
+/* Create an empty select_job_res data structure */
+extern select_job_res_t create_select_job_res(void)
+{
+	select_job_res_t select_job_res;
+
+	select_job_res = xmalloc(sizeof(struct select_job_res));
+	return select_job_res;
+}
+
+/* Set the socket and core counts associated with a set of selected
+ * nodes of a select_job_res data structure based upon slurmctld state.
+ * (sets cores_per_socket, sockets_per_node, and sock_core_rep_count based
+ * upon the value of node_bitmap, also creates core_bitmap based upon
+ * the total number of cores in the allocation). Call this ONLY from 
+ * slurmctld. Example of use:
+ *
+ * select_job_res_t select_job_res_ptr = create_select_job_res();
+ * node_name2bitmap("dummy[2,5,12,16]", true, &(select_res_ptr->node_bitmap));
+ * rc = build_select_job_res(select_job_res_ptr, node_record_table_ptr,
+ *			     slurmctld_conf.fast_schedule);
+ */
+extern int build_select_job_res(select_job_res_t select_job_res,
+				void *node_rec_table,
+				uint16_t fast_schedule)
+{
+	int i, bitmap_len;
+	int core_cnt = 0, sock_inx = -1;
+	uint32_t cores, socks;
+	struct node_record *node_ptr, *node_record_table;
+
+	if (select_job_res->node_bitmap == NULL) {
+		error("build_select_job_res: node_bitmap is NULL");
+		return SLURM_ERROR;
+	}
+
+	node_record_table = (struct node_record *) node_rec_table;
+	xfree(select_job_res->sockets_per_node);
+	xfree(select_job_res->cores_per_socket);
+	xfree(select_job_res->sock_core_rep_count);
+	select_job_res->sockets_per_node = xmalloc(sizeof(uint16_t) * 
+						   select_job_res->nhosts);
+	select_job_res->cores_per_socket = xmalloc(sizeof(uint16_t) * 
+						   select_job_res->nhosts);
+	select_job_res->sock_core_rep_count = xmalloc(sizeof(uint32_t) * 
+						      select_job_res->nhosts);
+
+	bitmap_len = bit_size(select_job_res->node_bitmap);
+	for (i=0; i<bitmap_len; i++) {
+		if (!bit_test(select_job_res->node_bitmap, i))
+			continue;
+		node_ptr = node_record_table + i;
+		if (fast_schedule) {
+			socks = node_ptr->config_ptr->sockets;
+			cores = node_ptr->config_ptr->cores;
+		} else {
+			socks = node_ptr->sockets;
+			cores = node_ptr->cores;
+		}
+		if ((sock_inx < 0) ||
+		    (socks != select_job_res->sockets_per_node[sock_inx]) ||
+		    (cores != select_job_res->cores_per_socket[sock_inx])) {
+			sock_inx++;
+			select_job_res->sockets_per_node[sock_inx] = socks;
+			select_job_res->cores_per_socket[sock_inx] = cores;
+		}
+		select_job_res->sock_core_rep_count[sock_inx]++;
+		core_cnt += (cores * socks);
+	}
+	select_job_res->core_bitmap      = bit_alloc(core_cnt);
+	select_job_res->core_bitmap_used = bit_alloc(core_cnt);
+	if ((select_job_res->core_bitmap == NULL) ||
+	    (select_job_res->core_bitmap_used == NULL))
+		fatal("bit_alloc malloc failure");
+	return SLURM_SUCCESS;
+}
+
+/* Rebuild cpu_array_cnt, cpu_array_value, and cpu_array_reps based upon the
+ * values of nhosts and cpus in an existing data structure
+ * Return total CPU count or -1 on error */
+extern int build_select_job_res_cpu_array(select_job_res_t select_job_res_ptr)
+{
+	int cpu_count = 0, i;
+	uint32_t last_cpu_cnt = 0;
+
+	if (select_job_res_ptr->nhosts == 0)
+		return cpu_count;	/* no work to do */
+	if (select_job_res_ptr->cpus == NULL) {
+		error("build_select_job_res_cpu_array: cpus==NULL");
+		return -1;
+	}
+
+	/* clear vestigial data and create new arrays of max size */
+	select_job_res_ptr->cpu_array_cnt = 0;
+	xfree(select_job_res_ptr->cpu_array_reps);
+	select_job_res_ptr->cpu_array_reps = 
+		xmalloc(select_job_res_ptr->nhosts * sizeof(uint32_t));
+	xfree(select_job_res_ptr->cpu_array_value);
+	select_job_res_ptr->cpu_array_value = 
+		xmalloc(select_job_res_ptr->nhosts * sizeof(uint16_t));
+
+	for (i=0; i<select_job_res_ptr->nhosts; i++) {
+		if (select_job_res_ptr->cpus[i] != last_cpu_cnt) {
+			last_cpu_cnt = select_job_res_ptr->cpus[i];
+			select_job_res_ptr->cpu_array_value[
+				select_job_res_ptr->cpu_array_cnt] 
+				= last_cpu_cnt;
+			select_job_res_ptr->cpu_array_reps[
+				select_job_res_ptr->cpu_array_cnt] = 1;
+			select_job_res_ptr->cpu_array_cnt++;
+		} else {
+			select_job_res_ptr->cpu_array_reps[
+				select_job_res_ptr->cpu_array_cnt-1]++;
+		}
+		cpu_count += last_cpu_cnt;
+	}
+	return cpu_count;
+}
+
+/* Rebuild cpus array based upon the values of nhosts, cpu_array_value and
+ * cpu_array_reps in an existing data structure
+ * Return total CPU count or -1 on error */
+extern int build_select_job_res_cpus_array(select_job_res_t select_job_res_ptr)
+{
+	int cpu_count = 0, cpu_inx, i, j;
+
+	if (select_job_res_ptr->nhosts == 0)
+		return cpu_count;	/* no work to do */
+	if (select_job_res_ptr->cpu_array_cnt == 0) {
+		error("build_select_job_res_cpus_array: cpu_array_cnt==0");
+		return -1;
+	}
+	if (select_job_res_ptr->cpu_array_value == NULL) {
+		error("build_select_job_res_cpus_array: cpu_array_value==NULL");
+		return -1;
+	}
+	if (select_job_res_ptr->cpu_array_reps == NULL) {
+		error("build_select_job_res_cpus_array: cpu_array_reps==NULL");
+		return -1;
+	}
+
+	/* clear vestigial data and create new arrays of max size */
+	xfree(select_job_res_ptr->cpus);
+	select_job_res_ptr->cpus = 
+		xmalloc(select_job_res_ptr->nhosts * sizeof(uint16_t));
+
+	cpu_inx = 0;
+	for (i=0; i<select_job_res_ptr->cpu_array_cnt; i++) {
+		for (j=0; j<select_job_res_ptr->cpu_array_reps[i]; j++) {
+			if (cpu_inx >= select_job_res_ptr->nhosts) {
+				error("build_select_job_res_cpus_array: "
+				      "cpu_array is too long");
+				return -1;
+			}
+			cpu_count += select_job_res_ptr->cpus[i];
+			select_job_res_ptr->cpus[cpu_inx++] = 
+				select_job_res_ptr->cpus[i];
+		}
+	}
+	if (cpu_inx < select_job_res_ptr->nhosts) {
+		error("build_select_job_res_cpus_array: "
+		      "cpu_array is incomplete");
+		return -1;
+	}
+	return cpu_count;
+}
+
+/* Reset the node_bitmap in a select_job_res data structure
+ * This is needed after a restart/reconfiguration since nodes can 
+ * be added or removed from the system resulting in changing in 
+ * the bitmap size or bit positions */
+extern void reset_node_bitmap(select_job_res_t select_job_res_ptr,
+			      bitstr_t *new_node_bitmap)
+{
+	if (select_job_res_ptr) {
+		if (select_job_res_ptr->node_bitmap)
+			bit_free(select_job_res_ptr->node_bitmap);
+		if (new_node_bitmap) {
+			select_job_res_ptr->node_bitmap =
+				bit_copy(new_node_bitmap);
+		}
+	}
+}
+
+extern int valid_select_job_res(select_job_res_t select_job_res,
+				void *node_rec_table,
+				uint16_t fast_schedule)
+{
+	int i, bitmap_len;
+	int sock_inx = 0, sock_cnt = 0;
+	uint32_t cores, socks;
+	struct node_record *node_ptr, *node_record_table;
+
+	if (select_job_res->node_bitmap == NULL) {
+		error("valid_select_job_res: node_bitmap is NULL");
+		return SLURM_ERROR;
+	}
+	if ((select_job_res->sockets_per_node == NULL) ||
+	    (select_job_res->cores_per_socket == NULL) ||
+	    (select_job_res->sock_core_rep_count == NULL)) {
+		error("valid_select_job_res: socket/core array is NULL");
+		return SLURM_ERROR;
+	}
+
+	node_record_table = (struct node_record *) node_rec_table;
+	bitmap_len = bit_size(select_job_res->node_bitmap);
+	for (i=0; i<bitmap_len; i++) {
+		if (!bit_test(select_job_res->node_bitmap, i))
+			continue;
+		node_ptr = node_record_table + i;
+		if (fast_schedule) {
+			socks = node_ptr->config_ptr->sockets;
+			cores = node_ptr->config_ptr->cores;
+		} else {
+			socks = node_ptr->sockets;
+			cores = node_ptr->cores;
+		}
+		if (sock_cnt >= select_job_res->sock_core_rep_count[sock_inx]) {
+			sock_inx++;
+			sock_cnt = 0;
+		}
+		if ((socks != select_job_res->sockets_per_node[sock_inx]) ||
+		    (cores != select_job_res->cores_per_socket[sock_inx])) {
+			error("valid_select_job_res: "
+			      "%s sockets:%u,%u, cores %u,%u",
+			      node_ptr->name,
+			      socks, 
+			      select_job_res->sockets_per_node[sock_inx],
+			      cores, 
+			      select_job_res->cores_per_socket[sock_inx]);
+			return SLURM_ERROR;
+		}
+		sock_cnt++;
+	}
+	return SLURM_SUCCESS;
+}
+
+extern select_job_res_t copy_select_job_res(select_job_res_t
+					    select_job_res_ptr)
+{
+	int i, sock_inx = 0;
+	select_job_res_t new_layout = xmalloc(sizeof(struct select_job_res));
+
+	xassert(select_job_res_ptr);
+	new_layout->nhosts = select_job_res_ptr->nhosts;
+	new_layout->nprocs = select_job_res_ptr->nprocs;
+	new_layout->node_req = select_job_res_ptr->node_req;
+	if (select_job_res_ptr->core_bitmap) {
+		new_layout->core_bitmap = bit_copy(select_job_res_ptr->
+						   core_bitmap);
+	}
+	if (select_job_res_ptr->core_bitmap_used) {
+		new_layout->core_bitmap_used = bit_copy(select_job_res_ptr->
+							core_bitmap_used);
+	}
+	if (select_job_res_ptr->node_bitmap) {
+		new_layout->node_bitmap = bit_copy(select_job_res_ptr->
+						   node_bitmap);
+	}
+
+	new_layout->cpu_array_cnt = select_job_res_ptr->cpu_array_cnt;
+	if (select_job_res_ptr->cpu_array_reps && 
+	    select_job_res_ptr->cpu_array_cnt) {
+		new_layout->cpu_array_reps = 
+			xmalloc(sizeof(uint32_t) *
+				select_job_res_ptr->cpu_array_cnt);
+		memcpy(new_layout->cpu_array_reps, 
+		       select_job_res_ptr->cpu_array_reps, 
+		       (sizeof(uint32_t) * select_job_res_ptr->cpu_array_cnt));
+	}
+	if (select_job_res_ptr->cpu_array_value && 
+	    select_job_res_ptr->cpu_array_cnt) {
+		new_layout->cpu_array_value = 
+			xmalloc(sizeof(uint16_t) *
+				select_job_res_ptr->cpu_array_cnt);
+		memcpy(new_layout->cpu_array_value, 
+		       select_job_res_ptr->cpu_array_value, 
+		       (sizeof(uint16_t) * select_job_res_ptr->cpu_array_cnt));
+	}
+
+	if (select_job_res_ptr->cpus) {
+		new_layout->cpus = xmalloc(sizeof(uint16_t) *
+					   select_job_res_ptr->nhosts);
+		memcpy(new_layout->cpus, select_job_res_ptr->cpus, 
+		       (sizeof(uint16_t) * select_job_res_ptr->nhosts));
+	}
+	if (select_job_res_ptr->cpus_used) {
+		new_layout->cpus_used = xmalloc(sizeof(uint16_t) *
+						select_job_res_ptr->nhosts);
+		memcpy(new_layout->cpus_used, select_job_res_ptr->cpus_used, 
+		       (sizeof(uint16_t) * select_job_res_ptr->nhosts));
+	}
+
+	if (select_job_res_ptr->memory_allocated) {
+		new_layout->memory_allocated = xmalloc(sizeof(uint32_t) * 
+						       new_layout->nhosts);
+		memcpy(new_layout->memory_allocated, 
+		       select_job_res_ptr->memory_allocated, 
+		       (sizeof(uint32_t) * select_job_res_ptr->nhosts));
+	}
+	if (select_job_res_ptr->memory_used) {
+		new_layout->memory_used = xmalloc(sizeof(uint32_t) * 
+						  new_layout->nhosts);
+		memcpy(new_layout->memory_used, 
+		       select_job_res_ptr->memory_used, 
+		       (sizeof(uint32_t) * select_job_res_ptr->nhosts));
+	}
+
+	/* Copy sockets_per_node, cores_per_socket and core_sock_rep_count */
+	new_layout->sockets_per_node = xmalloc(sizeof(uint16_t) * 
+					       new_layout->nhosts);	
+	new_layout->cores_per_socket = xmalloc(sizeof(uint16_t) * 
+					       new_layout->nhosts);	
+	new_layout->sock_core_rep_count = xmalloc(sizeof(uint32_t) * 
+						  new_layout->nhosts);	
+	for (i=0; i<new_layout->nhosts; i++) {
+		if (select_job_res_ptr->sock_core_rep_count[i] ==  0) {
+			error("copy_select_job_res: sock_core_rep_count=0");
+			break;
+		}
+		sock_inx += select_job_res_ptr->sock_core_rep_count[i];
+		if (sock_inx >= select_job_res_ptr->nhosts) {
+			i++;
+			break;
+		}
+	}
+	memcpy(new_layout->sockets_per_node, 
+	       select_job_res_ptr->sockets_per_node, (sizeof(uint16_t) * i));
+	memcpy(new_layout->cores_per_socket, 
+	       select_job_res_ptr->cores_per_socket, (sizeof(uint16_t) * i));
+	memcpy(new_layout->sock_core_rep_count, 
+	       select_job_res_ptr->sock_core_rep_count, 
+	       (sizeof(uint32_t) * i));
+
+	return new_layout;
+}
+
+extern void free_select_job_res(select_job_res_t *select_job_res_pptr)
+{
+	select_job_res_t select_job_res_ptr = *select_job_res_pptr;
+
+	if (select_job_res_ptr) {
+		if (select_job_res_ptr->core_bitmap)
+			bit_free(select_job_res_ptr->core_bitmap);
+		if (select_job_res_ptr->core_bitmap_used)
+			bit_free(select_job_res_ptr->core_bitmap_used);
+		xfree(select_job_res_ptr->cores_per_socket);
+		xfree(select_job_res_ptr->cpu_array_reps);
+		xfree(select_job_res_ptr->cpu_array_value);
+		xfree(select_job_res_ptr->cpus);
+		xfree(select_job_res_ptr->cpus_used);
+		xfree(select_job_res_ptr->memory_allocated);
+		xfree(select_job_res_ptr->memory_used);
+		if (select_job_res_ptr->node_bitmap)
+			bit_free(select_job_res_ptr->node_bitmap);
+		xfree(select_job_res_ptr->sock_core_rep_count);
+		xfree(select_job_res_ptr->sockets_per_node);
+		xfree(select_job_res_ptr);
+		*select_job_res_pptr = NULL;
+	}
+}
+
+/* Log the contents of a select_job_res data structure using info() */
+extern void log_select_job_res(uint32_t job_id,
+			       select_job_res_t select_job_res_ptr)
+{
+	int bit_inx = 0, bit_reps, i;
+	int array_size, node_inx;
+	int sock_inx = 0, sock_reps = 0;
+
+	if (select_job_res_ptr == NULL) {
+		error("log_select_job_res: select_job_res_ptr is NULL");
+		return;
+	}
+
+	info("====================");
+	info("job_id:%u nhosts:%u nprocs:%u node_req:%u", 
+	     job_id, select_job_res_ptr->nhosts, select_job_res_ptr->nprocs,
+	     select_job_res_ptr->node_req);
+
+	if (select_job_res_ptr->cpus == NULL) {
+		error("log_select_job_res: cpus array is NULL");
+		return;
+	}
+	if (select_job_res_ptr->memory_allocated == NULL) {
+		error("log_select_job_res: memory array is NULL");
+		return;
+	}
+	if ((select_job_res_ptr->cores_per_socket == NULL) ||
+	    (select_job_res_ptr->sockets_per_node == NULL) ||
+	    (select_job_res_ptr->sock_core_rep_count == NULL)) {
+		error("log_select_job_res: socket/core array is NULL");
+		return;
+	}
+	if (select_job_res_ptr->core_bitmap == NULL) {
+		error("log_select_job_res: core_bitmap is NULL");
+		return;
+	}
+	if (select_job_res_ptr->core_bitmap_used == NULL) {
+		error("log_select_job_res: core_bitmap_used is NULL");
+		return;
+	}
+	array_size = bit_size(select_job_res_ptr->core_bitmap);
+
+	/* Can only log node_bitmap from slurmctld, so don't bother here */
+	for (node_inx=0; node_inx<select_job_res_ptr->nhosts; node_inx++) {
+		uint32_t cpus_used = 0, memory_allocated = 0, memory_used = 0;
+		info("Node[%d]:", node_inx);
+
+		if (sock_reps >= 
+		    select_job_res_ptr->sock_core_rep_count[sock_inx]) {
+			sock_inx++;
+			sock_reps = 0;
+		}
+		sock_reps++;
+
+		if (select_job_res_ptr->cpus_used)
+			cpus_used = select_job_res_ptr->cpus_used[node_inx];
+		if (select_job_res_ptr->memory_used)
+			memory_used = select_job_res_ptr->memory_used[node_inx];
+		if (select_job_res_ptr->memory_allocated)
+			memory_allocated = select_job_res_ptr->
+					   memory_allocated[node_inx];
+
+		info("  Mem(MB):%u:%u  Sockets:%u  Cores:%u  CPUs:%u:%u", 
+		     memory_allocated, memory_used,
+		     select_job_res_ptr->sockets_per_node[sock_inx],
+		     select_job_res_ptr->cores_per_socket[sock_inx],
+		     select_job_res_ptr->cpus[node_inx],
+		     cpus_used);
+
+		bit_reps = select_job_res_ptr->sockets_per_node[sock_inx] *
+			   select_job_res_ptr->cores_per_socket[sock_inx];
+		for (i=0; i<bit_reps; i++) {
+			if (bit_inx >= array_size) {
+				error("log_select_job_res: array size wrong");
+				break;
+			}
+			if (bit_test(select_job_res_ptr->core_bitmap,
+				     bit_inx)) {
+				char *core_used = "";
+				if (bit_test(select_job_res_ptr->
+					     core_bitmap_used, bit_inx))
+					core_used = " and in use";
+				info("  Socket[%d] Core[%d] is allocated%s",
+				     (i / select_job_res_ptr->
+				          cores_per_socket[sock_inx]),
+				     (i % select_job_res_ptr->
+					  cores_per_socket[sock_inx]),
+				     core_used);
+			}
+			bit_inx++;
+		}
+	}
+	for (node_inx=0; node_inx<select_job_res_ptr->cpu_array_cnt; 
+	     node_inx++) {
+		if (node_inx == 0)
+			info("--------------------");
+		info("cpu_array_value[%d]:%u reps:%u", node_inx,
+		     select_job_res_ptr->cpu_array_value[node_inx],
+		     select_job_res_ptr->cpu_array_reps[node_inx]);
+	}
+	info("====================");
+}
+
+extern void pack_select_job_res(select_job_res_t select_job_res_ptr, 
+				Buf buffer)
+{
+	int i;
+	uint32_t core_cnt = 0, sock_recs = 0;
+
+	if (select_job_res_ptr == NULL) {
+		uint32_t empty = NO_VAL;
+		pack32(empty, buffer);
+		return;
+	}
+
+	xassert(select_job_res_ptr->core_bitmap);
+	xassert(select_job_res_ptr->core_bitmap_used);
+	xassert(select_job_res_ptr->cores_per_socket);
+	xassert(select_job_res_ptr->cpus);
+	xassert(select_job_res_ptr->nhosts);
+	xassert(select_job_res_ptr->sock_core_rep_count);
+	xassert(select_job_res_ptr->sockets_per_node);
+
+	pack32(select_job_res_ptr->nhosts, buffer);
+	pack32(select_job_res_ptr->nprocs, buffer);
+	pack8(select_job_res_ptr->node_req, buffer);
+
+	if (select_job_res_ptr->cpu_array_cnt &&
+	    select_job_res_ptr->cpu_array_reps &&
+	    select_job_res_ptr->cpu_array_value) {
+		pack32(select_job_res_ptr->cpu_array_cnt, buffer);
+		pack32_array(select_job_res_ptr->cpu_array_reps,
+			     select_job_res_ptr->cpu_array_cnt, buffer);
+		pack16_array(select_job_res_ptr->cpu_array_value,
+			     select_job_res_ptr->cpu_array_cnt, buffer);
+	} else {
+		pack32((uint32_t) 0, buffer);
+	}
+
+	pack16_array(select_job_res_ptr->cpus,
+		     select_job_res_ptr->nhosts, buffer);
+	if (select_job_res_ptr->cpus_used) {
+		pack16_array(select_job_res_ptr->cpus_used,
+			     select_job_res_ptr->nhosts, buffer);
+	} else
+		pack16_array(select_job_res_ptr->cpus_used, 0, buffer);
+
+	if (select_job_res_ptr->memory_allocated) {
+		pack32_array(select_job_res_ptr->memory_allocated,  
+			     select_job_res_ptr->nhosts, buffer);
+	} else
+		pack32_array(select_job_res_ptr->memory_allocated, 0, buffer);
+	if (select_job_res_ptr->memory_used) {
+		pack32_array(select_job_res_ptr->memory_used,  
+			     select_job_res_ptr->nhosts, buffer);
+	} else
+		pack32_array(select_job_res_ptr->memory_used, 0, buffer);
+
+	for (i=0; i<select_job_res_ptr->nhosts; i++) {
+		core_cnt += select_job_res_ptr->sockets_per_node[i] *
+			    select_job_res_ptr->cores_per_socket[i] *
+			    select_job_res_ptr->sock_core_rep_count[i];
+		sock_recs += select_job_res_ptr->sock_core_rep_count[i];
+		if (sock_recs >= select_job_res_ptr->nhosts)
+			break;
+	}
+	i++;
+	pack16_array(select_job_res_ptr->sockets_per_node,
+		     (uint32_t) i, buffer);
+	pack16_array(select_job_res_ptr->cores_per_socket,
+		     (uint32_t) i, buffer);
+	pack32_array(select_job_res_ptr->sock_core_rep_count, 
+		     (uint32_t) i, buffer);
+
+	pack32(core_cnt, buffer);
+	xassert(core_cnt == bit_size(select_job_res_ptr->core_bitmap));
+	pack_bit_fmt(select_job_res_ptr->core_bitmap, buffer);
+	xassert(core_cnt == bit_size(select_job_res_ptr->core_bitmap_used));
+	pack_bit_fmt(select_job_res_ptr->core_bitmap_used, buffer);
+	/* Do not pack the node_bitmap, but rebuild it in reset_node_bitmap()
+	 * based upon job_ptr->nodes and the current node table */
+}
+
+extern int unpack_select_job_res(select_job_res_t *select_job_res_pptr, 
+				 Buf buffer)
+{
+	char *bit_fmt = NULL;
+	uint32_t core_cnt, empty, tmp32;
+	select_job_res_t select_job_res;
+
+	xassert(select_job_res_pptr);
+	safe_unpack32(&empty, buffer);
+	if (empty == NO_VAL) {
+		*select_job_res_pptr = NULL;
+		return SLURM_SUCCESS;
+	}
+
+	select_job_res = xmalloc(sizeof(struct select_job_res));
+	select_job_res->nhosts = empty;
+	safe_unpack32(&select_job_res->nprocs, buffer);
+	safe_unpack8(&select_job_res->node_req, buffer);
+
+	safe_unpack32(&select_job_res->cpu_array_cnt, buffer);
+	if (select_job_res->cpu_array_cnt) {
+		safe_unpack32_array(&select_job_res->cpu_array_reps,
+				    &tmp32, buffer);
+		if (tmp32 != select_job_res->cpu_array_cnt)
+			goto unpack_error;
+		safe_unpack16_array(&select_job_res->cpu_array_value,
+				    &tmp32, buffer);
+		if (tmp32 != select_job_res->cpu_array_cnt)
+			goto unpack_error;
+	}
+
+	safe_unpack16_array(&select_job_res->cpus, &tmp32, buffer);
+	if (tmp32 != select_job_res->nhosts)
+		goto unpack_error;
+	safe_unpack16_array(&select_job_res->cpus_used, &tmp32, buffer);
+	if (tmp32 == 0)
+		xfree(select_job_res->cpus_used);
+
+	safe_unpack32_array(&select_job_res->memory_allocated,
+			    &tmp32, buffer);
+	if (tmp32 == 0)
+		xfree(select_job_res->memory_allocated);
+	else if (tmp32 != select_job_res->nhosts)
+		goto unpack_error;
+	safe_unpack32_array(&select_job_res->memory_used, &tmp32, buffer);
+	if (tmp32 == 0)
+		xfree(select_job_res->memory_used);
+
+	safe_unpack16_array(&select_job_res->sockets_per_node, &tmp32, buffer);
+	safe_unpack16_array(&select_job_res->cores_per_socket, &tmp32, buffer);
+	safe_unpack32_array(&select_job_res->sock_core_rep_count,
+			    &tmp32, buffer);
+
+	safe_unpack32(&core_cnt, buffer);    /* NOTE: Not part of struct */
+	safe_unpackstr_xmalloc(&bit_fmt, &tmp32, buffer);
+	select_job_res->core_bitmap = bit_alloc((bitoff_t) core_cnt);
+	if (bit_unfmt(select_job_res->core_bitmap, bit_fmt))
+		goto unpack_error;
+	xfree(bit_fmt);
+	safe_unpackstr_xmalloc(&bit_fmt, &tmp32, buffer);
+	select_job_res->core_bitmap_used = bit_alloc((bitoff_t) core_cnt);
+	if (bit_unfmt(select_job_res->core_bitmap_used, bit_fmt))
+		goto unpack_error;
+	xfree(bit_fmt);
+	/* node_bitmap is not packed, but rebuilt in reset_node_bitmap()
+	 * based upon job_ptr->nodes and the current node table */
+
+	*select_job_res_pptr = select_job_res;
+	return SLURM_SUCCESS;
+
+  unpack_error:
+	free_select_job_res(&select_job_res);
+	xfree(bit_fmt);
+	*select_job_res_pptr = NULL;
+	return SLURM_ERROR;
+}
+
+extern int get_select_job_res_offset(select_job_res_t select_job_res_ptr, 
+				     uint32_t node_id, uint16_t socket_id, 
+				     uint16_t core_id)
+{
+	int i, bit_inx = 0;
+
+	xassert(select_job_res_ptr);
+
+	for (i=0; i<select_job_res_ptr->nhosts; i++) {
+		if (select_job_res_ptr->sock_core_rep_count[i] <= node_id) {
+			bit_inx += select_job_res_ptr->sockets_per_node[i] *
+				   select_job_res_ptr->cores_per_socket[i] *
+				   select_job_res_ptr->sock_core_rep_count[i];
+			node_id -= select_job_res_ptr->sock_core_rep_count[i];
+		} else if (socket_id >= select_job_res_ptr->
+					sockets_per_node[i]) {
+			error("get_select_job_res_bit: socket_id >= socket_cnt "
+			      "(%u >= %u)", socket_id, 
+			      select_job_res_ptr->sockets_per_node[i]);
+			return -1;
+		} else if (core_id >= select_job_res_ptr->cores_per_socket[i]) {
+			error("get_select_job_res_bit: core_id >= core_cnt "
+			      "(%u >= %u)", core_id, 
+			      select_job_res_ptr->cores_per_socket[i]);
+			return -1;
+		} else {
+			bit_inx += select_job_res_ptr->sockets_per_node[i] *
+				   select_job_res_ptr->cores_per_socket[i] *
+				   node_id;
+			bit_inx += select_job_res_ptr->cores_per_socket[i] *
+				   socket_id;
+			bit_inx += core_id;
+			break;
+		}
+	}
+	i = bit_size(select_job_res_ptr->core_bitmap);
+	if (bit_inx >= i) {
+		error("get_select_job_res_bit: offset >= bitmap size "
+		      "(%d >= %d)", bit_inx, i);
+		return -1;
+	}
+
+	return bit_inx;
+}
+
+extern int get_select_job_res_bit(select_job_res_t select_job_res_ptr, 
+				  uint32_t node_id, uint16_t socket_id, 
+				  uint16_t core_id)
+{
+	int bit_inx = get_select_job_res_offset(select_job_res_ptr, node_id,
+						socket_id, core_id);
+	if (bit_inx < 0)
+		return SLURM_ERROR;
+
+	return bit_test(select_job_res_ptr->core_bitmap, bit_inx);
+}
+
+extern int set_select_job_res_bit(select_job_res_t select_job_res_ptr, 
+				  uint32_t node_id, uint16_t socket_id, 
+				  uint16_t core_id)
+{
+	int bit_inx = get_select_job_res_offset(select_job_res_ptr, node_id,
+						socket_id, core_id);
+	if (bit_inx < 0)
+		return SLURM_ERROR;
+
+	bit_set(select_job_res_ptr->core_bitmap, bit_inx);
+	return SLURM_SUCCESS;
+}
+
+extern int get_select_job_res_node(select_job_res_t select_job_res_ptr, 
+				   uint32_t node_id)
+{
+	int i, bit_inx = 0, core_cnt = 0;
+
+	xassert(select_job_res_ptr);
+
+	for (i=0; i<select_job_res_ptr->nhosts; i++) {
+		if (select_job_res_ptr->sock_core_rep_count[i] <= node_id) {
+			bit_inx += select_job_res_ptr->sockets_per_node[i] *
+				   select_job_res_ptr->cores_per_socket[i] *
+				   select_job_res_ptr->sock_core_rep_count[i];
+			node_id -= select_job_res_ptr->sock_core_rep_count[i];
+		} else {
+			bit_inx += select_job_res_ptr->sockets_per_node[i] *
+				   select_job_res_ptr->cores_per_socket[i] *
+				   node_id;
+			core_cnt = select_job_res_ptr->sockets_per_node[i] *
+				   select_job_res_ptr->cores_per_socket[i];
+			break;
+		}
+	}
+	if (core_cnt < 1) {
+		error("get_select_job_res_node: core_cnt=0");
+		return 0;
+	}
+	i = bit_size(select_job_res_ptr->core_bitmap);
+	if ((bit_inx + core_cnt) > i) {
+		error("get_select_job_res_node: offset > bitmap size "
+		      "(%d >= %d)", (bit_inx + core_cnt), i);
+		return 0;
+	}
+
+	for (i=0; i<core_cnt; i++) {
+		if (bit_test(select_job_res_ptr->core_bitmap, bit_inx++))
+			return 1;
+	}
+	return 0;
+}
+
+extern int set_select_job_res_node(select_job_res_t select_job_res_ptr, 
+				   uint32_t node_id)
+{
+	int i, bit_inx = 0, core_cnt = 0;
+
+	xassert(select_job_res_ptr);
+
+	for (i=0; i<select_job_res_ptr->nhosts; i++) {
+		if (select_job_res_ptr->sock_core_rep_count[i] <= node_id) {
+			bit_inx += select_job_res_ptr->sockets_per_node[i] *
+				   select_job_res_ptr->cores_per_socket[i] *
+				   select_job_res_ptr->sock_core_rep_count[i];
+			node_id -= select_job_res_ptr->sock_core_rep_count[i];
+		} else {
+			bit_inx += select_job_res_ptr->sockets_per_node[i] *
+				   select_job_res_ptr->cores_per_socket[i] *
+				   node_id;
+			core_cnt = select_job_res_ptr->sockets_per_node[i] *
+				   select_job_res_ptr->cores_per_socket[i];
+			break;
+		}
+	}
+	if (core_cnt < 1) {
+		error("set_select_job_res_node: core_cnt=0");
+		return SLURM_ERROR;
+	}
+
+	i = bit_size(select_job_res_ptr->core_bitmap);
+	if ((bit_inx + core_cnt) > i) {
+		error("set_select_job_res_node: offset > bitmap size "
+		      "(%d >= %d)", (bit_inx + core_cnt), i);
+		return SLURM_ERROR;
+	}
+
+	for (i=0; i<core_cnt; i++)
+		bit_set(select_job_res_ptr->core_bitmap, bit_inx++);
+
+	return SLURM_SUCCESS;
+}
+
+extern int get_select_job_res_cnt(select_job_res_t select_job_res_ptr, 
+				  uint32_t node_id,
+				  uint16_t *socket_cnt, 
+				  uint16_t *cores_per_socket_cnt)
+{
+	int i, node_inx = -1;
+
+	xassert(socket_cnt);
+	xassert(cores_per_socket_cnt);
+	xassert(select_job_res_ptr->cores_per_socket);
+	xassert(select_job_res_ptr->sock_core_rep_count);
+	xassert(select_job_res_ptr->sockets_per_node);
+
+	for (i=0; i<select_job_res_ptr->nhosts; i++) {
+		node_inx += select_job_res_ptr->sock_core_rep_count[i];
+		if (node_id <= node_inx) {
+			*cores_per_socket_cnt = select_job_res_ptr->
+						cores_per_socket[i];
+			*socket_cnt = select_job_res_ptr->sockets_per_node[i];
+			return SLURM_SUCCESS;
+		}	
+	}
+
+	error("get_select_job_res_cnt: invalid node_id: %u", node_id);
+	*cores_per_socket_cnt = 0;
+	*socket_cnt = 0;
+	return SLURM_ERROR;
+}
+
+/* Return 1 if the given job can fit into the given full-length core_bitmap,
+ * else return 0.
+ */
+extern int can_select_job_cores_fit(select_job_res_t select_ptr,
+				    bitstr_t *full_bitmap,
+				    const uint16_t *bits_per_node,
+				    const uint32_t *bit_rep_count)
+{
+	uint32_t i, n, count = 1, last_bit = 0;
+	uint32_t c = 0, j = 0, k = 0;
+	
+	if (!full_bitmap)
+		return 1;
+	
+	for (i = 0, n = 0; i < select_ptr->nhosts; n++) {
+		last_bit += bits_per_node[k];
+		if (++count > bit_rep_count[k]) {
+			k++;
+			count = 1;
+		}
+		if (bit_test(select_ptr->node_bitmap, n) == 0) {
+			c = last_bit;
+			continue;
+		}
+		for (; c < last_bit; c++, j++) {
+			if (bit_test(full_bitmap, c) &&
+			    bit_test(select_ptr->core_bitmap, j))
+				return 0;
+		}
+		i++;
+	}
+	return 1;
+}
+
+/* add the given job to the given full_core_bitmap */
+extern void add_select_job_to_row(select_job_res_t select_ptr,
+				  bitstr_t **full_core_bitmap,
+				  const uint16_t *cores_per_node,
+				  const uint32_t *core_rep_count)
+{
+	uint32_t i, n, count = 1, last_bit = 0;
+	uint32_t c = 0, j = 0, k = 0;
+	
+	if (!select_ptr->core_bitmap)
+		return;
+
+	/* add the job to the row_bitmap */
+	if (*full_core_bitmap == NULL) {
+		uint32_t size = 0;
+		for (i = 0; core_rep_count[i]; i++) {
+			size += cores_per_node[i] * core_rep_count[i];
+		}
+		*full_core_bitmap = bit_alloc(size);
+		if (!*full_core_bitmap)
+			fatal("add_select_job_to_row: bitmap memory error");
+	}
+
+	for (i = 0, n = 0; i < select_ptr->nhosts; n++) {
+		last_bit += cores_per_node[k];
+		if (++count > core_rep_count[k]) {
+			k++;
+			count = 1;
+		}
+		if (bit_test(select_ptr->node_bitmap, n) == 0) {
+			c = last_bit;
+			continue;
+		}
+		for (; c < last_bit; c++, j++) {
+			if (bit_test(select_ptr->core_bitmap, j))
+				bit_set(*full_core_bitmap, c);
+		}
+		i++;
+	}
+}
diff --git a/src/common/select_job_res.h b/src/common/select_job_res.h
new file mode 100644
index 000000000..6112b6969
--- /dev/null
+++ b/src/common/select_job_res.h
@@ -0,0 +1,233 @@
+/*****************************************************************************\
+ *  select_job_res.h - functions to manage data structure identifying specific
+ *	CPUs allocated to a job, step or partition
+ *****************************************************************************
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Written by Morris Jette <jette1@llnl.gov>.
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *  
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
+\*****************************************************************************/
+
+#ifndef _SELECT_JOB_RES_H
+#define _SELECT_JOB_RES_H
+
+#if HAVE_CONFIG_H
+#  include "config.h"
+#  if HAVE_INTTYPES_H
+#    include <inttypes.h>
+#  else
+#    if HAVE_STDINT_H
+#      include <stdint.h>
+#    endif
+#  endif			/* HAVE_INTTYPES_H */
+#endif
+
+#include "src/common/bitstring.h"
+#include "src/common/pack.h"
+#include "src/slurmctld/slurmctld.h"
+
+/* struct select_job_res defines exactly which resources are allocated
+ *	to a job, step, partition, etc.
+ *
+ * core_bitmap		- Bitmap of allocated cores for all nodes and sockets
+ * core_bitmap_used	- Bitmap of cores allocated to job steps
+ * cores_per_socket	- Count of cores per socket on this node, build by 
+ *			  build_select_job_res() and insures consistent 
+ *			  interpretation of core_bitmap
+ * cpus			- Count of desired/allocated CPUs per node for job/step
+ * cpus_used		- For a job, count of CPUs per node used by job steps
+ * cpu_array_cnt	- Count of elements in cpu_array_* below
+ * cpu_array_value	- Count of allocated CPUs per node for job
+ * cpu_array_reps	- Number of consecutive nodes on which cpu_array_value
+ *			  is duplicated. See NOTES below.
+ * memory_allocated	- MB per node reserved for the job or step
+ * memory_used		- MB per node of memory consumed by job steps
+ * nhosts		- Number of nodes in the allocation
+ * node_bitmap		- Bitmap of nodes allocated to the job. Unlike the
+ *			  node_bitmap in slurmctld's job record, the bits
+ *			  here do NOT get cleared as the job completes on a
+ *			  node
+ * node_req		- NODE_CR_RESERVED|NODE_CR_ONE_ROW|NODE_CR_AVAILABLE
+ * nprocs		- Number of processors in the allocation
+ * sock_core_rep_count	- How many consecutive nodes that sockets_per_node
+ *			  and cores_per_socket apply to, build by 
+ *			  build_select_job_res() and insures consistent 
+ *			  interpretation of core_bitmap
+ * sockets_per_node	- Count of sockets on this node, build by 
+ *			  build_select_job_res() and insures consistent 
+ *			  interpretation of core_bitmap
+ *
+ * NOTES:
+ * cpu_array_* contains the same information as "cpus", but in a more compact
+ * format. For example if cpus = {4, 4, 2, 2, 2, 2, 2, 2} then cpu_array_cnt=2
+ * cpu_array_value = {4, 2} and cpu_array_reps = {2, 6}. We do not need to 
+ * save/restore these values, but generate them by calling 
+ * build_select_job_res_cpu_array()
+ *
+ * Sample layout of core_bitmap:
+ *   |               Node_0              |               Node_1              |
+ *   |      Sock_0     |      Sock_1     |      Sock_0     |      Sock_1     |
+ *   | Core_0 | Core_1 | Core_0 | Core_1 | Core_0 | Core_1 | Core_0 | Core_1 |
+ *   | Bit_0  | Bit_1  | Bit_2  | Bit_3  | Bit_4  | Bit_5  | Bit_6  | Bit_7  |
+ */
+struct select_job_res {
+	bitstr_t *	core_bitmap;
+	bitstr_t *	core_bitmap_used;
+	uint32_t	cpu_array_cnt;
+	uint16_t *	cpu_array_value;
+	uint32_t *	cpu_array_reps;
+	uint16_t *	cpus;
+	uint16_t *	cpus_used;
+	uint16_t *	cores_per_socket;
+	uint32_t *	memory_allocated;
+	uint32_t *	memory_used;
+	uint32_t	nhosts;
+	bitstr_t *	node_bitmap;
+	uint8_t		node_req;
+	uint32_t	nprocs;
+	uint32_t *	sock_core_rep_count;
+	uint16_t *	sockets_per_node;
+};
+
+/* Create an empty select_job_res data structure, just a call to xmalloc() */
+extern select_job_res_t create_select_job_res(void);
+
+/* Set the socket and core counts associated with a set of selected
+ * nodes of a select_job_res data structure based upon slurmctld state.
+ * (sets cores_per_socket, sockets_per_node, and sock_core_rep_count based
+ * upon the value of node_bitmap, also creates core_bitmap based upon
+ * the total number of cores in the allocation). Call this ONLY from 
+ * slurmctld. Example of use:
+ *
+ * select_job_res_t select_job_res_ptr = create_select_job_res();
+ * node_name2bitmap("dummy[2,5,12,16]", true, &(select_res_ptr->node_bitmap));
+ * rc = build_select_job_res(select_job_res_ptr, node_record_table_ptr,
+ *			     slurmctld_conf.fast_schedule);
+ */
+extern int build_select_job_res(select_job_res_t select_job_res_ptr,
+				void *node_rec_table,
+				uint16_t fast_schedule);
+
+/* Rebuild cpu_array_cnt, cpu_array_value, and cpu_array_reps based upon the
+ * values of cpus in an existing data structure
+ * Return total CPU count or -1 on error */
+extern int build_select_job_res_cpu_array(select_job_res_t select_job_res_ptr);
+
+/* Rebuild cpus array based upon the values of nhosts, cpu_array_value and
+ * cpu_array_reps in an existing data structure
+ * Return total CPU count or -1 on error */
+extern int build_select_job_res_cpus_array(select_job_res_t select_job_res_ptr);
+
+/* Validate a select_job_res data structure originally built using
+ * build_select_job_res() is still valid based upon slurmctld state.
+ * NOTE: Reset the node_bitmap field before calling this function.
+ * If the sockets_per_node or cores_per_socket for any node in the allocation 
+ * changes, then return SLURM_ERROR. Otherwise return SLURM_SUCCESS. Any 
+ * change in a node's socket or core count require that any job running on
+ * that node be killed. Example of use:
+ *
+ * rc = valid_select_job_res(select_job_res_ptr, node_record_table_ptr,
+ *			     slurmctld_conf.fast_schedule);
+ */
+extern int valid_select_job_res(select_job_res_t select_job_res_ptr,
+				void *node_rec_table,
+				uint16_t fast_schedule);
+
+/* Make a copy of a select_job_res data structure, 
+ * free using free_select_job_res() */
+extern select_job_res_t copy_select_job_res(select_job_res_t 
+					    select_job_res_ptr);
+
+/* Free select_job_res data structure created using copy_select_job_res() or
+ *	unpack_select_job_res() */
+extern void free_select_job_res(select_job_res_t *select_job_res_pptr);
+
+/* Log the contents of a select_job_res data structure using info() */
+extern void log_select_job_res(uint32_t job_id, 
+			       select_job_res_t select_job_res_ptr);
+
+/* Un/pack full select_job_res data structure */
+extern void pack_select_job_res(select_job_res_t select_job_res_ptr, 
+				Buf buffer);
+extern int unpack_select_job_res(select_job_res_t *select_job_res_pptr, 
+				 Buf buffer);
+
+/* Reset the node_bitmap in a select_job_res data structure
+ * This is needed after a restart/reconfiguration since nodes can 
+ * be added or removed from the system resulting in changing in 
+ * the bitmap size or bit positions */
+extern void reset_node_bitmap(select_job_res_t select_job_res_ptr,
+			      bitstr_t *new_node_bitmap);
+
+/* For a given node_id, socket_id and core_id, get it's offset within
+ * the core bitmap */
+extern int get_select_job_res_offset(select_job_res_t select_job_res_ptr, 
+				     uint32_t node_id, uint16_t socket_id, 
+				     uint16_t core_id);
+
+/* Get/set bit value at specified location.
+ *	node_id, socket_id and core_id are all zero origin */
+extern int get_select_job_res_bit(select_job_res_t select_job_res_ptr, 
+				  uint32_t node_id,
+				  uint16_t socket_id, uint16_t core_id);
+extern int set_select_job_res_bit(select_job_res_t select_job_res_ptr, 
+				  uint32_t node_id,
+				  uint16_t socket_id, uint16_t core_id);
+
+/* Get/set bit value at specified location for whole node allocations
+ *	get is for any socket/core on the specified node
+ *	set is for all sockets/cores on the specified node
+ *	fully comptabable with set/get_select_job_res_bit()
+ *	node_id is all zero origin */
+extern int get_select_job_res_node(select_job_res_t select_job_res_ptr, 
+				   uint32_t node_id);
+extern int set_select_job_res_node(select_job_res_t select_job_res_ptr, 
+				   uint32_t node_id);
+
+/* Get socket and core count for a specific node_id (zero origin) */
+extern int get_select_job_res_cnt(select_job_res_t select_job_res_ptr, 
+				  uint32_t node_id,
+				  uint16_t *socket_cnt,
+ 				  uint16_t *cores_per_socket_cnt);
+
+/* check if given job can fit into the given full-length core_bitmap */
+extern int can_select_job_cores_fit(select_job_res_t select_ptr,
+				    bitstr_t *full_bitmap,
+				    const uint16_t *bits_per_node,
+				    const uint32_t *bit_rep_count);
+
+/* add the given job to the given full_core_bitmap */
+extern void add_select_job_to_row(select_job_res_t select_ptr,
+				  bitstr_t **full_core_bitmap,
+				  const uint16_t *cores_per_node,
+				  const uint32_t *core_rep_count);
+
+#endif /* !_SELECT_JOB_RES_H */
diff --git a/src/common/slurm_accounting_storage.c b/src/common/slurm_accounting_storage.c
index 98a50322b..07f1fce00 100644
--- a/src/common/slurm_accounting_storage.c
+++ b/src/common/slurm_accounting_storage.c
@@ -4,13 +4,14 @@
  *  $Id: slurm_accounting_storage.c 10744 2007-01-11 20:09:18Z da $
  *****************************************************************************
  *  Copyright (C) 2002-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 Danny Aubke <da@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -42,7 +43,12 @@
 #  include "config.h"
 #endif
 
+#ifndef   _GNU_SOURCE
+#  define _GNU_SOURCE
+#endif
+
 #include <pthread.h>
+#include <string.h>
 
 #include "src/common/list.h"
 #include "src/common/slurm_accounting_storage.h"
@@ -52,6 +58,7 @@
 #include "src/common/xstring.h"
 #include "src/slurmctld/slurmctld.h"
 #include "src/sacctmgr/sacctmgr.h"
+#include "src/common/slurm_strcasestr.h"
 
 /*
  * Local data
@@ -77,6 +84,8 @@ typedef struct slurm_acct_storage_ops {
 				    List qos_list);
 	int  (*add_wckeys)         (void *db_conn, uint32_t uid,
 				    List wckey_list);
+	int  (*add_reservation)    (void *db_conn,
+				    acct_reservation_rec_t *resv);
 	List (*modify_users)       (void *db_conn, uint32_t uid,
 				    acct_user_cond_t *user_cond,
 				    acct_user_rec_t *user);
@@ -95,6 +104,8 @@ typedef struct slurm_acct_storage_ops {
 	List (*modify_wckeys)      (void *db_conn, uint32_t uid,
 				    acct_wckey_cond_t *wckey_cond,
 				    acct_wckey_rec_t *wckey);
+	int  (*modify_reservation) (void *db_conn,
+				    acct_reservation_rec_t *resv);
 	List (*remove_users)       (void *db_conn, uint32_t uid,
 				    acct_user_cond_t *user_cond);
 	List (*remove_coord)       (void *db_conn, uint32_t uid,
@@ -110,18 +121,23 @@ typedef struct slurm_acct_storage_ops {
 				    acct_qos_cond_t *qos_cond);
 	List (*remove_wckeys)      (void *db_conn, uint32_t uid,
 				    acct_wckey_cond_t *wckey_cond);
+	int  (*remove_reservation) (void *db_conn,
+				    acct_reservation_rec_t *resv);
 	List (*get_users)          (void *db_conn, uint32_t uid,
 				    acct_user_cond_t *user_cond);
 	List (*get_accts)          (void *db_conn, uint32_t uid,
 				    acct_account_cond_t *acct_cond);
 	List (*get_clusters)       (void *db_conn, uint32_t uid,
 				    acct_cluster_cond_t *cluster_cond);
+	List (*get_config)         (void *db_conn);
 	List (*get_associations)   (void *db_conn, uint32_t uid,
 				    acct_association_cond_t *assoc_cond);
 	List (*get_qos)            (void *db_conn, uint32_t uid,
 				    acct_qos_cond_t *qos_cond);
 	List (*get_wckeys)         (void *db_conn, uint32_t uid,
 				    acct_wckey_cond_t *wckey_cond);
+	List (*get_resvs)          (void *db_conn, uint32_t uid,
+				    acct_reservation_cond_t *resv_cond);
 	List (*get_txn)            (void *db_conn, uint32_t uid,
 				    acct_txn_cond_t *txn_cond);
 	int  (*get_usage)          (void *db_conn, uint32_t uid,
@@ -129,7 +145,8 @@ typedef struct slurm_acct_storage_ops {
 				    time_t start, 
 				    time_t end);
 	int (*roll_usage)          (void *db_conn, 
-				    time_t sent_start);
+				    time_t sent_start, time_t sent_end,
+				    uint16_t archive_data);
 	int  (*node_down)          (void *db_conn,
 				    char *cluster,
 				    struct node_record *node_ptr,
@@ -140,7 +157,7 @@ typedef struct slurm_acct_storage_ops {
 				    struct node_record *node_ptr,
 				    time_t event_time);
 	int  (*cluster_procs)      (void *db_conn,
-				    char *cluster,
+				    char *cluster, char *cluster_nodes,
 				    uint32_t procs, time_t event_time);
 	int  (*c_get_usage)        (void *db_conn, uint32_t uid,
 				    void *cluster_rec, int type,
@@ -212,12 +229,14 @@ static slurm_acct_storage_ops_t * _acct_storage_get_ops(
 		"acct_storage_p_add_associations",
 		"acct_storage_p_add_qos",
 		"acct_storage_p_add_wckeys",
+		"acct_storage_p_add_reservation",
 		"acct_storage_p_modify_users",
 		"acct_storage_p_modify_accounts",
 		"acct_storage_p_modify_clusters",
 		"acct_storage_p_modify_associations",
 		"acct_storage_p_modify_qos",
 		"acct_storage_p_modify_wckeys",
+		"acct_storage_p_modify_reservation",
 		"acct_storage_p_remove_users",
 		"acct_storage_p_remove_coord",
 		"acct_storage_p_remove_accts",
@@ -225,12 +244,15 @@ static slurm_acct_storage_ops_t * _acct_storage_get_ops(
 		"acct_storage_p_remove_associations",
 		"acct_storage_p_remove_qos",
 		"acct_storage_p_remove_wckeys",
+		"acct_storage_p_remove_reservation",
 		"acct_storage_p_get_users",
 		"acct_storage_p_get_accts",
 		"acct_storage_p_get_clusters",
+		"acct_storage_p_get_config",
 		"acct_storage_p_get_associations",
 		"acct_storage_p_get_qos",
 		"acct_storage_p_get_wckeys",
+		"acct_storage_p_get_reservations",
 		"acct_storage_p_get_txn",
 		"acct_storage_p_get_usage",
 		"acct_storage_p_roll_usage",
@@ -495,8 +517,7 @@ extern void destroy_acct_cluster_rec(void *object)
 			list_destroy(acct_cluster->accounting_list);
 		xfree(acct_cluster->control_host);
 		xfree(acct_cluster->name);
-		if(acct_cluster->valid_qos_list)
-			list_destroy(acct_cluster->valid_qos_list);
+		xfree(acct_cluster->nodes);
 		destroy_acct_association_rec(acct_cluster->root_assoc);
 		xfree(acct_cluster);
 	}
@@ -521,6 +542,8 @@ extern void destroy_acct_association_rec(void *object)
 		if(acct_association->accounting_list)
 			list_destroy(acct_association->accounting_list);
 		xfree(acct_association->acct);
+		if(acct_association->childern_list)
+			list_destroy(acct_association->childern_list);
 		xfree(acct_association->cluster);
 		xfree(acct_association->parent_acct);
 		xfree(acct_association->partition);
@@ -550,6 +573,19 @@ extern void destroy_acct_qos_rec(void *object)
 	}
 }
 
+extern void destroy_acct_reservation_rec(void *object)
+{
+	acct_reservation_rec_t *acct_resv = (acct_reservation_rec_t *)object;
+	if(acct_resv) {
+		xfree(acct_resv->assocs);
+		xfree(acct_resv->cluster);
+		xfree(acct_resv->name);
+		xfree(acct_resv->nodes);
+		xfree(acct_resv->node_inx);
+		xfree(acct_resv);
+	}
+}
+
 extern void destroy_acct_txn_rec(void *object)
 {
 	acct_txn_rec_t *acct_txn = (acct_txn_rec_t *)object;
@@ -703,10 +739,15 @@ extern void destroy_acct_job_cond(void *object)
 			list_destroy(job_cond->groupid_list);
 		if(job_cond->partition_list)
 			list_destroy(job_cond->partition_list);
+		if(job_cond->resv_list)
+			list_destroy(job_cond->resv_list);
+		if(job_cond->resvid_list)
+			list_destroy(job_cond->resvid_list);
 		if(job_cond->step_list)
 			list_destroy(job_cond->step_list);
 		if(job_cond->state_list)
 			list_destroy(job_cond->state_list);
+		xfree(job_cond->used_nodes);
 		if(job_cond->userid_list)
 			list_destroy(job_cond->userid_list);
 		if(job_cond->wckey_list)
@@ -727,6 +768,21 @@ extern void destroy_acct_qos_cond(void *object)
 	}
 }
 
+extern void destroy_acct_reservation_cond(void *object)
+{
+	acct_reservation_cond_t *acct_resv = (acct_reservation_cond_t *)object;
+	if(acct_resv) {
+		if(acct_resv->cluster_list) 
+			list_destroy(acct_resv->cluster_list);
+		if(acct_resv->id_list)
+			list_destroy(acct_resv->id_list);
+		if(acct_resv->name_list)
+			list_destroy(acct_resv->name_list);
+		xfree(acct_resv->nodes);
+		xfree(acct_resv);
+	}
+}
+
 extern void destroy_acct_txn_cond(void *object)
 {
 	acct_txn_cond_t *acct_txn = (acct_txn_cond_t *)object;
@@ -842,8 +898,6 @@ extern void init_acct_association_rec(acct_association_rec_t *assoc)
 
 	memset(assoc, 0, sizeof(acct_association_rec_t));
 
-	assoc->fairshare = NO_VAL;
-
 	assoc->grp_cpu_mins = NO_VAL;
 	assoc->grp_cpus = NO_VAL;
 	assoc->grp_jobs = NO_VAL;
@@ -851,12 +905,21 @@ extern void init_acct_association_rec(acct_association_rec_t *assoc)
 	assoc->grp_submit_jobs = NO_VAL;
 	assoc->grp_wall = NO_VAL;
 
+	assoc->level_shares = NO_VAL;
+
 	assoc->max_cpu_mins_pj = NO_VAL;
 	assoc->max_cpus_pj = NO_VAL;
 	assoc->max_jobs = NO_VAL;
 	assoc->max_nodes_pj = NO_VAL;
 	assoc->max_submit_jobs = NO_VAL;
 	assoc->max_wall_pj = NO_VAL;
+
+	assoc->shares_norm = (double)NO_VAL;
+	assoc->shares_raw = NO_VAL;
+
+	assoc->usage_efctv = 0;
+	assoc->usage_norm = (long double)NO_VAL;
+	assoc->usage_raw = 0;
 }
 
 extern void init_acct_qos_rec(acct_qos_rec_t *qos)
@@ -881,6 +944,8 @@ extern void init_acct_qos_rec(acct_qos_rec_t *qos)
 	qos->max_nodes_pu = NO_VAL;
 	qos->max_submit_jobs_pu = NO_VAL;
 	qos->max_wall_pu = NO_VAL;
+
+	qos->usage_factor = NO_VAL;
 }
 
 /****************************************************************************\
@@ -1230,38 +1295,6 @@ unpack_error:
 	return SLURM_ERROR;
 }
 
-
-extern void pack_update_shares_used(void *in, uint16_t rpc_version, Buf buffer)
-{
-	shares_used_object_t *object = (shares_used_object_t *)in;
-
-	if(!object) {
-		pack32(0, buffer);
-		pack32(0, buffer);
-		return;
-	}
-
-	pack32(object->assoc_id, buffer);
-	pack32(object->shares_used, buffer);
-}
-
-extern int unpack_update_shares_used(void **object, uint16_t rpc_version,
-				     Buf buffer)
-{
-	shares_used_object_t *object_ptr =
-		xmalloc(sizeof(shares_used_object_t));
-
-	*object = (void *) object_ptr;
-	safe_unpack32(&object_ptr->assoc_id, buffer);
-	safe_unpack32(&object_ptr->shares_used, buffer);
-
-	return SLURM_SUCCESS;
-
-unpack_error:
-	destroy_update_shares_rec(object_ptr);
-	*object = NULL;
-	return SLURM_ERROR;
-}
 extern void pack_acct_account_rec(void *in, uint16_t rpc_version, Buf buffer)
 {
 	acct_coord_rec_t *coord = NULL;
@@ -1485,24 +1518,47 @@ extern void pack_cluster_accounting_rec(void *in, uint16_t rpc_version,
 {
 	cluster_accounting_rec_t *object = (cluster_accounting_rec_t *)in;
 	
-	if(!object) {
-		pack64(0, buffer);
-		pack32(0, buffer);
-		pack64(0, buffer);
-		pack64(0, buffer);
-		pack64(0, buffer);
-		pack_time(0, buffer);
-		pack64(0, buffer);
-		return;
+	if(rpc_version >= 5) {
+		if(!object) {
+			pack64(0, buffer);
+			pack32(0, buffer);
+			pack64(0, buffer);
+			pack64(0, buffer);
+			pack64(0, buffer);
+			pack64(0, buffer);
+			pack_time(0, buffer);
+			pack64(0, buffer);
+			return;
+		}
+		
+		pack64(object->alloc_secs, buffer);
+		pack32(object->cpu_count, buffer);
+		pack64(object->down_secs, buffer);
+		pack64(object->idle_secs, buffer);
+		pack64(object->over_secs, buffer);
+		pack64(object->pdown_secs, buffer);
+		pack_time(object->period_start, buffer);
+		pack64(object->resv_secs, buffer);
+	} else {
+		if(!object) {
+			pack64(0, buffer);
+			pack32(0, buffer);
+			pack64(0, buffer);
+			pack64(0, buffer);
+			pack64(0, buffer);
+			pack_time(0, buffer);
+			pack64(0, buffer);
+			return;
+		}
+		
+		pack64(object->alloc_secs, buffer);
+		pack32(object->cpu_count, buffer);
+		pack64(object->down_secs, buffer);
+		pack64(object->idle_secs, buffer);
+		pack64(object->over_secs, buffer);
+		pack_time(object->period_start, buffer);
+		pack64(object->resv_secs, buffer);
 	}
-
- 	pack64(object->alloc_secs, buffer);
-	pack32(object->cpu_count, buffer);
-	pack64(object->down_secs, buffer);
-	pack64(object->idle_secs, buffer);
-	pack64(object->over_secs, buffer);
-	pack_time(object->period_start, buffer);
-	pack64(object->resv_secs, buffer);
 }
 
 extern int unpack_cluster_accounting_rec(void **object, uint16_t rpc_version,
@@ -1512,13 +1568,25 @@ extern int unpack_cluster_accounting_rec(void **object, uint16_t rpc_version,
 		xmalloc(sizeof(cluster_accounting_rec_t));
 	
 	*object = object_ptr;
-	safe_unpack64(&object_ptr->alloc_secs, buffer);
-	safe_unpack32(&object_ptr->cpu_count, buffer);
-	safe_unpack64(&object_ptr->down_secs, buffer);
-	safe_unpack64(&object_ptr->idle_secs, buffer);
-	safe_unpack64(&object_ptr->over_secs, buffer);
-	safe_unpack_time(&object_ptr->period_start, buffer);
-	safe_unpack64(&object_ptr->resv_secs, buffer);
+
+	if(rpc_version >= 5) {
+		safe_unpack64(&object_ptr->alloc_secs, buffer);
+		safe_unpack32(&object_ptr->cpu_count, buffer);
+		safe_unpack64(&object_ptr->down_secs, buffer);
+		safe_unpack64(&object_ptr->idle_secs, buffer);
+		safe_unpack64(&object_ptr->over_secs, buffer);
+		safe_unpack64(&object_ptr->pdown_secs, buffer);
+		safe_unpack_time(&object_ptr->period_start, buffer);
+		safe_unpack64(&object_ptr->resv_secs, buffer);
+	} else {
+		safe_unpack64(&object_ptr->alloc_secs, buffer);
+		safe_unpack32(&object_ptr->cpu_count, buffer);
+		safe_unpack64(&object_ptr->down_secs, buffer);
+		safe_unpack64(&object_ptr->idle_secs, buffer);
+		safe_unpack64(&object_ptr->over_secs, buffer);
+		safe_unpack_time(&object_ptr->period_start, buffer);
+		safe_unpack64(&object_ptr->resv_secs, buffer);
+	}
 	
 	return SLURM_SUCCESS;
 
@@ -1532,19 +1600,20 @@ extern void pack_acct_cluster_rec(void *in, uint16_t rpc_version, Buf buffer)
 {
 	cluster_accounting_rec_t *acct_info = NULL;
 	ListIterator itr = NULL;
-	char *tmp_info = NULL;
 	uint32_t count = NO_VAL;
 	acct_cluster_rec_t *object = (acct_cluster_rec_t *)in;
 
-	if(rpc_version >= 3) {
+	if(rpc_version >= 5) {
 		if(!object) {
 			pack32(NO_VAL, buffer);
+			pack16(0, buffer);
 			packnull(buffer);
 			pack32(0, buffer);
+			pack32(0, buffer);
 
+			packnull(buffer);
 			packnull(buffer);
 
-			pack32(NO_VAL, buffer);
 			pack_acct_association_rec(NULL, rpc_version, buffer);
 
 			pack16(0, buffer);
@@ -1566,25 +1635,55 @@ extern void pack_acct_cluster_rec(void *in, uint16_t rpc_version, Buf buffer)
 		}
 		count = NO_VAL;
 
+		pack16(object->classification, buffer);
 		packstr(object->control_host, buffer);
 		pack32(object->control_port, buffer);
+		pack32(object->cpu_count, buffer);
 
 		packstr(object->name, buffer);
+		packstr(object->nodes, buffer);
+
+		pack_acct_association_rec(object->root_assoc,
+					  rpc_version, buffer);
+
+		pack16(object->rpc_version, buffer);
+	} else if(rpc_version >= 3) {
+		if(!object) {
+			pack32(NO_VAL, buffer);
+			packnull(buffer);
+			pack32(0, buffer);
+
+			packnull(buffer);
+
+			pack32(NO_VAL, buffer);
+			pack_acct_association_rec(NULL, rpc_version, buffer);
 
-		if(object->valid_qos_list)
-			count = list_count(object->valid_qos_list);
+			pack16(0, buffer);
+			return;
+		}
+ 
+		if(object->accounting_list)
+			count = list_count(object->accounting_list);
 
 		pack32(count, buffer);
 
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->valid_qos_list);
-			while((tmp_info = list_next(itr))) {
-				packstr(tmp_info, buffer);
+			itr = list_iterator_create(object->accounting_list);
+			while((acct_info = list_next(itr))) {
+				pack_cluster_accounting_rec(
+					acct_info, rpc_version, buffer);
 			}
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
+		packstr(object->control_host, buffer);
+		pack32(object->control_port, buffer);
+
+		packstr(object->name, buffer);
+
+		pack32(count, buffer); /* for defunt valid_qos_list */
+
 		pack_acct_association_rec(object->root_assoc,
 					  rpc_version, buffer);
 
@@ -1630,7 +1729,7 @@ extern void pack_acct_cluster_rec(void *in, uint16_t rpc_version, Buf buffer)
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 		} else {
-			pack32(object->root_assoc->fairshare, buffer);
+			pack32(object->root_assoc->shares_raw, buffer);
 			pack32(object->root_assoc->max_cpu_mins_pj, buffer);
 			pack32(object->root_assoc->max_jobs, buffer);
 			pack32(object->root_assoc->max_nodes_pj, buffer);
@@ -1646,14 +1745,13 @@ extern int unpack_acct_cluster_rec(void **object, uint16_t rpc_version,
 {
 	uint32_t uint32_tmp;
 	int i;
-	char *tmp_info = NULL;
 	uint32_t count;
 	acct_cluster_rec_t *object_ptr = xmalloc(sizeof(acct_cluster_rec_t));
 	cluster_accounting_rec_t *acct_info = NULL;
 
 	*object = object_ptr;
 
-	if(rpc_version >= 3) {
+	if(rpc_version >= 5) {
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
 			object_ptr->accounting_list =
@@ -1667,24 +1765,44 @@ extern int unpack_acct_cluster_rec(void **object, uint16_t rpc_version,
 			}
 		}
 
+		safe_unpack16(&object_ptr->classification, buffer);
 		safe_unpackstr_xmalloc(&object_ptr->control_host,
 				       &uint32_tmp, buffer);
 		safe_unpack32(&object_ptr->control_port, buffer);
+		safe_unpack32(&object_ptr->cpu_count, buffer);
 
 		safe_unpackstr_xmalloc(&object_ptr->name, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&object_ptr->nodes, &uint32_tmp, buffer);
+
+		if(unpack_acct_association_rec(
+			   (void **)&object_ptr->root_assoc, 
+			   rpc_version, buffer)
+		   == SLURM_ERROR)
+			goto unpack_error;
 
+		safe_unpack16(&object_ptr->rpc_version, buffer);
+	} else if(rpc_version >= 3) {
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->valid_qos_list = 
-				list_create(slurm_destroy_char);
+			object_ptr->accounting_list =
+				list_create(destroy_cluster_accounting_rec);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
-				list_append(object_ptr->valid_qos_list,
-					    tmp_info);
+				unpack_cluster_accounting_rec(
+					(void *)&acct_info,
+					rpc_version, buffer);
+				list_append(object_ptr->accounting_list,
+					    acct_info);
 			}
 		}
 
+		safe_unpackstr_xmalloc(&object_ptr->control_host,
+				       &uint32_tmp, buffer);
+		safe_unpack32(&object_ptr->control_port, buffer);
+
+		safe_unpackstr_xmalloc(&object_ptr->name, &uint32_tmp, buffer);
+
+		safe_unpack32(&count, buffer); /* for defunt valid_qos_list */
+
 		if(unpack_acct_association_rec(
 			   (void **)&object_ptr->root_assoc, 
 			   rpc_version, buffer)
@@ -1711,7 +1829,7 @@ extern int unpack_acct_cluster_rec(void **object, uint16_t rpc_version,
 		object_ptr->root_assoc = 
 			xmalloc(sizeof(acct_association_rec_t));
 		init_acct_association_rec(object_ptr->root_assoc);
-		safe_unpack32(&object_ptr->root_assoc->fairshare, buffer);
+		safe_unpack32(&object_ptr->root_assoc->shares_raw, buffer);
 		safe_unpack32((uint32_t *)&object_ptr->root_assoc->
 			      max_cpu_mins_pj, buffer);
 		safe_unpack32(&object_ptr->root_assoc->max_jobs, buffer);
@@ -1742,10 +1860,10 @@ extern void pack_acct_accounting_rec(void *in, uint16_t rpc_version, Buf buffer)
 		pack_time(0, buffer);
 		return;
 	}
-
+	
 	pack64(object->alloc_secs, buffer);
 	pack32(object->id, buffer);
-	pack_time(object->period_start, buffer);
+	pack_time(object->period_start, buffer);		
 }
 
 extern int unpack_acct_accounting_rec(void **object, uint16_t rpc_version,
@@ -1755,10 +1873,11 @@ extern int unpack_acct_accounting_rec(void **object, uint16_t rpc_version,
 		xmalloc(sizeof(acct_accounting_rec_t));
 	
 	*object = object_ptr;
+	
 	safe_unpack64(&object_ptr->alloc_secs, buffer);
 	safe_unpack32(&object_ptr->id, buffer);
-	safe_unpack_time(&object_ptr->period_start, buffer);
-
+	safe_unpack_time(&object_ptr->period_start, buffer);	
+		
 	return SLURM_SUCCESS;
 
 unpack_error:
@@ -1832,7 +1951,10 @@ extern void pack_acct_association_rec(void *in, uint16_t rpc_version,
 		packstr(object->acct, buffer);
 		packstr(object->cluster, buffer);
 
-		pack32(object->fairshare, buffer);
+		/* this used to be named fairshare to not have to redo
+		   the order of things just to be in alpha order we
+		   just renamed it and called it good */
+		pack32(object->shares_raw, buffer);
 
 		pack64(object->grp_cpu_mins, buffer);
 		pack32(object->grp_cpus, buffer);
@@ -1873,7 +1995,7 @@ extern void pack_acct_association_rec(void *in, uint16_t rpc_version,
 		pack32(object->uid, buffer);
 
 		packstr(object->user, buffer);	
-	} else if (rpc_version >= 3) {
+	} else if (rpc_version == 3) {
 		if(!object) {
 			pack32(NO_VAL, buffer);
 			packnull(buffer);
@@ -1931,7 +2053,7 @@ extern void pack_acct_association_rec(void *in, uint16_t rpc_version,
 		packstr(object->acct, buffer);
 		packstr(object->cluster, buffer);
 
-		pack32(object->fairshare, buffer);
+		pack32(object->shares_raw, buffer);
 
 		pack64(object->grp_cpu_mins, buffer);
 		pack32(object->grp_cpus, buffer);
@@ -1971,7 +2093,8 @@ extern void pack_acct_association_rec(void *in, uint16_t rpc_version,
 		pack32(object->rgt, buffer);
 		pack32(object->uid, buffer);
 
-		pack32(object->used_shares, buffer);
+		/* used shares which is taken out in 4 */
+		pack32(0, buffer);
 
 		packstr(object->user, buffer);	
 	} else {
@@ -2019,7 +2142,7 @@ extern void pack_acct_association_rec(void *in, uint16_t rpc_version,
 
 		packstr(object->acct, buffer);
 		packstr(object->cluster, buffer);
-		pack32(object->fairshare, buffer);
+		pack32(object->shares_raw, buffer);
 		pack32(object->id, buffer);
 		pack32(object->lft, buffer);
 		pack32(object->max_cpu_mins_pj, buffer);
@@ -2031,7 +2154,9 @@ extern void pack_acct_association_rec(void *in, uint16_t rpc_version,
 		packstr(object->partition, buffer);
 		pack32(object->rgt, buffer);
 		pack32(object->uid, buffer);
-		pack32(object->used_shares, buffer);
+		/* used shares which is taken out in 4 */
+		pack32(0, buffer);
+
 		packstr(object->user, buffer);	
 	} 
 }
@@ -2071,7 +2196,7 @@ extern int unpack_acct_association_rec(void **object, uint16_t rpc_version,
 		safe_unpackstr_xmalloc(&object_ptr->cluster, &uint32_tmp,
 				       buffer);
 
-		safe_unpack32(&object_ptr->fairshare, buffer);
+		safe_unpack32(&object_ptr->shares_raw, buffer);
 
 		safe_unpack64(&object_ptr->grp_cpu_mins, buffer);
 		safe_unpack32(&object_ptr->grp_cpus, buffer);
@@ -2132,7 +2257,7 @@ extern int unpack_acct_association_rec(void **object, uint16_t rpc_version,
 		safe_unpackstr_xmalloc(&object_ptr->cluster, &uint32_tmp,
 				       buffer);
 
-		safe_unpack32(&object_ptr->fairshare, buffer);
+		safe_unpack32(&object_ptr->shares_raw, buffer);
 
 		safe_unpack64(&object_ptr->grp_cpu_mins, buffer);
 		safe_unpack32(&object_ptr->grp_cpus, buffer);
@@ -2172,7 +2297,8 @@ extern int unpack_acct_association_rec(void **object, uint16_t rpc_version,
 		safe_unpack32(&object_ptr->rgt, buffer);
 		safe_unpack32(&object_ptr->uid, buffer);
 
-		safe_unpack32(&object_ptr->used_shares, buffer);
+		/* used shares which is taken out in 4 */
+		safe_unpack32(&uint32_tmp, buffer);
 
 		safe_unpackstr_xmalloc(&object_ptr->user, &uint32_tmp, buffer);
 	} else {
@@ -2194,7 +2320,7 @@ extern int unpack_acct_association_rec(void **object, uint16_t rpc_version,
 		safe_unpackstr_xmalloc(&object_ptr->cluster, &uint32_tmp,
 				       buffer);
 
-		safe_unpack32(&object_ptr->fairshare, buffer);
+		safe_unpack32(&object_ptr->shares_raw, buffer);
 		safe_unpack32(&object_ptr->id, buffer);
 		safe_unpack32(&object_ptr->lft, buffer);
 
@@ -2213,7 +2339,8 @@ extern int unpack_acct_association_rec(void **object, uint16_t rpc_version,
 		safe_unpack32(&object_ptr->rgt, buffer);
 		safe_unpack32(&object_ptr->uid, buffer);
 
-		safe_unpack32(&object_ptr->used_shares, buffer);
+		/* used shares which is taken out in 4 */
+		safe_unpack32(&uint32_tmp, buffer);
 
 		safe_unpackstr_xmalloc(&object_ptr->user, &uint32_tmp, buffer);
 	} 
@@ -2233,7 +2360,105 @@ extern void pack_acct_qos_rec(void *in, uint16_t rpc_version, Buf buffer)
 	uint32_t count = NO_VAL;
 	char *tmp_info = NULL;
 
-	if(rpc_version >= 3) {
+	if(rpc_version >= 5) {
+		if(!object) {
+			packnull(buffer);
+			pack32(0, buffer);
+			packnull(buffer);
+
+			pack64(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+
+			pack64(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+
+			packnull(buffer);
+
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+
+			pack32(0, buffer);
+
+			packdouble(NO_VAL, buffer);
+
+			pack32(NO_VAL, buffer);
+			return;
+		}
+		packstr(object->description, buffer);	
+		pack32(object->id, buffer);
+
+		pack64(object->grp_cpu_mins, buffer);
+		pack32(object->grp_cpus, buffer);
+		pack32(object->grp_jobs, buffer);
+		pack32(object->grp_nodes, buffer);
+		pack32(object->grp_submit_jobs, buffer);
+		pack32(object->grp_wall, buffer);
+
+		pack64(object->max_cpu_mins_pu, buffer);
+		pack32(object->max_cpus_pu, buffer);
+		pack32(object->max_jobs_pu, buffer);
+		pack32(object->max_nodes_pu, buffer);
+		pack32(object->max_submit_jobs_pu, buffer);
+		pack32(object->max_wall_pu, buffer);
+
+		packstr(object->name, buffer);	
+
+		if(object->preemptee_list)
+			count = list_count(object->preemptee_list);
+
+		pack32(count, buffer);
+
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->preemptee_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+		
+		if(object->preemptor_list)
+			count = list_count(object->preemptor_list);
+
+		pack32(count, buffer);
+
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->preemptor_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+		
+		pack32(object->priority, buffer);
+		
+		packdouble(object->usage_factor, buffer);
+
+		if(object->user_limit_list)
+			count = list_count(object->user_limit_list);
+
+		pack32(count, buffer);
+
+		if(count && count != NO_VAL) {
+			acct_used_limits_t *used_limits = NULL;
+			itr = list_iterator_create(object->user_limit_list);
+			while((used_limits = list_next(itr))) {
+				pack_acct_used_limits(used_limits,
+						      rpc_version, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+	} else if(rpc_version >= 3) {
 		if(!object) {
 			packnull(buffer);
 			pack32(0, buffer);
@@ -2352,7 +2577,7 @@ extern int unpack_acct_qos_rec(void **object, uint16_t rpc_version, Buf buffer)
 	
 	init_acct_qos_rec(object_ptr);
 
-	if(rpc_version >= 3) {
+	if(rpc_version >= 5) {
 		safe_unpackstr_xmalloc(&object_ptr->description,
 				       &uint32_tmp, buffer);
 		safe_unpack32(&object_ptr->id, buffer);
@@ -2399,6 +2624,8 @@ extern int unpack_acct_qos_rec(void **object, uint16_t rpc_version, Buf buffer)
 
 		safe_unpack32(&object_ptr->priority, buffer);
 
+		safe_unpackdouble(&object_ptr->usage_factor, buffer);
+
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
 			void *used_limits = NULL;
@@ -2413,18 +2640,147 @@ extern int unpack_acct_qos_rec(void **object, uint16_t rpc_version, Buf buffer)
 			}
 		}
 
-	} else {
+	} else if(rpc_version >= 3) {
 		safe_unpackstr_xmalloc(&object_ptr->description,
 				       &uint32_tmp, buffer);
 		safe_unpack32(&object_ptr->id, buffer);
-		safe_unpackstr_xmalloc(&object_ptr->name, &uint32_tmp, buffer);
-	}
 
-	return SLURM_SUCCESS;
+		safe_unpack64(&object_ptr->grp_cpu_mins, buffer);
+		safe_unpack32(&object_ptr->grp_cpus, buffer);
+		safe_unpack32(&object_ptr->grp_jobs, buffer);
+		safe_unpack32(&object_ptr->grp_nodes, buffer);
+		safe_unpack32(&object_ptr->grp_submit_jobs, buffer);
+		safe_unpack32(&object_ptr->grp_wall, buffer);
 
-unpack_error:
-	destroy_acct_qos_rec(object_ptr);
-	*object = NULL;
+		safe_unpack64(&object_ptr->max_cpu_mins_pu, buffer);
+		safe_unpack32(&object_ptr->max_cpus_pu, buffer);
+		safe_unpack32(&object_ptr->max_jobs_pu, buffer);
+		safe_unpack32(&object_ptr->max_nodes_pu, buffer);
+		safe_unpack32(&object_ptr->max_submit_jobs_pu, buffer);
+		safe_unpack32(&object_ptr->max_wall_pu, buffer);
+
+		safe_unpackstr_xmalloc(&object_ptr->name, &uint32_tmp, buffer);
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->preemptee_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->preemptee_list,
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->preemptor_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->preemptor_list,
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&object_ptr->priority, buffer);
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			void *used_limits = NULL;
+
+			object_ptr->user_limit_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				unpack_acct_used_limits(&used_limits,
+							rpc_version, buffer);
+				list_append(object_ptr->user_limit_list,
+					    used_limits);
+			}
+		}
+
+	} else {
+		safe_unpackstr_xmalloc(&object_ptr->description,
+				       &uint32_tmp, buffer);
+		safe_unpack32(&object_ptr->id, buffer);
+		safe_unpackstr_xmalloc(&object_ptr->name, &uint32_tmp, buffer);
+	}
+
+	return SLURM_SUCCESS;
+
+unpack_error:
+	destroy_acct_qos_rec(object_ptr);
+	*object = NULL;
+	return SLURM_ERROR;
+}
+
+extern void pack_acct_reservation_rec(void *in, uint16_t rpc_version,
+				      Buf buffer)
+{
+	acct_reservation_rec_t *object = (acct_reservation_rec_t *)in;
+
+	if(!object) {
+		pack64(0, buffer);
+		packnull(buffer);
+		packnull(buffer);
+		pack32((uint32_t)NO_VAL, buffer);
+		pack64(0, buffer);
+		pack16((uint16_t)NO_VAL, buffer);
+		pack32(0, buffer);
+		packnull(buffer);
+		packnull(buffer);
+		packnull(buffer);
+		pack_time(0, buffer);
+		pack_time(0, buffer);
+		pack_time(0, buffer);
+		return;
+	}
+	
+	pack64(object->alloc_secs, buffer);
+	packstr(object->assocs, buffer);
+	packstr(object->cluster, buffer);
+	pack32(object->cpus, buffer);
+	pack64(object->down_secs, buffer);
+	pack16(object->flags, buffer);
+	pack32(object->id, buffer);
+	packstr(object->name, buffer);
+	packstr(object->nodes, buffer);
+	packstr(object->node_inx, buffer);
+	pack_time(object->time_end, buffer);
+	pack_time(object->time_start, buffer);	
+	pack_time(object->time_start_prev, buffer);	
+}
+
+extern int unpack_acct_reservation_rec(void **object, uint16_t rpc_version,
+				      Buf buffer)
+{
+	uint32_t uint32_tmp;
+	acct_reservation_rec_t *object_ptr = 
+		xmalloc(sizeof(acct_reservation_rec_t));
+
+	*object = object_ptr;
+
+	safe_unpack64(&object_ptr->alloc_secs, buffer);
+	safe_unpackstr_xmalloc(&object_ptr->assocs, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&object_ptr->cluster, &uint32_tmp, buffer);
+	safe_unpack32(&object_ptr->cpus, buffer);
+	safe_unpack64(&object_ptr->down_secs, buffer);
+	safe_unpack16(&object_ptr->flags, buffer);
+	safe_unpack32(&object_ptr->id, buffer);
+	safe_unpackstr_xmalloc(&object_ptr->name, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&object_ptr->nodes, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&object_ptr->node_inx, &uint32_tmp, buffer);
+	safe_unpack_time(&object_ptr->time_end, buffer);
+	safe_unpack_time(&object_ptr->time_start, buffer);	
+	safe_unpack_time(&object_ptr->time_start_prev, buffer);	
+
+	return SLURM_SUCCESS;
+
+unpack_error:
+	destroy_acct_reservation_rec(object_ptr);
+	*object = NULL;
 	return SLURM_ERROR;
 }
 
@@ -3070,34 +3426,68 @@ extern void pack_acct_cluster_cond(void *in, uint16_t rpc_version, Buf buffer)
 	acct_cluster_cond_t *object = (acct_cluster_cond_t *)in;
 	uint32_t count = NO_VAL;
 
-	if(!object) {
-		pack32(NO_VAL, buffer);
-		pack32(0, buffer);
-		pack32(0, buffer);
-		pack16(0, buffer);
-		pack16(0, buffer);
-		return;
-	}
- 
-	if(object->cluster_list)
-		count = list_count(object->cluster_list);
-	
-	pack32(count, buffer);
-			
-	if(count && count != NO_VAL) {
-		itr = list_iterator_create(object->cluster_list);
-		while((tmp_info = list_next(itr))) {
-			packstr(tmp_info, buffer);
+	if(rpc_version >= 5) {
+		if(!object) {
+			pack16(0, buffer);
+			pack32(NO_VAL, buffer);
+			pack_time(0, buffer);
+			pack_time(0, buffer);
+			pack16(0, buffer);
+			pack16(0, buffer);
+			return;
 		}
-		list_iterator_destroy(itr);
-	}
-	count = NO_VAL;
 
-	pack32(object->usage_end, buffer);
-	pack32(object->usage_start, buffer);
-
-	pack16(object->with_usage, buffer);
-	pack16(object->with_deleted, buffer);
+		pack16(object->classification, buffer);
+		
+		if(object->cluster_list)
+			count = list_count(object->cluster_list);
+		
+		pack32(count, buffer);
+		
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->cluster_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+		
+		pack_time(object->usage_end, buffer);
+		pack_time(object->usage_start, buffer);
+		
+		pack16(object->with_usage, buffer);
+		pack16(object->with_deleted, buffer);
+	} else {
+		if(!object) {
+			pack32(NO_VAL, buffer);
+			pack32(0, buffer);
+			pack32(0, buffer);
+			pack16(0, buffer);
+			pack16(0, buffer);
+			return;
+		}
+		
+		if(object->cluster_list)
+			count = list_count(object->cluster_list);
+		
+		pack32(count, buffer);
+		
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->cluster_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+		
+		pack32(object->usage_end, buffer);
+		pack32(object->usage_start, buffer);
+		
+		pack16(object->with_usage, buffer);
+		pack16(object->with_deleted, buffer);
+	} 
 }
 
 extern int unpack_acct_cluster_cond(void **object, uint16_t rpc_version, 
@@ -3110,20 +3500,43 @@ extern int unpack_acct_cluster_cond(void **object, uint16_t rpc_version,
 	char *tmp_info = NULL;
 
 	*object = object_ptr;
-	safe_unpack32(&count, buffer);
-	if(count && count != NO_VAL) {
-		object_ptr->cluster_list = list_create(slurm_destroy_char);
-		for(i=0; i<count; i++) {
-			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
-			list_append(object_ptr->cluster_list, tmp_info);
+
+	if(rpc_version >= 5) {
+		safe_unpack16(&object_ptr->classification, buffer);
+		safe_unpack32(&count, buffer);
+		if(count && count != NO_VAL) {
+			object_ptr->cluster_list =
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->cluster_list, tmp_info);
+			}
 		}
-	}
-	safe_unpack32(&object_ptr->usage_end, buffer);
-	safe_unpack32(&object_ptr->usage_start, buffer);
+		safe_unpack_time(&object_ptr->usage_end, buffer);
+		safe_unpack_time(&object_ptr->usage_start, buffer);
 
-	safe_unpack16(&object_ptr->with_usage, buffer);
-	safe_unpack16(&object_ptr->with_deleted, buffer);
+		safe_unpack16(&object_ptr->with_usage, buffer);
+		safe_unpack16(&object_ptr->with_deleted, buffer);
+	} else {
+		safe_unpack32(&count, buffer);
+		if(count && count != NO_VAL) {
+			object_ptr->cluster_list =
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->cluster_list, tmp_info);
+			}
+		}
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_end = uint32_tmp;
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_start = uint32_tmp;
 
+		safe_unpack16(&object_ptr->with_usage, buffer);
+		safe_unpack16(&object_ptr->with_deleted, buffer);
+	}
 	return SLURM_SUCCESS;
 
 unpack_error:
@@ -3141,7 +3554,7 @@ extern void pack_acct_association_cond(void *in, uint16_t rpc_version,
 	ListIterator itr = NULL;
 	acct_association_cond_t *object = (acct_association_cond_t *)in;
 
-	if(rpc_version >= 3) {
+	if(rpc_version >= 5) {
 		if(!object) {
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
@@ -3169,8 +3582,8 @@ extern void pack_acct_association_cond(void *in, uint16_t rpc_version,
 			
 			pack32(NO_VAL, buffer);
 
-			pack32(0, buffer);
-			pack32(0, buffer);
+			pack_time(0, buffer);
+			pack_time(0, buffer);
 
 			pack32(NO_VAL, buffer);
 
@@ -3428,8 +3841,8 @@ extern void pack_acct_association_cond(void *in, uint16_t rpc_version,
 		}
 		count = NO_VAL;
 
-		pack32(object->usage_end, buffer);
-		pack32(object->usage_start, buffer);
+		pack_time(object->usage_end, buffer);
+		pack_time(object->usage_start, buffer);
 
 		if(object->user_list)
 			count = list_count(object->user_list);
@@ -3450,21 +3863,41 @@ extern void pack_acct_association_cond(void *in, uint16_t rpc_version,
 		pack16(object->with_sub_accts, buffer);
 		pack16(object->without_parent_info, buffer);
 		pack16(object->without_parent_limits, buffer);
-	} else {
+	} else if(rpc_version >= 3) {
 		if(!object) {
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
+
+			pack32(NO_VAL, buffer);
+
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
+
 			pack32(NO_VAL, buffer);
-			packnull(buffer);
+
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			
+			pack32(NO_VAL, buffer);
+
 			pack32(0, buffer);
 			pack32(0, buffer);
+
 			pack32(NO_VAL, buffer);
+
+			pack16(0, buffer);
+			pack16(0, buffer);
 			pack16(0, buffer);
 			pack16(0, buffer);
 			pack16(0, buffer);
@@ -3498,58 +3931,25 @@ extern void pack_acct_association_cond(void *in, uint16_t rpc_version,
 		}
 		count = NO_VAL;
 
-		if(object->fairshare_list 
-		   && list_count(object->fairshare_list)) 
-			pack32(atoi(list_peek(object->fairshare_list)), 
-			       buffer);
-		else 
-			pack32(count, buffer);
-	
-		if(object->id_list)
-			count = list_count(object->id_list);
+		if(object->fairshare_list)
+			count = list_count(object->fairshare_list);
 	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->id_list);
+			itr = list_iterator_create(object->fairshare_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
 			}
+			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
-		
-		if(object->max_cpu_mins_pj_list
-		   && list_count(object->max_cpu_mins_pj_list)) 
-			pack32(atoi(list_peek(object->max_cpu_mins_pj_list)), 
-			       buffer);
-		else 
-			pack32(count, buffer);
-		
-		if(object->max_jobs_list && list_count(object->max_jobs_list)) 
-			pack32(atoi(list_peek(object->max_jobs_list)), 
-			       buffer);
-		else 
-			pack32(count, buffer);
-
-		if(object->max_nodes_pj_list
-		   && list_count(object->max_nodes_pj_list)) 
-			pack32(atoi(list_peek(object->max_nodes_pj_list)), 
-			       buffer);
-		else 
-			pack32(count, buffer);
-
-		if(object->max_wall_pj_list 
-		   && list_count(object->max_wall_pj_list)) 
-			pack32(atoi(list_peek(object->max_wall_pj_list)), 
-			       buffer);
-		else 
-			pack32(count, buffer);
 
-		if(object->partition_list)
-			count = list_count(object->partition_list);
+		if(object->grp_cpu_mins_list)
+			count = list_count(object->grp_cpu_mins_list);
 	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->partition_list);
+			itr = list_iterator_create(object->grp_cpu_mins_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
 			}
@@ -3557,22 +3957,12 @@ extern void pack_acct_association_cond(void *in, uint16_t rpc_version,
 		}
 		count = NO_VAL;
 
-		if(object->parent_acct_list 
-		   && list_count(object->parent_acct_list)) 
-			packstr(list_peek(object->parent_acct_list), 
-			       buffer);
-		else 
-			packnull(buffer);
-
-		pack32(object->usage_end, buffer);
-		pack32(object->usage_start, buffer);
-
-		if(object->user_list)
-			count = list_count(object->user_list);
+		if(object->grp_cpus_list)
+			count = list_count(object->grp_cpus_list);
 	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->user_list);
+			itr = list_iterator_create(object->grp_cpus_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
 			}
@@ -3580,407 +3970,1997 @@ extern void pack_acct_association_cond(void *in, uint16_t rpc_version,
 		}
 		count = NO_VAL;
 
-		pack16(object->with_usage, buffer);
-		pack16(object->with_deleted, buffer);
-		pack16(object->without_parent_info, buffer);
-		pack16(object->without_parent_limits, buffer);
-	} 
-}
-
-extern int unpack_acct_association_cond(void **object, 
-					uint16_t rpc_version, Buf buffer)
-{
-	uint32_t uint32_tmp;
-	int i;
-	uint32_t count;
-	acct_association_cond_t *object_ptr =
-		xmalloc(sizeof(acct_association_cond_t));
-	char *tmp_info = NULL;
-	*object = object_ptr;
-
-	if(rpc_version >= 3) {
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->acct_list =
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->acct_list, tmp_info);
+		if(object->grp_jobs_list)
+			count = list_count(object->grp_jobs_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->grp_jobs_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
 			}
+			list_iterator_destroy(itr);
 		}
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->cluster_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->cluster_list, 
-					    tmp_info);
+		count = NO_VAL;
+
+		if(object->grp_nodes_list)
+			count = list_count(object->grp_nodes_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->grp_nodes_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
 			}
+			list_iterator_destroy(itr);
 		}
+		count = NO_VAL;
 
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->fairshare_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->fairshare_list, 
-					    tmp_info);
+		if(object->grp_submit_jobs_list)
+			count = list_count(object->grp_submit_jobs_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(
+				object->grp_submit_jobs_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
 			}
+			list_iterator_destroy(itr);
 		}
+		count = NO_VAL;
 
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->grp_cpu_mins_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->grp_cpu_mins_list, 
-					    tmp_info);
+		if(object->grp_wall_list)
+			count = list_count(object->grp_wall_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->grp_wall_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
 			}
+			list_iterator_destroy(itr);
 		}
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->grp_cpus_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->grp_cpus_list, 
-					    tmp_info);
+		count = NO_VAL;
+
+		if(object->id_list)
+			count = list_count(object->id_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->id_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
 			}
 		}
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->grp_jobs_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->grp_jobs_list, 
-					    tmp_info);
+		count = NO_VAL;
+
+		if(object->max_cpu_mins_pj_list)
+			count = list_count(object->max_cpu_mins_pj_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(
+				object->max_cpu_mins_pj_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
 			}
+			list_iterator_destroy(itr);
 		}
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->grp_nodes_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->grp_nodes_list,
-					    tmp_info);
+		count = NO_VAL;
+		if(object->max_cpus_pj_list)
+			count = list_count(object->max_cpus_pj_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->max_cpus_pj_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
 			}
+			list_iterator_destroy(itr);
 		}
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->grp_submit_jobs_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->grp_submit_jobs_list, 
-					    tmp_info);
+		count = NO_VAL;
+		if(object->max_jobs_list)
+			count = list_count(object->max_jobs_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->max_jobs_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
 			}
+			list_iterator_destroy(itr);
 		}
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->grp_wall_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->grp_wall_list, 
-					    tmp_info);
+		count = NO_VAL;
+		if(object->max_nodes_pj_list)
+			count = list_count(object->max_nodes_pj_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->max_nodes_pj_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
 			}
+			list_iterator_destroy(itr);
 		}
-
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->id_list = list_create(slurm_destroy_char);
+		count = NO_VAL;
+		if(object->max_submit_jobs_list)
+			count = list_count(object->max_submit_jobs_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(
+				object->max_submit_jobs_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+		if(object->max_wall_pj_list)
+			count = list_count(object->max_wall_pj_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->max_wall_pj_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+	
+		if(object->partition_list)
+			count = list_count(object->partition_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->partition_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->parent_acct_list)
+			count = list_count(object->parent_acct_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->parent_acct_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->qos_list)
+			count = list_count(object->qos_list);
+
+		pack32(count, buffer);
+
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->qos_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack32(object->usage_end, buffer);
+		pack32(object->usage_start, buffer);
+
+		if(object->user_list)
+			count = list_count(object->user_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->user_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack16(object->with_usage, buffer);
+		pack16(object->with_deleted, buffer);
+		pack16(object->with_raw_qos, buffer);
+		pack16(object->with_sub_accts, buffer);
+		pack16(object->without_parent_info, buffer);
+		pack16(object->without_parent_limits, buffer);
+	} else {
+		if(!object) {
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			packnull(buffer);
+			pack32(0, buffer);
+			pack32(0, buffer);
+			pack32(NO_VAL, buffer);
+			pack16(0, buffer);
+			pack16(0, buffer);
+			pack16(0, buffer);
+			pack16(0, buffer);
+			return;
+		}
+
+		if(object->acct_list)
+			count = list_count(object->acct_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->acct_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->cluster_list)
+			count = list_count(object->cluster_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->cluster_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->fairshare_list 
+		   && list_count(object->fairshare_list)) 
+			pack32(atoi(list_peek(object->fairshare_list)), 
+			       buffer);
+		else 
+			pack32(count, buffer);
+	
+		if(object->id_list)
+			count = list_count(object->id_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->id_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+		}
+		count = NO_VAL;
+		
+		if(object->max_cpu_mins_pj_list
+		   && list_count(object->max_cpu_mins_pj_list)) 
+			pack32(atoi(list_peek(object->max_cpu_mins_pj_list)), 
+			       buffer);
+		else 
+			pack32(count, buffer);
+		
+		if(object->max_jobs_list && list_count(object->max_jobs_list)) 
+			pack32(atoi(list_peek(object->max_jobs_list)), 
+			       buffer);
+		else 
+			pack32(count, buffer);
+
+		if(object->max_nodes_pj_list
+		   && list_count(object->max_nodes_pj_list)) 
+			pack32(atoi(list_peek(object->max_nodes_pj_list)), 
+			       buffer);
+		else 
+			pack32(count, buffer);
+
+		if(object->max_wall_pj_list 
+		   && list_count(object->max_wall_pj_list)) 
+			pack32(atoi(list_peek(object->max_wall_pj_list)), 
+			       buffer);
+		else 
+			pack32(count, buffer);
+
+		if(object->partition_list)
+			count = list_count(object->partition_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->partition_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->parent_acct_list 
+		   && list_count(object->parent_acct_list)) 
+			packstr(list_peek(object->parent_acct_list), 
+			       buffer);
+		else 
+			packnull(buffer);
+
+		pack32(object->usage_end, buffer);
+		pack32(object->usage_start, buffer);
+
+		if(object->user_list)
+			count = list_count(object->user_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->user_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack16(object->with_usage, buffer);
+		pack16(object->with_deleted, buffer);
+		pack16(object->without_parent_info, buffer);
+		pack16(object->without_parent_limits, buffer);
+	} 
+}
+
+extern int unpack_acct_association_cond(void **object, 
+					uint16_t rpc_version, Buf buffer)
+{
+	uint32_t uint32_tmp;
+	int i;
+	uint32_t count;
+	acct_association_cond_t *object_ptr =
+		xmalloc(sizeof(acct_association_cond_t));
+	char *tmp_info = NULL;
+	*object = object_ptr;
+
+	if(rpc_version >= 5) {
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->acct_list =
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->acct_list, tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->cluster_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->cluster_list, 
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->fairshare_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->fairshare_list, 
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_cpu_mins_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_cpu_mins_list, 
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_cpus_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_cpus_list, 
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_jobs_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_jobs_list, 
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_nodes_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_nodes_list,
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_submit_jobs_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_submit_jobs_list, 
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_wall_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_wall_list, 
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->id_list = list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
+						       buffer);
+				list_append(object_ptr->id_list, tmp_info);
+			}
+		}
+	
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_cpu_mins_pj_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_cpu_mins_pj_list,
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_cpus_pj_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_cpus_pj_list,
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_jobs_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_jobs_list,
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_nodes_pj_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_nodes_pj_list,
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_submit_jobs_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_submit_jobs_list, 
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_wall_pj_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_wall_pj_list,
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->partition_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->partition_list,
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->parent_acct_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->parent_acct_list,
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->qos_list = list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->qos_list, tmp_info);
+			}
+		}
+
+		safe_unpack_time(&object_ptr->usage_end, buffer);
+		safe_unpack_time(&object_ptr->usage_start, buffer);
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->user_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->user_list, tmp_info);
+			}
+		}
+
+		safe_unpack16(&object_ptr->with_usage, buffer);
+		safe_unpack16(&object_ptr->with_deleted, buffer);
+		safe_unpack16(&object_ptr->with_raw_qos, buffer);
+		safe_unpack16(&object_ptr->with_sub_accts, buffer);
+		safe_unpack16(&object_ptr->without_parent_info, buffer);
+		safe_unpack16(&object_ptr->without_parent_limits, buffer);
+	} else if(rpc_version >= 3) {
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->acct_list =
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->acct_list, tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->cluster_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->cluster_list, 
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->fairshare_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->fairshare_list, 
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_cpu_mins_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_cpu_mins_list, 
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_cpus_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_cpus_list, 
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_jobs_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_jobs_list, 
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_nodes_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_nodes_list,
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_submit_jobs_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_submit_jobs_list, 
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->grp_wall_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->grp_wall_list, 
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->id_list = list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
+						       buffer);
+				list_append(object_ptr->id_list, tmp_info);
+			}
+		}
+	
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_cpu_mins_pj_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_cpu_mins_pj_list,
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_cpus_pj_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_cpus_pj_list,
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_jobs_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_jobs_list,
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_nodes_pj_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_nodes_pj_list,
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_submit_jobs_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_submit_jobs_list, 
+					    tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->max_wall_pj_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->max_wall_pj_list,
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->partition_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->partition_list,
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->parent_acct_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->parent_acct_list,
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->qos_list = list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->qos_list, tmp_info);
+			}
+		}
+
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_end = uint32_tmp;
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_start = uint32_tmp;
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->user_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->user_list, tmp_info);
+			}
+		}
+
+		safe_unpack16(&object_ptr->with_usage, buffer);
+		safe_unpack16(&object_ptr->with_deleted, buffer);
+		safe_unpack16(&object_ptr->with_raw_qos, buffer);
+		safe_unpack16(&object_ptr->with_sub_accts, buffer);
+		safe_unpack16(&object_ptr->without_parent_info, buffer);
+		safe_unpack16(&object_ptr->without_parent_limits, buffer);
+	} else {
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->acct_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->acct_list, tmp_info);
+			}
+		}
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->cluster_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->cluster_list,
+					    tmp_info);
+			}
+		}
+		/* We have to check for 0 here because of a bug in
+		   version 2 that sent 0's when it should had sent
+		   NO_VAL
+		*/
+		safe_unpack32(&count, buffer);
+		if(count && count != NO_VAL) {
+			object_ptr->fairshare_list = 
+				list_create(slurm_destroy_char);
+			list_append(object_ptr->fairshare_list,
+				    xstrdup_printf("%u", count));
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count && count != NO_VAL) {
+			object_ptr->id_list = list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
+						       buffer);
+				list_append(object_ptr->id_list, tmp_info);
+			}
+		}
+	
+		safe_unpack32(&count, buffer);
+		if(count && count != NO_VAL) {
+			object_ptr->max_cpu_mins_pj_list = 
+				list_create(slurm_destroy_char);
+			list_append(object_ptr->max_cpu_mins_pj_list,
+				    xstrdup_printf("%u", count));
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count && count != NO_VAL) {
+			object_ptr->max_jobs_list = 
+				list_create(slurm_destroy_char);
+			list_append(object_ptr->max_jobs_list,
+				    xstrdup_printf("%u", count));
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count && count != NO_VAL) {
+			object_ptr->max_nodes_pj_list = 
+				list_create(slurm_destroy_char);
+			list_append(object_ptr->max_nodes_pj_list,
+				    xstrdup_printf("%u", count));
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count && count != NO_VAL) {
+			object_ptr->max_wall_pj_list = 
+				list_create(slurm_destroy_char);
+			list_append(object_ptr->max_wall_pj_list,
+				    xstrdup_printf("%u", count));
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->partition_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->partition_list,
+					    tmp_info);
+			}
+		}
+
+		safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
+		if(tmp_info) {
+			object_ptr->parent_acct_list = 
+				list_create(slurm_destroy_char);
+			list_append(object_ptr->parent_acct_list, tmp_info);
+		}
+
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_end = uint32_tmp;
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_start = uint32_tmp;
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->user_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->user_list, tmp_info);
+			}
+		}
+
+		safe_unpack16(&object_ptr->with_usage, buffer);
+		safe_unpack16(&object_ptr->with_deleted, buffer);
+		safe_unpack16(&object_ptr->without_parent_info, buffer);
+		safe_unpack16(&object_ptr->without_parent_limits, buffer);
+	} 
+
+	return SLURM_SUCCESS;
+
+unpack_error:
+	destroy_acct_association_cond(object_ptr);
+	*object = NULL;
+	return SLURM_ERROR;
+}
+
+extern void pack_acct_job_cond(void *in, uint16_t rpc_version, Buf buffer)
+{
+	char *tmp_info = NULL;
+	jobacct_selected_step_t *job = NULL;
+	uint32_t count = NO_VAL;
+
+	ListIterator itr = NULL;
+	acct_job_cond_t *object = (acct_job_cond_t *)in;
+
+	if(rpc_version >= 5) {
+		if(!object) {
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack16(0, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack_time(0, buffer);
+			pack_time(0, buffer);
+			packnull(buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack16(0, buffer);
+			pack16(0, buffer);
+			return;
+		}
+
+		if(object->acct_list)
+			count = list_count(object->acct_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->acct_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->associd_list)
+			count = list_count(object->associd_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->associd_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+		}
+		count = NO_VAL;
+
+		if(object->cluster_list)
+			count = list_count(object->cluster_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->cluster_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack16(object->duplicates, buffer);
+
+		if(object->groupid_list)
+			count = list_count(object->groupid_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->groupid_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+		}
+		count = NO_VAL;
+	
+		if(object->partition_list)
+			count = list_count(object->partition_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->partition_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->resv_list)
+			count = list_count(object->resv_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->resv_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->resvid_list)
+			count = list_count(object->resvid_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->resvid_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->step_list)
+			count = list_count(object->step_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->step_list);
+			while((job = list_next(itr))) {
+				pack_jobacct_selected_step(job, rpc_version, 
+							   buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->state_list)
+			count = list_count(object->state_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->state_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack_time(object->usage_end, buffer);
+		pack_time(object->usage_start, buffer);
+
+		packstr(object->used_nodes, buffer);
+
+		if(object->userid_list)
+			count = list_count(object->userid_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->userid_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->wckey_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack16(object->without_steps, buffer);
+		pack16(object->without_usage_truncation, buffer);
+	} else if(rpc_version >= 4) {
+		if(!object) {
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack16(0, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(0, buffer);
+			pack32(0, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack16(0, buffer);
+			return;
+		}
+
+		if(object->acct_list)
+			count = list_count(object->acct_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->acct_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->associd_list)
+			count = list_count(object->associd_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->associd_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+		}
+		count = NO_VAL;
+
+		if(object->cluster_list)
+			count = list_count(object->cluster_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->cluster_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack16(object->duplicates, buffer);
+
+		if(object->groupid_list)
+			count = list_count(object->groupid_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->groupid_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+		}
+		count = NO_VAL;
+	
+		if(object->partition_list)
+			count = list_count(object->partition_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->partition_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->step_list)
+			count = list_count(object->step_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->step_list);
+			while((job = list_next(itr))) {
+				pack_jobacct_selected_step(job, rpc_version, 
+							   buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->state_list)
+			count = list_count(object->state_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->state_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack32(object->usage_end, buffer);
+		pack32(object->usage_start, buffer);
+
+		if(object->userid_list)
+			count = list_count(object->userid_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->userid_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->wckey_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack16(object->without_steps, buffer);
+	} else {
+		if(!object) {
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack16(0, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(0, buffer);
+			pack32(0, buffer);
+			pack32(NO_VAL, buffer);
+			pack16(0, buffer);
+			return;
+		}
+
+		if(object->acct_list)
+			count = list_count(object->acct_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->acct_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->associd_list)
+			count = list_count(object->associd_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->associd_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+		}
+		count = NO_VAL;
+
+		if(object->cluster_list)
+			count = list_count(object->cluster_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->cluster_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack16(object->duplicates, buffer);
+
+		if(object->groupid_list)
+			count = list_count(object->groupid_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->groupid_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+		}
+		count = NO_VAL;
+	
+		if(object->partition_list)
+			count = list_count(object->partition_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->partition_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->step_list)
+			count = list_count(object->step_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->step_list);
+			while((job = list_next(itr))) {
+				pack_jobacct_selected_step(job, rpc_version,
+							   buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->state_list)
+			count = list_count(object->state_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->state_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack32(object->usage_end, buffer);
+		pack32(object->usage_start, buffer);
+
+		if(object->userid_list)
+			count = list_count(object->userid_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->userid_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		pack16(object->without_steps, buffer);
+	}
+}
+
+extern int unpack_acct_job_cond(void **object, uint16_t rpc_version, Buf buffer)
+{
+	uint32_t uint32_tmp;
+	int i;
+	uint32_t count;
+	acct_job_cond_t *object_ptr = xmalloc(sizeof(acct_job_cond_t));
+	char *tmp_info = NULL;
+	jobacct_selected_step_t *job = NULL;
+
+	*object = object_ptr;
+
+	if(rpc_version >= 5) {
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->acct_list = list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
 						       buffer);
-				list_append(object_ptr->id_list, tmp_info);
+				list_append(object_ptr->acct_list, tmp_info);
 			}
 		}
-	
+
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->max_cpu_mins_pj_list = 
+			object_ptr->associd_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
 						       buffer);
-				list_append(object_ptr->max_cpu_mins_pj_list,
-					    tmp_info);
+				list_append(object_ptr->associd_list, tmp_info);
 			}
 		}
+
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->max_cpus_pj_list = 
+			object_ptr->cluster_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
 						       buffer);
-				list_append(object_ptr->max_cpus_pj_list,
-					    tmp_info);
+				list_append(object_ptr->cluster_list, tmp_info);
 			}
 		}
+
+		safe_unpack16(&object_ptr->duplicates, buffer);
+
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->max_jobs_list = 
+			object_ptr->groupid_list = 
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
 						       buffer);
-				list_append(object_ptr->max_jobs_list,
+				list_append(object_ptr->groupid_list, tmp_info);
+			}
+		}
+	
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->partition_list =
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->partition_list, 
 					    tmp_info);
 			}
 		}
+
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->max_nodes_pj_list = 
+			object_ptr->resv_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->max_nodes_pj_list,
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->resv_list, 
 					    tmp_info);
 			}
 		}
+
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->max_submit_jobs_list = 
+			object_ptr->resvid_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->max_submit_jobs_list, 
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->resvid_list, 
 					    tmp_info);
 			}
 		}
+
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->max_wall_pj_list = 
+			object_ptr->step_list =
+				list_create(destroy_jobacct_selected_step);
+			for(i=0; i<count; i++) {
+				unpack_jobacct_selected_step(&job, rpc_version,
+							     buffer);
+				list_append(object_ptr->step_list, job);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->state_list =
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->state_list, tmp_info);
+			}
+		}
+	
+		safe_unpack_time(&object_ptr->usage_end, buffer);
+		safe_unpack_time(&object_ptr->usage_start, buffer);
+
+		safe_unpackstr_xmalloc(&object_ptr->used_nodes,
+				       &uint32_tmp, buffer);
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->userid_list = 
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
 						       buffer);
-				list_append(object_ptr->max_wall_pj_list,
-					    tmp_info);
+				list_append(object_ptr->userid_list, tmp_info);
 			}
 		}
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->partition_list = 
+			object_ptr->wckey_list = 
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
 						       buffer);
-				list_append(object_ptr->partition_list,
-					    tmp_info);
+				list_append(object_ptr->wckey_list, tmp_info);
 			}
 		}
 
+		safe_unpack16(&object_ptr->without_steps, buffer);
+		safe_unpack16(&object_ptr->without_usage_truncation, buffer);
+	} else if(rpc_version >= 4) {
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->parent_acct_list = 
+			object_ptr->acct_list = list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->acct_list, tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->associd_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
 						       buffer);
-				list_append(object_ptr->parent_acct_list,
-					    tmp_info);
+				list_append(object_ptr->associd_list, tmp_info);
 			}
 		}
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->qos_list = list_create(slurm_destroy_char);
+			object_ptr->cluster_list =
+				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
 						       buffer);
-				list_append(object_ptr->qos_list, tmp_info);
+				list_append(object_ptr->cluster_list, tmp_info);
 			}
 		}
 
-		safe_unpack32(&object_ptr->usage_end, buffer);
-		safe_unpack32(&object_ptr->usage_start, buffer);
+		safe_unpack16(&object_ptr->duplicates, buffer);
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->user_list = 
+			object_ptr->groupid_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
+						       buffer);
+				list_append(object_ptr->groupid_list, tmp_info);
+			}
+		}
+	
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->partition_list =
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->partition_list, 
+					    tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->step_list =
+				list_create(destroy_jobacct_selected_step);
+			for(i=0; i<count; i++) {
+				unpack_jobacct_selected_step(&job, rpc_version,
+							     buffer);
+				list_append(object_ptr->step_list, job);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->state_list =
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->state_list, tmp_info);
+			}
+		}
+	
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_end = uint32_tmp;
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_start = uint32_tmp;
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->userid_list = 
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
 						       buffer);
-				list_append(object_ptr->user_list, tmp_info);
+				list_append(object_ptr->userid_list, tmp_info);
 			}
 		}
 
-		safe_unpack16(&object_ptr->with_usage, buffer);
-		safe_unpack16(&object_ptr->with_deleted, buffer);
-		safe_unpack16(&object_ptr->with_raw_qos, buffer);
-		safe_unpack16(&object_ptr->with_sub_accts, buffer);
-		safe_unpack16(&object_ptr->without_parent_info, buffer);
-		safe_unpack16(&object_ptr->without_parent_limits, buffer);
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->wckey_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->wckey_list, tmp_info);
+			}
+		}
+
+		safe_unpack16(&object_ptr->without_steps, buffer);
 	} else {
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->acct_list = 
-				list_create(slurm_destroy_char);
+			object_ptr->acct_list = list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
 						       buffer);
 				list_append(object_ptr->acct_list, tmp_info);
 			}
 		}
+
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->cluster_list = 
+			object_ptr->associd_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
 						       buffer);
-				list_append(object_ptr->cluster_list,
-					    tmp_info);
+				list_append(object_ptr->associd_list, tmp_info);
 			}
 		}
-		/* We have to check for 0 here because of a bug in
-		   version 2 that sent 0's when it should had sent
-		   NO_VAL
-		*/
+
 		safe_unpack32(&count, buffer);
-		if(count && count != NO_VAL) {
-			object_ptr->fairshare_list = 
+		if(count != NO_VAL) {
+			object_ptr->cluster_list =
 				list_create(slurm_destroy_char);
-			list_append(object_ptr->fairshare_list,
-				    xstrdup_printf("%u", count));
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->cluster_list, tmp_info);
+			}
 		}
 
+		safe_unpack16(&object_ptr->duplicates, buffer);
+
 		safe_unpack32(&count, buffer);
-		if(count && count != NO_VAL) {
-			object_ptr->id_list = list_create(slurm_destroy_char);
+		if(count != NO_VAL) {
+			object_ptr->groupid_list = 
+				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
 						       buffer);
-				list_append(object_ptr->id_list, tmp_info);
+				list_append(object_ptr->groupid_list, tmp_info);
 			}
 		}
 	
 		safe_unpack32(&count, buffer);
-		if(count && count != NO_VAL) {
-			object_ptr->max_cpu_mins_pj_list = 
-				list_create(slurm_destroy_char);
-			list_append(object_ptr->max_cpu_mins_pj_list,
-				    xstrdup_printf("%u", count));
-		}
-
-		safe_unpack32(&count, buffer);
-		if(count && count != NO_VAL) {
-			object_ptr->max_jobs_list = 
+		if(count != NO_VAL) {
+			object_ptr->partition_list =
 				list_create(slurm_destroy_char);
-			list_append(object_ptr->max_jobs_list,
-				    xstrdup_printf("%u", count));
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->partition_list, 
+					    tmp_info);
+			}
 		}
 
 		safe_unpack32(&count, buffer);
-		if(count && count != NO_VAL) {
-			object_ptr->max_nodes_pj_list = 
-				list_create(slurm_destroy_char);
-			list_append(object_ptr->max_nodes_pj_list,
-				    xstrdup_printf("%u", count));
+		if(count != NO_VAL) {
+			object_ptr->step_list =
+				list_create(destroy_jobacct_selected_step);
+			for(i=0; i<count; i++) {
+				unpack_jobacct_selected_step(&job, rpc_version,
+							     buffer);
+				list_append(object_ptr->step_list, job);
+			}
 		}
 
 		safe_unpack32(&count, buffer);
-		if(count && count != NO_VAL) {
-			object_ptr->max_wall_pj_list = 
+		if(count != NO_VAL) {
+			object_ptr->state_list =
 				list_create(slurm_destroy_char);
-			list_append(object_ptr->max_wall_pj_list,
-				    xstrdup_printf("%u", count));
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->state_list, tmp_info);
+			}
 		}
+	
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_end = uint32_tmp;
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_start = uint32_tmp;
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->partition_list = 
+			object_ptr->userid_list = 
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
 						       buffer);
-				list_append(object_ptr->partition_list,
-					    tmp_info);
+				list_append(object_ptr->userid_list, tmp_info);
 			}
 		}
 
-		safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
-		if(tmp_info) {
-			object_ptr->parent_acct_list = 
-				list_create(slurm_destroy_char);
-			list_append(object_ptr->parent_acct_list, tmp_info);
+		safe_unpack16(&object_ptr->without_steps, buffer);
+	}
+
+	return SLURM_SUCCESS;
+
+unpack_error:
+	destroy_acct_job_cond(object_ptr);
+	*object = NULL;
+	return SLURM_ERROR;
+}
+
+extern void pack_acct_qos_cond(void *in, uint16_t rpc_version, Buf buffer)
+{
+	uint32_t count = NO_VAL;
+	char *tmp_info = NULL;
+	ListIterator itr = NULL;
+	acct_qos_cond_t *object = (acct_qos_cond_t *)in;
+
+	if(!object) {
+		pack32(NO_VAL, buffer);
+		pack32(NO_VAL, buffer);
+		pack32(NO_VAL, buffer);
+		pack16(0, buffer);
+		return;
+	}
+
+	if(object->description_list)
+		count = list_count(object->description_list);
+	
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(object->description_list);
+		while((tmp_info = list_next(itr))) {
+			packstr(tmp_info, buffer);
+		}
+		list_iterator_destroy(itr);
+	}
+	count = NO_VAL;
+
+	if(object->id_list)
+		count = list_count(object->id_list);
+	
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(object->id_list);
+		while((tmp_info = list_next(itr))) {
+			packstr(tmp_info, buffer);
+		}
+		list_iterator_destroy(itr);
+	}
+	count = NO_VAL;
+
+	if(object->name_list) 
+		count = list_count(object->name_list);
+
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(object->name_list);
+		while((tmp_info = list_next(itr))) {
+			packstr(tmp_info, buffer);
+		}
+		list_iterator_destroy(itr); 
+	}
+	count = NO_VAL;
+
+	pack16(object->with_deleted, buffer);
+}
+
+extern int unpack_acct_qos_cond(void **object, uint16_t rpc_version, Buf buffer)
+{
+	uint32_t uint32_tmp;
+	int i;
+	uint32_t count;
+	acct_qos_cond_t *object_ptr = xmalloc(sizeof(acct_qos_cond_t));
+	char *tmp_info = NULL;
+
+	*object = object_ptr;
+
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->description_list = list_create(slurm_destroy_char);
+		for(i=0; i<count; i++) {
+			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
+			list_append(object_ptr->description_list, tmp_info);
+		}
+	}
+
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->id_list = list_create(slurm_destroy_char);
+		for(i=0; i<count; i++) {
+			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
+			list_append(object_ptr->id_list, tmp_info);
+		}
+	}
+
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->name_list = list_create(slurm_destroy_char);
+		for(i=0; i<count; i++) {
+			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
+			list_append(object_ptr->name_list, tmp_info);
+		}
+	}
+
+	safe_unpack16(&object_ptr->with_deleted, buffer);
+	return SLURM_SUCCESS;
+
+unpack_error:
+	destroy_acct_qos_cond(object_ptr);
+	*object = NULL;
+	return SLURM_ERROR;
+}
+
+extern void pack_acct_reservation_cond(void *in, uint16_t rpc_version,
+				      Buf buffer)
+{
+	acct_reservation_cond_t *object = (acct_reservation_cond_t *)in;
+	uint32_t count = NO_VAL;
+	ListIterator itr = NULL;
+	char *tmp_info = NULL;
+
+	if(!object) {
+		pack32((uint32_t)NO_VAL, buffer);
+		pack16(0, buffer);
+		pack32((uint16_t)NO_VAL, buffer);
+		pack32((uint16_t)NO_VAL, buffer);
+		packnull(buffer);
+		pack_time(0, buffer);
+		pack_time(0, buffer);
+		pack16(0, buffer);
+		return;
+	}
+	
+	if(object->cluster_list)
+		count = list_count(object->cluster_list);
+	
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(object->cluster_list);
+		while((tmp_info = list_next(itr))) {
+			packstr(tmp_info, buffer);
+		}
+		list_iterator_destroy(itr);
+	}
+	count = NO_VAL;
+
+	pack16(object->flags, buffer);
+	
+	if(object->id_list)
+		count = list_count(object->id_list);
+	
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(object->id_list);
+		while((tmp_info = list_next(itr))) {
+			packstr(tmp_info, buffer);
+		}
+		list_iterator_destroy(itr);
+	}
+	count = NO_VAL;
+
+	if(object->name_list)
+		count = list_count(object->name_list);
+	
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(object->name_list);
+		while((tmp_info = list_next(itr))) {
+			packstr(tmp_info, buffer);
+		}
+		list_iterator_destroy(itr);
+	}
+	count = NO_VAL;
+
+	packstr(object->nodes, buffer);
+	pack_time(object->time_end, buffer);
+	pack_time(object->time_start, buffer);	
+	pack16(object->with_usage, buffer);	
+}
+
+extern int unpack_acct_reservation_cond(void **object, uint16_t rpc_version,
+				      Buf buffer)
+{
+	uint32_t uint32_tmp, count;
+	int i = 0;
+	char *tmp_info = NULL;
+	acct_reservation_cond_t *object_ptr = 
+		xmalloc(sizeof(acct_reservation_cond_t));
+
+	*object = object_ptr;
+
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->cluster_list = list_create(slurm_destroy_char);
+		for(i=0; i<count; i++) {
+			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
+			list_append(object_ptr->cluster_list, tmp_info);
 		}
+	}
 
-		safe_unpack32(&object_ptr->usage_end, buffer);
-		safe_unpack32(&object_ptr->usage_start, buffer);
+	safe_unpack16(&object_ptr->flags, buffer);
 
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->user_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->user_list, tmp_info);
-			}
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->id_list = list_create(slurm_destroy_char);
+		for(i=0; i<count; i++) {
+			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
+			list_append(object_ptr->id_list, tmp_info);
 		}
+	}
 
-		safe_unpack16(&object_ptr->with_usage, buffer);
-		safe_unpack16(&object_ptr->with_deleted, buffer);
-		safe_unpack16(&object_ptr->without_parent_info, buffer);
-		safe_unpack16(&object_ptr->without_parent_limits, buffer);
-	} 
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->name_list = list_create(slurm_destroy_char);
+		for(i=0; i<count; i++) {
+			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
+			list_append(object_ptr->name_list, tmp_info);
+		}
+	}
+
+	safe_unpackstr_xmalloc(&object_ptr->nodes, &uint32_tmp, buffer);
+	safe_unpack_time(&object_ptr->time_end, buffer);
+	safe_unpack_time(&object_ptr->time_start, buffer);	
+	safe_unpack16(&object_ptr->with_usage, buffer);	
 
 	return SLURM_SUCCESS;
 
 unpack_error:
-	destroy_acct_association_cond(object_ptr);
+	destroy_acct_reservation_cond(object_ptr);
 	*object = NULL;
 	return SLURM_ERROR;
 }
 
-extern void pack_acct_job_cond(void *in, uint16_t rpc_version, Buf buffer)
+extern void pack_acct_txn_cond(void *in, uint16_t rpc_version, Buf buffer)
 {
-	char *tmp_info = NULL;
-	jobacct_selected_step_t *job = NULL;
 	uint32_t count = NO_VAL;
-
+	char *tmp_info = NULL;
 	ListIterator itr = NULL;
-	acct_job_cond_t *object = (acct_job_cond_t *)in;
+	acct_txn_cond_t *object = (acct_txn_cond_t *)in;
 
-	if(rpc_version >= 4) {
+	if(rpc_version >= 5) {
 		if(!object) {
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
-			pack16(0, buffer);
-			pack32(NO_VAL, buffer);
-			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
-			pack32(0, buffer);
-			pack32(0, buffer);
 			pack32(NO_VAL, buffer);
+			pack_time(0, buffer);
+			pack_time(0, buffer);
 			pack32(NO_VAL, buffer);
 			pack16(0, buffer);
 			return;
 		}
-
 		if(object->acct_list)
 			count = list_count(object->acct_list);
 	
@@ -3994,24 +5974,12 @@ extern void pack_acct_job_cond(void *in, uint16_t rpc_version, Buf buffer)
 		}
 		count = NO_VAL;
 
-		if(object->associd_list)
-			count = list_count(object->associd_list);
-	
-		pack32(count, buffer);
-		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->associd_list);
-			while((tmp_info = list_next(itr))) {
-				packstr(tmp_info, buffer);
-			}
-		}
-		count = NO_VAL;
-
-		if(object->cluster_list)
-			count = list_count(object->cluster_list);
+		if(object->action_list)
+			count = list_count(object->action_list);
 	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->cluster_list);
+			itr = list_iterator_create(object->action_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
 			}
@@ -4019,94 +5987,92 @@ extern void pack_acct_job_cond(void *in, uint16_t rpc_version, Buf buffer)
 		}
 		count = NO_VAL;
 
-		pack16(object->duplicates, buffer);
+		if(object->actor_list) 
+			count = list_count(object->actor_list);
 
-		if(object->groupid_list)
-			count = list_count(object->groupid_list);
-	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->groupid_list);
+			itr = list_iterator_create(object->actor_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
 			}
+			list_iterator_destroy(itr); 
 		}
 		count = NO_VAL;
-	
-		if(object->partition_list)
-			count = list_count(object->partition_list);
-	
+
+		if(object->cluster_list)
+			count = list_count(object->cluster_list);
+	 
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->partition_list);
+			itr = list_iterator_create(object->cluster_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			}
+			} 
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
-		if(object->step_list)
-			count = list_count(object->step_list);
-	
+		if(object->id_list)
+			count = list_count(object->id_list);
+	 
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->step_list);
-			while((job = list_next(itr))) {
-				pack_jobacct_selected_step(job, rpc_version, 
-							   buffer);
-			}
+			itr = list_iterator_create(object->id_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			} 
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
-		if(object->state_list)
-			count = list_count(object->state_list);
-	
+		if(object->info_list)
+			count = list_count(object->info_list);
+	 
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->state_list);
+			itr = list_iterator_create(object->info_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			}
+			} 
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
-		pack32(object->usage_end, buffer);
-		pack32(object->usage_start, buffer);
-
-		if(object->userid_list)
-			count = list_count(object->userid_list);
-	
+		if(object->name_list)
+			count = list_count(object->name_list);
+	 
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->userid_list);
+			itr = list_iterator_create(object->name_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			}
+			} 
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
+		pack_time(object->time_end, buffer);
+		pack_time(object->time_start, buffer);
+		if(object->user_list)
+			count = list_count(object->user_list);
+	 
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->wckey_list);
+			itr = list_iterator_create(object->user_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			}
+			} 
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
-
-		pack16(object->without_steps, buffer);
-	} else {
+		
+		pack16(object->with_assoc_info, buffer);
+	} else if(rpc_version >= 3) {
 		if(!object) {
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
-			pack16(0, buffer);
-			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
@@ -4116,7 +6082,6 @@ extern void pack_acct_job_cond(void *in, uint16_t rpc_version, Buf buffer)
 			pack16(0, buffer);
 			return;
 		}
-
 		if(object->acct_list)
 			count = list_count(object->acct_list);
 	
@@ -4130,573 +6095,496 @@ extern void pack_acct_job_cond(void *in, uint16_t rpc_version, Buf buffer)
 		}
 		count = NO_VAL;
 
-		if(object->associd_list)
-			count = list_count(object->associd_list);
+		if(object->action_list)
+			count = list_count(object->action_list);
 	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->associd_list);
+			itr = list_iterator_create(object->action_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+
+		if(object->actor_list) 
+			count = list_count(object->actor_list);
+
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->actor_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
 			}
+			list_iterator_destroy(itr); 
 		}
 		count = NO_VAL;
 
 		if(object->cluster_list)
 			count = list_count(object->cluster_list);
-	
+	 
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
 			itr = list_iterator_create(object->cluster_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			}
+			} 
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
-		pack16(object->duplicates, buffer);
+		if(object->id_list)
+			count = list_count(object->id_list);
+	 
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->id_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			} 
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
 
-		if(object->groupid_list)
-			count = list_count(object->groupid_list);
-	
+		if(object->info_list)
+			count = list_count(object->info_list);
+	 
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->groupid_list);
+			itr = list_iterator_create(object->info_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			}
+			} 
+			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
-	
-		if(object->partition_list)
-			count = list_count(object->partition_list);
-	
+
+		if(object->name_list)
+			count = list_count(object->name_list);
+	 
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->partition_list);
+			itr = list_iterator_create(object->name_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			}
+			} 
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
-		if(object->step_list)
-			count = list_count(object->step_list);
-	
+		pack32(object->time_end, buffer);
+		pack32(object->time_start, buffer);
+		if(object->user_list)
+			count = list_count(object->user_list);
+	 
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->step_list);
-			while((job = list_next(itr))) {
-				pack_jobacct_selected_step(job, rpc_version,
-							   buffer);
+			itr = list_iterator_create(object->user_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			} 
+			list_iterator_destroy(itr);
+		}
+		count = NO_VAL;
+		
+		pack16(object->with_assoc_info, buffer);
+	} else {
+		if(!object) {
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(NO_VAL, buffer);
+			pack32(0, buffer);
+			pack32(0, buffer);
+			return;
+		}
+		if(object->action_list)
+			count = list_count(object->action_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->action_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
 			}
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
-		if(object->state_list)
-			count = list_count(object->state_list);
-	
+		if(object->actor_list) 
+			count = list_count(object->actor_list);
+
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->state_list);
+			itr = list_iterator_create(object->actor_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
 			}
-			list_iterator_destroy(itr);
+			list_iterator_destroy(itr); 
 		}
 		count = NO_VAL;
 
-		pack32(object->usage_end, buffer);
-		pack32(object->usage_start, buffer);
-
-		if(object->userid_list)
-			count = list_count(object->userid_list);
-	
+		if(object->id_list)
+			count = list_count(object->id_list);
+	 
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->userid_list);
+			itr = list_iterator_create(object->id_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			}
+			} 
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
-		pack16(object->without_steps, buffer);
-	}
+		pack32(object->time_end, buffer);
+		pack32(object->time_start, buffer);
+	} 
 }
 
-extern int unpack_acct_job_cond(void **object, uint16_t rpc_version, Buf buffer)
+extern int unpack_acct_txn_cond(void **object, uint16_t rpc_version, Buf buffer)
 {
 	uint32_t uint32_tmp;
 	int i;
 	uint32_t count;
-	acct_job_cond_t *object_ptr = xmalloc(sizeof(acct_job_cond_t));
+	acct_txn_cond_t *object_ptr = xmalloc(sizeof(acct_txn_cond_t));
 	char *tmp_info = NULL;
-	jobacct_selected_step_t *job = NULL;
 
 	*object = object_ptr;
-
-	if(rpc_version >= 4) {
+	if (rpc_version >= 5) {
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->acct_list = list_create(slurm_destroy_char);
+			object_ptr->acct_list =
+				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
 				list_append(object_ptr->acct_list, tmp_info);
 			}
 		}
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->associd_list =
+			object_ptr->action_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->associd_list, tmp_info);
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->action_list, tmp_info);
 			}
 		}
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->cluster_list =
+			object_ptr->actor_list = 
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->cluster_list, tmp_info);
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->actor_list, tmp_info);
 			}
 		}
 
-		safe_unpack16(&object_ptr->duplicates, buffer);
-
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->groupid_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
-						       buffer);
-				list_append(object_ptr->groupid_list, tmp_info);
-			}
-		}
-	
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->partition_list =
+			object_ptr->cluster_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info,
 						       &uint32_tmp, buffer);
-				list_append(object_ptr->partition_list, 
-					    tmp_info);
+				list_append(object_ptr->cluster_list, tmp_info);
 			}
 		}
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->step_list =
-				list_create(destroy_jobacct_selected_step);
+			object_ptr->id_list = list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				unpack_jobacct_selected_step(&job, rpc_version,
-							     buffer);
-				list_append(object_ptr->step_list, job);
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->id_list, tmp_info);
 			}
 		}
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->state_list =
+			object_ptr->info_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info,
 						       &uint32_tmp, buffer);
-				list_append(object_ptr->state_list, tmp_info);
+				list_append(object_ptr->info_list, tmp_info);
 			}
 		}
-	
-		safe_unpack32(&object_ptr->usage_end, buffer);
-		safe_unpack32(&object_ptr->usage_start, buffer);
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->userid_list = 
+			object_ptr->name_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->userid_list, tmp_info);
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->name_list, tmp_info);
 			}
 		}
 
+		safe_unpack_time(&object_ptr->time_end, buffer);
+		safe_unpack_time(&object_ptr->time_start, buffer);
+
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->wckey_list = 
+			object_ptr->user_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->wckey_list, tmp_info);
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->user_list, tmp_info);
 			}
 		}
 
-		safe_unpack16(&object_ptr->without_steps, buffer);
-	} else {
+		safe_unpack16(&object_ptr->with_assoc_info, buffer);
+	} else if (rpc_version >= 3) {
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->acct_list = list_create(slurm_destroy_char);
+			object_ptr->acct_list =
+				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
 				list_append(object_ptr->acct_list, tmp_info);
 			}
 		}
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->associd_list =
+			object_ptr->action_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->associd_list, tmp_info);
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->action_list, tmp_info);
 			}
 		}
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->cluster_list =
+			object_ptr->actor_list = 
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->cluster_list, tmp_info);
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->actor_list, tmp_info);
 			}
 		}
 
-		safe_unpack16(&object_ptr->duplicates, buffer);
-
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->groupid_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
-						       buffer);
-				list_append(object_ptr->groupid_list, tmp_info);
-			}
-		}
-	
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->partition_list =
+			object_ptr->cluster_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info,
 						       &uint32_tmp, buffer);
-				list_append(object_ptr->partition_list, 
-					    tmp_info);
+				list_append(object_ptr->cluster_list, tmp_info);
 			}
 		}
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->step_list =
-				list_create(destroy_jobacct_selected_step);
+			object_ptr->id_list = list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				unpack_jobacct_selected_step(&job, rpc_version,
-							     buffer);
-				list_append(object_ptr->step_list, job);
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->id_list, tmp_info);
 			}
 		}
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->state_list =
+			object_ptr->info_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
 				safe_unpackstr_xmalloc(&tmp_info,
 						       &uint32_tmp, buffer);
-				list_append(object_ptr->state_list, tmp_info);
+				list_append(object_ptr->info_list, tmp_info);
 			}
 		}
-	
-		safe_unpack32(&object_ptr->usage_end, buffer);
-		safe_unpack32(&object_ptr->usage_start, buffer);
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->userid_list = 
+			object_ptr->name_list =
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-						       buffer);
-				list_append(object_ptr->userid_list, tmp_info);
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->name_list, tmp_info);
 			}
 		}
 
-		safe_unpack16(&object_ptr->without_steps, buffer);
-	}
-
-	return SLURM_SUCCESS;
-
-unpack_error:
-	destroy_acct_job_cond(object_ptr);
-	*object = NULL;
-	return SLURM_ERROR;
-}
-
-extern void pack_acct_qos_cond(void *in, uint16_t rpc_version, Buf buffer)
-{
-	uint32_t count = NO_VAL;
-	char *tmp_info = NULL;
-	ListIterator itr = NULL;
-	acct_qos_cond_t *object = (acct_qos_cond_t *)in;
-
-	if(!object) {
-		pack32(NO_VAL, buffer);
-		pack32(NO_VAL, buffer);
-		pack32(NO_VAL, buffer);
-		pack16(0, buffer);
-		return;
-	}
-
-	if(object->description_list)
-		count = list_count(object->description_list);
-	
-	pack32(count, buffer);
-	if(count && count != NO_VAL) {
-		itr = list_iterator_create(object->description_list);
-		while((tmp_info = list_next(itr))) {
-			packstr(tmp_info, buffer);
-		}
-		list_iterator_destroy(itr);
-	}
-	count = NO_VAL;
-
-	if(object->id_list)
-		count = list_count(object->id_list);
-	
-	pack32(count, buffer);
-	if(count && count != NO_VAL) {
-		itr = list_iterator_create(object->id_list);
-		while((tmp_info = list_next(itr))) {
-			packstr(tmp_info, buffer);
-		}
-		list_iterator_destroy(itr);
-	}
-	count = NO_VAL;
-
-	if(object->name_list) 
-		count = list_count(object->name_list);
-
-	pack32(count, buffer);
-	if(count && count != NO_VAL) {
-		itr = list_iterator_create(object->name_list);
-		while((tmp_info = list_next(itr))) {
-			packstr(tmp_info, buffer);
-		}
-		list_iterator_destroy(itr); 
-	}
-	count = NO_VAL;
-
-	pack16(object->with_deleted, buffer);
-}
-
-extern int unpack_acct_qos_cond(void **object, uint16_t rpc_version, Buf buffer)
-{
-	uint32_t uint32_tmp;
-	int i;
-	uint32_t count;
-	acct_qos_cond_t *object_ptr = xmalloc(sizeof(acct_qos_cond_t));
-	char *tmp_info = NULL;
-
-	*object = object_ptr;
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->time_end = uint32_tmp;
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->time_start = uint32_tmp;
 
-	safe_unpack32(&count, buffer);
-	if(count != NO_VAL) {
-		object_ptr->description_list = list_create(slurm_destroy_char);
-		for(i=0; i<count; i++) {
-			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
-			list_append(object_ptr->description_list, tmp_info);
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->user_list =
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->user_list, tmp_info);
+			}
 		}
-	}
 
-	safe_unpack32(&count, buffer);
-	if(count != NO_VAL) {
-		object_ptr->id_list = list_create(slurm_destroy_char);
-		for(i=0; i<count; i++) {
-			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
-			list_append(object_ptr->id_list, tmp_info);
+		safe_unpack16(&object_ptr->with_assoc_info, buffer);
+	} else {
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->action_list =
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->action_list, tmp_info);
+			}
 		}
-	}
 
-	safe_unpack32(&count, buffer);
-	if(count != NO_VAL) {
-		object_ptr->name_list = list_create(slurm_destroy_char);
-		for(i=0; i<count; i++) {
-			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, buffer);
-			list_append(object_ptr->name_list, tmp_info);
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->actor_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->actor_list, tmp_info);
+			}
+		}
+
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->id_list = list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info,
+						       &uint32_tmp, buffer);
+				list_append(object_ptr->id_list, tmp_info);
+			}
 		}
+
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->time_end = uint32_tmp;
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->time_start = uint32_tmp;
 	}
 
-	safe_unpack16(&object_ptr->with_deleted, buffer);
 	return SLURM_SUCCESS;
 
 unpack_error:
-	destroy_acct_qos_cond(object_ptr);
+	destroy_acct_txn_cond(object_ptr);
 	*object = NULL;
 	return SLURM_ERROR;
 }
 
-extern void pack_acct_txn_cond(void *in, uint16_t rpc_version, Buf buffer)
+extern void pack_acct_wckey_cond(void *in, uint16_t rpc_version, Buf buffer)
 {
-	uint32_t count = NO_VAL;
 	char *tmp_info = NULL;
-	ListIterator itr = NULL;
-	acct_txn_cond_t *object = (acct_txn_cond_t *)in;
+	uint32_t count = NO_VAL;
 
-	if(rpc_version >= 3) {
+	ListIterator itr = NULL;
+	acct_wckey_cond_t *object = (acct_wckey_cond_t *)in;
+	if(rpc_version >= 5) {
 		if(!object) {
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
-			pack32(NO_VAL, buffer);
-			pack32(NO_VAL, buffer);
-			pack32(NO_VAL, buffer);
-			pack32(0, buffer);
-			pack32(0, buffer);
-			pack32(NO_VAL, buffer);
-			pack16(0, buffer);
-			return;
-		}
-		if(object->acct_list)
-			count = list_count(object->acct_list);
-	
-		pack32(count, buffer);
-		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->acct_list);
-			while((tmp_info = list_next(itr))) {
-				packstr(tmp_info, buffer);
-			}
-			list_iterator_destroy(itr);
-		}
-		count = NO_VAL;
 
-		if(object->action_list)
-			count = list_count(object->action_list);
-	
-		pack32(count, buffer);
-		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->action_list);
-			while((tmp_info = list_next(itr))) {
-				packstr(tmp_info, buffer);
-			}
-			list_iterator_destroy(itr);
-		}
-		count = NO_VAL;
+			pack_time(0, buffer);
+			pack_time(0, buffer);
 
-		if(object->actor_list) 
-			count = list_count(object->actor_list);
+			pack32(NO_VAL, buffer);
 
-		pack32(count, buffer);
-		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->actor_list);
-			while((tmp_info = list_next(itr))) {
-				packstr(tmp_info, buffer);
-			}
-			list_iterator_destroy(itr); 
+			pack16(0, buffer);
+			pack16(0, buffer);
+			return;
 		}
-		count = NO_VAL;
 
 		if(object->cluster_list)
 			count = list_count(object->cluster_list);
-	 
+	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
 			itr = list_iterator_create(object->cluster_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			} 
+			}
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
 		if(object->id_list)
 			count = list_count(object->id_list);
-	 
+	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
 			itr = list_iterator_create(object->id_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			} 
-			list_iterator_destroy(itr);
-		}
-		count = NO_VAL;
-
-		if(object->info_list)
-			count = list_count(object->info_list);
-	 
-		pack32(count, buffer);
-		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->info_list);
-			while((tmp_info = list_next(itr))) {
-				packstr(tmp_info, buffer);
-			} 
-			list_iterator_destroy(itr);
+			}
 		}
 		count = NO_VAL;
 
 		if(object->name_list)
 			count = list_count(object->name_list);
-	 
+	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
 			itr = list_iterator_create(object->name_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			} 
+			}
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
-		pack32(object->time_end, buffer);
-		pack32(object->time_start, buffer);
+		pack_time(object->usage_end, buffer);
+		pack_time(object->usage_start, buffer);
+
 		if(object->user_list)
 			count = list_count(object->user_list);
-	 
+	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
 			itr = list_iterator_create(object->user_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			} 
+			}
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
-		
-		pack16(object->with_assoc_info, buffer);
+
+		pack16(object->with_usage, buffer);
+		pack16(object->with_deleted, buffer);
 	} else {
 		if(!object) {
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
+
 			pack32(0, buffer);
 			pack32(0, buffer);
+
+			pack32(NO_VAL, buffer);
+
+			pack16(0, buffer);
+			pack16(0, buffer);
 			return;
 		}
-		if(object->action_list)
-			count = list_count(object->action_list);
+
+		if(object->cluster_list)
+			count = list_count(object->cluster_list);
 	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->action_list);
+			itr = list_iterator_create(object->cluster_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
 			}
@@ -4704,88 +6592,73 @@ extern void pack_acct_txn_cond(void *in, uint16_t rpc_version, Buf buffer)
 		}
 		count = NO_VAL;
 
-		if(object->actor_list) 
-			count = list_count(object->actor_list);
+		if(object->id_list)
+			count = list_count(object->id_list);
+	
+		pack32(count, buffer);
+		if(count && count != NO_VAL) {
+			itr = list_iterator_create(object->id_list);
+			while((tmp_info = list_next(itr))) {
+				packstr(tmp_info, buffer);
+			}
+		}
+		count = NO_VAL;
 
+		if(object->name_list)
+			count = list_count(object->name_list);
+	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->actor_list);
+			itr = list_iterator_create(object->name_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
 			}
-			list_iterator_destroy(itr); 
+			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
-		if(object->id_list)
-			count = list_count(object->id_list);
-	 
+		pack32(object->usage_end, buffer);
+		pack32(object->usage_start, buffer);
+
+		if(object->user_list)
+			count = list_count(object->user_list);
+	
 		pack32(count, buffer);
 		if(count && count != NO_VAL) {
-			itr = list_iterator_create(object->id_list);
+			itr = list_iterator_create(object->user_list);
 			while((tmp_info = list_next(itr))) {
 				packstr(tmp_info, buffer);
-			} 
+			}
 			list_iterator_destroy(itr);
 		}
 		count = NO_VAL;
 
-		pack32(object->time_end, buffer);
-		pack32(object->time_start, buffer);
-	} 
+		pack16(object->with_usage, buffer);
+		pack16(object->with_deleted, buffer);
+	}
 }
 
-extern int unpack_acct_txn_cond(void **object, uint16_t rpc_version, Buf buffer)
+extern int unpack_acct_wckey_cond(void **object, uint16_t rpc_version,
+				  Buf buffer)
 {
 	uint32_t uint32_tmp;
 	int i;
 	uint32_t count;
-	acct_txn_cond_t *object_ptr = xmalloc(sizeof(acct_txn_cond_t));
-	char *tmp_info = NULL;
-
-	*object = object_ptr;
-	if (rpc_version >= 3) {
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->acct_list =
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
-				list_append(object_ptr->acct_list, tmp_info);
-			}
-		}
-
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->action_list =
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
-				list_append(object_ptr->action_list, tmp_info);
-			}
-		}
-
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->actor_list = 
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
-				list_append(object_ptr->actor_list, tmp_info);
-			}
-		}
+	acct_wckey_cond_t *object_ptr =	xmalloc(sizeof(acct_wckey_cond_t));
+	char *tmp_info = NULL;
+
+	*object = object_ptr;
 
+	if(rpc_version >= 5) {
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->cluster_list =
+			object_ptr->cluster_list = 
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
-				list_append(object_ptr->cluster_list, tmp_info);
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->cluster_list, 
+					    tmp_info);
 			}
 		}
 
@@ -4793,236 +6666,92 @@ extern int unpack_acct_txn_cond(void **object, uint16_t rpc_version, Buf buffer)
 		if(count != NO_VAL) {
 			object_ptr->id_list = list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
+						       buffer);
 				list_append(object_ptr->id_list, tmp_info);
 			}
 		}
-
-		safe_unpack32(&count, buffer);
-		if(count != NO_VAL) {
-			object_ptr->info_list =
-				list_create(slurm_destroy_char);
-			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
-				list_append(object_ptr->info_list, tmp_info);
-			}
-		}
-
+	
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->name_list =
+			object_ptr->name_list = 
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
 				list_append(object_ptr->name_list, tmp_info);
 			}
 		}
 
-		safe_unpack32(&object_ptr->time_end, buffer);
-		safe_unpack32(&object_ptr->time_start, buffer);
+		safe_unpack_time(&object_ptr->usage_end, buffer);
+		safe_unpack_time(&object_ptr->usage_start, buffer);
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->user_list =
+			object_ptr->user_list = 
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
 				list_append(object_ptr->user_list, tmp_info);
 			}
 		}
 
-		safe_unpack16(&object_ptr->with_assoc_info, buffer);
+		safe_unpack16(&object_ptr->with_usage, buffer);
+		safe_unpack16(&object_ptr->with_deleted, buffer);
 	} else {
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->action_list =
+			object_ptr->cluster_list = 
 				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
-				list_append(object_ptr->action_list, tmp_info);
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->cluster_list, 
+					    tmp_info);
 			}
 		}
 
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->actor_list = 
-				list_create(slurm_destroy_char);
+			object_ptr->id_list = list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
-				list_append(object_ptr->actor_list, tmp_info);
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
+						       buffer);
+				list_append(object_ptr->id_list, tmp_info);
 			}
 		}
-
+	
 		safe_unpack32(&count, buffer);
 		if(count != NO_VAL) {
-			object_ptr->id_list = list_create(slurm_destroy_char);
+			object_ptr->name_list = 
+				list_create(slurm_destroy_char);
 			for(i=0; i<count; i++) {
-				safe_unpackstr_xmalloc(&tmp_info,
-						       &uint32_tmp, buffer);
-				list_append(object_ptr->id_list, tmp_info);
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->name_list, tmp_info);
 			}
 		}
 
-		safe_unpack32(&object_ptr->time_end, buffer);
-		safe_unpack32(&object_ptr->time_start, buffer);
-	} 
-
-	return SLURM_SUCCESS;
-
-unpack_error:
-	destroy_acct_txn_cond(object_ptr);
-	*object = NULL;
-	return SLURM_ERROR;
-}
-
-extern void pack_acct_wckey_cond(void *in, uint16_t rpc_version, Buf buffer)
-{
-	char *tmp_info = NULL;
-	uint32_t count = NO_VAL;
-
-	ListIterator itr = NULL;
-	acct_wckey_cond_t *object = (acct_wckey_cond_t *)in;
-
-	if(!object) {
-		pack32(NO_VAL, buffer);
-		pack32(NO_VAL, buffer);
-
-		pack32(NO_VAL, buffer);
-		pack32(NO_VAL, buffer);
-
-		pack32(NO_VAL, buffer);
-		pack32(NO_VAL, buffer);
-
-		pack16(0, buffer);
-		pack16(0, buffer);
-		return;
-	}
-
-	if(object->cluster_list)
-		count = list_count(object->cluster_list);
-	
-	pack32(count, buffer);
-	if(count && count != NO_VAL) {
-		itr = list_iterator_create(object->cluster_list);
-		while((tmp_info = list_next(itr))) {
-			packstr(tmp_info, buffer);
-		}
-		list_iterator_destroy(itr);
-	}
-	count = NO_VAL;
-
-	if(object->id_list)
-		count = list_count(object->id_list);
-	
-	pack32(count, buffer);
-	if(count && count != NO_VAL) {
-		itr = list_iterator_create(object->id_list);
-		while((tmp_info = list_next(itr))) {
-			packstr(tmp_info, buffer);
-		}
-	}
-	count = NO_VAL;
-
-	if(object->name_list)
-		count = list_count(object->name_list);
-	
-	pack32(count, buffer);
-	if(count && count != NO_VAL) {
-		itr = list_iterator_create(object->name_list);
-		while((tmp_info = list_next(itr))) {
-			packstr(tmp_info, buffer);
-		}
-		list_iterator_destroy(itr);
-	}
-	count = NO_VAL;
-
-	pack32(object->usage_end, buffer);
-	pack32(object->usage_start, buffer);
-
-	if(object->user_list)
-		count = list_count(object->user_list);
-	
-	pack32(count, buffer);
-	if(count && count != NO_VAL) {
-		itr = list_iterator_create(object->user_list);
-		while((tmp_info = list_next(itr))) {
-			packstr(tmp_info, buffer);
-		}
-		list_iterator_destroy(itr);
-	}
-	count = NO_VAL;
-
-	pack16(object->with_usage, buffer);
-	pack16(object->with_deleted, buffer);
-}
-
-extern int unpack_acct_wckey_cond(void **object, uint16_t rpc_version,
-				  Buf buffer)
-{
-	uint32_t uint32_tmp;
-	int i;
-	uint32_t count;
-	acct_wckey_cond_t *object_ptr =	xmalloc(sizeof(acct_wckey_cond_t));
-	char *tmp_info = NULL;
-
-	*object = object_ptr;
-
-	safe_unpack32(&count, buffer);
-	if(count != NO_VAL) {
-		object_ptr->cluster_list = 
-			list_create(slurm_destroy_char);
-		for(i=0; i<count; i++) {
-			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-					       buffer);
-			list_append(object_ptr->cluster_list, 
-				    tmp_info);
-		}
-	}
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_end = uint32_tmp;
+		safe_unpack32(&uint32_tmp, buffer);
+		object_ptr->usage_start = uint32_tmp;
 
-	safe_unpack32(&count, buffer);
-	if(count != NO_VAL) {
-		object_ptr->id_list = list_create(slurm_destroy_char);
-		for(i=0; i<count; i++) {
-			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp, 
-					       buffer);
-			list_append(object_ptr->id_list, tmp_info);
-		}
-	}
-	
-	safe_unpack32(&count, buffer);
-	if(count != NO_VAL) {
-		object_ptr->name_list = 
-			list_create(slurm_destroy_char);
-		for(i=0; i<count; i++) {
-			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-					       buffer);
-			list_append(object_ptr->name_list, tmp_info);
+		safe_unpack32(&count, buffer);
+		if(count != NO_VAL) {
+			object_ptr->user_list = 
+				list_create(slurm_destroy_char);
+			for(i=0; i<count; i++) {
+				safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
+						       buffer);
+				list_append(object_ptr->user_list, tmp_info);
+			}
 		}
-	}
-
-	safe_unpack32(&object_ptr->usage_end, buffer);
-	safe_unpack32(&object_ptr->usage_start, buffer);
 
-	safe_unpack32(&count, buffer);
-	if(count != NO_VAL) {
-		object_ptr->user_list = 
-			list_create(slurm_destroy_char);
-		for(i=0; i<count; i++) {
-			safe_unpackstr_xmalloc(&tmp_info, &uint32_tmp,
-					       buffer);
-			list_append(object_ptr->user_list, tmp_info);
-		}
+		safe_unpack16(&object_ptr->with_usage, buffer);
+		safe_unpack16(&object_ptr->with_deleted, buffer);
 	}
-
-	safe_unpack16(&object_ptr->with_usage, buffer);
-	safe_unpack16(&object_ptr->with_deleted, buffer);
-
 	return SLURM_SUCCESS;
 
 unpack_error:
@@ -5038,21 +6767,29 @@ extern void pack_acct_archive_cond(void *in, uint16_t rpc_version, Buf buffer)
 	if(!object) {
 		packnull(buffer);
 		pack16((uint16_t)NO_VAL, buffer);
+		pack16((uint16_t)NO_VAL, buffer);
 		packnull(buffer);
 		pack16((uint16_t)NO_VAL, buffer);
+		pack16((uint16_t)NO_VAL, buffer);
 		pack_acct_job_cond(NULL, rpc_version, buffer);
 		pack16((uint16_t)NO_VAL, buffer);
 		pack16((uint16_t)NO_VAL, buffer);
+		pack16((uint16_t)NO_VAL, buffer);
+		pack16((uint16_t)NO_VAL, buffer);
 		return;
 	}
 
 	packstr(object->archive_dir, buffer);
+	pack16(object->archive_events, buffer);
 	pack16(object->archive_jobs, buffer);
 	packstr(object->archive_script, buffer);
 	pack16(object->archive_steps, buffer);
+	pack16(object->archive_suspend, buffer);
 	pack_acct_job_cond(object->job_cond, rpc_version, buffer);
-	pack16(object->job_purge, buffer);
-	pack16(object->step_purge, buffer);
+	pack16(object->purge_event, buffer);
+	pack16(object->purge_job, buffer);
+	pack16(object->purge_step, buffer);
+	pack16(object->purge_suspend, buffer);
 }
 
 extern int unpack_acct_archive_cond(void **object, uint16_t rpc_version,
@@ -5065,15 +6802,19 @@ extern int unpack_acct_archive_cond(void **object, uint16_t rpc_version,
 	*object = object_ptr;
 
 	safe_unpackstr_xmalloc(&object_ptr->archive_dir, &uint32_tmp, buffer);
+	safe_unpack16(&object_ptr->archive_events, buffer);
 	safe_unpack16(&object_ptr->archive_jobs, buffer);
 	safe_unpackstr_xmalloc(&object_ptr->archive_script,
 			       &uint32_tmp, buffer);
 	safe_unpack16(&object_ptr->archive_steps, buffer);
+	safe_unpack16(&object_ptr->archive_suspend, buffer);
 	if(unpack_acct_job_cond((void *)&object_ptr->job_cond,
 				rpc_version, buffer) == SLURM_ERROR)
 		goto unpack_error;
-	safe_unpack16(&object_ptr->job_purge, buffer);
-	safe_unpack16(&object_ptr->step_purge, buffer);
+	safe_unpack16(&object_ptr->purge_event, buffer);
+	safe_unpack16(&object_ptr->purge_job, buffer);
+	safe_unpack16(&object_ptr->purge_step, buffer);
+	safe_unpack16(&object_ptr->purge_suspend, buffer);
 
 	return SLURM_SUCCESS;
 
@@ -5401,8 +7142,7 @@ extern List get_acct_hierarchical_rec_list(List assoc_list)
 }
 
 /* IN/OUT: tree_list a list of acct_print_tree_t's */ 
-extern char *get_tree_acct_name(char *name, char *parent, char *cluster, 
-				List tree_list)
+extern char *get_tree_acct_name(char *name, char *parent, List tree_list)
 {
 	ListIterator itr = NULL;
 	acct_print_tree_t *acct_print_tree = NULL;
@@ -5499,22 +7239,86 @@ extern char *get_qos_complete_str(List qos_list, List num_qos_list)
 	return print_this;
 }
 
+extern char *get_classification_str(uint16_t class)
+{
+	bool classified = class & ACCT_CLASSIFIED_FLAG;
+	acct_classification_type_t type = class & ACCT_CLASS_BASE;
+
+	switch(type) {
+	case ACCT_CLASS_NONE:
+		return NULL;
+		break;
+	case ACCT_CLASS_CAPACITY:
+		if(classified)
+			return "*Capacity";
+		else
+			return "Capacity";
+		break;
+	case ACCT_CLASS_CAPABILITY:
+		if(classified)
+			return "*Capability";
+		else
+			return "Capability";
+		break;
+	case ACCT_CLASS_CAPAPACITY:
+		if(classified)
+			return "*Capapacity";
+		else
+			return "Capapacity";
+		break;
+	default:
+		if(classified)
+			return "*Unknown";
+		else
+			return "Unknown";
+		break;
+	}
+}
+
+extern uint16_t str_2_classification(char *class)
+{
+	uint16_t type = 0;
+	if(!class)
+		return type;
+
+	if(slurm_strcasestr(class, "capac"))
+		type = ACCT_CLASS_CAPACITY;
+	else if(slurm_strcasestr(class, "capab"))
+		type = ACCT_CLASS_CAPABILITY;
+	else if(slurm_strcasestr(class, "capap"))
+		type = ACCT_CLASS_CAPAPACITY;
+	
+	if(slurm_strcasestr(class, "*")) 
+		type |= ACCT_CLASSIFIED_FLAG; 
+	else if(slurm_strcasestr(class, "class")) 
+		type |= ACCT_CLASSIFIED_FLAG;
+	
+	return type;
+}
 
 extern void log_assoc_rec(acct_association_rec_t *assoc_ptr, List qos_list)
 {
+	xassert(assoc_ptr);
+
 	debug2("association rec id : %u", assoc_ptr->id);
 	debug2("  acct             : %s", assoc_ptr->acct);
 	debug2("  cluster          : %s", assoc_ptr->cluster);
 
-	if(assoc_ptr->fairshare == INFINITE)
-		debug2("  Fairshare        : NONE");
-	else if(assoc_ptr->fairshare != NO_VAL) 
-		debug2("  Fairshare        : %u", assoc_ptr->fairshare);
+	if(assoc_ptr->shares_raw == INFINITE)
+		debug2("  RawShares        : NONE");
+	else if(assoc_ptr->shares_raw != NO_VAL) 
+		debug2("  RawShares        : %u", assoc_ptr->shares_raw);
+
+	if(assoc_ptr->shares_norm != (double)NO_VAL) 
+		debug2("  NormalizedShares : %f", assoc_ptr->shares_norm);
+
+	if(assoc_ptr->level_shares != NO_VAL) 
+		debug2("  LevelShares      : %u", assoc_ptr->level_shares);
 
 	if(assoc_ptr->grp_cpu_mins == INFINITE)
-		debug2("  GrpCPUMins      : NONE");
+		debug2("  GrpCPUMins       : NONE");
 	else if(assoc_ptr->grp_cpu_mins != NO_VAL) 
-		debug2("  GrpCPUMins      : %llu", assoc_ptr->grp_cpu_mins);
+		debug2("  GrpCPUMins       : %llu", assoc_ptr->grp_cpu_mins);
 		
 	if(assoc_ptr->grp_cpus == INFINITE)
 		debug2("  GrpCPUs          : NONE");
@@ -5591,14 +7395,14 @@ extern void log_assoc_rec(acct_association_rec_t *assoc_ptr, List qos_list)
 	}
 
 	if(assoc_ptr->parent_acct)
-		debug2("  parent_acct      : %s", assoc_ptr->parent_acct);
+		debug2("  ParentAccount    : %s", assoc_ptr->parent_acct);
 	if(assoc_ptr->partition)
-		debug2("  partition        : %s", assoc_ptr->partition);
+		debug2("  Partition        : %s", assoc_ptr->partition);
 	if(assoc_ptr->user)
-		debug2("  user             : %s(%u)",
+		debug2("  User             : %s(%u)",
 		       assoc_ptr->user, assoc_ptr->uid);
-	debug2("  used_jobs        : %u", assoc_ptr->used_jobs);
-	debug2("  used_shares      : %u", assoc_ptr->used_shares);
+	debug2("  UsedJobs        : %u", assoc_ptr->used_jobs);
+	debug2("  RawUsage        : %Lf", assoc_ptr->usage_raw);
 }
 
 /*
@@ -5741,6 +7545,15 @@ extern int acct_storage_g_add_wckeys(void *db_conn, uint32_t uid,
 		(db_conn, uid, wckey_list);
 }
 
+extern int acct_storage_g_add_reservation(void *db_conn,
+					   acct_reservation_rec_t *resv)
+{
+	if (slurm_acct_storage_init(NULL) < 0)
+		return NO_VAL;
+	return (*(g_acct_storage_context->ops.add_reservation))
+		(db_conn, resv);
+}
+
 extern List acct_storage_g_modify_users(void *db_conn, uint32_t uid,
 					acct_user_cond_t *user_cond,
 					acct_user_rec_t *user)
@@ -5802,6 +7615,15 @@ extern List acct_storage_g_modify_wckeys(void *db_conn, uint32_t uid,
 		(db_conn, uid, wckey_cond, wckey);
 }
 
+extern int acct_storage_g_modify_reservation(void *db_conn,
+					   acct_reservation_rec_t *resv)
+{
+	if (slurm_acct_storage_init(NULL) < 0)
+		return NO_VAL;
+	return (*(g_acct_storage_context->ops.modify_reservation))
+		(db_conn, resv);
+}
+
 extern List acct_storage_g_remove_users(void *db_conn, uint32_t uid,
 					acct_user_cond_t *user_cond)
 {
@@ -5867,6 +7689,15 @@ extern List acct_storage_g_remove_wckeys(void *db_conn, uint32_t uid,
 		(db_conn, uid, wckey_cond);
 }
 
+extern int acct_storage_g_remove_reservation(void *db_conn,
+					     acct_reservation_rec_t *resv)
+{
+	if (slurm_acct_storage_init(NULL) < 0)
+		return NO_VAL;
+	return (*(g_acct_storage_context->ops.remove_reservation))
+		(db_conn, resv);
+}
+
 extern List acct_storage_g_get_users(void *db_conn, uint32_t uid,
 				     acct_user_cond_t *user_cond)
 {
@@ -5894,6 +7725,13 @@ extern List acct_storage_g_get_clusters(void *db_conn, uint32_t uid,
 		(db_conn, uid, cluster_cond);
 }
 
+extern List acct_storage_g_get_config(void *db_conn)
+{
+	if (slurm_acct_storage_init(NULL) < 0)
+		return NULL;
+	return (*(g_acct_storage_context->ops.get_config))(db_conn);
+}
+
 extern List acct_storage_g_get_associations(void *db_conn, uint32_t uid,
 					    acct_association_cond_t *assoc_cond)
 {
@@ -5920,6 +7758,15 @@ extern List acct_storage_g_get_wckeys(void *db_conn, uint32_t uid,
 							   wckey_cond);
 }
 
+extern List acct_storage_g_get_reservations(void *db_conn, uint32_t uid, 
+				      acct_reservation_cond_t *resv_cond)
+{
+	if (slurm_acct_storage_init(NULL) < 0)
+		return NULL;
+	return (*(g_acct_storage_context->ops.get_resvs))(db_conn, uid,
+							  resv_cond);
+}
+
 extern List acct_storage_g_get_txn(void *db_conn,  uint32_t uid, 
 				   acct_txn_cond_t *txn_cond)
 {
@@ -5939,11 +7786,13 @@ extern int acct_storage_g_get_usage(void *db_conn,  uint32_t uid,
 }
 
 extern int acct_storage_g_roll_usage(void *db_conn, 
-				     time_t sent_start)
+				     time_t sent_start, time_t sent_end,
+				     uint16_t archive_data)
 {
 	if (slurm_acct_storage_init(NULL) < 0)
 		return SLURM_ERROR;
-	return (*(g_acct_storage_context->ops.roll_usage))(db_conn, sent_start);
+	return (*(g_acct_storage_context->ops.roll_usage))
+		(db_conn, sent_start, sent_end, archive_data);
 }
 
 extern int clusteracct_storage_g_node_down(void *db_conn,
@@ -5972,13 +7821,14 @@ extern int clusteracct_storage_g_node_up(void *db_conn,
 
 extern int clusteracct_storage_g_cluster_procs(void *db_conn,
 					       char *cluster,
+					       char *cluster_nodes,
 					       uint32_t procs,
 					       time_t event_time)
 {
 	if (slurm_acct_storage_init(NULL) < 0)
 		return SLURM_ERROR;
  	return (*(g_acct_storage_context->ops.cluster_procs))
-		(db_conn, cluster, procs, event_time);
+		(db_conn, cluster, cluster_nodes, procs, event_time);
 }
 
 
diff --git a/src/common/slurm_accounting_storage.h b/src/common/slurm_accounting_storage.h
index af73d80e5..24b1df9c8 100644
--- a/src/common/slurm_accounting_storage.h
+++ b/src/common/slurm_accounting_storage.h
@@ -2,13 +2,14 @@
  *  slurm_accounting_storage.h - Define accounting storage plugin functions.
  *****************************************************************************
  *  Copyright (C) 2004-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 Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -71,6 +72,17 @@ typedef enum {
 	ACCT_MODIFY_WCKEY,
 } acct_update_type_t;
 
+typedef enum {
+	ACCT_CLASS_NONE, /* no class given */
+	ACCT_CLASS_CAPABILITY, /* capability cluster */
+	ACCT_CLASS_CAPACITY, /* capacity cluster */
+	ACCT_CLASS_CAPAPACITY, /* a cluster that is both capability
+				* and capacity */
+} acct_classification_type_t;
+
+#define ACCT_CLASSIFIED_FLAG 0x0100
+#define ACCT_CLASS_BASE      0x00ff
+
 /* Association conditions used for queries of the database */
 typedef struct {
 	List acct_list;		/* list of char * */
@@ -99,8 +111,8 @@ typedef struct {
 
 	List qos_list; /* list of char * */	
 
-	uint32_t usage_end; 
-	uint32_t usage_start; 
+	time_t usage_end; 
+	time_t usage_start; 
 
 	List user_list;		/* list of char * */
 
@@ -134,51 +146,47 @@ typedef struct {
 typedef struct {
 	uint64_t alloc_secs; /* number of cpu seconds allocated */
 	uint32_t id;	/* association/wckey ID		*/
-	time_t period_start; 
+	time_t period_start; /* when this record was started */
 } acct_accounting_rec_t;
 
 typedef struct acct_association_rec {
 	List accounting_list; 	/* list of acct_accounting_rec_t *'s */
 	char *acct;		/* account/project associated to association */
+	List childern_list;     /* list of childern associations
+				 * (DON'T PACK) */
 	char *cluster;		/* cluster associated to association
 				 * */
 
-	uint32_t fairshare;	/* fairshare number */
-
-	uint64_t grp_cpu_mins; /* max number of cpu hours the
-				     * underlying group of
-				     * associations can run for */
+	uint64_t grp_cpu_mins; /* max number of cpu minutes the
+				* underlying group of
+				* associations can run for */
 	uint32_t grp_cpus; /* max number of cpus the
-				* underlying group of 
-				* associations can allocate at one time */
+			    * underlying group of 
+			    * associations can allocate at one time */
 	uint32_t grp_jobs;	/* max number of jobs the
 				 * underlying group of associations can run
 				 * at one time */
 	uint32_t grp_nodes; /* max number of nodes the
-				 * underlying group of
-				 * associations can allocate at once */
+			     * underlying group of
+			     * associations can allocate at once */
 	uint32_t grp_submit_jobs; /* max number of jobs the
-				       * underlying group of
-				       * associations can submit at
-				       * one time */
+				   * underlying group of
+				   * associations can submit at
+				   * one time */
 	uint32_t grp_wall; /* total time in hours the 
 			    * underlying group of
 			    * associations can run for */
-
-	uint32_t grp_used_cpu_mins; /* cpu mins the
-				      * underlying group of
-				      * associations has ran for 
-				      * (DON'T PACK) */
+	
 	uint32_t grp_used_cpus; /* count of active jobs in the group
 				 * (DON'T PACK) */
 	uint32_t grp_used_nodes; /* count of active jobs in the group
 				  * (DON'T PACK) */
-	uint32_t grp_used_wall; /* group count of time used in
-				     * running jobs (DON'T PACK) */
+	double grp_used_wall;   /* group count of time used in
+				 * running jobs (DON'T PACK) */
 	
 	uint32_t id;		/* id identifing a combination of
 				 * user-account-cluster(-partition) */
-
+	
 	uint32_t level_shares;  /* number of shares on this level of
 				 * the tree (DON'T PACK) */
 	
@@ -189,11 +197,11 @@ typedef struct acct_association_rec {
 	uint64_t max_cpu_mins_pj; /* max number of cpu seconds this 
 				   * association can have per job */
 	uint32_t max_cpus_pj; /* max number of cpus this 
-				    * association can allocate per job */
+			       * association can allocate per job */
 	uint32_t max_jobs;	/* max number of jobs this association can run
 				 * at one time */
 	uint32_t max_nodes_pj; /* max number of nodes this
-				     * association can allocate per job */
+				* association can allocate per job */
 	uint32_t max_submit_jobs; /* max number of jobs that can be
 				     submitted by association */
 	uint32_t max_wall_pj; /* longest time this
@@ -207,16 +215,23 @@ typedef struct acct_association_rec {
 	uint32_t parent_id;	/* id of parent account */
 	char *partition;	/* optional partition in a cluster 
 				 * associated to association */
-
+	
 	List qos_list;          /* list of char * */
-
+	
 	uint32_t rgt;		/* rgt used for grouping sub
 				 * associations and jobs as a right
 				 * most container used with lft */
+
+	double shares_norm;     /* normalized shares (DON'T PACK) */
+	uint32_t shares_raw;	/* number of shares allocated to association */
+
 	uint32_t uid;		/* user ID */
 	
+	long double usage_efctv;/* effective, normalized usage (DON'T PACK) */
+	long double usage_norm;	/* normalized usage (DON'T PACK) */
+	long double usage_raw;	/* measure of resource usage (DON'T PACK) */
+
 	uint32_t used_jobs;	/* count of active jobs (DON'T PACK) */
-	uint32_t used_shares;	/* measure of resource usage */
 	uint32_t used_submit_jobs; /* count of jobs pending or running
 				    * (DON'T PACK) */
 	
@@ -224,22 +239,23 @@ typedef struct acct_association_rec {
 } acct_association_rec_t;
 
 typedef struct {
+	uint16_t classification; /* how this machine is classified */
 	List cluster_list; /* list of char * */
-	uint32_t usage_end; 
-	uint32_t usage_start; 
+	time_t usage_end; 
+	time_t usage_start; 
 	uint16_t with_deleted; 
 	uint16_t with_usage; 
 } acct_cluster_cond_t;
 
 typedef struct {
 	List accounting_list; /* list of cluster_accounting_rec_t *'s */
+	uint16_t classification; /* how this machine is classified */
 	char *control_host;
 	uint32_t control_port;
+	uint32_t cpu_count;
 	char *name;
-
-	List valid_qos_list;
+	char *nodes;
 	acct_association_rec_t *root_assoc; /* root association for cluster */
-
 	uint16_t rpc_version; /* version of rpc this cluter is running */
 } acct_cluster_rec_t;
 
@@ -255,13 +271,20 @@ typedef struct {
 	uint16_t duplicates;    /* report duplicate job entries */
 	List groupid_list;	/* list of char * */
 	List partition_list;	/* list of char * */
+	List resv_list;		/* list of char * */
+	List resvid_list;	/* list of char * */
 	List step_list;         /* list of jobacct_selected_step_t */
 	List state_list;        /* list of char * */
-	uint32_t usage_end; 
-	uint32_t usage_start; 
+	time_t usage_end; 
+	time_t usage_start; 
+	char *used_nodes;       /* a ranged node string where jobs ran */
 	List userid_list;		/* list of char * */
 	List wckey_list;		/* list of char * */
 	uint16_t without_steps; /* don't give me step info */
+	uint16_t without_usage_truncation; /* give me the information
+					    * without truncating the
+					    * time to the usage_start
+					    * and usage_end */
 } acct_job_cond_t;
 
 typedef struct {
@@ -284,8 +307,6 @@ typedef struct {
 				   * one time */
 	uint32_t grp_wall; /* total time in hours this qos can run for */
 
-	uint32_t grp_used_cpu_mins; /* cpu hours this qos has ran for 
-				      * (DON'T PACK) */
 	uint32_t grp_used_cpus; /* count of cpus in use in this qos
 				 * (DON'T PACK) */
 	uint32_t grp_used_jobs;	/* count of active jobs (DON'T PACK) */
@@ -293,7 +314,7 @@ typedef struct {
 				  * (DON'T PACK) */
 	uint32_t grp_used_submit_jobs; /* count of jobs pending or running
 				    * (DON'T PACK) */
-	uint32_t grp_used_wall; /* group count of time (minutes) used in
+	double grp_used_wall;   /* group count of time (minutes) used in
 				 * running jobs (DON'T PACK) */
 
 	uint64_t max_cpu_mins_pu; /* max number of cpu mins a user can
@@ -310,12 +331,16 @@ typedef struct {
 			       * qos can run a job */
 
 	char *name;
+	double norm_priority;/* normalized priority (DON'T PACK) */
 	List preemptee_list; /* list of char * list of qos's that this
 				qos can preempt */
 	List preemptor_list; /* list of char * list of qos's that this
 			      * qos is preempted by */
 	uint32_t priority;  /* ranged int needs to be a unint for
 			     * heterogeneous systems */
+	double usage_factor; /* factor to apply to usage in this qos */
+	long double usage_raw;	/* measure of resource usage (DON'T PACK) */
+
 	List user_limit_list; /* acct_used_limits_t's */
 } acct_qos_rec_t;
 
@@ -326,6 +351,36 @@ typedef struct {
 	uint16_t with_deleted; 
 } acct_qos_cond_t;
 
+typedef struct {
+	List cluster_list; /* cluster reservations are on list of
+			    * char * */
+	uint16_t flags; /* flags for reservation. */
+	List id_list;   /* ids of reservations. list of char * */
+	List name_list; /* name of reservations. list of char * */
+	char *nodes; /* list of nodes in reservation */
+	time_t time_end; /* end time of reservation */
+	time_t time_start; /* start time of reservation */
+	uint16_t with_usage; /* send usage for reservation */
+} acct_reservation_cond_t;
+
+typedef struct {
+	uint64_t alloc_secs; /* number of cpu seconds allocated */
+	char *assocs; /* comma seperated list of associations */
+	char *cluster; /* cluster reservation is for */
+	uint32_t cpus; /* how many cpus are in reservation */
+	uint64_t down_secs; /* number of cpu seconds down */
+	uint16_t flags; /* flags for reservation. */
+	uint32_t id;   /* id of reservation. */
+	char *name; /* name of reservation */
+	char *nodes; /* list of nodes in reservation */
+	char *node_inx; /* node index of nodes in reservation */
+	time_t time_end; /* end time of reservation */
+	time_t time_start; /* start time of reservation */
+	time_t time_start_prev; /* If start time was changed this is
+				 * the pervious start time.  Needed
+				 * for accounting */	
+} acct_reservation_rec_t;
+
 /* Right now this is used in the acct_qos_rec_t structure.  In the
  * user_limit_list. */
 typedef struct {
@@ -376,8 +431,8 @@ typedef struct {
 	List id_list; /* list of char * */
 	List info_list; /* list of char * */
 	List name_list; /* list of char * */
-	uint32_t time_end; 
-	uint32_t time_start; 
+	time_t time_end; 
+	time_t time_start; 
 	List user_list; /* list of char * */
 	uint16_t with_assoc_info;
 } acct_txn_cond_t;
@@ -407,8 +462,8 @@ typedef struct {
 
 	List name_list;        /* list of char * */
 
-	uint32_t usage_end; 
-	uint32_t usage_start; 
+	time_t usage_end; 
+	time_t usage_start; 
 
 	List user_list;		/* list of char * */
 
@@ -440,16 +495,17 @@ typedef struct {
 	uint64_t down_secs; /* number of cpu seconds down */
 	uint64_t idle_secs; /* number of cpu seconds idle */
 	uint64_t over_secs; /* number of cpu seconds overcommitted */
+	uint64_t pdown_secs; /* number of cpu seconds planned down */
 	time_t period_start; /* when this record was started */
 	uint64_t resv_secs; /* number of cpu seconds reserved */	
 } cluster_accounting_rec_t;
 
-
 typedef struct {
 	char *name;
 	char *print_name;
 	char *spaces;
-	uint16_t user;
+	uint16_t user; /* set to 1 if it is a user i.e. if name[0] is
+			* '|' */
 } acct_print_tree_t;
 
 typedef struct {
@@ -460,6 +516,9 @@ typedef struct {
 
 typedef struct {
 	char *archive_dir;     /* location to place archive file */
+	uint16_t archive_events; /* whether or not to keep an archive
+				    file of events that can be loaded
+				    later */
 	uint16_t archive_jobs; /* whether or not to keep an archive
 				  file of jobs that can be loaded
 				  later */
@@ -468,9 +527,15 @@ typedef struct {
 	uint16_t archive_steps; /* whether or not to keep an archive
 				  file of steps that can be loaded
 				  later */
+	uint16_t archive_suspend; /* whether or not to keep an archive
+				     file of suspend data that can be loaded
+				     later */
 	acct_job_cond_t *job_cond; /* conditions for the jobs to archive */
-	uint16_t job_purge; /* purge jobs older than this in months */
-	uint16_t step_purge; /* purge steps older than this in months */
+	uint16_t purge_event; /* purge events older than this in months */
+	uint16_t purge_job; /* purge jobs older than this in months */
+	uint16_t purge_step; /* purge steps older than this in months */
+	uint16_t purge_suspend; /* purge suspend data older than this
+				 * in months */
 } acct_archive_cond_t;
 
 typedef struct {
@@ -480,6 +545,8 @@ typedef struct {
 			     insert of jobs since past */
 } acct_archive_rec_t;
 
+extern uint32_t qos_max_priority; /* max priority in all qos's */
+
 extern void destroy_acct_user_rec(void *object);
 extern void destroy_acct_account_rec(void *object);
 extern void destroy_acct_coord_rec(void *object);
@@ -488,6 +555,7 @@ extern void destroy_acct_cluster_rec(void *object);
 extern void destroy_acct_accounting_rec(void *object);
 extern void destroy_acct_association_rec(void *object);
 extern void destroy_acct_qos_rec(void *object);
+extern void destroy_acct_reservation_rec(void *object);
 extern void destroy_acct_txn_rec(void *object);
 extern void destroy_acct_wckey_rec(void *object);
 extern void destroy_acct_archive_rec(void *object);
@@ -498,6 +566,7 @@ extern void destroy_acct_cluster_cond(void *object);
 extern void destroy_acct_association_cond(void *object);
 extern void destroy_acct_job_cond(void *object);
 extern void destroy_acct_qos_cond(void *object);
+extern void destroy_acct_reservation_cond(void *object);
 extern void destroy_acct_txn_cond(void *object);
 extern void destroy_acct_wckey_cond(void *object);
 extern void destroy_acct_archive_cond(void *object);
@@ -538,6 +607,10 @@ extern int unpack_acct_association_rec(void **object, uint16_t rpc_version,
 				       Buf buffer);
 extern void pack_acct_qos_rec(void *in, uint16_t rpc_version, Buf buffer);
 extern int unpack_acct_qos_rec(void **object, uint16_t rpc_version, Buf buffer);
+extern void pack_acct_reservation_rec(void *in, uint16_t rpc_version,
+				      Buf buffer);
+extern int unpack_acct_reservation_rec(void **object, uint16_t rpc_version,
+				       Buf buffer);
 extern void pack_acct_txn_rec(void *in, uint16_t rpc_version, Buf buffer);
 extern int unpack_acct_txn_rec(void **object, uint16_t rpc_version, Buf buffer);
 extern void pack_acct_wckey_rec(void *in, uint16_t rpc_version, Buf buffer);
@@ -566,6 +639,10 @@ extern int unpack_acct_job_cond(void **object, uint16_t rpc_version,
 extern void pack_acct_qos_cond(void *in, uint16_t rpc_version, Buf buffer);
 extern int unpack_acct_qos_cond(void **object, uint16_t rpc_version,
 				Buf buffer);
+extern void pack_acct_reservation_cond(void *in, uint16_t rpc_version,
+				       Buf buffer);
+extern int unpack_acct_reservation_cond(void **object, uint16_t rpc_version,
+					Buf buffer);
 extern void pack_acct_txn_cond(void *in, uint16_t rpc_version, Buf buffer);
 extern int unpack_acct_txn_cond(void **object, uint16_t rpc_version,
 				Buf buffer);
@@ -602,11 +679,13 @@ extern List get_hierarchical_sorted_assoc_list(List assoc_list);
 extern List get_acct_hierarchical_rec_list(List assoc_list);
 
 /* IN/OUT: tree_list a list of acct_print_tree_t's */ 
-extern char *get_tree_acct_name(char *name, char *parent, char *cluster, 
-				List tree_list);
+extern char *get_tree_acct_name(char *name, char *parent, List tree_list);
 
 extern char *get_qos_complete_str(List qos_list, List num_qos_list);
 
+extern char *get_classification_str(uint16_t class);
+extern uint16_t str_2_classification(char *class);
+
 extern void log_assoc_rec(acct_association_rec_t *assoc_ptr, List qos_list);
 
 extern int slurm_acct_storage_init(char *loc); /* load the plugin */
@@ -698,6 +777,14 @@ extern int acct_storage_g_add_qos(void *db_conn, uint32_t uid,
 extern int acct_storage_g_add_wckeys(void *db_conn, uint32_t uid, 
 				     List wckey_list);
 
+/* 
+ * add reservation's in accounting system 
+ * IN:  acct_reservation_rec_t *resv reservation to be added.
+ * RET: SLURM_SUCCESS on success SLURM_ERROR else
+ */
+extern int acct_storage_g_add_reservation(void *db_conn, 
+					  acct_reservation_rec_t *resv);
+
 /* 
  * modify existing users in the accounting system 
  * IN:  acct_user_cond_t *user_cond
@@ -759,6 +846,13 @@ extern List acct_storage_g_modify_wckeys(void *db_conn, uint32_t uid,
 					 acct_wckey_cond_t *wckey_cond,
 					 acct_wckey_rec_t *wckey);
 
+/* 
+ * modify reservation's in accounting system 
+ * IN:  acct_reservation_rec_t *resv 
+ * RET: SLURM_SUCCESS on success SLURM_ERROR else
+ */
+extern int acct_storage_g_modify_reservation(void *db_conn, 
+					     acct_reservation_rec_t *resv);
 /* 
  * remove users from accounting system 
  * IN:  acct_user_cond_t *user_cond
@@ -817,6 +911,13 @@ extern List acct_storage_g_remove_qos(
 extern List acct_storage_g_remove_wckeys(
 	void *db_conn, uint32_t uid, acct_wckey_cond_t *wckey_cond);
 
+/* 
+ * remove reservation's in accounting system 
+ * IN:  acct_reservation_rec_t *resv 
+ * RET: SLURM_SUCCESS on success SLURM_ERROR else
+ */
+extern int acct_storage_g_remove_reservation(void *db_conn, 
+					     acct_reservation_rec_t *resv);
 /* 
  * get info from the storage 
  * IN:  acct_user_cond_t *
@@ -847,6 +948,14 @@ extern List acct_storage_g_get_accounts(void *db_conn,  uint32_t uid,
 extern List acct_storage_g_get_clusters(
 	void *db_conn, uint32_t uid, acct_cluster_cond_t *cluster_cond);
 
+
+/* 
+ * get info from the storage 
+ * RET: List of config_key_pairs_t *
+ * note List needs to be freed when called
+ */
+extern List acct_storage_g_get_config(void *db_conn);
+
 /* 
  * get info from the storage 
  * IN:  acct_association_cond_t *
@@ -856,7 +965,6 @@ extern List acct_storage_g_get_clusters(
 extern List acct_storage_g_get_associations(
 	void *db_conn, uint32_t uid, acct_association_cond_t *assoc_cond);
 
-
 /* 
  * get info from the storage 
  * IN:  acct_qos_cond_t *
@@ -875,6 +983,15 @@ extern List acct_storage_g_get_qos(void *db_conn, uint32_t uid,
 extern List acct_storage_g_get_wckeys(void *db_conn, uint32_t uid,
 				      acct_wckey_cond_t *wckey_cond);
 
+/* 
+ * get info from the storage 
+ * IN:  acct_reservation_cond_t *
+ * RET: List of acct_reservation_rec_t *
+ * note List needs to be freed when called
+ */
+extern List acct_storage_g_get_reservations(void *db_conn, uint32_t uid,
+					    acct_reservation_cond_t *resv_cond);
+
 /* 
  * get info from the storage 
  * IN:  acct_txn_cond_t *
@@ -899,10 +1016,13 @@ extern int acct_storage_g_get_usage(
 /* 
  * roll up data in the storage 
  * IN: sent_start (option time to do a re-roll or start from this point)
+ * IN: sent_end (option time to do a re-roll or end at this point)
+ * IN: archive_data (if 0 old data is not archived in a monthly rollup)
  * RET: SLURM_SUCCESS on success SLURM_ERROR else
  */
 extern int acct_storage_g_roll_usage(void *db_conn, 
-				     time_t sent_start);
+				     time_t sent_start, time_t sent_end,
+				     uint16_t archive_data);
 /* 
  * record shares used information for backup in case slurmctld restarts 
  * IN:  account_list List of shares_used_object_t *
@@ -936,6 +1056,7 @@ extern int clusteracct_storage_g_node_up(void *db_conn,
 
 extern int clusteracct_storage_g_cluster_procs(void *db_conn, 
 					       char *cluster,
+					       char *cluster_nodes,
 					       uint32_t procs,
 					       time_t event_time);
 
diff --git a/src/common/slurm_auth.c b/src/common/slurm_auth.c
index 11d4b7f5e..c139575fa 100644
--- a/src/common/slurm_auth.c
+++ b/src/common/slurm_auth.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jay Windley <jwindley@lnxi.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_auth.h b/src/common/slurm_auth.h
index 3c5bcdee4..2e706955d 100644
--- a/src/common/slurm_auth.h
+++ b/src/common/slurm_auth.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_cred.c b/src/common/slurm_cred.c
index 8163a9d12..530008d5c 100644
--- a/src/common/slurm_cred.c
+++ b/src/common/slurm_cred.c
@@ -1,15 +1,15 @@
 /*****************************************************************************\
  *  src/common/slurm_cred.c - SLURM job credential functions
- *  $Id: slurm_cred.c 17005 2009-03-24 21:57:43Z da $
  *****************************************************************************
  *  Copyright (C) 2002-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>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -52,12 +52,14 @@
 #  include <pthread.h>
 #endif /* WITH_PTHREADS */
 
+#include "src/common/bitstring.h"
 #include "src/common/io_hdr.h"
 #include "src/common/list.h"
 #include "src/common/log.h"
 #include "src/common/macros.h"
 #include "src/common/plugin.h"
 #include "src/common/plugrack.h"
+#include "src/common/select_job_res.h"
 #include "src/common/slurm_protocol_api.h"
 #include "src/common/xmalloc.h"
 #include "src/common/xassert.h"
@@ -80,9 +82,10 @@
  * 
  */
 typedef struct {
-	uint32_t jobid;		/* SLURM job id for this credential         */
-	uint32_t stepid;	/* SLURM step id for this credential        */
-	time_t   expiration;    /* Time at which cred is no longer good     */
+	uint32_t jobid;		/* SLURM job id for this credential	*/
+	uint32_t stepid;	/* SLURM step id for this credential	*/
+	time_t   ctime;		/* Time that the cred was created	*/
+	time_t   expiration;    /* Time at which cred is no longer good	*/
 } cred_state_t;
 
 /*
@@ -143,13 +146,20 @@ struct slurm_job_credential {
 	uint32_t  jobid;	/* Job ID associated with this cred	*/
 	uint32_t  stepid;	/* Job step ID for this credential	*/
 	uid_t     uid;		/* user for which this cred is valid	*/
-	uint32_t  job_mem;	/* MB of memory reserved for job	*/
-	uint32_t  task_mem;	/* MB of memory reserved per task	*/
+	uint32_t  job_mem;	/* MB of memory reserved per node OR
+				 * real memory per CPU | MEM_PER_CPU,
+				 * default=0 (no limit) */
 	time_t    ctime;	/* time of credential creation		*/
 	char     *nodes;	/* hostnames for which the cred is ok	*/
-	uint32_t  alloc_lps_cnt;/* Number of hosts in the list above	*/
-	uint32_t *alloc_lps;	/* Number of tasks on each host		*/
-
+#ifndef HAVE_BG
+	bitstr_t *core_bitmap;
+	uint16_t  core_array_size;	/* core/socket array size */
+	uint16_t *cores_per_socket;
+	uint16_t *sockets_per_node;
+	uint32_t *sock_core_rep_count;
+	uint32_t  job_nhosts;	/* count of nodes allocated to JOB */
+	char     *job_hostlist;	/* list of nodes allocated to JOB */
+#endif
 	char     *signature; 	/* credential signature			*/
 	unsigned int siglen;	/* signature length in bytes		*/
 };
@@ -171,7 +181,7 @@ typedef struct slurm_crypto_ops {
 						 unsigned int buf_size, 
 						 char *signature, 
 						 unsigned int sig_size);
-	char *(*crypto_str_error)		(void);
+	const char *(*crypto_str_error)		(int);
 } slurm_crypto_ops_t;
 
 /*
@@ -485,6 +495,8 @@ slurm_cred_ctx_destroy(slurm_cred_ctx_t ctx)
 	slurm_mutex_lock(&ctx->mutex);
 	xassert(ctx->magic == CRED_CTX_MAGIC);
 
+	if (ctx->exkey)
+		(*(g_crypto_context->ops.crypto_destroy_key))(ctx->exkey);
 	if (ctx->key)
 		(*(g_crypto_context->ops.crypto_destroy_key))(ctx->key);
 	if (ctx->job_list)
@@ -604,15 +616,32 @@ slurm_cred_create(slurm_cred_ctx_t ctx, slurm_cred_arg_t *arg)
 	cred->stepid = arg->stepid;
 	cred->uid    = arg->uid;
 	cred->job_mem = arg->job_mem;
-	cred->task_mem = arg->task_mem;
 	cred->nodes  = xstrdup(arg->hostlist);
-        cred->alloc_lps_cnt = arg->alloc_lps_cnt;
-        cred->alloc_lps  = NULL;
-        if (cred->alloc_lps_cnt > 0) {
-                cred->alloc_lps =  xmalloc(cred->alloc_lps_cnt * sizeof(uint32_t));
-                memcpy(cred->alloc_lps, arg->alloc_lps, 
-			cred->alloc_lps_cnt * sizeof(uint32_t));
-        }
+#ifndef HAVE_BG
+{
+	int i, sock_recs = 0;
+	xassert(arg->job_nhosts);
+	for (i=0; i<arg->job_nhosts; i++) {
+		sock_recs += arg->sock_core_rep_count[i];
+		if (sock_recs >= arg->job_nhosts)
+			break;
+	}
+	i++;
+	cred->core_bitmap = bit_copy(arg->core_bitmap);
+	cred->core_array_size = i;
+	cred->cores_per_socket = xmalloc(sizeof(uint16_t) * i);
+	memcpy(cred->cores_per_socket, arg->cores_per_socket,
+	       (sizeof(uint16_t) * i));
+	cred->sockets_per_node = xmalloc(sizeof(uint16_t) * i);
+	memcpy(cred->sockets_per_node, arg->sockets_per_node,
+	       (sizeof(uint16_t) * i));
+	cred->sock_core_rep_count = xmalloc(sizeof(uint32_t) * i);
+	memcpy(cred->sock_core_rep_count, arg->sock_core_rep_count,
+	       (sizeof(uint32_t) * i));
+	cred->job_nhosts = arg->job_nhosts;
+	cred->job_hostlist = xstrdup(arg->job_hostlist);
+}
+#endif
 	cred->ctime  = time(NULL);
 
 	if (_slurm_cred_sign(ctx, cred) < 0) 
@@ -651,15 +680,25 @@ slurm_cred_copy(slurm_cred_t cred)
 	rcred->stepid = cred->stepid;
 	rcred->uid    = cred->uid;
 	rcred->job_mem = cred->job_mem;
-	rcred->task_mem = cred->task_mem;
 	rcred->nodes  = xstrdup(cred->nodes);
-	rcred->alloc_lps_cnt = cred->alloc_lps_cnt;
-	rcred->alloc_lps  = NULL;
-	if (rcred->alloc_lps_cnt > 0) {
-		rcred->alloc_lps =  xmalloc(rcred->alloc_lps_cnt * sizeof(uint32_t));
-		memcpy(rcred->alloc_lps, cred->alloc_lps, 
-		rcred->alloc_lps_cnt * sizeof(uint32_t));
-	}
+#ifndef HAVE_BG
+	rcred->core_bitmap = bit_copy(cred->core_bitmap);
+	rcred->core_array_size = cred->core_array_size;
+	rcred->cores_per_socket = xmalloc(sizeof(uint16_t) * 
+					  rcred->core_array_size);
+	memcpy(rcred->cores_per_socket, cred->cores_per_socket,
+	       (sizeof(uint16_t) * rcred->core_array_size));
+	rcred->sockets_per_node = xmalloc(sizeof(uint16_t) * 
+					  rcred->core_array_size);
+	memcpy(rcred->sockets_per_node, cred->sockets_per_node,
+	       (sizeof(uint16_t) * rcred->core_array_size));
+	cred->sock_core_rep_count = xmalloc(sizeof(uint32_t) * 
+					    rcred->core_array_size);
+	memcpy(rcred->sock_core_rep_count, cred->sock_core_rep_count,
+	       (sizeof(uint32_t) * rcred->core_array_size));
+	rcred->job_nhosts = cred->job_nhosts;
+	rcred->job_hostlist = xstrdup(cred->job_hostlist);
+#endif
 	rcred->ctime  = cred->ctime;
 	rcred->siglen = cred->siglen;
 	/* Assumes signature is a string,
@@ -688,15 +727,31 @@ slurm_cred_faker(slurm_cred_arg_t *arg)
 	cred->stepid   = arg->stepid;
 	cred->uid      = arg->uid;
 	cred->job_mem  = arg->job_mem;
-	cred->task_mem = arg->task_mem;
 	cred->nodes    = xstrdup(arg->hostlist);
-	cred->alloc_lps_cnt = arg->alloc_lps_cnt;
-	cred->alloc_lps  = NULL;
-	if (cred->alloc_lps_cnt > 0) {
-		cred->alloc_lps =  xmalloc(cred->alloc_lps_cnt * sizeof(uint32_t));
-		memcpy(cred->alloc_lps, arg->alloc_lps, 
-		       cred->alloc_lps_cnt * sizeof(uint32_t));
+#ifndef HAVE_BG
+{
+	int i, sock_recs = 0;
+	for (i=0; i<arg->job_nhosts; i++) {
+		sock_recs += arg->sock_core_rep_count[i];
+		if (sock_recs >= arg->job_nhosts)
+			break;
 	}
+	i++;
+	cred->core_bitmap = bit_copy(arg->core_bitmap);
+	cred->core_array_size = i;
+	cred->cores_per_socket = xmalloc(sizeof(uint16_t) * i);
+	memcpy(cred->cores_per_socket, arg->cores_per_socket,
+	       (sizeof(uint16_t) * i));
+	cred->sockets_per_node = xmalloc(sizeof(uint16_t) * i);
+	memcpy(cred->sockets_per_node, arg->sockets_per_node,
+	       (sizeof(uint16_t) * i));
+	cred->sock_core_rep_count = xmalloc(sizeof(uint32_t) * i);
+	memcpy(cred->sock_core_rep_count, arg->sock_core_rep_count,
+	       (sizeof(uint32_t) * i));
+	cred->job_nhosts = arg->job_nhosts;
+	cred->job_hostlist = xstrdup(arg->job_hostlist);
+}
+#endif
 	cred->ctime  = time(NULL);
 	cred->siglen = SLURM_IO_KEY_SIZE;
 
@@ -724,9 +779,15 @@ slurm_cred_faker(slurm_cred_arg_t *arg)
 
 void slurm_cred_free_args(slurm_cred_arg_t *arg)
 {
+	if (arg->core_bitmap) {
+		bit_free(arg->core_bitmap);
+		arg->core_bitmap = NULL;
+	}
+	xfree(arg->cores_per_socket);
 	xfree(arg->hostlist);
-	xfree(arg->alloc_lps);
-	arg->alloc_lps_cnt = 0;
+	xfree(arg->job_hostlist);
+	xfree(arg->sock_core_rep_count);
+	xfree(arg->sockets_per_node);
 }
 
 int
@@ -743,15 +804,31 @@ slurm_cred_get_args(slurm_cred_t cred, slurm_cred_arg_t *arg)
 	arg->stepid   = cred->stepid;
 	arg->uid      = cred->uid;
 	arg->job_mem  = cred->job_mem;
-	arg->task_mem = cred->task_mem;
 	arg->hostlist = xstrdup(cred->nodes);
-	arg->alloc_lps_cnt = cred->alloc_lps_cnt;
-	if (arg->alloc_lps_cnt > 0) {
-		arg->alloc_lps = xmalloc(arg->alloc_lps_cnt * sizeof(uint32_t));
-		memcpy(arg->alloc_lps, cred->alloc_lps, 
-		       arg->alloc_lps_cnt * sizeof(uint32_t));
-	} else
-		arg->alloc_lps = NULL;
+#ifdef HAVE_BG
+	arg->core_bitmap = NULL;
+	arg->cores_per_socket = NULL;
+	arg->sockets_per_node = NULL;
+	arg->sock_core_rep_count = NULL;
+	arg->job_nhosts = 0;
+	arg->job_hostlist = NULL;
+#else
+	arg->core_bitmap = bit_copy(cred->core_bitmap);
+	arg->cores_per_socket = xmalloc(sizeof(uint16_t) * 
+					cred->core_array_size);
+	memcpy(arg->cores_per_socket, cred->cores_per_socket,
+	       (sizeof(uint16_t) * cred->core_array_size));
+	arg->sockets_per_node = xmalloc(sizeof(uint16_t) * 
+					cred->core_array_size);
+	memcpy(arg->sockets_per_node, cred->sockets_per_node,
+	       (sizeof(uint16_t) * cred->core_array_size));
+	arg->sock_core_rep_count = xmalloc(sizeof(uint32_t) * 
+					   cred->core_array_size);
+	memcpy(arg->sock_core_rep_count, cred->sock_core_rep_count,
+	       (sizeof(uint32_t) * cred->core_array_size));
+	arg->job_nhosts = cred->job_nhosts;
+	arg->job_hostlist = xstrdup(cred->job_hostlist);
+#endif
 	slurm_mutex_unlock(&cred->mutex);
 
 	return SLURM_SUCCESS;
@@ -808,16 +885,32 @@ slurm_cred_verify(slurm_cred_ctx_t ctx, slurm_cred_t cred,
 	arg->stepid   = cred->stepid;
 	arg->uid      = cred->uid;
 	arg->job_mem  = cred->job_mem;
-	arg->task_mem = cred->task_mem;
 	arg->hostlist = xstrdup(cred->nodes);
-	arg->alloc_lps_cnt = cred->alloc_lps_cnt;
-	if (arg->alloc_lps_cnt > 0) {
-		arg->alloc_lps = xmalloc(arg->alloc_lps_cnt * sizeof(uint32_t));
-		memcpy(arg->alloc_lps, cred->alloc_lps, 
-		       arg->alloc_lps_cnt * sizeof(uint32_t));
-	} else
-		arg->alloc_lps = NULL;
 
+#ifdef HAVE_BG
+	arg->core_bitmap = NULL;
+	arg->cores_per_socket = NULL;
+	arg->sockets_per_node = NULL;
+	arg->sock_core_rep_count = NULL;
+	arg->job_nhosts = 0;
+	arg->job_hostlist = NULL;
+#else
+	arg->core_bitmap = bit_copy(cred->core_bitmap);
+	arg->cores_per_socket = xmalloc(sizeof(uint16_t) * 
+					cred->core_array_size);
+	memcpy(arg->cores_per_socket, cred->cores_per_socket,
+	       (sizeof(uint16_t) * cred->core_array_size));
+	arg->sockets_per_node = xmalloc(sizeof(uint16_t) * 
+					cred->core_array_size);
+	memcpy(arg->sockets_per_node, cred->sockets_per_node,
+	       (sizeof(uint16_t) * cred->core_array_size));
+	arg->sock_core_rep_count = xmalloc(sizeof(uint32_t) * 
+					   cred->core_array_size);
+	memcpy(arg->sock_core_rep_count, cred->sock_core_rep_count,
+	       (sizeof(uint32_t) * cred->core_array_size));
+	arg->job_nhosts = cred->job_nhosts;
+	arg->job_hostlist = xstrdup(cred->job_hostlist);
+#endif
 	slurm_mutex_unlock(&cred->mutex);
 
 	return SLURM_SUCCESS;
@@ -840,8 +933,17 @@ slurm_cred_destroy(slurm_cred_t cred)
 	xassert(cred->magic == CRED_MAGIC);
 
 	slurm_mutex_lock(&cred->mutex);
+#ifndef HAVE_BG
+	if (cred->core_bitmap) {
+		bit_free(cred->core_bitmap);
+		cred->core_bitmap = NULL;
+	}
+	xfree(cred->cores_per_socket);
+	xfree(cred->job_hostlist);
+	xfree(cred->sock_core_rep_count);
+	xfree(cred->sockets_per_node);
+#endif
 	xfree(cred->nodes);
-	xfree(cred->alloc_lps);
 	xfree(cred->signature);
 	xassert(cred->magic = ~CRED_MAGIC);
 
@@ -904,7 +1006,8 @@ slurm_cred_rewind(slurm_cred_ctx_t ctx, slurm_cred_t cred)
 	xassert(ctx->magic == CRED_CTX_MAGIC);
 	xassert(ctx->type  == SLURM_CRED_VERIFIER);
 
-	rc = list_delete_all(ctx->state_list, (ListFindF) _find_cred_state, cred);
+	rc = list_delete_all(ctx->state_list, 
+			     (ListFindF) _find_cred_state, cred);
 
 	slurm_mutex_unlock(&ctx->mutex);
 
@@ -1024,9 +1127,9 @@ slurm_cred_pack(slurm_cred_t cred, Buf buffer)
 slurm_cred_t
 slurm_cred_unpack(Buf buffer)
 {
-	uint32_t     len;
-	uint32_t     tmpint;
+	uint32_t     cred_uid, len;
 	slurm_cred_t cred = NULL;
+	char        *bit_fmt = NULL;
 	char       **sigp;
 
 	xassert(buffer != NULL);
@@ -1034,29 +1137,50 @@ slurm_cred_unpack(Buf buffer)
 	cred = _slurm_cred_alloc();
 	slurm_mutex_lock(&cred->mutex);
 
+	safe_unpack32(          &cred->jobid,         buffer);
+	safe_unpack32(          &cred->stepid,        buffer);
+	safe_unpack32(          &cred_uid,            buffer);
+	cred->uid = cred_uid;
+	safe_unpack32(          &cred->job_mem,       buffer);
+	safe_unpackstr_xmalloc( &cred->nodes, &len,   buffer);
+	safe_unpack_time(       &cred->ctime,         buffer);
+#ifndef HAVE_BG
+{
+	uint32_t tot_core_cnt;
+	safe_unpack32(          &tot_core_cnt,        buffer);
+	safe_unpackstr_xmalloc( &bit_fmt,     &len,   buffer);
+	cred->core_bitmap = bit_alloc((bitoff_t) tot_core_cnt);
+	if (bit_unfmt(cred->core_bitmap, bit_fmt))
+		goto unpack_error;
+	xfree(bit_fmt);
+	safe_unpack16(          &cred->core_array_size, buffer);
+	if (cred->core_array_size) {
+                safe_unpack16_array(&cred->cores_per_socket, &len,  buffer);
+		if (len != cred->core_array_size)
+			goto unpack_error;
+                safe_unpack16_array(&cred->sockets_per_node, &len,  buffer);
+		if (len != cred->core_array_size)
+			goto unpack_error;
+                safe_unpack32_array(&cred->sock_core_rep_count, &len,  
+				    buffer);
+		if (len != cred->core_array_size)
+			goto unpack_error;
+	}
+	safe_unpack32(          &cred->job_nhosts,           buffer);
+	safe_unpackstr_xmalloc( &cred->job_hostlist, &len,   buffer);
+}
+#endif
+	/* "sigp" must be last */
 	sigp = (char **) &cred->signature;
-
-	safe_unpack32(          &cred->jobid,        buffer);
-	safe_unpack32(          &cred->stepid,       buffer);
-	safe_unpack32(          &tmpint,             buffer);
-	cred->uid = tmpint;
-	safe_unpack32(          &cred->job_mem,      buffer);
-	safe_unpack32(          &cred->task_mem,     buffer);
-	safe_unpackstr_xmalloc( &cred->nodes, &len,  buffer);
-	safe_unpack32(          &cred->alloc_lps_cnt,     buffer);
-        if (cred->alloc_lps_cnt > 0)
-                safe_unpack32_array(&cred->alloc_lps, &tmpint,  buffer);
-	safe_unpack_time(       &cred->ctime,        buffer);
-	safe_unpackmem_xmalloc( sigp,         &len,  buffer);
-
-	xassert(len > 0);
-
+	safe_unpackmem_xmalloc( sigp,                &len,   buffer);
 	cred->siglen = len;
+	xassert(len > 0);
 
 	slurm_mutex_unlock(&cred->mutex);
 	return cred;
 
     unpack_error:
+	xfree(bit_fmt);
 	slurm_mutex_unlock(&cred->mutex);
 	slurm_cred_destroy(cred);
 	return NULL;
@@ -1097,8 +1221,6 @@ slurm_cred_ctx_unpack(slurm_cred_ctx_t ctx, Buf buffer)
 void
 slurm_cred_print(slurm_cred_t cred)
 {
-        int i;
-
 	if (cred == NULL)
 		return;
 
@@ -1106,33 +1228,32 @@ slurm_cred_print(slurm_cred_t cred)
 
 	xassert(cred->magic == CRED_MAGIC);
 
-	info("Cred: Jobid    %u",  cred->jobid         );
-	info("Cred: Stepid   %u",  cred->jobid         );
-	info("Cred: UID      %lu", (u_long) cred->uid  );
-	info("Cred: job_mem  %u",  cred->job_mem       );
-	info("Cred: task_mem %u",  cred->task_mem      );
-	info("Cred: Nodes    %s",  cred->nodes         );
-	info("Cred: alloc_lps_cnt %u", cred->alloc_lps_cnt     ); 
-	info("Cred: alloc_lps: ");                            
-	for (i=0; i<cred->alloc_lps_cnt; i++)                 
-		info("alloc_lps[%d] = %u ", i, cred->alloc_lps[i]);
-	info("Cred: ctime    %s",  ctime(&cred->ctime) );
-	info("Cred: siglen   %u",  cred->siglen        );
-	slurm_mutex_unlock(&cred->mutex);
-
-}
-
-int slurm_cred_get_alloc_lps(slurm_cred_t cred, char **nodes,
-			     uint32_t *alloc_lps_cnt, uint32_t **alloc_lps)
+	info("Cred: Jobid         %u",  cred->jobid         );
+	info("Cred: Stepid        %u",  cred->jobid         );
+	info("Cred: UID           %u",  (uint32_t) cred->uid);
+	info("Cred: job_mem       %u",  cred->job_mem       );
+	info("Cred: Nodes         %s",  cred->nodes         );
+	info("Cred: ctime         %s",  ctime(&cred->ctime) );
+	info("Cred: siglen        %u",  cred->siglen        );
+#ifndef HAVE_BG
 {
-	if ((cred == NULL) || (nodes == NULL) ||
-	    (alloc_lps_cnt == NULL) || (alloc_lps == NULL))
-		return EINVAL;
+	int i;
+	char str[128];
+	info("Cred: core_bitmap   %s", 
+	     bit_fmt(str, sizeof(str), cred->core_bitmap));
+	info("Cred: sockets_per_node, cores_per_socket, rep_count");
+	for (i=0; i<cred->core_array_size; i++) {
+		info("      socks:%u cores:%u reps:%u", 
+		     cred->sockets_per_node[i],
+		     cred->cores_per_socket[i],
+		     cred->sock_core_rep_count[i]);
+	}
+	info("Cred: job_nhosts   %u",   cred->job_nhosts    );
+	info("Cred: job_hostlist %s",   cred->job_hostlist  );
+}
+#endif
+	slurm_mutex_unlock(&cred->mutex);
 
-	*nodes         = cred->nodes;
-	*alloc_lps_cnt = cred->alloc_lps_cnt;
-	*alloc_lps     = cred->alloc_lps;
-	return SLURM_SUCCESS;
 }
 
 static void 
@@ -1284,8 +1405,11 @@ _slurm_cred_sign(slurm_cred_ctx_t ctx, slurm_cred_t cred)
 			&cred->signature, &cred->siglen);
 	free_buf(buffer);
 
-	if (rc)
+	if (rc) {
+		error("Credential sign: %s", 
+		      (*(g_crypto_context->ops.crypto_str_error))(rc));
 		return SLURM_ERROR;
+	}
 	return SLURM_SUCCESS;
 }
 
@@ -1303,15 +1427,15 @@ _slurm_cred_verify_signature(slurm_cred_ctx_t ctx, slurm_cred_t cred)
 			get_buf_data(buffer), get_buf_offset(buffer),
 			cred->signature, cred->siglen);
 	if (rc && _exkey_is_valid(ctx)) {
-		rc = (*(g_crypto_context->ops.crypto_verify_sign))(ctx->key, 
+		rc = (*(g_crypto_context->ops.crypto_verify_sign))(ctx->exkey, 
 			get_buf_data(buffer), get_buf_offset(buffer),
 			cred->signature, cred->siglen);
 	}
 	free_buf(buffer);
 
 	if (rc) {
-		info("Credential signature check: %s", 
-			(*(g_crypto_context->ops.crypto_str_error))());
+		error("Credential signature check: %s", 
+		      (*(g_crypto_context->ops.crypto_str_error))(rc));
 		return SLURM_ERROR;
 	}
 	return SLURM_SUCCESS;
@@ -1321,16 +1445,33 @@ _slurm_cred_verify_signature(slurm_cred_ctx_t ctx, slurm_cred_t cred)
 static void
 _pack_cred(slurm_cred_t cred, Buf buffer)
 {
-	pack32(           cred->jobid,    buffer);
-	pack32(           cred->stepid,   buffer);
-	pack32((uint32_t) cred->uid,      buffer);
-	pack32(           cred->job_mem,  buffer);
-	pack32(           cred->task_mem, buffer);
-	packstr(          cred->nodes,    buffer);
-	pack32(           cred->alloc_lps_cnt, buffer);
-	if (cred->alloc_lps_cnt > 0)
-		pack32_array( cred->alloc_lps, cred->alloc_lps_cnt, buffer);
-	pack_time(        cred->ctime,  buffer);
+	uint32_t cred_uid = (uint32_t) cred->uid;
+
+	pack32(cred->jobid,    buffer);
+	pack32(cred->stepid,   buffer);
+	pack32(cred_uid,       buffer);
+	pack32(cred->job_mem,  buffer);
+	packstr(cred->nodes,   buffer);
+	pack_time(cred->ctime, buffer);
+#ifndef HAVE_BG
+{
+	uint32_t tot_core_cnt;
+	tot_core_cnt = bit_size(cred->core_bitmap);
+	pack32(tot_core_cnt, buffer);
+	pack_bit_fmt(cred->core_bitmap, buffer);
+	pack16(cred->core_array_size, buffer);
+	if (cred->core_array_size) {
+		pack16_array(cred->cores_per_socket, cred->core_array_size, 
+			     buffer);
+		pack16_array(cred->sockets_per_node, cred->core_array_size, 
+			     buffer);
+		pack32_array(cred->sock_core_rep_count, cred->core_array_size,
+			     buffer);
+	}
+	pack32(cred->job_nhosts,    buffer);
+	packstr(cred->job_hostlist, buffer);
+}
+#endif
 }
 
 
@@ -1345,7 +1486,9 @@ _credential_replayed(slurm_cred_ctx_t ctx, slurm_cred_t cred)
 	i = list_iterator_create(ctx->state_list);
 
 	while ((s = list_next(i))) {
-		if ((s->jobid == cred->jobid) && (s->stepid == cred->stepid))
+		if ((s->jobid  == cred->jobid)  &&
+		    (s->stepid == cred->stepid) &&
+		    (s->ctime  == cred->ctime))
 			break;
 	}
 
@@ -1459,7 +1602,8 @@ _find_job_state(slurm_cred_ctx_t ctx, uint32_t jobid)
 static int
 _find_cred_state(cred_state_t *c, slurm_cred_t cred)
 {
-	return ((c->jobid == cred->jobid) && (c->stepid == cred->stepid));
+	return ((c->jobid == cred->jobid) && (c->stepid == cred->stepid) &&
+		(c->ctime == cred->ctime));
 }
 
 static job_state_t *
@@ -1560,6 +1704,7 @@ _cred_state_create(slurm_cred_ctx_t ctx, slurm_cred_t cred)
 
 	s->jobid      = cred->jobid;
 	s->stepid     = cred->stepid;
+	s->ctime      = cred->ctime;
 	s->expiration = cred->ctime + ctx->expiry_window;
 
 	return s;
@@ -1577,6 +1722,7 @@ _cred_state_pack_one(cred_state_t *s, Buf buffer)
 {
 	pack32(s->jobid, buffer);
 	pack32(s->stepid, buffer);
+	pack_time(s->ctime, buffer);
 	pack_time(s->expiration, buffer);
 }
 
@@ -1588,6 +1734,7 @@ _cred_state_unpack_one(Buf buffer)
 
 	safe_unpack32(&s->jobid, buffer);
 	safe_unpack32(&s->stepid, buffer);
+	safe_unpack_time(&s->ctime, buffer);
 	safe_unpack_time(&s->expiration, buffer);
 	return s;
 
diff --git a/src/common/slurm_cred.h b/src/common/slurm_cred.h
index 01ce80550..8259b8b52 100644
--- a/src/common/slurm_cred.h
+++ b/src/common/slurm_cred.h
@@ -1,14 +1,14 @@
 /*****************************************************************************\
  *  src/common/slurm_cred.h  - SLURM job credential operations
- *  $Id: slurm_cred.h 14499 2008-07-11 22:54:48Z jette $
  *****************************************************************************
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -51,6 +51,7 @@
 #  include <sys/types.h>
 #endif
 
+#include "src/common/bitstring.h"
 #include "src/common/macros.h"
 #include "src/common/pack.h"
 
@@ -124,17 +125,28 @@ int  slurm_cred_ctx_unpack(slurm_cred_ctx_t ctx, Buf buffer);
 
 
 /*
- * Container for SLURM credential create and verify arguments:
+ * Container for SLURM credential create and verify arguments
+ *
+ * The core_bitmap, cores_per_socket, sockets_per_node, and 
+ * sock_core_rep_count is based upon the nodes allocated to the
+ * JOB, but the bits set in core_bitmap are those cores allocated
+ * to this STEP
  */
 typedef struct {
 	uint32_t jobid;
 	uint32_t stepid;
-	uint32_t job_mem;	/* MB of memory reserved for job */
-	uint32_t task_mem;	/* MB of memory reserved per task */
+	uint32_t job_mem;	/* MB of memory reserved per node OR
+				 * real memory per CPU | MEM_PER_CPU,
+				 * default=0 (no limit) */
 	uid_t    uid;
 	char    *hostlist;
-	uint32_t alloc_lps_cnt;
-        uint32_t *alloc_lps;
+
+	bitstr_t *core_bitmap;
+	uint16_t *cores_per_socket;
+	uint16_t *sockets_per_node;
+	uint32_t *sock_core_rep_count;
+	uint32_t  job_nhosts;	/* count of nodes allocated to JOB */
+	char     *job_hostlist;	/* list of nodes allocated to JOB */
 } slurm_cred_arg_t;
 
 /* Terminate the plugin and release all memory. */
@@ -268,17 +280,11 @@ slurm_cred_t slurm_cred_unpack(Buf buffer);
  */
 int slurm_cred_get_signature(slurm_cred_t cred, char **datap, int *len);
 
-
 /*
  * Print a slurm job credential using the info() call
  */
 void slurm_cred_print(slurm_cred_t cred);
 
-/*
- * Get count of allocated LPS (processors) by node
- */
-int slurm_cred_get_alloc_lps(slurm_cred_t cred, char **nodes, 
-			     uint32_t *alloc_lps_cnt, uint32_t **alloc_lps);
 #ifdef DISABLE_LOCALTIME
 extern char * timestr (const time_t *tp, char *buf, size_t n);
 #endif
diff --git a/src/common/slurm_errno.c b/src/common/slurm_errno.c
index e04bcfbd7..02e6071a6 100644
--- a/src/common/slurm_errno.c
+++ b/src/common/slurm_errno.c
@@ -1,13 +1,15 @@
 /*****************************************************************************\
  *  slurm_errno.c - error codes and functions for slurm
  ******************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jim Garlick <garlick@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -220,9 +222,28 @@ static slurm_errtab_t slurm_errtab[] = {
 	  "The node configuration changes that were made require restart "
 	  "of the slurmctld daemon to take effect"},
 	{ ESLURM_ACCOUNTING_POLICY,
-	  "Job violates accounting policy (job submit limit, the user's size and/or time limits)"},
+	  "Job violates accounting policy (job submit limit, the user's "
+	  "size and/or time limits)"},
 	{ ESLURM_INVALID_TIME_LIMIT,
 	  "Requested time limit exceeds partition limit"	},
+	{ ESLURM_RESERVATION_ACCESS,
+	  "Access denied to requested reservation"		},
+	{ ESLURM_RESERVATION_INVALID,
+	  "Requested reservation is invalid"			},
+	{ ESLURM_INVALID_TIME_VALUE,
+	  "Invalid time specified"				},
+	{ ESLURM_RESERVATION_BUSY, 
+	  "Requested reservation is in use"			},
+	{ ESLURM_RESERVATION_NOT_USABLE, 
+	  "Requested reservation not usable now"		},
+	{ ESLURM_RESERVATION_OVERLAP, 
+	  "Requested reservation overlaps with another reservation"	},
+	{ ESLURM_PORTS_BUSY,
+	  "Requires ports are in use"				},
+	{ ESLURM_PORTS_INVALID,
+	  "Requires more ports than can be reserved"		},
+	{ ESLURM_PROLOG_RUNNING,
+	  "SlurmctldProlog is still running"			},
 
 	/* slurmd error codes */
 
diff --git a/src/common/slurm_jobacct_gather.c b/src/common/slurm_jobacct_gather.c
index 834c22838..96d7ebe57 100644
--- a/src/common/slurm_jobacct_gather.c
+++ b/src/common/slurm_jobacct_gather.c
@@ -5,12 +5,13 @@
  *  Copyright (C) 2003-2007/ The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jay Windley <jwindley@lnxi.com>, Morris Jette <jette1@llnl.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_jobacct_gather.h b/src/common/slurm_jobacct_gather.h
index 3059872e2..e7faaa499 100644
--- a/src/common/slurm_jobacct_gather.h
+++ b/src/common/slurm_jobacct_gather.h
@@ -5,12 +5,13 @@
  *  Copyright (C) 2003 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.com> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_jobcomp.c b/src/common/slurm_jobcomp.c
index b9ed9d158..9f6755d55 100644
--- a/src/common/slurm_jobcomp.c
+++ b/src/common/slurm_jobcomp.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2003 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jay Windley <jwindley@lnxi.com>, Morris Jette <jette1@llnl.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -268,13 +269,16 @@ g_slurm_jobcomp_init( char *jobcomp_loc )
 extern int
 g_slurm_jobcomp_fini(void)
 {
-	int rc;
+	slurm_mutex_lock( &context_lock );
 
 	if ( !g_context)
-		return SLURM_SUCCESS;
+		goto done;
 
-	rc = _slurm_jobcomp_context_destroy ( g_context );
+	_slurm_jobcomp_context_destroy ( g_context );
 	g_context = NULL;
+
+  done:
+	slurm_mutex_unlock( &context_lock );
 	return SLURM_SUCCESS;
 }
 
diff --git a/src/common/slurm_jobcomp.h b/src/common/slurm_jobcomp.h
index fdae7d9ef..b56322853 100644
--- a/src/common/slurm_jobcomp.h
+++ b/src/common/slurm_jobcomp.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2003 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.com> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_priority.c b/src/common/slurm_priority.c
new file mode 100644
index 000000000..093718973
--- /dev/null
+++ b/src/common/slurm_priority.c
@@ -0,0 +1,277 @@
+/*****************************************************************************\
+ *  slurm_priority.c - Define priority plugin functions
+ *****************************************************************************
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include "src/common/slurm_priority.h"
+#include "src/common/plugin.h"
+#include "src/common/plugrack.h"
+#include "src/common/xstring.h"
+
+typedef struct slurm_priority_ops {
+	uint32_t (*set)            (uint32_t last_prio,
+				    struct job_record *job_ptr);
+	void     (*reconfig)       ();
+	int      (*set_max_usage)  (uint32_t procs, uint32_t half_life);
+	void     (*set_assoc_usage)(acct_association_rec_t *assoc);
+	List	 (*get_priority_factors)
+				   (priority_factors_request_msg_t *req_msg);
+
+} slurm_priority_ops_t;
+
+typedef struct slurm_priority_context {
+	char	       	*priority_type;
+	plugrack_t     	plugin_list;
+	plugin_handle_t	cur_plugin;
+	int		priority_errno;
+	slurm_priority_ops_t ops;
+} slurm_priority_context_t;
+
+static slurm_priority_context_t * g_priority_context = NULL;
+static pthread_mutex_t		g_priority_context_lock = 
+	PTHREAD_MUTEX_INITIALIZER;
+
+/*
+ * Local functions
+ */
+static slurm_priority_ops_t *_priority_get_ops(
+	slurm_priority_context_t *c);
+static slurm_priority_context_t *_priority_context_create(
+	const char *priority_type);
+static int _priority_context_destroy(
+	slurm_priority_context_t *c);
+
+/*
+ * Locate and load the appropriate plugin
+ */
+static slurm_priority_ops_t * _priority_get_ops(
+	slurm_priority_context_t *c)
+{
+	/*
+	 * Must be synchronized with slurm_priority_ops_t above.
+	 */
+	static const char *syms[] = {
+		"priority_p_set",
+		"priority_p_reconfig",
+		"priority_p_set_max_cluster_usage",
+		"priority_p_set_assoc_usage",
+		"priority_p_get_priority_factors_list",
+	};
+	int n_syms = sizeof( syms ) / sizeof( char * );
+
+	/* Find the correct plugin. */
+        c->cur_plugin = plugin_load_and_link(c->priority_type, n_syms, syms,
+					     (void **) &c->ops);
+        if ( c->cur_plugin != PLUGIN_INVALID_HANDLE ) 
+        	return &c->ops;
+
+	error("Couldn't find the specified plugin name for %s "
+	      "looking at all files",
+	      c->priority_type);
+
+	/* Get plugin list. */
+	if ( c->plugin_list == NULL ) {
+		char *plugin_dir;
+		c->plugin_list = plugrack_create();
+		if ( c->plugin_list == NULL ) {
+			error( "cannot create plugin manager" );
+			return NULL;
+		}
+		plugrack_set_major_type( c->plugin_list, "priority" );
+		plugrack_set_paranoia( c->plugin_list,
+				       PLUGRACK_PARANOIA_NONE,
+				       0 );
+		plugin_dir = slurm_get_plugin_dir();
+		plugrack_read_dir( c->plugin_list, plugin_dir );
+		xfree(plugin_dir);
+	}
+
+	c->cur_plugin = plugrack_use_by_type( c->plugin_list,
+					      c->priority_type );
+	if ( c->cur_plugin == PLUGIN_INVALID_HANDLE ) {
+		error( "cannot find accounting_storage plugin for %s", 
+		       c->priority_type );
+		return NULL;
+	}
+
+	/* Dereference the API. */
+	if ( plugin_get_syms( c->cur_plugin,
+			      n_syms,
+			      syms,
+			      (void **) &c->ops ) < n_syms ) {
+		error( "incomplete priority plugin detected" );
+		return NULL;
+	}
+
+	return &c->ops;
+}
+
+/*
+ * Create a priority context
+ */
+static slurm_priority_context_t *_priority_context_create(
+	const char *priority_type)
+{
+	slurm_priority_context_t *c;
+
+	if ( priority_type == NULL ) {
+		debug3( "_priority_context_create: no uler type" );
+		return NULL;
+	}
+
+	c = xmalloc( sizeof( slurm_priority_context_t ) );
+	c->priority_type	= xstrdup( priority_type );
+	c->plugin_list	= NULL;
+	c->cur_plugin	= PLUGIN_INVALID_HANDLE;
+	c->priority_errno	= SLURM_SUCCESS;
+
+	return c;
+}
+
+/*
+ * Destroy a priority context
+ */
+static int _priority_context_destroy(slurm_priority_context_t *c)
+{
+	/*
+	 * Must check return code here because plugins might still
+	 * be loaded and active.
+	 */
+	if ( c->plugin_list ) {
+		if ( plugrack_destroy( c->plugin_list ) != SLURM_SUCCESS ) {
+			return SLURM_ERROR;
+		}
+	} else {
+		plugin_unload(c->cur_plugin);
+	}
+
+	xfree( c->priority_type );
+	xfree( c );
+
+	return SLURM_SUCCESS;
+}
+
+/*
+ * Initialize context for priority plugin
+ */
+extern int slurm_priority_init(void)
+{
+	int retval = SLURM_SUCCESS;
+	char *priority_type = NULL;
+	
+	slurm_mutex_lock( &g_priority_context_lock );
+
+	if ( g_priority_context )
+		goto done;
+	
+	priority_type = slurm_get_priority_type();
+	
+	g_priority_context = _priority_context_create(priority_type);
+	if ( g_priority_context == NULL ) {
+		error( "cannot create priority context for %s",
+		       priority_type );
+		retval = SLURM_ERROR;
+		goto done;
+	}
+
+	if ( _priority_get_ops( g_priority_context ) == NULL ) {
+		error( "cannot resolve priority plugin operations" );
+		_priority_context_destroy( g_priority_context );
+		g_priority_context = NULL;
+		retval = SLURM_ERROR;
+	}
+
+done:
+	slurm_mutex_unlock( &g_priority_context_lock );
+	xfree(priority_type);
+	return retval;
+}
+
+extern int slurm_priority_fini(void)
+{
+	int rc;
+
+	if (!g_priority_context)
+		return SLURM_SUCCESS;
+
+	rc = _priority_context_destroy( g_priority_context );
+	g_priority_context = NULL;
+	return rc;
+}
+
+extern uint32_t priority_g_set(uint32_t last_prio, struct job_record *job_ptr)
+{
+	if (slurm_priority_init() < 0)
+		return 0;
+
+	return (*(g_priority_context->ops.set))(last_prio, job_ptr);
+}
+
+extern void priority_g_reconfig()
+{
+	if (slurm_priority_init() < 0)
+		return;
+
+	(*(g_priority_context->ops.reconfig))();
+
+	return;
+}
+
+extern int priority_g_set_max_cluster_usage(uint32_t procs, uint32_t half_life)
+{
+	if (slurm_priority_init() < 0)
+		return SLURM_ERROR;
+
+	return (*(g_priority_context->ops.set_max_usage))(procs, half_life);
+}
+
+extern void priority_g_set_assoc_usage(acct_association_rec_t *assoc)
+{
+	if (slurm_priority_init() < 0)
+		return;
+
+       (*(g_priority_context->ops.set_assoc_usage))(assoc);
+       return;
+}
+
+extern List priority_g_get_priority_factors_list(
+	priority_factors_request_msg_t *req_msg)
+{
+	if (slurm_priority_init() < 0)
+		return NULL;
+
+	return (*(g_priority_context->ops.get_priority_factors))(req_msg);
+}
diff --git a/src/common/slurm_priority.h b/src/common/slurm_priority.h
new file mode 100644
index 000000000..2cbe02d07
--- /dev/null
+++ b/src/common/slurm_priority.h
@@ -0,0 +1,77 @@
+/*****************************************************************************\
+ *  slurm_priority.h - Define priority plugin functions
+ *****************************************************************************
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _SLURM_PRIORITY_H 
+#define _SLURM_PRIORITY_H
+
+#if HAVE_CONFIG_H
+#  include "config.h"
+#endif
+#if HAVE_STDINT_H
+#  include <stdint.h>           /* for uint16_t, uint32_t definitions */
+#endif
+#if HAVE_INTTYPES_H
+#  include <inttypes.h>         /* for uint16_t, uint32_t definitions */
+#endif
+
+#include "src/slurmctld/slurmctld.h"
+#include "src/common/slurm_accounting_storage.h"
+
+extern int slurm_priority_init(void);
+extern int slurm_priority_fini(void);
+extern uint32_t priority_g_set(uint32_t last_prio, struct job_record *job_ptr);
+extern void priority_g_reconfig();
+/*
+ * set up how much usage can happen on the cluster during a given half
+ * life.  This can only be done after we get a correct proc count for
+ * the system.
+ * IN: procs - number of proccessors on the system
+ * IN: half_life - time half_life is in seconds.
+ * RET: SLURM_SUCCESS on SUCCESS, SLURM_ERROR else.
+ */
+extern int priority_g_set_max_cluster_usage(uint32_t procs, uint32_t half_life);
+
+/* sets up the normalized usage and the effective usage of an
+ * association.
+ * IN/OUT: assoc - association to have usage set.
+ */
+extern void priority_g_set_assoc_usage(acct_association_rec_t *assoc);
+extern List priority_g_get_priority_factors_list(
+	priority_factors_request_msg_t *req_msg);
+
+#endif /*_SLURM_PRIORIY_H */
diff --git a/src/common/slurm_protocol_api.c b/src/common/slurm_protocol_api.c
index 3bf706dba..5c73501a7 100644
--- a/src/common/slurm_protocol_api.c
+++ b/src/common/slurm_protocol_api.c
@@ -2,13 +2,14 @@
  *  slurm_protocol_api.c - high-level slurm communication functions
  *****************************************************************************
  *  Copyright (C) 2002-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 Kevin Tew <tew1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -91,6 +92,10 @@ static char *_global_auth_key(void);
 static void  _remap_slurmctld_errno(void);
 static int   _unpack_msg_uid(Buf buffer);
 
+#if _DEBUG
+static void _print_data(char *data, int len);
+#endif
+
 /* define the slurmdbd_options flag */
 slurm_dbd_conf_t *slurmdbd_conf = NULL;
 
@@ -181,6 +186,23 @@ void slurm_api_clear_config(void)
 	slurm_conf_destroy();
 }
 
+/* slurm_get_complete_wait
+ * RET CompleteWait value from slurm.conf
+ */
+uint16_t slurm_get_complete_wait(void)
+{
+	uint16_t complete_wait = 0;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {
+	} else {
+		conf = slurm_conf_lock();
+		complete_wait = conf->complete_wait;
+		slurm_conf_unlock();
+	}
+	return complete_wait;
+}
+
 /* update internal configuration data structure as needed.
  *	exit with lock set */
 /* static inline void _lock_update_config() */
@@ -206,6 +228,23 @@ uint16_t slurm_get_batch_start_timeout(void)
 	return batch_start_timeout;
 }
 
+/* slurm_get_resume_timeout
+ * RET ResumeTimeout value from slurm.conf
+ */
+uint16_t slurm_get_resume_timeout(void)
+{
+        uint16_t resume_timeout = 0;
+        slurm_ctl_conf_t *conf;
+
+        if(slurmdbd_conf) {
+        } else {
+                conf = slurm_conf_lock();
+                resume_timeout = conf->resume_timeout;
+                slurm_conf_unlock();
+        }
+        return resume_timeout;
+}
+
 /* slurm_get_def_mem_per_task
  * RET DefMemPerTask value from slurm.conf
  */
@@ -223,6 +262,40 @@ uint32_t slurm_get_def_mem_per_task(void)
 	return mem_per_task;
 }
 
+/* slurm_get_kill_on_bad_exit
+ * RET KillOnBadExit value from slurm.conf
+ */
+uint16_t slurm_get_kill_on_bad_exit(void)
+{
+	uint16_t kill_on_bad_exit = 0;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {
+	} else {
+		conf = slurm_conf_lock();
+		kill_on_bad_exit = conf->kill_on_bad_exit;
+		slurm_conf_unlock();
+	}
+	return kill_on_bad_exit;
+}
+
+/* slurm_get_debug_flags
+ * RET DebugFlags value from slurm.conf
+ */
+uint32_t slurm_get_debug_flags(void)
+{
+	uint32_t debug_flags = 0;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {
+	} else {
+		conf = slurm_conf_lock();
+		debug_flags = conf->debug_flags;
+		slurm_conf_unlock();
+	}
+	return debug_flags;
+}
+
 /* slurm_get_max_mem_per_task
  * RET MaxMemPerTask value from slurm.conf
  */
@@ -292,6 +365,24 @@ char *slurm_get_mpi_default(void)
 	return mpi_default;
 }
 
+/* slurm_get_mpi_params
+ * get mpi parameters value from slurmctld_conf object
+ * RET char *   - mpi default value from slurm.conf,  MUST be xfreed by caller
+ */
+char *slurm_get_mpi_params(void)
+{
+	char *mpi_params = NULL;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {
+	} else {
+		conf = slurm_conf_lock();
+		mpi_params = xstrdup(conf->mpi_params);
+		slurm_conf_unlock();
+	}
+	return mpi_params;
+}
+
 /* slurm_get_msg_timeout
  * get default message timeout value from slurmctld_conf object
  */
@@ -332,6 +423,201 @@ char *slurm_get_plugin_dir(void)
 	return plugin_dir;
 }
 
+/* slurm_get_priority_decay_hl
+ * returns the priority decay half life in seconds from slurmctld_conf object
+ * RET uint32_t - decay_hl in secs.
+ */
+uint32_t slurm_get_priority_decay_hl(void)
+{
+	uint32_t priority_hl = NO_VAL;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {		
+	} else {
+		conf = slurm_conf_lock();
+		priority_hl = conf->priority_decay_hl;
+		slurm_conf_unlock();
+	}
+
+	return priority_hl;
+}
+
+/* slurm_get_priority_favor_small
+ * returns weither or not we are favoring small jobs from slurmctld_conf object
+ * RET bool - true if favor small, false else.
+ */
+bool slurm_get_priority_favor_small(void)
+{
+	bool factor = 0;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {		
+	} else {
+		conf = slurm_conf_lock();
+		factor = conf->priority_favor_small;
+		slurm_conf_unlock();
+	}
+
+	return factor;
+}
+
+
+/* slurm_get_priority_max_age
+ * returns the priority age max in seconds from slurmctld_conf object
+ * RET uint32_t - age_max in secs.
+ */
+uint32_t slurm_get_priority_max_age(void)
+{
+	uint32_t age = NO_VAL;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {		
+	} else {
+		conf = slurm_conf_lock();
+		age = conf->priority_max_age;
+		slurm_conf_unlock();
+	}
+
+	return age;
+}
+
+/* slurm_get_priority_reset_period
+ * returns the priority usage reset period from slurmctld_conf object
+ * RET uint16_t - flag, see PRIORITY_RESET_* in slurm/slurm.h.
+ */
+uint16_t slurm_get_priority_reset_period(void)
+{
+	uint16_t reset_period = (uint16_t) 0;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {		
+	} else {
+		conf = slurm_conf_lock();
+		reset_period = conf->priority_reset_period;
+		slurm_conf_unlock();
+	}
+
+	return reset_period;
+}
+
+/* slurm_get_priority_type
+ * returns the priority type from slurmctld_conf object
+ * RET char *    - priority type, MUST be xfreed by caller
+ */
+char *slurm_get_priority_type(void)
+{
+	char *priority_type = NULL;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {		
+	} else {
+		conf = slurm_conf_lock();
+		priority_type = xstrdup(conf->priority_type);
+		slurm_conf_unlock();
+	}
+
+	return priority_type;
+}
+
+/* slurm_get_priority_weight_age
+ * returns the priority weight for age from slurmctld_conf object
+ * RET uint32_t - factor weight.
+ */
+uint32_t slurm_get_priority_weight_age(void)
+{
+	uint32_t factor = NO_VAL;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {		
+	} else {
+		conf = slurm_conf_lock();
+		factor = conf->priority_weight_age;
+		slurm_conf_unlock();
+	}
+
+	return factor;
+}
+
+
+/* slurm_get_priority_weight_fairshare
+ * returns the priority weight for fairshare from slurmctld_conf object
+ * RET uint32_t - factor weight.
+ */
+uint32_t slurm_get_priority_weight_fairshare(void)
+{
+	uint32_t factor = NO_VAL;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {		
+	} else {
+		conf = slurm_conf_lock();
+		factor = conf->priority_weight_fs;
+		slurm_conf_unlock();
+	}
+
+	return factor;
+}
+
+
+/* slurm_get_priority_weight_job_size
+ * returns the priority weight for job size from slurmctld_conf object
+ * RET uint32_t - factor weight.
+ */
+uint32_t slurm_get_priority_weight_job_size(void)
+{
+	uint32_t factor = NO_VAL;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {		
+	} else {
+		conf = slurm_conf_lock();
+		factor = conf->priority_weight_js;
+		slurm_conf_unlock();
+	}
+
+	return factor;
+}
+
+/* slurm_get_priority_weight_partition
+ * returns the priority weight for partitions from slurmctld_conf object
+ * RET uint32_t - factor weight.
+ */
+uint32_t slurm_get_priority_weight_partition(void)
+{
+	uint32_t factor = NO_VAL;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {		
+	} else {
+		conf = slurm_conf_lock();
+		factor = conf->priority_weight_part;
+		slurm_conf_unlock();
+	}
+
+	return factor;
+}
+
+
+/* slurm_get_priority_weight_qos
+ * returns the priority weight for QOS from slurmctld_conf object
+ * RET uint32_t - factor weight.
+ */
+uint32_t slurm_get_priority_weight_qos(void)
+{
+	uint32_t factor = NO_VAL;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {		
+	} else {
+		conf = slurm_conf_lock();
+		factor = conf->priority_weight_qos;
+		slurm_conf_unlock();
+	}
+
+	return factor;
+}
+
+
 /* slurm_get_private_data
  * get private data from slurmctld_conf object
  */
@@ -441,6 +727,24 @@ extern char *slurm_get_crypto_type(void)
 	return crypto_type;
 }
 
+/* slurm_get_topology_plugin
+ * returns the value of topology_plugin in slurmctld_conf object
+ * RET char *    - topology type, MUST be xfreed by caller
+ */
+extern char * slurm_get_topology_plugin(void)
+{
+	char *topology_plugin = NULL;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {
+	} else {
+		conf = slurm_conf_lock();
+		topology_plugin = xstrdup(conf->topology_plugin);
+		slurm_conf_unlock();
+	}
+	return topology_plugin;
+}
+
 /* slurm_get_propagate_prio_process
  * return the PropagatePrioProcess flag from slurmctld_conf object
  */
@@ -608,6 +912,45 @@ char *slurm_get_accounting_storage_user(void)
 	return storage_user;	
 }
 
+/* slurm_set_accounting_storage_user
+ * IN: char *user (name of file or database)
+ * RET 0 or error code
+ */
+int slurm_set_accounting_storage_user(char *user)
+{
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {
+		xfree(slurmdbd_conf->storage_user);
+		slurmdbd_conf->storage_user = xstrdup(user);
+	} else {
+		conf = slurm_conf_lock();
+		xfree(conf->accounting_storage_user);
+		conf->accounting_storage_user = xstrdup(user);
+		slurm_conf_unlock();
+	}
+	return 0;	
+}
+
+/* slurm_get_accounting_storage_backup_host
+ * returns the storage backup host from slurmctld_conf object
+ * RET char *    - storage backup host,  MUST be xfreed by caller
+ */
+char *slurm_get_accounting_storage_backup_host(void)
+{
+	char *storage_host;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {
+		storage_host = xstrdup(slurmdbd_conf->storage_backup_host);
+	} else {
+		conf = slurm_conf_lock();
+		storage_host = xstrdup(conf->accounting_storage_backup_host);
+		slurm_conf_unlock();
+	}
+	return storage_host;	
+}
+
 /* slurm_get_accounting_storage_host
  * returns the storage host from slurmctld_conf object
  * RET char *    - storage host,  MUST be xfreed by caller
@@ -627,6 +970,26 @@ char *slurm_get_accounting_storage_host(void)
 	return storage_host;	
 }
 
+/* slurm_set_accounting_storage_host
+ * IN: char *host (name of file or database)
+ * RET 0 or error code
+ */
+int slurm_set_accounting_storage_host(char *host)
+{
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {
+		xfree(slurmdbd_conf->storage_host);
+		slurmdbd_conf->storage_host = xstrdup(host);
+	} else {
+		conf = slurm_conf_lock();
+		xfree(conf->accounting_storage_host);
+		conf->accounting_storage_host = xstrdup(host);
+		slurm_conf_unlock();
+	}
+	return 0;	
+}
+
 /* slurm_get_accounting_storage_loc
  * returns the storage location from slurmctld_conf object
  * RET char *    - storage location,  MUST be xfreed by caller
@@ -646,6 +1009,26 @@ char *slurm_get_accounting_storage_loc(void)
 	return storage_loc;	
 }
 
+/* slurm_set_accounting_storage_loc
+ * IN: char *loc (name of file or database)
+ * RET 0 or error code
+ */
+int slurm_set_accounting_storage_loc(char *loc)
+{
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {
+		xfree(slurmdbd_conf->storage_loc);
+		slurmdbd_conf->storage_loc = xstrdup(loc);
+	} else {
+		conf = slurm_conf_lock();
+		xfree(conf->accounting_storage_loc);
+		conf->accounting_storage_loc = xstrdup(loc);
+		slurm_conf_unlock();
+	}
+	return 0;	
+}
+
 /* slurm_get_accounting_storage_enforce
  * returns what level to enforce associations at
  */
@@ -687,26 +1070,6 @@ int slurm_get_is_association_based_accounting(void)
 
 }
 
-/* slurm_set_accounting_storage_loc
- * IN: char *loc (name of file or database)
- * RET 0 or error code
- */
-int slurm_set_accounting_storage_loc(char *loc)
-{
-	slurm_ctl_conf_t *conf;
-
-	if(slurmdbd_conf) {
-		xfree(slurmdbd_conf->storage_loc);
-		slurmdbd_conf->storage_loc = xstrdup(loc);
-	} else {
-		conf = slurm_conf_lock();
-		xfree(conf->accounting_storage_loc);
-		conf->accounting_storage_loc = xstrdup(loc);
-		slurm_conf_unlock();
-	}
-	return 0;	
-}
-
 /* slurm_get_accounting_storage_pass
  * returns the storage password from slurmctld_conf object
  * RET char *    - storage password,  MUST be xfreed by caller
@@ -1013,7 +1376,7 @@ uint16_t slurm_get_slurmd_port(void)
 }
 
 /* slurm_get_slurm_user_id
- * returns slurmd uid from slurmctld_conf object
+ * returns slurm uid from slurmctld_conf object
  * RET uint32_t	- slurm user id
  */
 uint32_t slurm_get_slurm_user_id(void)
@@ -1031,6 +1394,24 @@ uint32_t slurm_get_slurm_user_id(void)
 	return slurm_uid;
 }
 
+/* slurm_get_slurmd_user_id
+ * returns slurmd uid from slurmctld_conf object
+ * RET uint32_t	- slurmd user id
+ */
+uint32_t slurm_get_slurmd_user_id(void)
+{
+	uint32_t slurmd_uid = 0;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {
+	} else {
+		conf = slurm_conf_lock();
+		slurmd_uid = conf->slurmd_user_id;
+		slurm_conf_unlock();
+	}
+	return slurmd_uid;
+}
+
 /* slurm_get_root_filter
  * RET uint16_t  - Value of SchedulerRootFilter */
 extern uint16_t slurm_get_root_filter(void)
@@ -1046,6 +1427,23 @@ extern uint16_t slurm_get_root_filter(void)
 	}
 	return root_filter;
 }
+
+/* slurm_get_sched_params
+ * RET char * - Value of SchedulerParameters, MUST be xfreed by caller */
+extern char *slurm_get_sched_params(void)
+{
+	char *params = 0;
+	slurm_ctl_conf_t *conf;
+
+ 	if(slurmdbd_conf) {
+	} else {
+		conf = slurm_conf_lock();
+		params = conf->sched_params;
+		slurm_conf_unlock();
+	}
+	return params;
+}
+
 /* slurm_get_sched_port
  * RET uint16_t  - Value of SchedulerPort */
 extern uint16_t slurm_get_sched_port(void)
@@ -1098,6 +1496,23 @@ char *slurm_get_select_type(void)
 	return select_type;
 }
 
+/* slurm_get_srun_io_timeout
+ * get default srun I/O task timeout value from slurmctld_conf object
+ */
+uint16_t slurm_get_srun_io_timeout(void)
+{
+	uint16_t srun_io_timeout = 0;
+	slurm_ctl_conf_t *conf;
+
+	if(slurmdbd_conf) {
+	} else {
+		conf = slurm_conf_lock();
+		srun_io_timeout = conf->srun_io_timeout;
+		slurm_conf_unlock();
+	}
+	return srun_io_timeout;
+}
+
 /* slurm_get_switch_type
  * get switch type from slurmctld_conf object
  * RET char *   - switch type, MUST be xfreed by caller
@@ -1246,8 +1661,8 @@ static void _remap_slurmctld_errno(void)
  * general message management functions used by slurmctld, slurmd
 \**********************************************************************/
 
-/* 
- *  Initialize a slurm server at port "port"
+/* In the socket implementation it creates a socket, binds to it, and 
+ *	listens for connections.
  * 
  * IN  port     - port to bind the msg server to
  * RET slurm_fd - file descriptor of the connection created
@@ -1260,6 +1675,29 @@ slurm_fd slurm_init_msg_engine_port(uint16_t port)
 	return _slurm_init_msg_engine(&addr);
 }
 
+/* In the socket implementation it creates a socket, binds to it, and 
+ *	listens for connections.
+ *
+ * IN  addr_name - address to bind the msg server to (NULL means any)
+ * IN  port      - port to bind the msg server to
+ * RET slurm_fd  - file descriptor of the connection created
+ */
+slurm_fd slurm_init_msg_engine_addrname_port(char *addr_name, uint16_t port)
+{
+        slurm_addr addr;
+
+#ifdef BIND_SPECIFIC_ADDR
+	if (addr_name != NULL)
+		slurm_set_addr(&addr, port, addr_name);
+	else
+		slurm_set_addr_any(&addr, port);
+#else
+        slurm_set_addr_any(&addr, port);
+#endif
+
+	return _slurm_init_msg_engine(&addr);
+}
+
 /* 
  *  Same as above, but initialize using a slurm address "addr"
  *
@@ -1479,7 +1917,7 @@ int slurm_receive_msg(slurm_fd fd, slurm_msg_t *msg, int timeout)
 	}
 	
 #if	_DEBUG
-	_print_data (buftemp, rc);
+	_print_data (buf, buflen);
 #endif
 	buffer = create_buf(buf, buflen);
 
@@ -1490,9 +1928,13 @@ int slurm_receive_msg(slurm_fd fd, slurm_msg_t *msg, int timeout)
 	}
 	
 	if (check_header_version(&header) < 0) {
+		slurm_addr resp_addr;
+		char addr_str[32];
 		int uid = _unpack_msg_uid(buffer);
-		error("Invalid Protocol Version %u from uid=%d", 
-			header.version, uid);
+		slurm_get_peer_addr(fd, &resp_addr);
+		slurm_print_slurm_addr(&resp_addr, addr_str, sizeof(addr_str));
+		error("Invalid Protocol Version %u from uid=%d at %s", 
+			header.version, uid, addr_str);
 		free_buf(buffer);
 		rc = SLURM_PROTOCOL_VERSION_ERROR;
 		goto total_return;
@@ -1641,7 +2083,7 @@ List slurm_receive_msgs(slurm_fd fd, int steps, int timeout)
 	}
 	
 #if	_DEBUG
-	_print_data (buftemp, rc);
+	_print_data (buf, buflen);
 #endif
 	buffer = create_buf(buf, buflen);
 
@@ -1652,20 +2094,24 @@ List slurm_receive_msgs(slurm_fd fd, int steps, int timeout)
 	}
 	
 	if(check_header_version(&header) < 0) {
+		slurm_addr resp_addr;
+		char addr_str[32];
 		int uid = _unpack_msg_uid(buffer);
-		error("Invalid Protocol Version %u from uid=%d",
-			header.version, uid);
+		slurm_get_peer_addr(fd, &resp_addr);
+		slurm_print_slurm_addr(&resp_addr, addr_str, sizeof(addr_str));
+		error("Invalid Protocol Version %u from uid=%d at %s", 
+			header.version, uid, addr_str);
 		free_buf(buffer);
 		rc = SLURM_PROTOCOL_VERSION_ERROR;
 		goto total_return;
 	}
 	//info("ret_cnt = %d",header.ret_cnt);
 	if(header.ret_cnt > 0) {
-		ret_list = list_create(destroy_data_info);
-		while((ret_data_info = list_pop(header.ret_list)))
-			list_push(ret_list, ret_data_info);
+		if(header.ret_list)
+			ret_list = header.ret_list;
+		else
+			ret_list = list_create(destroy_data_info);
 		header.ret_cnt = 0;
-		list_destroy(header.ret_list);
 		header.ret_list = NULL;
 	}
 	
@@ -1824,7 +2270,7 @@ int slurm_receive_msg_and_forward(slurm_fd fd, slurm_addr *orig_addr,
 	}
 	
 #if	_DEBUG
-	_print_data (buftemp, rc);
+	_print_data (buf, buflen);
 #endif
 	buffer = create_buf(buf, buflen);
 
@@ -1835,9 +2281,13 @@ int slurm_receive_msg_and_forward(slurm_fd fd, slurm_addr *orig_addr,
 	}
 	
 	if (check_header_version(&header) < 0) {
+		slurm_addr resp_addr;
+		char addr_str[32];
 		int uid = _unpack_msg_uid(buffer);
-		error("Invalid Protocol Version %u from uid=%d", 
-			header.version, uid);
+		slurm_get_peer_addr(fd, &resp_addr);
+		slurm_print_slurm_addr(&resp_addr, addr_str, sizeof(addr_str));
+		error("Invalid Protocol Version %u from uid=%d at %s", 
+			header.version, uid, addr_str);
 		free_buf(buffer);
 		rc = SLURM_PROTOCOL_VERSION_ERROR;
 		goto total_return;
@@ -1872,6 +2322,12 @@ int slurm_receive_msg_and_forward(slurm_fd fd, slurm_addr *orig_addr,
 	if(header.forward.cnt > 0) {
 		debug("forwarding to %u", header.forward.cnt);
 		msg->forward_struct = xmalloc(sizeof(forward_struct_t));
+		slurm_mutex_init(&msg->forward_struct->forward_mutex);
+		pthread_cond_init(&msg->forward_struct->notify, NULL);
+
+		msg->forward_struct->forward_msg = 
+			xmalloc(sizeof(forward_msg_t) * header.forward.cnt);
+		
 		msg->forward_struct->buf_len = remaining_buf(buffer);
 		msg->forward_struct->buf = 
 			xmalloc(sizeof(char) * msg->forward_struct->buf_len);
@@ -2011,7 +2467,7 @@ int slurm_send_node_msg(slurm_fd fd, slurm_msg_t * msg)
 		msg->ret_list = NULL;
 	}
 	forward_wait(msg);
-	
+
 	init_header(&header, msg, msg->flags);
 	
 	/*
@@ -2698,19 +3154,21 @@ List slurm_send_recv_msgs(const char *nodelist, slurm_msg_t *msg,
 			  int timeout, bool quiet)
 {
 	List ret_list = NULL;
-	List tmp_ret_list = NULL;
-	slurm_fd fd = -1;
-	char *name = NULL;
-	char buf[8192];
+//	List tmp_ret_list = NULL;
+//	slurm_fd fd = -1;
+//	char buf[8192];
 	hostlist_t hl = NULL;
-	ret_data_info_t *ret_data_info = NULL;
-	ListIterator itr;
+//	ret_data_info_t *ret_data_info = NULL;
+//	ListIterator itr;
 
 	if(!nodelist || !strlen(nodelist)) {
 		error("slurm_send_recv_msgs: no nodelist given");
 		return NULL;
 	}
+	
 #ifdef HAVE_FRONT_END
+{
+        char *name = NULL;
 	/* only send to the front end node */
 	name = nodelist_nth_host(nodelist, 0);
 	if (!name) {
@@ -2721,89 +3179,104 @@ List slurm_send_recv_msgs(const char *nodelist, slurm_msg_t *msg,
 	}
 	hl = hostlist_create(name);
 	free(name);
+}
 #else
 /* 	info("total sending to %s",nodelist); */
 	hl = hostlist_create(nodelist);
 #endif
-	while((name = hostlist_shift(hl))) {
-		
-		if(slurm_conf_get_addr(name, &msg->address) == SLURM_ERROR) {
-			if (quiet) {
-				debug("slurm_send_recv_msgs: can't find "
-				      "address for host %s, check slurm.conf", 
-				      name);
-			} else {
-				error("slurm_send_recv_msgs: can't find "
-				      "address for host %s, check slurm.conf", 
-				      name);
-			}
-			mark_as_failed_forward(&tmp_ret_list, name, 
-					SLURM_COMMUNICATIONS_CONNECTION_ERROR);
-			free(name);
-			continue;
-		}
-		
-		if ((fd = slurm_open_msg_conn(&msg->address)) < 0) {
-			if (quiet)
-				debug("slurm_send_recv_msgs to %s: %m", name);
-			else
-				error("slurm_send_recv_msgs to %s: %m", name);
-			mark_as_failed_forward(&tmp_ret_list, name, 
-					SLURM_COMMUNICATIONS_CONNECTION_ERROR);
-			free(name);
-			continue;
-		}
 
-		hostlist_ranged_string(hl, sizeof(buf), buf);
-		forward_init(&msg->forward, NULL);
-		msg->forward.nodelist = xstrdup(buf);
-		msg->forward.timeout = timeout;
-		msg->forward.cnt = hostlist_count(hl);
-		if (msg->forward.nodelist[0]) {
-			debug3("sending to %s along with to %s", 
-			       name, msg->forward.nodelist);
-		} else
-			debug3("sending to %s", name);
-		
-		if(!(ret_list = _send_and_recv_msgs(fd, msg, timeout))) {
-			xfree(msg->forward.nodelist);
-			if (quiet) {
-				debug("slurm_send_recv_msgs"
-				      "(_send_and_recv_msgs) to %s: %m", 
-				      name);
-			} else {
-				error("slurm_send_recv_msgs"
-				      "(_send_and_recv_msgs) to %s: %m", 
-				      name);
-			}
-			mark_as_failed_forward(&tmp_ret_list, name, errno);
-			free(name);
-			continue;
-		} else {
-			itr = list_iterator_create(ret_list);
-			while((ret_data_info = list_next(itr))) 
-				if(!ret_data_info->node_name) {
-					ret_data_info->node_name =
-						xstrdup(name);
-				}
-			list_iterator_destroy(itr);
-		}
-		xfree(msg->forward.nodelist);
-		free(name);
-		break;		
+	if(!hl) {
+		error("slurm_send_recv_msgs: problem creating hostlist");
+		return NULL;
 	}
+
+	ret_list = start_msg_tree(hl, msg, timeout);
 	hostlist_destroy(hl);
 
-	if(tmp_ret_list) {
-		if(!ret_list)
-			ret_list = tmp_ret_list;
-		else {
-			while((ret_data_info = list_pop(tmp_ret_list))) 
-				list_push(ret_list, ret_data_info);
-			list_destroy(tmp_ret_list);
-		}
-	} 
 	return ret_list;
+
+	/* The below code will start from the first node in the list
+	 * to start the tree.  The start_msg_tree function starts the
+	 * tree from the calling node. */
+
+/* 	while((name = hostlist_shift(hl))) { */
+		
+/* 		if(slurm_conf_get_addr(name, &msg->address) == SLURM_ERROR) { */
+/* 			if (quiet) { */
+/* 				debug("slurm_send_recv_msgs: can't find " */
+/* 				      "address for host %s, check slurm.conf",  */
+/* 				      name); */
+/* 			} else { */
+/* 				error("slurm_send_recv_msgs: can't find " */
+/* 				      "address for host %s, check slurm.conf",  */
+/* 				      name); */
+/* 			} */
+/* 			mark_as_failed_forward(&tmp_ret_list, name,  */
+/* 					SLURM_COMMUNICATIONS_CONNECTION_ERROR); */
+/* 			free(name); */
+/* 			continue; */
+/* 		} */
+		
+/* 		if ((fd = slurm_open_msg_conn(&msg->address)) < 0) { */
+/* 			if (quiet) */
+/* 				debug("slurm_send_recv_msgs to %s: %m", name); */
+/* 			else */
+/* 				error("slurm_send_recv_msgs to %s: %m", name); */
+/* 			mark_as_failed_forward(&tmp_ret_list, name,  */
+/* 					SLURM_COMMUNICATIONS_CONNECTION_ERROR); */
+/* 			free(name); */
+/* 			continue; */
+/* 		} */
+
+/* 		hostlist_ranged_string(hl, sizeof(buf), buf); */
+/* 		forward_init(&msg->forward, NULL); */
+/* 		msg->forward.nodelist = xstrdup(buf); */
+/* 		msg->forward.timeout = timeout; */
+/* 		msg->forward.cnt = hostlist_count(hl); */
+/* 		if (msg->forward.nodelist[0]) { */
+/* 			debug3("sending to %s along with %s",  */
+/* 			       name, msg->forward.nodelist); */
+/* 		} else */
+/* 			debug3("sending to %s", name); */
+		
+/* 		if(!(ret_list = _send_and_recv_msgs(fd, msg, timeout))) { */
+/* 			xfree(msg->forward.nodelist); */
+/* 			if (quiet) { */
+/* 				debug("slurm_send_recv_msgs" */
+/* 				      "(_send_and_recv_msgs) to %s: %m",  */
+/* 				      name); */
+/* 			} else { */
+/* 				error("slurm_send_recv_msgs" */
+/* 				      "(_send_and_recv_msgs) to %s: %m",  */
+/* 				      name); */
+/* 			} */
+/* 			mark_as_failed_forward(&tmp_ret_list, name, errno); */
+/* 			free(name); */
+/* 			continue; */
+/* 		} else { */
+/* 			itr = list_iterator_create(ret_list); */
+/* 			while((ret_data_info = list_next(itr)))  */
+/* 				if(!ret_data_info->node_name) { */
+/* 					ret_data_info->node_name = */
+/* 						xstrdup(name); */
+/* 				} */
+/* 			list_iterator_destroy(itr); */
+/* 		} */
+/* 		xfree(msg->forward.nodelist); */
+/* 		free(name); */
+/* 		break;		 */
+/* 	} */
+/* 	hostlist_destroy(hl); */
+
+/* 	if(tmp_ret_list) { */
+/* 		if(!ret_list) */
+/* 			ret_list = tmp_ret_list; */
+/* 		else { */
+/* 			list_transfer(ret_list, tmp_ret_list); */
+/* 			list_destroy(tmp_ret_list); */
+/* 		} */
+/* 	}  */
+/* 	return ret_list; */
 }
 
 /*
@@ -2818,7 +3291,6 @@ List slurm_send_recv_msgs(const char *nodelist, slurm_msg_t *msg,
 List slurm_send_addr_recv_msgs(slurm_msg_t *msg, char *name, int timeout)
 {
 	List ret_list = NULL;
-	List tmp_ret_list = NULL;
 	slurm_fd fd = -1;
 	ret_data_info_t *ret_data_info = NULL;
 	ListIterator itr;
@@ -2826,15 +3298,15 @@ List slurm_send_addr_recv_msgs(slurm_msg_t *msg, char *name, int timeout)
 	if ((fd = slurm_open_msg_conn(&msg->address)) < 0) {
 		mark_as_failed_forward(&ret_list, name, 
 				       SLURM_COMMUNICATIONS_CONNECTION_ERROR);
+		errno = SLURM_COMMUNICATIONS_CONNECTION_ERROR;
 		return ret_list;
 	}
 
-	/*just to make sure */
-	forward_init(&msg->forward, NULL);
 	msg->ret_list = NULL;
 	msg->forward_struct = NULL;
 	if(!(ret_list = _send_and_recv_msgs(fd, msg, timeout))) {
-		mark_as_failed_forward(&tmp_ret_list, name, errno);
+		mark_as_failed_forward(&ret_list, name, errno);
+		errno = SLURM_COMMUNICATIONS_CONNECTION_ERROR;
 		return ret_list;
 	} else {
 		itr = list_iterator_create(ret_list);
diff --git a/src/common/slurm_protocol_api.h b/src/common/slurm_protocol_api.h
index 13365c827..34cbcd7cb 100644
--- a/src/common/slurm_protocol_api.h
+++ b/src/common/slurm_protocol_api.h
@@ -3,13 +3,14 @@
  *	definitions
  *****************************************************************************
  *  Copyright (C) 2002-2006 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 Kevin Tew <tew1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -102,11 +103,31 @@ inline slurm_protocol_config_t *slurm_get_api_config(void);
  */
 uint16_t slurm_get_batch_start_timeout(void);
 
+/* slurm_get_resume_timeout
+ * RET ResumeTimeout value from slurm.conf
+ */
+uint16_t slurm_get_resume_timeout(void);
+
+/* slurm_get_complete_wait
+ * RET CompleteWait value from slurm.conf
+ */
+uint16_t slurm_get_complete_wait(void);
+
+/* slurm_get_debug_flags
+ * RET DebugFlags value from slurm.conf
+ */
+uint32_t slurm_get_debug_flags(void);
+
 /* slurm_get_def_mem_per_task
  * RET DefMemPerTask value from slurm.conf
  */
 uint32_t slurm_get_def_mem_per_task(void);
 
+/* slurm_get_kill_on_bad_exit
+ * RET KillOnBadExit value from slurm.conf
+ */
+uint16_t slurm_get_kill_on_bad_exit(void);
+
 /* slurm_get_max_mem_per_task
  * RET MaxMemPerTask value from slurm.conf
  */
@@ -128,6 +149,12 @@ int inline slurm_get_env_timeout(void);
  */
 char *slurm_get_mpi_default(void);
 
+/* slurm_get_mpi_params
+ * get mpi parameters value from slurmctld_conf object
+ * RET char *   - mpi default value from slurm.conf,  MUST be xfreed by caller
+ */
+char *slurm_get_mpi_params(void);
+
 /* slurm_get_msg_timeout
  * get default message timeout value from slurmctld_conf object
  */
@@ -156,24 +183,72 @@ void inline slurm_api_clear_config(void);
  */
 char *slurm_get_health_check_program(void);
 
-/* slurm_get_slurmdbd_addr
- * get slurm_dbd_addr from slurmctld_conf object from slurmctld_conf object
- * RET char *   - slurmdbd_addr, MUST be xfreed by caller
- */
-char *slurm_get_slurmdbd_addr(void);
-
-/* slurm_get_slurmdbd_port
- * get slurm_dbd_port from slurmctld_conf object from slurmctld_conf object
- * RET uint16_t   - dbd_port
- */
-uint16_t slurm_get_slurmdbd_port(void);
-
 /* slurm_get_plugin_dir
  * get plugin directory from slurmctld_conf object from slurmctld_conf object 
  * RET char *   - plugin directory, MUST be xfreed by caller
  */
 char *slurm_get_plugin_dir(void);
 
+/* slurm_get_priority_decay_hl
+ * returns the priority decay half life in seconds from slurmctld_conf object
+ * RET uint32_t - decay_hl in secs.
+ */
+uint32_t slurm_get_priority_decay_hl(void);
+
+/* slurm_get_priority_favor_small
+ * returns weither or not we are favoring small jobs from slurmctld_conf object
+ * RET bool - true if favor small, false else.
+ */
+bool slurm_get_priority_favor_small(void);
+
+/* slurm_get_priority_max_age
+ * returns the priority age max in seconds from slurmctld_conf object
+ * RET uint32_t - max_age in secs.
+ */
+uint32_t slurm_get_priority_max_age(void);
+
+/* slurm_get_priority_reset_period
+ * returns the priority usage reset period in seconds from slurmctld_conf object
+ * RET uint16_t - flag, see PRIORITY_RESET_* in slurm/slurm.h.
+ */
+uint16_t slurm_get_priority_reset_period(void);
+
+/* slurm_get_priority_type
+ * returns the priority type from slurmctld_conf object
+ * RET char *    - priority type, MUST be xfreed by caller
+ */
+char *slurm_get_priority_type(void);
+
+/* slurm_get_priority_weight_age
+ * returns the priority weight for age from slurmctld_conf object
+ * RET uint32_t - factor weight.
+ */
+uint32_t slurm_get_priority_weight_age(void);
+
+/* slurm_get_priority_weight_fairshare
+ * returns the priority weight for fairshare from slurmctld_conf object
+ * RET uint32_t - factor weight.
+ */
+uint32_t slurm_get_priority_weight_fairshare(void);
+
+/* slurm_get_priority_weight_job_size
+ * returns the priority weight for job size from slurmctld_conf object
+ * RET uint32_t - factor weight.
+ */
+uint32_t slurm_get_priority_weight_job_size(void);
+
+/* slurm_get_priority_weight_partition
+ * returns the priority weight for partitions from slurmctld_conf object
+ * RET uint32_t - factor weight.
+ */
+uint32_t slurm_get_priority_weight_partition(void);
+
+/* slurm_get_priority_weight_qos
+ * returns the priority weight for QOS from slurmctld_conf object
+ * RET uint32_t - factor weight.
+ */
+uint32_t slurm_get_priority_weight_qos(void);
+
 /* slurm_get_private_data
  * get private data from slurmctld_conf object
  * RET uint16_t   - private_data
@@ -227,11 +302,18 @@ extern uint16_t slurm_get_fast_schedule(void);
  */
 extern uint16_t slurm_get_track_wckey(void);
 
+/* slurm_get_topology_plugin
+ * returns the value of topology_plugin in slurmctld_conf object
+ * RET char *    - topology type, MUST be xfreed by caller
+ */
+extern char * slurm_get_topology_plugin(void);
+
 /* slurm_set_tree_width
  * sets the value of tree_width in slurmctld_conf object
  * RET 0 or error code
  */
 extern int slurm_set_tree_width(uint16_t tree_width);
+
 /* slurm_get_tree_width
  * returns the value of tree_width in slurmctld_conf object
  */
@@ -249,12 +331,30 @@ char *slurm_get_accounting_storage_type(void);
  */
 char *slurm_get_accounting_storage_user(void);
 
+/* slurm_set_accounting_storage_user
+ * IN: char *user (name of file or database)
+ * RET 0 or error code
+ */
+int slurm_set_accounting_storage_user(char *user);
+
+/* slurm_get_accounting_storage_backup_host
+ * returns the storage host from slurmctld_conf object
+ * RET char *    - storage backup host,  MUST be xfreed by caller
+ */
+char *slurm_get_accounting_storage_backup_host(void);
+
 /* slurm_get_accounting_storage_host
  * returns the storage host from slurmctld_conf object
  * RET char *    - storage host,  MUST be xfreed by caller
  */
 char *slurm_get_accounting_storage_host(void);
 
+/* slurm_set_accounting_storage_host
+ * IN: char *host (name of file or database)
+ * RET 0 or error code
+ */
+int slurm_set_accounting_storage_host(char *host);
+
 /* slurm_get_accounting_storage_enforce
  * returns what level to enforce associations at
  */
@@ -365,6 +465,10 @@ char *slurm_get_proctrack_type(void);
  * RET uint16_t  - Value of SchedulerRootFilter */
 extern uint16_t slurm_get_root_filter(void);
 
+/* slurm_get_sched_params
+ * RET char * - Value of SchedulerParameters, MUST be xfreed by caller */
+extern char *slurm_get_sched_params(void);
+
 /* slurm_get_sched_port
  * RET uint16_t  - Value of SchedulerPort */
 extern uint16_t slurm_get_sched_port(void);
@@ -376,11 +480,17 @@ extern uint16_t slurm_get_sched_port(void);
 uint16_t inline slurm_get_slurmd_port(void);
 
 /* slurm_get_slurm_user_id
- * returns slurmd uid from slurmctld_conf object 
+ * returns slurm uid from slurmctld_conf object 
  * RET uint32_t	- slurm user id
  */
 uint32_t slurm_get_slurm_user_id(void);
 
+/* slurm_get_slurmd_user_id
+ * returns slurmd uid from slurmctld_conf object 
+ * RET uint32_t	- slurmd user id
+ */
+uint32_t slurm_get_slurmd_user_id(void);
+
 /* slurm_get_sched_type
  * get sched type from slurmctld_conf object
  * RET char *   - sched type, MUST be xfreed by caller
@@ -393,6 +503,11 @@ char *slurm_get_sched_type(void);
  */
 char *slurm_get_select_type(void);
 
+/* slurm_get_srun_io_timeout
+ * get default srun I/O task timeout value from slurmctld_conf object
+ */
+uint16_t slurm_get_srun_io_timeout(void);
+
 /* slurm_get_switch_type
  * get switch type from slurmctld_conf object
  * RET char *   - switch type, MUST be xfreed by caller
@@ -438,11 +553,22 @@ uint16_t slurm_get_task_plugin_param(void);
 
 /* In the socket implementation it creates a socket, binds to it, and 
  *	listens for connections.
+ *
  * IN port		- port to bind the msg server to
  * RET slurm_fd		- file descriptor of the connection created
  */
 slurm_fd inline slurm_init_msg_engine_port(uint16_t port);
 
+/* In the socket implementation it creates a socket, binds to it, and 
+ *	listens for connections.
+ *
+ * IN  addr_name        - address to bind the msg server to (NULL means any)
+ * IN port		- port to bind the msg server to
+ * RET slurm_fd		- file descriptor of the connection created
+ */
+slurm_fd inline slurm_init_msg_engine_addrname_port(char *addr_name,
+						    uint16_t port);
+
 /* In the socket implementation it creates a socket, binds to it, and 
  *	listens for connections.
  * IN slurm_address 	- slurm_addr to bind the msg server to 
diff --git a/src/common/slurm_protocol_common.h b/src/common/slurm_protocol_common.h
index 11efc3867..593d04bea 100644
--- a/src/common/slurm_protocol_common.h
+++ b/src/common/slurm_protocol_common.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -62,7 +63,12 @@
 #define SLURM_PROTOCOL_MAX_MESSAGE_BUFFER_SIZE (512*1024)
 
 /* slurm protocol header defines, based upon config.h, 16 bits */ 
+/* A new SLURM_PROTOCOL_VERSION needs to be made each time the version
+ * changes so the slurmdbd can talk all versions for update messages.
+ * In slurm_protocol_util.h init_header(), and check_header_version()
+ * need to be updated also when changes are added */
 #define SLURM_PROTOCOL_VERSION ((SLURM_API_MAJOR << 8) | SLURM_API_AGE)
+#define SLURM_1_3_PROTOCOL_VERSION ((13 << 8) | 0)
 
 /* used to set flags to empty */
 #define SLURM_PROTOCOL_NO_FLAGS 0 
diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c
index e71d6b637..8e15bf5df 100644
--- a/src/common/slurm_protocol_defs.c
+++ b/src/common/slurm_protocol_defs.c
@@ -4,13 +4,14 @@
  *	the slurm daemons directly, not for user client use.
  *****************************************************************************
  *  Copyright (C) 2002-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 Kevin Tew <tew1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -67,6 +68,9 @@ static void _slurm_free_node_info_members (node_info_t * node);
 static void _free_all_partitions (partition_info_msg_t *msg);
 static void _slurm_free_partition_info_members (partition_info_t * part);
 
+static void  _free_all_reservations(reserve_info_msg_t *msg);
+static void _slurm_free_reserve_info_members (reserve_info_t * part);
+
 static void _free_all_step_info (job_step_info_response_msg_t *msg);
 static void _slurm_free_job_step_info_members (job_step_info_t * msg);
 static void _make_lower(char *change);
@@ -111,6 +115,12 @@ extern void slurm_destroy_char(void *object)
 	xfree(tmp);
 }
 
+extern void slurm_destroy_uint32_ptr(void *object)
+{
+	uint32_t *tmp = (uint32_t *)object;
+	xfree(tmp);
+}
+
 /* returns number of objects added to list */
 extern int slurm_addto_char_list(List char_list, char *names)
 {
@@ -285,35 +295,40 @@ void slurm_free_job_desc_msg(job_desc_msg_t * msg)
 	int i;
 
 	if (msg) {
-		select_g_free_jobinfo(&msg->select_jobinfo);
+		xfree(msg->account);
 		xfree(msg->alloc_node);
+		for (i = 0; i < msg->argc; i++)
+			xfree(msg->argv[i]);
+		xfree(msg->argv);
+		xfree(msg->blrtsimage);
+		xfree(msg->ckpt_dir);
+		xfree(msg->comment);
+		xfree(msg->cpu_bind);
+		xfree(msg->dependency);
 		for (i = 0; i < msg->env_size; i++)
 			xfree(msg->environment[i]);
 		xfree(msg->environment);
+		xfree(msg->err);
+		xfree(msg->exc_nodes);
 		xfree(msg->features);
+		xfree(msg->in);
 		xfree(msg->licenses);
+		xfree(msg->linuximage);
 		xfree(msg->mail_user);
+		xfree(msg->mem_bind);
+		xfree(msg->mloaderimage);
 		xfree(msg->name);
+		xfree(msg->network);
+		xfree(msg->out);
 		xfree(msg->partition);
+		xfree(msg->ramdiskimage);
 		xfree(msg->req_nodes);
-		xfree(msg->exc_nodes);
+		xfree(msg->reservation);
+		xfree(msg->resp_host);
 		xfree(msg->script);
-		for (i = 0; i < msg->argc; i++)
-			xfree(msg->argv[i]);
-		xfree(msg->argv);
-		xfree(msg->err);
-		xfree(msg->in);
-		xfree(msg->out);
+		select_g_free_jobinfo(&msg->select_jobinfo);
+		xfree(msg->wckey);
 		xfree(msg->work_dir);
-		xfree(msg->account);
-		xfree(msg->network);
-		xfree(msg->comment);
-		xfree(msg->dependency);
-		xfree(msg->resp_host);
-		xfree(msg->blrtsimage);
-		xfree(msg->linuximage);
-		xfree(msg->mloaderimage);
-		xfree(msg->ramdiskimage);
 		xfree(msg);
 	}
 }
@@ -324,6 +339,7 @@ void slurm_free_job_launch_msg(batch_job_launch_msg_t * msg)
 
 	if (msg) {
 		xfree(msg->nodes);
+		xfree(msg->cpu_bind);
 		xfree(msg->cpus_per_node);
 		xfree(msg->cpu_count_reps);
 		xfree(msg->script);
@@ -331,6 +347,8 @@ void slurm_free_job_launch_msg(batch_job_launch_msg_t * msg)
 		xfree(msg->in);
 		xfree(msg->out);
 		xfree(msg->work_dir);
+		xfree(msg->ckpt_dir);
+		xfree(msg->restart_dir);
 
 		for (i = 0; i < msg->argc; i++)
 			xfree(msg->argv[i]);
@@ -360,26 +378,29 @@ void slurm_free_job_info(job_info_t * job)
 void slurm_free_job_info_members(job_info_t * job)
 {
 	if (job) {
-		xfree(job->nodes);
-		xfree(job->partition);
 		xfree(job->account);
-		xfree(job->name);
 		xfree(job->alloc_node);
-		xfree(job->node_inx);
-		xfree(job->cpus_per_node);
+		xfree(job->command);
+		xfree(job->comment);
 		xfree(job->cpu_count_reps);
-		select_g_free_jobinfo(&job->select_jobinfo);
-		xfree(job->features);
-		xfree(job->req_nodes);
-		xfree(job->req_node_inx);
+		xfree(job->cpus_per_node);
+		xfree(job->dependency);
 		xfree(job->exc_nodes);
 		xfree(job->exc_node_inx);
+		xfree(job->features);
+		xfree(job->licenses);
+		xfree(job->name);
 		xfree(job->network);
-		xfree(job->comment);
-		xfree(job->dependency);
+		xfree(job->node_inx);
+		xfree(job->nodes);
+		xfree(job->partition);
+		xfree(job->resv_name);
+		xfree(job->req_nodes);
+		xfree(job->req_node_inx);
+		select_g_free_jobinfo(&job->select_jobinfo);
+		xfree(job->state_desc);
+		xfree(job->wckey);
 		xfree(job->work_dir);
-		xfree(job->command);
-		xfree(job->licenses);
 	}
 }
 
@@ -402,8 +423,8 @@ void slurm_free_node_registration_status_msg(
 void slurm_free_update_node_msg(update_node_msg_t * msg)
 {
 	if (msg) {
-		xfree(msg->node_names);
 		xfree(msg->features);
+		xfree(msg->node_names);
 		xfree(msg->reason);
 		xfree(msg);
 	}
@@ -412,9 +433,10 @@ void slurm_free_update_node_msg(update_node_msg_t * msg)
 void slurm_free_update_part_msg(update_part_msg_t * msg)
 {
 	if (msg) {
+		xfree(msg->allow_alloc_nodes);
+		xfree(msg->allow_groups);
 		xfree(msg->name);
 		xfree(msg->nodes);
-		xfree(msg->allow_groups);
 		xfree(msg);
 	}
 }
@@ -427,6 +449,32 @@ void slurm_free_delete_part_msg(delete_part_msg_t * msg)
 	}
 }
 
+void slurm_free_resv_desc_msg(resv_desc_msg_t * msg)
+{
+	if (msg) {
+		xfree(msg->accounts);
+		xfree(msg->features);
+		xfree(msg->partition);
+		xfree(msg->name);
+		xfree(msg->node_list);
+		xfree(msg->users);
+		xfree(msg);
+	}
+}
+
+void slurm_free_resv_name_msg(reservation_name_msg_t * msg)
+{
+	if (msg) {
+		xfree(msg->name);
+		xfree(msg);
+	}
+}
+
+void slurm_free_resv_info_request_msg(resv_info_request_msg_t * msg)
+{
+	xfree(msg);
+}
+
 void slurm_free_job_step_create_request_msg(job_step_create_request_msg_t *
 					    msg)
 {
@@ -435,7 +483,7 @@ void slurm_free_job_step_create_request_msg(job_step_create_request_msg_t *
 		xfree(msg->name);
 		xfree(msg->network);
 		xfree(msg->node_list);
-		xfree(msg->ckpt_path);
+		xfree(msg->ckpt_dir);
 		xfree(msg);
 	}
 }
@@ -443,9 +491,7 @@ void slurm_free_job_step_create_request_msg(job_step_create_request_msg_t *
 void slurm_free_complete_job_allocation_msg(
 	complete_job_allocation_msg_t * msg)
 {
-	if (msg) {
-		xfree(msg);
-	}
+	xfree(msg);
 }
 
 void slurm_free_complete_batch_script_msg(complete_batch_script_msg_t * msg)
@@ -536,7 +582,8 @@ void slurm_free_launch_tasks_request_msg(launch_tasks_request_msg_t * msg)
 	xfree(msg->task_epilog);
 	xfree(msg->complete_nodelist);
 
-	xfree(msg->ckpt_path);
+	xfree(msg->ckpt_dir);
+	xfree(msg->restart_dir);
 
 	if (msg->switch_job)
 		switch_free_jobinfo(msg->switch_job);
@@ -585,7 +632,10 @@ void slurm_free_kill_tasks_msg(kill_tasks_msg_t * msg)
 
 void slurm_free_checkpoint_tasks_msg(checkpoint_tasks_msg_t * msg)
 {
-	xfree(msg);
+	if (msg) {
+		xfree(msg->image_dir);
+		xfree(msg);
+	}
 }
 
 void slurm_free_epilog_complete_msg(epilog_complete_msg_t * msg)
@@ -627,6 +677,14 @@ void inline slurm_free_srun_node_fail_msg(srun_node_fail_msg_t * msg)
 	}
 }
 
+void inline slurm_free_srun_step_missing_msg(srun_step_missing_msg_t * msg)
+{
+	if (msg) {
+		xfree(msg->nodelist);
+		xfree(msg);
+	}
+}
+
 void inline slurm_free_srun_timeout_msg(srun_timeout_msg_t * msg)
 {
 	xfree(msg);
@@ -642,7 +700,10 @@ void inline slurm_free_srun_user_msg(srun_user_msg_t * user_msg)
 
 void inline slurm_free_checkpoint_msg(checkpoint_msg_t *msg)
 {
-	xfree(msg);
+	if (msg) {
+		xfree(msg->image_dir);
+		xfree(msg);
+	}
 }
 
 void inline slurm_free_checkpoint_comp_msg(checkpoint_comp_msg_t *msg)
@@ -697,8 +758,14 @@ extern char *job_reason_string(enum job_state_reason inx)
 			return "BeginTime";
 		case WAIT_LICENSES:
 			return "Licenses";
-		case WAIT_ASSOC_LIMIT:
-			return "AssociationLimit";
+		case WAIT_ASSOC_JOB_LIMIT:
+			return "AssociationJobLimit";
+		case WAIT_ASSOC_RESOURCE_LIMIT:
+			return "AssociationResourceLimit";
+		case WAIT_ASSOC_TIME_LIMIT:
+			return "AssociationTimeLimit";
+		case WAIT_RESERVATION:
+			return "Reservation";
 		case FAIL_DOWN_PARTITION:
 			return "PartitionDown";
 		case FAIL_DOWN_NODE:
@@ -781,6 +848,34 @@ private_data_string(uint16_t private_data, char *str, int str_len)
 		strcat(str, "none");
 }
 
+extern void
+accounting_enforce_string(uint16_t enforce, char *str, int str_len)
+{
+	if (str_len > 0)
+		str[0] = '\0';
+	if (str_len < 26) {
+		error("enforce: output buffer too small");
+		return;
+	}
+
+	if (enforce & ACCOUNTING_ENFORCE_ASSOCS)
+		strcat(str, "associations"); //12 len
+	if (enforce & ACCOUNTING_ENFORCE_LIMITS) {
+		if (str[0])
+			strcat(str, ",");
+		strcat(str, "limits"); //7 len
+	}
+	if (enforce & ACCOUNTING_ENFORCE_WCKEYS) {
+		if (str[0])
+			strcat(str, ",");
+		strcat(str, "wckeys"); //7 len
+	}
+	// total len 26
+
+	if (str[0] == '\0')
+		strcat(str, "none");
+}
+
 char *job_state_string(enum job_states inx)
 {
 	if (inx & JOB_COMPLETING)
@@ -835,18 +930,62 @@ char *job_state_string_compact(enum job_states inx)
 	}
 }
 
+extern char *reservation_flags_string(uint16_t flags)
+{
+	char *flag_str = xstrdup("");
+
+	if (flags & RESERVE_FLAG_MAINT)
+		xstrcat(flag_str, "MAINT");
+	if (flags & RESERVE_FLAG_NO_MAINT) {
+		if (flag_str[0])
+			xstrcat(flag_str, ",");
+		xstrcat(flag_str, "NO_MAINT");
+	}
+	if (flags & RESERVE_FLAG_DAILY) {
+		if (flag_str[0])
+			xstrcat(flag_str, ",");
+		xstrcat(flag_str, "DAILY");
+	}
+	if (flags & RESERVE_FLAG_NO_DAILY) {
+		if (flag_str[0])
+			xstrcat(flag_str, ",");
+		xstrcat(flag_str, "NO_DAILY");
+	}
+	if (flags & RESERVE_FLAG_WEEKLY) {
+		if (flag_str[0])
+			xstrcat(flag_str, ",");
+		xstrcat(flag_str, "WEEKLY");
+	}
+	if (flags & RESERVE_FLAG_NO_WEEKLY) {
+		if (flag_str[0])
+			xstrcat(flag_str, ",");
+		xstrcat(flag_str, "NO_WEEKLY");
+	}
+	if (flags & RESERVE_FLAG_SPEC_NODES) {
+		if (flag_str[0])
+			xstrcat(flag_str, ",");
+		xstrcat(flag_str, "SPEC_NODES");
+	}
+	return flag_str;
+}
+
 char *node_state_string(enum node_states inx)
 {
+	int  base         = (inx & NODE_STATE_BASE);
 	bool comp_flag    = (inx & NODE_STATE_COMPLETING);
 	bool drain_flag   = (inx & NODE_STATE_DRAIN);
 	bool fail_flag    = (inx & NODE_STATE_FAIL);
+	bool maint_flag   = (inx & NODE_STATE_MAINT);
 	bool no_resp_flag = (inx & NODE_STATE_NO_RESPOND);
 	bool power_flag   = (inx & NODE_STATE_POWER_SAVE);
 
-	inx = (uint16_t) (inx & NODE_STATE_BASE);
-
+	if (maint_flag) {
+		if (no_resp_flag)
+			return "MAINT*";
+		return "MAINT";
+	}
 	if (drain_flag) {
-		if (comp_flag || (inx == NODE_STATE_ALLOCATED)) {
+		if (comp_flag || (base == NODE_STATE_ALLOCATED)) {
 			if (no_resp_flag)
 				return "DRAINING*";
 			return "DRAINING";
@@ -857,7 +996,7 @@ char *node_state_string(enum node_states inx)
 		}
 	}
 	if (fail_flag) {
-		if (comp_flag || (inx == NODE_STATE_ALLOCATED)) {
+		if (comp_flag || (base == NODE_STATE_ALLOCATED)) {
 			if (no_resp_flag)
 				return "FAILING*";
 			return "FAILING";
@@ -867,12 +1006,16 @@ char *node_state_string(enum node_states inx)
 			return "FAIL";
 		}
 	}
-	if (inx == NODE_STATE_DOWN) {
+	if (inx == NODE_STATE_POWER_SAVE)
+		return "POWER_DOWN";
+	if (inx == NODE_STATE_POWER_UP)
+		return "POWER_UP";
+	if (base == NODE_STATE_DOWN) {
 		if (no_resp_flag)
 			return "DOWN*";
 		return "DOWN";
 	}
-	if (inx == NODE_STATE_ALLOCATED) {
+	if (base == NODE_STATE_ALLOCATED) {
 		if (no_resp_flag)
 			return "ALLOCATED*";
 		if (comp_flag)
@@ -884,14 +1027,21 @@ char *node_state_string(enum node_states inx)
 			return "COMPLETING*";
 		return "COMPLETING";
 	}
-	if (inx == NODE_STATE_IDLE) {
+	if (base == NODE_STATE_IDLE) {
 		if (no_resp_flag)
 			return "IDLE*";
 		if (power_flag)
 			return "IDLE~";
 		return "IDLE";
 	}
-	if (inx == NODE_STATE_UNKNOWN) {
+	if (base == NODE_STATE_FUTURE) {
+		if (no_resp_flag)
+			return "FUTURE*";
+		if (power_flag)
+			return "FUTURE~";
+		return "FUTURE";
+	}
+	if (base == NODE_STATE_UNKNOWN) {
 		if (no_resp_flag)
 			return "UNKNOWN*";
 		return "UNKNOWN";
@@ -904,11 +1054,17 @@ char *node_state_string_compact(enum node_states inx)
 	bool comp_flag    = (inx & NODE_STATE_COMPLETING);
 	bool drain_flag   = (inx & NODE_STATE_DRAIN);
 	bool fail_flag    = (inx & NODE_STATE_FAIL);
+	bool maint_flag   = (inx & NODE_STATE_MAINT);
 	bool no_resp_flag = (inx & NODE_STATE_NO_RESPOND);
 	bool power_flag   = (inx & NODE_STATE_POWER_SAVE);
 
 	inx = (uint16_t) (inx & NODE_STATE_BASE);
 
+	if (maint_flag) {
+		if (no_resp_flag)
+			return "MAINT*";
+		return "MAINT";
+	}
 	if (drain_flag) {
 		if (comp_flag || (inx == NODE_STATE_ALLOCATED)) {
 			if (no_resp_flag)
@@ -955,6 +1111,13 @@ char *node_state_string_compact(enum node_states inx)
 			return "IDLE~";
 		return "IDLE";
 	}
+	if (inx == NODE_STATE_FUTURE) {
+		if (no_resp_flag)
+			return "FUTR*";
+		if (power_flag)
+			return "FUTR~";
+		return "FUTR";
+	}
 	if (inx == NODE_STATE_UNKNOWN) {
 		if (no_resp_flag)
 			return "UNK*";
@@ -1010,6 +1173,7 @@ void slurm_free_job_step_create_response_msg(
 		job_step_create_response_msg_t * msg)
 {
 	if (msg) {
+		xfree(msg->resv_ports);
 		slurm_step_layout_destroy(msg->step_layout);
 		slurm_cred_destroy(msg->cred);
 		if (msg->switch_job)
@@ -1056,8 +1220,10 @@ void slurm_free_ctl_conf(slurm_ctl_conf_info_msg_t * config_ptr)
 		xfree(config_ptr->control_machine);
 		xfree(config_ptr->crypto_type);
 		xfree(config_ptr->epilog);
+		xfree(config_ptr->epilog_slurmctld);
 		xfree(config_ptr->health_check_program);
 		xfree(config_ptr->job_acct_gather_type);
+		xfree(config_ptr->job_ckpt_dir);
 		xfree(config_ptr->job_comp_host);
 		xfree(config_ptr->job_comp_loc);
 		xfree(config_ptr->job_comp_pass);
@@ -1068,11 +1234,13 @@ void slurm_free_ctl_conf(slurm_ctl_conf_info_msg_t * config_ptr)
 		xfree(config_ptr->licenses);
 		xfree(config_ptr->mail_prog);
 		xfree(config_ptr->mpi_default);
+		xfree(config_ptr->mpi_params);
 		xfree(config_ptr->node_prefix);
 		xfree(config_ptr->plugindir);
 		xfree(config_ptr->plugstack);
 		xfree(config_ptr->proctrack_type);
 		xfree(config_ptr->prolog);
+		xfree(config_ptr->prolog_slurmctld);
 		xfree(config_ptr->propagate_rlimits);
 		xfree(config_ptr->propagate_rlimits_except);
 		xfree(config_ptr->resume_program);
@@ -1080,6 +1248,8 @@ void slurm_free_ctl_conf(slurm_ctl_conf_info_msg_t * config_ptr)
 		xfree(config_ptr->sched_params);
 		xfree(config_ptr->schedtype);
 		xfree(config_ptr->select_type);
+		if(config_ptr->select_conf_key_pairs) 
+			list_destroy((List)config_ptr->select_conf_key_pairs);
 		xfree(config_ptr->slurm_conf);
 		xfree(config_ptr->slurm_user_name);
 		xfree(config_ptr->slurmctld_pidfile);
@@ -1098,7 +1268,9 @@ void slurm_free_ctl_conf(slurm_ctl_conf_info_msg_t * config_ptr)
 		xfree(config_ptr->task_plugin);
 		xfree(config_ptr->task_prolog);
 		xfree(config_ptr->tmp_fs);
+		xfree(config_ptr->topology_plugin);
 		xfree(config_ptr->unkillable_program);
+		xfree(config_ptr->z_char);
 		xfree(config_ptr);
 	}
 }
@@ -1182,7 +1354,7 @@ static void _slurm_free_job_step_info_members (job_step_info_t * msg)
 	if (msg != NULL) {
 		xfree(msg->partition);
 		xfree(msg->nodes);
-		xfree(msg->ckpt_path);
+		xfree(msg->ckpt_dir);
 	}
 }
 
@@ -1261,13 +1433,79 @@ static void  _free_all_partitions(partition_info_msg_t *msg)
 static void _slurm_free_partition_info_members(partition_info_t * part)
 {
 	if (part) {
-		xfree(part->name);
+		xfree(part->allow_alloc_nodes);
 		xfree(part->allow_groups);
+		xfree(part->name);
 		xfree(part->nodes);
 		xfree(part->node_inx);
 	}
 }
 
+/*
+ * slurm_free_reserve_info_msg - free the reservation information 
+ *	response message
+ * IN msg - pointer to reservation information response message
+ * NOTE: buffer is loaded by slurm_load_reservation
+ */
+void slurm_free_reservation_info_msg(reserve_info_msg_t * msg)
+{
+	if (msg) {
+		if (msg->reservation_array) {
+			_free_all_reservations(msg);
+			xfree(msg->reservation_array);
+		}
+		xfree(msg);
+	}
+}
+
+static void  _free_all_reservations(reserve_info_msg_t *msg)
+{
+	int i;
+
+	if ((msg == NULL) ||
+	    (msg->reservation_array == NULL))
+		return;
+
+	for (i = 0; i < msg->record_count; i++)
+		_slurm_free_reserve_info_members(
+			&msg->reservation_array[i]);
+
+}
+
+static void _slurm_free_reserve_info_members(reserve_info_t * resv)
+{
+	if (resv) {
+		xfree(resv->accounts);
+		xfree(resv->features);
+		xfree(resv->name);
+		xfree(resv->node_inx);
+		xfree(resv->node_list);
+		xfree(resv->partition);
+		xfree(resv->users);
+	}
+}
+
+/*
+ * slurm_free_topo_info_msg - free the switch topology configuration 
+ *	information response message
+ * IN msg - pointer to switch topology configuration response message
+ * NOTE: buffer is loaded by slurm_load_topo.
+ */
+extern void slurm_free_topo_info_msg(topo_info_response_msg_t *msg)
+{
+	int i;
+
+	if (msg) {
+		for (i = 0; i < msg->record_count; i++) {
+			xfree(msg->topo_array[i].name);
+			xfree(msg->topo_array[i].nodes);
+			xfree(msg->topo_array[i].switches);
+		}
+		xfree(msg);
+	}
+}
+
+
 extern void slurm_free_file_bcast_msg(file_bcast_msg_t *msg)
 {
 	if (msg) {
@@ -1315,6 +1553,68 @@ void slurm_free_set_debug_level_msg(set_debug_level_msg_t *msg)
 	xfree(msg);
 }
 
+void inline slurm_destroy_association_shares_object(void *object) 
+{
+	association_shares_object_t *obj_ptr = 
+		(association_shares_object_t *)object;
+	
+	if(obj_ptr) {
+		xfree(obj_ptr->cluster);
+		xfree(obj_ptr->name);
+		xfree(obj_ptr->parent);
+		xfree(obj_ptr);
+	}
+}
+
+void inline slurm_free_shares_request_msg(shares_request_msg_t *msg)
+{
+	if(msg) {
+		if(msg->acct_list)
+			list_destroy(msg->acct_list);
+		if(msg->user_list)
+			list_destroy(msg->user_list);
+		xfree(msg);
+	}
+}
+
+void inline slurm_free_shares_response_msg(shares_response_msg_t *msg)
+{
+	if(msg) {
+		if(msg->assoc_shares_list)
+			list_destroy(msg->assoc_shares_list);
+		xfree(msg);
+	}
+}
+
+void inline slurm_destroy_priority_factors_object(void *object)
+{
+	priority_factors_object_t *obj_ptr =
+		(priority_factors_object_t *)object;
+	xfree(obj_ptr);
+}
+
+void inline slurm_free_priority_factors_request_msg(
+	priority_factors_request_msg_t *msg)
+{
+	if(msg) {
+		if(msg->job_id_list)
+			list_destroy(msg->job_id_list);
+		if(msg->uid_list)
+			list_destroy(msg->uid_list);
+		xfree(msg);
+	}
+}
+
+void inline slurm_free_priority_factors_response_msg(
+	priority_factors_response_msg_t *msg)
+{
+	if(msg) {
+		if(msg->priority_factors_list)
+			list_destroy(msg->priority_factors_list);
+		xfree(msg);
+	}
+}
+
 
 void inline slurm_free_accounting_update_msg(accounting_update_msg_t *msg)
 {
@@ -1377,12 +1677,24 @@ extern int slurm_free_msg_data(slurm_msg_type_t type, void *data)
 	case REQUEST_UPDATE_NODE:
 		slurm_free_update_node_msg(data);
 		break;
+	case REQUEST_CREATE_PARTITION:
 	case REQUEST_UPDATE_PARTITION:
 		slurm_free_update_part_msg(data);
 		break;
 	case REQUEST_DELETE_PARTITION:		
 		slurm_free_delete_part_msg(data);
 		break;
+	case REQUEST_CREATE_RESERVATION:
+	case REQUEST_UPDATE_RESERVATION:
+		slurm_free_resv_desc_msg(data);
+		break;
+	case REQUEST_DELETE_RESERVATION:
+	case RESPONSE_CREATE_RESERVATION:		
+		slurm_free_resv_name_msg(data);
+		break;
+	case REQUEST_RESERVATION_INFO:
+		slurm_free_resv_info_request_msg(data);
+		break;
 	case REQUEST_NODE_REGISTRATION_STATUS:
 		slurm_free_node_registration_status_msg(data);
 		break;
@@ -1403,6 +1715,18 @@ extern int slurm_free_msg_data(slurm_msg_type_t type, void *data)
 	case REQUEST_JOB_INFO_SINGLE:
 		slurm_free_job_id_msg(data);
 		break;
+	case REQUEST_SHARE_INFO:
+		slurm_free_shares_request_msg(data);
+		break;
+	case RESPONSE_SHARE_INFO:
+		slurm_free_shares_response_msg(data);
+		break;
+	case REQUEST_PRIORITY_FACTORS:
+		slurm_free_priority_factors_request_msg(data);
+		break;
+	case RESPONSE_PRIORITY_FACTORS:
+		slurm_free_priority_factors_response_msg(data);
+		break;
 	case REQUEST_NODE_SELECT_INFO:
 		slurm_free_node_select_msg(data);
 		break;
@@ -1463,16 +1787,21 @@ extern int slurm_free_msg_data(slurm_msg_type_t type, void *data)
 	case REQUEST_PING:		
 	case REQUEST_RECONFIGURE:
 	case REQUEST_CONTROL:
+	case REQUEST_TAKEOVER:
 	case REQUEST_SHUTDOWN_IMMEDIATE:
 	case RESPONSE_FORWARD_FAILED:
 	case REQUEST_DAEMON_STATUS:
 	case REQUEST_HEALTH_CHECK:
 	case ACCOUNTING_FIRST_REG:
+	case REQUEST_TOPO_INFO:
 		/* No body to free */
 		break;
 	case ACCOUNTING_UPDATE_MSG:
 		slurm_free_accounting_update_msg(data);
 		break;
+	case RESPONSE_TOPO_INFO:
+		slurm_free_topo_info_msg(data);
+		break;
 	default:
 		error("invalid type trying to be freed %u", type);
 		break; 
diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h
index cfb2f9c5a..c014f1a21 100644
--- a/src/common/slurm_protocol_defs.h
+++ b/src/common/slurm_protocol_defs.h
@@ -2,13 +2,14 @@
  *  slurm_protocol_defs.h - definitions used for RPCs
  *****************************************************************************
  *  Copyright (C) 2002-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 Kevin Tew <tew1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -95,6 +96,7 @@ typedef enum {
 	REQUEST_CONTROL,
 	REQUEST_SET_DEBUG_LEVEL,
 	REQUEST_HEALTH_CHECK,
+	REQUEST_TAKEOVER,
 	
 	REQUEST_BUILD_INFO = 2001,
 	RESPONSE_BUILD_INFO,
@@ -117,11 +119,24 @@ typedef enum {
 	REQUEST_TRIGGER_CLEAR,
 	RESPONSE_TRIGGER_GET,
 	REQUEST_JOB_INFO_SINGLE,
+	REQUEST_SHARE_INFO,
+	RESPONSE_SHARE_INFO,
+	REQUEST_RESERVATION_INFO,
+	RESPONSE_RESERVATION_INFO,
+	REQUEST_PRIORITY_FACTORS,
+	RESPONSE_PRIORITY_FACTORS,
+	REQUEST_TOPO_INFO,
+	RESPONSE_TOPO_INFO,
 
 	REQUEST_UPDATE_JOB = 3001,
 	REQUEST_UPDATE_NODE,
-	REQUEST_UPDATE_PARTITION,
+	REQUEST_CREATE_PARTITION,
 	REQUEST_DELETE_PARTITION,
+	REQUEST_UPDATE_PARTITION,
+	REQUEST_CREATE_RESERVATION,
+	RESPONSE_CREATE_RESERVATION,
+	REQUEST_DELETE_RESERVATION,
+	REQUEST_UPDATE_RESERVATION,
 
 	REQUEST_RESOURCE_ALLOCATION = 4001,
 	RESPONSE_RESOURCE_ALLOCATION,
@@ -195,6 +210,7 @@ typedef enum {
 	SRUN_JOB_COMPLETE,
 	SRUN_USER_MSG,
 	SRUN_EXEC,
+	SRUN_STEP_MISSING,
 
 	PMI_KVS_PUT_REQ = 7201,
 	PMI_KVS_PUT_RESP,
@@ -294,6 +310,56 @@ typedef struct ret_data_info {
  * Slurm Protocol Data Structures
 \*****************************************************************************/
 
+typedef struct association_shares_object {
+	uint32_t assoc_id;	/* association ID */
+
+	char *cluster;          /* cluster name */
+	char *name;             /* name */
+	char *parent;           /* parent name */
+
+	double shares_norm;     /* normalized shares */
+	uint32_t shares_raw;	/* number of shares allocated */
+
+	double usage_efctv;	/* effective, normalized usage */
+	double usage_norm;	/* normalized usage */
+	uint64_t usage_raw;	/* measure of resource usage */
+
+	uint16_t user;          /* 1 if user association 0 if account
+				 * association */
+} association_shares_object_t;
+
+typedef struct shares_request_msg {
+	List acct_list;
+	List user_list;
+} shares_request_msg_t;
+
+typedef struct shares_response_msg {
+	List assoc_shares_list; /* list of association_shares_object_t *'s */
+	uint64_t tot_shares;
+} shares_response_msg_t;
+
+typedef struct priority_factors_object {
+	uint32_t job_id;
+	uint32_t user_id;
+
+	double	 priority_age;
+	double	 priority_fs;
+	double	 priority_js;
+	double	 priority_part;
+	double	 priority_qos;
+
+	uint16_t nice;
+} priority_factors_object_t;
+
+typedef struct priority_factors_request_msg {
+	List	 job_id_list;
+	List	 uid_list;
+} priority_factors_request_msg_t;
+
+typedef struct priority_factors_response_msg {
+	List	 priority_factors_list;	/* priority_factors_object_t list */
+} priority_factors_response_msg_t;
+
 typedef struct job_step_kill_msg {
 	uint32_t job_id;
 	uint32_t job_step_id;
@@ -342,6 +408,10 @@ typedef struct part_info_request_msg {
 	uint16_t show_flags;
 } part_info_request_msg_t;
 
+typedef struct resv_info_request_msg {
+        time_t last_update;
+} resv_info_request_msg_t;
+
 typedef struct complete_job_allocation {
 	uint32_t job_id;
 	uint32_t job_rc;
@@ -380,8 +450,8 @@ typedef struct kill_tasks_msg {
 typedef struct checkpoint_tasks_msg {
 	uint32_t job_id;
 	uint32_t job_step_id;
-	uint32_t signal;
 	time_t timestamp;
+	char *image_dir;
 } checkpoint_tasks_msg_t;
 
 typedef struct epilog_complete_msg {
@@ -404,37 +474,40 @@ typedef struct set_debug_level_msg {
 } set_debug_level_msg_t;
 
 typedef struct job_step_specs {
-	uint32_t job_id;	/* job ID */
-	uint32_t user_id;	/* user the job runs as */
-	uint32_t node_count;	/* count of required nodes */
-	uint32_t cpu_count;	/* count of required processors */
-	uint32_t num_tasks;	/* number of tasks required */
-	uint16_t relative;	/* first node to use of job's allocation */
-	uint16_t task_dist;	/* see enum task_dist_state */
-	uint16_t plane_size;	/* plane size when task_dist =
-				   SLURM_DIST_PLANE */
-	uint16_t port;		/* port to contact initiating srun */
 	uint16_t ckpt_interval;	/* checkpoint creation interval (minutes) */
+	char *ckpt_dir; 	/* path to store checkpoint image files */
+	uint32_t cpu_count;	/* count of required processors */
 	uint16_t exclusive;	/* 1 if CPUs not shared with other steps */
+	char *host;		/* host to contact initiating srun */
 	uint16_t immediate;	/* 1 if allocate to run or fail immediately,
 				 * 0 if to be queued awaiting resources */
-	uint16_t mem_per_task;	/* MB memory required per task, 0=no limit */
-	char *host;		/* host to contact initiating srun */
-	char *node_list;	/* list of required nodes */
-	char *network;		/* network use spec */
+	uint32_t job_id;	/* job ID */
+	uint32_t mem_per_task;	/* MB memory required per task, 0=no limit */
 	char *name;		/* name of the job step, default "" */
-	char *ckpt_path;	/* path to store checkpoint image files */
+	char *network;		/* network use spec */
+	uint32_t node_count;	/* count of required nodes */
+	uint8_t no_kill;	/* 1 if no kill on node failure */
+	char *node_list;	/* list of required nodes */
+	uint32_t num_tasks;	/* number of tasks required */
 	uint8_t overcommit;     /* flag, 1 to allow overcommit of processors,
 				   0 to disallow overcommit. default is 0 */
+	uint16_t plane_size;	/* plane size when task_dist =
+				   SLURM_DIST_PLANE */
+	uint16_t port;		/* port to contact initiating srun */
+	uint16_t relative;	/* first node to use of job's allocation */
+	uint16_t resv_port_cnt;	/* reserve ports for MPI if set */
+	uint16_t task_dist;	/* see enum task_dist_state */
+	uint32_t user_id;	/* user the job runs as */
 } job_step_create_request_msg_t;
 
 typedef struct job_step_create_response_msg {
-	uint32_t job_step_id;	/* assigned job step id */
+	uint32_t job_step_id;		/* assigned job step id */
+	char *resv_ports;		/* reserved ports */
 	slurm_step_layout_t *step_layout; /* information about how the 
-                                             step is laid out */
-	slurm_cred_t cred;      /* slurm job credential */
+                                           * step is laid out */
+	slurm_cred_t cred;    	  /* slurm job credential */
 	switch_jobinfo_t switch_job;	/* switch context, opaque 
-                                           data structure */
+                                         * data structure */
 } job_step_create_response_msg_t;
 
 typedef struct launch_tasks_request_msg {
@@ -444,8 +517,9 @@ typedef struct launch_tasks_request_msg {
 	uint32_t  nprocs;	/* number of processes in this job step   */
 	uint32_t  uid;
 	uint32_t  gid;
-	uint32_t  job_mem;	/* MB of memory reserved by job, 0 if no limit */
-	uint32_t  task_mem;	/* MB of memory reserved per task, 0 if no limit */
+	uint32_t  job_mem;	/* MB of memory reserved by job per node OR
+				 * real memory per CPU | MEM_PER_CPU,
+				 * default=0 (no limit) */
 	uint16_t  *tasks_to_launch;
 	uint32_t  envc;
 	uint32_t  argc;
@@ -455,9 +529,6 @@ typedef struct launch_tasks_request_msg {
 	uint16_t  max_cores;
 	uint16_t  max_threads;
 	uint16_t  cpus_per_task;
-	uint16_t  ntasks_per_node;
-	uint16_t  ntasks_per_socket;
-	uint16_t  ntasks_per_core;
 	char    **env;
 	char    **argv;
 	char     *cwd;
@@ -470,8 +541,6 @@ typedef struct launch_tasks_request_msg {
 
         /* Distribution at the lowest level of logical processor (lllp) */
 	uint16_t task_dist;  /* --distribution=, -m dist	*/
-	uint16_t plane_size; /* lllp distribution -> plane_size for
-			      * when -m plane=<# of lllp per plane> */      
 	uint16_t  task_flags;
 	uint32_t **global_task_ids;
 	slurm_addr orig_addr;	  /* where message really came from for io */ 
@@ -488,6 +557,7 @@ typedef struct launch_tasks_request_msg {
 	char     *efname; /* stderr filename pattern */
 	char     *ifname; /* stdin filename pattern */
 	uint8_t   buffered_stdio; /* 1 for line-buffered, 0 for unbuffered */
+	uint8_t   labelio;  /* prefix output lines with the task number */
 	uint16_t  num_io_port;
 	uint16_t  *io_port;  /* array of available client IO listen ports */
 	/**********  END  "normal" IO only options **********/
@@ -501,7 +571,8 @@ typedef struct launch_tasks_request_msg {
 	switch_jobinfo_t switch_job;	/* switch credential for the job */
 	job_options_t options;  /* Arbitrary job options */
 	char *complete_nodelist;
-	char *ckpt_path;	/* checkpoint path */
+	char *ckpt_dir;		/* checkpoint path */
+	char *restart_dir;	/* restart from checkpoint if set */
 } launch_tasks_request_msg_t;
 
 typedef struct task_user_managed_io_msg {
@@ -571,15 +642,20 @@ typedef struct batch_job_launch_msg {
 	uint32_t uid;
 	uint32_t gid;
 	uint32_t nprocs;	/* number of tasks in this job         */
-	uint16_t num_cpu_groups;/* elements in below cpu arrays */
-	uint32_t *cpus_per_node;/* cpus per node */
+	uint32_t num_cpu_groups;/* elements in below cpu arrays */
+	uint16_t cpu_bind_type;	/* Internal for slurmd/task_affinity   */
+	char     *cpu_bind;	/* Internal for slurmd/task_affinity   */
+	uint16_t *cpus_per_node;/* cpus per node */
 	uint32_t *cpu_count_reps;/* how many nodes have same cpu count */
+	uint16_t cpus_per_task;	/* number of CPUs requested per task */
 	char *nodes;		/* list of nodes allocated to job_step */
 	char *script;		/* the actual job script, default NONE */
 	char *err;		/* pathname of stderr */
 	char *in;		/* pathname of stdin */
 	char *out;		/* pathname of stdout */
 	char *work_dir;		/* full pathname of working directory */
+	char *ckpt_dir;		/* location to store checkpoint image */
+	char *restart_dir;	/* retart execution from image in this dir */
 	uint32_t argc;
 	char **argv;
 	uint32_t envc;		/* element count in environment */
@@ -589,8 +665,9 @@ typedef struct batch_job_launch_msg {
 	slurm_cred_t cred;
 	uint8_t open_mode;	/* stdout/err append or truncate */
 	uint8_t overcommit;	/* if resources being over subscribed */
-	uint16_t acctg_freq;	/* accounting polling interval */
-	uint32_t job_mem;	/* memory limit for job */
+	uint16_t acctg_freq;	/* accounting polling interval	*/
+	uint32_t job_mem;	/* memory limit for job		*/
+	uint16_t restart_cnt;	/* batch job restart count	*/
 } batch_job_launch_msg_t;
 
 typedef struct job_id_request_msg {
@@ -614,6 +691,8 @@ typedef struct checkpoint_msg {
 	uint16_t data;		/* operation specific data */
 	uint32_t job_id;	/* slurm job_id */
 	uint32_t step_id;	/* slurm step_id */
+	char *image_dir;	/* locate to store the context images. 
+				 * NULL for default */
 } checkpoint_msg_t;
 
 typedef struct checkpoint_comp_msg {
@@ -716,7 +795,7 @@ typedef struct slurm_node_registration_status_msg {
 	uint32_t tmp_disk;
 	uint32_t job_count;	/* number of associate job_id's */
 	uint32_t *job_id;	/* IDs of running job (if any) */
-	uint16_t *step_id;	/* IDs of running job steps (if any) */
+	uint32_t *step_id;	/* IDs of running job steps (if any) */
 	uint32_t status;	/* node status code, same as return codes */
 	uint16_t startup;	/* slurmd just restarted */
 	switch_node_info_t switch_nodeinfo;	/* set only if startup != 0 */
@@ -754,6 +833,7 @@ extern void slurm_msg_t_init (slurm_msg_t *msg);
 extern void slurm_msg_t_copy(slurm_msg_t *dest, slurm_msg_t *src);
 
 extern void slurm_destroy_char(void *object);
+extern void slurm_destroy_uint32_ptr(void *object);
 extern int slurm_addto_char_list(List char_list, char *names);
 extern int slurm_sort_char_list_asc(char *name_a, char *name_b);
 extern int slurm_sort_char_list_desc(char *name_a, char *name_b);
@@ -768,7 +848,16 @@ void inline slurm_free_job_step_info_request_msg(
 		job_step_info_request_msg_t *msg);
 void inline slurm_free_node_info_request_msg(node_info_request_msg_t *msg);
 void inline slurm_free_part_info_request_msg(part_info_request_msg_t *msg);
+void inline slurm_free_resv_info_request_msg(resv_info_request_msg_t *msg);
 void inline slurm_free_set_debug_level_msg(set_debug_level_msg_t *msg);
+void inline slurm_destroy_association_shares_object(void *object);
+void inline slurm_free_shares_request_msg(shares_request_msg_t *msg);
+void inline slurm_free_shares_response_msg(shares_response_msg_t *msg);
+void inline slurm_destroy_priority_factors_object(void *object);
+void inline slurm_free_priority_factors_request_msg(
+	priority_factors_request_msg_t *msg);
+void inline slurm_free_priority_factors_response_msg(
+	priority_factors_response_msg_t *msg);
 
 #define	slurm_free_timelimit_msg(msg) \
 	slurm_free_kill_job_msg(msg)
@@ -795,6 +884,9 @@ void inline slurm_free_job_launch_msg(batch_job_launch_msg_t * msg);
 void inline slurm_free_update_node_msg(update_node_msg_t * msg);
 void inline slurm_free_update_part_msg(update_part_msg_t * msg);
 void inline slurm_free_delete_part_msg(delete_part_msg_t * msg);
+void inline slurm_free_resv_desc_msg(resv_desc_msg_t * msg);
+void inline slurm_free_resv_name_msg(reservation_name_msg_t * msg);
+void inline slurm_free_resv_info_request_msg(resv_info_request_msg_t * msg);
 void inline
 slurm_free_job_step_create_request_msg(job_step_create_request_msg_t * msg);
 void inline
@@ -824,6 +916,7 @@ void inline slurm_free_srun_job_complete_msg(srun_job_complete_msg_t * msg);
 void inline slurm_free_srun_exec_msg(srun_exec_msg_t *msg);
 void inline slurm_free_srun_ping_msg(srun_ping_msg_t * msg);
 void inline slurm_free_srun_node_fail_msg(srun_node_fail_msg_t * msg);
+void inline slurm_free_srun_step_missing_msg(srun_step_missing_msg_t * msg);
 void inline slurm_free_srun_timeout_msg(srun_timeout_msg_t * msg);
 void inline slurm_free_srun_user_msg(srun_user_msg_t * msg);
 void inline slurm_free_checkpoint_msg(checkpoint_msg_t *msg);
@@ -864,6 +957,11 @@ extern char *job_state_string_compact(enum job_states inx);
 extern char *node_state_string(enum node_states inx);
 extern char *node_state_string_compact(enum node_states inx);
 extern void  private_data_string(uint16_t private_data, char *str, int str_len);
+extern void  accounting_enforce_string(uint16_t enforce,
+				       char *str, int str_len);
+
+/* user needs to xfree after */
+extern char *reservation_flags_string(uint16_t flags);
 
 #define safe_read(fd, buf, size) do {					\
 		int remaining = size;					\
diff --git a/src/common/slurm_protocol_interface.h b/src/common/slurm_protocol_interface.h
index 036f89db8..22280876f 100644
--- a/src/common/slurm_protocol_interface.h
+++ b/src/common/slurm_protocol_interface.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Chris Dunlap <cdunlap@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_protocol_mongo_common.h b/src/common/slurm_protocol_mongo_common.h
index 60e5ef42c..b94a891a8 100644
--- a/src/common/slurm_protocol_mongo_common.h
+++ b/src/common/slurm_protocol_mongo_common.h
@@ -6,10 +6,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov> 
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index bf08d0c8f..cb240584c 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -2,13 +2,14 @@
  *  slurm_protocol_pack.c - functions to pack and unpack structures for RPCs
  *****************************************************************************
  *  Copyright (C) 2002-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 Kevin Tew <tew1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -69,6 +70,25 @@
 #define _pack_node_select_info_msg(msg,buf)	_pack_buffer_msg(msg,buf)
 #define _pack_node_info_msg(msg,buf)		_pack_buffer_msg(msg,buf)
 #define _pack_partition_info_msg(msg,buf)	_pack_buffer_msg(msg,buf)
+#define _pack_reserve_info_msg(msg,buf)		_pack_buffer_msg(msg,buf)
+
+static void _pack_assoc_shares_object(void *in, Buf buffer);
+static int _unpack_assoc_shares_object(void **object, Buf buffer);
+static void _pack_shares_request_msg(shares_request_msg_t * msg, Buf buffer);
+static int _unpack_shares_request_msg(shares_request_msg_t ** msg, Buf buffer);
+static void _pack_shares_response_msg(shares_response_msg_t * msg, Buf buffer);
+static int _unpack_shares_response_msg(shares_response_msg_t ** msg,
+				       Buf buffer);
+static void _pack_priority_factors_object(void *in, Buf buffer);
+static int _unpack_priority_factors_object(void **object, Buf buffer);
+static void _pack_priority_factors_request_msg(
+	priority_factors_request_msg_t * msg, Buf buffer);
+static int _unpack_priority_factors_request_msg(
+	priority_factors_request_msg_t ** msg, Buf buffer);
+static void _pack_priority_factors_response_msg(
+	priority_factors_response_msg_t * msg, Buf buffer);
+static int _unpack_priority_factors_response_msg(
+	priority_factors_response_msg_t ** msg, Buf buffer);
 
 static void _pack_update_node_msg(update_node_msg_t * msg, Buf buffer);
 static int _unpack_update_node_msg(update_node_msg_t ** msg, Buf buffer);
@@ -143,15 +163,24 @@ static int _unpack_job_step_create_response_msg(
 
 static void _pack_part_info_request_msg(part_info_request_msg_t * msg, 
 					Buf buffer);
-
 static int _unpack_part_info_request_msg(part_info_request_msg_t ** 
 					 msg, Buf buffer);
 
+static void _pack_resv_info_request_msg(resv_info_request_msg_t * msg, 
+					Buf buffer);
+static int _unpack_resv_info_request_msg(resv_info_request_msg_t ** 
+					 msg, Buf buffer);
+
 static int _unpack_partition_info_msg(partition_info_msg_t ** msg,
 				      Buf buffer);
 static int _unpack_partition_info_members(partition_info_t * part,
 					  Buf buffer);
 
+static int _unpack_reserve_info_msg(reserve_info_msg_t ** msg,
+				    Buf buffer);
+static int _unpack_reserve_info_members(reserve_info_t * resv,
+					Buf buffer);
+
 static void _pack_launch_tasks_request_msg(launch_tasks_request_msg_t *
 					   msg, Buf buffer);
 static int _unpack_launch_tasks_request_msg(launch_tasks_request_msg_t **
@@ -286,6 +315,11 @@ static void _pack_srun_node_fail_msg(srun_node_fail_msg_t * msg, Buf buffer);
 static int  _unpack_srun_node_fail_msg(srun_node_fail_msg_t ** msg_ptr, 
 				       Buf buffer);
 
+static void _pack_srun_step_missing_msg(srun_step_missing_msg_t * msg, 
+					Buf buffer);
+static int  _unpack_srun_step_missing_msg(srun_step_missing_msg_t ** msg_ptr, 
+					  Buf buffer);
+
 static void _pack_srun_timeout_msg(srun_timeout_msg_t * msg, Buf buffer);
 static int  _unpack_srun_timeout_msg(srun_timeout_msg_t ** msg_ptr, 
 					Buf buffer);
@@ -350,6 +384,14 @@ static void _pack_accounting_update_msg(accounting_update_msg_t *msg,
 static int _unpack_accounting_update_msg(accounting_update_msg_t **msg,
 					 Buf buffer);
 
+static void _pack_update_resv_msg(resv_desc_msg_t * msg, Buf buffer);
+static int  _unpack_update_resv_msg(resv_desc_msg_t ** msg, Buf buffer);
+static void _pack_resv_name_msg(reservation_name_msg_t * msg, Buf buffer);
+static int  _unpack_resv_name_msg(reservation_name_msg_t ** msg, Buf buffer);
+
+static void _pack_topo_info_msg(topo_info_response_msg_t *msg, Buf buffer);
+static int  _unpack_topo_info_msg(topo_info_response_msg_t **msg,
+				 Buf buffer);
 /* pack_header
  * packs a slurm protocol header that proceeds every slurm message
  * IN header - the header structure to pack
@@ -443,6 +485,10 @@ pack_msg(slurm_msg_t const *msg, Buf buffer)
 		_pack_part_info_request_msg((part_info_request_msg_t *)
 					    msg->data, buffer);
 		break;
+	case REQUEST_RESERVATION_INFO:
+		_pack_resv_info_request_msg((resv_info_request_msg_t *)
+					    msg->data, buffer);
+		break;
 	case REQUEST_BUILD_INFO:
 	case REQUEST_ACCTING_INFO:
 		_pack_last_update_msg((last_update_msg_t *)
@@ -484,9 +530,11 @@ pack_msg(slurm_msg_t const *msg, Buf buffer)
 	case REQUEST_SHUTDOWN_IMMEDIATE:
 	case REQUEST_PING:
 	case REQUEST_CONTROL:
+	case REQUEST_TAKEOVER:
 	case REQUEST_DAEMON_STATUS:
 	case REQUEST_HEALTH_CHECK:
 	case ACCOUNTING_FIRST_REG:
+	case REQUEST_TOPO_INFO:
 		/* Message contains no body/information */
 		break;
 	case REQUEST_SHUTDOWN:
@@ -515,6 +563,7 @@ pack_msg(slurm_msg_t const *msg, Buf buffer)
 		_pack_update_node_msg((update_node_msg_t *) msg->data,
 				      buffer);
 		break;
+	case REQUEST_CREATE_PARTITION:
 	case REQUEST_UPDATE_PARTITION:
 		_pack_update_partition_msg((update_part_msg_t *) msg->
 					   data, buffer);
@@ -523,6 +572,19 @@ pack_msg(slurm_msg_t const *msg, Buf buffer)
 		_pack_delete_partition_msg((delete_part_msg_t *) msg->
 					   data, buffer);
 		break;
+	case REQUEST_CREATE_RESERVATION:
+	case REQUEST_UPDATE_RESERVATION:
+		_pack_update_resv_msg((resv_desc_msg_t *) msg->
+				      data, buffer);
+		break;
+	case RESPONSE_RESERVATION_INFO:
+		_pack_reserve_info_msg((slurm_msg_t *) msg, buffer);
+		break;
+	case REQUEST_DELETE_RESERVATION:
+	case RESPONSE_CREATE_RESERVATION:
+		_pack_resv_name_msg((reservation_name_msg_t *) msg->
+				     data, buffer);
+		break;
 	case REQUEST_REATTACH_TASKS:
 		_pack_reattach_tasks_request_msg(
 			(reattach_tasks_request_msg_t *) msg->data, buffer);
@@ -665,6 +727,10 @@ pack_msg(slurm_msg_t const *msg, Buf buffer)
 		_pack_srun_node_fail_msg((srun_node_fail_msg_t *)msg->data, 
 					 buffer);
 		break;
+	case SRUN_STEP_MISSING:
+		_pack_srun_step_missing_msg((srun_step_missing_msg_t *)
+					    msg->data, buffer);
+		break;
 	case SRUN_TIMEOUT:
 		_pack_srun_timeout_msg((srun_timeout_msg_t *)msg->data, buffer);
 		break;
@@ -697,6 +763,24 @@ pack_msg(slurm_msg_t const *msg, Buf buffer)
 		_pack_job_ready_msg((job_id_msg_t *)msg->data, buffer);
 		break;
 
+	case REQUEST_SHARE_INFO:
+		_pack_shares_request_msg((shares_request_msg_t *)msg->data,
+					 buffer);
+		break;
+	case RESPONSE_SHARE_INFO:
+		_pack_shares_response_msg((shares_response_msg_t *)msg->data,
+					  buffer);
+		break;
+	case REQUEST_PRIORITY_FACTORS:
+		_pack_priority_factors_request_msg(
+			(priority_factors_request_msg_t*)msg->data,
+			buffer);
+		break;
+	case RESPONSE_PRIORITY_FACTORS:
+		_pack_priority_factors_response_msg(
+			(priority_factors_response_msg_t*)msg->data,
+			buffer);
+		break;
 	case REQUEST_NODE_SELECT_INFO:
 		_pack_node_select_info_req_msg(
 			(node_info_select_request_msg_t *) msg->data, buffer);
@@ -739,6 +823,10 @@ pack_msg(slurm_msg_t const *msg, Buf buffer)
 			(accounting_update_msg_t *)msg->data,
 			buffer);
 		break;
+	case RESPONSE_TOPO_INFO:
+		_pack_topo_info_msg(
+			(topo_info_response_msg_t *)msg->data, buffer);
+		break;
 	default:
 		debug("No pack method for msg type %u", msg->msg_type);
 		return EINVAL;
@@ -770,6 +858,10 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 		rc = _unpack_part_info_request_msg((part_info_request_msg_t **)
 						   & (msg->data), buffer);
 		break;
+	case REQUEST_RESERVATION_INFO:
+		rc = _unpack_resv_info_request_msg((resv_info_request_msg_t **)
+						   & (msg->data), buffer);
+		break;
 	case REQUEST_BUILD_INFO:
 	case REQUEST_ACCTING_INFO:
 		rc = _unpack_last_update_msg((last_update_msg_t **) &
@@ -815,9 +907,11 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 	case REQUEST_SHUTDOWN_IMMEDIATE:
 	case REQUEST_PING:
 	case REQUEST_CONTROL:
+	case REQUEST_TAKEOVER:
 	case REQUEST_DAEMON_STATUS:
 	case REQUEST_HEALTH_CHECK:
 	case ACCOUNTING_FIRST_REG:
+	case REQUEST_TOPO_INFO:
 		/* Message contains no body/information */
 		break;
 	case REQUEST_SHUTDOWN:
@@ -847,6 +941,7 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 		rc = _unpack_update_node_msg((update_node_msg_t **) &
 					     (msg->data), buffer);
 		break;
+	case REQUEST_CREATE_PARTITION:
 	case REQUEST_UPDATE_PARTITION:
 		rc = _unpack_update_partition_msg((update_part_msg_t **) &
 						  (msg->data), buffer);
@@ -855,6 +950,20 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 		rc = _unpack_delete_partition_msg((delete_part_msg_t **) &
 						  (msg->data), buffer);
 		break;
+	case REQUEST_CREATE_RESERVATION:
+	case REQUEST_UPDATE_RESERVATION:
+		rc = _unpack_update_resv_msg((resv_desc_msg_t **)
+					     &(msg->data), buffer);
+		break;
+	case REQUEST_DELETE_RESERVATION:
+	case RESPONSE_CREATE_RESERVATION:
+		rc = _unpack_resv_name_msg((reservation_name_msg_t **)
+					     &(msg->data), buffer);
+		break;
+	case RESPONSE_RESERVATION_INFO:
+		rc = _unpack_reserve_info_msg((reserve_info_msg_t **)
+					     &(msg->data), buffer);
+		break;
 	case REQUEST_LAUNCH_TASKS:
 		rc = _unpack_launch_tasks_request_msg(
 			(launch_tasks_request_msg_t **)
@@ -1013,6 +1122,10 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 		rc = _unpack_srun_node_fail_msg((srun_node_fail_msg_t **)
 						& msg->data, buffer);
 		break;
+	case SRUN_STEP_MISSING:
+		rc = _unpack_srun_step_missing_msg((srun_step_missing_msg_t **)
+						    & msg->data, buffer);
+		break;
 	case SRUN_TIMEOUT:
 		rc = _unpack_srun_timeout_msg((srun_timeout_msg_t **)
 					      & msg->data, buffer);
@@ -1049,6 +1162,26 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 		rc = _unpack_job_ready_msg((job_id_msg_t **)
 					   & msg->data, buffer);
 		break;
+	case REQUEST_SHARE_INFO:
+		rc = _unpack_shares_request_msg(
+			(shares_request_msg_t **)&msg->data,
+			buffer);
+		break;
+	case RESPONSE_SHARE_INFO:
+		rc = _unpack_shares_response_msg(
+			(shares_response_msg_t **)&msg->data,
+			buffer);
+		break;
+	case REQUEST_PRIORITY_FACTORS:
+		_unpack_priority_factors_request_msg(
+			(priority_factors_request_msg_t**)&msg->data,
+			buffer);
+		break;
+	case RESPONSE_PRIORITY_FACTORS:
+		_unpack_priority_factors_response_msg(
+			(priority_factors_response_msg_t**)&msg->data,
+			buffer);
+		break;
 	case REQUEST_NODE_SELECT_INFO:
 		rc = _unpack_node_select_info_req_msg(
 			(node_info_select_request_msg_t **) &msg->data,
@@ -1098,6 +1231,10 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 			(accounting_update_msg_t **)&msg->data,
 			buffer);
 		break;
+	case RESPONSE_TOPO_INFO:
+		rc = _unpack_topo_info_msg(
+			(topo_info_response_msg_t **)&msg->data, buffer);
+		break;
 	default:
 		debug("No unpack method for msg type %u", msg->msg_type);
 		return EINVAL;
@@ -1109,6 +1246,395 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 	return rc;
 }
 
+static void _pack_assoc_shares_object(void *in, Buf buffer)
+{
+	association_shares_object_t *object = (association_shares_object_t *)in;
+
+	if(!object) {
+		pack32(0, buffer);
+
+		packnull(buffer);
+		packnull(buffer);
+		packnull(buffer);
+
+		packdouble(0, buffer);
+		pack32(0, buffer);
+
+		packdouble(0, buffer);
+		packdouble(0, buffer);
+		pack64(0, buffer);
+
+		pack16(0, buffer);
+		
+		return;
+	}
+
+	pack32(object->assoc_id, buffer);
+
+	packstr(object->cluster, buffer);
+	packstr(object->name, buffer);
+	packstr(object->parent, buffer);
+
+	packdouble(object->shares_norm, buffer);
+	pack32(object->shares_raw, buffer);
+
+	packdouble(object->usage_efctv, buffer);
+	packdouble(object->usage_norm, buffer);
+	pack64(object->usage_raw, buffer);
+
+	pack16(object->user, buffer);
+}
+
+static int _unpack_assoc_shares_object(void **object, Buf buffer)
+{
+	uint32_t uint32_tmp;
+	association_shares_object_t *object_ptr =
+		xmalloc(sizeof(association_shares_object_t));
+
+	*object = (void *) object_ptr;
+	safe_unpack32(&object_ptr->assoc_id, buffer);
+	
+	safe_unpackstr_xmalloc(&object_ptr->cluster, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&object_ptr->name, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&object_ptr->parent, &uint32_tmp, buffer);
+
+	safe_unpackdouble(&object_ptr->shares_norm, buffer);
+	safe_unpack32(&object_ptr->shares_raw, buffer);
+
+	safe_unpackdouble(&object_ptr->usage_efctv, buffer);
+	safe_unpackdouble(&object_ptr->usage_norm, buffer);
+	safe_unpack64(&object_ptr->usage_raw, buffer);
+
+	safe_unpack16(&object_ptr->user, buffer);
+
+	return SLURM_SUCCESS;
+
+unpack_error:
+	destroy_update_shares_rec(object_ptr);
+	*object = NULL;
+	return SLURM_ERROR;
+}
+
+static void _pack_shares_request_msg(shares_request_msg_t * msg, Buf buffer)
+{
+	uint32_t count = NO_VAL;
+	char *tmp_info = NULL;
+	ListIterator itr = NULL;
+
+	xassert(msg != NULL);
+
+	if(msg->acct_list) 
+		count = list_count(msg->acct_list);
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(msg->acct_list);
+		while((tmp_info = list_next(itr))) {
+			packstr(tmp_info, buffer);
+		}
+		list_iterator_destroy(itr);
+	}
+	count = NO_VAL;
+
+
+	if(msg->user_list) 
+		count = list_count(msg->user_list);
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(msg->user_list);
+		while((tmp_info = list_next(itr))) {
+			packstr(tmp_info, buffer);
+		}
+		list_iterator_destroy(itr);
+	}
+	count = NO_VAL;
+}
+
+static int _unpack_shares_request_msg(shares_request_msg_t ** msg, Buf buffer)
+{
+	uint32_t uint32_tmp;
+	uint32_t count = NO_VAL;
+	int i;
+	char *tmp_info = NULL;
+	shares_request_msg_t *object_ptr = NULL;
+
+	xassert(msg != NULL);
+
+	object_ptr = xmalloc(sizeof(shares_request_msg_t));
+	*msg = object_ptr;
+
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->acct_list = list_create(slurm_destroy_char);
+		for(i=0; i<count; i++) {
+			safe_unpackstr_xmalloc(&tmp_info,
+					       &uint32_tmp, buffer);
+			list_append(object_ptr->acct_list, tmp_info);
+		}
+	}
+
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->user_list = list_create(slurm_destroy_char);
+		for(i=0; i<count; i++) {
+			safe_unpackstr_xmalloc(&tmp_info,
+					       &uint32_tmp, buffer);
+			list_append(object_ptr->user_list, tmp_info);
+		}
+	}
+	return SLURM_SUCCESS;
+
+unpack_error:
+	slurm_free_shares_request_msg(object_ptr);
+	*msg = NULL;
+	return SLURM_ERROR;
+}
+
+static void _pack_shares_response_msg(shares_response_msg_t * msg, Buf buffer)
+{
+	ListIterator itr = NULL;
+	association_shares_object_t *share = NULL;
+	uint32_t count = NO_VAL;
+
+	xassert(msg != NULL);
+	if(msg->assoc_shares_list) 
+		count = list_count(msg->assoc_shares_list);
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(msg->assoc_shares_list);
+		while((share = list_next(itr))) 
+			_pack_assoc_shares_object(share, buffer);
+		list_iterator_destroy(itr);
+	}
+	count = NO_VAL;
+	pack64(msg->tot_shares, buffer);
+
+}
+
+static int _unpack_shares_response_msg(shares_response_msg_t ** msg,
+				       Buf buffer)
+{
+	uint32_t count = NO_VAL;
+	int i = 0;
+	void *tmp_info = NULL;
+	shares_response_msg_t *object_ptr = NULL;
+	xassert(msg != NULL);
+
+	object_ptr = xmalloc(sizeof(shares_response_msg_t));
+	*msg = object_ptr;
+
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->assoc_shares_list = 
+			list_create(slurm_destroy_association_shares_object);
+		for(i=0; i<count; i++) {
+			if(_unpack_assoc_shares_object(&tmp_info, buffer) 
+			   != SLURM_SUCCESS)
+				goto unpack_error;
+			list_append(object_ptr->assoc_shares_list, tmp_info);
+		}
+	}
+
+	safe_unpack64(&object_ptr->tot_shares, buffer);
+	return SLURM_SUCCESS;
+
+unpack_error:
+	slurm_free_shares_response_msg(object_ptr);
+	*msg = NULL;
+	return SLURM_ERROR;
+
+}
+
+static void _pack_priority_factors_object(void *in, Buf buffer)
+{
+	priority_factors_object_t *object = (priority_factors_object_t *)in;
+
+	if(!object) {
+		pack32(0, buffer);
+		pack32(0, buffer);
+
+		packdouble(0, buffer);
+		packdouble(0, buffer);
+		packdouble(0, buffer);
+		packdouble(0, buffer);
+		packdouble(0, buffer);
+
+		pack16(0, buffer);
+
+		return;
+	}
+
+	pack32(object->job_id, buffer);
+	pack32(object->user_id, buffer);
+
+	packdouble(object->priority_age, buffer);
+	packdouble(object->priority_fs, buffer);
+	packdouble(object->priority_js, buffer);
+	packdouble(object->priority_part, buffer);
+	packdouble(object->priority_qos, buffer);
+
+	pack16(object->nice, buffer);
+}
+
+static int _unpack_priority_factors_object(void **object, Buf buffer)
+{
+	priority_factors_object_t *object_ptr =
+		xmalloc(sizeof(priority_factors_object_t));
+
+	*object = (void *) object_ptr;
+	safe_unpack32(&object_ptr->job_id, buffer);
+	safe_unpack32(&object_ptr->user_id, buffer);
+
+	safe_unpackdouble(&object_ptr->priority_age, buffer);
+	safe_unpackdouble(&object_ptr->priority_fs, buffer);
+	safe_unpackdouble(&object_ptr->priority_js, buffer);
+	safe_unpackdouble(&object_ptr->priority_part, buffer);
+	safe_unpackdouble(&object_ptr->priority_qos, buffer);
+
+	safe_unpack16(&object_ptr->nice, buffer);
+
+	return SLURM_SUCCESS;
+
+unpack_error:
+	xfree(object);
+	*object = NULL;
+	return SLURM_ERROR;
+}
+
+static void 
+_pack_priority_factors_request_msg(priority_factors_request_msg_t * msg,
+				   Buf buffer)
+{
+	uint32_t count = NO_VAL;
+	uint32_t* tmp = NULL;
+	ListIterator itr = NULL;
+
+	xassert(msg != NULL);
+
+	if(msg->job_id_list)
+		count = list_count(msg->job_id_list);
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(msg->job_id_list);
+		while((tmp = list_next(itr))) {
+			pack32(*tmp, buffer);
+		}
+		list_iterator_destroy(itr);
+	}
+
+	count = NO_VAL;
+	if(msg->uid_list)
+		count = list_count(msg->uid_list);
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(msg->uid_list);
+		while((tmp = list_next(itr))) {
+			pack32(*tmp, buffer);
+		}
+		list_iterator_destroy(itr);
+	}
+
+}
+
+static int
+_unpack_priority_factors_request_msg(priority_factors_request_msg_t ** msg,
+				     Buf buffer)
+{
+	uint32_t* uint32_tmp;
+	uint32_t count = NO_VAL;
+	int i;
+	priority_factors_request_msg_t *object_ptr = NULL;
+
+	xassert(msg != NULL);
+
+	object_ptr = xmalloc(sizeof(priority_factors_request_msg_t));
+	*msg = object_ptr;
+
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->job_id_list = list_create(slurm_destroy_uint32_ptr);
+		for(i=0; i<count; i++) {
+			uint32_tmp = xmalloc(sizeof(uint32_t));
+			safe_unpack32(uint32_tmp, buffer);
+			list_append(object_ptr->job_id_list, uint32_tmp);
+		}
+	}
+
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->uid_list = list_create(slurm_destroy_uint32_ptr);
+		for(i=0; i<count; i++) {
+			uint32_tmp = xmalloc(sizeof(uint32_t));
+			safe_unpack32(uint32_tmp, buffer);
+			list_append(object_ptr->uid_list, uint32_tmp);
+		}
+	}
+	return SLURM_SUCCESS;
+
+unpack_error:
+	slurm_free_priority_factors_request_msg(object_ptr);
+	*msg = NULL;
+	return SLURM_ERROR;
+}
+
+static void
+_pack_priority_factors_response_msg(priority_factors_response_msg_t * msg,
+						Buf buffer)
+{
+	ListIterator itr = NULL;
+	priority_factors_object_t *factors = NULL;
+	uint32_t count = NO_VAL;
+
+	xassert(msg != NULL);
+	if(msg->priority_factors_list)
+		count = list_count(msg->priority_factors_list);
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		itr = list_iterator_create(msg->priority_factors_list);
+		while((factors = list_next(itr)))
+			_pack_priority_factors_object(factors, buffer);
+		list_iterator_destroy(itr);
+	}
+}
+
+static void _priority_factors_resp_list_del(void *x)
+{
+	xfree(x);
+}
+
+static int
+_unpack_priority_factors_response_msg(priority_factors_response_msg_t ** msg,
+						  Buf buffer)
+{
+	uint32_t count = NO_VAL;
+	int i = 0;
+	void *tmp_info = NULL;
+	priority_factors_response_msg_t *object_ptr = NULL;
+	xassert(msg != NULL);
+
+	object_ptr = xmalloc(sizeof(priority_factors_response_msg_t));
+	*msg = object_ptr;
+
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		object_ptr->priority_factors_list =
+			list_create(_priority_factors_resp_list_del);
+		for(i=0; i<count; i++) {
+			if(_unpack_priority_factors_object(&tmp_info, buffer)
+			   != SLURM_SUCCESS)
+				goto unpack_error;
+			list_append(object_ptr->priority_factors_list,
+				    tmp_info);
+		}
+	}
+	return SLURM_SUCCESS;
+
+unpack_error:
+	slurm_free_priority_factors_response_msg(object_ptr);
+	*msg = NULL;
+	return SLURM_ERROR;
+
+}
+
 static void
 _pack_update_node_msg(update_node_msg_t * msg, Buf buffer)
 {
@@ -1118,6 +1644,7 @@ _pack_update_node_msg(update_node_msg_t * msg, Buf buffer)
 	pack16(msg->node_state, buffer);
 	packstr(msg->features, buffer);
 	packstr(msg->reason, buffer);
+	pack32(msg->weight, buffer);
 }
 
 static int
@@ -1135,13 +1662,11 @@ _unpack_update_node_msg(update_node_msg_t ** msg, Buf buffer)
 	safe_unpack16(&tmp_ptr->node_state, buffer);
 	safe_unpackstr_xmalloc(&tmp_ptr->features, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&tmp_ptr->reason, &uint32_tmp, buffer);
+	safe_unpack32(&tmp_ptr->weight, buffer);
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr->node_names);
-	xfree(tmp_ptr->features);
-	xfree(tmp_ptr->reason);
-	xfree(tmp_ptr);
+	slurm_free_update_node_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1169,7 +1694,7 @@ _pack_node_registration_status_msg(slurm_node_registration_status_msg_t *
 		pack32((uint32_t)msg->job_id[i], buffer);
 	}
 	for (i = 0; i < msg->job_count; i++) {
-		pack16((uint16_t)msg->step_id[i], buffer);
+		pack32(msg->step_id[i], buffer);
 	}
 	pack16((uint16_t)msg->startup, buffer);
 	if (msg->startup)
@@ -1209,9 +1734,9 @@ _unpack_node_registration_status_msg(slurm_node_registration_status_msg_t
 		safe_unpack32(&node_reg_ptr->job_id[i], buffer);
 	}
 	node_reg_ptr->step_id =
-		xmalloc(sizeof(uint16_t) * node_reg_ptr->job_count);
+		xmalloc(sizeof(uint32_t) * node_reg_ptr->job_count);
 	for (i = 0; i < node_reg_ptr->job_count; i++) {
-		safe_unpack16(&node_reg_ptr->step_id[i], buffer);
+		safe_unpack32(&node_reg_ptr->step_id[i], buffer);
 	}
 
 	safe_unpack16(&node_reg_ptr->startup, buffer);
@@ -1223,13 +1748,7 @@ _unpack_node_registration_status_msg(slurm_node_registration_status_msg_t
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(node_reg_ptr->arch);
-	xfree(node_reg_ptr->job_id);
-	xfree(node_reg_ptr->node_name);
-	xfree(node_reg_ptr->os);
-	xfree(node_reg_ptr->step_id);
-	switch_g_free_node_info(&node_reg_ptr->switch_nodeinfo);
-	xfree(node_reg_ptr);
+	slurm_free_node_registration_status_msg(node_reg_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1244,9 +1763,9 @@ _pack_resource_allocation_response_msg(resource_allocation_response_msg_t *
 	pack32(msg->job_id, buffer);
 	packstr(msg->node_list, buffer);
 
-	pack16(msg->num_cpu_groups, buffer);
+	pack32(msg->num_cpu_groups, buffer);
 	if (msg->num_cpu_groups) {
-		pack32_array(msg->cpus_per_node, msg->num_cpu_groups, buffer);
+		pack16_array(msg->cpus_per_node, msg->num_cpu_groups, buffer);
 		pack32_array(msg->cpu_count_reps, msg->num_cpu_groups, buffer);
 	}
 
@@ -1272,15 +1791,13 @@ _unpack_resource_allocation_response_msg(resource_allocation_response_msg_t
 	safe_unpack32(&tmp_ptr->job_id, buffer);
 	safe_unpackstr_xmalloc(&tmp_ptr->node_list, &uint32_tmp, buffer);
 
-	safe_unpack16(&tmp_ptr->num_cpu_groups, buffer);
+	safe_unpack32(&tmp_ptr->num_cpu_groups, buffer);
 	if (tmp_ptr->num_cpu_groups > 0) {
-		safe_unpack32_array((uint32_t **) &
-				    (tmp_ptr->cpus_per_node), &uint32_tmp,
+		safe_unpack16_array(&tmp_ptr->cpus_per_node, &uint32_tmp,
 				    buffer);
 		if (tmp_ptr->num_cpu_groups != uint32_tmp)
 			goto unpack_error;
-		safe_unpack32_array((uint32_t **) &
-				    (tmp_ptr->cpu_count_reps), &uint32_tmp,
+		safe_unpack32_array(&tmp_ptr->cpu_count_reps, &uint32_tmp,
 				    buffer);
 		if (tmp_ptr->num_cpu_groups != uint32_tmp)
 			goto unpack_error;
@@ -1298,11 +1815,7 @@ _unpack_resource_allocation_response_msg(resource_allocation_response_msg_t
 	return SLURM_SUCCESS;
 
 unpack_error:
-	select_g_free_jobinfo(&tmp_ptr->select_jobinfo);
-	xfree(tmp_ptr->node_list);
-	xfree(tmp_ptr->cpus_per_node);
-	xfree(tmp_ptr->cpu_count_reps);
-	xfree(tmp_ptr);
+	slurm_free_resource_allocation_response_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1317,9 +1830,9 @@ _pack_job_alloc_info_response_msg(job_alloc_info_response_msg_t * msg,
 	pack32(msg->job_id, buffer);
 	packstr(msg->node_list, buffer);
 
-	pack16(msg->num_cpu_groups, buffer);
+	pack32(msg->num_cpu_groups, buffer);
 	if (msg->num_cpu_groups) {
-		pack32_array(msg->cpus_per_node, msg->num_cpu_groups, buffer);
+		pack16_array(msg->cpus_per_node, msg->num_cpu_groups, buffer);
 		pack32_array(msg->cpu_count_reps, msg->num_cpu_groups, buffer);
 	}
 
@@ -1347,21 +1860,16 @@ _unpack_job_alloc_info_response_msg(job_alloc_info_response_msg_t ** msg,
 	safe_unpack32(&tmp_ptr->job_id, buffer);
 	safe_unpackstr_xmalloc(&tmp_ptr->node_list, &uint32_tmp, buffer);
 
-	safe_unpack16(&tmp_ptr->num_cpu_groups, buffer);
+	safe_unpack32(&tmp_ptr->num_cpu_groups, buffer);
 	if (tmp_ptr->num_cpu_groups > 0) {
-		safe_unpack32_array((uint32_t **) &
-				    (tmp_ptr->cpus_per_node), &uint32_tmp,
+		safe_unpack16_array(&tmp_ptr->cpus_per_node, &uint32_tmp,
 				    buffer);
 		if (tmp_ptr->num_cpu_groups != uint32_tmp)
 			goto unpack_error;
-		safe_unpack32_array((uint32_t **) &
-				    (tmp_ptr->cpu_count_reps), &uint32_tmp,
+		safe_unpack32_array(&tmp_ptr->cpu_count_reps, &uint32_tmp,
 				    buffer);
 		if (tmp_ptr->num_cpu_groups != uint32_tmp)
 			goto unpack_error;
-	} else {
-		tmp_ptr->cpus_per_node = NULL;
-		tmp_ptr->cpu_count_reps = NULL;
 	}
 
 	safe_unpack32(&tmp_ptr->node_cnt, buffer);
@@ -1381,11 +1889,7 @@ _unpack_job_alloc_info_response_msg(job_alloc_info_response_msg_t ** msg,
 	return SLURM_SUCCESS;
 
 unpack_error:
-	select_g_free_jobinfo(&tmp_ptr->select_jobinfo);
-	xfree(tmp_ptr->node_list);
-	xfree(tmp_ptr->cpus_per_node);
-	xfree(tmp_ptr->cpu_count_reps);
-	xfree(tmp_ptr);
+	slurm_free_job_alloc_info_response_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1417,7 +1921,7 @@ _unpack_submit_response_msg(submit_response_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr);
+	slurm_free_submit_response_response_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1447,8 +1951,7 @@ _unpack_node_info_msg(node_info_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(node);
-	xfree(*msg);
+	slurm_free_node_info_msg(*msg);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1504,6 +2007,7 @@ _pack_update_partition_msg(update_part_msg_t * msg, Buf buffer)
 	packstr(msg->allow_groups, buffer);
 	pack16(msg-> default_part, buffer);
 	pack32(msg-> max_time,     buffer);
+	pack32(msg-> default_time, buffer);
 	pack32(msg-> max_nodes,    buffer);
 	pack32(msg-> min_nodes,    buffer);
 	packstr(msg->name,         buffer);
@@ -1514,6 +2018,8 @@ _pack_update_partition_msg(update_part_msg_t * msg, Buf buffer)
 	pack16(msg-> priority,     buffer);
 	pack16(msg-> root_only,    buffer);
 	pack16(msg-> state_up,     buffer);
+
+	packstr(msg->allow_alloc_nodes, buffer);
 }
 
 static int
@@ -1531,6 +2037,7 @@ _unpack_update_partition_msg(update_part_msg_t ** msg, Buf buffer)
 	safe_unpackstr_xmalloc(&tmp_ptr->allow_groups, &uint32_tmp, buffer);
 	safe_unpack16(&tmp_ptr->default_part, buffer);
 	safe_unpack32(&tmp_ptr->max_time, buffer);
+	safe_unpack32(&tmp_ptr->default_time, buffer);
 	safe_unpack32(&tmp_ptr->max_nodes, buffer);
 	safe_unpack32(&tmp_ptr->min_nodes, buffer);
 	safe_unpackstr_xmalloc(&tmp_ptr->name, &uint32_tmp, buffer);
@@ -1541,13 +2048,65 @@ _unpack_update_partition_msg(update_part_msg_t ** msg, Buf buffer)
 	safe_unpack16(&tmp_ptr->priority,  buffer);
 	safe_unpack16(&tmp_ptr->root_only, buffer);
 	safe_unpack16(&tmp_ptr->state_up,  buffer);
+
+	safe_unpackstr_xmalloc(&tmp_ptr->allow_alloc_nodes, &uint32_tmp,
+			       buffer);
+
+	return SLURM_SUCCESS;
+
+unpack_error:
+	slurm_free_update_part_msg(tmp_ptr);
+	*msg = NULL;
+	return SLURM_ERROR;
+}
+
+static void
+_pack_update_resv_msg(resv_desc_msg_t * msg, Buf buffer)
+{
+	xassert(msg != NULL);
+
+	packstr(msg->name,         buffer);
+	pack_time(msg->start_time, buffer);
+	pack_time(msg->end_time,   buffer);
+	pack32(msg->duration,      buffer);
+	pack16(msg->flags,         buffer);
+	pack32(msg->node_cnt,      buffer);
+	packstr(msg->node_list,    buffer);
+	packstr(msg->features,     buffer);
+	packstr(msg->partition,    buffer);
+
+	packstr(msg->users,        buffer);
+	packstr(msg->accounts,     buffer);
+}
+
+static int
+_unpack_update_resv_msg(resv_desc_msg_t ** msg, Buf buffer)
+{
+	uint32_t uint32_tmp;
+	resv_desc_msg_t *tmp_ptr;
+
+	xassert(msg != NULL);
+
+	/* alloc memory for structure */
+	tmp_ptr = xmalloc(sizeof(resv_desc_msg_t));
+	*msg = tmp_ptr;
+
+	safe_unpackstr_xmalloc(&tmp_ptr->name, &uint32_tmp, buffer);
+	safe_unpack_time(&tmp_ptr->start_time, buffer);
+	safe_unpack_time(&tmp_ptr->end_time,   buffer);
+	safe_unpack32(&tmp_ptr->duration,      buffer);
+	safe_unpack16(&tmp_ptr->flags,         buffer);
+	safe_unpack32(&tmp_ptr->node_cnt,      buffer);
+	safe_unpackstr_xmalloc(&tmp_ptr->node_list, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&tmp_ptr->features,  &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&tmp_ptr->partition, &uint32_tmp, buffer);
+
+	safe_unpackstr_xmalloc(&tmp_ptr->users,     &uint32_tmp, buffer);	
+	safe_unpackstr_xmalloc(&tmp_ptr->accounts,  &uint32_tmp, buffer);
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr->name);
-	xfree(tmp_ptr->nodes);
-	xfree(tmp_ptr->allow_groups);
-	xfree(tmp_ptr);
+	slurm_free_resv_desc_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1576,8 +2135,36 @@ _unpack_delete_partition_msg(delete_part_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr->name);
-	xfree(tmp_ptr);
+	slurm_free_delete_part_msg(tmp_ptr);
+	*msg = NULL;
+	return SLURM_ERROR;
+}
+
+static void
+_pack_resv_name_msg(reservation_name_msg_t * msg, Buf buffer)
+{
+	xassert(msg != NULL);
+
+	packstr(msg->name,         buffer);
+}
+
+static int
+_unpack_resv_name_msg(reservation_name_msg_t ** msg, Buf buffer)
+{
+	uint32_t uint32_tmp;
+	reservation_name_msg_t *tmp_ptr;
+
+	xassert(msg != NULL);
+
+	/* alloc memory for structure */
+	tmp_ptr = xmalloc(sizeof(reservation_name_msg_t));
+	*msg = tmp_ptr;
+
+	safe_unpackstr_xmalloc(&tmp_ptr->name, &uint32_tmp, buffer);
+	return SLURM_SUCCESS;
+
+unpack_error:
+	slurm_free_resv_name_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1593,6 +2180,7 @@ _pack_job_step_create_request_msg(job_step_create_request_msg_t
 	pack32(msg->node_count, buffer);
 	pack32(msg->cpu_count, buffer);
 	pack32(msg->num_tasks, buffer);
+	pack32(msg->mem_per_task, buffer);
 
 	pack16(msg->relative, buffer);
 	pack16(msg->task_dist, buffer);
@@ -1601,14 +2189,15 @@ _pack_job_step_create_request_msg(job_step_create_request_msg_t
 	pack16(msg->ckpt_interval, buffer);
 	pack16(msg->exclusive, buffer);
 	pack16(msg->immediate, buffer);
-	pack16(msg->mem_per_task, buffer);
+	pack16(msg->resv_port_cnt, buffer);
 
 	packstr(msg->host, buffer);
 	packstr(msg->name, buffer);
 	packstr(msg->network, buffer);
 	packstr(msg->node_list, buffer);
-	packstr(msg->ckpt_path, buffer);
+	packstr(msg->ckpt_dir, buffer);
 
+	pack8(msg->no_kill, buffer);
 	pack8(msg->overcommit, buffer);
 }
 
@@ -1629,6 +2218,7 @@ _unpack_job_step_create_request_msg(job_step_create_request_msg_t ** msg,
 	safe_unpack32(&(tmp_ptr->node_count), buffer);
 	safe_unpack32(&(tmp_ptr->cpu_count), buffer);
 	safe_unpack32(&(tmp_ptr->num_tasks), buffer);
+	safe_unpack32(&(tmp_ptr->mem_per_task), buffer);
 
 	safe_unpack16(&(tmp_ptr->relative), buffer);
 	safe_unpack16(&(tmp_ptr->task_dist), buffer);
@@ -1637,24 +2227,21 @@ _unpack_job_step_create_request_msg(job_step_create_request_msg_t ** msg,
 	safe_unpack16(&(tmp_ptr->ckpt_interval), buffer);
 	safe_unpack16(&(tmp_ptr->exclusive), buffer);
 	safe_unpack16(&(tmp_ptr->immediate), buffer);
-	safe_unpack16(&(tmp_ptr->mem_per_task), buffer);
+	safe_unpack16(&(tmp_ptr->resv_port_cnt), buffer);
 
 	safe_unpackstr_xmalloc(&(tmp_ptr->host), &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&(tmp_ptr->name), &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&(tmp_ptr->network), &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&(tmp_ptr->node_list), &uint32_tmp, buffer);
-	safe_unpackstr_xmalloc(&(tmp_ptr->ckpt_path), &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&(tmp_ptr->ckpt_dir), &uint32_tmp, buffer);
 
+	safe_unpack8(&(tmp_ptr->no_kill), buffer);
 	safe_unpack8(&(tmp_ptr->overcommit), buffer);
 
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr->host);
-	xfree(tmp_ptr->name);
-	xfree(tmp_ptr->network);
-	xfree(tmp_ptr->node_list);
-	xfree(tmp_ptr);
+	slurm_free_job_step_create_request_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1695,8 +2282,7 @@ _unpack_kill_job_msg(kill_job_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr->nodes);
-	xfree(tmp_ptr);
+	slurm_free_kill_job_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1728,7 +2314,7 @@ _unpack_signal_job_msg(signal_job_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr);
+	slurm_free_signal_job_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1765,9 +2351,7 @@ _unpack_epilog_comp_msg(epilog_complete_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr->node_name);
-	switch_g_free_node_info(&tmp_ptr->switch_nodeinfo);
-	xfree(tmp_ptr);
+	slurm_free_epilog_complete_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1796,7 +2380,7 @@ _unpack_update_job_time_msg(job_time_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr);
+	slurm_free_update_job_time_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1807,7 +2391,8 @@ _pack_job_step_create_response_msg(job_step_create_response_msg_t * msg,
 {
 	xassert(msg != NULL);
 
-	pack32((uint32_t)msg->job_step_id, buffer);
+	packstr(msg->resv_ports, buffer);
+	pack32(msg->job_step_id, buffer);
 	pack_slurm_step_layout(msg->step_layout, buffer);
 	slurm_cred_pack(msg->cred, buffer);
 	switch_pack_jobinfo(msg->switch_job, buffer);
@@ -1819,12 +2404,14 @@ _unpack_job_step_create_response_msg(job_step_create_response_msg_t ** msg,
 				     Buf buffer)
 {
 	job_step_create_response_msg_t *tmp_ptr = NULL;
+	uint32_t uint32_tmp;
 	
 	/* alloc memory for structure */
 	xassert(msg != NULL);
 	tmp_ptr = xmalloc(sizeof(job_step_create_response_msg_t));
 	*msg = tmp_ptr;
 
+	safe_unpackstr_xmalloc(&tmp_ptr->resv_ports, &uint32_tmp, buffer);
 	safe_unpack32(&tmp_ptr->job_step_id, buffer);
 	if (unpack_slurm_step_layout(&tmp_ptr->step_layout, buffer))
 		goto unpack_error;
@@ -1841,7 +2428,7 @@ _unpack_job_step_create_response_msg(job_step_create_response_msg_t ** msg,
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr);
+	slurm_free_job_step_create_response_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1862,7 +2449,7 @@ _unpack_partition_info_msg(partition_info_msg_t ** msg, Buf buffer)
 	partition = (*msg)->partition_array =
 		xmalloc(sizeof(partition_info_t) * (*msg)->record_count);
 
-	/* load individual job info */
+	/* load individual partition info */
 	for (i = 0; i < (*msg)->record_count; i++) {
 		if (_unpack_partition_info_members(&partition[i], buffer))
 			goto unpack_error;
@@ -1870,8 +2457,7 @@ _unpack_partition_info_msg(partition_info_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(partition);
-	xfree(*msg);
+	slurm_free_partition_info_msg(*msg);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -1887,6 +2473,7 @@ _unpack_partition_info_members(partition_info_t * part, Buf buffer)
 	if (part->name == NULL)
 		part->name = xmalloc(1);	/* part->name = "" implicit */
 	safe_unpack32(&part->max_time,     buffer);
+	safe_unpack32(&part->default_time, buffer);
 	safe_unpack32(&part->max_nodes,    buffer);
 	safe_unpack32(&part->min_nodes,    buffer);
 	safe_unpack32(&part->total_nodes,  buffer);
@@ -1902,6 +2489,7 @@ _unpack_partition_info_members(partition_info_t * part, Buf buffer)
 
 	safe_unpack16(&part->state_up, buffer);
 	safe_unpackstr_xmalloc(&part->allow_groups, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&part->allow_alloc_nodes, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&part->nodes, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&node_inx_str, &uint32_tmp, buffer);
 	if (node_inx_str == NULL)
@@ -1916,53 +2504,79 @@ _unpack_partition_info_members(partition_info_t * part, Buf buffer)
 unpack_error:
 	xfree(part->name);
 	xfree(part->allow_groups);
+	xfree(part->allow_alloc_nodes);
 	xfree(part->nodes);
 	xfree(node_inx_str);
 	return SLURM_ERROR;
 }
 
-/* pack_job_step_info_members
- * pack selected fields of the description of a job into a buffer
- * IN job_id, step_id, user_id, start_time, partition, nodes - job info
- * IN/OUT buffer - destination of the pack, contains pointers that are 
- *			automatically updated
- */
-/* void */
-/* pack_job_step_info_members(uint32_t job_id, uint16_t step_id, */
-/* 			   uint32_t user_id, uint32_t num_tasks, */
-/* 			   time_t start_time, char *partition,  */
-/* 			   char *nodes, char *name, char *network, */
-/* 			   Buf buffer) */
-/* { */
-/* 	pack32((uint32_t)job_id, buffer); */
-/* 	pack16((uint16_t)step_id, buffer); */
-/* 	pack32((uint32_t)user_id, buffer); */
-/* 	pack32((uint32_t)num_tasks, buffer); */
-
-/* 	pack_time(start_time, buffer); */
-/* 	packstr(partition, buffer); */
-/* 	packstr(nodes, buffer); */
-/* 	packstr(name, buffer); */
-/* 	packstr(network, buffer); */
-/* } */
-
-/* pack_job_step_info
- * packs a slurm job steps info
- * IN step - pointer to the job step info
- * IN/OUT buffer - destination of the pack, contains pointers that are 
- *			automatically updated
- */
-/* void */
-/* pack_job_step_info(job_step_info_t * step, Buf buffer) */
-/* { */
-/* 	pack_job_step_info_members(step->job_id, */
-/* 				   step->step_id, */
-/* 				   step->user_id, */
-/* 				   step->num_tasks, */
-/* 				   step->start_time, */
-/* 				   step->partition, step->nodes,  */
-/* 				   step->name, step->network, buffer); */
-/* } */
+static int
+_unpack_reserve_info_msg(reserve_info_msg_t ** msg, Buf buffer)
+{
+	int i;
+	reserve_info_t *reserve = NULL;
+
+	xassert(msg != NULL);
+	*msg = xmalloc(sizeof(reserve_info_msg_t));
+
+	/* load buffer's header (data structure version and time) */
+	safe_unpack32(&((*msg)->record_count), buffer);
+	safe_unpack_time(&((*msg)->last_update), buffer);
+
+	reserve = (*msg)->reservation_array =
+		xmalloc(sizeof(reserve_info_t) * (*msg)->record_count);
+
+	/* load individual reservation records */
+	for (i = 0; i < (*msg)->record_count; i++) {
+		if (_unpack_reserve_info_members(&reserve[i], buffer))
+			goto unpack_error;
+	}
+	return SLURM_SUCCESS;
+
+unpack_error:
+	slurm_free_reservation_info_msg(*msg);
+	*msg = NULL;
+	return SLURM_ERROR;
+}
+
+
+static int
+_unpack_reserve_info_members(reserve_info_t * resv, Buf buffer)
+{
+	char *node_inx_str = NULL;
+	uint32_t uint32_tmp;
+
+	safe_unpackstr_xmalloc(&resv->accounts,	&uint32_tmp, buffer);
+	safe_unpack_time(&resv->end_time,	buffer);
+	safe_unpackstr_xmalloc(&resv->features,	&uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&resv->name,	&uint32_tmp, buffer);
+	safe_unpack32(&resv->node_cnt,		buffer);
+	safe_unpackstr_xmalloc(&resv->node_list,&uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&resv->partition,&uint32_tmp, buffer);
+	safe_unpack_time(&resv->start_time,	buffer);
+	safe_unpack16(&resv->flags,		buffer);
+	safe_unpackstr_xmalloc(&resv->users,	&uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&node_inx_str,   &uint32_tmp, buffer);
+	if (node_inx_str == NULL)
+		resv->node_inx = bitfmt2int("");
+	else {
+		resv->node_inx = bitfmt2int(node_inx_str);
+		xfree(node_inx_str);
+		node_inx_str = NULL;
+	}
+	return SLURM_SUCCESS;
+
+unpack_error:
+	xfree(resv->accounts);
+	xfree(resv->features);
+	xfree(resv->name);
+	xfree(node_inx_str);
+	xfree(resv->node_inx);
+	xfree(resv->node_list);
+	xfree(resv->partition);
+	xfree(resv->users);
+	return SLURM_ERROR;
+}
 
 /* _unpack_job_step_info_members
  * unpacks a set of slurm job step info for one job step
@@ -1977,7 +2591,7 @@ _unpack_job_step_info_members(job_step_info_t * step, Buf buffer)
 	char *node_inx_str;
 
 	safe_unpack32(&step->job_id, buffer);
-	safe_unpack16(&step->step_id, buffer);
+	safe_unpack32(&step->step_id, buffer);
 	safe_unpack16(&step->ckpt_interval, buffer);
 	safe_unpack32(&step->user_id, buffer);
 	safe_unpack32(&step->num_tasks, buffer);
@@ -1985,11 +2599,12 @@ _unpack_job_step_info_members(job_step_info_t * step, Buf buffer)
 	safe_unpack_time(&step->start_time, buffer);
 	safe_unpack_time(&step->run_time, buffer);
 	safe_unpackstr_xmalloc(&step->partition, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&step->resv_ports, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&step->nodes, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&step->name, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&step->network, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&node_inx_str, &uint32_tmp, buffer);
-	safe_unpackstr_xmalloc(&step->ckpt_path, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&step->ckpt_dir, &uint32_tmp, buffer);
 	if (node_inx_str == NULL)
 		step->node_inx = bitfmt2int("");
 	else {
@@ -2031,8 +2646,7 @@ _unpack_job_step_info_response_msg(job_step_info_response_msg_t
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(step);
-	xfree(*msg);
+	slurm_free_job_step_info_response_msg(*msg);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -2067,8 +2681,7 @@ _unpack_job_info_msg(job_info_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(job);
-	xfree(*msg);
+	slurm_free_job_info_msg(*msg);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -2086,6 +2699,7 @@ _unpack_job_info_members(job_info_t * job, Buf buffer)
 	char *node_inx_str;
 	multi_core_data_t *mc_ptr;
 
+	safe_unpack32(&job->assoc_id, buffer);
 	safe_unpack32(&job->job_id, buffer);
 	safe_unpack32(&job->user_id, buffer);
 	safe_unpack32(&job->group_id, buffer);
@@ -2093,6 +2707,7 @@ _unpack_job_info_members(job_info_t * job, Buf buffer)
 	safe_unpack16(&job->job_state,    buffer);
 	safe_unpack16(&job->batch_flag,   buffer);
 	safe_unpack16(&job->state_reason, buffer);
+	safe_unpack16(&job->restart_cnt, buffer);
 
 	safe_unpack32(&job->alloc_sid,    buffer);
 	safe_unpack32(&job->time_limit,   buffer);
@@ -2102,6 +2717,7 @@ _unpack_job_info_members(job_info_t * job, Buf buffer)
 	safe_unpack_time(&job->end_time, buffer);
 	safe_unpack_time(&job->suspend_time, buffer);
 	safe_unpack_time(&job->pre_sus_time, buffer);
+
 	safe_unpack32(&job->priority, buffer);
 
 	safe_unpackstr_xmalloc(&job->nodes, &uint32_tmp, buffer);
@@ -2109,14 +2725,19 @@ _unpack_job_info_members(job_info_t * job, Buf buffer)
 	safe_unpackstr_xmalloc(&job->account, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&job->network, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&job->comment, &uint32_tmp, buffer);
-	safe_unpackstr_xmalloc(&job->licenses,   &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&job->licenses, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&job->state_desc, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&job->resv_name,  &uint32_tmp, buffer);
 
 	safe_unpack32(&job->exit_code, buffer);
-	safe_unpack16(&job->num_cpu_groups, buffer);
-	safe_unpack32_array(&job->cpus_per_node, &uint32_tmp, buffer);
-	safe_unpack32_array(&job->cpu_count_reps, &uint32_tmp, buffer);
+	safe_unpack32(&job->num_cpu_groups, buffer);
+	if (job->num_cpu_groups) {
+		safe_unpack16_array(&job->cpus_per_node, &uint32_tmp, buffer);
+		safe_unpack32_array(&job->cpu_count_reps, &uint32_tmp, buffer);
+	}
 
 	safe_unpackstr_xmalloc(&job->name, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&job->wckey, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&job->alloc_node, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&node_inx_str, &uint32_tmp, buffer);
 	if (node_inx_str == NULL)
@@ -2137,13 +2758,13 @@ _unpack_job_info_members(job_info_t * job, Buf buffer)
 	safe_unpackstr_xmalloc(&job->dependency, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&job->command,    &uint32_tmp, buffer);
 
-	safe_unpack32(&job->num_nodes, buffer);
-	safe_unpack32(&job->max_nodes, buffer);
-	safe_unpack16(&job->requeue,   buffer);
+	safe_unpack32(&job->num_nodes,   buffer);
+	safe_unpack32(&job->max_nodes,   buffer);
+	safe_unpack16(&job->requeue,     buffer);
 
 	/*** unpack pending job details ***/
-	safe_unpack16(&job->shared, buffer);
-	safe_unpack16(&job->contiguous, buffer);
+	safe_unpack16(&job->shared,        buffer);
+	safe_unpack16(&job->contiguous,    buffer);
 	safe_unpack16(&job->cpus_per_task, buffer);
 	safe_unpack16(&job->job_min_procs, buffer);
 
@@ -2183,40 +2804,23 @@ _unpack_job_info_members(job_info_t * job, Buf buffer)
 		job->ntasks_per_core   = mc_ptr->ntasks_per_core;
 		xfree(mc_ptr);
 	}
-
+	
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(job->nodes);
-	xfree(job->partition);
-	xfree(job->account);
-	xfree(job->network);
-	xfree(job->comment);
-	xfree(job->dependency);
-	xfree(job->cpus_per_node);
-	xfree(job->cpu_count_reps);
-	xfree(job->name);
-	xfree(job->alloc_node);
-	xfree(job->node_inx);
-	select_g_free_jobinfo(&job->select_jobinfo);
-	xfree(job->features);
-	xfree(job->work_dir);
-	xfree(job->command);
-	xfree(job->licenses);
-	xfree(job->req_nodes);
-	xfree(job->req_node_inx);
-	xfree(job->exc_nodes);
-	xfree(job->exc_node_inx);
-
+	slurm_free_job_info_members(job);
 	return SLURM_ERROR;
 }
 
 static void
 _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer)
 {
+	uint32_t count = NO_VAL;
+
 	pack_time(build_ptr->last_update, buffer);
 
 	pack16(build_ptr->accounting_storage_enforce, buffer);
+	packstr(build_ptr->accounting_storage_backup_host, buffer);
 	packstr(build_ptr->accounting_storage_host, buffer);
 	packstr(build_ptr->accounting_storage_loc, buffer);
 	packstr(build_ptr->accounting_storage_pass, buffer);
@@ -2228,20 +2832,24 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer)
 
 	packstr(build_ptr->backup_addr, buffer);
 	packstr(build_ptr->backup_controller, buffer);
+	pack16(build_ptr->batch_start_timeout, buffer);
 	pack_time(build_ptr->boot_time, buffer);
 
 	pack16(build_ptr->cache_groups, buffer);
 	packstr(build_ptr->checkpoint_type, buffer);
 	packstr(build_ptr->cluster_name, buffer);
+	pack16(build_ptr->complete_wait, buffer);
 	packstr(build_ptr->control_addr, buffer);
 	packstr(build_ptr->control_machine, buffer);
 	packstr(build_ptr->crypto_type, buffer);
 
 	pack32(build_ptr->def_mem_per_task, buffer);
+	pack32(build_ptr->debug_flags, buffer);
 	pack16(build_ptr->disable_root_jobs, buffer);
 
 	packstr(build_ptr->epilog, buffer);
 	pack32(build_ptr->epilog_msg_time, buffer);
+	packstr(build_ptr->epilog_slurmctld, buffer);
 
 	pack16(build_ptr->fast_schedule, buffer);
 	pack32(build_ptr->first_job_id, buffer);
@@ -2256,6 +2864,8 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer)
 	pack16(build_ptr->job_acct_gather_freq, buffer);
 	packstr(build_ptr->job_acct_gather_type, buffer);
 
+	packstr(build_ptr->job_ckpt_dir, buffer);
+	
 	packstr(build_ptr->job_comp_host, buffer);
 	packstr(build_ptr->job_comp_loc, buffer);
 	packstr(build_ptr->job_comp_pass, buffer);
@@ -2268,6 +2878,7 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer)
 	pack16(build_ptr->job_file_append, buffer);
 	pack16(build_ptr->job_requeue, buffer);
 
+	pack16(build_ptr->kill_on_bad_exit, buffer);
 	pack16(build_ptr->kill_wait, buffer);
 
 	packstr(build_ptr->licenses, buffer);
@@ -2277,35 +2888,72 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer)
 	pack32(build_ptr->max_mem_per_task, buffer);
 	pack16(build_ptr->min_job_age, buffer);
 	packstr(build_ptr->mpi_default, buffer);
+	packstr(build_ptr->mpi_params, buffer);
 	pack16(build_ptr->msg_timeout, buffer);
 
 	pack32(build_ptr->next_job_id, buffer);
 	packstr(build_ptr->node_prefix, buffer);
 
+	pack16(build_ptr->over_time_limit, buffer);
+
 	packstr(build_ptr->plugindir, buffer);
 	packstr(build_ptr->plugstack, buffer);
+
+	pack32(build_ptr->priority_decay_hl, buffer);
+	pack16(build_ptr->priority_favor_small, buffer);
+	pack32(build_ptr->priority_max_age, buffer);
+	pack16(build_ptr->priority_reset_period, buffer);
+	packstr(build_ptr->priority_type, buffer);
+	pack32(build_ptr->priority_weight_age, buffer);
+	pack32(build_ptr->priority_weight_fs, buffer);
+	pack32(build_ptr->priority_weight_js, buffer);
+	pack32(build_ptr->priority_weight_part, buffer);
+	pack32(build_ptr->priority_weight_qos, buffer);
+
 	pack16(build_ptr->private_data, buffer);
 	packstr(build_ptr->proctrack_type, buffer);
 	packstr(build_ptr->prolog, buffer);
+	packstr(build_ptr->prolog_slurmctld, buffer);
 	pack16(build_ptr->propagate_prio_process, buffer);
         packstr(build_ptr->propagate_rlimits, buffer);
         packstr(build_ptr->propagate_rlimits_except, buffer);
 
 	packstr(build_ptr->resume_program, buffer);
 	pack16(build_ptr->resume_rate, buffer);
+	pack16(build_ptr->resume_timeout, buffer);
+	pack16(build_ptr->resv_over_run, buffer);
 	pack16(build_ptr->ret2service, buffer);
 
+	packstr(build_ptr->salloc_default_command, buffer);
 	packstr(build_ptr->sched_params, buffer);
 	pack16(build_ptr->schedport, buffer);
 	pack16(build_ptr->schedrootfltr, buffer);
 	pack16(build_ptr->sched_time_slice, buffer);
 	packstr(build_ptr->schedtype, buffer);
 	packstr(build_ptr->select_type, buffer);
+	if(build_ptr->select_conf_key_pairs) 
+		count = list_count((List)build_ptr->select_conf_key_pairs);
+	
+	pack32(count, buffer);
+	if(count && count != NO_VAL) {
+		ListIterator itr = list_iterator_create(
+			(List)build_ptr->select_conf_key_pairs);
+		config_key_pair_t *key_pair = NULL;
+		while((key_pair = list_next(itr))) {
+			pack_config_key_pair(key_pair,
+					     SLURMDBD_VERSION, buffer);
+		}
+		list_iterator_destroy(itr);
+	}
+	count = NO_VAL;
+	
 	pack16(build_ptr->select_type_param, buffer);
 
 	packstr(build_ptr->slurm_conf, buffer);
 	pack32(build_ptr->slurm_user_id, buffer);
 	packstr(build_ptr->slurm_user_name, buffer);
+	pack32(build_ptr->slurmd_user_id, buffer);
+	packstr(build_ptr->slurmd_user_name, buffer);
 
 	pack16(build_ptr->slurmctld_debug, buffer);
 	packstr(build_ptr->slurmctld_logfile, buffer);
@@ -2323,6 +2971,7 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer)
 	pack16(build_ptr->slurmd_timeout, buffer);
 
 	packstr(build_ptr->srun_epilog, buffer);
+	pack16(build_ptr->srun_io_timeout, buffer);
 	packstr(build_ptr->srun_prolog, buffer);
 	packstr(build_ptr->state_save_location, buffer);
 	packstr(build_ptr->suspend_exc_nodes, buffer);
@@ -2330,6 +2979,7 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer)
 	packstr(build_ptr->suspend_program, buffer);
 	pack16(build_ptr->suspend_rate, buffer);
 	pack16(build_ptr->suspend_time, buffer);
+	pack16(build_ptr->suspend_timeout, buffer);
 	packstr(build_ptr->switch_type, buffer);
 
 	packstr(build_ptr->task_epilog, buffer);
@@ -2337,6 +2987,8 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer)
 	packstr(build_ptr->task_plugin, buffer);
 	pack16(build_ptr->task_plugin_param, buffer);
 	packstr(build_ptr->tmp_fs, buffer);
+	packstr(build_ptr->topology_plugin, buffer);
+	pack16(build_ptr->track_wckey, buffer);
 	pack16(build_ptr->tree_width, buffer);
 
 	pack16(build_ptr->use_pam, buffer);
@@ -2344,12 +2996,17 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer)
 	pack16(build_ptr->unkillable_timeout, buffer);
 
 	pack16(build_ptr->wait_time, buffer);
+
+	pack16(build_ptr->z_16, buffer);
+	pack32(build_ptr->z_32, buffer);
+	packstr(build_ptr->z_char, buffer);
 }
 
 static int
 _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 			   build_buffer_ptr, Buf buffer)
 {
+	uint32_t count = NO_VAL;
 	uint32_t uint32_tmp;
 	slurm_ctl_conf_info_msg_t *build_ptr;
 
@@ -2362,6 +3019,8 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 	safe_unpack_time(&build_ptr->last_update, buffer);
 
 	safe_unpack16(&build_ptr->accounting_storage_enforce, buffer);
+	safe_unpackstr_xmalloc(&build_ptr->accounting_storage_backup_host, 
+			       &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->accounting_storage_host, 
 			       &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->accounting_storage_loc,
@@ -2379,12 +3038,14 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 	safe_unpackstr_xmalloc(&build_ptr->backup_addr, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->backup_controller, &uint32_tmp,
 			       buffer);
+	safe_unpack16(&build_ptr->batch_start_timeout, buffer);
 	safe_unpack_time(&build_ptr->boot_time, buffer);
 
 	safe_unpack16(&build_ptr->cache_groups, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->checkpoint_type, &uint32_tmp,
 			       buffer);
 	safe_unpackstr_xmalloc(&build_ptr->cluster_name, &uint32_tmp, buffer);
+	safe_unpack16(&build_ptr->complete_wait, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->control_addr, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->control_machine, &uint32_tmp,
 			       buffer);
@@ -2392,10 +3053,13 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 			       buffer);
 
 	safe_unpack32(&build_ptr->def_mem_per_task, buffer);
+	safe_unpack32(&build_ptr->debug_flags, buffer);
 	safe_unpack16(&build_ptr->disable_root_jobs, buffer);
 
 	safe_unpackstr_xmalloc(&build_ptr->epilog, &uint32_tmp, buffer);
 	safe_unpack32(&build_ptr->epilog_msg_time, buffer);
+	safe_unpackstr_xmalloc(&build_ptr->epilog_slurmctld, &uint32_tmp, 
+			       buffer);
 
 	safe_unpack16(&build_ptr->fast_schedule, buffer);
 	safe_unpack32(&build_ptr->first_job_id, buffer);
@@ -2412,6 +3076,8 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 	safe_unpackstr_xmalloc(&build_ptr->job_acct_gather_type,
 			       &uint32_tmp, buffer);
 
+	safe_unpackstr_xmalloc(&build_ptr->job_ckpt_dir, &uint32_tmp, buffer);
+
 	safe_unpackstr_xmalloc(&build_ptr->job_comp_host, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->job_comp_loc,  &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->job_comp_pass, &uint32_tmp, buffer);
@@ -2427,6 +3093,7 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 	safe_unpack16(&build_ptr->job_file_append, buffer);
 	safe_unpack16(&build_ptr->job_requeue, buffer);
 
+	safe_unpack16(&build_ptr->kill_on_bad_exit, buffer);
 	safe_unpack16(&build_ptr->kill_wait, buffer);
 
 	safe_unpackstr_xmalloc(&build_ptr->licenses, &uint32_tmp, buffer);
@@ -2436,17 +3103,35 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 	safe_unpack32(&build_ptr->max_mem_per_task, buffer);
 	safe_unpack16(&build_ptr->min_job_age, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->mpi_default, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&build_ptr->mpi_params, &uint32_tmp, buffer);
 	safe_unpack16(&build_ptr->msg_timeout, buffer);
 
 	safe_unpack32(&build_ptr->next_job_id, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->node_prefix, &uint32_tmp, buffer);
 
+	safe_unpack16(&build_ptr->over_time_limit, buffer);
+
 	safe_unpackstr_xmalloc(&build_ptr->plugindir, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->plugstack, &uint32_tmp, buffer);
+
+	safe_unpack32(&build_ptr->priority_decay_hl, buffer);
+	safe_unpack16(&build_ptr->priority_favor_small, buffer);
+	safe_unpack32(&build_ptr->priority_max_age, buffer);
+	safe_unpack16(&build_ptr->priority_reset_period, buffer);
+	safe_unpackstr_xmalloc(&build_ptr->priority_type, &uint32_tmp, 
+			       buffer);
+	safe_unpack32(&build_ptr->priority_weight_age, buffer);
+	safe_unpack32(&build_ptr->priority_weight_fs, buffer);
+	safe_unpack32(&build_ptr->priority_weight_js, buffer);
+	safe_unpack32(&build_ptr->priority_weight_part, buffer);
+	safe_unpack32(&build_ptr->priority_weight_qos, buffer);
+
 	safe_unpack16(&build_ptr->private_data, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->proctrack_type, &uint32_tmp, 
 			       buffer);
 	safe_unpackstr_xmalloc(&build_ptr->prolog, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&build_ptr->prolog_slurmctld, &uint32_tmp, 
+			       buffer);
 	safe_unpack16(&build_ptr->propagate_prio_process, buffer);
         safe_unpackstr_xmalloc(&build_ptr->propagate_rlimits,
                                &uint32_tmp, buffer);
@@ -2456,14 +3141,33 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 	safe_unpackstr_xmalloc(&build_ptr->resume_program,
 			       &uint32_tmp, buffer);
 	safe_unpack16(&build_ptr->resume_rate, buffer);
+	safe_unpack16(&build_ptr->resume_timeout, buffer);
+	safe_unpack16(&build_ptr->resv_over_run, buffer);
 	safe_unpack16(&build_ptr->ret2service, buffer);
 
+	safe_unpackstr_xmalloc(&build_ptr->salloc_default_command, 
+			       &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->sched_params, &uint32_tmp, buffer);
 	safe_unpack16(&build_ptr->schedport, buffer);
 	safe_unpack16(&build_ptr->schedrootfltr, buffer);
 	safe_unpack16(&build_ptr->sched_time_slice, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->schedtype, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->select_type, &uint32_tmp, buffer);
+	safe_unpack32(&count, buffer);
+	if(count != NO_VAL) {
+		List tmp_list = list_create(destroy_config_key_pair);
+		config_key_pair_t *object = NULL;
+		int i;
+		for(i=0; i<count; i++) {
+			if(unpack_config_key_pair(
+				   (void *)&object, SLURMDBD_VERSION, buffer)
+			   == SLURM_ERROR)
+				goto unpack_error;
+			list_append(tmp_list, object);
+		}
+		build_ptr->select_conf_key_pairs = (void *)tmp_list;
+	}
+	
 	safe_unpack16(&build_ptr->select_type_param, buffer);
 
 	safe_unpackstr_xmalloc(&build_ptr->slurm_conf,
@@ -2471,6 +3175,9 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 	safe_unpack32(&build_ptr->slurm_user_id, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->slurm_user_name,
 			       &uint32_tmp, buffer);
+	safe_unpack32(&build_ptr->slurmd_user_id, buffer);
+	safe_unpackstr_xmalloc(&build_ptr->slurmd_user_name,
+			       &uint32_tmp, buffer);
 
 	safe_unpack16(&build_ptr->slurmctld_debug, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->slurmctld_logfile,
@@ -2493,6 +3200,7 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 	safe_unpack16(&build_ptr->slurmd_timeout, buffer);
 
 	safe_unpackstr_xmalloc(&build_ptr->srun_epilog, &uint32_tmp, buffer);
+	safe_unpack16(&build_ptr->srun_io_timeout, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->srun_prolog, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->state_save_location,
 			       &uint32_tmp, buffer);
@@ -2504,6 +3212,7 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 			       &uint32_tmp, buffer);
 	safe_unpack16(&build_ptr->suspend_rate, buffer);
 	safe_unpack16(&build_ptr->suspend_time, buffer);
+	safe_unpack16(&build_ptr->suspend_timeout, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->switch_type, &uint32_tmp, buffer);
 
 	safe_unpackstr_xmalloc(&build_ptr->task_epilog, &uint32_tmp, buffer);
@@ -2511,6 +3220,8 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 	safe_unpackstr_xmalloc(&build_ptr->task_plugin, &uint32_tmp, buffer);
 	safe_unpack16(&build_ptr->task_plugin_param, buffer);
 	safe_unpackstr_xmalloc(&build_ptr->tmp_fs, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&build_ptr->topology_plugin, &uint32_tmp, buffer);
+	safe_unpack16(&build_ptr->track_wckey, buffer);
 	safe_unpack16(&build_ptr->tree_width, buffer);
 
 	safe_unpack16(&build_ptr->use_pam, buffer);
@@ -2520,67 +3231,14 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **
 
 	safe_unpack16(&build_ptr->wait_time, buffer);
 
+	safe_unpack16(&build_ptr->z_16, buffer);
+	safe_unpack32(&build_ptr->z_32, buffer);
+	safe_unpackstr_xmalloc(&build_ptr->z_char, &uint32_tmp, buffer);
+
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(build_ptr->accounting_storage_host);
-	xfree(build_ptr->accounting_storage_loc);
-	xfree(build_ptr->accounting_storage_pass);
-	xfree(build_ptr->accounting_storage_type);
-	xfree(build_ptr->accounting_storage_user);
-	xfree(build_ptr->authtype);
-	xfree(build_ptr->backup_addr);
-	xfree(build_ptr->backup_controller);
-	xfree(build_ptr->checkpoint_type);
-	xfree(build_ptr->cluster_name);
-	xfree(build_ptr->control_addr);
-	xfree(build_ptr->control_machine);
-	xfree(build_ptr->crypto_type);
-	xfree(build_ptr->epilog);
-	xfree(build_ptr->health_check_program);
-	xfree(build_ptr->job_acct_gather_type);
-	xfree(build_ptr->job_comp_loc);
-	xfree(build_ptr->job_comp_pass);
-	xfree(build_ptr->job_comp_type);
-	xfree(build_ptr->job_comp_user);
-	xfree(build_ptr->job_credential_private_key);
-	xfree(build_ptr->job_credential_public_certificate);
-	xfree(build_ptr->health_check_program);
-	xfree(build_ptr->licenses);
-	xfree(build_ptr->mail_prog);
-	xfree(build_ptr->mpi_default);
-	xfree(build_ptr->node_prefix);
-	xfree(build_ptr->plugindir);
-	xfree(build_ptr->plugstack);
-	xfree(build_ptr->proctrack_type);
-	xfree(build_ptr->prolog);
-	xfree(build_ptr->propagate_rlimits);
-	xfree(build_ptr->propagate_rlimits_except);
-	xfree(build_ptr->resume_program);
-	xfree(build_ptr->sched_params);
-	xfree(build_ptr->schedtype);
-	xfree(build_ptr->select_type);
-	xfree(build_ptr->slurm_conf);
-	xfree(build_ptr->slurm_user_name);
-	xfree(build_ptr->slurmctld_logfile);
-	xfree(build_ptr->slurmctld_pidfile);
-	xfree(build_ptr->slurmd_logfile);
-	xfree(build_ptr->slurmd_pidfile);
-	xfree(build_ptr->slurmd_spooldir);
-	xfree(build_ptr->srun_epilog);
-	xfree(build_ptr->srun_prolog);
-	xfree(build_ptr->state_save_location);
-	xfree(build_ptr->suspend_exc_nodes);
-	xfree(build_ptr->suspend_exc_parts);
-	xfree(build_ptr->suspend_program);
-	xfree(build_ptr->switch_type);
-	xfree(build_ptr->node_prefix);
-	xfree(build_ptr->task_epilog);
-	xfree(build_ptr->task_prolog);
-	xfree(build_ptr->task_plugin);
-	xfree(build_ptr->tmp_fs);
-	xfree(build_ptr->unkillable_program);
-	xfree(build_ptr);
+	slurm_free_ctl_conf(build_ptr);
 	*build_buffer_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -2597,7 +3255,6 @@ _pack_job_desc_msg(job_desc_msg_t * job_desc_ptr, Buf buffer)
 	/* load the data values */
 	pack16(job_desc_ptr->contiguous, buffer);
 	pack16(job_desc_ptr->task_dist, buffer);
-	pack16(job_desc_ptr->plane_size, buffer);
 	pack16(job_desc_ptr->kill_on_node_fail, buffer);
 	packstr(job_desc_ptr->features, buffer);
 	pack32(job_desc_ptr->job_id, buffer);
@@ -2623,6 +3280,7 @@ _pack_job_desc_msg(job_desc_msg_t * job_desc_ptr, Buf buffer)
 	pack8(job_desc_ptr->overcommit,  buffer);
 	pack16(job_desc_ptr->acctg_freq, buffer);
 	pack32(job_desc_ptr->num_tasks,  buffer);
+	pack16(job_desc_ptr->ckpt_interval, buffer);
 
 	packstr(job_desc_ptr->req_nodes, buffer);
 	packstr(job_desc_ptr->exc_nodes, buffer);
@@ -2635,6 +3293,7 @@ _pack_job_desc_msg(job_desc_msg_t * job_desc_ptr, Buf buffer)
 	packstr(job_desc_ptr->in, buffer);
 	packstr(job_desc_ptr->out, buffer);
 	packstr(job_desc_ptr->work_dir, buffer);
+	packstr(job_desc_ptr->ckpt_dir, buffer);
 
 	pack16(job_desc_ptr->immediate, buffer);
 	pack16(job_desc_ptr->requeue, buffer);
@@ -2643,8 +3302,14 @@ _pack_job_desc_msg(job_desc_msg_t * job_desc_ptr, Buf buffer)
 	pack16(job_desc_ptr->ntasks_per_node, buffer);
 	pack16(job_desc_ptr->ntasks_per_socket, buffer);
 	pack16(job_desc_ptr->ntasks_per_core, buffer);
-	pack32(job_desc_ptr->time_limit, buffer);
 
+	pack16(job_desc_ptr->plane_size, buffer);
+	pack16(job_desc_ptr->cpu_bind_type, buffer);
+	pack16(job_desc_ptr->mem_bind_type, buffer);
+	packstr(job_desc_ptr->cpu_bind, buffer);
+	packstr(job_desc_ptr->mem_bind, buffer);
+
+	pack32(job_desc_ptr->time_limit, buffer);
 	pack32(job_desc_ptr->num_procs, buffer);
 	pack32(job_desc_ptr->min_nodes, buffer);
 	pack32(job_desc_ptr->max_nodes, buffer);
@@ -2665,6 +3330,9 @@ _pack_job_desc_msg(job_desc_msg_t * job_desc_ptr, Buf buffer)
 	packstr(job_desc_ptr->licenses, buffer);
 	pack16(job_desc_ptr->mail_type, buffer);
 	packstr(job_desc_ptr->mail_user, buffer);
+	packstr(job_desc_ptr->reservation, buffer);
+	packstr(job_desc_ptr->wckey, buffer);
+
 	if(job_desc_ptr->select_jobinfo)
 		select_g_pack_jobinfo(job_desc_ptr->select_jobinfo, buffer);
 	else if (select_g_alloc_jobinfo(&job_desc_ptr->select_jobinfo) 
@@ -2729,7 +3397,6 @@ _unpack_job_desc_msg(job_desc_msg_t ** job_desc_buffer_ptr, Buf buffer)
 	/* load the data values */
 	safe_unpack16(&job_desc_ptr->contiguous, buffer);
 	safe_unpack16(&job_desc_ptr->task_dist, buffer);
-	safe_unpack16(&job_desc_ptr->plane_size, buffer);
 	safe_unpack16(&job_desc_ptr->kill_on_node_fail, buffer);
 	safe_unpackstr_xmalloc(&job_desc_ptr->features, &uint32_tmp, buffer);
 	safe_unpack32(&job_desc_ptr->job_id, buffer);
@@ -2755,6 +3422,7 @@ _unpack_job_desc_msg(job_desc_msg_t ** job_desc_buffer_ptr, Buf buffer)
 	safe_unpack8(&job_desc_ptr->overcommit,  buffer);
 	safe_unpack16(&job_desc_ptr->acctg_freq, buffer);
 	safe_unpack32(&job_desc_ptr->num_tasks,  buffer);
+	safe_unpack16(&job_desc_ptr->ckpt_interval, buffer);
 
 	safe_unpackstr_xmalloc(&job_desc_ptr->req_nodes, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&job_desc_ptr->exc_nodes, &uint32_tmp, buffer);
@@ -2767,6 +3435,7 @@ _unpack_job_desc_msg(job_desc_msg_t ** job_desc_buffer_ptr, Buf buffer)
 	safe_unpackstr_xmalloc(&job_desc_ptr->in, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&job_desc_ptr->out, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&job_desc_ptr->work_dir, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&job_desc_ptr->ckpt_dir, &uint32_tmp, buffer);
 
 	safe_unpack16(&job_desc_ptr->immediate, buffer);
 	safe_unpack16(&job_desc_ptr->requeue, buffer);
@@ -2775,8 +3444,14 @@ _unpack_job_desc_msg(job_desc_msg_t ** job_desc_buffer_ptr, Buf buffer)
 	safe_unpack16(&job_desc_ptr->ntasks_per_node, buffer);
 	safe_unpack16(&job_desc_ptr->ntasks_per_socket, buffer);
 	safe_unpack16(&job_desc_ptr->ntasks_per_core, buffer);
-	safe_unpack32(&job_desc_ptr->time_limit, buffer);
 
+	safe_unpack16(&job_desc_ptr->plane_size, buffer);
+	safe_unpack16(&job_desc_ptr->cpu_bind_type, buffer);
+	safe_unpack16(&job_desc_ptr->mem_bind_type, buffer);
+	safe_unpackstr_xmalloc(&job_desc_ptr->cpu_bind, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&job_desc_ptr->mem_bind, &uint32_tmp, buffer);
+
+	safe_unpack32(&job_desc_ptr->time_limit, buffer);
 	safe_unpack32(&job_desc_ptr->num_procs, buffer);
 	safe_unpack32(&job_desc_ptr->min_nodes, buffer);
 	safe_unpack32(&job_desc_ptr->max_nodes, buffer);
@@ -2797,10 +3472,16 @@ _unpack_job_desc_msg(job_desc_msg_t ** job_desc_buffer_ptr, Buf buffer)
 	safe_unpackstr_xmalloc(&job_desc_ptr->licenses, &uint32_tmp, buffer);
 	safe_unpack16(&job_desc_ptr->mail_type, buffer);
 	safe_unpackstr_xmalloc(&job_desc_ptr->mail_user, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&job_desc_ptr->reservation, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&job_desc_ptr->wckey, &uint32_tmp, buffer);
 
 	if (select_g_alloc_jobinfo (&job_desc_ptr->select_jobinfo)
 	    ||  select_g_unpack_jobinfo(job_desc_ptr->select_jobinfo, buffer))
 		goto unpack_error;
+
+	/* These are set so we don't confuse them later for what is
+	 * set in the select_jobinfo structure.
+	 */
 #if SYSTEM_DIMENSIONS
 	job_desc_ptr->geometry[0] = (uint16_t)NO_VAL;
 #endif
@@ -2814,27 +3495,7 @@ _unpack_job_desc_msg(job_desc_msg_t ** job_desc_buffer_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-
-	xfree(job_desc_ptr->features);
-	xfree(job_desc_ptr->name);
-	xfree(job_desc_ptr->partition);
-	xfree(job_desc_ptr->dependency);
-	xfree(job_desc_ptr->account);
-	xfree(job_desc_ptr->comment);
-	xfree(job_desc_ptr->req_nodes);
-	xfree(job_desc_ptr->exc_nodes);
-	xfree(job_desc_ptr->environment);
-	xfree(job_desc_ptr->script);
-	xfree(job_desc_ptr->argv);
-	xfree(job_desc_ptr->err);
-	xfree(job_desc_ptr->in);
-	xfree(job_desc_ptr->out);
-	xfree(job_desc_ptr->work_dir);
-	xfree(job_desc_ptr->network);
-	xfree(job_desc_ptr->licenses);
-	xfree(job_desc_ptr->mail_user);
-	select_g_free_jobinfo(&job_desc_ptr->select_jobinfo);
-	xfree(job_desc_ptr);
+	slurm_free_job_desc_msg(job_desc_ptr);
 	*job_desc_buffer_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -2862,7 +3523,7 @@ _unpack_job_alloc_info_msg(job_alloc_info_msg_t **
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(job_desc_ptr);
+	slurm_free_job_alloc_info_msg(job_desc_ptr);
 	*job_desc_buffer_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -2887,7 +3548,7 @@ _unpack_last_update_msg(last_update_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(last_update_msg);
+	slurm_free_last_update_msg(last_update_msg);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -2912,7 +3573,7 @@ _unpack_return_code_msg(return_code_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(return_code_msg);
+	slurm_free_return_code_msg(return_code_msg);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -3055,7 +3716,7 @@ _unpack_task_exit_msg(task_exit_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg);
+	slurm_free_task_exit_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -3091,15 +3752,12 @@ _unpack_launch_tasks_response_msg(launch_tasks_response_msg_t **
 		goto unpack_error;
 	safe_unpack32_array(&msg->task_ids, &uint32_tmp, buffer);
 	if (msg->count_of_pids != uint32_tmp)
-		goto unpack_error2;
+		goto unpack_error;
 
 	return SLURM_SUCCESS;
 
-unpack_error2:
-	xfree(msg->count_of_pids);
 unpack_error:
-	xfree(msg->node_name);
-	xfree(msg);
+	slurm_free_launch_tasks_response_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -3115,18 +3773,13 @@ _pack_launch_tasks_request_msg(launch_tasks_request_msg_t * msg, Buf buffer)
 	pack32(msg->uid, buffer);
 	pack32(msg->gid, buffer);
 	pack32(msg->job_mem, buffer);
-	pack32(msg->task_mem, buffer);
 
 	pack32(msg->nnodes, buffer);
 	pack16(msg->max_sockets, buffer);
 	pack16(msg->max_cores, buffer);
 	pack16(msg->max_threads, buffer);
 	pack16(msg->cpus_per_task, buffer);
-	pack16(msg->ntasks_per_node, buffer);
-	pack16(msg->ntasks_per_socket, buffer);
-	pack16(msg->ntasks_per_core, buffer);
 	pack16(msg->task_dist, buffer);
-	pack16(msg->plane_size, buffer);
 
 	slurm_cred_pack(msg->cred, buffer);
 	for(i=0; i<msg->nnodes; i++) {
@@ -3155,6 +3808,7 @@ _pack_launch_tasks_request_msg(launch_tasks_request_msg_t * msg, Buf buffer)
 		packstr(msg->efname, buffer);
 		packstr(msg->ifname, buffer);
 		pack8(msg->buffered_stdio, buffer);
+		pack8(msg->labelio, buffer);
 		pack16(msg->num_io_port, buffer);
 		for(i = 0; i < msg->num_io_port; i++)
 			pack16(msg->io_port[i], buffer);
@@ -3169,7 +3823,8 @@ _pack_launch_tasks_request_msg(launch_tasks_request_msg_t * msg, Buf buffer)
 	pack8(msg->open_mode, buffer);
 	pack8(msg->pty, buffer);
 	pack16(msg->acctg_freq, buffer);
-	packstr(msg->ckpt_path, buffer);
+	packstr(msg->ckpt_dir, buffer);
+	packstr(msg->restart_dir, buffer);
 }
 
 static int
@@ -3190,18 +3845,13 @@ _unpack_launch_tasks_request_msg(launch_tasks_request_msg_t **
 	safe_unpack32(&msg->uid, buffer);
 	safe_unpack32(&msg->gid, buffer);
 	safe_unpack32(&msg->job_mem, buffer);
-	safe_unpack32(&msg->task_mem, buffer);
 
 	safe_unpack32(&msg->nnodes, buffer);
 	safe_unpack16(&msg->max_sockets, buffer);
 	safe_unpack16(&msg->max_cores, buffer);
 	safe_unpack16(&msg->max_threads, buffer);
 	safe_unpack16(&msg->cpus_per_task, buffer);
-	safe_unpack16(&msg->ntasks_per_node, buffer);
-	safe_unpack16(&msg->ntasks_per_socket, buffer);
-	safe_unpack16(&msg->ntasks_per_core, buffer);
 	safe_unpack16(&msg->task_dist, buffer);
-	safe_unpack16(&msg->plane_size, buffer);
 
 	if (!(msg->cred = slurm_cred_unpack(buffer)))
 		goto unpack_error;
@@ -3240,6 +3890,7 @@ _unpack_launch_tasks_request_msg(launch_tasks_request_msg_t **
 		safe_unpackstr_xmalloc(&msg->efname, &uint32_tmp, buffer);
 		safe_unpackstr_xmalloc(&msg->ifname, &uint32_tmp, buffer);
 		safe_unpack8(&msg->buffered_stdio, buffer);
+		safe_unpack8(&msg->labelio, buffer);
 		safe_unpack16(&msg->num_io_port, buffer);
 		if (msg->num_io_port > 0) {
 			msg->io_port =
@@ -3268,7 +3919,8 @@ _unpack_launch_tasks_request_msg(launch_tasks_request_msg_t **
 	safe_unpack8(&msg->open_mode, buffer);
 	safe_unpack8(&msg->pty, buffer);
 	safe_unpack16(&msg->acctg_freq, buffer);
-	safe_unpackstr_xmalloc(&msg->ckpt_path, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&msg->ckpt_dir, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&msg->restart_dir, &uint32_tmp, buffer);
 	return SLURM_SUCCESS;
 
 unpack_error:
@@ -3327,7 +3979,7 @@ _unpack_cancel_tasks_msg(kill_tasks_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg);
+	slurm_free_kill_tasks_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -3335,28 +3987,30 @@ unpack_error:
 static void
 _pack_checkpoint_tasks_msg(checkpoint_tasks_msg_t * msg, Buf buffer)
 {
-	pack32((uint32_t)msg->job_id, buffer);
-	pack32((uint32_t)msg->job_step_id, buffer);
-	pack32((uint32_t)msg->signal, buffer);
-	pack_time((time_t)msg->timestamp, buffer);
+	pack32(msg->job_id, buffer);
+	pack32(msg->job_step_id, buffer);
+	pack_time(msg->timestamp, buffer);
+	packstr(msg->image_dir, buffer);
 }
 
 static int
 _unpack_checkpoint_tasks_msg(checkpoint_tasks_msg_t ** msg_ptr, Buf buffer)
 {
 	checkpoint_tasks_msg_t *msg;
+	uint32_t uint32_tmp;
 
 	msg = xmalloc(sizeof(checkpoint_tasks_msg_t));
 	*msg_ptr = msg;
 
 	safe_unpack32(&msg->job_id, buffer);
 	safe_unpack32(&msg->job_step_id, buffer);
-	safe_unpack32(&msg->signal, buffer);
 	safe_unpack_time(&msg->timestamp, buffer);
+	safe_unpackstr_xmalloc(&msg->image_dir, &uint32_tmp, buffer);
+	
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg);
+	slurm_free_checkpoint_tasks_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -3379,7 +4033,7 @@ _unpack_shutdown_msg(shutdown_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg);
+	slurm_free_shutdown_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -3420,7 +4074,7 @@ _unpack_job_step_kill_msg(job_step_kill_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg);
+	slurm_free_job_step_kill_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -3447,7 +4101,7 @@ _unpack_complete_job_allocation_msg(
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg);
+	slurm_free_complete_job_allocation_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -3479,7 +4133,7 @@ _unpack_complete_batch_script_msg(
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg);
+	slurm_free_complete_batch_script_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -3513,7 +4167,7 @@ _unpack_stat_jobacct_msg(stat_jobacct_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg);
+	slurm_free_stat_jobacct_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 
@@ -3541,7 +4195,7 @@ _unpack_job_step_id_msg(job_step_id_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg);
+	slurm_free_job_step_id_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 
@@ -3578,7 +4232,7 @@ _unpack_step_complete_msg(step_complete_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg);
+	slurm_free_step_complete_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -3604,7 +4258,7 @@ _unpack_job_info_request_msg(job_info_request_msg_t** msg,
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(job_info);
+	slurm_free_job_info_request_msg(job_info);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -3628,7 +4282,7 @@ _unpack_node_select_info_req_msg(node_info_select_request_msg_t **msg,
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(node_sel_info);
+	slurm_free_node_select_msg(node_sel_info);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -3657,7 +4311,7 @@ _unpack_job_step_info_req_msg(job_step_info_request_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(job_step_info);
+	slurm_free_job_step_info_request_msg(job_step_info);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -3682,7 +4336,7 @@ _unpack_node_info_request_msg(node_info_request_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(node_info);
+	slurm_free_node_info_request_msg(node_info);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -3707,7 +4361,30 @@ _unpack_part_info_request_msg(part_info_request_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(part_info);
+	slurm_free_part_info_request_msg(part_info);
+	*msg = NULL;
+	return SLURM_ERROR;
+}
+
+static void
+_pack_resv_info_request_msg(resv_info_request_msg_t * msg, Buf buffer)
+{
+	pack_time(msg->last_update, buffer);
+}
+
+static int
+_unpack_resv_info_request_msg(resv_info_request_msg_t ** msg, Buf buffer)
+{
+	resv_info_request_msg_t* resv_info;
+
+	resv_info = xmalloc(sizeof(resv_info_request_msg_t));
+	*msg = resv_info;
+
+	safe_unpack_time(&resv_info->last_update, buffer);
+	return SLURM_SUCCESS;
+
+unpack_error:
+	slurm_free_resv_info_request_msg(resv_info);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -3799,14 +4476,22 @@ _pack_batch_job_launch_msg(batch_job_launch_msg_t * msg, Buf buffer)
 	pack8(msg->overcommit, buffer);
 
 	pack16(msg->acctg_freq,     buffer);
-	pack16(msg->num_cpu_groups, buffer);
+	pack16(msg->cpu_bind_type,  buffer);
+	pack16(msg->cpus_per_task,  buffer);
+	pack16(msg->restart_cnt,    buffer);
 
-	pack32_array(msg->cpus_per_node, msg->num_cpu_groups, buffer);
-	pack32_array(msg->cpu_count_reps, msg->num_cpu_groups, buffer);
+	pack32(msg->num_cpu_groups, buffer);
+	if (msg->num_cpu_groups) {
+		pack16_array(msg->cpus_per_node, msg->num_cpu_groups, buffer);
+		pack32_array(msg->cpu_count_reps, msg->num_cpu_groups, buffer);
+	}
 
-	packstr(msg->nodes, buffer);
-	packstr(msg->script, buffer);
+	packstr(msg->cpu_bind, buffer);
+	packstr(msg->nodes,    buffer);
+	packstr(msg->script,   buffer);
 	packstr(msg->work_dir, buffer);
+	packstr(msg->ckpt_dir, buffer);
+	packstr(msg->restart_dir, buffer);
 
 	packstr(msg->err, buffer);
 	packstr(msg->in, buffer);
@@ -3845,22 +4530,28 @@ _unpack_batch_job_launch_msg(batch_job_launch_msg_t ** msg, Buf buffer)
 	safe_unpack8(&launch_msg_ptr->overcommit, buffer);
 
 	safe_unpack16(&launch_msg_ptr->acctg_freq,     buffer);
-	safe_unpack16(&launch_msg_ptr->num_cpu_groups, buffer);
+	safe_unpack16(&launch_msg_ptr->cpu_bind_type,  buffer);
+	safe_unpack16(&launch_msg_ptr->cpus_per_task,  buffer);
+	safe_unpack16(&launch_msg_ptr->restart_cnt,    buffer);
+
+	safe_unpack32(&launch_msg_ptr->num_cpu_groups, buffer);
+	if (launch_msg_ptr->num_cpu_groups) {
+		safe_unpack16_array(&(launch_msg_ptr->cpus_per_node), 
+				    &uint32_tmp, buffer);
+		if (launch_msg_ptr->num_cpu_groups != uint32_tmp)
+			goto unpack_error;
+		safe_unpack32_array(&(launch_msg_ptr->cpu_count_reps), 
+				    &uint32_tmp, buffer);
+		if (launch_msg_ptr->num_cpu_groups != uint32_tmp)
+			goto unpack_error;
+	}
 
-	safe_unpack32_array((uint32_t **) &(launch_msg_ptr->cpus_per_node), 
-			    &uint32_tmp,
-			    buffer);
-	if (launch_msg_ptr->num_cpu_groups != uint32_tmp)
-		goto unpack_error;
-	safe_unpack32_array((uint32_t **) &(launch_msg_ptr->cpu_count_reps), 
-			    &uint32_tmp,
-			    buffer);
-	if (launch_msg_ptr->num_cpu_groups != uint32_tmp)
-		goto unpack_error;
-	
+	safe_unpackstr_xmalloc(&launch_msg_ptr->cpu_bind, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&launch_msg_ptr->nodes,    &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&launch_msg_ptr->script,   &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&launch_msg_ptr->work_dir, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&launch_msg_ptr->ckpt_dir, &uint32_tmp, buffer);
+	safe_unpackstr_xmalloc(&launch_msg_ptr->restart_dir, &uint32_tmp, buffer);
 
 	safe_unpackstr_xmalloc(&launch_msg_ptr->err, &uint32_tmp, buffer);
 	safe_unpackstr_xmalloc(&launch_msg_ptr->in,  &uint32_tmp, buffer);
@@ -3914,7 +4605,7 @@ _unpack_job_id_request_msg(job_id_request_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr);
+	slurm_free_job_id_request_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -3944,7 +4635,7 @@ _unpack_job_id_response_msg(job_id_response_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(tmp_ptr);
+	slurm_free_job_id_response_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -3974,8 +4665,8 @@ _unpack_srun_exec_msg(srun_exec_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
+	slurm_free_srun_exec_msg(msg);
 	*msg_ptr = NULL;
-	xfree(msg);
 	return SLURM_ERROR;
 }
 
@@ -4002,8 +4693,8 @@ _unpack_srun_ping_msg(srun_ping_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
+	slurm_free_srun_ping_msg(msg);
 	*msg_ptr = NULL;
-	xfree(msg);
 	return SLURM_ERROR;
 }
 
@@ -4012,8 +4703,8 @@ _pack_srun_node_fail_msg(srun_node_fail_msg_t * msg, Buf buffer)
 {
 	xassert ( msg != NULL );
 
-	pack32((uint32_t)msg->job_id  , buffer ) ;
-	pack32((uint32_t)msg->step_id , buffer ) ;
+	pack32(msg->job_id  , buffer ) ;
+	pack32(msg->step_id , buffer ) ;
 	packstr(msg->nodelist, buffer ) ;
 }
 
@@ -4034,9 +4725,40 @@ _unpack_srun_node_fail_msg(srun_node_fail_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
+	slurm_free_srun_node_fail_msg(msg);
+	*msg_ptr = NULL;
+	return SLURM_ERROR;
+}
+
+static void 
+_pack_srun_step_missing_msg(srun_step_missing_msg_t * msg, Buf buffer)
+{
+	xassert ( msg != NULL );
+
+	pack32(msg->job_id  , buffer ) ;
+	pack32(msg->step_id , buffer ) ;
+	packstr(msg->nodelist, buffer ) ;
+}
+
+static int 
+_unpack_srun_step_missing_msg(srun_step_missing_msg_t ** msg_ptr, Buf buffer)
+{
+	uint32_t uint32_tmp;
+	srun_step_missing_msg_t * msg;
+	xassert ( msg_ptr != NULL );
+
+	msg = xmalloc ( sizeof (srun_step_missing_msg_t) ) ;
+	*msg_ptr = msg;
+
+	safe_unpack32(&msg->job_id  , buffer ) ;
+	safe_unpack32(&msg->step_id , buffer ) ;
+	safe_unpackstr_xmalloc ( & msg->nodelist, &uint32_tmp, buffer);
+
+	return SLURM_SUCCESS;
+
+unpack_error:
+	slurm_free_srun_step_missing_msg(msg);
 	*msg_ptr = NULL;
-	xfree( msg->nodelist );
-	xfree( msg );
 	return SLURM_ERROR;
 }
 
@@ -4062,7 +4784,7 @@ _unpack_job_ready_msg(job_id_msg_t ** msg_ptr, Buf buffer)
 
 unpack_error:
 	*msg_ptr = NULL;
-	xfree(msg);
+	slurm_free_job_id_msg(msg);
 	return SLURM_ERROR;
 }
 
@@ -4092,7 +4814,7 @@ _unpack_srun_timeout_msg(srun_timeout_msg_t ** msg_ptr, Buf buffer)
 
 unpack_error:
 	*msg_ptr = NULL;
-	xfree(msg);
+	slurm_free_srun_timeout_msg(msg);
 	return SLURM_ERROR;
 }
 
@@ -4120,6 +4842,8 @@ _unpack_srun_user_msg(srun_user_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
+	slurm_free_srun_user_msg(msg_user);
+	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
 
@@ -4145,7 +4869,7 @@ static int  _unpack_suspend_msg(suspend_msg_t **msg_ptr, Buf buffer)
 
 unpack_error:
 	*msg_ptr = NULL;
-	xfree(msg);
+	slurm_free_suspend_msg(msg);
 	return SLURM_ERROR;
 }
 
@@ -4155,16 +4879,18 @@ _pack_checkpoint_msg(checkpoint_msg_t *msg, Buf buffer)
 {
 	xassert ( msg != NULL );
 
-	pack16((uint16_t)msg->op,      buffer ) ;
-	pack16((uint16_t)msg->data,    buffer ) ;
-	pack32((uint32_t)msg->job_id,  buffer ) ;
-	pack32((uint32_t)msg->step_id, buffer ) ;
+	pack16(msg->op,      buffer ) ;
+	pack16(msg->data,    buffer ) ;
+	pack32(msg->job_id,  buffer ) ;
+	pack32(msg->step_id, buffer ) ;
+	packstr((char *)msg->image_dir, buffer ) ;
 }
 
 static int
 _unpack_checkpoint_msg(checkpoint_msg_t **msg_ptr, Buf buffer)
 {
 	checkpoint_msg_t * msg;
+	uint32_t uint32_tmp;
 	xassert ( msg_ptr != NULL );
 
 	msg = xmalloc ( sizeof (checkpoint_msg_t) ) ;
@@ -4174,11 +4900,12 @@ _unpack_checkpoint_msg(checkpoint_msg_t **msg_ptr, Buf buffer)
 	safe_unpack16(&msg->data, buffer ) ;
 	safe_unpack32(&msg->job_id, buffer ) ;
 	safe_unpack32(&msg->step_id, buffer ) ;
+	safe_unpackstr_xmalloc(&msg->image_dir, &uint32_tmp, buffer ) ;
 	return SLURM_SUCCESS;
 
 unpack_error:
 	*msg_ptr = NULL;
-	xfree(msg);
+	slurm_free_checkpoint_msg(msg);
 	return SLURM_ERROR;
 }
 
@@ -4213,8 +4940,7 @@ _unpack_checkpoint_comp(checkpoint_comp_msg_t **msg_ptr, Buf buffer)
 
 unpack_error:
 	*msg_ptr = NULL;
-	xfree (msg->error_msg);
-	xfree (msg);
+	slurm_free_checkpoint_comp_msg(msg);
 	return SLURM_ERROR;
 }
 
@@ -4251,8 +4977,7 @@ _unpack_checkpoint_task_comp(checkpoint_task_comp_msg_t **msg_ptr, Buf buffer)
 
 unpack_error:
 	*msg_ptr = NULL;
-	xfree (msg->error_msg);
-	xfree (msg);
+	slurm_free_checkpoint_task_comp_msg(msg);
 	return SLURM_ERROR;
 }
 
@@ -4283,7 +5008,7 @@ _unpack_checkpoint_resp_msg(checkpoint_resp_msg_t **msg_ptr, Buf buffer)
 
 unpack_error:
 	*msg_ptr = NULL;
-	xfree(msg);
+	slurm_free_checkpoint_resp_msg(msg);
 	return SLURM_ERROR;
 }
 
@@ -4338,9 +5063,7 @@ static int _unpack_file_bcast(file_bcast_msg_t ** msg_ptr , Buf buffer )
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree( msg -> fname );
-	xfree( msg -> block );
-	xfree( msg );
+	slurm_free_file_bcast_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -4525,7 +5248,7 @@ static int  _unpack_kvs_get(kvs_get_msg_t **msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg);
+	slurm_free_get_kvs_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -4587,7 +5310,7 @@ unpack_multi_core_data (multi_core_data_t **mc_ptr, Buf buffer)
 	*mc_ptr = multi_core;
 	return SLURM_SUCCESS;
 
-  unpack_error:
+unpack_error:
 	xfree(multi_core);
 	return SLURM_ERROR;
 }
@@ -4646,11 +5369,7 @@ static int _unpack_slurmd_status(slurmd_status_t **msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg->hostname);
-	xfree(msg->slurmd_logfile);
-	xfree(msg->step_list);
-	xfree(msg->version);
-	xfree(msg);
+	slurm_free_slurmd_status(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -4681,8 +5400,7 @@ static int  _unpack_job_notify(job_notify_msg_t **msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(msg->message);
-	xfree(msg);
+	slurm_free_job_notify_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -4705,7 +5423,7 @@ _unpack_set_debug_level_msg(set_debug_level_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 	
  unpack_error:
-	xfree(msg);
+	slurm_free_set_debug_level_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -4734,8 +5452,7 @@ _unpack_will_run_response_msg(will_run_response_msg_t ** msg_ptr, Buf buffer)
 	return SLURM_SUCCESS;
 
   unpack_error:
-	xfree(msg->node_list);
-	xfree(msg);
+	slurm_free_will_run_response_msg(msg);
 	*msg_ptr = NULL;
 	return SLURM_ERROR;
 }
@@ -4788,9 +5505,52 @@ static int _unpack_accounting_update_msg(accounting_update_msg_t **msg,
 	return SLURM_SUCCESS;
 	
 unpack_error:
-	if(msg_ptr->update_list)
-		list_destroy(msg_ptr->update_list);
-	xfree(msg_ptr);
+	slurm_free_accounting_update_msg(msg_ptr);
+	*msg = NULL;
+	return SLURM_ERROR;
+}
+
+static void _pack_topo_info_msg(topo_info_response_msg_t *msg, Buf buffer)
+{
+	int i;
+
+	pack32(msg->record_count, buffer);
+	for (i=0; i<msg->record_count; i++) {
+		pack16(msg->topo_array[i].level,      buffer);
+		pack32(msg->topo_array[i].link_speed, buffer);
+  		packstr(msg->topo_array[i].name,      buffer);
+  		packstr(msg->topo_array[i].nodes,     buffer);
+  		packstr(msg->topo_array[i].switches,  buffer);
+	}
+}
+
+static int _unpack_topo_info_msg(topo_info_response_msg_t **msg,
+				 Buf buffer)
+{
+	int i = 0;
+	uint32_t uint32_tmp;
+	topo_info_response_msg_t *msg_ptr =
+		xmalloc(sizeof(topo_info_response_msg_t));
+
+	*msg = msg_ptr;
+	safe_unpack32(&msg_ptr->record_count, buffer);
+	msg_ptr->topo_array = xmalloc(sizeof(topo_info_t) * 
+				      msg_ptr->record_count);
+	for (i=0; i<msg_ptr->record_count; i++) {
+		safe_unpack16(&msg_ptr->topo_array[i].level,      buffer);
+		safe_unpack32(&msg_ptr->topo_array[i].link_speed, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->topo_array[i].name, 
+				       &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->topo_array[i].nodes, 
+				       &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->topo_array[i].switches, 
+				       &uint32_tmp, buffer);
+	}
+	
+	return SLURM_SUCCESS;
+	
+unpack_error:
+	slurm_free_topo_info_msg(msg_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
diff --git a/src/common/slurm_protocol_pack.h b/src/common/slurm_protocol_pack.h
index aae531ae0..67d8439ad 100644
--- a/src/common/slurm_protocol_pack.h
+++ b/src/common/slurm_protocol_pack.h
@@ -1,13 +1,15 @@
 /****************************************************************************\
  *  slurm_protocol_pack.h - definitions for all pack and unpack functions
  *****************************************************************************
- *  Copyright (C) 2002 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -133,7 +135,7 @@ extern int unpack_msg ( slurm_msg_t * msgi , Buf buffer );
  * IN/OUT buffer - destination of the pack, contains pointers that are 
  *			automatically updated
  */ 
-/* void pack_job_step_info_members( uint32_t job_id, uint16_t step_id,  */
+/* void pack_job_step_info_members( uint32_t job_id, uint32_t step_id,  */
 /* 		uint32_t user_id, uint32_t num_tasks, time_t start_time,  */
 /* 		char *partition, char *nodes, char *name, char *network, */
 /* 		Buf buffer ); */
diff --git a/src/common/slurm_protocol_socket_common.h b/src/common/slurm_protocol_socket_common.h
index 1f0c9be3a..15909be7c 100644
--- a/src/common/slurm_protocol_socket_common.h
+++ b/src/common/slurm_protocol_socket_common.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_protocol_socket_implementation.c b/src/common/slurm_protocol_socket_implementation.c
index bf1f3190a..087397c0e 100644
--- a/src/common/slurm_protocol_socket_implementation.c
+++ b/src/common/slurm_protocol_socket_implementation.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_protocol_util.c b/src/common/slurm_protocol_util.c
index d2d8c4c06..2fdf61a2a 100644
--- a/src/common/slurm_protocol_util.c
+++ b/src/common/slurm_protocol_util.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -44,6 +45,7 @@
 #include "src/common/slurm_protocol_util.h"
 #include "src/common/log.h"
 #include "src/common/xmalloc.h"
+#include "src/slurmdbd/read_config.h"
 
 /* 
  * check_header_version checks to see that the specified header was sent 
@@ -53,7 +55,11 @@
  */
 int check_header_version(header_t * header)
 {
-	if (header->version != SLURM_PROTOCOL_VERSION)
+	if(slurmdbd_conf) {
+		if (header->version != SLURM_PROTOCOL_VERSION
+		    && header->version != SLURM_1_3_PROTOCOL_VERSION)
+			slurm_seterrno_ret(SLURM_PROTOCOL_VERSION_ERROR);
+	} else if (header->version != SLURM_PROTOCOL_VERSION)
 		slurm_seterrno_ret(SLURM_PROTOCOL_VERSION_ERROR);
 
 	return SLURM_PROTOCOL_SUCCESS;
@@ -70,7 +76,20 @@ void init_header(header_t *header, slurm_msg_t *msg,
 		 uint16_t flags)
 {
 	memset(header, 0, sizeof(header));
-	header->version = SLURM_PROTOCOL_VERSION;
+	/* Since the slurmdbd could talk to a host of different
+	   versions of slurm this needs to be kept current when the
+	   protocol version changes. */
+	if(msg->msg_type == ACCOUNTING_UPDATE_MSG
+	   || msg->msg_type == ACCOUNTING_FIRST_REG) {
+		uint32_t rpc_version =
+			((accounting_update_msg_t *)msg->data)->rpc_version;
+		if(rpc_version < 5)
+			header->version = SLURM_1_3_PROTOCOL_VERSION;
+		else if(rpc_version >= 5)
+			header->version = SLURM_PROTOCOL_VERSION;
+	} else 
+		header->version = SLURM_PROTOCOL_VERSION;
+	
 	header->flags = flags;
 	header->msg_type = msg->msg_type;
 	header->body_length = 0;	/* over-written later */
diff --git a/src/common/slurm_protocol_util.h b/src/common/slurm_protocol_util.h
index b8698de0b..c4385574f 100644
--- a/src/common/slurm_protocol_util.h
+++ b/src/common/slurm_protocol_util.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_resource_info.c b/src/common/slurm_resource_info.c
index 0f2530189..3e912427f 100644
--- a/src/common/slurm_resource_info.c
+++ b/src/common/slurm_resource_info.c
@@ -4,10 +4,11 @@
  *****************************************************************************
  *  Copyright (C) 2006 Hewlett-Packard Development Company, L.P.
  *  Written by Susanne M. Balle, <susanne.balle@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -42,15 +43,49 @@
 #  include <string.h>
 #endif
 
+#include <ctype.h>
 #include <sys/types.h>
-#include "src/common/log.h"
 #include <slurm/slurm.h>
+
+#include "src/common/log.h"
+#include "src/common/slurm_protocol_api.h"
 #include "src/common/slurm_resource_info.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
 
 #if(0)
 #define DEBUG 1
 #endif
 
+/*
+ * First clear all of the bits in "*data" which are set in "clear_mask".
+ * Then set all of the bits in "*data" that are set in "set_mask".
+ */
+static void _clear_then_set(int *data, int clear_mask, int set_mask)
+{
+	*data &= ~clear_mask;
+	*data |= set_mask;
+}
+
+/*
+ * _isvalue
+ * returns 1 is the argument appears to be a value, 0 otherwise
+ */
+static int _isvalue(char *arg) {
+    	if (isdigit(*arg)) {	 /* decimal values and 0x... hex values */
+	    	return 1;
+	}
+
+	while (isxdigit(*arg)) { /* hex values not preceded by 0x */
+		arg++;
+	}
+	if (*arg == ',' || *arg == '\0') { /* end of field or string */
+	    	return 1;
+	}
+
+	return 0;	/* not a value */
+}
+
 /*
  * slurm_get_avail_procs - Get the number of "available" cpus on a node
  *	given this number given the number of cpus_per_task and
@@ -72,7 +107,7 @@
  * IN alloc_cores    - Allocated cores (per socket) count to other jobs
  * IN cr_type        - Consumable Resource type
  *
- * Note: used in both the select/{linear,cons_res} plugins.
+ * Note: currently only used in the select/linear plugin.
  */
 int slurm_get_avail_procs(const uint16_t max_sockets,
 			  const uint16_t max_cores,
@@ -281,22 +316,31 @@ void slurm_sprint_cpu_bind_type(char *str, cpu_bind_type_t cpu_bind_type)
 
 	str[0] = '\0';
 
+	if (cpu_bind_type & CPU_BIND_VERBOSE)
+		strcat(str, "verbose,");
+
 	if (cpu_bind_type & CPU_BIND_TO_THREADS)
 		strcat(str, "threads,");
 	if (cpu_bind_type & CPU_BIND_TO_CORES)
 		strcat(str, "cores,");
 	if (cpu_bind_type & CPU_BIND_TO_SOCKETS)
 		strcat(str, "sockets,");
-	if (cpu_bind_type & CPU_BIND_VERBOSE)
-		strcat(str, "verbose,");
+	if (cpu_bind_type & CPU_BIND_TO_LDOMS)
+		strcat(str, "ldoms,");
 	if (cpu_bind_type & CPU_BIND_NONE)
 		strcat(str, "none,");
 	if (cpu_bind_type & CPU_BIND_RANK)
 		strcat(str, "rank,");
 	if (cpu_bind_type & CPU_BIND_MAP)
-		strcat(str, "mapcpu,");
+		strcat(str, "map_cpu,");
 	if (cpu_bind_type & CPU_BIND_MASK)
-		strcat(str, "maskcpu,");
+		strcat(str, "mask_cpu,");
+	if (cpu_bind_type & CPU_BIND_LDRANK)
+		strcat(str, "rank_ldom,");
+	if (cpu_bind_type & CPU_BIND_LDMAP)
+		strcat(str, "map_ldom,");
+	if (cpu_bind_type & CPU_BIND_LDMASK)
+		strcat(str, "mask_ldom,");
 
 	if (*str) {
 		str[strlen(str)-1] = '\0';	/* remove trailing ',' */
@@ -321,6 +365,7 @@ void slurm_sprint_mem_bind_type(char *str, mem_bind_type_t mem_bind_type)
 
 	if (mem_bind_type & MEM_BIND_VERBOSE)
 		strcat(str, "verbose,");
+
 	if (mem_bind_type & MEM_BIND_NONE)
 		strcat(str, "none,");
 	if (mem_bind_type & MEM_BIND_RANK)
@@ -328,9 +373,9 @@ void slurm_sprint_mem_bind_type(char *str, mem_bind_type_t mem_bind_type)
 	if (mem_bind_type & MEM_BIND_LOCAL)
 		strcat(str, "local,");
 	if (mem_bind_type & MEM_BIND_MAP)
-		strcat(str, "mapmem,");
+		strcat(str, "map_mem,");
 	if (mem_bind_type & MEM_BIND_MASK)
-		strcat(str, "maskmem,");
+		strcat(str, "mask_mem,");
 
 	if (*str) {
 		str[strlen(str)-1] = '\0';	/* remove trailing ',' */
@@ -338,3 +383,347 @@ void slurm_sprint_mem_bind_type(char *str, mem_bind_type_t mem_bind_type)
 	    	strcat(str, "(null type)");	/* no bits set */
 	}
 }
+
+void slurm_print_cpu_bind_help(void)
+{
+	printf(
+"CPU bind options:\n"
+"    --cpu_bind=         Bind tasks to CPUs\n"
+"        q[uiet]         quietly bind before task runs (default)\n"
+"        v[erbose]       verbosely report binding before task runs\n"
+"        no[ne]          don't bind tasks to CPUs (default)\n"
+"        rank            bind by task rank\n"
+"        map_cpu:<list>  specify a CPU ID binding for each task\n"
+"                        where <list> is <cpuid1>,<cpuid2>,...<cpuidN>\n"
+"        mask_cpu:<list> specify a CPU ID binding mask for each task\n"
+"                        where <list> is <mask1>,<mask2>,...<maskN>\n"
+"        rank_ldom       bind task by rank to CPUs in a NUMA locality domain\n"
+"        map_ldom:<list> specify a NUMA locality domain ID for each task\n"
+"                        where <list> is <ldom1>,<ldom2>,...<ldomN>\n"
+"        mask_ldom:<list>specify a NUMA locality domain ID mask for each task\n"
+"                        where <list> is <mask1>,<mask2>,...<maskN>\n"
+"        sockets         auto-generated masks bind to sockets\n"
+"        cores           auto-generated masks bind to cores\n"
+"        threads         auto-generated masks bind to threads\n"
+"        ldoms           auto-generated masks bind to NUMA locality domains\n"
+"        help            show this help message\n");
+}
+
+/*
+ * verify cpu_bind arguments
+ *
+ * we support different launch policy names
+ * we also allow a verbose setting to be specified
+ *     --cpu_bind=threads
+ *     --cpu_bind=cores
+ *     --cpu_bind=sockets
+ *     --cpu_bind=v
+ *     --cpu_bind=rank,v
+ *     --cpu_bind=rank
+ *     --cpu_bind={MAP_CPU|MASK_CPU}:0,1,2,3,4
+ *
+ *
+ * returns -1 on error, 0 otherwise
+ */
+int slurm_verify_cpu_bind(const char *arg, char **cpu_bind, 
+			  cpu_bind_type_t *flags)
+{
+	char *buf, *p, *tok;
+	int bind_bits =
+		CPU_BIND_NONE|CPU_BIND_RANK|CPU_BIND_MAP|CPU_BIND_MASK;
+	int bind_to_bits =
+		CPU_BIND_TO_SOCKETS|CPU_BIND_TO_CORES|CPU_BIND_TO_THREADS;
+	uint16_t task_plugin_param = slurm_get_task_plugin_param();
+
+	bind_bits    |= CPU_BIND_LDRANK|CPU_BIND_LDMAP|CPU_BIND_LDMASK;
+	bind_to_bits |= CPU_BIND_TO_LDOMS;
+
+	if (arg == NULL) {
+		if ((*flags != 0) || 		/* already set values */
+		    (task_plugin_param == 0))	/* no system defaults */
+			return 0;
+
+		/* set system defaults */
+		xfree(*cpu_bind);
+		if (task_plugin_param & CPU_BIND_NONE)
+			*flags = CPU_BIND_NONE;
+		else if (task_plugin_param & CPU_BIND_TO_SOCKETS)
+			*flags = CPU_BIND_TO_SOCKETS;
+		else if (task_plugin_param & CPU_BIND_TO_CORES)
+			*flags = CPU_BIND_TO_CORES;
+		else if (task_plugin_param & CPU_BIND_TO_THREADS)
+			*flags |= CPU_BIND_TO_THREADS;
+		else if (task_plugin_param & CPU_BIND_TO_LDOMS)
+			*flags |= CPU_BIND_TO_LDOMS;
+		if (task_plugin_param & CPU_BIND_VERBOSE)
+			*flags |= CPU_BIND_VERBOSE;
+	    	return 0;
+	}
+
+	/* Start with system default verbose flag (if set) */
+	if (task_plugin_param & CPU_BIND_VERBOSE)
+		*flags |= CPU_BIND_VERBOSE;
+
+    	buf = xstrdup(arg);
+    	p = buf;
+	/* change all ',' delimiters not followed by a digit to ';'  */
+	/* simplifies parsing tokens while keeping map/mask together */
+	while (p[0] != '\0') {
+	    	if ((p[0] == ',') && (!_isvalue(&(p[1]))))
+			p[0] = ';';
+		p++;
+	}
+
+	p = buf;
+	while ((tok = strsep(&p, ";"))) {
+		if (strcasecmp(tok, "help") == 0) {
+			slurm_print_cpu_bind_help();
+			return 1;
+		} else if ((strcasecmp(tok, "q") == 0) ||
+			   (strcasecmp(tok, "quiet") == 0)) {
+		        *flags &= ~CPU_BIND_VERBOSE;
+		} else if ((strcasecmp(tok, "v") == 0) ||
+			   (strcasecmp(tok, "verbose") == 0)) {
+		        *flags |= CPU_BIND_VERBOSE;
+		} else if ((strcasecmp(tok, "no") == 0) ||
+			   (strcasecmp(tok, "none") == 0)) {
+			_clear_then_set((int *)flags, bind_bits, CPU_BIND_NONE);
+			xfree(*cpu_bind);
+		} else if (strcasecmp(tok, "rank") == 0) {
+			_clear_then_set((int *)flags, bind_bits, CPU_BIND_RANK);
+			xfree(*cpu_bind);
+		} else if ((strncasecmp(tok, "map_cpu", 7) == 0) ||
+		           (strncasecmp(tok, "mapcpu", 6) == 0)) {
+			char *list;
+			list = strsep(&tok, ":=");
+			list = strsep(&tok, ":=");
+			_clear_then_set((int *)flags, bind_bits, CPU_BIND_MAP);
+			xfree(*cpu_bind);
+			if (list && *list) {
+				*cpu_bind = xstrdup(list);
+			} else {
+				error("missing list for \"--cpu_bind="
+				      "map_cpu:<list>\"");
+				xfree(buf);
+				return 1;
+			}
+		} else if ((strncasecmp(tok, "mask_cpu", 8) == 0) ||
+		           (strncasecmp(tok, "maskcpu", 7) == 0)) {
+			char *list;
+			list = strsep(&tok, ":=");
+			list = strsep(&tok, ":=");
+			_clear_then_set((int *)flags, bind_bits, CPU_BIND_MASK);
+			xfree(*cpu_bind);
+			if (list && *list) {
+				*cpu_bind = xstrdup(list);
+			} else {
+				error("missing list for \"--cpu_bind="
+				      "mask_cpu:<list>\"");
+				xfree(buf);
+				return -1;
+			}
+		} else if (strcasecmp(tok, "rank_ldom") == 0) {
+			_clear_then_set((int *)flags, bind_bits,
+					CPU_BIND_LDRANK);
+			xfree(*cpu_bind);
+		} else if ((strncasecmp(tok, "map_ldom", 8) == 0) ||
+		           (strncasecmp(tok, "mapldom", 7) == 0)) {
+			char *list;
+			list = strsep(&tok, ":=");
+			list = strsep(&tok, ":=");
+			_clear_then_set((int *)flags, bind_bits,
+					CPU_BIND_LDMAP);
+			xfree(*cpu_bind);
+			if (list && *list) {
+				*cpu_bind = xstrdup(list);
+			} else {
+				error("missing list for \"--cpu_bind="
+				      "map_ldom:<list>\"");
+				xfree(buf);
+				return 1;
+			}
+		} else if ((strncasecmp(tok, "mask_ldom", 9) == 0) ||
+		           (strncasecmp(tok, "maskldom", 8) == 0)) {
+			char *list;
+			list = strsep(&tok, ":=");
+			list = strsep(&tok, ":=");
+			_clear_then_set((int *)flags, bind_bits,
+					CPU_BIND_LDMASK);
+			xfree(*cpu_bind);
+			if (list && *list) {
+				*cpu_bind = xstrdup(list);
+			} else {
+				error("missing list for \"--cpu_bind="
+				      "mask_ldom:<list>\"");
+				xfree(buf);
+				return -1;
+			}
+		} else if ((strcasecmp(tok, "socket") == 0) ||
+		           (strcasecmp(tok, "sockets") == 0)) {
+			if (task_plugin_param & 
+			    (CPU_BIND_NONE | CPU_BIND_TO_CORES | 
+			     CPU_BIND_TO_THREADS | CPU_BIND_TO_LDOMS)) {
+				error("--cpu_bind=sockets incompatable with "
+				      "TaskPluginParam configuration "
+				      "parameter");
+				return -1;
+			}
+			_clear_then_set((int *)flags, bind_to_bits,
+				       CPU_BIND_TO_SOCKETS);
+		} else if ((strcasecmp(tok, "core") == 0) ||
+		           (strcasecmp(tok, "cores") == 0)) {
+			if (task_plugin_param & 
+			    (CPU_BIND_NONE | CPU_BIND_TO_SOCKETS | 
+			     CPU_BIND_TO_THREADS | CPU_BIND_TO_LDOMS)) {
+				error("--cpu_bind=cores incompatable with "
+				      "TaskPluginParam configuration "
+				      "parameter");
+				return -1;
+			}
+			_clear_then_set((int *)flags, bind_to_bits,
+				       CPU_BIND_TO_CORES);
+		} else if ((strcasecmp(tok, "thread") == 0) ||
+		           (strcasecmp(tok, "threads") == 0)) {
+			if (task_plugin_param & 
+			    (CPU_BIND_NONE | CPU_BIND_TO_SOCKETS | 
+			     CPU_BIND_TO_CORES | CPU_BIND_TO_LDOMS)) {
+				error("--cpu_bind=threads incompatable with "
+				      "TaskPluginParam configuration "
+				      "parameter");
+				return -1;
+			}
+			_clear_then_set((int *)flags, bind_to_bits,
+				       CPU_BIND_TO_THREADS);
+		} else if ((strcasecmp(tok, "ldom") == 0) ||
+		           (strcasecmp(tok, "ldoms") == 0)) {
+			if (task_plugin_param & 
+			    (CPU_BIND_NONE | CPU_BIND_TO_SOCKETS | 
+			     CPU_BIND_TO_CORES | CPU_BIND_TO_THREADS)) {
+				error("--cpu_bind=threads incompatable with "
+				      "TaskPluginParam configuration "
+				      "parameter");
+				return -1;
+			}
+			_clear_then_set((int *)flags, bind_to_bits,
+				       CPU_BIND_TO_LDOMS);
+		} else {
+			error("unrecognized --cpu_bind argument \"%s\"", tok);
+			xfree(buf);
+			return -1;
+		}
+	}
+	xfree(buf);
+
+	return 0;
+}
+
+void slurm_print_mem_bind_help(void)
+{
+			printf(
+"Memory bind options:\n"
+"    --mem_bind=         Bind memory to locality domains (ldom)\n"
+"        q[uiet]         quietly bind before task runs (default)\n"
+"        v[erbose]       verbosely report binding before task runs\n"
+"        no[ne]          don't bind tasks to memory (default)\n"
+"        rank            bind by task rank\n"
+"        local           bind to memory local to processor\n"
+"        map_mem:<list>  specify a memory binding for each task\n"
+"                        where <list> is <cpuid1>,<cpuid2>,...<cpuidN>\n"
+"        mask_mem:<list> specify a memory binding mask for each tasks\n"
+"                        where <list> is <mask1>,<mask2>,...<maskN>\n"
+"        help            show this help message\n");
+}
+
+/*
+ * verify mem_bind arguments
+ *
+ * we support different memory binding names
+ * we also allow a verbose setting to be specified
+ *     --mem_bind=v
+ *     --mem_bind=rank,v
+ *     --mem_bind=rank
+ *     --mem_bind={MAP_MEM|MASK_MEM}:0,1,2,3,4
+ *
+ * returns -1 on error, 0 otherwise
+ */
+int slurm_verify_mem_bind(const char *arg, char **mem_bind, 
+			  mem_bind_type_t *flags)
+{
+	char *buf, *p, *tok;
+	int bind_bits = MEM_BIND_NONE|MEM_BIND_RANK|MEM_BIND_LOCAL|
+		MEM_BIND_MAP|MEM_BIND_MASK;
+
+	if (arg == NULL) {
+	    	return 0;
+	}
+
+    	buf = xstrdup(arg);
+    	p = buf;
+	/* change all ',' delimiters not followed by a digit to ';'  */
+	/* simplifies parsing tokens while keeping map/mask together */
+	while (p[0] != '\0') {
+	    	if ((p[0] == ',') && (!_isvalue(&(p[1]))))
+			p[0] = ';';
+		p++;
+	}
+
+	p = buf;
+	while ((tok = strsep(&p, ";"))) {
+		if (strcasecmp(tok, "help") == 0) {
+			slurm_print_mem_bind_help();
+			return 1;
+			
+		} else if ((strcasecmp(tok, "q") == 0) ||
+			   (strcasecmp(tok, "quiet") == 0)) {
+		        *flags &= ~MEM_BIND_VERBOSE;
+		} else if ((strcasecmp(tok, "v") == 0) ||
+			   (strcasecmp(tok, "verbose") == 0)) {
+		        *flags |= MEM_BIND_VERBOSE;
+		} else if ((strcasecmp(tok, "no") == 0) ||
+			   (strcasecmp(tok, "none") == 0)) {
+			_clear_then_set((int *)flags, bind_bits, MEM_BIND_NONE);
+			xfree(*mem_bind);
+		} else if (strcasecmp(tok, "rank") == 0) {
+			_clear_then_set((int *)flags, bind_bits, MEM_BIND_RANK);
+			xfree(*mem_bind);
+		} else if (strcasecmp(tok, "local") == 0) {
+			_clear_then_set((int *)flags, bind_bits, MEM_BIND_LOCAL);
+			xfree(*mem_bind);
+		} else if ((strncasecmp(tok, "map_mem", 7) == 0) ||
+		           (strncasecmp(tok, "mapmem", 6) == 0)) {
+			char *list;
+			list = strsep(&tok, ":=");
+			list = strsep(&tok, ":=");
+			_clear_then_set((int *)flags, bind_bits, MEM_BIND_MAP);
+			xfree(*mem_bind);
+			if (list && *list) {
+				*mem_bind = xstrdup(list);
+			} else {
+				error("missing list for \"--mem_bind=map_mem:<list>\"");
+				xfree(buf);
+				return 1;
+			}
+		} else if ((strncasecmp(tok, "mask_mem", 8) == 0) ||
+		           (strncasecmp(tok, "maskmem", 7) == 0)) {
+			char *list;
+			list = strsep(&tok, ":=");
+			list = strsep(&tok, ":=");
+			_clear_then_set((int *)flags, bind_bits, MEM_BIND_MASK);
+			xfree(*mem_bind);
+			if (list && *list) {
+				*mem_bind = xstrdup(list);
+			} else {
+				error("missing list for \"--mem_bind=mask_mem:<list>\"");
+				xfree(buf);
+				return 1;
+			}
+		} else {
+			error("unrecognized --mem_bind argument \"%s\"", tok);
+			xfree(buf);
+			return 1;
+		}
+	}
+
+	xfree(buf);
+	return 0;
+}
diff --git a/src/common/slurm_resource_info.h b/src/common/slurm_resource_info.h
index 25733ff8e..867f4b9d5 100644
--- a/src/common/slurm_resource_info.h
+++ b/src/common/slurm_resource_info.h
@@ -4,10 +4,11 @@
  *****************************************************************************
  *  Copyright (C) 2006 Hewlett-Packard Development Company, L.P.
  *  Written by Susanne M. Balle, <susanne.balle@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -66,7 +67,15 @@ int slurm_get_avail_procs(const uint16_t mxsockets,
 			  const select_type_plugin_info_t cr_type,
 			  uint32_t job_id, char *name);
 
+void slurm_print_cpu_bind_help(void);
+void slurm_print_mem_bind_help(void);
+
 void slurm_sprint_cpu_bind_type(char *str, cpu_bind_type_t cpu_bind_type);
 void slurm_sprint_mem_bind_type(char *str, mem_bind_type_t mem_bind_type);
 
+int slurm_verify_cpu_bind(const char *arg, char **cpu_bind, 
+			  cpu_bind_type_t *flags);
+int slurm_verify_mem_bind(const char *arg, char **mem_bind, 
+			  mem_bind_type_t *flags);
+
 #endif /* !_RES_INFO_H */
diff --git a/src/common/slurm_rlimits_info.c b/src/common/slurm_rlimits_info.c
index b79b872ac..43cea165b 100644
--- a/src/common/slurm_rlimits_info.c
+++ b/src/common/slurm_rlimits_info.c
@@ -6,7 +6,8 @@
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/common/slurm_rlimits_info.h b/src/common/slurm_rlimits_info.h
index 1cffac395..2abac295c 100644
--- a/src/common/slurm_rlimits_info.h
+++ b/src/common/slurm_rlimits_info.h
@@ -6,7 +6,8 @@
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/common/slurm_selecttype_info.c b/src/common/slurm_selecttype_info.c
index baa5213f4..937fbd48e 100644
--- a/src/common/slurm_selecttype_info.c
+++ b/src/common/slurm_selecttype_info.c
@@ -4,10 +4,11 @@
  *
  *  Copyright (C) 2006 Hewlett-Packard Development Company, L.P.
  *  Written by Susanne M. Balle, <susanne.balle@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_selecttype_info.h b/src/common/slurm_selecttype_info.h
index f602ca136..2e410e915 100644
--- a/src/common/slurm_selecttype_info.h
+++ b/src/common/slurm_selecttype_info.h
@@ -4,10 +4,11 @@
  *
  *  Copyright (C) 2006 Hewlett-Packard Development Company, L.P.
  *  Written by Susanne M. Balle, <susanne.balle@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurm_step_layout.c b/src/common/slurm_step_layout.c
index 24784589f..db7390cbe 100644
--- a/src/common/slurm_step_layout.c
+++ b/src/common/slurm_step_layout.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *  Written by Chris Holmes, <cholmes@hp.com>, who borrowed heavily
  *  from other parts of SLURM.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -55,16 +56,16 @@
 /* build maps for task layout on nodes */
 static int _init_task_layout(slurm_step_layout_t *step_layout, 
 			     const char *arbitrary_nodes, 
-			     uint32_t *cpus_per_node, uint32_t *cpu_count_reps,
+			     uint16_t *cpus_per_node, uint32_t *cpu_count_reps,
 			     uint16_t cpus_per_task,
 			     uint16_t task_dist, uint16_t plane_size);
 
 static int _task_layout_block(slurm_step_layout_t *step_layout, 
-			      uint32_t *cpus);
+			      uint16_t *cpus);
 static int _task_layout_cyclic(slurm_step_layout_t *step_layout, 
-			       uint32_t *cpus);
+			       uint16_t *cpus);
 static int _task_layout_plane(slurm_step_layout_t *step_layout,
-			       uint32_t *cpus);
+			       uint16_t *cpus);
 #ifndef HAVE_FRONT_END
 static int _task_layout_hostfile(slurm_step_layout_t *step_layout,
 				 const char *arbitrary_nodes);
@@ -89,7 +90,7 @@ static int _task_layout_hostfile(slurm_step_layout_t *step_layout,
  */
 slurm_step_layout_t *slurm_step_layout_create(
 	const char *tlist,
-	uint32_t *cpus_per_node, uint32_t *cpu_count_reps, 
+	uint16_t *cpus_per_node, uint32_t *cpu_count_reps, 
 	uint32_t num_hosts, 
 	uint32_t num_tasks,
 	uint16_t cpus_per_task,
@@ -99,10 +100,11 @@ slurm_step_layout_t *slurm_step_layout_create(
 	char *arbitrary_nodes = NULL;
 	slurm_step_layout_t *step_layout = 
 		xmalloc(sizeof(slurm_step_layout_t));
-		
+
+	step_layout->task_dist = task_dist;
 	if(task_dist == SLURM_DIST_ARBITRARY) {
 		hostlist_t hl = NULL;
-		char buf[8192];
+		char buf[65536];
 		/* set the node list for the task layout later if user
 		   supplied could be different that the job allocation */
 		arbitrary_nodes = xstrdup(tlist);
@@ -156,7 +158,7 @@ slurm_step_layout_t *slurm_step_layout_create(
  */
 slurm_step_layout_t *fake_slurm_step_layout_create(
 	const char *tlist,
-	uint32_t *cpus_per_node, 
+	uint16_t *cpus_per_node, 
 	uint32_t *cpu_count_reps,
 	uint32_t node_cnt, 
 	uint32_t task_cnt) 
@@ -165,14 +167,12 @@ slurm_step_layout_t *fake_slurm_step_layout_create(
 	int cpu_cnt = 0, cpu_inx = 0, i, j;
 /* 	char *name = NULL; */
 	hostlist_t hl = NULL;
-	slurm_step_layout_t *step_layout = 
-		xmalloc(sizeof(slurm_step_layout_t));
+	slurm_step_layout_t *step_layout = NULL;
 
-	if(node_cnt <= 0 || (task_cnt <= 0 && !cpus_per_node) || !tlist) {
+	if((node_cnt <= 0) || (task_cnt <= 0 && !cpus_per_node) || !tlist) {
 		error("there is a problem with your fake_step_layout request\n"
 		      "node_cnt = %u, task_cnt = %u, tlist = %s",
 		      node_cnt, task_cnt, tlist);
-		xfree(step_layout);
 		return NULL;
 	}
 
@@ -261,6 +261,7 @@ extern slurm_step_layout_t *slurm_step_layout_copy(
 	layout->node_list = xstrdup(step_layout->node_list);
 	layout->node_cnt = step_layout->node_cnt;
 	layout->task_cnt = step_layout->task_cnt;
+	layout->task_dist = step_layout->task_dist;
 	
 /* 	layout->node_addr = xmalloc(sizeof(slurm_addr) * layout->node_cnt); */
 /* 	memcpy(layout->node_addr, step_layout->node_addr,  */
@@ -293,6 +294,7 @@ extern void pack_slurm_step_layout(slurm_step_layout_t *step_layout,
 	packstr(step_layout->node_list, buffer);
 	pack32(step_layout->node_cnt, buffer);
 	pack32(step_layout->task_cnt, buffer);
+	pack16(step_layout->task_dist, buffer);
 /* 	slurm_pack_slurm_addr_array(step_layout->node_addr,  */
 /* 				    step_layout->node_cnt, buffer); */
 
@@ -323,6 +325,7 @@ extern int unpack_slurm_step_layout(slurm_step_layout_t **layout, Buf buffer)
 	safe_unpackstr_xmalloc(&step_layout->node_list, &uint32_tmp, buffer);
 	safe_unpack32(&step_layout->node_cnt, buffer);
 	safe_unpack32(&step_layout->task_cnt, buffer);
+	safe_unpack16(&step_layout->task_dist, buffer);
 	
 /* 	if (slurm_unpack_slurm_addr_array(&(step_layout->node_addr),  */
 /* 					  &uint32_tmp, buffer)) */
@@ -393,14 +396,14 @@ char *slurm_step_layout_host_name (slurm_step_layout_t *s, int taskid)
 /* build maps for task layout on nodes */
 static int _init_task_layout(slurm_step_layout_t *step_layout,
 			     const char *arbitrary_nodes,
-			     uint32_t *cpus_per_node, uint32_t *cpu_count_reps,
+			     uint16_t *cpus_per_node, uint32_t *cpu_count_reps,
 			     uint16_t cpus_per_task,
 			     uint16_t task_dist, uint16_t plane_size)
 {
 	int cpu_cnt = 0, cpu_inx = 0, i;
 	hostlist_t hl = NULL;
 /* 	char *name = NULL; */
-	uint32_t cpus[step_layout->node_cnt];
+	uint16_t cpus[step_layout->node_cnt];
 
 	if (step_layout->node_cnt == 0)
 		return SLURM_ERROR;
@@ -419,7 +422,7 @@ static int _init_task_layout(slurm_step_layout_t *step_layout,
 
 	hl = hostlist_create(step_layout->node_list);
 	/* make sure the number of nodes we think we have 
-	   is the correct number */
+	 * is the correct number */
 	i = hostlist_count(hl);
 	if(step_layout->node_cnt > i)
 		step_layout->node_cnt = i;
@@ -442,6 +445,12 @@ static int _init_task_layout(slurm_step_layout_t *step_layout,
 /* 		debug2("host %d = %s", i, name); */
 /* 		free(name); */
 		cpus[i] = (cpus_per_node[cpu_inx] / cpus_per_task);
+		if (cpus[i] == 0) {
+			/* this can be a result of a heterogeneous allocation
+			 * (e.g. 4 cpus on one node and 2 on the second with
+			 *  cpus_per_task=3)  */
+			cpus[i] = 1;
+		}
 		//info("got %d cpus", cpus[i]);
 		if ((++cpu_cnt) >= cpu_count_reps[cpu_inx]) {
 			/* move to next record */
@@ -552,7 +561,7 @@ static int _task_layout_hostfile(slurm_step_layout_t *step_layout,
 /* to effectively deal with heterogeneous nodes, we fake a cyclic
  * distribution to figure out how many tasks go on each node and
  * then make those assignments in a block fashion */
-static int _task_layout_block(slurm_step_layout_t *step_layout, uint32_t *cpus)
+static int _task_layout_block(slurm_step_layout_t *step_layout, uint16_t *cpus)
 {
 	int i, j, taskid = 0;
 	bool over_subscribe = false;
@@ -600,7 +609,7 @@ static int _task_layout_block(slurm_step_layout_t *step_layout, uint32_t *cpus)
  *                     12 13 14 15  etc.
  */
 static int _task_layout_cyclic(slurm_step_layout_t *step_layout, 
-			       uint32_t *cpus)
+			       uint16_t *cpus)
 {
 	int i, j, taskid = 0;
 	bool over_subscribe = false;
@@ -647,7 +656,7 @@ static int _task_layout_cyclic(slurm_step_layout_t *step_layout,
  *                     12 13 14 15  etc.
  */
 static int _task_layout_plane(slurm_step_layout_t *step_layout,
-			       uint32_t *cpus)
+			       uint16_t *cpus)
 {
 	int i, j, k, taskid = 0;
 
@@ -704,3 +713,44 @@ static int _task_layout_plane(slurm_step_layout_t *step_layout,
 	
 	return SLURM_SUCCESS;
 }
+
+extern char *slurm_step_layout_type_name(task_dist_states_t task_dist)
+{
+	switch(task_dist) {
+	case SLURM_DIST_CYCLIC:
+		return "Cyclic";
+		break;
+	case SLURM_DIST_BLOCK:	/* distribute tasks filling node by node */
+		return "Block";
+		break;
+	case SLURM_DIST_ARBITRARY:	/* arbitrary task distribution  */
+		return "Arbitrary";
+		break;
+	case SLURM_DIST_PLANE:	/* distribute tasks by filling up
+				   planes of lllp first and then by
+				   going across the nodes See
+				   documentation for more
+				   information */
+		return "Plane";
+		break;
+	case SLURM_DIST_CYCLIC_CYCLIC:/* distribute tasks 1 per node:
+				   round robin: same for lowest
+				   level of logical processor (lllp) */
+		return "CCyclic";
+		break;
+	case SLURM_DIST_CYCLIC_BLOCK: /* cyclic for node and block for lllp  */
+		return "CBlock";
+		break;
+	case SLURM_DIST_BLOCK_CYCLIC: /* block for node and cyclic for lllp  */
+		return "BCyclic";
+		break;
+	case SLURM_DIST_BLOCK_BLOCK:	/* block for node and block for lllp  */
+		return "BBlock";
+		break;
+	case SLURM_NO_LLLP_DIST:	/* No distribution specified for lllp */
+	case SLURM_DIST_UNKNOWN:
+	default:
+		return "Unknown";
+
+	}
+}
diff --git a/src/common/slurm_step_layout.h b/src/common/slurm_step_layout.h
index b8de30b28..76d942eda 100644
--- a/src/common/slurm_step_layout.h
+++ b/src/common/slurm_step_layout.h
@@ -6,10 +6,11 @@
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *  Written by Chris Holmes, <cholmes@hp.com>, who borrowed heavily
  *  from other parts of SLURM.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -62,7 +63,7 @@
  * NOTE: allocates memory that should be xfreed by caller
  */
 extern slurm_step_layout_t *slurm_step_layout_create(const char *tlist,
-						     uint32_t *cpus_per_node, 
+						     uint16_t *cpus_per_node, 
 						     uint32_t *cpu_count_reps,
 						     uint32_t node_cnt, 
 						     uint32_t task_cnt,
@@ -86,7 +87,7 @@ extern slurm_step_layout_t *slurm_step_layout_create(const char *tlist,
  */
 extern slurm_step_layout_t *fake_slurm_step_layout_create(
 	const char *tlist,
-	uint32_t *cpus_per_node, 
+	uint16_t *cpus_per_node, 
 	uint32_t *cpu_count_reps,
 	uint32_t node_cnt, 
 	uint32_t task_cnt);
@@ -107,4 +108,5 @@ extern int slurm_step_layout_destroy(slurm_step_layout_t *step_layout);
 extern int slurm_step_layout_host_id (slurm_step_layout_t *s, int taskid);
 extern char *slurm_step_layout_host_name (slurm_step_layout_t *s, int hostid);
 
+extern char *slurm_step_layout_type_name(task_dist_states_t task_dist);
 #endif /* !_SLURM_STEP_LAYOUT_H */
diff --git a/src/common/slurm_strcasestr.c b/src/common/slurm_strcasestr.c
new file mode 100644
index 000000000..f4e34b740
--- /dev/null
+++ b/src/common/slurm_strcasestr.c
@@ -0,0 +1,66 @@
+/*****************************************************************************\
+ *  slurm_strcasestr.h - case insensitve version of strstr()
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by David Bremer <dbremer@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and
+ *  distribute linked combinations including the two. You must obey the GNU
+ *  General Public License in all respects for all of the code used other than
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this
+ *  exception to your version of the file(s), but you are not obligated to do
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in
+ *  the program, then also delete it here.
+ *
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include "slurm_strcasestr.h"
+#include <string.h>
+#include <ctype.h>
+
+/* case insensitve version of strstr() */
+char *
+slurm_strcasestr(char *haystack, char *needle)
+{
+	int hay_inx,  hay_size  = strlen(haystack);
+	int need_inx, need_size = strlen(needle);
+	char *hay_ptr = haystack;
+
+	for (hay_inx=0; hay_inx<hay_size; hay_inx++) {
+		for (need_inx=0; need_inx<need_size; need_inx++) {
+			if (tolower((int) hay_ptr[need_inx]) != 
+			    tolower((int) needle [need_inx]))
+				break;		/* mis-match */
+		}
+
+		if (need_inx == need_size)	/* it matched */
+			return hay_ptr;
+		else				/* keep looking */
+			hay_ptr++;
+	}
+
+	return NULL;	/* no match anywhere in string */
+}
+
diff --git a/src/common/slurm_strcasestr.h b/src/common/slurm_strcasestr.h
new file mode 100644
index 000000000..79e730909
--- /dev/null
+++ b/src/common/slurm_strcasestr.h
@@ -0,0 +1,46 @@
+/*****************************************************************************\
+ *  slurm_strcasestr.h - case insensitve version of strstr()
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by David Bremer <dbremer@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and
+ *  distribute linked combinations including the two. You must obey the GNU
+ *  General Public License in all respects for all of the code used other than
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this
+ *  exception to your version of the file(s), but you are not obligated to do
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in
+ *  the program, then also delete it here.
+ *
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _SLURM_STRCASESTR_H
+#define _SLURM_STRCASESTR_H
+
+/* case insensitve version of strstr().  This exists for our AIX
+   builds which are missing the gnu strcasestr function. */
+char *slurm_strcasestr(char *haystack, char *needle);
+
+#endif
diff --git a/src/common/slurm_xlator.h b/src/common/slurm_xlator.h
index 4513785d1..3a2853884 100644
--- a/src/common/slurm_xlator.h
+++ b/src/common/slurm_xlator.h
@@ -30,10 +30,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/slurmdbd_defs.c b/src/common/slurmdbd_defs.c
index 33e0e5819..b7c38cbe8 100644
--- a/src/common/slurmdbd_defs.c
+++ b/src/common/slurmdbd_defs.c
@@ -1,13 +1,14 @@
 /****************************************************************************\
  *  slurmdbd_defs.c - functions for use with Slurm DBD RPCs
  *****************************************************************************
- *  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>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -75,7 +76,7 @@
 #define DBD_MAGIC		0xDEAD3219
 #define MAX_AGENT_QUEUE		10000
 #define MAX_DBD_MSG_LEN		16384
-#define SLURMDBD_TIMEOUT	300	/* Seconds SlurmDBD for response */
+#define SLURMDBD_TIMEOUT	900	/* Seconds SlurmDBD for response */
 
 uint16_t running_cache = 0;
 pthread_mutex_t assoc_cache_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -265,8 +266,8 @@ extern int slurm_send_recv_slurmdbd_msg(uint16_t rpc_version,
 	rc = unpack_slurmdbd_msg(rpc_version, resp, buffer);
 
 	/* check for the rc of the start job message */
-	if (rc == SLURM_SUCCESS && resp->msg_type == DBD_JOB_START_RC) 
-		rc = ((dbd_job_start_rc_msg_t *)resp->data)->return_code;
+	if (rc == SLURM_SUCCESS && resp->msg_type == DBD_ID_RC) 
+		rc = ((dbd_id_rc_msg_t *)resp->data)->return_code;
 	
 	free_buf(buffer);
 	slurm_mutex_unlock(&slurmdbd_lock);
@@ -325,7 +326,7 @@ static void _open_slurmdbd_fd(void)
 	slurm_addr dbd_addr;
 	uint16_t slurmdbd_port;
 	char *   slurmdbd_host;
-
+	bool try_backup = true;
 	if (slurmdbd_fd >= 0) {
 		debug("Attempt to re-open slurmdbd socket");
 		/* clear errno (checked after this for errors) */
@@ -335,13 +336,16 @@ static void _open_slurmdbd_fd(void)
 
 	slurmdbd_host = slurm_get_accounting_storage_host();
 	slurmdbd_port = slurm_get_accounting_storage_port();
-	if (slurmdbd_host == NULL)
+	if (slurmdbd_host == NULL) {
 		slurmdbd_host = xstrdup(DEFAULT_STORAGE_HOST);
-	
+		slurm_set_accounting_storage_host(slurmdbd_host);
+	}
+
 	if (slurmdbd_port == 0) {
 		slurmdbd_port = SLURMDBD_PORT;
 		slurm_set_accounting_storage_port(slurmdbd_port);
 	}
+again:
 	slurm_set_addr(&dbd_addr, slurmdbd_port, slurmdbd_host);
 	if (dbd_addr.sin_port == 0)
 		error("Unable to locate SlurmDBD host %s:%u", 
@@ -349,9 +353,17 @@ static void _open_slurmdbd_fd(void)
 	else {
 		slurmdbd_fd = slurm_open_msg_conn(&dbd_addr);
 
-		if (slurmdbd_fd < 0)
-			error("slurmdbd: slurm_open_msg_conn: %m");
-		else {
+		if (slurmdbd_fd < 0) {
+			debug("slurmdbd: slurm_open_msg_conn to %s:%u: %m",
+			      slurmdbd_host, slurmdbd_port);
+			if(try_backup) {
+				try_backup = false;
+				xfree(slurmdbd_host);
+				if((slurmdbd_host = 
+				    slurm_get_accounting_storage_backup_host()))
+					goto again;			
+			}
+		} else {
 			fd_set_nonblocking(slurmdbd_fd);
 			if (_send_init_msg() != SLURM_SUCCESS)  {
 				error("slurmdbd: Sending DdbInit msg: %m");
@@ -385,11 +397,12 @@ extern Buf pack_slurmdbd_msg(uint16_t rpc_version, slurmdbd_msg_t *req)
 	case DBD_GOT_LIST:
 	case DBD_ADD_QOS:
 	case DBD_GOT_QOS:
+	case DBD_GOT_RESVS:
 	case DBD_ADD_WCKEYS:
 	case DBD_GOT_WCKEYS:
 	case DBD_GOT_TXN:
 	case DBD_GOT_USERS:
-	case DBD_UPDATE_SHARES_USED:
+	case DBD_GOT_CONFIG:
 		slurmdbd_pack_list_msg(
 			rpc_version, req->msg_type, 
 			(dbd_list_msg_t *)req->data, buffer);
@@ -414,6 +427,7 @@ extern Buf pack_slurmdbd_msg(uint16_t rpc_version, slurmdbd_msg_t *req)
 	case DBD_GET_CLUSTERS:
 	case DBD_GET_JOBS_COND:
 	case DBD_GET_QOS:
+	case DBD_GET_RESVS:
 	case DBD_GET_WCKEYS:
 	case DBD_GET_TXN:
 	case DBD_GET_USERS:
@@ -462,10 +476,10 @@ extern Buf pack_slurmdbd_msg(uint16_t rpc_version, slurmdbd_msg_t *req)
 					    (dbd_job_start_msg_t *)req->data, 
 					    buffer);
 		break;
-	case DBD_JOB_START_RC:
-		slurmdbd_pack_job_start_rc_msg(
+	case DBD_ID_RC:
+		slurmdbd_pack_id_rc_msg(
 			rpc_version,
-			(dbd_job_start_rc_msg_t *)req->data, buffer);
+			(dbd_id_rc_msg_t *)req->data, buffer);
 		break;		
 	case DBD_JOB_SUSPEND:
 		slurmdbd_pack_job_suspend_msg(
@@ -509,6 +523,16 @@ extern Buf pack_slurmdbd_msg(uint16_t rpc_version, slurmdbd_msg_t *req)
 					     (dbd_roll_usage_msg_t *)
 					     req->data, buffer);
 		break;
+	case DBD_ADD_RESV:
+	case DBD_REMOVE_RESV:
+	case DBD_MODIFY_RESV:
+		slurmdbd_pack_rec_msg(
+			rpc_version, req->msg_type,
+			(dbd_rec_msg_t *)req->data, buffer);
+		break;
+	case DBD_GET_CONFIG:
+		/* No message to pack */
+		break;
 	default:
 		error("slurmdbd: Invalid message type pack %u(%s:%u)",
 		      req->msg_type,
@@ -539,11 +563,12 @@ extern int unpack_slurmdbd_msg(uint16_t rpc_version,
 	case DBD_GOT_LIST:
 	case DBD_ADD_QOS:
 	case DBD_GOT_QOS:
+	case DBD_GOT_RESVS:
 	case DBD_ADD_WCKEYS:
 	case DBD_GOT_WCKEYS:
 	case DBD_GOT_TXN:
 	case DBD_GOT_USERS:
-	case DBD_UPDATE_SHARES_USED:
+	case DBD_GOT_CONFIG:
 		rc = slurmdbd_unpack_list_msg(
 			rpc_version, resp->msg_type,
 			(dbd_list_msg_t **)&resp->data, buffer);
@@ -569,6 +594,7 @@ extern int unpack_slurmdbd_msg(uint16_t rpc_version,
 	case DBD_GET_JOBS_COND:
 	case DBD_GET_USERS:
 	case DBD_GET_QOS:
+	case DBD_GET_RESVS:
 	case DBD_GET_WCKEYS:
 	case DBD_GET_TXN:
 	case DBD_REMOVE_ACCOUNTS:
@@ -619,10 +645,10 @@ extern int unpack_slurmdbd_msg(uint16_t rpc_version,
 			rpc_version,
 			(dbd_job_start_msg_t **)&resp->data, buffer);
 		break;
-	case DBD_JOB_START_RC:
-		rc = slurmdbd_unpack_job_start_rc_msg(
+	case DBD_ID_RC:
+		rc = slurmdbd_unpack_id_rc_msg(
 			rpc_version,
-			(dbd_job_start_rc_msg_t **)&resp->data, buffer);
+			(dbd_id_rc_msg_t **)&resp->data, buffer);
 		break;		
 	case DBD_JOB_SUSPEND:
 		rc = slurmdbd_unpack_job_suspend_msg(
@@ -668,6 +694,16 @@ extern int unpack_slurmdbd_msg(uint16_t rpc_version,
 			rpc_version,
 			(dbd_roll_usage_msg_t **)&resp->data, buffer);
 		break;
+	case DBD_ADD_RESV:
+	case DBD_REMOVE_RESV:
+	case DBD_MODIFY_RESV:
+		rc = slurmdbd_unpack_rec_msg(
+			rpc_version, resp->msg_type,
+			(dbd_rec_msg_t **)&resp->data, buffer);
+		break;
+	case DBD_GET_CONFIG:
+		/* No message to unpack */
+		break;
 	default:
 		error("slurmdbd: Invalid message type unpack %u(%s)",
 		      resp->msg_type,
@@ -737,8 +773,8 @@ extern slurmdbd_msg_type_t str_2_slurmdbd_msg_type(char *msg_type)
 		return DBD_JOB_COMPLETE;
 	} else if(!strcasecmp(msg_type, "Job Start")) {
 		return DBD_JOB_START;
-	} else if(!strcasecmp(msg_type, "Job Start RC")) {
-		return DBD_JOB_START_RC;
+	} else if(!strcasecmp(msg_type, "ID RC")) {
+		return DBD_ID_RC;
 	} else if(!strcasecmp(msg_type, "Job Suspend")) {
 		return DBD_JOB_SUSPEND;
 	} else if(!strcasecmp(msg_type, "Modify Accounts")) {
@@ -775,8 +811,6 @@ extern slurmdbd_msg_type_t str_2_slurmdbd_msg_type(char *msg_type)
 		return DBD_STEP_COMPLETE;
 	} else if(!strcasecmp(msg_type, "Step Start")) {
 		return DBD_STEP_START;
-	} else if(!strcasecmp(msg_type, "Update Shares Used")) {
-		return DBD_UPDATE_SHARES_USED;
 	} else if(!strcasecmp(msg_type, "Get Jobs Conditional")) {
 		return DBD_GET_JOBS_COND;
 	} else if(!strcasecmp(msg_type, "Get Transations")) {
@@ -803,6 +837,20 @@ extern slurmdbd_msg_type_t str_2_slurmdbd_msg_type(char *msg_type)
 		return DBD_GET_WCKEY_USAGE;
 	} else if(!strcasecmp(msg_type, "Got WCKey Usage")) {
 		return DBD_GOT_WCKEY_USAGE;
+	} else if(!strcasecmp(msg_type, "Add Reservation")) {
+		return DBD_ADD_RESV;
+	} else if(!strcasecmp(msg_type, "Remove Reservation")) {
+		return DBD_REMOVE_RESV;
+	} else if(!strcasecmp(msg_type, "Modify Reservation")) {
+		return DBD_MODIFY_RESV;
+	} else if(!strcasecmp(msg_type, "Get Reservations")) {
+		return DBD_GET_RESVS;
+	} else if(!strcasecmp(msg_type, "Got Reservations")) {
+		return DBD_GOT_RESVS;
+	} else if(!strcasecmp(msg_type, "Get Config")) {
+		return DBD_GET_CONFIG;
+	} else if(!strcasecmp(msg_type, "Got Config")) {
+		return DBD_GOT_CONFIG;
 	} else {
 		return NO_VAL;		
 	}
@@ -969,11 +1017,11 @@ extern char *slurmdbd_msg_type_2_str(slurmdbd_msg_type_t msg_type, int get_enum)
 		} else
 			return "Job Start";
 		break;
-	case DBD_JOB_START_RC:
+	case DBD_ID_RC:
 		if(get_enum) {
-			return "DBD_JOB_START_RC";
+			return "DBD_ID_RC";
 		} else
-			return "Job Start RC";
+			return "ID RC";
 		break;
 	case DBD_JOB_SUSPEND:
 		if(get_enum) {
@@ -1083,12 +1131,6 @@ extern char *slurmdbd_msg_type_2_str(slurmdbd_msg_type_t msg_type, int get_enum)
 		} else
 			return "Step Start";
 		break;
-	case DBD_UPDATE_SHARES_USED:
-		if(get_enum) {
-			return "DBD_UPDATE_SHARES_USED";
-		} else
-			return "Update Shares Used";
-		break;
 	case DBD_GET_JOBS_COND:
 		if(get_enum) {
 			return "DBD_GET_JOBS_COND";
@@ -1167,6 +1209,48 @@ extern char *slurmdbd_msg_type_2_str(slurmdbd_msg_type_t msg_type, int get_enum)
 		} else
 			return "Got WCKey Usage";
 		break;
+	case DBD_ADD_RESV:
+		if(get_enum) {
+			return "DBD_ADD_RESV";
+		} else
+			return "Add Reservation";
+		break;
+	case DBD_REMOVE_RESV:
+		if(get_enum) {
+			return "DBD_REMOVE_RESV";
+		} else
+			return "Remove Reservation";
+		break;
+	case DBD_MODIFY_RESV:
+		if(get_enum) {
+			return "DBD_MODIFY_RESV";
+		} else
+			return "Modify Reservation";
+		break;
+	case DBD_GET_RESVS:
+		if(get_enum) {
+			return "DBD_GET_RESVS";
+		} else
+			return "Get Reservations";
+		break;
+	case DBD_GOT_RESVS:
+		if(get_enum) {
+			return "DBD_GOT_RESVS";
+		} else
+			return "Got Reservations";
+		break;
+	case DBD_GET_CONFIG:
+		if(get_enum) {
+			return "DBD_GET_CONFIG";
+		} else
+			return "Get Config";
+		break;
+	case DBD_GOT_CONFIG:
+		if(get_enum) {
+			return "DBD_GOT_CONFIG";
+		} else
+			return "Got Config";
+		break;
 	default:
 		return "Unknown";
 		break;
@@ -1293,7 +1377,7 @@ static int _get_return_code(uint16_t rpc_version, int read_timeout)
 	Buf buffer;
 	uint16_t msg_type;
 	dbd_rc_msg_t *msg;
-	dbd_job_start_rc_msg_t *js_msg;
+	dbd_id_rc_msg_t *id_msg;
 	int rc = SLURM_ERROR;
 
 	buffer = _recv_msg(read_timeout);
@@ -1302,14 +1386,13 @@ static int _get_return_code(uint16_t rpc_version, int read_timeout)
 
 	safe_unpack16(&msg_type, buffer);
 	switch(msg_type) {
-	case DBD_JOB_START_RC:
-		if (slurmdbd_unpack_job_start_rc_msg(rpc_version, 
-						     &js_msg, buffer)
+	case DBD_ID_RC:
+		if (slurmdbd_unpack_id_rc_msg(rpc_version, &id_msg, buffer)
 		    == SLURM_SUCCESS) {
-			rc = js_msg->return_code;
-			slurmdbd_free_job_start_rc_msg(rpc_version, js_msg);
+			rc = id_msg->return_code;
+			slurmdbd_free_id_rc_msg(rpc_version, id_msg);
 			if (rc != SLURM_SUCCESS)
-				error("slurmdbd: DBD_JOB_START_RC is %d", rc);
+				error("slurmdbd: DBD_ID_RC is %d", rc);
 		} else
 			error("slurmdbd: unpack message error");
 		break;
@@ -1462,7 +1545,7 @@ static bool _fd_readable(slurm_fd fd, int read_timeout)
 	return false;
 }
 
-/* Wait until a file is writable, 
+/* Wait until a file is writeable, 
  * RET 1 if file can be written now,
  *     0 if can not be written to within 5 seconds
  *     -1 if file has been closed POLLHUP
@@ -1644,7 +1727,7 @@ static void *_agent(void *x)
 			if(slurmdbd_fd >= 0 && running_cache)
 				pthread_cond_signal(&assoc_cache_cond);
 			slurm_mutex_unlock(&assoc_cache_mutex);
-
+			
 			continue;
 		}
 
@@ -1921,6 +2004,30 @@ void inline slurmdbd_free_cluster_procs_msg(uint16_t rpc_version,
 {
 	if (msg) {
 		xfree(msg->cluster_name);
+		xfree(msg->cluster_nodes);
+		xfree(msg);
+	}
+}
+
+void inline slurmdbd_free_rec_msg(uint16_t rpc_version, 
+				   slurmdbd_msg_type_t type,
+				   dbd_rec_msg_t *msg)
+{
+	void (*my_destroy) (void *object);
+
+	if (msg) {
+		switch(type) {
+		case DBD_ADD_RESV:
+		case DBD_REMOVE_RESV:
+		case DBD_MODIFY_RESV:
+			my_destroy = destroy_acct_reservation_rec;
+			break;
+		default:
+			fatal("Unknown rec type");
+			return;
+		}
+		if(msg->rec)
+			(*(my_destroy))(msg->rec);
 		xfree(msg);
 	}
 }
@@ -1966,6 +2073,9 @@ void inline slurmdbd_free_cond_msg(uint16_t rpc_version,
 		case DBD_ARCHIVE_DUMP:
 			my_destroy = destroy_acct_archive_cond;
 			break;
+		case DBD_GET_RESVS:
+			my_destroy = destroy_acct_reservation_cond;
+			break;
 		default:
 			fatal("Unknown cond type");
 			return;
@@ -2020,13 +2130,15 @@ void inline slurmdbd_free_job_start_msg(uint16_t rpc_version,
 		xfree(msg->cluster);
 		xfree(msg->name);
 		xfree(msg->nodes);
+		xfree(msg->node_inx);
 		xfree(msg->partition);
+		xfree(msg->wckey);
 		xfree(msg);
 	}
 }
 
-void inline slurmdbd_free_job_start_rc_msg(uint16_t rpc_version, 
-					   dbd_job_start_rc_msg_t *msg)
+void inline slurmdbd_free_id_rc_msg(uint16_t rpc_version, 
+					   dbd_id_rc_msg_t *msg)
 {
 	xfree(msg);
 }
@@ -2135,6 +2247,7 @@ void inline slurmdbd_free_step_start_msg(uint16_t rpc_version,
 	if (msg) {
 		xfree(msg->name);
 		xfree(msg->nodes);
+		xfree(msg->node_inx);
 		xfree(msg);
 	}
 }
@@ -2231,9 +2344,16 @@ void inline
 slurmdbd_pack_cluster_procs_msg(uint16_t rpc_version, 
 				dbd_cluster_procs_msg_t *msg, Buf buffer)
 {
-	packstr(msg->cluster_name, buffer);
-	pack32(msg->proc_count,    buffer);
-	pack_time(msg->event_time, buffer);
+	if(rpc_version >= 5) {
+		packstr(msg->cluster_name, buffer);
+		packstr(msg->cluster_nodes, buffer);
+		pack32(msg->proc_count,    buffer);
+		pack_time(msg->event_time, buffer);
+	} else {
+		packstr(msg->cluster_name, buffer);
+		pack32(msg->proc_count,    buffer);
+		pack_time(msg->event_time, buffer);
+	}
 }
 
 int inline
@@ -2245,9 +2365,20 @@ slurmdbd_unpack_cluster_procs_msg(uint16_t rpc_version,
 
 	msg_ptr = xmalloc(sizeof(dbd_cluster_procs_msg_t));
 	*msg = msg_ptr;
-	safe_unpackstr_xmalloc(&msg_ptr->cluster_name, &uint32_tmp, buffer);
-	safe_unpack32(&msg_ptr->proc_count, buffer);
-	safe_unpack_time(&msg_ptr->event_time, buffer);
+
+	if(rpc_version >= 5) {
+		safe_unpackstr_xmalloc(&msg_ptr->cluster_name,
+				       &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->cluster_nodes,
+				       &uint32_tmp, buffer);
+		safe_unpack32(&msg_ptr->proc_count, buffer);
+		safe_unpack_time(&msg_ptr->event_time, buffer);
+	} else {
+		safe_unpackstr_xmalloc(&msg_ptr->cluster_name,
+				       &uint32_tmp, buffer);
+		safe_unpack32(&msg_ptr->proc_count, buffer);
+		safe_unpack_time(&msg_ptr->event_time, buffer);
+	}
 	return SLURM_SUCCESS;
 
 unpack_error:
@@ -2256,6 +2387,58 @@ unpack_error:
 	return SLURM_ERROR;
 }
 
+void inline slurmdbd_pack_rec_msg(uint16_t rpc_version, 
+				  slurmdbd_msg_type_t type,
+				  dbd_rec_msg_t *msg, Buf buffer)
+{
+	void (*my_function) (void *object, uint16_t rpc_version, Buf buffer);
+
+	switch(type) {
+	case DBD_ADD_RESV:
+	case DBD_REMOVE_RESV:
+	case DBD_MODIFY_RESV:
+		my_function = pack_acct_reservation_rec;
+		break;
+	default:
+		fatal("Unknown pack type");
+		return;
+	}
+
+	(*(my_function))(msg->rec, rpc_version, buffer);
+}
+
+int inline slurmdbd_unpack_rec_msg(uint16_t rpc_version, 
+				   slurmdbd_msg_type_t type,
+				   dbd_rec_msg_t **msg, Buf buffer)
+{
+	dbd_rec_msg_t *msg_ptr = NULL;
+	int (*my_function) (void **object, uint16_t rpc_version, Buf buffer);
+
+	switch(type) {
+	case DBD_ADD_RESV:
+	case DBD_REMOVE_RESV:
+	case DBD_MODIFY_RESV:
+		my_function = unpack_acct_reservation_rec;
+		break;
+	default:
+		fatal("Unknown unpack type");
+		return SLURM_ERROR;
+	}
+
+	msg_ptr = xmalloc(sizeof(dbd_rec_msg_t));
+	*msg = msg_ptr;
+
+	if((*(my_function))(&msg_ptr->rec, rpc_version, buffer) == SLURM_ERROR)
+		goto unpack_error;
+	
+	return SLURM_SUCCESS;
+
+unpack_error:
+	slurmdbd_free_rec_msg(rpc_version, type, msg_ptr);
+	*msg = NULL;
+	return SLURM_ERROR;
+}
+
 void inline slurmdbd_pack_cond_msg(uint16_t rpc_version, 
 				   slurmdbd_msg_type_t type,
 				   dbd_cond_msg_t *msg, Buf buffer)
@@ -2296,6 +2479,9 @@ void inline slurmdbd_pack_cond_msg(uint16_t rpc_version,
 	case DBD_ARCHIVE_DUMP:
 		my_function = pack_acct_archive_cond;
 		break;
+	case DBD_GET_RESVS:
+		my_function = pack_acct_reservation_cond;
+		break;
 	default:
 		fatal("Unknown pack type");
 		return;
@@ -2345,6 +2531,9 @@ int inline slurmdbd_unpack_cond_msg(uint16_t rpc_version,
 	case DBD_ARCHIVE_DUMP:
 		my_function = unpack_acct_archive_cond;
 		break;
+	case DBD_GET_RESVS:
+		my_function = unpack_acct_reservation_cond;
+		break;
 	default:
 		fatal("Unknown unpack type");
 		return SLURM_ERROR;
@@ -2588,7 +2777,31 @@ void inline
 slurmdbd_pack_job_start_msg(uint16_t rpc_version, 
 			    dbd_job_start_msg_t *msg, Buf buffer)
 {
-	if(rpc_version >= 3) {
+	if(rpc_version >= 5) {
+		packstr(msg->account, buffer);
+		pack32(msg->alloc_cpus, buffer);
+		pack32(msg->alloc_nodes, buffer);
+		pack32(msg->assoc_id, buffer);
+		packstr(msg->block_id, buffer);
+		packstr(msg->cluster, buffer);
+		pack32(msg->db_index, buffer);
+		pack_time(msg->eligible_time, buffer);
+		pack32(msg->gid, buffer);
+		pack32(msg->job_id, buffer);
+		pack16(msg->job_state, buffer);
+		packstr(msg->name, buffer);
+		packstr(msg->nodes, buffer);
+		packstr(msg->node_inx, buffer);
+		packstr(msg->partition, buffer);
+		pack32(msg->priority, buffer);
+		pack32(msg->req_cpus, buffer);
+		pack32(msg->resv_id, buffer);
+		pack_time(msg->start_time, buffer);
+		pack_time(msg->submit_time, buffer);
+		pack32(msg->timelimit, buffer);		
+		pack32(msg->uid, buffer);		
+		packstr(msg->wckey, buffer);
+	} else if(rpc_version >= 3) {
 		packstr(msg->account, buffer);
 		pack32(msg->alloc_cpus, buffer);
 		pack32(msg->assoc_id, buffer);
@@ -2636,9 +2849,10 @@ slurmdbd_unpack_job_start_msg(uint16_t rpc_version,
 	dbd_job_start_msg_t *msg_ptr = xmalloc(sizeof(dbd_job_start_msg_t));
 	*msg = msg_ptr;
 
-	if(rpc_version >= 3) {
+	if(rpc_version >= 5) {
 		safe_unpackstr_xmalloc(&msg_ptr->account, &uint32_tmp, buffer);
 		safe_unpack32(&msg_ptr->alloc_cpus, buffer);
+		safe_unpack32(&msg_ptr->alloc_nodes, buffer);
 		safe_unpack32(&msg_ptr->assoc_id, buffer);
 		safe_unpackstr_xmalloc(&msg_ptr->block_id, &uint32_tmp, buffer);
 		safe_unpackstr_xmalloc(&msg_ptr->cluster, &uint32_tmp, buffer);
@@ -2649,13 +2863,63 @@ slurmdbd_unpack_job_start_msg(uint16_t rpc_version,
 		safe_unpack16(&msg_ptr->job_state, buffer);
 		safe_unpackstr_xmalloc(&msg_ptr->name, &uint32_tmp, buffer);
 		safe_unpackstr_xmalloc(&msg_ptr->nodes, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->node_inx, &uint32_tmp, buffer);
 		safe_unpackstr_xmalloc(&msg_ptr->partition,
 				       &uint32_tmp, buffer);
 		safe_unpack32(&msg_ptr->priority, buffer);
 		safe_unpack32(&msg_ptr->req_cpus, buffer);
+		safe_unpack32(&msg_ptr->resv_id, buffer);
 		safe_unpack_time(&msg_ptr->start_time, buffer);
 		safe_unpack_time(&msg_ptr->submit_time, buffer);
+		safe_unpack32(&msg_ptr->timelimit, buffer);	
 		safe_unpack32(&msg_ptr->uid, buffer);	
+		safe_unpackstr_xmalloc(&msg_ptr->wckey, &uint32_tmp, buffer);
+	} else if(rpc_version >= 3) {
+		char *temp = NULL, *jname = NULL;
+		safe_unpackstr_xmalloc(&msg_ptr->account, &uint32_tmp, buffer);
+		safe_unpack32(&msg_ptr->alloc_cpus, buffer);
+		safe_unpack32(&msg_ptr->assoc_id, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->block_id, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->cluster, &uint32_tmp, buffer);
+		safe_unpack32(&msg_ptr->db_index, buffer);
+		safe_unpack_time(&msg_ptr->eligible_time, buffer);
+		safe_unpack32(&msg_ptr->gid, buffer);
+		safe_unpack32(&msg_ptr->job_id, buffer);
+		safe_unpack16(&msg_ptr->job_state, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->name, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->nodes, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->partition,
+				       &uint32_tmp, buffer);
+		safe_unpack32(&msg_ptr->priority, buffer);
+		safe_unpack32(&msg_ptr->req_cpus, buffer);
+		safe_unpack_time(&msg_ptr->start_time, buffer);
+		safe_unpack_time(&msg_ptr->submit_time, buffer);
+		safe_unpack32(&msg_ptr->uid, buffer);	
+
+		/* first set the jname to the msg_ptr->name */
+		jname = xstrdup(msg_ptr->name);
+		/* then grep for " since that is the delimiter for
+		   the wckey */
+		if((temp = strchr(jname, '\"'))) {
+			if(strrchr(jname, '\"') != temp) {
+				error("job %u has quotes in it's name '%s', "
+				      "no way to get correct wckey, "
+				      "setting name to 'bad_name'", 
+				      msg_ptr->job_id, jname);
+				xfree(jname);
+				jname = xstrdup("bad_name");
+			} else {			
+				/* if we have a wckey set the " to NULL to
+				 * end the jname */
+				temp[0] = '\0';
+				/* increment and copy the remainder */
+				temp++;
+				msg_ptr->wckey = xstrdup(temp);
+			}
+		}
+		xfree(msg_ptr->name);
+		msg_ptr->name = xstrdup(jname);
+		xfree(jname);
 	} else {
 		safe_unpackstr_xmalloc(&msg_ptr->account, &uint32_tmp, buffer);
 		safe_unpack32(&msg_ptr->alloc_cpus, buffer);
@@ -2686,26 +2950,25 @@ unpack_error:
 }
 
 void inline 
-slurmdbd_pack_job_start_rc_msg(uint16_t rpc_version, 
-			       dbd_job_start_rc_msg_t *msg, Buf buffer)
+slurmdbd_pack_id_rc_msg(uint16_t rpc_version, 
+			dbd_id_rc_msg_t *msg, Buf buffer)
 {
-	pack32(msg->db_index, buffer);
+	pack32(msg->id, buffer);
 	pack32(msg->return_code, buffer);
 }
 
 int inline 
-slurmdbd_unpack_job_start_rc_msg(uint16_t rpc_version, 
-				 dbd_job_start_rc_msg_t **msg, Buf buffer)
+slurmdbd_unpack_id_rc_msg(uint16_t rpc_version, 
+			  dbd_id_rc_msg_t **msg, Buf buffer)
 {
-	dbd_job_start_rc_msg_t *msg_ptr = 
-		xmalloc(sizeof(dbd_job_start_rc_msg_t));
+	dbd_id_rc_msg_t *msg_ptr = xmalloc(sizeof(dbd_id_rc_msg_t));
 	*msg = msg_ptr;
-	safe_unpack32(&msg_ptr->db_index, buffer);
+	safe_unpack32(&msg_ptr->id, buffer);
 	safe_unpack32(&msg_ptr->return_code, buffer);
 	return SLURM_SUCCESS;
 
 unpack_error:
-	slurmdbd_free_job_start_rc_msg(rpc_version, msg_ptr);
+	slurmdbd_free_id_rc_msg(rpc_version, msg_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
@@ -2764,6 +3027,9 @@ void inline slurmdbd_pack_list_msg(uint16_t rpc_version,
 	case DBD_GOT_CLUSTERS:
 		my_function = pack_acct_cluster_rec;
 		break;
+	case DBD_GOT_CONFIG:
+		my_function = pack_config_key_pair;
+		break;
 	case DBD_GOT_JOBS:
 		my_function = pack_jobacct_job_rec;
 		break;
@@ -2774,6 +3040,9 @@ void inline slurmdbd_pack_list_msg(uint16_t rpc_version,
 	case DBD_GOT_QOS:
 		my_function = pack_acct_qos_rec;
 		break;
+	case DBD_GOT_RESVS:
+		my_function = pack_acct_reservation_rec;
+		break;
 	case DBD_ADD_WCKEYS:
 	case DBD_GOT_WCKEYS:
 		my_function = pack_acct_wckey_rec;
@@ -2785,9 +3054,6 @@ void inline slurmdbd_pack_list_msg(uint16_t rpc_version,
 	case DBD_GOT_TXN:
 		my_function = pack_acct_txn_rec;
 		break;
-	case DBD_UPDATE_SHARES_USED:
-		my_function = pack_update_shares_used;
-		break;
 	default:
 		fatal("Unknown pack type");
 		return;
@@ -2835,6 +3101,10 @@ int inline slurmdbd_unpack_list_msg(uint16_t rpc_version,
 		my_function = unpack_acct_cluster_rec;
 		my_destroy = destroy_acct_cluster_rec;
 		break;
+	case DBD_GOT_CONFIG:
+		my_function = unpack_config_key_pair;
+		my_destroy = destroy_config_key_pair;
+		break;
 	case DBD_GOT_JOBS:
 		my_function = unpack_jobacct_job_rec;
 		my_destroy = destroy_jobacct_job_rec;
@@ -2848,6 +3118,10 @@ int inline slurmdbd_unpack_list_msg(uint16_t rpc_version,
 		my_function = unpack_acct_qos_rec;
 		my_destroy = destroy_acct_qos_rec;
 		break;
+	case DBD_GOT_RESVS:
+		my_function = unpack_acct_reservation_rec;
+		my_destroy = destroy_acct_reservation_rec;
+		break;
 	case DBD_ADD_WCKEYS:
 	case DBD_GOT_WCKEYS:
 		my_function = unpack_acct_wckey_rec;
@@ -2862,10 +3136,6 @@ int inline slurmdbd_unpack_list_msg(uint16_t rpc_version,
 		my_function = unpack_acct_txn_rec;
 		my_destroy = destroy_acct_txn_rec;
 		break;
-	case DBD_UPDATE_SHARES_USED:
-		my_function = unpack_update_shares_used;
-		my_destroy = destroy_update_shares_rec;
-		break;
 	default:
 		fatal("Unknown unpack type");
 		return SLURM_ERROR;
@@ -2977,12 +3247,22 @@ void inline
 slurmdbd_pack_node_state_msg(uint16_t rpc_version,
 			     dbd_node_state_msg_t *msg, Buf buffer)
 {
-	packstr(msg->cluster_name, buffer);
-	pack32(msg->cpu_count, buffer);
-	packstr(msg->hostlist, buffer);
-	packstr(msg->reason, buffer);
-	pack16(msg->new_state, buffer);
-	pack_time(msg->event_time, buffer);
+	if(rpc_version >= 5) {
+		packstr(msg->cluster_name, buffer);
+		pack32(msg->cpu_count, buffer);
+		packstr(msg->hostlist, buffer);
+		packstr(msg->reason, buffer);
+		pack16(msg->new_state, buffer);
+		pack_time(msg->event_time, buffer);
+		pack16(msg->state, buffer);
+	} else {
+		packstr(msg->cluster_name, buffer);
+		pack32(msg->cpu_count, buffer);
+		packstr(msg->hostlist, buffer);
+		packstr(msg->reason, buffer);
+		pack16(msg->new_state, buffer);
+		pack_time(msg->event_time, buffer);
+	}
 }
 
 int inline
@@ -2994,12 +3274,26 @@ slurmdbd_unpack_node_state_msg(uint16_t rpc_version,
 
 	msg_ptr = xmalloc(sizeof(dbd_node_state_msg_t));
 	*msg = msg_ptr;
-	safe_unpackstr_xmalloc(&msg_ptr->cluster_name, &uint32_tmp, buffer);
-	safe_unpack32(&msg_ptr->cpu_count, buffer);
-	safe_unpackstr_xmalloc(&msg_ptr->hostlist, &uint32_tmp, buffer);
-	safe_unpackstr_xmalloc(&msg_ptr->reason,   &uint32_tmp, buffer);
-	safe_unpack16(&msg_ptr->new_state, buffer);
-	safe_unpack_time(&msg_ptr->event_time, buffer);
+
+	if(rpc_version >= 5) {
+		safe_unpackstr_xmalloc(&msg_ptr->cluster_name, 
+				       &uint32_tmp, buffer);
+		safe_unpack32(&msg_ptr->cpu_count, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->hostlist, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->reason,   &uint32_tmp, buffer);
+		safe_unpack16(&msg_ptr->new_state, buffer);
+		safe_unpack_time(&msg_ptr->event_time, buffer);
+		safe_unpack16(&msg_ptr->state, buffer);
+	} else {
+		safe_unpackstr_xmalloc(&msg_ptr->cluster_name, 
+				       &uint32_tmp, buffer);
+		safe_unpack32(&msg_ptr->cpu_count, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->hostlist, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->reason,   &uint32_tmp, buffer);
+		safe_unpack16(&msg_ptr->new_state, buffer);
+		safe_unpack_time(&msg_ptr->event_time, buffer);	
+	}
+
 	return SLURM_SUCCESS;
 
 unpack_error:
@@ -3065,7 +3359,13 @@ void inline
 slurmdbd_pack_roll_usage_msg(uint16_t rpc_version,
 			     dbd_roll_usage_msg_t *msg, Buf buffer)
 {
-	pack_time(msg->start, buffer);
+	if(rpc_version >= 5) {
+		pack16(msg->archive_data, buffer);
+		pack_time(msg->end, buffer);
+		pack_time(msg->start, buffer);
+	} else {
+		pack_time(msg->start, buffer);
+	}
 }
 
 int inline 
@@ -3075,7 +3375,14 @@ slurmdbd_unpack_roll_usage_msg(uint16_t rpc_version,
 	dbd_roll_usage_msg_t *msg_ptr = xmalloc(sizeof(dbd_roll_usage_msg_t));
 
 	*msg = msg_ptr;
-	safe_unpack_time(&msg_ptr->start, buffer);
+
+	if(rpc_version >= 5) {
+		safe_unpack16(&msg_ptr->archive_data, buffer);
+		safe_unpack_time(&msg_ptr->end, buffer);
+		safe_unpack_time(&msg_ptr->start, buffer);
+	} else {
+		safe_unpack_time(&msg_ptr->start, buffer);
+	}
 	return SLURM_SUCCESS;
 	
 unpack_error:
@@ -3130,15 +3437,31 @@ void inline
 slurmdbd_pack_step_start_msg(uint16_t rpc_version, dbd_step_start_msg_t *msg,
 			     Buf buffer)
 {
-	pack32(msg->assoc_id, buffer);
-	pack32(msg->db_index, buffer);
-	pack32(msg->job_id, buffer);
-	packstr(msg->name, buffer);
-	packstr(msg->nodes, buffer);
-	pack_time(msg->start_time, buffer);
-	pack_time(msg->job_submit_time, buffer);
-	pack32(msg->step_id, buffer);
-	pack32(msg->total_procs, buffer);
+	if(rpc_version >= 5) {
+		pack32(msg->assoc_id, buffer);
+		pack32(msg->db_index, buffer);
+		pack32(msg->job_id, buffer);
+		packstr(msg->name, buffer);
+		packstr(msg->nodes, buffer);
+		packstr(msg->node_inx, buffer);
+		pack32(msg->node_cnt, buffer);
+		pack_time(msg->start_time, buffer);
+		pack_time(msg->job_submit_time, buffer);
+		pack32(msg->step_id, buffer);
+		pack16(msg->task_dist, buffer);
+		pack32(msg->total_procs, buffer);
+		pack32(msg->total_tasks, buffer);
+	} else {
+		pack32(msg->assoc_id, buffer);
+		pack32(msg->db_index, buffer);
+		pack32(msg->job_id, buffer);
+		packstr(msg->name, buffer);
+		packstr(msg->nodes, buffer);
+		pack_time(msg->start_time, buffer);
+		pack_time(msg->job_submit_time, buffer);
+		pack32(msg->step_id, buffer);
+		pack32(msg->total_procs, buffer);
+	}
 }
 
 int inline 
@@ -3148,15 +3471,32 @@ slurmdbd_unpack_step_start_msg(uint16_t rpc_version,
 	uint32_t uint32_tmp;
 	dbd_step_start_msg_t *msg_ptr = xmalloc(sizeof(dbd_step_start_msg_t));
 	*msg = msg_ptr;
-	safe_unpack32(&msg_ptr->assoc_id, buffer);
-	safe_unpack32(&msg_ptr->db_index, buffer);
-	safe_unpack32(&msg_ptr->job_id, buffer);
-	safe_unpackstr_xmalloc(&msg_ptr->name, &uint32_tmp, buffer);
-	safe_unpackstr_xmalloc(&msg_ptr->nodes, &uint32_tmp, buffer);
-	safe_unpack_time(&msg_ptr->start_time, buffer);
-	safe_unpack_time(&msg_ptr->job_submit_time, buffer);
-	safe_unpack32(&msg_ptr->step_id, buffer);
-	safe_unpack32(&msg_ptr->total_procs, buffer);
+	if(rpc_version >= 5) {
+		safe_unpack32(&msg_ptr->assoc_id, buffer);
+		safe_unpack32(&msg_ptr->db_index, buffer);
+		safe_unpack32(&msg_ptr->job_id, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->name, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->nodes, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->node_inx, &uint32_tmp, buffer);
+		safe_unpack32(&msg_ptr->node_cnt, buffer);
+		safe_unpack_time(&msg_ptr->start_time, buffer);
+		safe_unpack_time(&msg_ptr->job_submit_time, buffer);
+		safe_unpack32(&msg_ptr->step_id, buffer);
+		safe_unpack16(&msg_ptr->task_dist, buffer);
+		safe_unpack32(&msg_ptr->total_procs, buffer);
+		safe_unpack32(&msg_ptr->total_tasks, buffer);
+	} else {
+		safe_unpack32(&msg_ptr->assoc_id, buffer);
+		safe_unpack32(&msg_ptr->db_index, buffer);
+		safe_unpack32(&msg_ptr->job_id, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->name, &uint32_tmp, buffer);
+		safe_unpackstr_xmalloc(&msg_ptr->nodes, &uint32_tmp, buffer);
+		safe_unpack_time(&msg_ptr->start_time, buffer);
+		safe_unpack_time(&msg_ptr->job_submit_time, buffer);
+		safe_unpack32(&msg_ptr->step_id, buffer);
+		safe_unpack32(&msg_ptr->total_procs, buffer);		
+	}
+
 	return SLURM_SUCCESS;
 
 unpack_error:
diff --git a/src/common/slurmdbd_defs.h b/src/common/slurmdbd_defs.h
index b1aa9f8b1..c5b37a6a5 100644
--- a/src/common/slurmdbd_defs.h
+++ b/src/common/slurmdbd_defs.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -84,7 +85,7 @@
  *	communicating with it (e.g. it will not accept messages with a
  *	version higher than SLURMDBD_VERSION).
  */
-#define SLURMDBD_VERSION	04
+#define SLURMDBD_VERSION	05 
 #define SLURMDBD_VERSION_MIN	02
 
 /* SLURM DBD message types */
@@ -117,7 +118,9 @@ typedef enum {
 	DBD_GOT_USERS,  	/* Response to DBD_GET_USERS		*/
 	DBD_JOB_COMPLETE,	/* Record job completion 		*/
 	DBD_JOB_START,		/* Record job starting			*/
-	DBD_JOB_START_RC,	/* return db_index from job insertion 	*/
+	DBD_ID_RC,	        /* return db_index from job
+				 * insertion, or any other id from
+				 * other commands.              	*/
 	DBD_JOB_SUSPEND,	/* Record job suspension		*/
 	DBD_MODIFY_ACCOUNTS,    /* Modify existing account              */
 	DBD_MODIFY_ASSOCS,      /* Modify existing association          */
@@ -135,7 +138,9 @@ typedef enum {
 	DBD_ROLL_USAGE,         /* Roll up usage                        */
 	DBD_STEP_COMPLETE,	/* Record step completion		*/
 	DBD_STEP_START,		/* Record step starting			*/
-	DBD_UPDATE_SHARES_USED,	/* Record current share usage		*/
+	DBD_UPDATE_SHARES_USED,	/* Doesn't do anything but
+				 * needs to be here for
+				 * history sake		*/
 	DBD_GET_JOBS_COND, 	/* Get job information with a condition */
 	DBD_GET_TXN,		/* Get transaction information		*/
 	DBD_GOT_TXN,		/* Got transaction information		*/
@@ -154,6 +159,13 @@ typedef enum {
 	DBD_ARCHIVE_DUMP,    	/* issue a request to dump jobs to
 				 * archive */
 	DBD_ARCHIVE_LOAD,    	/* load an archive file    	        */
+	DBD_ADD_RESV,    	/* add a reservation                    */
+	DBD_REMOVE_RESV,    	/* remove a reservation                 */
+	DBD_MODIFY_RESV,    	/* modify a reservation                 */
+	DBD_GET_RESVS,    	/* Get reservation information  	*/
+	DBD_GOT_RESVS,		/* Response to DBD_GET_RESV		*/
+	DBD_GET_CONFIG,  	/* Get configuration information	*/
+	DBD_GOT_CONFIG,		/* Response to DBD_GET_CONFIG		*/
 } slurmdbd_msg_type_t;
 
 /*****************************************************************************\
@@ -172,10 +184,17 @@ typedef struct {
 
 typedef struct dbd_cluster_procs_msg {
 	char *cluster_name;	/* name of cluster */
+	char *cluster_nodes;	/* name of cluster */
 	uint32_t proc_count;	/* total processor count */
 	time_t event_time;	/* time of transition */
 } dbd_cluster_procs_msg_t;
 
+typedef struct {
+	void *rec; /* this could be anything based on the type types
+		     * are defined in slurm_accounting_storage.h
+		     * *_rec_t */
+} dbd_rec_msg_t;
+
 typedef struct {
 	void *cond; /* this could be anything based on the type types
 		     * are defined in slurm_accounting_storage.h
@@ -183,13 +202,15 @@ typedef struct {
 } dbd_cond_msg_t;
 
 typedef struct {
+	uint16_t archive_data;
+	time_t end;
 	time_t start;
 } dbd_roll_usage_msg_t;
 
 typedef struct {
+	time_t end;
 	void *rec;
 	time_t start;
-	time_t end;
 } dbd_usage_msg_t;
 
 typedef struct dbd_get_jobs_msg {
@@ -234,6 +255,7 @@ typedef struct dbd_job_start_msg {
 	char *   account;       /* Account name for those not running
 				 * with associations */
 	uint32_t alloc_cpus;	/* count of allocated processors */
+	uint32_t alloc_nodes;   /* how many nodes used in job */ 
 	uint32_t assoc_id;	/* accounting association id */
 	char *   cluster;       /* cluster job is being ran on */
 	char *   block_id;      /* Bluegene block id */
@@ -244,18 +266,24 @@ typedef struct dbd_job_start_msg {
 	uint16_t job_state;	/* job state */
 	char *   name;		/* job name */
 	char *   nodes;		/* hosts allocated to the job */
+	char *   node_inx;      /* ranged bitmap string of hosts
+				 * allocated to the job */
 	char *   partition;	/* partition job is running on */
 	uint32_t priority;	/* job priority */
 	uint32_t req_cpus;	/* count of req processors */
+	uint32_t resv_id;	/* reservation id */
 	time_t   start_time;	/* job start time */
 	time_t   submit_time;	/* job submit time */
+	uint32_t timelimit;	/* job timelimit */
 	uint32_t uid;	        /* user ID if associations are being used */
+	char *   wckey;		/* wckey name */
 } dbd_job_start_msg_t;
 
-typedef struct dbd_job_start_rc_msg {
-	uint32_t db_index;	/* db_index */
+/* returns a uint32_t along with a return code */
+typedef struct dbd_id_rc_msg {
+	uint32_t id;
 	uint32_t return_code;
-} dbd_job_start_rc_msg_t;
+} dbd_id_rc_msg_t;
 
 typedef struct dbd_job_suspend_msg {
 	uint32_t assoc_id;	/* accounting association id needed
@@ -288,6 +316,8 @@ typedef struct dbd_node_state_msg {
 	char *hostlist;		/* name of hosts */
 	uint16_t new_state;	/* new state of host, see DBD_NODE_STATE_* */
 	char *reason;		/* explanation for the node's state */
+	uint16_t state;         /* current state of node.  Used to get
+				   flags on the state (i.e. maintenance) */
 } dbd_node_state_msg_t;
 
 typedef struct dbd_rc_msg {
@@ -314,6 +344,7 @@ typedef struct dbd_step_comp_msg {
 				  * in db */
 	uint32_t step_id;	/* step ID */
 	uint32_t total_procs;	/* count of allocated processors */
+	uint32_t total_tasks;	/* count of tasks for step */
 } dbd_step_comp_msg_t;
 
 typedef struct dbd_step_start_msg {
@@ -322,11 +353,16 @@ typedef struct dbd_step_start_msg {
 	uint32_t job_id;	/* job ID */
 	char *   name;		/* step name */
 	char *   nodes;		/* hosts allocated to the step */
+	char *   node_inx;	/* bitmap index of hosts allocated to
+				 * the step */
+	uint32_t node_cnt;      /* how many nodes used in step */ 
 	time_t   start_time;	/* step start time */
 	time_t   job_submit_time;/* job submit time needed to find job record
 				  * in db */
 	uint32_t step_id;	/* step ID */
+	uint16_t task_dist;     /* layout method of step */
 	uint32_t total_procs;	/* count of allocated processors */
+	uint32_t total_tasks;	/* count of tasks for step */
 } dbd_step_start_msg_t;
 
 /* flag to let us know if we are running on cache or from the actual
@@ -389,6 +425,9 @@ void inline slurmdbd_free_acct_coord_msg(uint16_t rpc_version,
 					 dbd_acct_coord_msg_t *msg);
 void inline slurmdbd_free_cluster_procs_msg(uint16_t rpc_version, 
 					    dbd_cluster_procs_msg_t *msg);
+void inline slurmdbd_free_rec_msg(uint16_t rpc_version, 
+				  slurmdbd_msg_type_t type,
+				  dbd_rec_msg_t *msg);
 void inline slurmdbd_free_cond_msg(uint16_t rpc_version, 
 				   slurmdbd_msg_type_t type,
 				   dbd_cond_msg_t *msg);
@@ -402,8 +441,8 @@ void inline slurmdbd_free_job_complete_msg(uint16_t rpc_version,
 					   dbd_job_comp_msg_t *msg);
 void inline slurmdbd_free_job_start_msg(uint16_t rpc_version, 
 					dbd_job_start_msg_t *msg);
-void inline slurmdbd_free_job_start_rc_msg(uint16_t rpc_version, 
-					   dbd_job_start_rc_msg_t *msg);
+void inline slurmdbd_free_id_rc_msg(uint16_t rpc_version, 
+					   dbd_id_rc_msg_t *msg);
 void inline slurmdbd_free_job_suspend_msg(uint16_t rpc_version, 
 					  dbd_job_suspend_msg_t *msg);
 void inline slurmdbd_free_list_msg(uint16_t rpc_version, 
@@ -436,6 +475,9 @@ void inline slurmdbd_pack_acct_coord_msg(uint16_t rpc_version,
 void inline slurmdbd_pack_cluster_procs_msg(uint16_t rpc_version, 
 					    dbd_cluster_procs_msg_t *msg,
 					    Buf buffer);
+void inline slurmdbd_pack_rec_msg(uint16_t rpc_version, 
+				  slurmdbd_msg_type_t type,
+				  dbd_rec_msg_t *msg, Buf buffer);
 void inline slurmdbd_pack_cond_msg(uint16_t rpc_version, 
 				   slurmdbd_msg_type_t type,
 				   dbd_cond_msg_t *msg, Buf buffer);
@@ -452,9 +494,9 @@ void inline slurmdbd_pack_job_complete_msg(uint16_t rpc_version,
 void inline slurmdbd_pack_job_start_msg(uint16_t rpc_version, 
 					dbd_job_start_msg_t *msg,
 					Buf buffer);
-void inline slurmdbd_pack_job_start_rc_msg(uint16_t rpc_version, 
-					   dbd_job_start_rc_msg_t *msg,
-					   Buf buffer);
+void inline slurmdbd_pack_id_rc_msg(uint16_t rpc_version, 
+				    dbd_id_rc_msg_t *msg,
+				    Buf buffer);
 void inline slurmdbd_pack_job_suspend_msg(uint16_t rpc_version, 
 					  dbd_job_suspend_msg_t *msg,
 					  Buf buffer);
@@ -493,6 +535,9 @@ int inline slurmdbd_unpack_acct_coord_msg(uint16_t rpc_version,
 int inline slurmdbd_unpack_cluster_procs_msg(uint16_t rpc_version, 
 					     dbd_cluster_procs_msg_t **msg,
 					     Buf buffer);
+int inline slurmdbd_unpack_rec_msg(uint16_t rpc_version, 
+				   slurmdbd_msg_type_t type,
+				   dbd_rec_msg_t **msg, Buf buffer);
 int inline slurmdbd_unpack_cond_msg(uint16_t rpc_version, 
 				    slurmdbd_msg_type_t type,
 				    dbd_cond_msg_t **msg, Buf buffer);
@@ -509,9 +554,9 @@ int inline slurmdbd_unpack_job_complete_msg(uint16_t rpc_version,
 int inline slurmdbd_unpack_job_start_msg(uint16_t rpc_version, 
 					 dbd_job_start_msg_t **msg,
 					 Buf buffer);
-int inline slurmdbd_unpack_job_start_rc_msg(uint16_t rpc_version, 
-					    dbd_job_start_rc_msg_t **msg,
-					    Buf buffer);
+int inline slurmdbd_unpack_id_rc_msg(uint16_t rpc_version, 
+				     dbd_id_rc_msg_t **msg,
+				     Buf buffer);
 int inline slurmdbd_unpack_job_suspend_msg(uint16_t rpc_version, 
 					   dbd_job_suspend_msg_t **msg,
 					   Buf buffer);
diff --git a/src/common/stepd_api.c b/src/common/stepd_api.c
index 4e8e8ee97..939974569 100644
--- a/src/common/stepd_api.c
+++ b/src/common/stepd_api.c
@@ -1,16 +1,17 @@
 /*****************************************************************************\
  *  src/common/stepd_api.c - slurmstepd message API
- *  $Id: stepd_api.c 14503 2008-07-14 17:27:40Z jette $
+ *  $Id: stepd_api.c 16867 2009-03-12 16:35:42Z jette $
  *****************************************************************************
  *  Copyright (C) 2005-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Portions Copyright (C) 2008 Vijay Ramasubramanian
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -324,14 +325,21 @@ rwfail:
  * Send a checkpoint request to all tasks of a job step.
  */
 int
-stepd_checkpoint(int fd, int signal, time_t timestamp)
+stepd_checkpoint(int fd, time_t timestamp, char *image_dir)
 {
 	int req = REQUEST_CHECKPOINT_TASKS;
 	int rc;
 
 	safe_write(fd, &req, sizeof(int));
-	safe_write(fd, &signal, sizeof(int));
 	safe_write(fd, &timestamp, sizeof(time_t));
+	if (image_dir) {
+		rc = strlen(image_dir) + 1;
+		safe_write(fd, &rc, sizeof(int));
+		safe_write(fd, image_dir, rc);
+	} else {
+		rc = 0;
+		safe_write(fd, &rc, sizeof(int));
+	}
 
 	/* Receive the return code */
 	safe_read(fd, &rc, sizeof(int));
@@ -455,9 +463,9 @@ _sockname_regex_init(regex_t *re, const char *nodename)
 	xstrcat(pattern, "_([[:digit:]]*)\\.([[:digit:]]*)$");
 
 	if (regcomp(re, pattern, REG_EXTENDED) != 0) {
-                error("sockname regex compilation failed\n");
-                return -1;
-        }
+		error("sockname regex compilation failed\n");
+		return -1;
+	}
 
 	xfree(pattern);
 
@@ -468,9 +476,9 @@ static int
 _sockname_regex(regex_t *re, const char *filename,
 		uint32_t *jobid, uint32_t *stepid)
 {
-        size_t nmatch = 5;
-        regmatch_t pmatch[5];
-        char *match;
+	size_t nmatch = 5;
+	regmatch_t pmatch[5];
+	char *match;
 
 	memset(pmatch, 0, sizeof(regmatch_t)*nmatch);
 	if (regexec(re, filename, nmatch, pmatch, 0) == REG_NOMATCH) {
diff --git a/src/common/stepd_api.h b/src/common/stepd_api.h
index a160324ea..053405de8 100644
--- a/src/common/stepd_api.h
+++ b/src/common/stepd_api.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  src/common/stepd_api.h - slurmstepd message API
- *  $Id: stepd_api.h 13695 2008-03-21 21:28:17Z jette $
+ *  $Id: stepd_api.h 16867 2009-03-12 16:35:42Z jette $
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -136,7 +137,7 @@ int stepd_signal(int fd, int signal);
 /*
  * Send a checkpoint request to all tasks of a job step.
  */
-int stepd_checkpoint(int fd, int signal, time_t timestamp);
+int stepd_checkpoint(int fd, time_t timestamp, char *image_dir);
 
 /*
  * Send a signal to a single task in a job step.
diff --git a/src/common/switch.c b/src/common/switch.c
index f7ea41c0c..f308364c5 100644
--- a/src/common/switch.c
+++ b/src/common/switch.c
@@ -1,13 +1,15 @@
 /*****************************************************************************\
  *  src/common/switch.c - Generic switch (interconnect) for slurm
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -57,8 +59,7 @@
 typedef struct slurm_switch_ops {
 	int          (*state_save)        ( char *dir_name );
 	int          (*state_restore)     ( char *dir_name, bool recover );
-	
-	bool         (*no_frag)           ( void );
+
 	int          (*alloc_jobinfo)     ( switch_jobinfo_t *jobinfo );
 	int          (*build_jobinfo)     ( switch_jobinfo_t jobinfo,
 						char *nodelist,
@@ -192,7 +193,6 @@ _slurm_switch_get_ops( slurm_switch_context_t c )
 	static const char *syms[] = {
 		"switch_p_libstate_save",
 		"switch_p_libstate_restore",
-		"switch_p_no_frag",
 		"switch_p_alloc_jobinfo",
 		"switch_p_build_jobinfo",
 		"switch_p_copy_jobinfo",
@@ -343,14 +343,6 @@ extern int  switch_clear(void)
 	return (*(g_context->ops.state_clear))( );
 }
 
-extern bool switch_no_frag(void)
-{
-	if ( switch_init() < 0 )
-		return SLURM_ERROR;
-
-	return (*(g_context->ops.no_frag))( );
-}
-
 extern int  switch_alloc_jobinfo(switch_jobinfo_t *jobinfo)
 {
 	if ( switch_init() < 0 )
diff --git a/src/common/switch.h b/src/common/switch.h
index ec574710c..a294c0b01 100644
--- a/src/common/switch.h
+++ b/src/common/switch.h
@@ -1,13 +1,15 @@
 /*****************************************************************************\
  *  src/common/switch.h - Generic switch (interconnect) info for slurm
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -93,12 +95,6 @@ extern int  switch_restore(char *dir_name, bool recover);
  */
 extern int  switch_clear(void);
 
-/* report if resource fragmentation is important. if so, delay scheduling a 
- * new job while another is in the process of terminating.
- * RET          - true if fragmentation is important
- */
-extern bool switch_no_frag(void);
-
 /* return the number of a switch-specific error code */
 extern int switch_get_errno(void);
 
diff --git a/src/common/timers.c b/src/common/timers.c
index 3f34a4598..5cc6ca1bd 100644
--- a/src/common/timers.c
+++ b/src/common/timers.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/timers.h b/src/common/timers.h
index b580270b6..6cc38daf4 100644
--- a/src/common/timers.h
+++ b/src/common/timers.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> and Kevin Tew <tew1@llnl.gov> 
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/uid.c b/src/common/uid.c
index ad47db4c1..fdff3ef44 100644
--- a/src/common/uid.c
+++ b/src/common/uid.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/common/uid.c - uid/gid lookup utility functions
- * $Id: uid.c 17177 2009-04-07 18:09:43Z jette $
+ * $Id: uid.c 17178 2009-04-07 18:23:28Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/uid.h b/src/common/uid.h
index 06701af57..bf7062b8e 100644
--- a/src/common/uid.h
+++ b/src/common/uid.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/common/uid.h - uid/gid lookup utility functions
- * $Id: uid.h 17177 2009-04-07 18:09:43Z jette $
+ * $Id: uid.h 17178 2009-04-07 18:23:28Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/unsetenv.c b/src/common/unsetenv.c
index 5fd8b4cb4..bc5c3def0 100644
--- a/src/common/unsetenv.c
+++ b/src/common/unsetenv.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/unsetenv.h b/src/common/unsetenv.h
index 4d98de3ab..a8b998132 100644
--- a/src/common/unsetenv.h
+++ b/src/common/unsetenv.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/common/write_labelled_message.c b/src/common/write_labelled_message.c
new file mode 100644
index 000000000..6d379bcd2
--- /dev/null
+++ b/src/common/write_labelled_message.c
@@ -0,0 +1,177 @@
+/*****************************************************************************\
+ *  write_labelled_message.c - write a message with an optional label
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Christopher J. Morrone <morrone2@llnl.gov> and 
+ *  David Bremer <dbremer@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include <signal.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+#include "src/common/write_labelled_message.h"
+#include "slurm/slurm_errno.h"
+#include "src/common/log.h"
+
+static int _write_label(int fd, int taskid, int label_width);
+static int _write_line(int fd, void *buf, int len);
+static int _write_newline(int fd);
+
+
+
+int write_labelled_message(int fd, void *buf, int len, int taskid,
+			   bool label, int label_width)
+{
+	void *start;
+	void *end;
+	int remaining = len;
+	int written = 0;
+	int line_len;
+	int rc = -1;
+
+	while (remaining > 0) {
+		start = buf + written;
+		end = memchr(start, '\n', remaining);
+		if (label)
+			if (_write_label(fd, taskid, label_width)
+			    != SLURM_SUCCESS)
+				goto done;
+		if (end == NULL) { /* no newline found */
+			rc = _write_line(fd, start, remaining);
+			if (rc <= 0) {
+				goto done;
+			} else {
+				remaining -= rc;
+				written += rc;
+			}
+			if (label)
+				if (_write_newline(fd) != SLURM_SUCCESS)
+					goto done;
+		} else {
+			line_len = (int)(end - start) + 1;
+			rc = _write_line(fd, start, line_len);
+			if (rc <= 0) {
+				goto done;
+			} else {
+				remaining -= rc;
+				written += rc;
+			}
+		}
+
+	}
+done:
+	if (written > 0)
+		return written;
+	else
+		return rc;
+}
+
+
+static int _write_label(int fd, int taskid, int label_width)
+{
+	int n;
+	int left = label_width + 2;
+	char buf[16];
+	void *ptr = buf;
+
+	snprintf(buf, 16, "%0*d: ", label_width, taskid);
+	while (left > 0) {
+	again:
+		if ((n = write(fd, ptr, left)) < 0) {
+			if (errno == EINTR)
+				goto again;
+			if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) {
+				debug3("  got EAGAIN in _write_label");
+				goto again;
+			}
+			error("In _write_label: %m");
+			return SLURM_ERROR;
+		}
+		left -= n;
+		ptr += n;
+	}
+
+	return SLURM_SUCCESS;
+}
+
+
+static int _write_newline(int fd)
+{
+	int n;
+
+	debug2("Called _write_newline");
+again:
+	if ((n = write(fd, "\n", 1)) < 0) {
+		if (errno == EINTR
+		    || errno == EAGAIN
+		    || errno == EWOULDBLOCK) {
+			goto again;
+		}
+		error("In _write_newline: %m");
+		return SLURM_ERROR;
+	}
+	return SLURM_SUCCESS;
+}
+
+
+/*
+ * Blocks until write is complete, regardless of the file
+ * descriptor being in non-blocking mode.
+ */
+static int _write_line(int fd, void *buf, int len)
+{
+	int n;
+	int left = len;
+	void *ptr = buf;
+
+	debug2("Called _write_line");
+	while (left > 0) {
+	again:
+		if ((n = write(fd, ptr, left)) < 0) {
+			if (errno == EINTR)
+				goto again;
+			if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) {
+				debug3("  got EAGAIN in _write_line");
+				goto again;
+			}
+			return -1;
+		}
+		left -= n;
+		ptr += n;
+	}
+	
+	return len;
+}
diff --git a/src/common/write_labelled_message.h b/src/common/write_labelled_message.h
new file mode 100644
index 000000000..6deaa0a5c
--- /dev/null
+++ b/src/common/write_labelled_message.h
@@ -0,0 +1,65 @@
+/*****************************************************************************\
+ *  write_labelled_message.h - write a message with an optional label
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by David Bremer <dbremer@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _HAVE_WRITE_LABELLED_MESSAGE
+#define _HAVE_WRITE_LABELLED_MESSAGE
+
+#include "slurm/slurm.h"
+
+/*
+ * fd          is the file descriptor to write to
+ * buf         is the char buffer to write
+ * len         is the buffer length in bytes
+ * taskid      is will be used in the label
+ * label       if true, prepend each line of the buffer with a 
+ *               label for the task id
+ * label_width is the number of digits to use for the task id
+ *
+ * Write as many lines from the message as possible.  Return
+ * the number of bytes from the message that have been written,
+ * or -1 on error.  If len==0, -1 will be returned.
+ *
+ * If the message ends in a partial line (line does not end
+ * in a '\n'), then add a newline to the output file, but only
+ * in label mode.
+ */
+
+int write_labelled_message(int fd, void *buf, int len, int taskid,
+			   bool label, int label_width);
+
+#endif
diff --git a/src/common/xassert.c b/src/common/xassert.c
index 2b2d2362c..430959ec4 100644
--- a/src/common/xassert.c
+++ b/src/common/xassert.c
@@ -1,15 +1,16 @@
 /*****************************************************************************\
  *  xassert.c - replacement for assert which sends error to log instead 
  *		of stderr
- *  $Id: xassert.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: xassert.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/common/xassert.h b/src/common/xassert.h
index 2e5e6fb44..1c66ce5c4 100644
--- a/src/common/xassert.h
+++ b/src/common/xassert.h
@@ -2,15 +2,16 @@
  *  xassert.h: assert type macro with configurable handling
  *             If NDEBUG is defined, do nothing.
  *             If not, and expression is zero, log an error message and abort.
- *  $Id: xassert.h 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: xassert.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/common/xmalloc.c b/src/common/xmalloc.c
index 30a2075b7..61751c0c6 100644
--- a/src/common/xmalloc.c
+++ b/src/common/xmalloc.c
@@ -2,16 +2,17 @@
  *  xmalloc.c - enhanced malloc routines
  *  Started with Jim Garlick's xmalloc and tied into slurm log facility.
  *  Also added ability to print file, line, and function of caller.
- *  $Id: xmalloc.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: xmalloc.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jim Garlick <garlick1@llnl.gov> and 
  *	Mark Grondona <mgrondona@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/xmalloc.h b/src/common/xmalloc.h
index 4d8c796ac..fe99169ea 100644
--- a/src/common/xmalloc.h
+++ b/src/common/xmalloc.h
@@ -3,16 +3,17 @@
  *  - default: never return if errors are encountered.
  *  - attempt to report file, line, and calling function on assertion failure
  *  - use configurable slurm log facility for reporting errors
- *  $Id: xmalloc.h 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: xmalloc.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jim Garlick <garlick1@llnl.gov> and 
  *	Mark Grondona <mgrondona@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/xsignal.c b/src/common/xsignal.c
index fcc5e577f..f9b0a1f77 100644
--- a/src/common/xsignal.c
+++ b/src/common/xsignal.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/xsignal.h b/src/common/xsignal.h
index ad66edb77..9834cfccb 100644
--- a/src/common/xsignal.h
+++ b/src/common/xsignal.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/common/xsignal.h - POSIX signal wrapper functions
- * $Id: xsignal.h 13672 2008-03-19 23:10:58Z jette $
+ * $Id: xsignal.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/common/xstring.c b/src/common/xstring.c
index 94d0a181d..a360bbeaa 100644
--- a/src/common/xstring.c
+++ b/src/common/xstring.c
@@ -7,10 +7,11 @@
  *  Written by Jim Garlick <garlick@llnl.gov>
  *             Mark Grondona <grondona@llnl.gov>, et al.
  *	
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/common/xstring.h b/src/common/xstring.h
index 493819a49..ec1fe44e2 100644
--- a/src/common/xstring.h
+++ b/src/common/xstring.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jim Garlick <garlick@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/database/Makefile.am b/src/database/Makefile.am
index dadae58c3..790a8b820 100644
--- a/src/database/Makefile.am
+++ b/src/database/Makefile.am
@@ -4,18 +4,26 @@ AUTOMAKE_OPTIONS = foreign
 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
 
-noinst_LTLIBRARIES =      \
-	libslurm_mysql.la \
-	libslurm_pgsql.la
-
+if WITH_MYSQL
+MYSQL_LIB = libslurm_mysql.la
 libslurm_mysql_la_SOURCES = mysql_common.c mysql_common.h
-libslurm_pgsql_la_SOURCES = pgsql_common.c pgsql_common.h
+libslurm_mysql_la_LIBADD   = $(MYSQL_LIBS)
+libslurm_mysql_la_LDFLAGS  = $(LIB_LDFLAGS)
+libslurm_mysql_la_CFLAGS = $(MYSQL_CFLAGS)
+else
+MYSQL_LIB =
+EXTRA_libslurm_mysql_la_SOURCES = mysql_common.c mysql_common.h
+endif
 
-libslurm_mysql_la_LIBADD   = $(MYSQL_LIBS) 
+if WITH_PGSQL
+PGSQL_LIB = libslurm_pgsql.la
+libslurm_pgsql_la_SOURCES = pgsql_common.c pgsql_common.h
 libslurm_pgsql_la_LIBADD   = $(PGSQL_LIBS) 
-
-libslurm_mysql_la_LDFLAGS  = $(LIB_LDFLAGS)
 libslurm_pgsql_la_LDFLAGS  = $(LIB_LDFLAGS)
-
-libslurm_mysql_la_CFLAGS = $(MYSQL_CFLAGS)
 libslurm_pgsql_la_CFLAGS = $(PGSQL_CFLAGS)
+else
+PGSQL_LIB =
+EXTRA_libslurm_pgsql_la_SOURCES = pgsql_common.c pgsql_common.h
+endif
+
+noinst_LTLIBRARIES = $(MYSQL_LIB) $(PGSQL_LIB)
diff --git a/src/database/Makefile.in b/src/database/Makefile.in
index fbc9789b5..f7ea46899 100644
--- a/src/database/Makefile.in
+++ b/src/database/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -69,20 +73,32 @@ CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/slurm/slurm.h
 CONFIG_CLEAN_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libslurm_mysql_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_libslurm_mysql_la_OBJECTS = libslurm_mysql_la-mysql_common.lo
+@WITH_MYSQL_TRUE@libslurm_mysql_la_DEPENDENCIES =  \
+@WITH_MYSQL_TRUE@	$(am__DEPENDENCIES_1)
+am__libslurm_mysql_la_SOURCES_DIST = mysql_common.c mysql_common.h
+@WITH_MYSQL_TRUE@am_libslurm_mysql_la_OBJECTS =  \
+@WITH_MYSQL_TRUE@	libslurm_mysql_la-mysql_common.lo
+am__EXTRA_libslurm_mysql_la_SOURCES_DIST = mysql_common.c \
+	mysql_common.h
 libslurm_mysql_la_OBJECTS = $(am_libslurm_mysql_la_OBJECTS)
 libslurm_mysql_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(libslurm_mysql_la_CFLAGS) $(CFLAGS) \
 	$(libslurm_mysql_la_LDFLAGS) $(LDFLAGS) -o $@
-libslurm_pgsql_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_libslurm_pgsql_la_OBJECTS = libslurm_pgsql_la-pgsql_common.lo
+@WITH_MYSQL_TRUE@am_libslurm_mysql_la_rpath =
+@WITH_PGSQL_TRUE@libslurm_pgsql_la_DEPENDENCIES =  \
+@WITH_PGSQL_TRUE@	$(am__DEPENDENCIES_1)
+am__libslurm_pgsql_la_SOURCES_DIST = pgsql_common.c pgsql_common.h
+@WITH_PGSQL_TRUE@am_libslurm_pgsql_la_OBJECTS =  \
+@WITH_PGSQL_TRUE@	libslurm_pgsql_la-pgsql_common.lo
+am__EXTRA_libslurm_pgsql_la_SOURCES_DIST = pgsql_common.c \
+	pgsql_common.h
 libslurm_pgsql_la_OBJECTS = $(am_libslurm_pgsql_la_OBJECTS)
 libslurm_pgsql_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(libslurm_pgsql_la_CFLAGS) $(CFLAGS) \
 	$(libslurm_pgsql_la_LDFLAGS) $(LDFLAGS) -o $@
+@WITH_PGSQL_TRUE@am_libslurm_pgsql_la_rpath =
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
 depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
 am__depfiles_maybe = depfiles
@@ -95,9 +111,14 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(libslurm_mysql_la_SOURCES) $(libslurm_pgsql_la_SOURCES)
-DIST_SOURCES = $(libslurm_mysql_la_SOURCES) \
-	$(libslurm_pgsql_la_SOURCES)
+SOURCES = $(libslurm_mysql_la_SOURCES) \
+	$(EXTRA_libslurm_mysql_la_SOURCES) \
+	$(libslurm_pgsql_la_SOURCES) \
+	$(EXTRA_libslurm_pgsql_la_SOURCES)
+DIST_SOURCES = $(am__libslurm_mysql_la_SOURCES_DIST) \
+	$(am__EXTRA_libslurm_mysql_la_SOURCES_DIST) \
+	$(am__libslurm_pgsql_la_SOURCES_DIST) \
+	$(am__EXTRA_libslurm_pgsql_la_SOURCES_DIST)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -111,6 +132,10 @@ 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@
@@ -272,18 +297,21 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
-noinst_LTLIBRARIES = \
-	libslurm_mysql.la \
-	libslurm_pgsql.la
-
-libslurm_mysql_la_SOURCES = mysql_common.c mysql_common.h
-libslurm_pgsql_la_SOURCES = pgsql_common.c pgsql_common.h
-libslurm_mysql_la_LIBADD = $(MYSQL_LIBS) 
-libslurm_pgsql_la_LIBADD = $(PGSQL_LIBS) 
-libslurm_mysql_la_LDFLAGS = $(LIB_LDFLAGS)
-libslurm_pgsql_la_LDFLAGS = $(LIB_LDFLAGS)
-libslurm_mysql_la_CFLAGS = $(MYSQL_CFLAGS)
-libslurm_pgsql_la_CFLAGS = $(PGSQL_CFLAGS)
+@WITH_MYSQL_FALSE@MYSQL_LIB = 
+@WITH_MYSQL_TRUE@MYSQL_LIB = libslurm_mysql.la
+@WITH_MYSQL_TRUE@libslurm_mysql_la_SOURCES = mysql_common.c mysql_common.h
+@WITH_MYSQL_TRUE@libslurm_mysql_la_LIBADD = $(MYSQL_LIBS)
+@WITH_MYSQL_TRUE@libslurm_mysql_la_LDFLAGS = $(LIB_LDFLAGS)
+@WITH_MYSQL_TRUE@libslurm_mysql_la_CFLAGS = $(MYSQL_CFLAGS)
+@WITH_MYSQL_FALSE@EXTRA_libslurm_mysql_la_SOURCES = mysql_common.c mysql_common.h
+@WITH_PGSQL_FALSE@PGSQL_LIB = 
+@WITH_PGSQL_TRUE@PGSQL_LIB = libslurm_pgsql.la
+@WITH_PGSQL_TRUE@libslurm_pgsql_la_SOURCES = pgsql_common.c pgsql_common.h
+@WITH_PGSQL_TRUE@libslurm_pgsql_la_LIBADD = $(PGSQL_LIBS) 
+@WITH_PGSQL_TRUE@libslurm_pgsql_la_LDFLAGS = $(LIB_LDFLAGS)
+@WITH_PGSQL_TRUE@libslurm_pgsql_la_CFLAGS = $(PGSQL_CFLAGS)
+@WITH_PGSQL_FALSE@EXTRA_libslurm_pgsql_la_SOURCES = pgsql_common.c pgsql_common.h
+noinst_LTLIBRARIES = $(MYSQL_LIB) $(PGSQL_LIB)
 all: all-am
 
 .SUFFIXES:
@@ -327,9 +355,9 @@ clean-noinstLTLIBRARIES:
 	  rm -f "$${dir}/so_locations"; \
 	done
 libslurm_mysql.la: $(libslurm_mysql_la_OBJECTS) $(libslurm_mysql_la_DEPENDENCIES) 
-	$(libslurm_mysql_la_LINK)  $(libslurm_mysql_la_OBJECTS) $(libslurm_mysql_la_LIBADD) $(LIBS)
+	$(libslurm_mysql_la_LINK) $(am_libslurm_mysql_la_rpath) $(libslurm_mysql_la_OBJECTS) $(libslurm_mysql_la_LIBADD) $(LIBS)
 libslurm_pgsql.la: $(libslurm_pgsql_la_OBJECTS) $(libslurm_pgsql_la_DEPENDENCIES) 
-	$(libslurm_pgsql_la_LINK)  $(libslurm_pgsql_la_OBJECTS) $(libslurm_pgsql_la_LIBADD) $(LIBS)
+	$(libslurm_pgsql_la_LINK) $(am_libslurm_pgsql_la_rpath) $(libslurm_pgsql_la_OBJECTS) $(libslurm_pgsql_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
diff --git a/src/database/mysql_common.c b/src/database/mysql_common.c
index 9e6a3b9f2..28a3402d0 100644
--- a/src/database/mysql_common.c
+++ b/src/database/mysql_common.c
@@ -7,7 +7,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -47,34 +48,8 @@
 pthread_mutex_t mysql_lock = PTHREAD_MUTEX_INITIALIZER;
 #endif
 
-#ifdef HAVE_MYSQL
-
 static char *table_defs_table = "table_defs_table";
 
-static int _clear_results(MYSQL *mysql_db)
-{
-	MYSQL_RES *result = NULL;
-	int rc = 0;
-	do {
-		/* did current statement return data? */
-		if((result = mysql_store_result(mysql_db)))
-			mysql_free_result(result);
-		
-		/* more results? -1 = no, >0 = error, 0 = yes (keep looping) */
-		if ((rc = mysql_next_result(mysql_db)) > 0)
-			error("Could not execute statement %d %s\n",
-			      mysql_errno(mysql_db),
-			      mysql_error(mysql_db));
-	} while (rc == 0);
-
-	if(rc > 0) {
-		errno = rc;
-		return SLURM_ERROR;
-	} 
-
-	return SLURM_SUCCESS;
-}
-
 static MYSQL_RES *_get_first_result(MYSQL *mysql_db)
 {
 	MYSQL_RES *result = NULL;
@@ -346,6 +321,9 @@ static int _create_db(char *db_name, mysql_db_info_t *db_info)
 	char create_line[50];
 	MYSQL *mysql_db = NULL;
 	int rc = SLURM_ERROR;
+	
+	MYSQL *db_ptr = NULL;
+	char *db_host = NULL;
 
 	while(rc == SLURM_ERROR) {
 		rc = SLURM_SUCCESS;
@@ -355,10 +333,25 @@ static int _create_db(char *db_name, mysql_db_info_t *db_info)
 		if(!(mysql_db = mysql_init(mysql_db)))
 			fatal("mysql_init failed: %s", mysql_error(mysql_db));
 		
-		if(mysql_real_connect(mysql_db, 
-				      db_info->host, db_info->user,
-				      db_info->pass, NULL, 
-				      db_info->port, NULL, 0)) {
+		db_host = db_info->host;
+		db_ptr = mysql_real_connect(mysql_db,
+					    db_host, db_info->user,
+					    db_info->pass, NULL,
+					    db_info->port, NULL, 0);
+
+		if (!db_ptr && db_info->backup) {
+			info("Connection failed to host = %s "
+			     "user = %s port = %u",
+			     db_host, db_info->user,
+			     db_info->port);  
+			db_host = db_info->backup;
+			db_ptr = mysql_real_connect(mysql_db, db_host,
+						    db_info->user,
+						    db_info->pass, NULL,
+						    db_info->port, NULL, 0);
+		}
+
+		if (db_ptr) {
 			snprintf(create_line, sizeof(create_line),
 				 "create database %s", db_name);
 			if(mysql_query(mysql_db, create_line)) {
@@ -369,9 +362,9 @@ static int _create_db(char *db_name, mysql_db_info_t *db_info)
 			mysql_close_db_connection(&mysql_db);
 		} else {
 			info("Connection failed to host = %s "
-			     "user = %s pass = %s port = %u",
-			     db_info->host, db_info->user,
-			     db_info->pass, db_info->port);
+			     "user = %s port = %u",
+			     db_host, db_info->user,
+			     db_info->port);
 #ifdef MYSQL_NOT_THREAD_SAFE
 			slurm_mutex_unlock(&mysql_lock);
 #endif
@@ -392,6 +385,7 @@ static int _create_db(char *db_name, mysql_db_info_t *db_info)
 extern int *destroy_mysql_db_info(mysql_db_info_t *db_info)
 {
 	if(db_info) {
+		xfree(db_info->backup);
 		xfree(db_info->host);
 		xfree(db_info->user);
 		xfree(db_info->pass);
@@ -406,6 +400,8 @@ extern int mysql_get_db_connection(MYSQL **mysql_db, char *db_name,
 	int rc = SLURM_SUCCESS;
 	bool storage_init = false;
 	
+	char *db_host = db_info->host;
+
 	if(!(*mysql_db = mysql_init(*mysql_db)))
 		fatal("mysql_init failed: %s", mysql_error(*mysql_db));
 	else {
@@ -418,7 +414,7 @@ extern int mysql_get_db_connection(MYSQL **mysql_db, char *db_name,
 		mysql_options(*mysql_db, MYSQL_OPT_CONNECT_TIMEOUT,
 			      (char *)&my_timeout);
 		while(!storage_init) {
-			if(!mysql_real_connect(*mysql_db, db_info->host,
+			if(!mysql_real_connect(*mysql_db, db_host,
 					       db_info->user, db_info->pass,
 					       db_name, db_info->port,
 					       NULL, CLIENT_MULTI_STATEMENTS)) {
@@ -431,6 +427,11 @@ extern int mysql_get_db_connection(MYSQL **mysql_db, char *db_name,
 					      "%d %s",
 					      mysql_errno(*mysql_db),
 					      mysql_error(*mysql_db));
+					if ((db_host == db_info->host)
+					    && db_info->backup) {
+						db_host = db_info->backup;
+						continue;
+					}
 					rc = SLURM_ERROR;
 					break;
 				}
@@ -468,6 +469,30 @@ extern int mysql_cleanup()
 	return SLURM_SUCCESS;
 }
 
+extern int mysql_clear_results(MYSQL *mysql_db)
+{
+	MYSQL_RES *result = NULL;
+	int rc = 0;
+	do {
+		/* did current statement return data? */
+		if((result = mysql_store_result(mysql_db)))
+			mysql_free_result(result);
+		
+		/* more results? -1 = no, >0 = error, 0 = yes (keep looping) */
+		if ((rc = mysql_next_result(mysql_db)) > 0)
+			error("Could not execute statement %d %s\n",
+			      mysql_errno(mysql_db),
+			      mysql_error(mysql_db));
+	} while (rc == 0);
+
+	if(rc > 0) {
+		errno = rc;
+		return SLURM_ERROR;
+	} 
+
+	return SLURM_SUCCESS;
+}
+
 extern int mysql_db_query(MYSQL *mysql_db, char *query)
 {
 	if(!mysql_db)
@@ -476,13 +501,9 @@ extern int mysql_db_query(MYSQL *mysql_db, char *query)
 	slurm_mutex_lock(&mysql_lock);
 #endif
 	/* clear out the old results so we don't get a 2014 error */
-	_clear_results(mysql_db);		
+	mysql_clear_results(mysql_db);		
 //try_again:
 	if(mysql_query(mysql_db, query)) {
-		/* if(mysql_errno(mysql_db) == CR_SERVER_GONE_ERROR) { */
-/* 			/\* FIX ME: this means the connection went away *\/ */
-/* 		} */
-
 		error("mysql_query failed: %d %s\n%s",
 		      mysql_errno(mysql_db),
 		      mysql_error(mysql_db), query);
@@ -490,6 +511,14 @@ extern int mysql_db_query(MYSQL *mysql_db, char *query)
 #ifdef MYSQL_NOT_THREAD_SAFE
 		slurm_mutex_unlock(&mysql_lock);
 #endif
+		/* FIXME: If we get ER_LOCK_WAIT_TIMEOUT here we need
+		to restart the connections, but it appears restarting
+		the calling program is the only way to handle this.
+		If anyone in the future figures out a way to handle
+		this, super.  Until then we will need to restart the
+		calling program if you ever get this error. 
+		*/
+
 		return SLURM_ERROR;
 	}
 
@@ -502,7 +531,7 @@ extern int mysql_db_query(MYSQL *mysql_db, char *query)
 extern int mysql_db_ping(MYSQL *mysql_db)
 {
 	/* clear out the old results so we don't get a 2014 error */
-	_clear_results(mysql_db);		
+	mysql_clear_results(mysql_db);		
 	return mysql_ping(mysql_db);
 }
 
@@ -512,7 +541,7 @@ extern int mysql_db_commit(MYSQL *mysql_db)
 	slurm_mutex_lock(&mysql_lock);
 #endif
 	/* clear out the old results so we don't get a 2014 error */
-	_clear_results(mysql_db);		
+	mysql_clear_results(mysql_db);		
 	if(mysql_commit(mysql_db)) {
 		error("mysql_commit failed: %d %s",
 		      mysql_errno(mysql_db),
@@ -535,7 +564,7 @@ extern int mysql_db_rollback(MYSQL *mysql_db)
 	slurm_mutex_lock(&mysql_lock);
 #endif
 	/* clear out the old results so we don't get a 2014 error */
-	_clear_results(mysql_db);		
+	mysql_clear_results(mysql_db);		
 	if(mysql_rollback(mysql_db)) {
 		error("mysql_commit failed: %d %s",
 		      mysql_errno(mysql_db),
@@ -578,7 +607,7 @@ extern int mysql_db_query_check_after(MYSQL *mysql_db, char *query)
 	int rc = SLURM_SUCCESS;
 		
 	if((rc = mysql_db_query(mysql_db, query)) != SLURM_ERROR)  
-		rc = _clear_results(mysql_db);
+		rc = mysql_clear_results(mysql_db);
 	
 	return rc;
 }
@@ -655,7 +684,3 @@ extern int mysql_db_create_table(MYSQL *mysql_db, char *table_name,
 	return _mysql_make_table_current(mysql_db, table_name,
 					 first_field, ending);
 }
-
-
-#endif
-
diff --git a/src/database/mysql_common.h b/src/database/mysql_common.h
index b6aba93e9..e1b1e1114 100644
--- a/src/database/mysql_common.h
+++ b/src/database/mysql_common.h
@@ -7,7 +7,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -55,10 +56,6 @@
 #include <slurm/slurm_errno.h>
 #include "src/common/list.h"
 #include "src/common/xstring.h"
-
-#ifndef HAVE_MYSQL
-typedef void mysql_conn_t;
-#else
 #include <mysql.h>
 #include <mysqld_error.h>
 
@@ -70,6 +67,7 @@ typedef struct {
 } mysql_conn_t;
 
 typedef struct {
+	char *backup;	
 	uint32_t port;	
 	char *host;	
 	char *user;	
@@ -89,6 +87,7 @@ extern int mysql_get_db_connection(MYSQL **mysql_db, char *db_name,
 				   mysql_db_info_t *db_info);
 extern int mysql_close_db_connection(MYSQL **mysql_db);
 extern int mysql_cleanup();
+extern int mysql_clear_results(MYSQL *mysql_db);
 extern int mysql_db_query(MYSQL *mysql_db, char *query);
 extern int mysql_db_ping(MYSQL *mysql_db);
 extern int mysql_db_commit(MYSQL *mysql_db);
@@ -104,5 +103,3 @@ extern int mysql_db_create_table(MYSQL *mysql_db, char *table_name,
 
 
 #endif
-
-#endif
diff --git a/src/database/pgsql_common.c b/src/database/pgsql_common.c
index 819836e83..af20b8249 100644
--- a/src/database/pgsql_common.c
+++ b/src/database/pgsql_common.c
@@ -7,7 +7,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -43,8 +44,6 @@
 
 pthread_mutex_t pgsql_lock = PTHREAD_MUTEX_INITIALIZER;
 
-#ifdef HAVE_PGSQL
-
 extern int *destroy_pgsql_db_info(pgsql_db_info_t *db_info)
 {
 	if(db_info) {
@@ -384,7 +383,3 @@ extern int pgsql_db_make_table_current(PGconn *pgsql_db, char *table_name,
 	END_TIMER2("make table current");
 	return SLURM_SUCCESS;
 }
-
-
-#endif
-
diff --git a/src/database/pgsql_common.h b/src/database/pgsql_common.h
index 2762d57b6..2f01da72a 100644
--- a/src/database/pgsql_common.h
+++ b/src/database/pgsql_common.h
@@ -7,7 +7,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -55,10 +56,6 @@
 #include <slurm/slurm_errno.h>
 #include "src/slurmctld/slurmctld.h"
 #include "src/common/xstring.h"
-
-#ifndef HAVE_PGSQL
-typedef void pgsql_conn_t;
-#else
 #include <libpq-fe.h>
 
 typedef struct {
@@ -105,5 +102,3 @@ extern int pgsql_db_create_table(PGconn *pgsql_db,
 extern int pgsql_db_make_table_current(PGconn *pgsql_db, char *table_name,
 				       storage_field_t *fields);
 #endif
-
-#endif
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
index a8e77ec42..d1db14257 100644
--- a/src/plugins/Makefile.am
+++ b/src/plugins/Makefile.am
@@ -1 +1 @@
-SUBDIRS = accounting_storage auth checkpoint crypto jobacct_gather jobcomp mpi proctrack sched select switch task
+SUBDIRS = accounting_storage auth checkpoint crypto jobacct_gather jobcomp mpi priority proctrack sched select switch task topology
diff --git a/src/plugins/Makefile.in b/src/plugins/Makefile.in
index 633a61fdd..56cfa2b0a 100644
--- a/src/plugins/Makefile.in
+++ b/src/plugins/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -89,6 +93,10 @@ 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@
@@ -248,7 +256,7 @@ target_os = @target_os@
 target_vendor = @target_vendor@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = accounting_storage auth checkpoint crypto jobacct_gather jobcomp mpi proctrack sched select switch task
+SUBDIRS = accounting_storage auth checkpoint crypto jobacct_gather jobcomp mpi priority proctrack sched select switch task topology
 all: all-recursive
 
 .SUFFIXES:
diff --git a/src/plugins/accounting_storage/Makefile.in b/src/plugins/accounting_storage/Makefile.in
index 888063d7b..b7f8ec835 100644
--- a/src/plugins/accounting_storage/Makefile.in
+++ b/src/plugins/accounting_storage/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/accounting_storage/filetxt/Makefile.in b/src/plugins/accounting_storage/filetxt/Makefile.in
index dc782ffc8..f4b80875b 100644
--- a/src/plugins/accounting_storage/filetxt/Makefile.in
+++ b/src/plugins/accounting_storage/filetxt/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -112,6 +116,10 @@ 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@
diff --git a/src/plugins/accounting_storage/filetxt/accounting_storage_filetxt.c b/src/plugins/accounting_storage/filetxt/accounting_storage_filetxt.c
index 621f93008..c08ad1853 100644
--- a/src/plugins/accounting_storage/filetxt/accounting_storage_filetxt.c
+++ b/src/plugins/accounting_storage/filetxt/accounting_storage_filetxt.c
@@ -8,7 +8,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -298,6 +299,12 @@ extern int acct_storage_p_add_wckeys(void *db_conn, uint32_t uid,
 	return SLURM_SUCCESS;
 }
 
+extern int acct_storage_p_add_reservation(void *db_conn, 
+					  acct_reservation_rec_t *resv)
+{
+	return SLURM_SUCCESS;
+}
+
 extern List acct_storage_p_modify_users(void *db_conn, uint32_t uid,
 				       acct_user_cond_t *user_q,
 				       acct_user_rec_t *user)
@@ -340,6 +347,12 @@ extern List acct_storage_p_modify_wckeys(void *db_conn, uint32_t uid,
 	return SLURM_SUCCESS;
 }
 
+extern int acct_storage_p_modify_reservation(void *db_conn, 
+					     acct_reservation_rec_t *resv)
+{
+	return SLURM_SUCCESS;
+}
+
 extern List acct_storage_p_remove_users(void *db_conn, uint32_t uid,
 				       acct_user_cond_t *user_q)
 {
@@ -383,6 +396,12 @@ extern List acct_storage_p_remove_wckeys(void *db_conn, uint32_t uid,
 	return NULL;
 }
 
+extern int acct_storage_p_remove_reservation(void *db_conn, 
+					     acct_reservation_rec_t *resv)
+{
+	return SLURM_SUCCESS;
+}
+
 extern List acct_storage_p_get_users(void *db_conn, uid_t uid,
 				     acct_user_cond_t *user_q)
 {
@@ -401,6 +420,11 @@ extern List acct_storage_p_get_clusters(void *db_conn, uid_t uid,
 	return NULL;
 }
 
+extern List acct_storage_p_get_config(void *db_conn)
+{
+	return NULL;
+}
+
 extern List acct_storage_p_get_associations(void *db_conn, uid_t uid,
 					    acct_association_cond_t *assoc_q)
 {
@@ -419,6 +443,12 @@ extern List acct_storage_p_get_wckeys(void *db_conn, uid_t uid,
 	return NULL;
 }
 
+extern List acct_storage_p_get_reservations(void *mysql_conn, uid_t uid,
+					    acct_reservation_cond_t *resv_cond)
+{
+	return NULL;
+}
+
 extern List acct_storage_p_get_txn(void *db_conn, uid_t uid,
 				   acct_txn_cond_t *txn_cond)
 {
@@ -435,7 +465,8 @@ extern int acct_storage_p_get_usage(void *db_conn, uid_t uid,
 }
 
 extern int acct_storage_p_roll_usage(void *db_conn, 
-				     time_t sent_start)
+				     time_t sent_start, time_t sent_end,
+				     uint16_t archive_data)
 {
 	int rc = SLURM_SUCCESS;
 
@@ -466,6 +497,7 @@ extern int clusteracct_storage_p_register_ctld(void *db_conn,
 
 extern int clusteracct_storage_p_cluster_procs(void *db_conn,
 					       char *cluster,
+					       char *cluster_nodes,
 					       uint32_t procs,
 					       time_t event_time)
 {
@@ -489,7 +521,7 @@ extern int jobacct_storage_p_job_start(void *db_conn, char *cluster_name,
 	int	i,
 		rc=SLURM_SUCCESS;
 	char	buf[BUFFER_SIZE], *account, *nodes;
-	char    *jname = NULL, *wckey = NULL;
+	char    *jname = NULL;
 	long	priority;
 	int track_steps = 0;
 
@@ -512,29 +544,11 @@ extern int jobacct_storage_p_job_start(void *db_conn, char *cluster_name,
 		   -1L : (long) job_ptr->priority;
 
 	if (job_ptr->name && job_ptr->name[0]) {
-		char *temp = NULL;
-		/* first set the jname to the job_ptr->name */
 		jname = xstrdup(job_ptr->name);
-		/* then grep for " since that is the delimiter for
-		   the wckey */
-		temp = strchr(jname, '\"');
-		if(temp) {
-			/* if we have a wckey set the " to NULL to
-			 * end the jname */
-			temp[0] = '\0';
-			/* increment and copy the remainder */
-			temp++;
-			wckey = xstrdup(temp);
-		}
-
 		for (i=0; jname[i]; i++) 
 			if (isspace(jname[i]))
 				jname[i]='_';
-	}
-
-	if(!jname || !jname[0]) {
-		/* free jname if something is allocated here */
-		xfree(jname);
+	} else {
 		jname = xstrdup("allocation");
 		track_steps = 1;
 	}
@@ -563,7 +577,6 @@ extern int jobacct_storage_p_job_start(void *db_conn, char *cluster_name,
 	rc = _print_record(job_ptr, job_ptr->start_time, buf);
 	
 	xfree(jname);
-	xfree(wckey);
 	return rc;
 }
 
@@ -729,7 +742,7 @@ extern int jobacct_storage_p_step_complete(void *db_conn,
 
 	if (jobacct == NULL) {
 		/* JobAcctGather=jobacct_gather/none, no data to process */
-		bzero(&dummy_jobacct, sizeof(dummy_jobacct));
+		memset(&dummy_jobacct, 0, sizeof(dummy_jobacct));
 		jobacct = &dummy_jobacct;
 	}
 	
diff --git a/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.c b/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.c
index cc4cc6d0d..f0245c8d5 100644
--- a/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.c
+++ b/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.c
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -250,11 +251,15 @@ static jobacct_step_rec_t *_create_jobacct_step_rec(
 {
 	jobacct_step_rec_t *jobacct_step = create_jobacct_step_rec();
 	
-	jobacct_step->jobid = filetxt_step->header.jobnum;
 	jobacct_step->elapsed = filetxt_step->elapsed;
 	jobacct_step->end = filetxt_step->header.timestamp;
 	jobacct_step->exitcode = filetxt_step->exitcode;
 	jobacct_step->ncpus = filetxt_step->ncpus;
+	if(filetxt_step->nodes) {
+		hostlist_t hl = hostlist_create(filetxt_step->nodes);
+		jobacct_step->nnodes = hostlist_count(hl);
+		hostlist_destroy(hl);
+	}
 	jobacct_step->nodes = xstrdup(filetxt_step->nodes);
 	jobacct_step->requid = filetxt_step->requid;
 	memcpy(&jobacct_step->sacct, &filetxt_step->sacct, sizeof(sacct_t));
@@ -315,6 +320,11 @@ no_cond:
 	jobacct_job->partition = xstrdup(filetxt_job->header.partition);
 	jobacct_job->req_cpus = filetxt_job->ncpus;
 	jobacct_job->alloc_cpus = filetxt_job->ncpus;
+	if(filetxt_job->nodes) {
+		hostlist_t hl = hostlist_create(filetxt_job->nodes);
+		jobacct_job->alloc_nodes = hostlist_count(hl);
+		hostlist_destroy(hl);
+	}
 	jobacct_job->nodes = xstrdup(filetxt_job->nodes);
 	jobacct_job->priority = filetxt_job->priority;
 	jobacct_job->requid = filetxt_job->requid;
@@ -328,8 +338,14 @@ no_cond:
 	if(filetxt_job->steps) {
 		itr = list_iterator_create(filetxt_job->steps);
 		while((filetxt_step = list_next(itr))) {
-			list_append(jobacct_job->steps,
-				    _create_jobacct_step_rec(filetxt_step));
+			jobacct_step_rec_t *step =
+				_create_jobacct_step_rec(filetxt_step);
+			if(step) {
+				step->job_ptr = jobacct_job;
+				if(!jobacct_job->first_step_ptr)
+					jobacct_job->first_step_ptr = step;
+				list_append(jobacct_job->steps, step);
+			}
 		}
 		list_iterator_destroy(itr);
 	}
diff --git a/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.h b/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.h
index 62306c91f..f7186a3db 100644
--- a/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.h
+++ b/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.h
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/accounting_storage/mysql/Makefile.am b/src/plugins/accounting_storage/mysql/Makefile.am
index c7414d3eb..78233a8d3 100644
--- a/src/plugins/accounting_storage/mysql/Makefile.am
+++ b/src/plugins/accounting_storage/mysql/Makefile.am
@@ -6,6 +6,7 @@ PLUGIN_FLAGS = -module -avoid-version --export-dynamic
 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
 
+if WITH_MYSQL
 pkglib_LTLIBRARIES = accounting_storage_mysql.la
 
 # Mysql storage plugin.
@@ -20,3 +21,8 @@ accounting_storage_mysql_la_LIBADD = \
 force:
 $(accounting_storage_mysql_la_LIBADD) : force
 	@cd `dirname $@` && $(MAKE) `basename $@`
+else
+EXTRA_accounting_storage_mysql_la_SOURCES = accounting_storage_mysql.c \
+		mysql_jobacct_process.c mysql_jobacct_process.h \
+		mysql_rollup.c mysql_rollup.h
+endif
diff --git a/src/plugins/accounting_storage/mysql/Makefile.in b/src/plugins/accounting_storage/mysql/Makefile.in
index fed89e5f1..8b291bbf2 100644
--- a/src/plugins/accounting_storage/mysql/Makefile.in
+++ b/src/plugins/accounting_storage/mysql/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,19 +81,25 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)"
 pkglibLTLIBRARIES_INSTALL = $(INSTALL)
 LTLIBRARIES = $(pkglib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-accounting_storage_mysql_la_DEPENDENCIES =  \
-	$(top_builddir)/src/database/libslurm_mysql.la \
-	$(am__DEPENDENCIES_1)
-am_accounting_storage_mysql_la_OBJECTS =  \
-	accounting_storage_mysql_la-accounting_storage_mysql.lo \
-	accounting_storage_mysql_la-mysql_jobacct_process.lo \
-	accounting_storage_mysql_la-mysql_rollup.lo
+@WITH_MYSQL_TRUE@accounting_storage_mysql_la_DEPENDENCIES = $(top_builddir)/src/database/libslurm_mysql.la \
+@WITH_MYSQL_TRUE@	$(am__DEPENDENCIES_1)
+am__accounting_storage_mysql_la_SOURCES_DIST =  \
+	accounting_storage_mysql.c mysql_jobacct_process.c \
+	mysql_jobacct_process.h mysql_rollup.c mysql_rollup.h
+@WITH_MYSQL_TRUE@am_accounting_storage_mysql_la_OBJECTS = accounting_storage_mysql_la-accounting_storage_mysql.lo \
+@WITH_MYSQL_TRUE@	accounting_storage_mysql_la-mysql_jobacct_process.lo \
+@WITH_MYSQL_TRUE@	accounting_storage_mysql_la-mysql_rollup.lo
+am__EXTRA_accounting_storage_mysql_la_SOURCES_DIST =  \
+	accounting_storage_mysql.c mysql_jobacct_process.c \
+	mysql_jobacct_process.h mysql_rollup.c mysql_rollup.h
 accounting_storage_mysql_la_OBJECTS =  \
 	$(am_accounting_storage_mysql_la_OBJECTS)
 accounting_storage_mysql_la_LINK = $(LIBTOOL) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(accounting_storage_mysql_la_CFLAGS) $(CFLAGS) \
 	$(accounting_storage_mysql_la_LDFLAGS) $(LDFLAGS) -o $@
+@WITH_MYSQL_TRUE@am_accounting_storage_mysql_la_rpath = -rpath \
+@WITH_MYSQL_TRUE@	$(pkglibdir)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
 depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
 am__depfiles_maybe = depfiles
@@ -102,8 +112,10 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(accounting_storage_mysql_la_SOURCES)
-DIST_SOURCES = $(accounting_storage_mysql_la_SOURCES)
+SOURCES = $(accounting_storage_mysql_la_SOURCES) \
+	$(EXTRA_accounting_storage_mysql_la_SOURCES)
+DIST_SOURCES = $(am__accounting_storage_mysql_la_SOURCES_DIST) \
+	$(am__EXTRA_accounting_storage_mysql_la_SOURCES_DIST)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -117,6 +129,10 @@ 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@
@@ -279,17 +295,21 @@ top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 PLUGIN_FLAGS = -module -avoid-version --export-dynamic
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
-pkglib_LTLIBRARIES = accounting_storage_mysql.la
+@WITH_MYSQL_TRUE@pkglib_LTLIBRARIES = accounting_storage_mysql.la
 
 # Mysql storage plugin.
-accounting_storage_mysql_la_SOURCES = accounting_storage_mysql.c \
-		mysql_jobacct_process.c mysql_jobacct_process.h \
-		mysql_rollup.c mysql_rollup.h
+@WITH_MYSQL_TRUE@accounting_storage_mysql_la_SOURCES = accounting_storage_mysql.c \
+@WITH_MYSQL_TRUE@		mysql_jobacct_process.c mysql_jobacct_process.h \
+@WITH_MYSQL_TRUE@		mysql_rollup.c mysql_rollup.h
 
-accounting_storage_mysql_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
-accounting_storage_mysql_la_CFLAGS = $(MYSQL_CFLAGS)
-accounting_storage_mysql_la_LIBADD = \
-	$(top_builddir)/src/database/libslurm_mysql.la $(MYSQL_LIBS)
+@WITH_MYSQL_TRUE@accounting_storage_mysql_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+@WITH_MYSQL_TRUE@accounting_storage_mysql_la_CFLAGS = $(MYSQL_CFLAGS)
+@WITH_MYSQL_TRUE@accounting_storage_mysql_la_LIBADD = \
+@WITH_MYSQL_TRUE@	$(top_builddir)/src/database/libslurm_mysql.la $(MYSQL_LIBS)
+
+@WITH_MYSQL_FALSE@EXTRA_accounting_storage_mysql_la_SOURCES = accounting_storage_mysql.c \
+@WITH_MYSQL_FALSE@		mysql_jobacct_process.c mysql_jobacct_process.h \
+@WITH_MYSQL_FALSE@		mysql_rollup.c mysql_rollup.h
 
 all: all-am
 
@@ -352,7 +372,7 @@ clean-pkglibLTLIBRARIES:
 	  rm -f "$${dir}/so_locations"; \
 	done
 accounting_storage_mysql.la: $(accounting_storage_mysql_la_OBJECTS) $(accounting_storage_mysql_la_DEPENDENCIES) 
-	$(accounting_storage_mysql_la_LINK) -rpath $(pkglibdir) $(accounting_storage_mysql_la_OBJECTS) $(accounting_storage_mysql_la_LIBADD) $(LIBS)
+	$(accounting_storage_mysql_la_LINK) $(am_accounting_storage_mysql_la_rpath) $(accounting_storage_mysql_la_OBJECTS) $(accounting_storage_mysql_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -592,9 +612,9 @@ uninstall-am: uninstall-pkglibLTLIBRARIES
 	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
 
 
-force:
-$(accounting_storage_mysql_la_LIBADD) : force
-	@cd `dirname $@` && $(MAKE) `basename $@`
+@WITH_MYSQL_TRUE@force:
+@WITH_MYSQL_TRUE@$(accounting_storage_mysql_la_LIBADD) : force
+@WITH_MYSQL_TRUE@	@cd `dirname $@` && $(MAKE) `basename $@`
 # 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/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c b/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c
index 9820488c4..d3e2ecca8 100644
--- a/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c
+++ b/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c
@@ -4,12 +4,13 @@
  *  $Id: accounting_storage_mysql.c 13061 2008-01-22 21:23:56Z da $
  *****************************************************************************
  *  Copyright (C) 2004-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 Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -87,18 +88,13 @@ const char plugin_name[] = "Accounting storage MYSQL plugin";
 const char plugin_type[] = "accounting_storage/mysql";
 const uint32_t plugin_version = 100;
 
-#ifdef HAVE_MYSQL
-
 static mysql_db_info_t *mysql_db_info = NULL;
 static char *mysql_db_name = NULL;
 static time_t global_last_rollup = 0;
 static pthread_mutex_t rollup_lock = PTHREAD_MUTEX_INITIALIZER;
 
-#define DEFAULT_ACCT_DB "slurm_acct_db"
 #define DELETE_SEC_BACK 86400
 
-
-
 char *acct_coord_table = "acct_coord_table";
 char *acct_table = "acct_table";
 char *assoc_day_table = "assoc_day_usage_table";
@@ -113,6 +109,7 @@ char *event_table = "cluster_event_table";
 char *job_table = "job_table";
 char *last_ran_table = "last_ran_table";
 char *qos_table = "qos_table";
+char *resv_table = "resv_table";
 char *step_table = "step_table";
 char *txn_table = "txn_table";
 char *user_table = "user_table";
@@ -252,9 +249,10 @@ static uint32_t _get_wckeyid(mysql_conn_t *mysql_conn, char **name,
 		/* since we are unable to rely on uids here (someone could
 		   not have there uid in the system yet) we must
 		   first get the user name from the associd */
-		if(!(user = _get_user_from_associd(mysql_conn, associd)))
+		if(!(user = _get_user_from_associd(mysql_conn, associd))) {
+			error("No user for associd %u", associd);
 			goto no_wckeyid;
-
+		}
 		/* get the default key */
 		if(!*name) {
 			acct_user_rec_t user_rec;
@@ -262,10 +260,13 @@ static uint32_t _get_wckeyid(mysql_conn_t *mysql_conn, char **name,
 			user_rec.uid = NO_VAL;
 			user_rec.name = user;
 			if(assoc_mgr_fill_in_user(mysql_conn, &user_rec,
-						  1) != SLURM_SUCCESS) {
-				error("No user by name of %s", user);
+						  1, NULL) != SLURM_SUCCESS) {
+				error("No user by name of %s assoc %u",
+				      user, associd);
+				xfree(user);
 				goto no_wckeyid;
 			}
+			
 			if(user_rec.default_wckey)
 				*name = xstrdup_printf("*%s", 
 						       user_rec.default_wckey);
@@ -279,7 +280,8 @@ static uint32_t _get_wckeyid(mysql_conn_t *mysql_conn, char **name,
 		wckey_rec.user = user;
 		wckey_rec.cluster = cluster;
 		if(assoc_mgr_fill_in_wckey(mysql_conn, &wckey_rec,
-					   1, NULL) != SLURM_SUCCESS) {
+					   ACCOUNTING_ENFORCE_WCKEYS,
+					   NULL) != SLURM_SUCCESS) {
 			List wckey_list = NULL;
 			acct_wckey_rec_t *wckey_ptr = NULL;
 						
@@ -290,7 +292,7 @@ static uint32_t _get_wckeyid(mysql_conn_t *mysql_conn, char **name,
 			wckey_ptr->user = xstrdup(user);
 			wckey_ptr->cluster = xstrdup(cluster);
 			list_append(wckey_list, wckey_ptr);
-			/* info("adding wckey '%s' '%s' '%s'",  */
+/* 			info("adding wckey '%s' '%s' '%s'", */
 /* 				     wckey_ptr->name, wckey_ptr->user, */
 /* 				     wckey_ptr->cluster); */
 			/* we have already checked to make
@@ -304,7 +306,8 @@ static uint32_t _get_wckeyid(mysql_conn_t *mysql_conn, char **name,
 				acct_storage_p_commit(mysql_conn, 1);
 			/* If that worked lets get it */
 			assoc_mgr_fill_in_wckey(mysql_conn, &wckey_rec,
-						1, NULL);
+						ACCOUNTING_ENFORCE_WCKEYS,
+						NULL);
 				
 			list_destroy(wckey_list);
 		}
@@ -478,14 +481,15 @@ static int _setup_association_limits(acct_association_rec_t *assoc,
 	if(!assoc)
 		return SLURM_ERROR;
 	
-	if((int)assoc->fairshare >= 0) {
+	if((int)assoc->shares_raw >= 0) {
 		xstrcat(*cols, ", fairshare");
-		xstrfmtcat(*vals, ", %u", assoc->fairshare);
-		xstrfmtcat(*extra, ", fairshare=%u", assoc->fairshare);
-	} else if (((int)assoc->fairshare == INFINITE) || get_fs) {
+		xstrfmtcat(*vals, ", %u", assoc->shares_raw);
+		xstrfmtcat(*extra, ", fairshare=%u", assoc->shares_raw);
+	} else if (((int)assoc->shares_raw == INFINITE) || get_fs) {
 		xstrcat(*cols, ", fairshare");
 		xstrcat(*vals, ", 1");
-		xstrcat(*extra, ", fairshare=1");		
+		xstrcat(*extra, ", fairshare=1");
+		assoc->shares_raw = 1;
 	} 
 
 	if((int)assoc->grp_cpu_mins >= 0) {
@@ -854,10 +858,77 @@ static int _setup_qos_limits(acct_qos_rec_t *qos,
 			   qos->job_flags);
 	}
 
+	if((int)qos->usage_factor >= 0) {
+		xstrcat(*cols, ", usage_factor");
+		xstrfmtcat(*vals, ", %f", qos->usage_factor);
+		xstrfmtcat(*extra, ", usage_factor=%f", qos->usage_factor);
+	} else if((int)qos->usage_factor == INFINITE) {
+		xstrcat(*cols, ", usage_factor");
+		xstrcat(*vals, ", 1");
+		xstrcat(*extra, ", usage_factor=1");
+	}
+
 	return SLURM_SUCCESS;
 
 }
 
+static int _setup_resv_limits(acct_reservation_rec_t *resv,
+			      char **cols, char **vals,
+			      char **extra)
+{	
+	/* strip off the action item from the flags */
+
+	if(resv->assocs) {
+		xstrcat(*cols, ", assoclist");
+		xstrfmtcat(*vals, ", \"%s\"", resv->assocs);
+		xstrfmtcat(*extra, ", assoclist=\"%s\"", resv->assocs);
+	}
+
+	if(resv->cpus != (uint32_t)NO_VAL) {
+		xstrcat(*cols, ", cpus");
+		xstrfmtcat(*vals, ", %u", resv->cpus);
+		xstrfmtcat(*extra, ", cpus=%u", resv->cpus);		
+	}
+	
+	if(resv->flags != (uint16_t)NO_VAL) {
+		xstrcat(*cols, ", flags");
+		xstrfmtcat(*vals, ", %u", resv->flags);
+		xstrfmtcat(*extra, ", flags=%u", resv->flags);		
+	}
+
+	if(resv->name) {
+		xstrcat(*cols, ", name");
+		xstrfmtcat(*vals, ", \"%s\"", resv->name);
+		xstrfmtcat(*extra, ", name=\"%s\"", resv->name);
+	}
+	
+	if(resv->nodes) {
+		xstrcat(*cols, ", nodelist");
+		xstrfmtcat(*vals, ", \"%s\"", resv->nodes);
+		xstrfmtcat(*extra, ", nodelist=\"%s\"", resv->nodes);
+	}
+	
+	if(resv->node_inx) {
+		xstrcat(*cols, ", node_inx");
+		xstrfmtcat(*vals, ", \"%s\"", resv->node_inx);
+		xstrfmtcat(*extra, ", node_inx=\"%s\"", resv->node_inx);
+	}
+	
+	if(resv->time_end) {
+		xstrcat(*cols, ", end");
+		xstrfmtcat(*vals, ", %u", resv->time_end);
+		xstrfmtcat(*extra, ", end=%u", resv->time_end);		
+	}
+
+	if(resv->time_start) {
+		xstrcat(*cols, ", start");
+		xstrfmtcat(*vals, ", %u", resv->time_start);
+		xstrfmtcat(*extra, ", start=%u", resv->time_start);		
+	}
+
+	
+	return SLURM_SUCCESS;
+}
 /* when doing a select on this all the select should have a prefix of
  * t1. */
 static int _setup_association_cond_limits(acct_association_cond_t *assoc_cond,
@@ -1294,38 +1365,159 @@ static int _setup_wckey_cond_limits(acct_wckey_cond_t *wckey_cond,
 	return set;
 }
 
+static int _setup_resv_cond_limits(acct_reservation_cond_t *resv_cond,
+				   char **extra)
+{
+	int set = 0;
+	ListIterator itr = NULL;
+	char *object = NULL;
+	char *prefix = "t1";
+	time_t now = time(NULL);
+
+	if(!resv_cond)
+		return 0;
+
+	if(resv_cond->cluster_list && list_count(resv_cond->cluster_list)) {
+		set = 0;
+		if(*extra)
+			xstrcat(*extra, " && (");
+		else
+			xstrcat(*extra, " where (");
+		itr = list_iterator_create(resv_cond->cluster_list);
+		while((object = list_next(itr))) {
+			if(set) 
+				xstrcat(*extra, " || ");
+			xstrfmtcat(*extra, "%s.cluster=\"%s\"", prefix, object);
+			set = 1;
+		}
+		list_iterator_destroy(itr);
+		xstrcat(*extra, ")");
+	}
+
+	if(resv_cond->id_list && list_count(resv_cond->id_list)) {
+		set = 0;
+		if(*extra)
+			xstrcat(*extra, " && (");
+		else
+			xstrcat(*extra, " where (");
+		itr = list_iterator_create(resv_cond->id_list);
+		while((object = list_next(itr))) {
+			if(set) 
+				xstrcat(*extra, " || ");
+			xstrfmtcat(*extra, "%s.id=%s", prefix, object);
+			set = 1;
+		}
+		list_iterator_destroy(itr);
+		xstrcat(*extra, ")");
+	}
+	
+	if(resv_cond->name_list && list_count(resv_cond->name_list)) {
+		set = 0;
+		if(*extra)
+			xstrcat(*extra, " && (");
+		else
+			xstrcat(*extra, " where (");
+		itr = list_iterator_create(resv_cond->name_list);
+		while((object = list_next(itr))) {
+			if(set) 
+				xstrcat(*extra, " || ");
+			xstrfmtcat(*extra, "%s.name=\"%s\"", prefix, object);
+			set = 1;
+		}
+		list_iterator_destroy(itr);
+		xstrcat(*extra, ")");
+	}
+
+	if(resv_cond->time_start) {
+		if(!resv_cond->time_end)
+			resv_cond->time_end = now;
+
+		if(*extra)
+			xstrcat(*extra, " && (");
+		else
+			xstrcat(*extra, " where (");
+		xstrfmtcat(*extra, 
+			   "(t1.start < %d "
+			   "&& (t1.end >= %d || t1.end = 0)))",
+			   resv_cond->time_end, resv_cond->time_start);
+	} else if(resv_cond->time_end) {
+		if(*extra)
+			xstrcat(*extra, " && (");
+		else
+			xstrcat(*extra, " where (");
+		xstrfmtcat(*extra, 
+			   "(t1.start < %d))", resv_cond->time_end);
+	}
+
+
+	return set;
+}
+
 static uint32_t _get_parent_id(
-       mysql_conn_t *mysql_conn, char *parent, char *cluster)
+	mysql_conn_t *mysql_conn, char *parent, char *cluster)
 {
-       uint32_t parent_id = 0;
-       MYSQL_RES *result = NULL;
-       MYSQL_ROW row;
-       char *query = NULL;
-       
-       xassert(parent); 
-       xassert(cluster);
-
-       query = xstrdup_printf("select id from %s where user='' "
-                              "and deleted = 0 and acct=\"%s\" "
-                              "and cluster=\"%s\";", 
-                              assoc_table, parent, cluster);
-       debug4("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
-       
-       if(!(result = mysql_db_query_ret(mysql_conn->db_conn, query, 1))) {
-               xfree(query);
-               return 0;
-       }
-       xfree(query);
-
-       if((row = mysql_fetch_row(result))) {
-               if(row[0])
-                       parent_id = atoi(row[0]);       
-       } else 
-               error("no association for parent %s on cluster %s",
-                     parent, cluster);
-       mysql_free_result(result);
-
-       return parent_id;
+	uint32_t parent_id = 0;
+	MYSQL_RES *result = NULL;
+	MYSQL_ROW row;
+	char *query = NULL;
+	
+	xassert(parent); 
+	xassert(cluster);
+
+	query = xstrdup_printf("select id from %s where user='' "
+			       "and deleted = 0 and acct=\"%s\" "
+			       "and cluster=\"%s\";", 
+			       assoc_table, parent, cluster);
+	debug4("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
+	
+	if(!(result = mysql_db_query_ret(mysql_conn->db_conn, query, 1))) {
+		xfree(query);
+		return 0;
+	}
+	xfree(query);
+
+	if((row = mysql_fetch_row(result))) {
+		if(row[0])
+			parent_id = atoi(row[0]);	
+	} else 
+		error("no association for parent %s on cluster %s",
+		      parent, cluster);
+	mysql_free_result(result);
+
+	return parent_id;
+}
+
+static int _set_assoc_lft_rgt(
+	mysql_conn_t *mysql_conn, acct_association_rec_t *assoc)
+{
+	MYSQL_RES *result = NULL;
+	MYSQL_ROW row;
+	char *query = NULL;
+	int rc = SLURM_ERROR;
+
+	xassert(assoc->id);
+
+	query = xstrdup_printf("select lft, rgt from %s where id=%u;", 
+			       assoc_table, assoc->id);
+	debug4("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
+	
+	if(!(result = mysql_db_query_ret(mysql_conn->db_conn, query, 1))) {
+		xfree(query);
+		return 0;
+	}
+	xfree(query);
+
+	if((row = mysql_fetch_row(result))) {
+		if(row[0])
+			assoc->lft = atoi(row[0]);	
+		if(row[1])
+			assoc->rgt = atoi(row[1]);	
+		rc = SLURM_SUCCESS;
+	} else 
+		error("no association (%u)", assoc->id);
+	mysql_free_result(result);
+
+	return rc;
 }
 
 /* This function will take the object given and free it later so it
@@ -1818,7 +2010,7 @@ static int _modify_unset_users(mysql_conn_t *mysql_conn,
 				continue;
 			}
 			/* We do want to send all user accounts though */
-			mod_assoc->fairshare = NO_VAL;
+			mod_assoc->shares_raw = NO_VAL;
 			if(row[ASSOC_PART][0]) { 
 				// see if there is a partition name
 				object = xstrdup_printf(
@@ -2398,10 +2590,9 @@ static int _get_db_index(MYSQL *db_conn,
    user or not.
 */
 static int _get_usage_for_list(mysql_conn_t *mysql_conn,
-			    slurmdbd_msg_type_t type, List object_list, 
-			    time_t start, time_t end)
+			       slurmdbd_msg_type_t type, List object_list, 
+			       time_t start, time_t end)
 {
-#ifdef HAVE_MYSQL
 	int rc = SLURM_SUCCESS;
 	int i=0;
 	MYSQL_RES *result = NULL;
@@ -2513,7 +2704,7 @@ static int _get_usage_for_list(mysql_conn_t *mysql_conn,
 		query = xstrdup_printf(
 			"select %s from %s "
 			"where (period_start < %d && period_start >= %d) "
-			"&& %s order by id, period_start;",
+			"&& (%s) order by id, period_start;",
 			tmp, my_usage_table, end, start, id_str);
 		break;
 	default:
@@ -2607,9 +2798,6 @@ static int _get_usage_for_list(mysql_conn_t *mysql_conn,
 
 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 static mysql_db_info_t *_mysql_acct_create_db_info()
@@ -2617,10 +2805,12 @@ static mysql_db_info_t *_mysql_acct_create_db_info()
 	mysql_db_info_t *db_info = xmalloc(sizeof(mysql_db_info_t));
 	db_info->port = slurm_get_accounting_storage_port();
 	if(!db_info->port) {
-		db_info->port = 3306;
+		db_info->port = DEFAULT_MYSQL_PORT;
 		slurm_set_accounting_storage_port(db_info->port);
 	}
 	db_info->host = slurm_get_accounting_storage_host();	
+	db_info->backup = slurm_get_accounting_storage_backup_host();
+	
 	db_info->user = slurm_get_accounting_storage_user();	
 	db_info->pass = slurm_get_accounting_storage_pass();	
 	return db_info;
@@ -2695,8 +2885,9 @@ static int _mysql_acct_check_tables(MYSQL *db_conn)
 		{ "deleted", "tinyint default 0" },
 		{ "name", "tinytext not null" },
 		{ "control_host", "tinytext not null default ''" },
-		{ "control_port", "mediumint not null default 0" },
-		{ "rpc_version", "mediumint not null default 0" },
+		{ "control_port", "int unsigned not null default 0" },
+		{ "rpc_version", "smallint unsigned not null default 0" },
+		{ "classification", "smallint unsigned default 0" },
 		{ NULL, NULL}		
 	};
 
@@ -2709,6 +2900,7 @@ static int _mysql_acct_check_tables(MYSQL *db_conn)
 		{ "cpu_count", "int default 0" },
 		{ "alloc_cpu_secs", "bigint default 0" },
 		{ "down_cpu_secs", "bigint default 0" },
+		{ "pdown_cpu_secs", "bigint default 0" },
 		{ "idle_cpu_secs", "bigint default 0" },
 		{ "resv_cpu_secs", "bigint default 0" },
 		{ "over_cpu_secs", "bigint default 0" },
@@ -2719,19 +2911,21 @@ static int _mysql_acct_check_tables(MYSQL *db_conn)
 		{ "node_name", "tinytext default '' not null" },
 		{ "cluster", "tinytext not null" },
 		{ "cpu_count", "int not null" },
+		{ "state", "smallint default 0 not null" },
 		{ "period_start", "int unsigned not null" },
 		{ "period_end", "int unsigned default 0 not null" },
 		{ "reason", "tinytext not null" },
+		{ "cluster_nodes", "text not null default ''" },
 		{ NULL, NULL}		
 	};
 
 	storage_field_t job_table_fields[] = {
 		{ "id", "int not null auto_increment" },
 		{ "deleted", "tinyint default 0" },
-		{ "jobid", "mediumint unsigned not null" },
-		{ "associd", "mediumint unsigned not null" },
+		{ "jobid", "int unsigned not null" },
+		{ "associd", "int unsigned not null" },
 		{ "wckey", "tinytext not null default ''" },
-		{ "wckeyid", "mediumint unsigned not null" },
+		{ "wckeyid", "int unsigned not null" },
 		{ "uid", "smallint unsigned not null" },
 		{ "gid", "smallint unsigned not null" },
 		{ "cluster", "tinytext not null" },
@@ -2743,16 +2937,20 @@ static int _mysql_acct_check_tables(MYSQL *db_conn)
 		{ "start", "int unsigned default 0 not null" },
 		{ "end", "int unsigned default 0 not null" },
 		{ "suspended", "int unsigned default 0 not null" },
+		{ "timelimit", "int unsigned default 0 not null" },
 		{ "name", "tinytext not null" }, 
 		{ "track_steps", "tinyint not null" },
 		{ "state", "smallint not null" }, 
 		{ "comp_code", "int default 0 not null" },
 		{ "priority", "int not null" },
-		{ "req_cpus", "mediumint unsigned not null" }, 
-		{ "alloc_cpus", "mediumint unsigned not null" }, 
+		{ "req_cpus", "int unsigned not null" }, 
+		{ "alloc_cpus", "int unsigned not null" }, 
+		{ "alloc_nodes", "int unsigned not null" }, 
 		{ "nodelist", "text" },
+		{ "node_inx", "text" },
 		{ "kill_requid", "smallint default -1 not null" },
 		{ "qos", "smallint default 0" },
+		{ "resvid", "int unsigned not null" },
 		{ NULL, NULL}
 	};
 
@@ -2786,6 +2984,22 @@ static int _mysql_acct_check_tables(MYSQL *db_conn)
 		{ "preemptees", "text not null default ''" },
 		{ "preemptors", "text not null default ''" },
 		{ "priority", "int default 0" },
+		{ "usage_factor", "float default 1.0 not null" },
+		{ NULL, NULL}		
+	};
+
+	storage_field_t resv_table_fields[] = {
+		{ "id", "int unsigned default 0 not null" },
+		{ "name", "text not null" },
+		{ "cluster", "text not null" },
+		{ "deleted", "tinyint default 0" },
+		{ "cpus", "int unsigned not null" },
+		{ "assoclist", "text not null default ''" },
+		{ "nodelist", "text not null default ''" },
+		{ "node_inx", "text not null default ''" },
+		{ "start", "int unsigned default 0 not null"},
+		{ "end", "int unsigned default 0 not null" },
+		{ "flags", "smallint default 0 not null" },
 		{ NULL, NULL}		
 	};
 
@@ -2798,36 +3012,40 @@ static int _mysql_acct_check_tables(MYSQL *db_conn)
 		{ "suspended", "int unsigned default 0 not null" },
 		{ "name", "text not null" },
 		{ "nodelist", "text not null" },
+		{ "node_inx", "text" },
 		{ "state", "smallint not null" },
 		{ "kill_requid", "smallint default -1 not null" },
 		{ "comp_code", "int default 0 not null" },
-		{ "cpus", "mediumint unsigned not null" },
+		{ "nodes", "int unsigned not null" },
+		{ "cpus", "int unsigned not null" },
+		{ "tasks", "int unsigned not null" },
+		{ "task_dist", "smallint default 0" },
 		{ "user_sec", "int unsigned default 0 not null" },
 		{ "user_usec", "int unsigned default 0 not null" },
 		{ "sys_sec", "int unsigned default 0 not null" },
 		{ "sys_usec", "int unsigned default 0 not null" },
 		{ "max_vsize", "int unsigned default 0 not null" },
 		{ "max_vsize_task", "smallint unsigned default 0 not null" },
-		{ "max_vsize_node", "mediumint unsigned default 0 not null" },
+		{ "max_vsize_node", "int unsigned default 0 not null" },
 		{ "ave_vsize", "float default 0.0 not null" },
 		{ "max_rss", "int unsigned default 0 not null" },
 		{ "max_rss_task", "smallint unsigned default 0 not null" },
-		{ "max_rss_node", "mediumint unsigned default 0 not null" },
+		{ "max_rss_node", "int unsigned default 0 not null" },
 		{ "ave_rss", "float default 0.0 not null" },
-		{ "max_pages", "mediumint unsigned default 0 not null" },
+		{ "max_pages", "int unsigned default 0 not null" },
 		{ "max_pages_task", "smallint unsigned default 0 not null" },
-		{ "max_pages_node", "mediumint unsigned default 0 not null" },
+		{ "max_pages_node", "int unsigned default 0 not null" },
 		{ "ave_pages", "float default 0.0 not null" },
-		{ "min_cpu", "mediumint unsigned default 0 not null" },
+		{ "min_cpu", "int unsigned default 0 not null" },
 		{ "min_cpu_task", "smallint unsigned default 0 not null" },
-		{ "min_cpu_node", "mediumint unsigned default 0 not null" },
+		{ "min_cpu_node", "int unsigned default 0 not null" },
 		{ "ave_cpu", "float default 0.0 not null" },
 		{ NULL, NULL}
 	};
 
 	storage_field_t suspend_table_fields[] = {
 		{ "id", "int not null" },
-		{ "associd", "mediumint not null" },
+		{ "associd", "int not null" },
 		{ "start", "int unsigned default 0 not null" },
 		{ "end", "int unsigned default 0 not null" },
 		{ NULL, NULL}		
@@ -2872,6 +3090,8 @@ static int _mysql_acct_check_tables(MYSQL *db_conn)
 		{ "id", "int not null" },
 		{ "period_start", "int unsigned not null" },
 		{ "alloc_cpu_secs", "bigint default 0" },
+		{ "resv_cpu_secs", "bigint default 0" },
+		{ "over_cpu_secs", "bigint default 0" },
 		{ NULL, NULL}		
 	};
 
@@ -3076,6 +3296,12 @@ static int _mysql_acct_check_tables(MYSQL *db_conn)
 				 ", primary key (id, stepid))") == SLURM_ERROR)
 		return SLURM_ERROR;
 
+	if(mysql_db_create_table(db_conn, resv_table,
+				 resv_table_fields, 
+				 ", primary key (id, start, cluster(20)))")
+	   == SLURM_ERROR)
+		return SLURM_ERROR;
+
 	if(mysql_db_create_table(db_conn, suspend_table,
 				 suspend_table_fields, 
 				 ")") == SLURM_ERROR)
@@ -3140,7 +3366,6 @@ static int _mysql_acct_check_tables(MYSQL *db_conn)
 
 	return rc;
 }
-#endif
 
 /*
  * init() is called when the plugin is loaded, before any other functions
@@ -3150,14 +3375,8 @@ extern int init ( void )
 {
 	static int first = 1;
 	int rc = SLURM_SUCCESS;
-#ifdef HAVE_MYSQL
 	MYSQL *db_conn = NULL;
 	char *location = NULL;
-#else
-	fatal("No MySQL database was found on the machine. "
-	      "Please check the config.log from the run of configure "
-	      "and run again.");
-#endif
 
 	/* since this can be loaded from many different places
 	   only tell us once. */
@@ -3174,25 +3393,24 @@ extern int init ( void )
 		xfree(cluster_name);
 	}
 
-#ifdef HAVE_MYSQL
 	mysql_db_info = _mysql_acct_create_db_info();
 
 	location = slurm_get_accounting_storage_loc();
 	if(!location)
-		mysql_db_name = xstrdup(DEFAULT_ACCT_DB);
+		mysql_db_name = xstrdup(DEFAULT_ACCOUNTING_DB);
 	else {
 		int i = 0;
 		while(location[i]) {
 			if(location[i] == '.' || location[i] == '/') {
 				debug("%s doesn't look like a database "
 				      "name using %s",
-				      location, DEFAULT_ACCT_DB);
+				      location, DEFAULT_ACCOUNTING_DB);
 				break;
 			}
 			i++;
 		}
 		if(location[i]) {
-			mysql_db_name = xstrdup(DEFAULT_ACCT_DB);
+			mysql_db_name = xstrdup(DEFAULT_ACCOUNTING_DB);
 			xfree(location);
 		} else
 			mysql_db_name = location;
@@ -3208,8 +3426,6 @@ extern int init ( void )
 	rc = _mysql_acct_check_tables(db_conn);
 
 	mysql_close_db_connection(&db_conn);
-	
-#endif		
 
 	if(rc == SLURM_SUCCESS)
 		verbose("%s loaded", plugin_name);
@@ -3221,21 +3437,16 @@ extern int init ( void )
 
 extern int fini ( void )
 {
-#ifdef HAVE_MYSQL
 	destroy_mysql_db_info(mysql_db_info);		
 	xfree(mysql_db_name);
 	xfree(default_qos_str);
 	mysql_cleanup();
 	return SLURM_SUCCESS;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern void *acct_storage_p_get_connection(bool make_agent, int conn_num,
 					   bool rollback)
 {
-#ifdef HAVE_MYSQL
 	mysql_conn_t *mysql_conn = xmalloc(sizeof(mysql_conn_t));
 	
 	if(!mysql_db_info)
@@ -3255,15 +3466,10 @@ extern void *acct_storage_p_get_connection(bool make_agent, int conn_num,
 		errno = SLURM_SUCCESS;
 	}
 	return (void *)mysql_conn;
-#else
-	return NULL;
-#endif
 }
 
 extern int acct_storage_p_close_connection(mysql_conn_t **mysql_conn)
 {
-#ifdef HAVE_MYSQL
-
 	if(!mysql_conn || !(*mysql_conn))
 		return SLURM_SUCCESS;
 
@@ -3273,14 +3479,10 @@ extern int acct_storage_p_close_connection(mysql_conn_t **mysql_conn)
 	xfree((*mysql_conn));
 
 	return SLURM_SUCCESS;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int acct_storage_p_commit(mysql_conn_t *mysql_conn, bool commit)
 {
-#ifdef HAVE_MYSQL
 	if(_check_connection(mysql_conn) != SLURM_SUCCESS)
 		return SLURM_ERROR;
 
@@ -3380,22 +3582,22 @@ extern int acct_storage_p_commit(mysql_conn_t *mysql_conn, bool commit)
 			case ACCT_REMOVE_USER:
 			case ACCT_ADD_COORD:
 			case ACCT_REMOVE_COORD:
-				rc = assoc_mgr_update_local_users(object);
+				rc = assoc_mgr_update_users(object);
 				break;
 			case ACCT_ADD_ASSOC:
 			case ACCT_MODIFY_ASSOC:
 			case ACCT_REMOVE_ASSOC:
-				rc = assoc_mgr_update_local_assocs(object);
+				rc = assoc_mgr_update_assocs(object);
 				break;
 			case ACCT_ADD_QOS:
 			case ACCT_MODIFY_QOS:
 			case ACCT_REMOVE_QOS:
-				rc = assoc_mgr_update_local_qos(object);
+				rc = assoc_mgr_update_qos(object);
 				break;
 			case ACCT_ADD_WCKEY:
 			case ACCT_MODIFY_WCKEY:
 			case ACCT_REMOVE_WCKEY:
-				rc = assoc_mgr_update_local_wckeys(object);
+				rc = assoc_mgr_update_wckeys(object);
 				break;
 			case ACCT_UPDATE_NOTSET:
 			default:
@@ -3411,15 +3613,11 @@ extern int acct_storage_p_commit(mysql_conn_t *mysql_conn, bool commit)
 	list_flush(mysql_conn->update_list);
 
 	return SLURM_SUCCESS;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int acct_storage_p_add_users(mysql_conn_t *mysql_conn, uint32_t uid,
 				    List user_list)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	int rc = SLURM_SUCCESS;
 	acct_user_rec_t *object = NULL;
@@ -3551,15 +3749,11 @@ extern int acct_storage_p_add_users(mysql_conn_t *mysql_conn, uint32_t uid,
 	list_destroy(wckey_list);
 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int acct_storage_p_add_coord(mysql_conn_t *mysql_conn, uint32_t uid, 
 				    List acct_list, acct_user_cond_t *user_cond)
 {
-#ifdef HAVE_MYSQL
 	char *query = NULL, *user = NULL, *acct = NULL;
 	char *user_name = NULL, *txn_query = NULL;
 	ListIterator itr, itr2;
@@ -3643,15 +3837,11 @@ extern int acct_storage_p_add_coord(mysql_conn_t *mysql_conn, uint32_t uid,
 	}
 	
 	return SLURM_SUCCESS;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int acct_storage_p_add_accts(mysql_conn_t *mysql_conn, uint32_t uid, 
 				    List acct_list)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	int rc = SLURM_SUCCESS;
 	acct_account_rec_t *object = NULL;
@@ -3762,15 +3952,11 @@ extern int acct_storage_p_add_accts(mysql_conn_t *mysql_conn, uint32_t uid,
 	list_destroy(assoc_list);
 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int acct_storage_p_add_clusters(mysql_conn_t *mysql_conn, uint32_t uid, 
 				       List cluster_list)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	int rc = SLURM_SUCCESS;
 	acct_cluster_rec_t *object = NULL;
@@ -3806,12 +3992,13 @@ extern int acct_storage_p_add_clusters(mysql_conn_t *mysql_conn, uint32_t uid,
 						  &vals, &extra,
 						  QOS_LEVEL_SET, 1);
 		xstrfmtcat(query, 
-			   "insert into %s (creation_time, mod_time, name) "
-			   "values (%d, %d, \"%s\") "
+			   "insert into %s (creation_time, mod_time, "
+			   "name, classification) "
+			   "values (%d, %d, \"%s\", %u) "
 			   "on duplicate key update deleted=0, mod_time=%d, "
 			   "control_host='', control_port=0;",
 			   cluster_table, 
-			   now, now, object->name,
+			   now, now, object->name, object->classification,
 			   now);
 		debug3("%d(%d) query\n%s",
 		       mysql_conn->conn, __LINE__, query);
@@ -3917,16 +4104,12 @@ extern int acct_storage_p_add_clusters(mysql_conn_t *mysql_conn, uint32_t uid,
 	}
 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int acct_storage_p_add_associations(mysql_conn_t *mysql_conn,
 					   uint32_t uid, 
 					   List association_list)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	int rc = SLURM_SUCCESS;
 	int i=0;
@@ -4198,9 +4381,11 @@ extern int acct_storage_p_add_associations(mysql_conn_t *mysql_conn,
 				   == SLURM_ERROR)
 					continue;
 				moved_parent = 1;
+			} else {
+				object->lft = atoi(row[MASSOC_LFT]);
+				object->rgt = atoi(row[MASSOC_RGT]);
 			}
 
-
 			affect_rows = 2;
 			xstrfmtcat(query,
 				   "update %s set deleted=0, "
@@ -4233,7 +4418,29 @@ extern int acct_storage_p_add_associations(mysql_conn_t *mysql_conn,
 		}
 
 		object->id = assoc_id;
-		
+
+		/* get the parent id only if we haven't moved the
+		 * parent since we get the total list if that has
+		 * happened */
+		if(!moved_parent &&
+		   (!last_parent || !last_cluster
+		    || strcmp(parent, last_parent)
+		    || strcmp(object->cluster, last_cluster))) {
+			uint32_t tmp32 = 0;
+			if((tmp32 = _get_parent_id(mysql_conn, 
+						   parent,
+						   object->cluster))) {
+				my_par_id = tmp32;
+
+				last_parent = parent;
+				last_cluster = object->cluster;
+			}
+		}
+		object->parent_id = my_par_id;
+
+		if(!moved_parent && !object->lft)
+			_set_assoc_lft_rgt(mysql_conn, object);
+
 
                /* get the parent id only if we haven't moved the
                 * parent since we get the total list if that has
@@ -4337,7 +4544,7 @@ end_it:
 			 * since you can't query on mod time here and I don't
 			 * want to rewrite code to make it happen
 			 */
-			//bzero(&assoc_cond, sizeof(acct_association_cond_t));
+			//memset(&assoc_cond, 0, sizeof(acct_association_cond_t));
 			
 			if(!(assoc_list = 
 			     acct_storage_p_get_associations(mysql_conn,
@@ -4370,15 +4577,11 @@ end_it:
 	}
 					
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int acct_storage_p_add_qos(mysql_conn_t *mysql_conn, uint32_t uid, 
 				  List qos_list)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	int rc = SLURM_SUCCESS;
 	acct_qos_rec_t *object = NULL;
@@ -4479,15 +4682,11 @@ extern int acct_storage_p_add_qos(mysql_conn_t *mysql_conn, uint32_t uid,
 	}
 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int acct_storage_p_add_wckeys(mysql_conn_t *mysql_conn, uint32_t uid, 
 				     List wckey_list)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	int rc = SLURM_SUCCESS;
 	acct_wckey_rec_t *object = NULL;
@@ -4591,16 +4790,59 @@ extern int acct_storage_p_add_wckeys(mysql_conn_t *mysql_conn, uint32_t uid,
 	}
 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
+}
+
+extern int acct_storage_p_add_reservation(mysql_conn_t *mysql_conn,
+					  acct_reservation_rec_t *resv)
+{
+	int rc = SLURM_SUCCESS;
+	char *cols = NULL, *vals = NULL, *extra = NULL, 
+		*query = NULL;//, *tmp_extra = NULL;
+
+	if(!resv) {
+		error("No reservation was given to edit");
+		return SLURM_ERROR;
+	}
+
+	if(!resv->id) {
+		error("We need an id to edit a reservation.");
+		return SLURM_ERROR;
+	}
+	if(!resv->time_start) {
+		error("We need a start time to edit a reservation.");
+		return SLURM_ERROR;
+	}
+	if(!resv->cluster) {
+		error("We need a cluster name to edit a reservation.");
+		return SLURM_ERROR;
+	}
+
+	_setup_resv_limits(resv, &cols, &vals, &extra);
+	
+	xstrfmtcat(query,
+		   "insert into %s (id, cluster%s) values (%u, '%s'%s) "
+		   "on duplicate key update deleted=0%s;",
+		   resv_table, cols, resv->id, resv->cluster,
+		   vals, extra);
+	debug3("%d(%d) query\n%s",
+	       mysql_conn->conn, __LINE__, query);
+	
+	if((rc = mysql_db_query(mysql_conn->db_conn, query)
+	    == SLURM_SUCCESS))
+		rc = mysql_clear_results(mysql_conn->db_conn);
+	
+	xfree(query);
+	xfree(cols);
+	xfree(vals);
+	xfree(extra);
+	
+	return rc;
 }
 
 extern List acct_storage_p_modify_users(mysql_conn_t *mysql_conn, uint32_t uid, 
 					acct_user_cond_t *user_cond,
 					acct_user_rec_t *user)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	List ret_list = NULL;
 	int rc = SLURM_SUCCESS;
@@ -4737,9 +4979,6 @@ extern List acct_storage_p_modify_users(mysql_conn_t *mysql_conn, uint32_t uid,
 	}
 				
 	return ret_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_modify_accounts(
@@ -4747,7 +4986,6 @@ extern List acct_storage_p_modify_accounts(
 	acct_account_cond_t *acct_cond,
 	acct_account_rec_t *acct)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	List ret_list = NULL;
 	int rc = SLURM_SUCCESS;
@@ -4875,9 +5113,6 @@ extern List acct_storage_p_modify_accounts(
 	xfree(vals);
 
 	return ret_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_modify_clusters(mysql_conn_t *mysql_conn, 
@@ -4885,7 +5120,6 @@ extern List acct_storage_p_modify_clusters(mysql_conn_t *mysql_conn,
 					   acct_cluster_cond_t *cluster_cond,
 					   acct_cluster_rec_t *cluster)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	List ret_list = NULL;
 	int rc = SLURM_SUCCESS;
@@ -4897,6 +5131,7 @@ extern List acct_storage_p_modify_clusters(mysql_conn_t *mysql_conn,
 	int set = 0;
 	MYSQL_RES *result = NULL;
 	MYSQL_ROW row;
+	bool clust_reg = false;
 
 	/* If you need to alter the default values of the cluster use
 	 * modify_associations since this is used only for registering
@@ -4927,20 +5162,33 @@ extern List acct_storage_p_modify_clusters(mysql_conn_t *mysql_conn,
 		xstrcat(extra, ")");
 	}
 
+	if(cluster_cond->classification) {
+		xstrfmtcat(extra, " && (classification & %u)",
+			   cluster_cond->classification);
+	}
+
 	set = 0;
 	if(cluster->control_host) {
 		xstrfmtcat(vals, ", control_host='%s'", cluster->control_host);
 		set++;
+		clust_reg = true;
 	}
 
 	if(cluster->control_port) {
 		xstrfmtcat(vals, ", control_port=%u", cluster->control_port);
 		set++;
+		clust_reg = true;
 	}
 
 	if(cluster->rpc_version) {
 		xstrfmtcat(vals, ", rpc_version=%u", cluster->rpc_version);
 		set++;
+		clust_reg = true;
+	}
+
+	if(cluster->classification) {
+		xstrfmtcat(vals, ", classification=%u", 
+			   cluster->classification);
 	}
 
 	if(!vals) {
@@ -4948,7 +5196,7 @@ extern List acct_storage_p_modify_clusters(mysql_conn_t *mysql_conn,
 		errno = SLURM_NO_CHANGE_IN_DATA;
 		error("Nothing to change");
 		return NULL;
-	} else if(set != 3) {
+	} else if(clust_reg && (set != 3)) {
 		xfree(vals);
 		xfree(extra);
 		errno = EFAULT;
@@ -4982,7 +5230,7 @@ extern List acct_storage_p_modify_clusters(mysql_conn_t *mysql_conn,
 		object = xstrdup(row[0]);
 
 		/* check to see if this is the first time to register */
-		if(row[1][0] == '0')
+		if(clust_reg && (row[1][0] == '0'))
 			set = 0;
 
 		list_append(ret_list, object);
@@ -5040,9 +5288,17 @@ extern List acct_storage_p_modify_clusters(mysql_conn_t *mysql_conn,
 			error("can not open socket back to slurmctld");
 		} else {
 			slurm_msg_t out_msg;
+			accounting_update_msg_t update;
+			/* We have to put this update message here so
+			   we can tell the sender to send the correct
+			   RPC version.
+			*/
+			memset(&update, 0, sizeof(accounting_update_msg_t));
+			update.rpc_version = cluster->rpc_version;
 			slurm_msg_t_init(&out_msg);
 			out_msg.msg_type = ACCOUNTING_FIRST_REG;
 			out_msg.flags = SLURM_GLOBAL_AUTH_KEY;
+			out_msg.data = &update;
 			slurm_send_node_msg(fd, &out_msg);
 			/* We probably need to add matching recv_msg function
 			 * for an arbitray fd or should these be fire
@@ -5059,9 +5315,6 @@ end_it:
 	xfree(send_char);
 
 	return ret_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_modify_associations(
@@ -5069,7 +5322,6 @@ extern List acct_storage_p_modify_associations(
 	acct_association_cond_t *assoc_cond,
 	acct_association_rec_t *assoc)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	List ret_list = NULL;
 	int rc = SLURM_SUCCESS;
@@ -5137,7 +5389,7 @@ extern List acct_storage_p_modify_associations(
 		   >= ACCT_ADMIN_OPERATOR) 
 			is_admin = 1;	
 		else {
-			if(assoc_mgr_fill_in_user(mysql_conn, &user, 1)
+			if(assoc_mgr_fill_in_user(mysql_conn, &user, 1, NULL)
 			   != SLURM_SUCCESS) {
 				error("couldn't get information for this user");
 				errno = SLURM_ERROR;
@@ -5334,7 +5586,7 @@ extern List acct_storage_p_modify_associations(
 		init_acct_association_rec(mod_assoc);
 		mod_assoc->id = atoi(row[MASSOC_ID]);
 
-		mod_assoc->fairshare = assoc->fairshare;
+		mod_assoc->shares_raw = assoc->shares_raw;
 
 		mod_assoc->grp_cpus = assoc->grp_cpus;
 		mod_assoc->grp_cpu_mins = assoc->grp_cpu_mins;
@@ -5350,6 +5602,9 @@ extern List acct_storage_p_modify_associations(
 		mod_assoc->max_submit_jobs = assoc->max_submit_jobs;
 		mod_assoc->max_wall_pj = assoc->max_wall_pj;
 
+		/* no need to get the parent id since if we moved
+		 * parent id's we will get it when we send the total list */
+
 		if(!row[MASSOC_USER][0])
 			mod_assoc->parent_acct = xstrdup(assoc->parent_acct);
 		if(assoc->qos_list && list_count(assoc->qos_list)) {
@@ -5484,7 +5739,7 @@ extern List acct_storage_p_modify_associations(
 		 * want to rewrite code to make it happen
 		 */
 
-		//bzero(&local_assoc_cond, sizeof(acct_association_cond_t));
+		//memset(&local_assoc_cond, 0, sizeof(acct_association_cond_t));
 		
 		if(!(local_assoc_list = 
 		     acct_storage_p_get_associations(mysql_conn,
@@ -5514,16 +5769,12 @@ end_it:
 	xfree(vals);
 
 	return ret_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_modify_qos(mysql_conn_t *mysql_conn, uint32_t uid, 
 					acct_qos_cond_t *qos_cond,
 					acct_qos_rec_t *qos)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	List ret_list = NULL;
 	int rc = SLURM_SUCCESS;
@@ -5843,9 +6094,6 @@ extern List acct_storage_p_modify_qos(mysql_conn_t *mysql_conn, uint32_t uid,
 	}
 				
 	return ret_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_modify_wckeys(mysql_conn_t *mysql_conn,
@@ -5856,37 +6104,238 @@ extern List acct_storage_p_modify_wckeys(mysql_conn_t *mysql_conn,
 	return NULL;
 }
 
-extern List acct_storage_p_remove_users(mysql_conn_t *mysql_conn, uint32_t uid, 
-					acct_user_cond_t *user_cond)
+extern int acct_storage_p_modify_reservation(mysql_conn_t *mysql_conn,
+					     acct_reservation_rec_t *resv)
 {
-#ifdef HAVE_MYSQL
-	ListIterator itr = NULL;
-	List ret_list = NULL;
-	List coord_list = NULL;
-	int rc = SLURM_SUCCESS;
-	char *object = NULL;
-	char *extra = NULL, *query = NULL,
-		*name_char = NULL, *assoc_char = NULL;
-	time_t now = time(NULL);
-	char *user_name = NULL;
-	int set = 0;
 	MYSQL_RES *result = NULL;
 	MYSQL_ROW row;
-	acct_user_cond_t user_coord_cond;
-	acct_association_cond_t assoc_cond;
-	acct_wckey_cond_t wckey_cond;
-	
-	if(!user_cond) {
-		error("we need something to remove");
-		return NULL;
-	}
-
-	if(_check_connection(mysql_conn) != SLURM_SUCCESS)
-		return NULL;
+	int rc = SLURM_SUCCESS;
+	char *cols = NULL, *vals = NULL, *extra = NULL, 
+		*query = NULL;//, *tmp_extra = NULL;
+	time_t start = 0, now = time(NULL);
+	int i;
+	int set = 0;
+	char *resv_req_inx[] = {
+		"assoclist",
+		"start",
+		"end",
+		"cpus",
+		"name",
+		"nodelist",
+		"node_inx",
+		"flags"
+	};
+	enum {
+		RESV_ASSOCS,
+		RESV_START,
+		RESV_END,
+		RESV_CPU,
+		RESV_NAME,
+		RESV_NODES,
+		RESV_NODE_INX,
+		RESV_FLAGS,
+		RESV_COUNT
+	};
 
-	xstrcat(extra, "where deleted=0");
+	if(!resv) {
+		error("No reservation was given to edit");
+		return SLURM_ERROR;
+	}
 
-	if(user_cond->assoc_cond && user_cond->assoc_cond->user_list
+	if(!resv->id) {
+		error("We need an id to edit a reservation.");
+		return SLURM_ERROR;
+	}
+	if(!resv->time_start) {
+		error("We need a start time to edit a reservation.");
+		return SLURM_ERROR;
+	}
+	if(!resv->cluster) {
+		error("We need a cluster name to edit a reservation.");
+		return SLURM_ERROR;
+	}
+		
+	if(!resv->time_start_prev) {
+		error("We need a time to check for last "
+		      "start of reservation.");
+		return SLURM_ERROR;
+	}
+	
+	for(i=0; i<RESV_COUNT; i++) {
+		if(i) 
+			xstrcat(cols, ", ");
+		xstrcat(cols, resv_req_inx[i]);
+	}
+	
+	/* check for both the last start and the start because most
+	   likely the start time hasn't changed, but something else
+	   may have since the last time we did an update to the
+	   reservation. */
+	query = xstrdup_printf("select %s from %s where id=%u "
+			       "and (start=%d || start=%d) and cluster='%s' "
+			       "and deleted=0 order by start desc "
+			       "limit 1 FOR UPDATE;",
+			       cols, resv_table, resv->id, 
+			       resv->time_start, resv->time_start_prev,
+			       resv->cluster);
+try_again:
+	debug4("%d(%d) query\n%s",
+	       mysql_conn->conn, __LINE__, query);
+	if(!(result = mysql_db_query_ret(
+		     mysql_conn->db_conn, query, 0))) {
+		rc = SLURM_ERROR;
+		goto end_it;
+	}
+	if(!(row = mysql_fetch_row(result))) {
+		rc = SLURM_ERROR;
+		mysql_free_result(result);
+		error("There is no reservation by id %u, "
+		      "start %d, and cluster '%s'", resv->id,
+		      resv->time_start_prev, resv->cluster);
+		if(!set && resv->time_end) {
+			/* This should never really happen,
+			   but just incase the controller and the
+			   database get out of sync we check
+			   to see if there is a reservation
+			   not deleted that hasn't ended yet. */
+			xfree(query);
+			query = xstrdup_printf(
+				"select %s from %s where id=%u "
+				"and start <= %d and cluster='%s' "
+				"and deleted=0 order by start desc "
+				"limit 1;",
+				cols, resv_table, resv->id, 
+				resv->time_end, resv->cluster);
+			set = 1;
+			goto try_again;
+		}
+		goto end_it;
+	} 
+	
+	start = atoi(row[RESV_START]);
+	
+	xfree(query);
+	xfree(cols);
+	
+	set = 0;
+	
+	/* check differences here */
+		
+	if(!resv->name 
+	   && row[RESV_NAME] && row[RESV_NAME][0])
+		// if this changes we just update the
+		// record, no need to create a new one since
+		// this doesn't really effect the
+		// reservation accounting wise
+		resv->name = xstrdup(row[RESV_NAME]);
+
+	if(resv->assocs)
+		set = 1;
+	else if(row[RESV_ASSOCS] && row[RESV_ASSOCS][0])
+		resv->assocs = xstrdup(row[RESV_ASSOCS]);
+
+	if(resv->cpus != (uint32_t)NO_VAL) 
+		set = 1;
+	else 
+		resv->cpus = atoi(row[RESV_CPU]);
+		
+	if(resv->flags != (uint16_t)NO_VAL) 
+		set = 1;
+	else
+		resv->flags = atoi(row[RESV_FLAGS]);
+		
+	if(resv->nodes) 
+		set = 1;
+	else if(row[RESV_NODES] && row[RESV_NODES][0]) {
+		resv->nodes = xstrdup(row[RESV_NODES]);
+		resv->node_inx = xstrdup(row[RESV_NODE_INX]);
+	}
+		
+	if(!resv->time_end)
+		resv->time_end = atoi(row[RESV_END]);
+
+	mysql_free_result(result);
+
+	_setup_resv_limits(resv, &cols, &vals, &extra);
+	/* use start below instead of resv->time_start_prev
+	 * just incase we have a different one from being out
+	 * of sync
+	 */
+	if((start > now) || !set) {
+		/* we haven't started the reservation yet, or
+		   we are changing the associations or end
+		   time which we can just update it */
+		query = xstrdup_printf("update %s set deleted=0%s "
+				       "where deleted=0 and id=%u "
+				       "and start=%d and cluster='%s';",
+				       resv_table, extra, resv->id,
+				       start,
+				       resv->cluster);
+	} else {
+		/* time_start is already done above and we
+		 * changed something that is in need on a new
+		 * entry. */
+		query = xstrdup_printf("update %s set end=%d "
+				       "where deleted=0 && id=%u "
+				       "&& start=%d and cluster='%s';",
+				       resv_table, resv->time_start-1,
+				       resv->id, start,
+				       resv->cluster);
+		xstrfmtcat(query,
+			   "insert into %s (id, cluster%s) "
+			   "values (%u, '%s'%s) "
+			   "on duplicate key update deleted=0%s;",
+			   resv_table, cols, resv->id, resv->cluster,
+			   vals, extra);
+	}
+
+	debug3("%d(%d) query\n%s",
+	       mysql_conn->conn, __LINE__, query);
+	
+	if((rc = mysql_db_query(mysql_conn->db_conn, query)
+	    == SLURM_SUCCESS))
+		rc = mysql_clear_results(mysql_conn->db_conn);
+	
+end_it:
+	
+	xfree(query);
+	xfree(cols);
+	xfree(vals);
+	xfree(extra);
+	
+	return rc;
+}
+
+extern List acct_storage_p_remove_users(mysql_conn_t *mysql_conn, uint32_t uid, 
+					acct_user_cond_t *user_cond)
+{
+	ListIterator itr = NULL;
+	List ret_list = NULL;
+	List coord_list = NULL;
+	int rc = SLURM_SUCCESS;
+	char *object = NULL;
+	char *extra = NULL, *query = NULL,
+		*name_char = NULL, *assoc_char = NULL;
+	time_t now = time(NULL);
+	char *user_name = NULL;
+	int set = 0;
+	MYSQL_RES *result = NULL;
+	MYSQL_ROW row;
+	acct_user_cond_t user_coord_cond;
+	acct_association_cond_t assoc_cond;
+	acct_wckey_cond_t wckey_cond;
+	
+	if(!user_cond) {
+		error("we need something to remove");
+		return NULL;
+	}
+
+	if(_check_connection(mysql_conn) != SLURM_SUCCESS)
+		return NULL;
+
+	xstrcat(extra, "where deleted=0");
+
+	if(user_cond->assoc_cond && user_cond->assoc_cond->user_list
 	   && list_count(user_cond->assoc_cond->user_list)) {
 		set = 0;
 		xstrcat(extra, " && (");
@@ -6029,17 +6478,12 @@ extern List acct_storage_p_remove_users(mysql_conn_t *mysql_conn, uint32_t uid,
 	}		
 
 	return ret_list;
-
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_remove_coord(mysql_conn_t *mysql_conn, uint32_t uid, 
 					List acct_list,
 					acct_user_cond_t *user_cond)
 {
-#ifdef HAVE_MYSQL
 	char *query = NULL, *object = NULL, *extra = NULL, *last_user = NULL;
 	char *user_name = NULL;
 	time_t now = time(NULL);
@@ -6080,7 +6524,7 @@ extern List acct_storage_p_remove_coord(mysql_conn_t *mysql_conn, uint32_t uid,
 		   >= ACCT_ADMIN_OPERATOR) 
 			is_admin = 1;	
 		else {
-			if(assoc_mgr_fill_in_user(mysql_conn, &user, 1)
+			if(assoc_mgr_fill_in_user(mysql_conn, &user, 1, NULL)
 			   != SLURM_SUCCESS) {
 				error("couldn't get information for this user");
 				errno = SLURM_ERROR;
@@ -6225,15 +6669,11 @@ extern List acct_storage_p_remove_coord(mysql_conn_t *mysql_conn, uint32_t uid,
 	list_destroy(user_list);
 
 	return ret_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_remove_accts(mysql_conn_t *mysql_conn, uint32_t uid, 
 					acct_account_cond_t *acct_cond)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	List ret_list = NULL;
 	List coord_list = NULL;
@@ -6357,16 +6797,12 @@ extern List acct_storage_p_remove_accts(mysql_conn_t *mysql_conn, uint32_t uid,
 	}
 
 	return ret_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_remove_clusters(mysql_conn_t *mysql_conn,
 					   uint32_t uid, 
 					   acct_cluster_cond_t *cluster_cond)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	List ret_list = NULL;
 	List tmp_list = NULL;
@@ -6492,16 +6928,12 @@ extern List acct_storage_p_remove_clusters(mysql_conn_t *mysql_conn,
 	}
 
 	return ret_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_remove_associations(
 	mysql_conn_t *mysql_conn, uint32_t uid, 
 	acct_association_cond_t *assoc_cond)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	List ret_list = NULL;
 	int rc = SLURM_SUCCESS;
@@ -6563,7 +6995,7 @@ extern List acct_storage_p_remove_associations(
 		   >= ACCT_ADMIN_OPERATOR) 
 			is_admin = 1;	
 		else {
-			if(assoc_mgr_fill_in_user(mysql_conn, &user, 1)
+			if(assoc_mgr_fill_in_user(mysql_conn, &user, 1, NULL)
 			   != SLURM_SUCCESS) {
 				error("couldn't get information for this user");
 				errno = SLURM_ERROR;
@@ -6738,15 +7170,11 @@ end_it:
 	mysql_free_result(result);
 
 	return NULL;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_remove_qos(mysql_conn_t *mysql_conn, uint32_t uid, 
 				      acct_qos_cond_t *qos_cond)
 {
-#ifdef HAVE_MYSQL
 	ListIterator itr = NULL;
 	List ret_list = NULL;
 	int rc = SLURM_SUCCESS;
@@ -6870,16 +7298,12 @@ extern List acct_storage_p_remove_qos(mysql_conn_t *mysql_conn, uint32_t uid,
 	}
 
 	return ret_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_remove_wckeys(mysql_conn_t *mysql_conn,
 					 uint32_t uid, 
 					 acct_wckey_cond_t *wckey_cond)
 {
-#ifdef HAVE_MYSQL
 	List ret_list = NULL;
 	int rc = SLURM_SUCCESS;
 	char *extra = NULL, *query = NULL,
@@ -6954,15 +7378,58 @@ empty:
 	}
 
 	return ret_list;
-#else
-	return NULL;
-#endif
+}
+
+extern int acct_storage_p_remove_reservation(mysql_conn_t *mysql_conn,
+					     acct_reservation_rec_t *resv)
+{
+	int rc = SLURM_SUCCESS;
+	char *query = NULL;//, *tmp_extra = NULL;
+
+	if(!resv) {
+		error("No reservation was given to edit");
+		return SLURM_ERROR;
+	}
+
+	if(!resv->id || !resv->time_start || !resv->cluster) {
+		error("We need an id, start time, and cluster "
+		      "name to edit a reservation.");
+		return SLURM_ERROR;
+	}
+
+
+	/* first delete the resv that hasn't happened yet. */
+	query = xstrdup_printf("delete from %s where start > %d "
+			       "and id=%u and start=%d "
+			       "and cluster='%s';", 
+			       resv_table, resv->time_start_prev,
+			       resv->id, 
+			       resv->time_start, resv->cluster);
+	/* then update the remaining ones with a deleted flag and end
+	 * time of the time_start_prev which is set to when the
+	 * command was issued */
+	xstrfmtcat(query,
+		   "update %s set end=%d, deleted=1 where deleted=0 and "
+		   "id=%u and start=%d and cluster='%s;'",
+		   resv_table, resv->time_start_prev,
+		   resv->id, resv->time_start,
+		   resv->cluster);
+	
+	debug3("%d(%d) query\n%s",
+	       mysql_conn->conn, __LINE__, query);
+	
+	if((rc = mysql_db_query(mysql_conn->db_conn, query)
+	    == SLURM_SUCCESS))
+		rc = mysql_clear_results(mysql_conn->db_conn);
+	
+	xfree(query);
+	
+	return rc;
 }
 
 extern List acct_storage_p_get_users(mysql_conn_t *mysql_conn, uid_t uid, 
 				     acct_user_cond_t *user_cond)
 {
-#ifdef HAVE_MYSQL
 	char *query = NULL;	
 	char *extra = NULL;	
 	char *tmp = NULL;	
@@ -7016,7 +7483,8 @@ extern List acct_storage_p_get_users(mysql_conn_t *mysql_conn, uid_t uid,
 			   >= ACCT_ADMIN_OPERATOR) 
 				is_admin = 1;	
 			else {
-				assoc_mgr_fill_in_user(mysql_conn, &user, 1);
+				assoc_mgr_fill_in_user(mysql_conn, &user, 1,
+						       NULL);
 			}
 		}
 	}
@@ -7227,15 +7695,11 @@ get_wckeys:
 	}
 
 	return user_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_get_accts(mysql_conn_t *mysql_conn, uid_t uid,
 				     acct_account_cond_t *acct_cond)
 {
-#ifdef HAVE_MYSQL
 	char *query = NULL;	
 	char *extra = NULL;	
 	char *tmp = NULL;	
@@ -7288,7 +7752,8 @@ extern List acct_storage_p_get_accts(mysql_conn_t *mysql_conn, uid_t uid,
 			   >= ACCT_ADMIN_OPERATOR) 
 				is_admin = 1;	
 			else {
-				assoc_mgr_fill_in_user(mysql_conn, &user, 1);
+				assoc_mgr_fill_in_user(mysql_conn, &user, 1,
+						       NULL);
 			}
 
 			if(!is_admin && (!user.coord_accts 
@@ -7471,15 +7936,11 @@ empty:
 	}
 
 	return acct_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_get_clusters(mysql_conn_t *mysql_conn, uid_t uid, 
 					acct_cluster_cond_t *cluster_cond)
 {
-#ifdef HAVE_MYSQL
 	char *query = NULL;	
 	char *extra = NULL;	
 	char *tmp = NULL;	
@@ -7499,12 +7960,14 @@ extern List acct_storage_p_get_clusters(mysql_conn_t *mysql_conn, uid_t uid,
 	/* if this changes you will need to edit the corresponding enum */
 	char *cluster_req_inx[] = {
 		"name",
+		"classification",
 		"control_host",
 		"control_port",
 		"rpc_version",
 	};
 	enum {
 		CLUSTER_REQ_NAME,
+		CLUSTER_REQ_CLASS,
 		CLUSTER_REQ_CH,
 		CLUSTER_REQ_CP,
 		CLUSTER_REQ_VERSION,
@@ -7575,6 +8038,9 @@ empty:
 	assoc_cond.cluster_list = list_create(NULL);
 
 	while((row = mysql_fetch_row(result))) {
+		MYSQL_RES *result2 = NULL;
+		MYSQL_ROW row2;
+
 		cluster = xmalloc(sizeof(acct_cluster_rec_t));
 		list_append(cluster_list, cluster);
 
@@ -7591,9 +8057,28 @@ empty:
 				cluster_cond->usage_end);
 		}
 
+		cluster->classification = atoi(row[CLUSTER_REQ_CLASS]);
 		cluster->control_host = xstrdup(row[CLUSTER_REQ_CH]);
 		cluster->control_port = atoi(row[CLUSTER_REQ_CP]);
 		cluster->rpc_version = atoi(row[CLUSTER_REQ_VERSION]);
+		query = xstrdup_printf(
+			"select cpu_count, cluster_nodes from "
+			"%s where cluster=\"%s\" "
+			"and period_end=0 and node_name='' limit 1",
+			event_table, cluster->name);
+		debug4("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
+		if(!(result2 = mysql_db_query_ret(
+			     mysql_conn->db_conn, query, 0))) {
+			xfree(query);
+			continue;
+		}
+		xfree(query);
+		if((row2 = mysql_fetch_row(result2))) {
+			cluster->cpu_count = atoi(row2[0]);
+			if(row2[1] && row2[1][0])
+				cluster->nodes = xstrdup(row2[1]);
+		}
+		mysql_free_result(result2);	
 	}
 	mysql_free_result(result);
 
@@ -7642,16 +8127,12 @@ empty:
 	list_destroy(assoc_list);
 
 	return cluster_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_get_associations(mysql_conn_t *mysql_conn,
 					    uid_t uid, 
 					    acct_association_cond_t *assoc_cond)
 {
-#ifdef HAVE_MYSQL
 	//DEF_TIMERS;
 	char *query = NULL;	
 	char *extra = NULL;	
@@ -7779,7 +8260,8 @@ extern List acct_storage_p_get_associations(mysql_conn_t *mysql_conn,
 			   >= ACCT_ADMIN_OPERATOR) 
 				is_admin = 1;	
 			else {
-				assoc_mgr_fill_in_user(mysql_conn, &user, 1);
+				assoc_mgr_fill_in_user(mysql_conn, &user, 1,
+						       NULL);
 			}
 		}
 	}
@@ -7917,9 +8399,9 @@ empty:
 		if(row[ASSOC_REQ_PART][0])
 			assoc->partition = xstrdup(row[ASSOC_REQ_PART]);
 		if(row[ASSOC_REQ_FS])
-			assoc->fairshare = atoi(row[ASSOC_REQ_FS]);
+			assoc->shares_raw = atoi(row[ASSOC_REQ_FS]);
 		else
-			assoc->fairshare = 1;
+			assoc->shares_raw = 1;
 
 		if(!without_parent_info && parent_acct &&
 		   (!last_acct || !last_cluster 
@@ -8140,15 +8622,16 @@ empty:
 	xfree(parent_qos);
 	//END_TIMER2("get_associations");
 	return assoc_list;
-#else
+}
+
+extern List acct_storage_p_get_config(void *db_conn)
+{
 	return NULL;
-#endif
 }
 
 extern List acct_storage_p_get_qos(mysql_conn_t *mysql_conn, uid_t uid,
 				   acct_qos_cond_t *qos_cond)
 {
-#ifdef HAVE_MYSQL
 	char *query = NULL;	
 	char *extra = NULL;	
 	char *tmp = NULL;	
@@ -8181,6 +8664,7 @@ extern List acct_storage_p_get_qos(mysql_conn_t *mysql_conn, uid_t uid,
 		"preemptees",
 		"preemptors",
 		"priority",
+		"usage_factor",
 	};
 	enum {
 		QOS_REQ_NAME,
@@ -8202,6 +8686,7 @@ extern List acct_storage_p_get_qos(mysql_conn_t *mysql_conn, uid_t uid,
 		QOS_REQ_PREE,
 		QOS_REQ_PREO,
 		QOS_REQ_PRIO,
+		QOS_REQ_UF,
 		QOS_REQ_COUNT
 	};
 
@@ -8367,19 +8852,18 @@ empty:
 
 		if(row[QOS_REQ_PRIO])
 			qos->priority = atoi(row[QOS_REQ_PRIO]);
+
+		if(row[QOS_REQ_UF])
+			qos->usage_factor = atof(row[QOS_REQ_UF]);
 	}
 	mysql_free_result(result);
 
 	return qos_list;
-#else
-	return NULL;
-#endif
 }
 
 extern List acct_storage_p_get_wckeys(mysql_conn_t *mysql_conn, uid_t uid,
 				      acct_wckey_cond_t *wckey_cond)
 {
-#ifdef HAVE_MYSQL
 	//DEF_TIMERS;
 	char *query = NULL;	
 	char *extra = NULL;	
@@ -8441,7 +8925,8 @@ extern List acct_storage_p_get_wckeys(mysql_conn_t *mysql_conn, uid_t uid,
 			   >= ACCT_ADMIN_OPERATOR) 
 				is_admin = 1;	
 			else {
-				assoc_mgr_fill_in_user(mysql_conn, &user, 1);
+				assoc_mgr_fill_in_user(mysql_conn, &user,
+						       1, NULL);
 			}
 		}
 	}
@@ -8505,15 +8990,228 @@ empty:
 
 	//END_TIMER2("get_wckeys");
 	return wckey_list;
-#else
-	return NULL;
-#endif
+}
+
+extern List acct_storage_p_get_reservations(mysql_conn_t *mysql_conn, uid_t uid,
+					    acct_reservation_cond_t *resv_cond)
+{
+	//DEF_TIMERS;
+	char *query = NULL;	
+	char *extra = NULL;	
+	char *tmp = NULL;	
+	List resv_list = NULL;
+	int set = 0;
+	int i=0, is_admin=1;
+	MYSQL_RES *result = NULL;
+	MYSQL_ROW row;
+	uint16_t private_data = 0;
+	acct_job_cond_t job_cond;
+	void *curr_cluster = NULL;
+	List local_cluster_list = NULL;
+
+	/* needed if we don't have an resv_cond */
+	uint16_t with_usage = 0;
+
+	/* if this changes you will need to edit the corresponding enum */
+	char *resv_req_inx[] = {
+		"id",
+		"name",
+		"cluster",
+		"cpus",
+		"assoclist",
+		"nodelist",
+		"node_inx",
+		"start",
+		"end",
+		"flags",
+	};
+
+	enum {
+		RESV_REQ_ID,
+		RESV_REQ_NAME,
+		RESV_REQ_CLUSTER,
+		RESV_REQ_CPUS,
+		RESV_REQ_ASSOCS,
+		RESV_REQ_NODES,
+		RESV_REQ_NODE_INX,
+		RESV_REQ_START,
+		RESV_REQ_END,
+		RESV_REQ_FLAGS,
+		RESV_REQ_COUNT
+	};
+
+	if(!resv_cond) {
+		xstrcat(extra, " where deleted=0");
+		goto empty;
+	}
+
+	if(_check_connection(mysql_conn) != SLURM_SUCCESS)
+		return NULL;
+
+	private_data = slurm_get_private_data();
+	if (private_data & PRIVATE_DATA_RESERVATIONS) {
+		/* This only works when running though the slurmdbd.
+		 * THERE IS NO AUTHENTICATION WHEN RUNNNING OUT OF THE
+		 * SLURMDBD!
+		 */
+		if(slurmdbd_conf) {
+			is_admin = 0;
+			/* we have to check the authentication here in the
+			 * plugin since we don't know what accounts are being
+			 * referenced until after the query.  Here we will
+			 * set if they are an operator or greater and then
+			 * check it below after the query.
+			 */
+			if((uid == slurmdbd_conf->slurm_user_id || uid == 0)
+			   || assoc_mgr_get_admin_level(mysql_conn, uid) 
+			   >= ACCT_ADMIN_OPERATOR) 
+				is_admin = 1;	
+			else {
+				error("Only admins can look at "
+				      "reservation usage");
+				return NULL;
+			}
+		}
+	}
+
+	memset(&job_cond, 0, sizeof(acct_job_cond_t));
+	if(resv_cond->nodes) {
+		job_cond.usage_start = resv_cond->time_start;
+		job_cond.usage_end = resv_cond->time_end;
+		job_cond.used_nodes = resv_cond->nodes;
+		job_cond.cluster_list = resv_cond->cluster_list;
+		local_cluster_list = setup_cluster_list_with_inx(
+			mysql_conn, &job_cond, (void **)&curr_cluster);
+	} else if(with_usage) {
+		job_cond.usage_start = resv_cond->time_start;
+		job_cond.usage_end = resv_cond->time_end;
+	}
+
+	set = _setup_resv_cond_limits(resv_cond, &extra);
+
+	with_usage = resv_cond->with_usage;
+
+empty:
+	xfree(tmp);
+	xstrfmtcat(tmp, "t1.%s", resv_req_inx[i]);
+	for(i=1; i<RESV_REQ_COUNT; i++) {
+		xstrfmtcat(tmp, ", t1.%s", resv_req_inx[i]);
+	}
+	
+	//START_TIMER;
+	query = xstrdup_printf("select distinct %s from %s as t1%s "
+			       "order by cluster, name;", 
+			       tmp, resv_table, extra);
+	xfree(tmp);
+	xfree(extra);
+	debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
+	if(!(result = mysql_db_query_ret(mysql_conn->db_conn, query, 0))) {
+		xfree(query);
+		if(local_cluster_list)
+			list_destroy(local_cluster_list);
+		return NULL;
+	}
+	xfree(query);
+	
+	resv_list = list_create(destroy_acct_reservation_rec);
+	
+	while((row = mysql_fetch_row(result))) {
+		acct_reservation_rec_t *resv =
+			xmalloc(sizeof(acct_reservation_rec_t));
+		int start = atoi(row[RESV_REQ_START]);
+		list_append(resv_list, resv);
+
+		if(!good_nodes_from_inx(local_cluster_list, &curr_cluster,
+					row[RESV_REQ_NODE_INX], start))
+			continue;
+		
+		resv->id = atoi(row[RESV_REQ_ID]);
+		if(with_usage) {
+			if(!job_cond.resvid_list) 
+				job_cond.resvid_list = list_create(NULL);
+			list_append(job_cond.resvid_list, row[RESV_REQ_ID]);
+		}
+		resv->name = xstrdup(row[RESV_REQ_NAME]);
+		resv->cluster = xstrdup(row[RESV_REQ_CLUSTER]);
+		resv->cpus = atoi(row[RESV_REQ_CPUS]);
+		resv->assocs = xstrdup(row[RESV_REQ_ASSOCS]);
+		resv->nodes = xstrdup(row[RESV_REQ_NODES]);
+		resv->time_start = start;
+		resv->time_end = atoi(row[RESV_REQ_END]);
+		resv->flags = atoi(row[RESV_REQ_FLAGS]);
+	}
+
+	if(local_cluster_list)
+		list_destroy(local_cluster_list);
+
+	if(with_usage && resv_list && list_count(resv_list)) {
+		List job_list = mysql_jobacct_process_get_jobs(
+			mysql_conn, uid, &job_cond);	
+		ListIterator itr = NULL, itr2 = NULL;
+		jobacct_job_rec_t *job = NULL;
+		acct_reservation_rec_t *resv = NULL;
+
+		if(!job_list || !list_count(job_list))
+			goto no_jobs;
+		
+		itr = list_iterator_create(job_list);
+		itr2 = list_iterator_create(resv_list);
+		while((job = list_next(itr))) {
+			int start = job->start;
+			int end = job->end;
+			int set = 0;
+			while((resv = list_next(itr2))) {
+				int elapsed = 0;
+				/* since a reservation could have
+				   changed while a job was running we
+				   have to make sure we get the time
+				   in the correct record.
+				*/
+				if(resv->id != job->resvid) 
+					continue;
+				set = 1;
+
+				if(start < resv->time_start)
+					start = resv->time_start;
+				if(!end || end > resv->time_end) 
+					end = resv->time_end;
+				
+				if((elapsed = (end - start)) < 1)
+					continue;
+
+				if(job->alloc_cpus)
+					resv->alloc_secs +=
+						elapsed * job->alloc_cpus;
+			}
+			list_iterator_reset(itr2);
+			if(!set) {
+				error("we got a job %u with no reservation "
+				      "associatied with it?", job->jobid);
+			}
+		}		
+		
+		list_iterator_destroy(itr2);
+		list_iterator_destroy(itr);
+	no_jobs:
+		if(job_list)
+			list_destroy(job_list);
+	}	
+
+	if(job_cond.resvid_list) {
+		list_destroy(job_cond.resvid_list);
+		job_cond.resvid_list = NULL;
+	}
+
+	/* free result after we use the list with resv id's in it. */
+	mysql_free_result(result);
+
+	//END_TIMER2("get_resvs");
+	return resv_list;
 }
 
 extern List acct_storage_p_get_txn(mysql_conn_t *mysql_conn, uid_t uid,
 				   acct_txn_cond_t *txn_cond)
 {
-#ifdef HAVE_MYSQL
 	char *query = NULL;	
 	char *assoc_extra = NULL;	
 	char *name_extra = NULL;	
@@ -8893,16 +9591,12 @@ empty:
 	mysql_free_result(result);
 
 	return txn_list;
-#else
-	return NULL;
-#endif
 }
 
 extern int acct_storage_p_get_usage(mysql_conn_t *mysql_conn, uid_t uid,
 				    void *in, slurmdbd_msg_type_t type,
 				    time_t start, time_t end)
 {
-#ifdef HAVE_MYSQL
 	int rc = SLURM_SUCCESS;
 	int i=0, is_admin=1;
 	MYSQL_RES *result = NULL;
@@ -8994,7 +9688,8 @@ extern int acct_storage_p_get_usage(mysql_conn_t *mysql_conn, uid_t uid,
 			   >= ACCT_ADMIN_OPERATOR) 
 				is_admin = 1;	
 			else {
-				assoc_mgr_fill_in_user(mysql_conn, &user, 1);
+				assoc_mgr_fill_in_user(mysql_conn, &user, 1,
+						       NULL);
 			}
 			
 			if(!is_admin) {
@@ -9096,18 +9791,15 @@ is_user:
 	mysql_free_result(result);
 	
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int acct_storage_p_roll_usage(mysql_conn_t *mysql_conn, 
-				     time_t sent_start)
+				     time_t sent_start, time_t sent_end,
+				     uint16_t archive_data)
 {
-#ifdef HAVE_MYSQL
 	int rc = SLURM_SUCCESS;
 	int i = 0;
-	time_t my_time = time(NULL);
+	time_t my_time = sent_end;
 	struct tm start_tm;
 	struct tm end_tm;
 	MYSQL_RES *result = NULL;
@@ -9198,6 +9890,9 @@ extern int acct_storage_p_roll_usage(mysql_conn_t *mysql_conn,
 		}
 	}
 	
+	if(!my_time)
+		my_time = time(NULL);
+
 	/* test month gap */
 /* 	last_hour = 1212299999; */
 /* 	last_day = 1212217200; */
@@ -9253,8 +9948,10 @@ extern int acct_storage_p_roll_usage(mysql_conn_t *mysql_conn,
 		   != SLURM_SUCCESS)
 			return rc;
 		END_TIMER2("hourly_rollup");
-		query = xstrdup_printf("update %s set hourly_rollup=%d",
-				       last_ran_table, end_time);
+		/* If we have a sent_end do not update the last_run_table */
+		if(!sent_end)
+			query = xstrdup_printf("update %s set hourly_rollup=%d",
+					       last_ran_table, end_time);
 	} else {
 		debug2("no need to run this hour %d <= %d", 
 		       end_time, start_time);
@@ -9279,13 +9976,14 @@ extern int acct_storage_p_roll_usage(mysql_conn_t *mysql_conn,
 
 	if(end_time-start_time > 0) {
 		START_TIMER;
-		if((rc = mysql_daily_rollup(mysql_conn, start_time, end_time)) 
+		if((rc = mysql_daily_rollup(mysql_conn, start_time, end_time,
+					    archive_data)) 
 		   != SLURM_SUCCESS)
 			return rc;
 		END_TIMER2("daily_rollup");
-		if(query) 
+		if(query && !sent_end) 
 			xstrfmtcat(query, ", daily_rollup=%d", end_time);
-		else 
+		else if(!sent_end)
 			query = xstrdup_printf("update %s set daily_rollup=%d",
 					       last_ran_table, end_time);
 	} else {
@@ -9320,13 +10018,14 @@ extern int acct_storage_p_roll_usage(mysql_conn_t *mysql_conn,
 	if(end_time-start_time > 0) {
 		START_TIMER;
 		if((rc = mysql_monthly_rollup(
-			    mysql_conn, start_time, end_time)) != SLURM_SUCCESS)
+			    mysql_conn, start_time, end_time, archive_data))
+		   != SLURM_SUCCESS)
 			return rc;
 		END_TIMER2("monthly_rollup");
 
-		if(query) 
+		if(query && !sent_end) 
 			xstrfmtcat(query, ", monthly_rollup=%d", end_time);
-		else 
+		else if(!sent_end)
 			query = xstrdup_printf(
 				"update %s set monthly_rollup=%d",
 				last_ran_table, end_time);
@@ -9341,9 +10040,6 @@ extern int acct_storage_p_roll_usage(mysql_conn_t *mysql_conn,
 		xfree(query);
 	}
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int clusteracct_storage_p_node_down(mysql_conn_t *mysql_conn, 
@@ -9351,7 +10047,6 @@ extern int clusteracct_storage_p_node_down(mysql_conn_t *mysql_conn,
 					   struct node_record *node_ptr,
 					   time_t event_time, char *reason)
 {
-#ifdef HAVE_MYSQL
 	uint16_t cpus;
 	int rc = SLURM_SUCCESS;
 	char *query = NULL;
@@ -9391,26 +10086,24 @@ extern int clusteracct_storage_p_node_down(mysql_conn_t *mysql_conn,
 	 */
 	xstrfmtcat(query,
 		   "insert into %s "
-		   "(node_name, cluster, cpu_count, period_start, reason) "
-		   "values (\"%s\", \"%s\", %u, %d, \"%s\") on duplicate key "
+		   "(node_name, state, cluster, cpu_count, "
+		   "period_start, reason) "
+		   "values (\"%s\", %u, \"%s\", %u, %d, \"%s\") "
+		   "on duplicate key "
 		   "update period_end=0;",
-		   event_table, node_ptr->name, cluster, 
+		   event_table, node_ptr->name,  node_ptr->node_state, cluster, 
 		   cpus, event_time, my_reason);
 	debug4("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
 	rc = mysql_db_query(mysql_conn->db_conn, query);
 	xfree(query);
 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 extern int clusteracct_storage_p_node_up(mysql_conn_t *mysql_conn, 
 					 char *cluster,
 					 struct node_record *node_ptr,
 					 time_t event_time)
 {
-#ifdef HAVE_MYSQL
 	char* query;
 	int rc = SLURM_SUCCESS;
 
@@ -9425,9 +10118,6 @@ extern int clusteracct_storage_p_node_up(mysql_conn_t *mysql_conn,
 	rc = mysql_db_query(mysql_conn->db_conn, query);
 	xfree(query);
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 /* This is only called when not running from the slurmdbd so we can
@@ -9437,7 +10127,6 @@ extern int clusteracct_storage_p_register_ctld(mysql_conn_t *mysql_conn,
 					       char *cluster,
 					       uint16_t port)
 {
-#ifdef HAVE_MYSQL
 	char *query = NULL;
 	char *address = NULL;
 	char hostname[255];
@@ -9463,9 +10152,11 @@ extern int clusteracct_storage_p_register_ctld(mysql_conn_t *mysql_conn,
 
 	query = xstrdup_printf(
 		"update %s set deleted=0, mod_time=%d, "
-		"control_host='%s', control_port=%u, rpc_version=%d "
+		"control_host='%s', control_port=%u, rpc_version=%d, "
 		"where name='%s';",
-		cluster_table, now, address, port, SLURMDBD_VERSION, cluster);
+		cluster_table, now, address, port,
+		SLURMDBD_VERSION,
+		cluster);
 	xstrfmtcat(query, 	
 		   "insert into %s "
 		   "(timestamp, action, name, actor, info) "
@@ -9477,18 +10168,14 @@ extern int clusteracct_storage_p_register_ctld(mysql_conn_t *mysql_conn,
 	debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
 	
 	return mysql_db_query(mysql_conn->db_conn, query);
-	
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int clusteracct_storage_p_cluster_procs(mysql_conn_t *mysql_conn, 
 					       char *cluster,
+					       char *cluster_nodes,
 					       uint32_t procs,
 					       time_t event_time)
 {
-#ifdef HAVE_MYSQL
 	char* query;
 	int rc = SLURM_SUCCESS;
 	int first = 0;
@@ -9500,7 +10187,7 @@ extern int clusteracct_storage_p_cluster_procs(mysql_conn_t *mysql_conn,
 
 	/* Record the processor count */
 	query = xstrdup_printf(
-		"select cpu_count from %s where cluster=\"%s\" "
+		"select cpu_count, cluster_nodes from %s where cluster=\"%s\" "
 		"and period_end=0 and node_name='' limit 1",
 		event_table, cluster);
 	if(!(result = mysql_db_query_ret(
@@ -9535,9 +10222,30 @@ extern int clusteracct_storage_p_cluster_procs(mysql_conn_t *mysql_conn,
 	if(atoi(row[0]) == procs) {
 		debug3("we have the same procs as before no need to "
 		       "update the database.");
-		goto end_it;
-	}
-	debug("%s has changed from %s cpus to %u", cluster, row[0], procs);   
+		if(cluster_nodes) {
+			if(!row[1][0]) {
+				debug("Adding cluster nodes '%s' to "
+				      "last instance of cluster '%s'.",
+				      cluster_nodes, cluster);
+				query = xstrdup_printf(
+					"update %s set cluster_nodes=\"%s\" "
+					"where cluster=\"%s\" "
+					"and period_end=0 and node_name=''",
+					event_table, cluster_nodes, cluster);
+				rc = mysql_db_query(mysql_conn->db_conn, query);
+				xfree(query);
+				goto end_it;
+			} else if(!strcmp(cluster_nodes, row[1])) {
+				debug3("we have the same nodes in the cluster "
+				       "as before no need to "
+				       "update the database.");
+				goto end_it;
+			}
+		} else 
+			goto end_it;
+	} else
+		debug("%s has changed from %s cpus to %u",
+		      cluster, row[0], procs);   
 
 	/* reset all the entries for this cluster since the procs
 	   changed some of the downed nodes may have gone away.
@@ -9553,9 +10261,10 @@ extern int clusteracct_storage_p_cluster_procs(mysql_conn_t *mysql_conn,
 		goto end_it;
 add_it:
 	query = xstrdup_printf(
-		"insert into %s (cluster, cpu_count, period_start, reason) "
-		"values (\"%s\", %u, %d, 'Cluster processor count')",
-		event_table, cluster, procs, event_time);
+		"insert into %s (cluster, cluster_nodes, cpu_count, "
+		"period_start, reason) "
+		"values (\"%s\", \"%s\", %u, %d, 'Cluster processor count')",
+		event_table, cluster, cluster_nodes, procs, event_time);
 	rc = mysql_db_query(mysql_conn->db_conn, query);
 	xfree(query);
 end_it:
@@ -9564,9 +10273,6 @@ end_it:
 		rc = ACCOUNTING_FIRST_REG;
 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int clusteracct_storage_p_get_usage(
@@ -9574,7 +10280,6 @@ extern int clusteracct_storage_p_get_usage(
 	acct_cluster_rec_t *cluster_rec, slurmdbd_msg_type_t type,
 	time_t start, time_t end)
 {
-#ifdef HAVE_MYSQL
 	int rc = SLURM_SUCCESS;
 	int i=0;
 	MYSQL_RES *result = NULL;
@@ -9585,6 +10290,7 @@ extern int clusteracct_storage_p_get_usage(
 	char *cluster_req_inx[] = {
 		"alloc_cpu_secs",
 		"down_cpu_secs",
+		"pdown_cpu_secs",
 		"idle_cpu_secs",
 		"resv_cpu_secs",
 		"over_cpu_secs",
@@ -9595,6 +10301,7 @@ extern int clusteracct_storage_p_get_usage(
 	enum {
 		CLUSTER_ACPU,
 		CLUSTER_DCPU,
+		CLUSTER_PDCPU,
 		CLUSTER_ICPU,
 		CLUSTER_RCPU,
 		CLUSTER_OCPU,
@@ -9643,6 +10350,7 @@ extern int clusteracct_storage_p_get_usage(
 			xmalloc(sizeof(cluster_accounting_rec_t));
 		accounting_rec->alloc_secs = atoll(row[CLUSTER_ACPU]);
 		accounting_rec->down_secs = atoll(row[CLUSTER_DCPU]);
+		accounting_rec->pdown_secs = atoll(row[CLUSTER_PDCPU]);
 		accounting_rec->idle_secs = atoll(row[CLUSTER_ICPU]);
 		accounting_rec->over_secs = atoll(row[CLUSTER_OCPU]);
 		accounting_rec->resv_secs = atoll(row[CLUSTER_RCPU]);
@@ -9653,9 +10361,6 @@ extern int clusteracct_storage_p_get_usage(
 	mysql_free_result(result);
 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 /* 
@@ -9665,18 +10370,16 @@ extern int jobacct_storage_p_job_start(mysql_conn_t *mysql_conn,
 				       char *cluster_name,
 				       struct job_record *job_ptr)
 {
-#ifdef HAVE_MYSQL
 	int	rc=SLURM_SUCCESS;
-	char	*jname = NULL, *nodes = NULL;
-	long	priority;
+	char	*nodes = NULL, *jname = NULL, *node_inx = NULL;
 	int track_steps = 0;
 	char *block_id = NULL;
 	char *query = NULL;
-	char *wckey = NULL;
 	int reinit = 0;
 	time_t check_time = job_ptr->start_time;
 	uint32_t wckeyid = 0;
 	int no_cluster = 0;
+	int node_cnt = 0;
 
 	if (!job_ptr->details || !job_ptr->details->submit_time) {
 		error("jobacct_storage_p_job_start: "
@@ -9688,11 +10391,69 @@ extern int jobacct_storage_p_job_start(mysql_conn_t *mysql_conn,
 		return SLURM_ERROR;
 	
 	debug2("mysql_jobacct_job_start() called");
-	if(!check_time)
-		check_time = job_ptr->details->submit_time;
- 
+
+	/* See what we are hearing about here if no start time. If
+	 * this job latest time is before the last roll up we will
+	 * need to reset it to look at this job. */
+	if(!check_time) {
+		check_time = job_ptr->details->begin_time;
+ 		
+		if(!check_time)
+			check_time = job_ptr->details->submit_time;
+	}
+
 	slurm_mutex_lock(&rollup_lock);
 	if(check_time < global_last_rollup) {
+		MYSQL_RES *result = NULL;
+		MYSQL_ROW row;
+
+		/* check to see if we are hearing about this time for the
+		 * first time.
+		 */
+		query = xstrdup_printf("select id from %s where jobid=%u and "
+				       "submit=%d and eligible=%d "
+				       "and start=%d;",
+				       job_table, job_ptr->job_id,
+				       job_ptr->details->submit_time, 
+				       job_ptr->details->begin_time, 
+				       job_ptr->start_time);
+		debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
+		if(!(result =
+		     mysql_db_query_ret(mysql_conn->db_conn, query, 0))) {
+			xfree(query);
+			slurm_mutex_unlock(&rollup_lock);
+			return SLURM_ERROR;
+		}
+		xfree(query);
+		if((row = mysql_fetch_row(result))) {
+			mysql_free_result(result);
+			debug4("revieved an update for a "
+			       "job (%u) already known about",
+			       job_ptr->job_id);
+			slurm_mutex_unlock(&rollup_lock);
+			goto no_rollup_change;
+		}
+		mysql_free_result(result);
+
+		if(job_ptr->start_time)
+			debug("Need to reroll usage from %sJob %u "
+			      "from %s started then and we are just "
+			      "now hearing about it.",
+			      ctime(&check_time),
+			      job_ptr->job_id, cluster_name);
+		else if(job_ptr->details->begin_time) 
+			debug("Need to reroll usage from %sJob %u "
+			      "from %s became eligible then and we are just "
+			      "now hearing about it.",
+			      ctime(&check_time), 
+			      job_ptr->job_id, cluster_name);
+		else
+			debug("Need to reroll usage from %sJob %u "
+			      "from %s was submitted then and we are just "
+			      "now hearing about it.",
+			      ctime(&check_time),
+			      job_ptr->job_id, cluster_name);
+			
 		global_last_rollup = check_time;
 		slurm_mutex_unlock(&rollup_lock);
 		
@@ -9705,7 +10466,9 @@ extern int jobacct_storage_p_job_start(mysql_conn_t *mysql_conn,
 		xfree(query);
 	} else
 		slurm_mutex_unlock(&rollup_lock);
-	
+
+no_rollup_change:
+
 	if(!cluster_name && job_ptr->assoc_id) {
 		no_cluster = 1;
 		cluster_name = _get_cluster_from_associd(mysql_conn,
@@ -9713,41 +10476,14 @@ extern int jobacct_storage_p_job_start(mysql_conn_t *mysql_conn,
 	}
 
 
-	priority = (job_ptr->priority == NO_VAL) ?
-		-1L : (long) job_ptr->priority;
-
-	if (job_ptr->name && job_ptr->name[0]) {
-		char *temp = NULL;
-		/* first set the jname to the job_ptr->name */
-		jname = xstrdup(job_ptr->name);
-		/* then grep for " since that is the delimiter for
-		   the wckey */
-		if((temp = strchr(jname, '\"'))) {
-			if(strrchr(jname, '\"') != temp) {
-				error("job %u has quotes in it's name '%s', "
-				      "no way to get correct wckey", 
-				      job_ptr->job_id, jname);
-				xfree(jname);
-				jname = _fix_double_quotes(job_ptr->name);
-			} else {
-				/* if we have a wckey set the " to NULL to
-				 * end the jname */
-				temp[0] = '\0';
-				/* increment and copy the remainder */
-				temp++;
-				wckey = xstrdup(temp);
-			}
-		}
-	}
-
-	if(!jname || !jname[0]) {
-		/* free jname if something is allocated here */
-		xfree(jname);
-		jname = xstrdup("allocation");
+	if (job_ptr->name && job_ptr->name[0]) 
+		jname = job_ptr->name;
+	else {
+		jname = "allocation";
 		track_steps = 1;
 	}
 	
-	if (job_ptr->nodes && job_ptr->nodes[0])
+	if (job_ptr->nodes && job_ptr->nodes[0]) 
 		nodes = job_ptr->nodes;
 	else
 		nodes = "None assigned";
@@ -9757,18 +10493,32 @@ extern int jobacct_storage_p_job_start(mysql_conn_t *mysql_conn,
 
 	if(slurmdbd_conf) {
 		block_id = xstrdup(job_ptr->comment);
+		node_cnt = job_ptr->node_cnt;
+		node_inx = job_ptr->network;
 	} else {
+		char temp_bit[BUF_SIZE];
+
+		if(job_ptr->node_bitmap) 
+			node_inx = bit_fmt(temp_bit, sizeof(temp_bit), 
+					   job_ptr->node_bitmap);
+#ifdef HAVE_BG
 		select_g_get_jobinfo(job_ptr->select_jobinfo, 
 				     SELECT_DATA_BLOCK_ID, 
 				     &block_id);
+		select_g_get_jobinfo(job_ptr->select_jobinfo, 
+				     SELECT_DATA_NODE_CNT, 
+				     &node_cnt);
+#else
+		node_cnt = job_ptr->node_cnt;
+#endif 		
 	}
 
 	job_ptr->requid = -1; /* force to -1 for sacct to know this
 			       * hasn't been set yet */
 	
 	/* if there is a start_time get the wckeyid */
-	if(job_ptr->start_time) 
-		wckeyid = _get_wckeyid(mysql_conn, &wckey,
+	if(job_ptr->start_time && job_ptr->assoc_id) 
+		wckeyid = _get_wckeyid(mysql_conn, &job_ptr->wckey,
 				       job_ptr->user_id, cluster_name,
 				       job_ptr->assoc_id);
 	
@@ -9785,7 +10535,8 @@ extern int jobacct_storage_p_job_start(mysql_conn_t *mysql_conn,
 				job_ptr->details->submit_time;
 		query = xstrdup_printf(
 			"insert into %s "
-			"(jobid, associd, wckeyid, uid, gid, nodelist, ",
+			"(jobid, associd, wckeyid, uid, "
+			"gid, nodelist, resvid, timelimit, ",
 			job_table);
 
 		if(cluster_name) 
@@ -9796,15 +10547,19 @@ extern int jobacct_storage_p_job_start(mysql_conn_t *mysql_conn,
 			xstrcat(query, "partition, ");
 		if(block_id) 
 			xstrcat(query, "blockid, ");
-		if(wckey) 
+		if(job_ptr->wckey) 
 			xstrcat(query, "wckey, ");
+		if(node_inx) 
+			xstrcat(query, "node_inx, ");
 		
 		xstrfmtcat(query, 
 			   "eligible, submit, start, name, track_steps, "
-			   "state, priority, req_cpus, alloc_cpus) "
-			   "values (%u, %u, %u, %u, %u, \"%s\", ",
+			   "state, priority, req_cpus, "
+			   "alloc_cpus, alloc_nodes) "
+			   "values (%u, %u, %u, %u, %u, \"%s\", %u, %u, ",
 			   job_ptr->job_id, job_ptr->assoc_id, wckeyid,
-			   job_ptr->user_id, job_ptr->group_id, nodes);
+			   job_ptr->user_id, job_ptr->group_id, nodes, 
+			   job_ptr->resv_id, job_ptr->time_limit);
 		
 		if(cluster_name) 
 			xstrfmtcat(query, "\"%s\", ", cluster_name);
@@ -9814,23 +10569,26 @@ extern int jobacct_storage_p_job_start(mysql_conn_t *mysql_conn,
 			xstrfmtcat(query, "\"%s\", ", job_ptr->partition);
 		if(block_id) 
 			xstrfmtcat(query, "\"%s\", ", block_id);
-		if(wckey) 
-			xstrfmtcat(query, "\"%s\", ", wckey);
+		if(job_ptr->wckey) 
+			xstrfmtcat(query, "\"%s\", ", job_ptr->wckey);
+		if(node_inx) 
+			xstrfmtcat(query, "\"%s\", ", node_inx);
 
 		xstrfmtcat(query, 
-			   "%d, %d, %d, \"%s\", %u, %u, %u, %u, %u) "
+			   "%d, %d, %d, \"%s\", %u, %u, %u, %u, %u, %u) "
 			   "on duplicate key update "
 			   "id=LAST_INSERT_ID(id), state=%u, "
-			   "associd=%u, wckeyid=%u",
+			   "associd=%u, wckeyid=%u, resvid=%u, timelimit=%u",
 			   (int)job_ptr->details->begin_time,
 			   (int)job_ptr->details->submit_time,
 			   (int)job_ptr->start_time,
 			   jname, track_steps,
 			   job_ptr->job_state & (~JOB_COMPLETING),
-			   priority, job_ptr->num_procs,
-			   job_ptr->total_procs, 
+			   job_ptr->priority, job_ptr->num_procs,
+			   job_ptr->total_procs, node_cnt,
 			   job_ptr->job_state & (~JOB_COMPLETING),
-			   job_ptr->assoc_id, wckeyid);
+			   job_ptr->assoc_id, wckeyid, job_ptr->resv_id,
+			   job_ptr->time_limit);
 
 		if(job_ptr->account) 
 			xstrfmtcat(query, ", account=\"%s\"", job_ptr->account);
@@ -9839,8 +10597,10 @@ extern int jobacct_storage_p_job_start(mysql_conn_t *mysql_conn,
 				   job_ptr->partition);
 		if(block_id)
 			xstrfmtcat(query, ", blockid=\"%s\"", block_id);
-		if(wckey) 
-			xstrfmtcat(query, ", wckey=\"%s\"", wckey);
+		if(job_ptr->wckey) 
+			xstrfmtcat(query, ", wckey=\"%s\"", job_ptr->wckey);
+		if(node_inx) 
+			xstrfmtcat(query, ", node_inx=\"%s\"", node_inx);
 		
 		debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
 	try_again:
@@ -9870,31 +10630,30 @@ extern int jobacct_storage_p_job_start(mysql_conn_t *mysql_conn,
 				   job_ptr->partition);
 		if(block_id)
 			xstrfmtcat(query, "blockid=\"%s\", ", block_id);
-
-		if(wckey) 
-			xstrfmtcat(query, "wckey=\"%s\", ", wckey);
+		if(job_ptr->wckey) 
+			xstrfmtcat(query, "wckey=\"%s\", ", job_ptr->wckey);
+		if(node_inx) 
+			xstrfmtcat(query, "node_inx=\"%s\", ", node_inx);
 
 		xstrfmtcat(query, "start=%d, name=\"%s\", state=%u, "
-			   "alloc_cpus=%u, associd=%u, wckeyid=%u where id=%d",
+			   "alloc_cpus=%u, alloc_nodes=%u, "
+			   "associd=%u, wckeyid=%u, resvid=%u, timelimit=%u "
+			   "where id=%d",
 			   (int)job_ptr->start_time,
 			   jname, job_ptr->job_state & (~JOB_COMPLETING),
-			   job_ptr->total_procs, job_ptr->assoc_id, wckeyid,
+			   job_ptr->total_procs, node_cnt, 
+			   job_ptr->assoc_id, wckeyid,
+			   job_ptr->resv_id, job_ptr->time_limit, 
 			   job_ptr->db_index);
 		debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
 		rc = mysql_db_query(mysql_conn->db_conn, query);
 	}
 
 	xfree(block_id);
-	xfree(jname);
-	xfree(wckey);
-
 	xfree(query);
 	if(no_cluster)
 		xfree(cluster_name);
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 /* 
@@ -9903,7 +10662,6 @@ extern int jobacct_storage_p_job_start(mysql_conn_t *mysql_conn,
 extern int jobacct_storage_p_job_complete(mysql_conn_t *mysql_conn, 
 					  struct job_record *job_ptr)
 {
-#ifdef HAVE_MYSQL
 	char *query = NULL, *nodes = NULL;
 	int rc=SLURM_SUCCESS;
 	time_t start_time = job_ptr->start_time;
@@ -9979,9 +10737,6 @@ extern int jobacct_storage_p_job_complete(mysql_conn_t *mysql_conn,
 	xfree(query);
 	
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 /* 
@@ -9990,15 +10745,14 @@ extern int jobacct_storage_p_job_complete(mysql_conn_t *mysql_conn,
 extern int jobacct_storage_p_step_start(mysql_conn_t *mysql_conn, 
 					struct step_record *step_ptr)
 {
-#ifdef HAVE_MYSQL
-	int cpus = 0;
+	int cpus = 0, tasks = 0, nodes = 0, task_dist = 0;
 	int rc=SLURM_SUCCESS;
 	char node_list[BUFFER_SIZE];
+	char *node_inx = NULL;
 #ifdef HAVE_BG
 	char *ionodes = NULL;
 #endif
 	char *query = NULL;
-	char *sname = NULL;
 
 	if (!step_ptr->job_ptr->db_index 
 	    && (!step_ptr->job_ptr->details
@@ -10011,12 +10765,21 @@ extern int jobacct_storage_p_step_start(mysql_conn_t *mysql_conn,
 	if(_check_connection(mysql_conn) != SLURM_SUCCESS)
 		return SLURM_ERROR;
 	if(slurmdbd_conf) {
-		cpus = step_ptr->job_ptr->total_procs;
+		tasks = step_ptr->job_ptr->details->num_tasks;
+		cpus = step_ptr->cpu_count;
 		snprintf(node_list, BUFFER_SIZE, "%s",
 			 step_ptr->job_ptr->nodes);
+		nodes = step_ptr->step_layout->node_cnt;
+		task_dist = step_ptr->step_layout->task_dist;
+		node_inx = step_ptr->network;
 	} else {
+		char temp_bit[BUF_SIZE];
+
+		if(step_ptr->step_node_bitmap) 
+			node_inx = bit_fmt(temp_bit, sizeof(temp_bit), 
+					   step_ptr->step_node_bitmap);
 #ifdef HAVE_BG
-		cpus = step_ptr->job_ptr->num_procs;
+		tasks = cpus = step_ptr->job_ptr->num_procs;
 		select_g_get_jobinfo(step_ptr->job_ptr->select_jobinfo, 
 				     SELECT_DATA_IONODES, 
 				     &ionodes);
@@ -10027,20 +10790,26 @@ extern int jobacct_storage_p_step_start(mysql_conn_t *mysql_conn,
 		} else
 			snprintf(node_list, BUFFER_SIZE, "%s",
 				 step_ptr->job_ptr->nodes);
-		
+		select_g_get_jobinfo(step_ptr->job_ptr->select_jobinfo, 
+				     SELECT_DATA_NODE_CNT, 
+				     &nodes);
 #else
 		if(!step_ptr->step_layout || !step_ptr->step_layout->task_cnt) {
-			cpus = step_ptr->job_ptr->total_procs;
+			tasks = cpus = step_ptr->job_ptr->total_procs;
 			snprintf(node_list, BUFFER_SIZE, "%s",
 				 step_ptr->job_ptr->nodes);
+			nodes = step_ptr->job_ptr->node_cnt;
 		} else {
-			cpus = step_ptr->step_layout->task_cnt;
+			cpus = step_ptr->cpu_count; 
+			tasks = step_ptr->step_layout->task_cnt;
+			nodes = step_ptr->step_layout->node_cnt;
+			task_dist = step_ptr->step_layout->task_dist;
 			snprintf(node_list, BUFFER_SIZE, "%s", 
 				 step_ptr->step_layout->node_list);
 		}
 #endif
 	}
-	
+
 	step_ptr->job_ptr->requid = -1; /* force to -1 for sacct to know this
 					 * hasn't been set yet  */
 
@@ -10063,38 +10832,25 @@ extern int jobacct_storage_p_step_start(mysql_conn_t *mysql_conn,
 		}
 	}
 
-	if (step_ptr->name && step_ptr->name[0]) {
-		char *temp = NULL;
-		/* first set the jname to the job_ptr->name */
-		sname = xstrdup(step_ptr->name);
-		/* then grep for " since that is the delimiter for
-		   the wckey */
-		if((temp = strchr(sname, '\"'))) {
-			/* if we have a wckey set the " to NULL to
-			 * end the jname */
-			temp[0] = '\0';
-		}
-	}
-
 	/* we want to print a -1 for the requid so leave it a
 	   %d */
 	query = xstrdup_printf(
 		"insert into %s (id, stepid, start, name, state, "
-		"cpus, nodelist) "
-		"values (%d, %d, %d, \"%s\", %d, %d, \"%s\") "
-		"on duplicate key update cpus=%d, end=0, state=%d",
+		"cpus, nodes, node_inx, tasks, nodelist, task_dist) "
+		"values (%d, %d, %d, \"%s\", %d, %d, %d, %d, "
+		"\"%s\", \"%s\", %d) "
+		"on duplicate key update cpus=%d, nodes=%d, "
+		"tasks=%d, end=0, state=%d, node_inx=\"%s\", task_dist=%d",
 		step_table, step_ptr->job_ptr->db_index,
 		step_ptr->step_id, 
-		(int)step_ptr->start_time, sname,
-		JOB_RUNNING, cpus, node_list, cpus, JOB_RUNNING);
+		(int)step_ptr->start_time, step_ptr->name,
+		JOB_RUNNING, cpus, nodes, tasks, node_list, node_inx, task_dist,
+		cpus, nodes, tasks, JOB_RUNNING, node_inx, task_dist);
 	debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
 	rc = mysql_db_query(mysql_conn->db_conn, query);
 	xfree(query);
-	xfree(sname);
+
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 /* 
@@ -10103,11 +10859,10 @@ extern int jobacct_storage_p_step_start(mysql_conn_t *mysql_conn,
 extern int jobacct_storage_p_step_complete(mysql_conn_t *mysql_conn, 
 					   struct step_record *step_ptr)
 {
-#ifdef HAVE_MYSQL
 	time_t now;
 	int elapsed;
 	int comp_status;
-	int cpus = 0;
+	int cpus = 0, tasks = 0;
 	struct jobacctinfo *jobacct = (struct jobacctinfo *)step_ptr->jobacct;
 	struct jobacctinfo dummy_jobacct;
 	float ave_vsize = 0, ave_rss = 0, ave_pages = 0;
@@ -10126,7 +10881,7 @@ extern int jobacct_storage_p_step_complete(mysql_conn_t *mysql_conn,
 
 	if (jobacct == NULL) {
 		/* JobAcctGather=jobacct_gather/none, no data to process */
-		bzero(&dummy_jobacct, sizeof(dummy_jobacct));
+		memset(&dummy_jobacct, 0, sizeof(dummy_jobacct));
 		jobacct = &dummy_jobacct;
 	}
 
@@ -10135,18 +10890,20 @@ extern int jobacct_storage_p_step_complete(mysql_conn_t *mysql_conn,
 
 	if(slurmdbd_conf) {
 		now = step_ptr->job_ptr->end_time;
-		cpus = step_ptr->job_ptr->total_procs;
-
+		tasks = step_ptr->job_ptr->details->num_tasks;
+		cpus = step_ptr->cpu_count;
 	} else {
 		now = time(NULL);
 #ifdef HAVE_BG
-		cpus = step_ptr->job_ptr->num_procs;
+		tasks = cpus = step_ptr->job_ptr->num_procs;
 		
 #else
 		if(!step_ptr->step_layout || !step_ptr->step_layout->task_cnt)
-			cpus = step_ptr->job_ptr->total_procs;
-		else 
-			cpus = step_ptr->step_layout->task_cnt;
+			tasks = cpus = step_ptr->job_ptr->total_procs;
+		else {
+			cpus = step_ptr->cpu_count; 
+			tasks = step_ptr->step_layout->task_cnt;
+		}
 #endif
 	}
 	
@@ -10248,9 +11005,6 @@ extern int jobacct_storage_p_step_complete(mysql_conn_t *mysql_conn,
 	xfree(query);
 	 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 /* 
@@ -10259,7 +11013,6 @@ extern int jobacct_storage_p_step_complete(mysql_conn_t *mysql_conn,
 extern int jobacct_storage_p_suspend(mysql_conn_t *mysql_conn, 
 				     struct job_record *job_ptr)
 {
-#ifdef HAVE_MYSQL
 	char *query = NULL;
 	int rc = SLURM_SUCCESS;
 	bool suspended = false;
@@ -10320,9 +11073,6 @@ extern int jobacct_storage_p_suspend(mysql_conn_t *mysql_conn,
 	}
 	
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 /* 
@@ -10335,11 +11085,11 @@ extern List jobacct_storage_p_get_jobs_cond(mysql_conn_t *mysql_conn,
 					    acct_job_cond_t *job_cond)
 {
 	List job_list = NULL;
-#ifdef HAVE_MYSQL
+
 	if(_check_connection(mysql_conn) != SLURM_SUCCESS)
 		return NULL;
 	job_list = mysql_jobacct_process_get_jobs(mysql_conn, uid, job_cond);	
-#endif
+
 	return job_list;
 }
 
@@ -10349,13 +11099,10 @@ extern List jobacct_storage_p_get_jobs_cond(mysql_conn_t *mysql_conn,
 extern int jobacct_storage_p_archive(mysql_conn_t *mysql_conn, 
 				     acct_archive_cond_t *arch_cond)
 {
-#ifdef HAVE_MYSQL
 	if(_check_connection(mysql_conn) != SLURM_SUCCESS)
 		return SLURM_ERROR;
 	
 	return mysql_jobacct_process_archive(mysql_conn, arch_cond);
-#endif
-	return SLURM_ERROR;
 }
 
 /* 
@@ -10364,20 +11111,16 @@ extern int jobacct_storage_p_archive(mysql_conn_t *mysql_conn,
 extern int jobacct_storage_p_archive_load(mysql_conn_t *mysql_conn, 
 					  acct_archive_rec_t *arch_rec)
 {
-#ifdef HAVE_MYSQL
 	if(_check_connection(mysql_conn) != SLURM_SUCCESS)
 		return SLURM_ERROR;
 
 	return mysql_jobacct_process_archive_load(mysql_conn, arch_rec);
-#endif
-	return SLURM_ERROR;
 }
 
 extern int acct_storage_p_update_shares_used(mysql_conn_t *mysql_conn, 
 					     List shares_used)
 {
-	/* This definitely needs to be fleshed out.
-	 * Go through the list of shares_used_object_t objects and store them */
+	/* No plans to have the database hold the used shares */
 	return SLURM_SUCCESS;
 }
 
@@ -10385,7 +11128,6 @@ extern int acct_storage_p_flush_jobs_on_cluster(
 	mysql_conn_t *mysql_conn, char *cluster, time_t event_time)
 {
 	int rc = SLURM_SUCCESS;
-#ifdef HAVE_MYSQL
 	/* put end times for a clean start */
 	MYSQL_RES *result = NULL;
 	MYSQL_ROW row;
@@ -10462,7 +11204,6 @@ extern int acct_storage_p_flush_jobs_on_cluster(
 		rc = mysql_db_query(mysql_conn->db_conn, query);
 		xfree(query);
 	}
-#endif
 
 	return rc;
 }
diff --git a/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c b/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c
index 34e4b04a7..938c163ee 100644
--- a/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c
+++ b/src/plugins/accounting_storage/mysql/mysql_jobacct_process.c
@@ -4,12 +4,14 @@
  *                               storage.
  *****************************************************************************
  *
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Copyright (C) 2004-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -46,9 +48,26 @@
 #include "mysql_jobacct_process.h"
 #include <fcntl.h>
 
-#ifdef HAVE_MYSQL
 static pthread_mutex_t local_file_lock = PTHREAD_MUTEX_INITIALIZER;
 
+typedef struct {
+	hostlist_t hl;
+	time_t start;
+	time_t end;
+	bitstr_t *asked_bitmap;
+} local_cluster_t;
+
+static void _destroy_local_cluster(void *object)
+{
+	local_cluster_t *local_cluster = (local_cluster_t *)object;
+	if(local_cluster) {
+		if(local_cluster->hl)
+			hostlist_destroy(local_cluster->hl);
+		FREE_NULL_BITMAP(local_cluster->asked_bitmap);
+		xfree(local_cluster);
+	}
+}
+
 static int _write_to_file(int fd, char *data)
 {
 	int pos = 0, nwrite = strlen(data), amount;
@@ -67,6 +86,128 @@ static int _write_to_file(int fd, char *data)
 	return rc;
 }
 
+static int _write_archive_file(MYSQL_RES *result, int start_col, int col_count,
+			       time_t curr_end, char *arch_dir,
+			       char *arch_type, char *insert,
+			       bool with_deleted)
+{
+	time_t period_start = 0;
+	int fd = 0;
+	int rc = SLURM_SUCCESS;
+	MYSQL_ROW row;
+	struct tm time_tm;
+	char *old_file = NULL, *new_file = NULL, *reg_file = NULL;
+	char *values = NULL;
+	char start_char[32];
+	char end_char[32];
+	int i=0;
+
+	xassert(result);
+
+	//START_TIMER;
+	slurm_mutex_lock(&local_file_lock);
+	while((row = mysql_fetch_row(result))) {
+		if(period_start) {
+			xstrcat(values, ",\n(");
+		} else {
+			period_start = atoi(row[start_col]);
+			localtime_r((time_t *)&period_start, &time_tm);
+			time_tm.tm_sec = 0;
+			time_tm.tm_min = 0;
+			time_tm.tm_hour = 0;
+			time_tm.tm_mday = 1;
+			snprintf(start_char, sizeof(start_char),
+				 "%4.4u-%2.2u-%2.2u"
+				 "T%2.2u:%2.2u:%2.2u",
+				 (time_tm.tm_year + 1900),
+				 (time_tm.tm_mon+1), 
+				 time_tm.tm_mday,
+				 time_tm.tm_hour,
+				 time_tm.tm_min, 
+				 time_tm.tm_sec);
+
+			localtime_r((time_t *)&curr_end, &time_tm);
+			snprintf(end_char, sizeof(end_char),
+				 "%4.4u-%2.2u-%2.2u"
+				 "T%2.2u:%2.2u:%2.2u",
+				 (time_tm.tm_year + 1900),
+				 (time_tm.tm_mon+1), 
+				 time_tm.tm_mday,
+				 time_tm.tm_hour,
+				 time_tm.tm_min, 
+				 time_tm.tm_sec);
+
+			/* write the buffer to file */
+			reg_file = xstrdup_printf(
+				"%s/%s_archive_%s_%s.sql",
+				arch_dir, arch_type,
+				start_char, end_char);
+			debug("Storing event archive at %s", reg_file);
+			old_file = xstrdup_printf("%s.old", reg_file);
+			new_file = xstrdup_printf("%s.new", reg_file);
+					
+			fd = creat(new_file, 0600);
+			if (fd == 0) {
+				error("Can't save archive, "
+				      "create file %s error %m",
+				      new_file);
+				rc = errno;
+				xfree(insert);
+				break;
+			} 
+			values = xstrdup_printf("%s\nvalues\n(", insert);
+		}
+	
+		xstrfmtcat(values, "'%s'", row[0]);
+		for(i=1; i<col_count; i++) {
+			xstrfmtcat(values, ", '%s'", row[i]);
+		}
+
+		if(with_deleted)
+			xstrcat(values, ", '1')");
+		else
+			xstrcat(values, ")");
+				
+		if(!fd 
+		   || ((rc = _write_to_file(fd, values)) != SLURM_SUCCESS)) {
+			xfree(values);
+			break;
+		}
+		xfree(values);
+	}
+
+	if(with_deleted)
+	      	rc = _write_to_file(fd,
+			    " on duplicate key update "
+			    "deleted=1;");
+	else
+	      	rc = _write_to_file(fd,
+			    " on duplicate key update "
+			    "period_end=VALUES(period_end);");
+//			END_TIMER2("write file");
+//			info("write file took %s", TIME_STR);
+
+	fsync(fd);
+	close(fd);
+			
+	if (rc)
+		(void) unlink(new_file);
+	else {			/* file shuffle */
+		int ign;	/* avoid warning */
+		(void) unlink(old_file);
+		ign =  link(reg_file, old_file);
+		(void) unlink(reg_file);
+		ign =  link(new_file, reg_file);
+		(void) unlink(new_file);
+	}
+	xfree(old_file);
+	xfree(reg_file);
+	xfree(new_file);
+	slurm_mutex_unlock(&local_file_lock);
+
+	return rc;
+}
+
 static int _archive_script(acct_archive_cond_t *arch_cond, time_t last_submit)
 {
 	char * args[] = {arch_cond->archive_script, NULL};
@@ -105,30 +246,31 @@ static int _archive_script(acct_archive_cond_t *arch_cond, time_t last_submit)
 
 	env = env_array_create();
 
-	if(arch_cond->step_purge) {
+	if(arch_cond->purge_event) {
 		/* use localtime to avoid any daylight savings issues */
 		if(!localtime_r(&last_submit, &time_tm)) {
-			error("Couldn't get localtime from first step start %d",
+			error("Couldn't get localtime from "
+			      "first event start %d",
 			      last_submit);
 			return SLURM_ERROR;
 		}
-		time_tm.tm_mon -= arch_cond->step_purge;
+		time_tm.tm_mon -= arch_cond->purge_step;
 		time_tm.tm_isdst = -1;
 		curr_end = mktime(&time_tm);
-		env_array_append_fmt(&env, "SLURM_ARCHIVE_STEPS", "%u",
-				     arch_cond->archive_steps);
-		env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_STEP", "%d",
+		env_array_append_fmt(&env, "SLURM_ARCHIVE_EVENTS", "%u",
+				     arch_cond->archive_events);
+		env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_EVENT", "%d",
 				     curr_end);
 	}
 
-	if(arch_cond->job_purge) {
+	if(arch_cond->purge_job) {
 		/* use localtime to avoid any daylight savings issues */
 		if(!localtime_r(&last_submit, &time_tm)) {
 			error("Couldn't get localtime from first start %d",
 			      last_submit);
 			return SLURM_ERROR;
 		}
-		time_tm.tm_mon -= arch_cond->job_purge;
+		time_tm.tm_mon -= arch_cond->purge_job;
 		time_tm.tm_isdst = -1;
 		curr_end = mktime(&time_tm);
 		
@@ -138,6 +280,39 @@ static int _archive_script(acct_archive_cond_t *arch_cond, time_t last_submit)
 				      curr_end);
 	}
 
+	if(arch_cond->purge_step) {
+		/* use localtime to avoid any daylight savings issues */
+		if(!localtime_r(&last_submit, &time_tm)) {
+			error("Couldn't get localtime from first step start %d",
+			      last_submit);
+			return SLURM_ERROR;
+		}
+		time_tm.tm_mon -= arch_cond->purge_step;
+		time_tm.tm_isdst = -1;
+		curr_end = mktime(&time_tm);
+		env_array_append_fmt(&env, "SLURM_ARCHIVE_STEPS", "%u",
+				     arch_cond->archive_steps);
+		env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_STEP", "%d",
+				     curr_end);
+	}
+
+	if(arch_cond->purge_suspend) {
+		/* use localtime to avoid any daylight savings issues */
+		if(!localtime_r(&last_submit, &time_tm)) {
+			error("Couldn't get localtime from first "
+			      "suspend start %d",
+			      last_submit);
+			return SLURM_ERROR;
+		}
+		time_tm.tm_mon -= arch_cond->purge_step;
+		time_tm.tm_isdst = -1;
+		curr_end = mktime(&time_tm);
+		env_array_append_fmt(&env, "SLURM_ARCHIVE_SUSPEND", "%u",
+				     arch_cond->archive_steps);
+		env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_SUSPEND", "%d",
+				     curr_end);
+	}
+
 #ifdef _PATH_STDPATH
 	env_array_append (&env, "PATH", _PATH_STDPATH);
 #else
@@ -150,15 +325,151 @@ static int _archive_script(acct_archive_cond_t *arch_cond, time_t last_submit)
 	return SLURM_SUCCESS;
 }
 
+extern List setup_cluster_list_with_inx(mysql_conn_t *mysql_conn,
+					acct_job_cond_t *job_cond,
+					void **curr_cluster)
+{
+	List local_cluster_list = NULL;
+	time_t now = time(NULL);
+	MYSQL_RES *result = NULL;
+	MYSQL_ROW row;
+	hostlist_t temp_hl = NULL;
+	hostlist_iterator_t h_itr = NULL;
+	char *object = NULL;
+	char *query = NULL;
+	
+	if(!job_cond || !job_cond->used_nodes) 
+		return NULL;
+
+	if(!job_cond->cluster_list || list_count(job_cond->cluster_list) != 1) {
+		error("If you are doing a query against nodes "
+		      "you must only have 1 cluster "
+		      "you are asking for.");
+		return NULL;
+	}
+	
+	temp_hl = hostlist_create(job_cond->used_nodes);
+	if(!hostlist_count(temp_hl)) {
+		error("we didn't get any real hosts to look for.");
+		goto no_hosts;
+	}
+	h_itr = hostlist_iterator_create(temp_hl);
+
+	query = xstrdup_printf("select cluster_nodes, period_start, "
+			       "period_end from %s where node_name='' "
+			       "&& cluster_nodes !=''",
+			       event_table);
+
+	if((object = list_peek(job_cond->cluster_list)))
+		xstrfmtcat(query, " && cluster='%s'", object);
 
-extern int setup_job_cond_limits(acct_job_cond_t *job_cond, char **extra)
+	if(job_cond->usage_start) {
+		if(!job_cond->usage_end)
+			job_cond->usage_end = now;
+
+		xstrfmtcat(query, 
+			   " && ((period_start < %d) "
+			   "&& (period_end >= %d || period_end = 0))",
+			   job_cond->usage_end, job_cond->usage_start);
+	}
+		
+	debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
+	if(!(result = mysql_db_query_ret(mysql_conn->db_conn, query, 0))) {
+		xfree(query);
+		hostlist_destroy(temp_hl);
+		return NULL;
+	}
+	xfree(query);
+
+	local_cluster_list = list_create(_destroy_local_cluster);
+	while((row = mysql_fetch_row(result))) {
+		char *host = NULL;
+		int loc = 0;
+		local_cluster_t *local_cluster =
+			xmalloc(sizeof(local_cluster_t));
+		local_cluster->hl = hostlist_create(row[0]);
+		local_cluster->start = atoi(row[1]);
+		local_cluster->end   = atoi(row[2]);
+		local_cluster->asked_bitmap = 
+			bit_alloc(hostlist_count(local_cluster->hl));
+		while((host = hostlist_next(h_itr))) {
+			if((loc = hostlist_find(
+				    local_cluster->hl, host)) != -1) 
+				bit_set(local_cluster->asked_bitmap, loc);
+			free(host);
+		}
+		hostlist_iterator_reset(h_itr);
+		if(bit_ffs(local_cluster->asked_bitmap) != -1) {
+			list_append(local_cluster_list, local_cluster);
+			if(local_cluster->end == 0) {
+				local_cluster->end = now;
+				(*curr_cluster) = local_cluster;
+			}
+		} else 
+			_destroy_local_cluster(local_cluster);
+	}
+	mysql_free_result(result);
+	hostlist_iterator_destroy(h_itr);
+	if(!list_count(local_cluster_list)) {
+		hostlist_destroy(temp_hl);
+		list_destroy(local_cluster_list);
+		return NULL;
+	}
+no_hosts:
+
+	hostlist_destroy(temp_hl);
+
+	return local_cluster_list;
+}
+
+extern int good_nodes_from_inx(List local_cluster_list, 
+			       void **object, char *node_inx,
+			       int submit)
+{
+	local_cluster_t **curr_cluster = (local_cluster_t **)object;
+
+	/* check the bitmap to see if this is one of the jobs
+	   we are looking for */
+	if(*curr_cluster) {
+		bitstr_t *job_bitmap = NULL;
+		if(!node_inx || !node_inx[0])
+			return 0;
+		if((submit < (*curr_cluster)->start)
+		   || (submit > (*curr_cluster)->end)) {
+			local_cluster_t *local_cluster = NULL;
+			
+			ListIterator itr =
+				list_iterator_create(local_cluster_list);
+			while((local_cluster = list_next(itr))) {
+				if((submit >= local_cluster->start)
+				   && (submit <= local_cluster->end)) {
+					*curr_cluster = local_cluster;
+						break;
+				}
+			}
+			list_iterator_destroy(itr);
+			if(!local_cluster)
+				return 0;
+		}
+		job_bitmap = bit_alloc(hostlist_count((*curr_cluster)->hl));
+		bit_unfmt(job_bitmap, node_inx);
+		if(!bit_overlap((*curr_cluster)->asked_bitmap, job_bitmap)) {
+			FREE_NULL_BITMAP(job_bitmap);
+			return 0;
+		}
+		FREE_NULL_BITMAP(job_bitmap);
+	}
+	return 1;
+}
+
+extern int setup_job_cond_limits(mysql_conn_t *mysql_conn,
+				 acct_job_cond_t *job_cond, char **extra)
 {
 	int set = 0;
 	ListIterator itr = NULL;
 	char *object = NULL;
 	char *table_level = "t2";
 	jobacct_selected_step_t *selected_step = NULL;
-	time_t now = time(NULL);
 
 	if(!job_cond)
 		return 0;
@@ -254,6 +565,73 @@ extern int setup_job_cond_limits(acct_job_cond_t *job_cond, char **extra)
 		xstrcat(*extra, ")");
 	}
 
+	/* this must be done before resvid_list since we set
+	   resvid_list up here */
+	if(job_cond->resv_list && list_count(job_cond->resv_list)) {
+		char *query = xstrdup_printf(
+			"select distinct id from %s where (");
+		int my_set = 0;
+		MYSQL_RES *result = NULL;
+		MYSQL_ROW row;
+
+		if(job_cond->cluster_list
+		   && list_count(job_cond->cluster_list)) {
+			
+			itr = list_iterator_create(job_cond->cluster_list);
+			while((object = list_next(itr))) {
+				if(my_set) 
+					xstrcat(query, " || ");
+				xstrfmtcat(query, "cluster='%s'", object);
+				my_set = 1;
+			}
+			list_iterator_destroy(itr);
+		} 
+
+		if(my_set)
+			xstrcat(query, ") && (");
+		
+		itr = list_iterator_create(job_cond->resv_list);
+		while((object = list_next(itr))) {
+			if(my_set)
+				xstrcat(query, " || ");
+			xstrfmtcat(query, "name='%s'", object);
+			my_set = 1;
+		}
+		list_iterator_destroy(itr);
+		xstrcat(query, ")");
+		if(!(result = mysql_db_query_ret(
+			     mysql_conn->db_conn, query, 0))) {
+			xfree(query);
+			error("couldn't query the database");
+			goto no_resv;
+		}
+		xfree(query);
+		if(!job_cond->resvid_list) 
+			job_cond->resvid_list = list_create(slurm_destroy_char);
+		while((row = mysql_fetch_row(result))) {
+			list_append(job_cond->resvid_list, xstrdup(row[0]));
+		}
+		mysql_free_result(result);
+	}
+	no_resv:
+
+	if(job_cond->resvid_list && list_count(job_cond->resvid_list)) {
+		set = 0;
+		if(*extra)
+			xstrcat(*extra, " && (");
+		else
+			xstrcat(*extra, " where (");
+		itr = list_iterator_create(job_cond->resvid_list);
+		while((object = list_next(itr))) {
+			if(set)
+				xstrcat(*extra, " || ");
+			xstrfmtcat(*extra, "t1.resvid='%s'", object);
+			set = 1;
+		}
+		list_iterator_destroy(itr);
+		xstrcat(*extra, ")");
+	}
+
 	if(job_cond->step_list && list_count(job_cond->step_list)) {
 		set = 0;
 		if(*extra)
@@ -272,17 +650,20 @@ extern int setup_job_cond_limits(acct_job_cond_t *job_cond, char **extra)
 	}
 
 	if(job_cond->usage_start) {
-		if(!job_cond->usage_end)
-			job_cond->usage_end = now;
-
 		if(*extra)
 			xstrcat(*extra, " && (");
 		else
 			xstrcat(*extra, " where (");
-		xstrfmtcat(*extra, 
-			   "(t1.eligible < %d "
-			   "&& (t1.end >= %d || t1.end = 0)))",
-			   job_cond->usage_end, job_cond->usage_start);
+
+		if(!job_cond->usage_end)
+			xstrfmtcat(*extra, 
+				   "t1.end >= %d || t1.end = 0)",
+				   job_cond->usage_start);
+		else
+			xstrfmtcat(*extra, 
+				   "(t1.eligible < %d "
+				   "&& (t1.end >= %d || t1.end = 0)))",
+				   job_cond->usage_end, job_cond->usage_start);
 	} else if(job_cond->usage_end) {
 		if(*extra)
 			xstrcat(*extra, " && (");
@@ -371,7 +752,9 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 	List job_list = list_create(destroy_jobacct_job_rec);
 	uint16_t private_data = 0;
 	acct_user_rec_t user;
-		
+	local_cluster_t *curr_cluster = NULL;
+	List local_cluster_list = NULL;
+
 	/* if this changes you will need to edit the corresponding 
 	 * enum below also t1 is job_table */
 	char *job_req_inx[] = {
@@ -382,6 +765,7 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 		"t1.wckeyid",
 		"t1.uid",
 		"t1.gid",
+		"t1.resvid",
 		"t1.partition",
 		"t1.blockid",
 		"t1.cluster",
@@ -398,7 +782,9 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 		"t1.priority",
 		"t1.req_cpus",
 		"t1.alloc_cpus",
+		"t1.alloc_nodes",
 		"t1.nodelist",
+		"t1.node_inx",
 		"t1.kill_requid",
 		"t1.qos",
 		"t2.user",
@@ -407,6 +793,43 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 		"t2.lft"
 	};
 
+	enum {
+		JOB_REQ_ID,
+		JOB_REQ_JOBID,
+		JOB_REQ_ASSOCID,
+		JOB_REQ_WCKEY,
+		JOB_REQ_WCKEYID,
+		JOB_REQ_UID,
+		JOB_REQ_GID,
+		JOB_REQ_RESVID,
+		JOB_REQ_PARTITION,
+		JOB_REQ_BLOCKID,
+		JOB_REQ_CLUSTER1,
+		JOB_REQ_ACCOUNT1,
+		JOB_REQ_ELIGIBLE,
+		JOB_REQ_SUBMIT,
+		JOB_REQ_START,
+		JOB_REQ_END,
+		JOB_REQ_SUSPENDED,
+		JOB_REQ_NAME,
+		JOB_REQ_TRACKSTEPS,
+		JOB_REQ_STATE,
+		JOB_REQ_COMP_CODE,
+		JOB_REQ_PRIORITY,
+		JOB_REQ_REQ_CPUS,
+		JOB_REQ_ALLOC_CPUS,
+		JOB_REQ_ALLOC_NODES,
+		JOB_REQ_NODELIST,
+		JOB_REQ_NODE_INX,
+		JOB_REQ_KILL_REQUID,
+		JOB_REQ_QOS,
+		JOB_REQ_USER_NAME,
+		JOB_REQ_CLUSTER,
+		JOB_REQ_ACCOUNT,
+		JOB_REQ_LFT,
+		JOB_REQ_COUNT		
+	};
+
 	/* if this changes you will need to edit the corresponding 
 	 * enum below also t1 is step_table */
 	char *step_req_inx[] = {
@@ -416,10 +839,14 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 		"t1.suspended",
 		"t1.name",
 		"t1.nodelist",
+		"t1.node_inx",
 		"t1.state",
 		"t1.kill_requid",
 		"t1.comp_code",
+		"t1.nodes",
 		"t1.cpus",
+		"t1.tasks",
+		"t1.task_dist",
 		"t1.user_sec",
 		"t1.user_usec",
 		"t1.sys_sec",
@@ -442,39 +869,6 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 		"t1.ave_cpu"
 	};
 
-	enum {
-		JOB_REQ_ID,
-		JOB_REQ_JOBID,
-		JOB_REQ_ASSOCID,
-		JOB_REQ_WCKEY,
-		JOB_REQ_WCKEYID,
-		JOB_REQ_UID,
-		JOB_REQ_GID,
-		JOB_REQ_PARTITION,
-		JOB_REQ_BLOCKID,
-		JOB_REQ_CLUSTER1,
-		JOB_REQ_ACCOUNT1,
-		JOB_REQ_ELIGIBLE,
-		JOB_REQ_SUBMIT,
-		JOB_REQ_START,
-		JOB_REQ_END,
-		JOB_REQ_SUSPENDED,
-		JOB_REQ_NAME,
-		JOB_REQ_TRACKSTEPS,
-		JOB_REQ_STATE,
-		JOB_REQ_COMP_CODE,
-		JOB_REQ_PRIORITY,
-		JOB_REQ_REQ_CPUS,
-		JOB_REQ_ALLOC_CPUS,
-		JOB_REQ_NODELIST,
-		JOB_REQ_KILL_REQUID,
-		JOB_REQ_QOS,
-		JOB_REQ_USER_NAME,
-		JOB_REQ_CLUSTER,
-		JOB_REQ_ACCOUNT,
-		JOB_REQ_LFT,
-		JOB_REQ_COUNT		
-	};
 	enum {
 		STEP_REQ_STEPID,
 		STEP_REQ_START,
@@ -482,10 +876,14 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 		STEP_REQ_SUSPENDED,
 		STEP_REQ_NAME,
 		STEP_REQ_NODELIST,
+		STEP_REQ_NODE_INX,
 		STEP_REQ_STATE,
 		STEP_REQ_KILL_REQUID,
 		STEP_REQ_COMP_CODE,
+		STEP_REQ_NODES,
 		STEP_REQ_CPUS,
+		STEP_REQ_TASKS,
+		STEP_REQ_TASKDIST,
 		STEP_REQ_USER_SEC,
 		STEP_REQ_USER_USEC,
 		STEP_REQ_SYS_SEC,
@@ -531,12 +929,29 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 			   >= ACCT_ADMIN_OPERATOR) 
 				is_admin = 1;	
 			else {
-				assoc_mgr_fill_in_user(mysql_conn, &user, 1);
+				assoc_mgr_fill_in_user(mysql_conn, &user, 1,
+						       NULL);
 			}
 		}
 	}
 
-	setup_job_cond_limits(job_cond, &extra);
+
+	/* Here we set up environment to check used nodes of jobs.
+	   Since we store the bitmap of the entire cluster we can use
+	   that to set up a hostlist and set up the bitmap to make
+	   things work.  This should go before the setup of conds
+	   since we could update the start/end time.
+	*/
+	if(job_cond && job_cond->used_nodes) {
+		local_cluster_list = setup_cluster_list_with_inx(
+			mysql_conn, job_cond, (void **)&curr_cluster);
+		if(!local_cluster_list) {
+			list_destroy(job_list);
+			return NULL;
+		}
+	}
+
+	setup_job_cond_limits(mysql_conn, job_cond, &extra);
 
 	xfree(tmp);
 	xstrfmtcat(tmp, "%s", job_req_inx[0]);
@@ -565,6 +980,9 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 			     mysql_conn->db_conn, query, 0))) {
 			xfree(extra);
 			xfree(query);
+			list_destroy(job_list);
+			if(local_cluster_list)
+				list_destroy(local_cluster_list);
 			return NULL;
 		}
 		xfree(query);
@@ -603,6 +1021,7 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 		xstrcat(query, extra);
 		xfree(extra);
 	}
+	
 	/* Here we want to order them this way in such a way so it is
 	   easy to look for duplicates 
 	*/
@@ -610,13 +1029,13 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 		xstrcat(query, " order by t1.cluster, jobid, submit desc");
 	else
 		xstrcat(query, " order by t1.cluster, submit desc");
-		
 
 	debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
-	if(!(result = mysql_db_query_ret(
-		     mysql_conn->db_conn, query, 0))) {
+	if(!(result = mysql_db_query_ret(mysql_conn->db_conn, query, 0))) {
 		xfree(query);
 		list_destroy(job_list);
+		if(local_cluster_list)
+			list_destroy(local_cluster_list);
 		return NULL;
 	}
 	xfree(query);
@@ -624,6 +1043,7 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 	while((row = mysql_fetch_row(result))) {
 		char *id = row[JOB_REQ_ID];
 		bool job_ended = 0;
+		int submit = atoi(row[JOB_REQ_SUBMIT]);
 
 		curr_id = atoi(row[JOB_REQ_JOBID]);
 
@@ -632,13 +1052,26 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 		
 		last_id = curr_id;
 
+		/* check the bitmap to see if this is one of the jobs
+		   we are looking for */
+		if(!good_nodes_from_inx(local_cluster_list,
+					(void **)&curr_cluster,
+					row[JOB_REQ_NODE_INX], submit))
+			continue;
+		
 		job = create_jobacct_job_rec();
+		list_append(job_list, job);
 
 		job->alloc_cpus = atoi(row[JOB_REQ_ALLOC_CPUS]);
+		job->alloc_nodes = atoi(row[JOB_REQ_ALLOC_NODES]);
 		job->associd = atoi(row[JOB_REQ_ASSOCID]);
+		job->resvid = atoi(row[JOB_REQ_RESVID]);
 
-		if(row[JOB_REQ_WCKEY] && row[JOB_REQ_WCKEY][0])
+		/* we want a blank wckey if the name is null */
+		if(row[JOB_REQ_WCKEY])
 			job->wckey = xstrdup(row[JOB_REQ_WCKEY]);
+		else
+			job->wckey = xstrdup("");
 		job->wckeyid = atoi(row[JOB_REQ_WCKEYID]);
 
 		if(row[JOB_REQ_CLUSTER] && row[JOB_REQ_CLUSTER][0])
@@ -663,23 +1096,28 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 			job->blockid = xstrdup(row[JOB_REQ_BLOCKID]);
 
 		job->eligible = atoi(row[JOB_REQ_ELIGIBLE]);
-		job->submit = atoi(row[JOB_REQ_SUBMIT]);
+		job->submit = submit;
 		job->start = atoi(row[JOB_REQ_START]);
 		job->end = atoi(row[JOB_REQ_END]);
+
 		/* since the job->end could be set later end it here */
-		if(job->end)
+		if(job->end) {
 			job_ended = 1;
+			if(!job->start || (job->start > job->end))
+				job->start = job->end;
+		}
 
-		if(job_cond && job_cond->usage_start) {
+		if(job_cond && !job_cond->without_usage_truncation
+		   && job_cond->usage_start) {
 			if(job->start && (job->start < job_cond->usage_start))
 				job->start = job_cond->usage_start;
 
-			if(!job->start && job->end)
-				job->start = job->end;
-
 			if(!job->end || job->end > job_cond->usage_end) 
 				job->end = job_cond->usage_end;
 
+			if(!job->start)
+				job->start = job->end;
+			
 			job->elapsed = job->end - job->start;
 
 			if(row[JOB_REQ_SUSPENDED]) {
@@ -772,8 +1210,6 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 		job->qos = atoi(row[JOB_REQ_QOS]);
 		job->show_full = 1;
 					
-		list_append(job_list, job);
-
 		if(job_cond && job_cond->step_list
 		   && list_count(job_cond->step_list)) {
 			set = 0;
@@ -820,12 +1256,29 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 			     mysql_conn->db_conn, query, 0))) {
 			xfree(query);
 			list_destroy(job_list);
+			if(local_cluster_list)
+				list_destroy(local_cluster_list);
 			return NULL;
 		}
 		xfree(query);
+		
+		/* Querying the steps in the fashion was faster than
+		   doing only 1 query and then matching the steps up
+		   later with the job.  
+		*/
 		while ((step_row = mysql_fetch_row(step_result))) {
+			/* check the bitmap to see if this is one of the steps
+			   we are looking for */
+			if(!good_nodes_from_inx(local_cluster_list,
+						(void **)&curr_cluster,
+						step_row[STEP_REQ_NODE_INX],
+						submit))
+				continue;
+		
 			step = create_jobacct_step_rec();
-			step->jobid = job->jobid;
+			step->job_ptr = job;
+			if(!job->first_step_ptr)
+				job->first_step_ptr = step;
 			list_append(job->steps, step);
 			step->stepid = atoi(step_row[STEP_REQ_STEPID]);
 			/* info("got step %u.%u", */
@@ -833,6 +1286,13 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 			step->state = atoi(step_row[STEP_REQ_STATE]);
 			step->exitcode = atoi(step_row[STEP_REQ_COMP_CODE]);
 			step->ncpus = atoi(step_row[STEP_REQ_CPUS]);
+			step->nnodes = atoi(step_row[STEP_REQ_NODES]);
+
+			step->ntasks = atoi(step_row[STEP_REQ_TASKS]);
+			step->task_dist = atoi(step_row[STEP_REQ_TASKDIST]);
+			if(!step->ntasks)
+				step->ntasks = step->ncpus;
+
 			step->start = atoi(step_row[STEP_REQ_START]);
 			
 			step->end = atoi(step_row[STEP_REQ_END]);
@@ -842,7 +1302,8 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 				step->state = job->state;
 			}
 
-			if(job_cond && job_cond->usage_start) {
+			if(job_cond && !job_cond->without_usage_truncation
+			   && job_cond->usage_start) {
 				if(step->start 
 				   && (step->start < job_cond->usage_start))
 					step->start = job_cond->usage_start;
@@ -855,7 +1316,6 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 					step->end = job_cond->usage_end;
 			}
 
-			step->elapsed = step->end - step->start;
 			/* figure this out by start stop */
 			step->suspended = atoi(step_row[STEP_REQ_SUSPENDED]);
 			if(!step->end) {
@@ -928,14 +1388,16 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 			if(list_count(job->steps) > 1) 
 				job->track_steps = 1;
 			else if(step && step->stepname && job->jobname) {
-				if(strcmp(step->stepname, job->jobname))
+				if(strcmp(step->stepname, job->jobname)) 
 					job->track_steps = 1;
 			}
-               }
+		}
 		/* need to reset here to make the above test valid */
 		step = NULL;
 	}
 	mysql_free_result(result);
+	if(local_cluster_list)
+		list_destroy(local_cluster_list);
 
 	return job_list;
 }
@@ -943,18 +1405,29 @@ extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 					 acct_archive_cond_t *arch_cond)
 {
-	int rc = SLURM_SUCCESS, fd = 0;
+	int rc = SLURM_SUCCESS;
 	char *query = NULL;
 	time_t last_submit = time(NULL);
 	time_t curr_end;
 	char *tmp = NULL;
 	int i=0;
-	char *old_file = NULL, *new_file = NULL, *reg_file = NULL;
 	struct tm time_tm;
-	char start_char[32];
-	char end_char[32];
+
 //	DEF_TIMERS;
 
+	/* if this changes you will need to edit the corresponding 
+	 * enum below */
+	char *event_req_inx[] = {
+		"node_name",
+		"cluster",
+		"cpu_count",
+		"state",
+		"period_start",
+		"period_end",
+		"reason",
+		"cluster_nodes",
+	};
+
 	/* if this changes you will need to edit the corresponding 
 	 * enum below */
 	char *job_req_inx[] = {
@@ -965,6 +1438,7 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 		"wckeyid",
 		"uid",
 		"gid",
+		"resvid",
 		"partition",
 		"blockid",
 		"cluster",
@@ -981,7 +1455,9 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 		"priority",
 		"req_cpus",
 		"alloc_cpus",
+		"alloc_nodes",
 		"nodelist",
+		"node_inx",
 		"kill_requid",
 		"qos"
 	};
@@ -996,10 +1472,14 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 		"suspended",
 		"name",
 		"nodelist",
+		"node_inx",
 		"state",
 		"kill_requid",
 		"comp_code",
+		"nodes",
 		"cpus",
+		"tasks",
+		"task_dist",
 		"user_sec",
 		"user_usec",
 		"sys_sec",
@@ -1022,6 +1502,28 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 		"ave_cpu"
 	};
 
+
+	/* if this changes you will need to edit the corresponding 
+	 * enum below */
+	char *suspend_req_inx[] = {
+		"id",
+		"associd",
+		"start",
+		"end",
+	};
+
+	enum {
+		EVENT_REQ_NODE,
+		EVENT_REQ_CLUSTER,
+		EVENT_REQ_CPUS,
+		EVENT_REQ_STATE,
+		EVENT_REQ_START,
+		EVENT_REQ_END,
+		EVENT_REQ_REASON,
+		EVENT_REQ_NODES,
+		EVENT_REQ_COUNT
+	};
+
 	enum {
 		JOB_REQ_ID,
 		JOB_REQ_JOBID,
@@ -1030,6 +1532,7 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 		JOB_REQ_WCKEYID,
 		JOB_REQ_UID,
 		JOB_REQ_GID,
+		JOB_REQ_RESVID,
 		JOB_REQ_PARTITION,
 		JOB_REQ_BLOCKID,
 		JOB_REQ_CLUSTER,
@@ -1046,11 +1549,14 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 		JOB_REQ_PRIORITY,
 		JOB_REQ_REQ_CPUS,
 		JOB_REQ_ALLOC_CPUS,
+		JOB_REQ_ALLOC_NODES,
 		JOB_REQ_NODELIST,
+		JOB_REQ_NODE_INX,
 		JOB_REQ_KILL_REQUID,
 		JOB_REQ_QOS,
 		JOB_REQ_COUNT		
 	};
+
 	enum {
 		STEP_REQ_ID,
 		STEP_REQ_STEPID,
@@ -1059,10 +1565,14 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 		STEP_REQ_SUSPENDED,
 		STEP_REQ_NAME,
 		STEP_REQ_NODELIST,
+		STEP_REQ_NODE_INX,
 		STEP_REQ_STATE,
 		STEP_REQ_KILL_REQUID,
 		STEP_REQ_COMP_CODE,
+		STEP_REQ_NODES,
 		STEP_REQ_CPUS,
+		STEP_REQ_TASKS,
+		STEP_REQ_TASKDIST,
 		STEP_REQ_USER_SEC,
 		STEP_REQ_USER_USEC,
 		STEP_REQ_SYS_SEC,
@@ -1086,6 +1596,14 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 		STEP_REQ_COUNT
 	};
 
+	enum {
+		SUSPEND_REQ_ID,
+		SUSPEND_REQ_ASSOCID,
+		SUSPEND_REQ_START,
+		SUSPEND_REQ_END,
+		SUSPEND_REQ_COUNT
+	};
+
 	if(!arch_cond) {
 		error("No arch_cond was given to archive from.  returning");
 		return SLURM_ERROR;
@@ -1103,7 +1621,7 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 	time_tm.tm_isdst = -1;
 	last_submit = mktime(&time_tm);
 	last_submit--;
-	debug("adjusted last submit is (%d)", last_submit);
+	debug("archive: adjusted last submit is (%d)", last_submit);
 	
 	if(arch_cond->archive_script)
 		return _archive_script(arch_cond, last_submit);
@@ -1112,9 +1630,176 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 		return SLURM_ERROR;
 	}
 
-	if(arch_cond->step_purge) {
+	if(arch_cond->purge_event) {
+		/* remove all data from step table that was older than
+		 * period_start * arch_cond->purge_event. 
+		 */
+		/* use localtime to avoid any daylight savings issues */
+		if(!localtime_r(&last_submit, &time_tm)) {
+			error("Couldn't get localtime from first submit %d",
+			      last_submit);
+			return SLURM_ERROR;
+		}
+		time_tm.tm_mday = 1;
+		time_tm.tm_mon -= arch_cond->purge_event;
+		time_tm.tm_isdst = -1;
+		curr_end = mktime(&time_tm);
+
+		debug4("from %d - %d months purging events from before %d", 
+		       last_submit, arch_cond->purge_event, curr_end);
+		
+		if(arch_cond->archive_events) {
+			char *insert = NULL;
+			MYSQL_RES *result = NULL;
+			
+			xfree(tmp);
+			xstrfmtcat(tmp, "%s", event_req_inx[0]);
+			for(i=1; i<EVENT_REQ_COUNT; i++) {
+				xstrfmtcat(tmp, ", %s", event_req_inx[i]);
+			}
+
+			/* get all the events started before this time
+			   listed */
+			query = xstrdup_printf("select %s from %s where "
+					       "period_start <= %d "
+					       "&& period_end != 0 "
+					       "order by period_start asc",
+					       tmp, event_table, curr_end);
+
+			insert = xstrdup_printf("insert into %s (%s) ",
+						event_table, tmp);
+			xfree(tmp);
+			
+//			START_TIMER;
+			debug3("%d(%d) query\n%s", mysql_conn->conn,
+			       __LINE__, query);
+			if(!(result = mysql_db_query_ret(
+				     mysql_conn->db_conn, query, 0))) {
+				xfree(insert);
+				xfree(query);
+				return SLURM_ERROR;
+			}
+			xfree(query);
+//			END_TIMER2("step query");
+//			info("event query took %s", TIME_STR);
+
+			if(!mysql_num_rows(result)) {
+				xfree(insert);
+				mysql_free_result(result);
+				goto exit_events;
+			}
+
+			rc = _write_archive_file(
+				result, EVENT_REQ_START, EVENT_REQ_COUNT,
+				curr_end, arch_cond->archive_dir, 
+				"event", insert, false);
+			
+			xfree(insert);
+			mysql_free_result(result);
+
+			if(rc != SLURM_SUCCESS)
+				return rc;
+		}
+		query = xstrdup_printf("delete from %s where "
+				       "period_start <= %d && period_end != 0",
+				       event_table, curr_end);
+		debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
+		rc = mysql_db_query(mysql_conn->db_conn, query);
+		xfree(query);
+		if(rc != SLURM_SUCCESS) {
+			error("Couldn't remove old event data");
+			return SLURM_ERROR;
+		}
+	}
+
+exit_events:
+
+	if(arch_cond->purge_suspend) {
 		/* remove all data from step table that was older than
-		 * start * arch_cond->step_purge. 
+		 * period_start * arch_cond->purge_suspend. 
+		 */
+		/* use localtime to avoid any daylight savings issues */
+		if(!localtime_r(&last_submit, &time_tm)) {
+			error("Couldn't get localtime from first submit %d",
+			      last_submit);
+			return SLURM_ERROR;
+		}
+		time_tm.tm_mday = 1;
+		time_tm.tm_mon -= arch_cond->purge_suspend;
+		time_tm.tm_isdst = -1;
+		curr_end = mktime(&time_tm);
+
+		debug4("from %d - %d months purging suspend from before %d", 
+		       last_submit, arch_cond->purge_suspend, curr_end);
+		
+		if(arch_cond->archive_suspend) {
+			char *insert = NULL;
+			MYSQL_RES *result = NULL;
+			
+			xfree(tmp);
+			xstrfmtcat(tmp, "%s", suspend_req_inx[0]);
+			for(i=1; i<SUSPEND_REQ_COUNT; i++) {
+				xstrfmtcat(tmp, ", %s", suspend_req_inx[i]);
+			}
+
+			/* get all the suspend started before this time
+			   listed */
+			query = xstrdup_printf("select %s from %s where "
+					       "start <= %d && end != 0 "
+					       "order by start asc",
+					       tmp, suspend_table, curr_end);
+
+			insert = xstrdup_printf("insert into %s (%s) ",
+						suspend_table, tmp);
+			xfree(tmp);
+			
+//			START_TIMER;
+			debug3("%d(%d) query\n%s", mysql_conn->conn,
+			       __LINE__, query);
+			if(!(result = mysql_db_query_ret(
+				     mysql_conn->db_conn, query, 0))) {
+				xfree(insert);
+				xfree(query);
+				return SLURM_ERROR;
+			}
+			xfree(query);
+//			END_TIMER2("step query");
+//			info("suspend query took %s", TIME_STR);
+
+			if(!mysql_num_rows(result)) {
+				xfree(insert);
+				mysql_free_result(result);
+				goto exit_suspend;
+			}
+
+			rc = _write_archive_file(
+				result, SUSPEND_REQ_START, SUSPEND_REQ_COUNT,
+				curr_end, arch_cond->archive_dir, 
+				"suspend", insert, false);
+			
+			xfree(insert);
+			mysql_free_result(result);
+
+			if(rc != SLURM_SUCCESS)
+				return rc;
+		}
+		query = xstrdup_printf("delete from %s where start <= %d "
+				       "&& end != 0",
+				       suspend_table, curr_end);
+		debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
+		rc = mysql_db_query(mysql_conn->db_conn, query);
+		xfree(query);
+		if(rc != SLURM_SUCCESS) {
+			error("Couldn't remove old suspend data");
+			return SLURM_ERROR;
+		}
+	}
+
+exit_suspend:
+
+	if(arch_cond->purge_step) {
+		/* remove all data from step table that was older than
+		 * start * arch_cond->purge_step. 
 		 */
 		/* use localtime to avoid any daylight savings issues */
 		if(!localtime_r(&last_submit, &time_tm)) {
@@ -1122,19 +1807,16 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 			      last_submit);
 			return SLURM_ERROR;
 		}
-		time_tm.tm_mon -= arch_cond->step_purge;
+		time_tm.tm_mon -= arch_cond->purge_step;
 		time_tm.tm_isdst = -1;
 		curr_end = mktime(&time_tm);
 
 		debug4("from %d - %d months purging steps from before %d", 
-		       last_submit, arch_cond->step_purge, curr_end);
+		       last_submit, arch_cond->purge_step, curr_end);
 		
 		if(arch_cond->archive_steps) {
 			char *insert = NULL;
-			char *values = NULL;
-			int period_start = 0;
 			MYSQL_RES *result = NULL;
-			MYSQL_ROW row;
 
 			xfree(tmp);
 			xstrfmtcat(tmp, "%s", step_req_inx[0]);
@@ -1173,116 +1855,19 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 				mysql_free_result(result);
 				goto exit_steps;
 			}
-
-//			START_TIMER;
-			slurm_mutex_lock(&local_file_lock);
-			while((row = mysql_fetch_row(result))) {
-				if(period_start) {
-					xstrcat(values, ",\n(");
-				} else {
-					period_start = 
-						atoi(row[STEP_REQ_START]);
-					localtime_r((time_t *)&period_start,
-						    &time_tm);
-					time_tm.tm_sec = 0;
-					time_tm.tm_min = 0;
-					time_tm.tm_hour = 0;
-					time_tm.tm_mday = 1;
-					time_tm.tm_isdst = -1;
-					period_start = mktime(&time_tm);
-					localtime_r((time_t *)&period_start,
-						    &time_tm);
-					snprintf(start_char, sizeof(start_char),
-						 "%4.4u-%2.2u-%2.2u"
-						 "T%2.2u:%2.2u:%2.2u",
-						 (time_tm.tm_year + 1900),
-						 (time_tm.tm_mon+1), 
-						 time_tm.tm_mday,
-						 time_tm.tm_hour,
-						 time_tm.tm_min, 
-						 time_tm.tm_sec);
-
-					localtime_r((time_t *)&curr_end,
-						    &time_tm);
-					snprintf(end_char, sizeof(end_char),
-						 "%4.4u-%2.2u-%2.2u"
-						 "T%2.2u:%2.2u:%2.2u",
-						 (time_tm.tm_year + 1900),
-						 (time_tm.tm_mon+1), 
-						 time_tm.tm_mday,
-						 time_tm.tm_hour,
-						 time_tm.tm_min, 
-						 time_tm.tm_sec);
-
-					/* write the buffer to file */
-					reg_file = xstrdup_printf(
-						"%s/step_archive_%s_%s.sql",
-						arch_cond->archive_dir,
-						start_char, end_char);
-					debug("Storing step archive at %s",
-					      reg_file);
-					old_file = xstrdup_printf(
-						"%s.old", reg_file);
-					new_file = xstrdup_printf(
-						"%s.new", reg_file);
-					
-					fd = creat(new_file, 0600);
-					if (fd == 0) {
-						error("Can't save archive, "
-						      "create file %s error %m",
-						      new_file);
-						rc = errno;
-						xfree(insert);
-						break;
-					} 
-					values = xstrdup_printf("%s\nvalues\n(",
-								insert);
-					xfree(insert);
-				}
-	
-				xstrfmtcat(values, "'%s'", row[0]);
-				for(i=1; i<STEP_REQ_COUNT; i++) {
-					xstrfmtcat(values, ", '%s'", row[i]);
-				}
-				xstrcat(values, ", '1')");
-				
-				if(!fd || ((rc = _write_to_file(fd, values))
-					   != SLURM_SUCCESS)) {
-					xfree(values);
-					break;
-				}
-				xfree(values);
-			}
-			mysql_free_result(result);
-			rc = _write_to_file(
-				fd, " on duplicate key update deleted=1;");
-//			END_TIMER2("write file");
-//			info("write file took %s", TIME_STR);
-
-			fsync(fd);
-			close(fd);
 			
-			if (rc)
-				(void) unlink(new_file);
-			else {			/* file shuffle */
-				int ign;	/* avoid warning */
-				(void) unlink(old_file);
-				ign =  link(reg_file, old_file);
-				(void) unlink(reg_file);
-				ign =   link(new_file, reg_file);
-				(void) unlink(new_file);
-			}
-			xfree(old_file);
-			xfree(reg_file);
-			xfree(new_file);
-			slurm_mutex_unlock(&local_file_lock);
+			rc = _write_archive_file(
+				result, STEP_REQ_START, STEP_REQ_COUNT,
+				curr_end, arch_cond->archive_dir, 
+				"step", insert, true);
+			
+			xfree(insert);
+			mysql_free_result(result);
 
-			period_start = 0;
+			if(rc != SLURM_SUCCESS)
+				return rc;
 		}
 
-		if(rc != SLURM_SUCCESS) 
-			return rc;
-
 		query = xstrdup_printf("delete from %s where start <= %d "
 				       "&& end != 0",
 				       step_table, curr_end);
@@ -1296,9 +1881,9 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 	}
 exit_steps:
 	
-	if(arch_cond->job_purge) {
+	if(arch_cond->purge_job) {
 		/* remove all data from step table that was older than
-		 * last_submit * arch_cond->job_purge. 
+		 * last_submit * arch_cond->purge_job. 
 		 */
 		/* use localtime to avoid any daylight savings issues */
 		if(!localtime_r(&last_submit, &time_tm)) {
@@ -1307,20 +1892,17 @@ exit_steps:
 			return SLURM_ERROR;
 		}
 		time_tm.tm_mday = 1;
-		time_tm.tm_mon -= arch_cond->job_purge;
+		time_tm.tm_mon -= arch_cond->purge_job;
 		time_tm.tm_isdst = -1;
 		curr_end = mktime(&time_tm);
 
 		debug4("from %d - %d months purging jobs from before %d", 
-		       last_submit, arch_cond->job_purge, curr_end);
+		       last_submit, arch_cond->purge_job, curr_end);
 
 		if(arch_cond->archive_jobs) {
 			char *insert = NULL;
-			char *values = NULL;
-			int period_start = 0;
 			MYSQL_RES *result = NULL;
-			MYSQL_ROW row;
-			
+						
 			xfree(tmp);
 			xstrfmtcat(tmp, "%s", job_req_inx[0]);
 			for(i=1; i<JOB_REQ_COUNT; i++) {
@@ -1358,114 +1940,18 @@ exit_steps:
 				goto exit_jobs;
 			}
 			
-//			START_TIMER;
-			slurm_mutex_lock(&local_file_lock);
-			while((row = mysql_fetch_row(result))) {
-				if(period_start) {
-					xstrcat(values, ",\n(");
-				} else {
-					period_start = 
-						atoi(row[JOB_REQ_SUBMIT]);
-					localtime_r((time_t *)&period_start,
-						    &time_tm);
-					time_tm.tm_sec = 0;
-					time_tm.tm_min = 0;
-					time_tm.tm_hour = 0;
-					time_tm.tm_mday = 1;
-					time_tm.tm_isdst = -1;
-					period_start = mktime(&time_tm);
-					localtime_r((time_t *)&period_start,
-						    &time_tm);
-					snprintf(start_char, sizeof(start_char),
-						 "%4.4u-%2.2u-%2.2u"
-						 "T%2.2u:%2.2u:%2.2u",
-						 (time_tm.tm_year + 1900),
-						 (time_tm.tm_mon+1), 
-						 time_tm.tm_mday,
-						 time_tm.tm_hour,
-						 time_tm.tm_min, 
-						 time_tm.tm_sec);
-
-					localtime_r((time_t *)&curr_end,
-						    &time_tm);
-
-					snprintf(end_char, sizeof(end_char),
-						 "%4.4u-%2.2u-%2.2u"
-						 "T%2.2u:%2.2u:%2.2u",
-						 (time_tm.tm_year + 1900),
-						 (time_tm.tm_mon+1), 
-						 time_tm.tm_mday,
-						 time_tm.tm_hour,
-						 time_tm.tm_min, 
-						 time_tm.tm_sec);
-
-					/* write the buffer to file */
-					reg_file = xstrdup_printf(
-						"%s/job_archive_%s_%s.sql",
-						arch_cond->archive_dir,
-						start_char, end_char);
-					debug("Storing job archive at %s",
-					      reg_file);
-					old_file = xstrdup_printf(
-						"%s.old", reg_file);
-					new_file = xstrdup_printf(
-						"%s.new", reg_file);
-					
-					fd = creat(new_file, 0600);
-					if (fd == 0) {
-						error("Can't save archive, "
-						      "create file %s error %m",
-						      new_file);
-						rc = errno;
-						xfree(insert);
-						break;
-					} 
-					values = xstrdup_printf("%s\nvalues\n(",
-								insert);
-					xfree(insert);
-				}
-				
-				xstrfmtcat(values, "'%s'", row[0]);
-				for(i=1; i<JOB_REQ_COUNT; i++) {
-					xstrfmtcat(values, ", '%s'", row[i]);
-				}
-				xstrcat(values, ", '1')");
-				
-				if(!fd || ((rc = _write_to_file(fd, values))
-					   != SLURM_SUCCESS)) {
-					xfree(values);
-					break;
-				}
-				xfree(values);
-			}
-			mysql_free_result(result);
-
-			rc = _write_to_file(
-				fd, " on duplicate key update deleted=1;");
-//			END_TIMER2("write file");
-//			info("write file took %s", TIME_STR);
-			
+			rc = _write_archive_file(
+				result, JOB_REQ_SUBMIT, JOB_REQ_COUNT,
+				curr_end, arch_cond->archive_dir, 
+				"job", insert, true);
 			
-			fsync(fd);
-			close(fd);
-
-			if (rc)
-				(void) unlink(new_file);
-			else {			/* file shuffle */
-				int ign;	/* avoid warning */
-				(void) unlink(old_file);
-				ign =  link(reg_file, old_file);
-				(void) unlink(reg_file);
-				ign =  link(new_file, reg_file);
-				(void) unlink(new_file);
-			}
-			xfree(old_file);
-			xfree(reg_file);
-			xfree(new_file);
-			slurm_mutex_unlock(&local_file_lock);
+			xfree(insert);
+			mysql_free_result(result);
 
-			period_start = 0;
+			if(rc != SLURM_SUCCESS)
+				return rc;
 		}
+
 		query = xstrdup_printf("delete from %s where submit <= %d "
 				       "&& end != 0",
 				       job_table, curr_end);
@@ -1478,7 +1964,7 @@ exit_steps:
 		}
 	}
 exit_jobs:
-	
+
 	return SLURM_SUCCESS;
 }
 
@@ -1550,5 +2036,3 @@ extern int mysql_jobacct_process_archive_load(mysql_conn_t *mysql_conn,
 
 	return SLURM_SUCCESS;
 }
-
-#endif	
diff --git a/src/plugins/accounting_storage/mysql/mysql_jobacct_process.h b/src/plugins/accounting_storage/mysql/mysql_jobacct_process.h
index 12d7a4c45..4adc1c3a6 100644
--- a/src/plugins/accounting_storage/mysql/mysql_jobacct_process.h
+++ b/src/plugins/accounting_storage/mysql/mysql_jobacct_process.h
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -53,16 +54,39 @@
 #include "src/database/mysql_common.h"
 #include "src/common/slurm_accounting_storage.h"
 
-#ifdef HAVE_MYSQL
-
 //extern int acct_db_init;
-
+extern char *acct_coord_table;
+extern char *acct_table;
+extern char *assoc_day_table;
+extern char *assoc_hour_table;
+extern char *assoc_month_table;
 extern char *assoc_table;
+extern char *cluster_day_table;
+extern char *cluster_hour_table;
+extern char *cluster_month_table;
+extern char *cluster_table;
+extern char *event_table;
 extern char *job_table;
+extern char *last_ran_table;
+extern char *qos_table;
+extern char *resv_table;
 extern char *step_table;
+extern char *txn_table;
+extern char *user_table;
 extern char *suspend_table;
+extern char *wckey_day_table;
+extern char *wckey_hour_table;
+extern char *wckey_month_table;
+extern char *wckey_table;
 
-extern int setup_job_cond_limits(acct_job_cond_t *job_cond, char **extra);
+extern List setup_cluster_list_with_inx(mysql_conn_t *mysql_conn,
+					acct_job_cond_t *job_cond,
+					void **curr_cluster);
+extern int good_nodes_from_inx(List local_cluster_list, 
+			       void **object, char *node_inx,
+			       int submit);
+extern int setup_job_cond_limits(mysql_conn_t *mysql_conn,
+				 acct_job_cond_t *job_cond, char **extra);
 
 extern List mysql_jobacct_process_get_jobs(mysql_conn_t *mysql_conn, uid_t uid,
 					   acct_job_cond_t *job_cond);
@@ -72,7 +96,4 @@ extern int mysql_jobacct_process_archive(mysql_conn_t *mysql_conn,
 
 extern int mysql_jobacct_process_archive_load(mysql_conn_t *mysql_conn,
 					      acct_archive_rec_t *arch_rec);
-
-#endif
-
 #endif
diff --git a/src/plugins/accounting_storage/mysql/mysql_rollup.c b/src/plugins/accounting_storage/mysql/mysql_rollup.c
index d338bd3c0..801331617 100644
--- a/src/plugins/accounting_storage/mysql/mysql_rollup.c
+++ b/src/plugins/accounting_storage/mysql/mysql_rollup.c
@@ -7,10 +7,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -40,8 +41,6 @@
 
 #include "mysql_rollup.h"
 
-#ifdef HAVE_MYSQL
-
 typedef struct {
 	int id;
 	uint64_t a_cpu;
@@ -49,18 +48,31 @@ typedef struct {
 
 typedef struct {
 	char *name;
+	int id; /*only needed for reservations */
 	uint64_t total_time;
 	uint64_t a_cpu;
 	int cpu_count;
 	uint64_t d_cpu;
 	uint64_t i_cpu;
 	uint64_t o_cpu;
+	uint64_t pd_cpu;
 	uint64_t r_cpu;
 	time_t start;
 	time_t end;
 } local_cluster_usage_t;
 
-extern void _destroy_local_id_usage(void *object)
+typedef struct {
+	uint64_t a_cpu;
+	char *cluster;
+	int id;
+	List local_assocs; /* list of assocs to spread unused time
+			      over of type local_id_usage_t */
+	uint64_t total_time;
+	time_t start;
+	time_t end;
+} local_resv_usage_t;
+
+static void _destroy_local_id_usage(void *object)
 {
 	local_id_usage_t *a_usage = (local_id_usage_t *)object;
 	if(a_usage) {
@@ -68,7 +80,7 @@ extern void _destroy_local_id_usage(void *object)
 	}
 }
 
-extern void _destroy_local_cluster_usage(void *object)
+static void _destroy_local_cluster_usage(void *object)
 {
 	local_cluster_usage_t *c_usage = (local_cluster_usage_t *)object;
 	if(c_usage) {
@@ -77,6 +89,17 @@ extern void _destroy_local_cluster_usage(void *object)
 	}
 }
 
+static void _destroy_local_resv_usage(void *object)
+{
+	local_resv_usage_t *r_usage = (local_resv_usage_t *)object;
+	if(r_usage) {
+		xfree(r_usage->cluster);
+		if(r_usage->local_assocs)
+			list_destroy(r_usage->local_assocs);
+		xfree(r_usage);
+	}
+}
+
 extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 			       time_t start, time_t end)
 {
@@ -92,18 +115,19 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 	ListIterator a_itr = NULL;
 	ListIterator c_itr = NULL;
 	ListIterator w_itr = NULL;
+	ListIterator r_itr = NULL;
 	List assoc_usage_list = list_create(_destroy_local_id_usage);
 	List cluster_usage_list = list_create(_destroy_local_cluster_usage);
 	List wckey_usage_list = list_create(_destroy_local_id_usage);
+	List resv_usage_list = list_create(_destroy_local_resv_usage);
 	uint16_t track_wckey = slurm_get_track_wckey();
-	local_cluster_usage_t *last_c_usage = NULL;
 
 	char *event_req_inx[] = {
 		"node_name",
 		"cluster",
 		"cpu_count",
 		"period_start",
-		"period_end"
+		"period_end",
 	};
 	char *event_str = NULL;
 	enum {
@@ -114,6 +138,7 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 		EVENT_REQ_END,
 		EVENT_REQ_COUNT
 	};
+
 	char *job_req_inx[] = {
 		"id",
 		"jobid",
@@ -125,7 +150,9 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 		"end",
 		"suspended",
 		"alloc_cpus",
-		"req_cpus"
+		"req_cpus",
+		"resvid"
+	   
 	};
 	char *job_str = NULL;
 	enum {
@@ -140,8 +167,10 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 		JOB_REQ_SUSPENDED,
 		JOB_REQ_ACPU,
 		JOB_REQ_RCPU,
+		JOB_REQ_RESVID,
 		JOB_REQ_COUNT
 	};
+
 	char *suspend_req_inx[] = {
 		"start",
 		"end"
@@ -153,6 +182,27 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 		SUSPEND_REQ_COUNT
 	};
 
+	char *resv_req_inx[] = {
+		"id",
+		"cluster",
+		"assoclist",
+		"cpus",
+		"flags",
+		"start",
+		"end"
+	};
+	char *resv_str = NULL;
+	enum {
+		RESV_REQ_ID,
+		RESV_REQ_CLUSTER,
+		RESV_REQ_ASSOCS,
+		RESV_REQ_CPU,
+		RESV_REQ_FLAGS,
+		RESV_REQ_START,
+		RESV_REQ_END,
+		RESV_REQ_COUNT
+	};
+
 	i=0;
 	xstrfmtcat(event_str, "%s", event_req_inx[i]);
 	for(i=1; i<EVENT_REQ_COUNT; i++) {
@@ -171,32 +221,43 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 		xstrfmtcat(suspend_str, ", %s", suspend_req_inx[i]);
 	}
 
+	i=0;
+	xstrfmtcat(resv_str, "%s", resv_req_inx[i]);
+	for(i=1; i<RESV_REQ_COUNT; i++) {
+		xstrfmtcat(resv_str, ", %s", resv_req_inx[i]);
+	}
+
 /* 	info("begin start %s", ctime(&curr_start)); */
 /* 	info("begin end %s", ctime(&curr_end)); */
 	a_itr = list_iterator_create(assoc_usage_list);
 	c_itr = list_iterator_create(cluster_usage_list);
 	w_itr = list_iterator_create(wckey_usage_list);
+	r_itr = list_iterator_create(resv_usage_list);
 	while(curr_start < end) {
+		local_cluster_usage_t *last_c_usage = NULL;
 		int last_id = -1;
 		int last_wckeyid = -1;
 		int seconds = 0;
 		local_cluster_usage_t *c_usage = NULL;
+		local_resv_usage_t *r_usage = NULL;
 		local_id_usage_t *a_usage = NULL;
 		local_id_usage_t *w_usage = NULL;
 
-		last_c_usage = NULL;
-
 		debug3("curr hour is now %d-%d", curr_start, curr_end);
 /* 		info("start %s", ctime(&curr_start)); */
 /* 		info("end %s", ctime(&curr_end)); */
 		
-		// first get the events during this time
+		/* first get the events during this time.  All that is
+		 * except things with the maintainance flag set in the
+		 * state.  We handle those later with the reservations.
+		 */
 		query = xstrdup_printf("select %s from %s where "
-				       "(period_start < %d "
+				       "!(state & %d) && (period_start < %d "
 				       "&& (period_end >= %d "
 				       "|| period_end = 0)) "
 				       "order by node_name, period_start",
 				       event_str, event_table,
+				       NODE_STATE_MAINT,
 				       curr_end, curr_start);
 
 		debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
@@ -211,7 +272,7 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 			int row_start = atoi(row[EVENT_REQ_START]);
 			int row_end = atoi(row[EVENT_REQ_END]);
 			int row_cpu = atoi(row[EVENT_REQ_CPU]);
-					
+		
 			if(row_start < curr_start)
 				row_start = curr_start;
 		
@@ -299,6 +360,83 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 		}
 		mysql_free_result(result);
 
+		// now get the reservations during this time
+		query = xstrdup_printf("select %s from %s where "
+				       "(start < %d && end >= %d) "
+				       "order by cluster, start",
+				       resv_str, resv_table,
+				       curr_end, curr_start);
+
+		debug3("%d(%d) query\n%s", mysql_conn->conn, __LINE__, query);
+		if(!(result = mysql_db_query_ret(
+			     mysql_conn->db_conn, query, 0))) {
+			xfree(query);
+			return SLURM_ERROR;
+		}
+		xfree(query);
+		
+		while((row = mysql_fetch_row(result))) {
+			int row_start = atoi(row[RESV_REQ_START]);
+			int row_end = atoi(row[RESV_REQ_END]);
+			int row_cpu = atoi(row[RESV_REQ_CPU]);
+			int row_flags = atoi(row[RESV_REQ_FLAGS]);
+
+			if(row_start < curr_start)
+				row_start = curr_start;
+		
+			if(!row_end || row_end > curr_end) 
+				row_end = curr_end;
+
+			/* Don't worry about it if the time is less
+			 * than 1 second.
+			 */
+			if((row_end - row_start) < 1)
+				continue;
+
+			r_usage = xmalloc(sizeof(local_resv_usage_t));
+			r_usage->id = atoi(row[RESV_REQ_ID]);
+
+			r_usage->local_assocs = list_create(slurm_destroy_char);
+			slurm_addto_char_list(r_usage->local_assocs, 
+					      row[RESV_REQ_ASSOCS]);
+
+			r_usage->cluster = xstrdup(row[RESV_REQ_CLUSTER]);
+			r_usage->total_time = (row_end - row_start) * row_cpu;
+			r_usage->start = row_start;
+			r_usage->end = row_end;
+			list_append(resv_usage_list, r_usage);
+
+			/* Since this reservation was added to the
+			   cluster and only certain people could run
+			   there we will use this as allocated time on
+			   the system.  If the reservation was a
+			   maintenance then we add the time to planned
+			   down time. 
+			*/
+			if(last_c_usage && !strcmp(last_c_usage->name,
+						   r_usage->cluster)) {
+				c_usage = last_c_usage;
+			} else {
+				list_iterator_reset(c_itr);
+				while((c_usage = list_next(c_itr))) {
+					if(!strcmp(c_usage->name,
+						   r_usage->cluster)) {
+						last_c_usage = c_usage;
+						break;
+					}
+				}				
+			}
+			if(row_flags & RESERVE_FLAG_MAINT)
+				c_usage->pd_cpu += r_usage->total_time;
+			else
+				c_usage->a_cpu += r_usage->total_time;
+/* 			info("adding this much %lld to cluster %s", */
+/* 			     r_usage->total_time, c_usage->name); */
+
+		}
+		mysql_free_result(result);
+
+		/* now get the jobs during this time only  */
 		query = xstrdup_printf("select %s from %s where "
 				       "(eligible < %d && (end >= %d "
 				       "|| end = 0)) "
@@ -318,6 +456,7 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 			int job_id = atoi(row[JOB_REQ_JOBID]);
 			int assoc_id = atoi(row[JOB_REQ_ASSOCID]);
 			int wckey_id = atoi(row[JOB_REQ_WCKEYID]);
+			int resv_id = atoi(row[JOB_REQ_RESVID]);
 			int row_eligible = atoi(row[JOB_REQ_ELG]);
 			int row_start = atoi(row[JOB_REQ_START]);
 			int row_end = atoi(row[JOB_REQ_END]);
@@ -336,7 +475,7 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 
 			if(!row_start || ((row_end - row_start) < 1)) 
 				goto calc_cluster;
-
+			
 			seconds = (row_end - row_start);
 
 			if(row[JOB_REQ_SUSPENDED]) {
@@ -377,7 +516,7 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 
 					if((local_end - local_start) < 1)
 						continue;
-					
+
 					seconds -= (local_end - local_start);
 				}
 				mysql_free_result(result2);
@@ -386,14 +525,14 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 				debug4("This job (%u) was suspended "
 				       "the entire hour", job_id);
 				continue;
-			}
+			} 
 
 			if(last_id != assoc_id) {
 				a_usage = xmalloc(sizeof(local_id_usage_t));
 				a_usage->id = assoc_id;
 				list_append(assoc_usage_list, a_usage);
 				last_id = assoc_id;
-			}
+			} 
 			
 			a_usage->a_cpu += seconds * row_acpu;
 
@@ -423,6 +562,56 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 			if(!row[JOB_REQ_CLUSTER] || !row[JOB_REQ_CLUSTER][0]) 
 				continue;
 			
+			/* first figure out the reservation */
+			if(resv_id) {
+				if(seconds <= 0)
+					continue;
+				/* Since we have already added the
+				   entire reservation as used time on
+				   the cluster we only need to
+				   calculate the used time for the
+				   reservation and then divy up the
+				   unused time over the associations
+				   able to run in the reservation.
+				   Since the job was to run, or ran a
+				   reservation we don't care about eligible time
+				   since that could totally skew the
+				   clusters reserved time
+				   since the job may be able to run
+				   outside of the reservation. */
+				list_iterator_reset(r_itr);
+				while((r_usage = list_next(r_itr))) {
+					/* since the reservation could
+					   have changed in some way,
+					   thus making a new
+					   reservation record in the
+					   database, we have to make
+					   sure all the reservations
+					   are checked to see if such
+					   a thing has happened */
+					if((r_usage->id == resv_id)
+					   && !strcmp(r_usage->cluster,
+						      row[JOB_REQ_CLUSTER])) {
+						int temp_end = row_end;
+						int temp_start = row_start;
+						if(r_usage->start > temp_start)
+							temp_start =
+								r_usage->start;
+						if(r_usage->end < temp_end)
+							temp_end = r_usage->end;
+						
+						if((temp_end - temp_start)
+						   > 0) {
+							r_usage->a_cpu +=
+								(temp_end
+								 - temp_start)
+								* row_acpu;
+						}
+					}
+				}
+				continue;
+			}
+
 			if(last_c_usage && !strcmp(last_c_usage->name,
 						   row[JOB_REQ_CLUSTER])) {
 				c_usage = last_c_usage;
@@ -469,7 +658,8 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 					row_end = c_usage->end;
 				
 				if((row_end - row_start) > 0) {
-					seconds = (row_end - row_start);
+					seconds = (row_end - row_start)
+						* row_rcpu;
 					
 /* 					info("%d assoc %d reserved " */
 /* 					     "(%d)(%d-%d) * %d = %d " */
@@ -481,23 +671,118 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 /* 					     row_rcpu, */
 /* 					     seconds * row_rcpu, */
 /* 					     row_rcpu); */
-					c_usage->r_cpu += seconds * row_rcpu;
+					c_usage->r_cpu += seconds;
 				}
 			}
 		}
 		mysql_free_result(result);
 
+		/* now figure out how much more to add to the
+		   associations that could had run in the reservation
+		*/
+		list_iterator_reset(r_itr);
+		while((r_usage = list_next(r_itr))) {
+			int64_t idle = r_usage->total_time - r_usage->a_cpu;
+			char *assoc = NULL;
+			ListIterator tmp_itr = NULL;
+
+			if(idle <= 0)
+				continue;
+			
+			/* now divide that time by the number of
+			   associations in the reservation and add
+			   them to each association */
+			seconds = idle / list_count(r_usage->local_assocs);
+/* 			info("resv %d got %d for seconds for %d assocs", */
+/* 			     r_usage->id, seconds, */
+/* 			     list_count(r_usage->local_assocs)); */
+			tmp_itr = list_iterator_create(r_usage->local_assocs);
+			while((assoc = list_next(tmp_itr))) {
+				int associd = atoi(assoc);
+				if(last_id != associd) {
+					list_iterator_reset(a_itr);
+					while((a_usage = list_next(a_itr))) {
+						if(!a_usage->id == associd) {
+							last_id = a_usage->id;
+							break;
+						}
+					}
+				}
+
+				if(!a_usage) {
+					a_usage = xmalloc(
+						sizeof(local_id_usage_t));
+					a_usage->id = associd;
+					list_append(assoc_usage_list, a_usage);
+					last_id = associd;
+				} 
+				
+				a_usage->a_cpu += seconds;
+			}
+			list_iterator_destroy(tmp_itr);
+		}
+
 		/* Now put the lists into the usage tables */
 		list_iterator_reset(c_itr);
 		while((c_usage = list_next(c_itr))) {
-			c_usage->i_cpu = c_usage->total_time - c_usage->a_cpu -
-				c_usage->d_cpu - c_usage->r_cpu;
+			uint64_t total_used = 0;
+				
+			/* sanity check to make sure we don't have more
+			   allocated cpus than possible. */
+			if(c_usage->total_time < c_usage->a_cpu) {
+				char *start_char = xstrdup(ctime(&curr_start));
+				char *end_char = xstrdup(ctime(&curr_end));
+				error("We have more allocated time than is "
+				      "possible (%llu > %llu) for "
+				      "cluster %s(%d) from %s - %s",
+				      c_usage->a_cpu, c_usage->total_time,
+				      c_usage->name, c_usage->cpu_count,
+				      start_char, end_char);
+				xfree(start_char);
+				xfree(end_char);
+				c_usage->a_cpu = c_usage->total_time;
+			}
+
+			total_used = c_usage->a_cpu +
+				c_usage->d_cpu + c_usage->pd_cpu;
+
+			/* Make sure the total time we care about
+			   doesn't go over the limit */
+			if(c_usage->total_time < (total_used)) {
+				char *start_char = xstrdup(ctime(&curr_start));
+				char *end_char = xstrdup(ctime(&curr_end));
+				error("We have more time than is "
+				      "possible (%llu+%llu+%llu)(%llu) "
+				      "> %llu) for "
+				      "cluster %s(%d) from %s - %s",
+				      c_usage->a_cpu, c_usage->d_cpu,
+				      c_usage->pd_cpu, total_used, 
+				      c_usage->total_time,
+				      c_usage->name, c_usage->cpu_count,
+				      start_char, end_char);
+				xfree(start_char);
+				xfree(end_char);
+
+				/* set the planned down to 0 and the
+				   down to what ever is left from the
+				   allocated. */
+				c_usage->pd_cpu = 0;
+				c_usage->d_cpu = 
+					c_usage->total_time - c_usage->a_cpu;
+
+				total_used = c_usage->a_cpu +
+					c_usage->d_cpu + c_usage->pd_cpu;
+			}
+
+			c_usage->i_cpu = c_usage->total_time -
+				total_used - c_usage->r_cpu;
 			/* sanity check just to make sure we have a
 			 * legitimate time after we calulated
 			 * idle/reserved time put extra in the over
 			 * commit field
 			 */
-			
+/* 			info("%s got idle of %lld", c_usage->name,  */
+/* 			     (int64_t)c_usage->i_cpu); */
 			if((int64_t)c_usage->i_cpu < 0) {
 /* 				info("got %d %d %d", c_usage->r_cpu, */
 /* 				     c_usage->i_cpu, c_usage->o_cpu); */
@@ -523,26 +808,30 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 			if(query) {
 				xstrfmtcat(query, 
 					   ", (%d, %d, '%s', %d, %d, "
-					   "%llu, %llu, %llu, %llu, %llu)",
+					   "%llu, %llu, %llu, "
+					   "%llu, %llu, %llu)",
 					   now, now, 
 					   c_usage->name, c_usage->start, 
 					   c_usage->cpu_count, c_usage->a_cpu,
-					   c_usage->d_cpu, c_usage->i_cpu,
-					   c_usage->o_cpu, c_usage->r_cpu); 
+					   c_usage->d_cpu, c_usage->pd_cpu,
+					   c_usage->i_cpu, c_usage->o_cpu,
+					   c_usage->r_cpu); 
 			} else {
 				xstrfmtcat(query, 
 					   "insert into %s (creation_time, "
 					   "mod_time, cluster, period_start, "
 					   "cpu_count, alloc_cpu_secs, "
-					   "down_cpu_secs, idle_cpu_secs, "
-					   "over_cpu_secs, resv_cpu_secs) "
+					   "down_cpu_secs, pdown_cpu_secs, "
+					   "idle_cpu_secs, over_cpu_secs, "
+					   "resv_cpu_secs) "
 					   "values (%d, %d, '%s', %d, %d, "
-					   "%llu, %llu, %llu, %llu, %llu)",
+					   "%llu, %llu, %llu, "
+					   "%llu, %llu, %llu)",
 					   cluster_hour_table, now, now, 
 					   c_usage->name, c_usage->start, 
 					   c_usage->cpu_count,
-					   c_usage->a_cpu,
-					   c_usage->d_cpu, c_usage->i_cpu,
+					   c_usage->a_cpu, c_usage->d_cpu, 
+					   c_usage->pd_cpu, c_usage->i_cpu,
 					   c_usage->o_cpu, c_usage->r_cpu); 
 			}
 		}
@@ -553,6 +842,7 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 				   "mod_time=%d, cpu_count=VALUES(cpu_count), "
 				   "alloc_cpu_secs=VALUES(alloc_cpu_secs), "
 				   "down_cpu_secs=VALUES(down_cpu_secs), "
+				   "pdown_cpu_secs=VALUES(pdown_cpu_secs), "
 				   "idle_cpu_secs=VALUES(idle_cpu_secs), "
 				   "over_cpu_secs=VALUES(over_cpu_secs), "
 				   "resv_cpu_secs=VALUES(resv_cpu_secs)",
@@ -593,7 +883,7 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 			xstrfmtcat(query, 
 				   " on duplicate key update "
 				   "mod_time=%d, "
-				   "alloc_cpu_secs=VALUES(alloc_cpu_secs)",
+				   "alloc_cpu_secs=VALUES(alloc_cpu_secs);",
 				   now);
 					   	
 			debug3("%d(%d) query\n%s",
@@ -635,7 +925,7 @@ extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 			xstrfmtcat(query, 
 				   " on duplicate key update "
 				   "mod_time=%d, "
-				   "alloc_cpu_secs=VALUES(alloc_cpu_secs)",
+				   "alloc_cpu_secs=VALUES(alloc_cpu_secs);",
 				   now);
 					   	
 			debug3("%d(%d) query\n%s",
@@ -659,19 +949,23 @@ end_it:
 	xfree(suspend_str);	
 	xfree(event_str);	
 	xfree(job_str);
+	xfree(resv_str);
 	list_iterator_destroy(a_itr);
 	list_iterator_destroy(c_itr);
 	list_iterator_destroy(w_itr);
+	list_iterator_destroy(r_itr);
 		
 	list_destroy(assoc_usage_list);
 	list_destroy(cluster_usage_list);
 	list_destroy(wckey_usage_list);
+	list_destroy(resv_usage_list);
+
 /* 	info("stop start %s", ctime(&curr_start)); */
 /* 	info("stop end %s", ctime(&curr_end)); */
 	return rc;
 }
 extern int mysql_daily_rollup(mysql_conn_t *mysql_conn, 
-			      time_t start, time_t end)
+			      time_t start, time_t end, uint16_t archive_data)
 {
 	/* can't just add 86400 since daylight savings starts and ends every
 	 * once in a while
@@ -712,12 +1006,13 @@ extern int mysql_daily_rollup(mysql_conn_t *mysql_conn,
 		xstrfmtcat(query,
 			   "insert into %s (creation_time, "
 			   "mod_time, cluster, period_start, cpu_count, "
-			   "alloc_cpu_secs, down_cpu_secs, idle_cpu_secs, "
-			   "over_cpu_secs, resv_cpu_secs) "
+			   "alloc_cpu_secs, down_cpu_secs, pdown_cpu_secs, "
+			   "idle_cpu_secs, over_cpu_secs, resv_cpu_secs) "
 			   "select %d, %d, cluster, "
 			   "%d, @CPU:=MAX(cpu_count), "
 			   "@ASUM:=SUM(alloc_cpu_secs), "
 			   "@DSUM:=SUM(down_cpu_secs), "
+			   "@PDSUM:=SUM(pdown_cpu_secs), "
 			   "@ISUM:=SUM(idle_cpu_secs), "
 			   "@OSUM:=SUM(over_cpu_secs), "
 			   "@RSUM:=SUM(resv_cpu_secs) from %s where "
@@ -725,8 +1020,8 @@ extern int mysql_daily_rollup(mysql_conn_t *mysql_conn,
 			   "group by cluster on duplicate key update "
 			   "mod_time=%d, cpu_count=@CPU, "
 			   "alloc_cpu_secs=@ASUM, down_cpu_secs=@DSUM, "
-			   "idle_cpu_secs=@ISUM, over_cpu_secs=@OSUM, "
-			   "resv_cpu_secs=@RSUM;",
+			   "pdown_cpu_secs=@PDSUM, idle_cpu_secs=@ISUM, "
+			   "over_cpu_secs=@OSUM, resv_cpu_secs=@RSUM;",
 			   cluster_day_table, now, now, curr_start,
 			   cluster_hour_table,
 			   curr_end, curr_start, now);
@@ -735,8 +1030,8 @@ extern int mysql_daily_rollup(mysql_conn_t *mysql_conn,
 				   "insert into %s (creation_time, "
 				   "mod_time, id, period_start, "
 				   "alloc_cpu_secs) select %d, %d, "
-				   "id, %d, @ASUM:=SUM(alloc_cpu_secs) from %s "
-				   "where (period_start < %d && "
+				   "id, %d, @ASUM:=SUM(alloc_cpu_secs) "
+				   "from %s where (period_start < %d && "
 				   "period_start >= %d) "
 				   "group by id on duplicate key update "
 				   "mod_time=%d, alloc_cpu_secs=@ASUM;",
@@ -765,17 +1060,6 @@ extern int mysql_daily_rollup(mysql_conn_t *mysql_conn,
 		start_tm.tm_isdst = -1;
 		curr_end = mktime(&start_tm);
 	}
-	/* remove all data from suspend table that was older than
-	 * start. 
-	 */
-	query = xstrdup_printf("delete from %s where end < %d && end != 0",
-			       suspend_table, start);
-	rc = mysql_db_query(mysql_conn->db_conn, query);
-	xfree(query);
-	if(rc != SLURM_SUCCESS) {
-		error("Couldn't remove old suspend data");
-		return SLURM_ERROR;
-	}
 			       
 /* 	info("stop start %s", ctime(&curr_start)); */
 /* 	info("stop end %s", ctime(&curr_end)); */
@@ -783,7 +1067,7 @@ extern int mysql_daily_rollup(mysql_conn_t *mysql_conn,
 	return SLURM_SUCCESS;
 }
 extern int mysql_monthly_rollup(mysql_conn_t *mysql_conn,
-				time_t start, time_t end)
+				time_t start, time_t end, uint16_t archive_data)
 {
 	int rc = SLURM_SUCCESS;
 	struct tm start_tm;
@@ -823,12 +1107,13 @@ extern int mysql_monthly_rollup(mysql_conn_t *mysql_conn,
 		xstrfmtcat(query,
 			   "insert into %s (creation_time, "
 			   "mod_time, cluster, period_start, cpu_count, "
-			   "alloc_cpu_secs, down_cpu_secs, idle_cpu_secs, "
-			   "over_cpu_secs, resv_cpu_secs) "
+			   "alloc_cpu_secs, down_cpu_secs, pdown_cpu_secs, "
+			   "idle_cpu_secs, over_cpu_secs, resv_cpu_secs) "
 			   "select %d, %d, cluster, "
 			   "%d, @CPU:=MAX(cpu_count), "
 			   "@ASUM:=SUM(alloc_cpu_secs), "
 			   "@DSUM:=SUM(down_cpu_secs), "
+			   "@PDSUM:=SUM(pdown_cpu_secs), "
 			   "@ISUM:=SUM(idle_cpu_secs), "
 			   "@OSUM:=SUM(over_cpu_secs), "
 			   "@RSUM:=SUM(resv_cpu_secs) from %s where "
@@ -836,17 +1121,17 @@ extern int mysql_monthly_rollup(mysql_conn_t *mysql_conn,
 			   "group by cluster on duplicate key update "
 			   "mod_time=%d, cpu_count=@CPU, "
 			   "alloc_cpu_secs=@ASUM, down_cpu_secs=@DSUM, "
-			   "idle_cpu_secs=@ISUM, over_cpu_secs=@OSUM, "
-			   "resv_cpu_secs=@RSUM;",
+			   "pdown_cpu_secs=@PDSUM, idle_cpu_secs=@ISUM, "
+			   "over_cpu_secs=@OSUM, resv_cpu_secs=@RSUM;",
 			   cluster_month_table, now, now, curr_start,
 			   cluster_day_table,
 			   curr_end, curr_start, now);
 		if(track_wckey) {
 			xstrfmtcat(query,
 				   "insert into %s (creation_time, mod_time, "
-				   "id, "
-				   "period_start, alloc_cpu_secs) select %d, "
-				   "%d, id, %d, @ASUM:=SUM(alloc_cpu_secs) "
+				   "id, period_start, alloc_cpu_secs) "
+				   "select %d, %d, id, %d, "
+				   "@ASUM:=SUM(alloc_cpu_secs) "
 				   "from %s where (period_start < %d && "
 				   "period_start >= %d) "
 				   "group by id on duplicate key update "
@@ -877,30 +1162,26 @@ extern int mysql_monthly_rollup(mysql_conn_t *mysql_conn,
 		curr_end = mktime(&start_tm);
 	}
 
-	/* remove all data from event table that was older than
-	 * start. 
-	 */
-	query = xstrdup_printf("delete from %s where period_end < %d "
-			       "&& period_end != 0",
-			       event_table, start);
-	rc = mysql_db_query(mysql_conn->db_conn, query);
-	xfree(query);
-	if(rc != SLURM_SUCCESS) {
-		error("Couldn't remove old event data");
-		return SLURM_ERROR;
-	}
+	/* if we didn't ask for archive data return here and don't do
+	   anything extra just rollup */
+
+	if(!archive_data)
+		return SLURM_SUCCESS;
+
 	if(!slurmdbd_conf) 
 		return SLURM_SUCCESS;
 
 	memset(&arch_cond, 0, sizeof(arch_cond));
 	arch_cond.archive_dir = slurmdbd_conf->archive_dir;
+	arch_cond.archive_events = slurmdbd_conf->archive_events;
 	arch_cond.archive_jobs = slurmdbd_conf->archive_jobs;
 	arch_cond.archive_script = slurmdbd_conf->archive_script;
 	arch_cond.archive_steps = slurmdbd_conf->archive_steps;
-	arch_cond.job_purge = slurmdbd_conf->job_purge;
-	arch_cond.step_purge = slurmdbd_conf->step_purge;
+	arch_cond.archive_suspend = slurmdbd_conf->archive_suspend;
+	arch_cond.purge_event = slurmdbd_conf->purge_event;
+	arch_cond.purge_job = slurmdbd_conf->purge_job;
+	arch_cond.purge_step = slurmdbd_conf->purge_step;
+	arch_cond.purge_suspend = slurmdbd_conf->purge_suspend;
 
 	return mysql_jobacct_process_archive(mysql_conn, &arch_cond);
 }
-
-#endif
diff --git a/src/plugins/accounting_storage/mysql/mysql_rollup.h b/src/plugins/accounting_storage/mysql/mysql_rollup.h
index c1a4a72ce..bfa1bdbbb 100644
--- a/src/plugins/accounting_storage/mysql/mysql_rollup.h
+++ b/src/plugins/accounting_storage/mysql/mysql_rollup.h
@@ -7,10 +7,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -43,27 +44,11 @@
 
 #include "mysql_jobacct_process.h"
 
-#ifdef HAVE_MYSQL
-extern char *assoc_table;
-extern char *assoc_day_table;
-extern char *assoc_hour_table;
-extern char *assoc_month_table;
-extern char *cluster_day_table;
-extern char *cluster_hour_table;
-extern char *cluster_month_table;
-extern char *event_table;
-extern char *suspend_table;
-extern char *wckey_day_table;
-extern char *wckey_hour_table;
-extern char *wckey_month_table;
-
 extern int mysql_hourly_rollup(mysql_conn_t *mysql_conn,
 			       time_t start, time_t end);
 extern int mysql_daily_rollup(mysql_conn_t *mysql_conn,
-			      time_t start, time_t end);
+			      time_t start, time_t end, uint16_t archive_data);
 extern int mysql_monthly_rollup(mysql_conn_t *mysql_conn,
-			       time_t start, time_t end);
-
-#endif
-
+				time_t start, time_t end,
+				uint16_t archive_data);
 #endif
diff --git a/src/plugins/accounting_storage/none/Makefile.in b/src/plugins/accounting_storage/none/Makefile.in
index 976404aa9..91582b370 100644
--- a/src/plugins/accounting_storage/none/Makefile.in
+++ b/src/plugins/accounting_storage/none/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -111,6 +115,10 @@ 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@
diff --git a/src/plugins/accounting_storage/none/accounting_storage_none.c b/src/plugins/accounting_storage/none/accounting_storage_none.c
index a0a8555a9..6001cab98 100644
--- a/src/plugins/accounting_storage/none/accounting_storage_none.c
+++ b/src/plugins/accounting_storage/none/accounting_storage_none.c
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -145,6 +146,12 @@ extern int acct_storage_p_add_wckeys(void *db_conn, uint32_t uid,
 	return SLURM_SUCCESS;
 }
 
+extern int acct_storage_p_add_reservation(void *db_conn,
+					  acct_reservation_rec_t *resv)
+{
+	return SLURM_SUCCESS;
+}
+
 extern List acct_storage_p_modify_users(void *db_conn, uint32_t uid,
 				       acct_user_cond_t *user_q,
 				       acct_user_rec_t *user)
@@ -187,6 +194,12 @@ extern List acct_storage_p_modify_wckeys(void *db_conn, uint32_t uid,
 	return SLURM_SUCCESS;
 }
 
+extern int acct_storage_p_modify_reservation(void *db_conn,
+					     acct_reservation_rec_t *resv)
+{
+	return SLURM_SUCCESS;
+}
+
 extern List acct_storage_p_remove_users(void *db_conn, uint32_t uid,
 				       acct_user_cond_t *user_q)
 {
@@ -230,6 +243,12 @@ extern List acct_storage_p_remove_wckeys(void *db_conn, uint32_t uid,
 	return NULL;
 }
 
+extern int acct_storage_p_remove_reservation(void *db_conn,
+					     acct_reservation_rec_t *resv)
+{
+	return SLURM_SUCCESS;
+}
+
 extern List acct_storage_p_get_users(void *db_conn, uid_t uid,
 				     acct_user_cond_t *user_q)
 {
@@ -248,6 +267,11 @@ extern List acct_storage_p_get_clusters(void *db_conn, uid_t uid,
 	return NULL;
 }
 
+extern List acct_storage_p_get_config(void *db_conn)
+{
+	return NULL;
+}
+
 extern List acct_storage_p_get_associations(void *db_conn, uid_t uid,
 					    acct_association_cond_t *assoc_q)
 {
@@ -266,6 +290,12 @@ extern List acct_storage_p_get_wckeys(void *db_conn, uid_t uid,
 	return NULL;
 }
 
+extern List acct_storage_p_get_reservations(void *mysql_conn, uid_t uid,
+					    acct_reservation_cond_t *resv_cond)
+{
+	return NULL;
+}
+
 extern List acct_storage_p_get_txn(void *db_conn, uid_t uid,
 				   acct_txn_cond_t *txn_cond)
 {
@@ -282,7 +312,8 @@ extern int acct_storage_p_get_usage(void *db_conn, uid_t uid,
 }
 
 extern int acct_storage_p_roll_usage(void *db_conn, 
-				     time_t sent_start)
+				     time_t sent_start, time_t sent_end,
+				     uint16_t archive_data)
 {
 	int rc = SLURM_SUCCESS;
 
@@ -313,6 +344,7 @@ extern int clusteracct_storage_p_register_ctld(void *db_conn,
 
 extern int clusteracct_storage_p_cluster_procs(void *db_conn,
 					       char *cluster,
+					       char *cluster_nodes,
 					       uint32_t procs,
 					       time_t event_time)
 {
diff --git a/src/plugins/accounting_storage/pgsql/Makefile.am b/src/plugins/accounting_storage/pgsql/Makefile.am
index c0c2f0637..b4d649b83 100644
--- a/src/plugins/accounting_storage/pgsql/Makefile.am
+++ b/src/plugins/accounting_storage/pgsql/Makefile.am
@@ -6,6 +6,7 @@ PLUGIN_FLAGS = -module -avoid-version --export-dynamic
 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
 
+if WITH_PGSQL
 pkglib_LTLIBRARIES = accounting_storage_pgsql.la
 
 # Pgsql storage plugin.
@@ -19,3 +20,7 @@ accounting_storage_pgsql_la_LIBADD = \
 force:
 $(accounting_storage_pgsql_la_LIBADD) : force
 	@cd `dirname $@` && $(MAKE) `basename $@`
+else
+EXTRA_accounting_storage_pgsql_la_SOURCES = accounting_storage_pgsql.c \
+		pgsql_jobacct_process.c pgsql_jobacct_process.h
+endif
diff --git a/src/plugins/accounting_storage/pgsql/Makefile.in b/src/plugins/accounting_storage/pgsql/Makefile.in
index 45edbd335..64c6572f2 100644
--- a/src/plugins/accounting_storage/pgsql/Makefile.in
+++ b/src/plugins/accounting_storage/pgsql/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,18 +81,24 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)"
 pkglibLTLIBRARIES_INSTALL = $(INSTALL)
 LTLIBRARIES = $(pkglib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-accounting_storage_pgsql_la_DEPENDENCIES =  \
-	$(top_builddir)/src/database/libslurm_pgsql.la \
-	$(am__DEPENDENCIES_1)
-am_accounting_storage_pgsql_la_OBJECTS =  \
-	accounting_storage_pgsql_la-accounting_storage_pgsql.lo \
-	accounting_storage_pgsql_la-pgsql_jobacct_process.lo
+@WITH_PGSQL_TRUE@accounting_storage_pgsql_la_DEPENDENCIES = $(top_builddir)/src/database/libslurm_pgsql.la \
+@WITH_PGSQL_TRUE@	$(am__DEPENDENCIES_1)
+am__accounting_storage_pgsql_la_SOURCES_DIST =  \
+	accounting_storage_pgsql.c pgsql_jobacct_process.c \
+	pgsql_jobacct_process.h
+@WITH_PGSQL_TRUE@am_accounting_storage_pgsql_la_OBJECTS = accounting_storage_pgsql_la-accounting_storage_pgsql.lo \
+@WITH_PGSQL_TRUE@	accounting_storage_pgsql_la-pgsql_jobacct_process.lo
+am__EXTRA_accounting_storage_pgsql_la_SOURCES_DIST =  \
+	accounting_storage_pgsql.c pgsql_jobacct_process.c \
+	pgsql_jobacct_process.h
 accounting_storage_pgsql_la_OBJECTS =  \
 	$(am_accounting_storage_pgsql_la_OBJECTS)
 accounting_storage_pgsql_la_LINK = $(LIBTOOL) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(accounting_storage_pgsql_la_CFLAGS) $(CFLAGS) \
 	$(accounting_storage_pgsql_la_LDFLAGS) $(LDFLAGS) -o $@
+@WITH_PGSQL_TRUE@am_accounting_storage_pgsql_la_rpath = -rpath \
+@WITH_PGSQL_TRUE@	$(pkglibdir)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
 depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
 am__depfiles_maybe = depfiles
@@ -101,8 +111,10 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(accounting_storage_pgsql_la_SOURCES)
-DIST_SOURCES = $(accounting_storage_pgsql_la_SOURCES)
+SOURCES = $(accounting_storage_pgsql_la_SOURCES) \
+	$(EXTRA_accounting_storage_pgsql_la_SOURCES)
+DIST_SOURCES = $(am__accounting_storage_pgsql_la_SOURCES_DIST) \
+	$(am__EXTRA_accounting_storage_pgsql_la_SOURCES_DIST)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -116,6 +128,10 @@ 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@
@@ -278,16 +294,19 @@ top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 PLUGIN_FLAGS = -module -avoid-version --export-dynamic
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
-pkglib_LTLIBRARIES = accounting_storage_pgsql.la
+@WITH_PGSQL_TRUE@pkglib_LTLIBRARIES = accounting_storage_pgsql.la
 
 # Pgsql storage plugin.
-accounting_storage_pgsql_la_SOURCES = accounting_storage_pgsql.c \
-		pgsql_jobacct_process.c pgsql_jobacct_process.h
+@WITH_PGSQL_TRUE@accounting_storage_pgsql_la_SOURCES = accounting_storage_pgsql.c \
+@WITH_PGSQL_TRUE@		pgsql_jobacct_process.c pgsql_jobacct_process.h
 
-accounting_storage_pgsql_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
-accounting_storage_pgsql_la_CFLAGS = $(PGSQL_CFLAGS)
-accounting_storage_pgsql_la_LIBADD = \
-	$(top_builddir)/src/database/libslurm_pgsql.la $(PGSQL_LIBS)
+@WITH_PGSQL_TRUE@accounting_storage_pgsql_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+@WITH_PGSQL_TRUE@accounting_storage_pgsql_la_CFLAGS = $(PGSQL_CFLAGS)
+@WITH_PGSQL_TRUE@accounting_storage_pgsql_la_LIBADD = \
+@WITH_PGSQL_TRUE@	$(top_builddir)/src/database/libslurm_pgsql.la $(PGSQL_LIBS)
+
+@WITH_PGSQL_FALSE@EXTRA_accounting_storage_pgsql_la_SOURCES = accounting_storage_pgsql.c \
+@WITH_PGSQL_FALSE@		pgsql_jobacct_process.c pgsql_jobacct_process.h
 
 all: all-am
 
@@ -350,7 +369,7 @@ clean-pkglibLTLIBRARIES:
 	  rm -f "$${dir}/so_locations"; \
 	done
 accounting_storage_pgsql.la: $(accounting_storage_pgsql_la_OBJECTS) $(accounting_storage_pgsql_la_DEPENDENCIES) 
-	$(accounting_storage_pgsql_la_LINK) -rpath $(pkglibdir) $(accounting_storage_pgsql_la_OBJECTS) $(accounting_storage_pgsql_la_LIBADD) $(LIBS)
+	$(accounting_storage_pgsql_la_LINK) $(am_accounting_storage_pgsql_la_rpath) $(accounting_storage_pgsql_la_OBJECTS) $(accounting_storage_pgsql_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -582,9 +601,9 @@ uninstall-am: uninstall-pkglibLTLIBRARIES
 	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
 
 
-force:
-$(accounting_storage_pgsql_la_LIBADD) : force
-	@cd `dirname $@` && $(MAKE) `basename $@`
+@WITH_PGSQL_TRUE@force:
+@WITH_PGSQL_TRUE@$(accounting_storage_pgsql_la_LIBADD) : force
+@WITH_PGSQL_TRUE@	@cd `dirname $@` && $(MAKE) `basename $@`
 # 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/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c b/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c
index 4d4ab0aa2..060d6b4a6 100644
--- a/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c
+++ b/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -76,7 +77,6 @@ const uint32_t plugin_version = 100;
 #ifndef HAVE_PGSQL
 typedef void PGconn;
 #else
-#define DEFAULT_ACCT_DB "slurm_acct_db"
 
 static pgsql_db_info_t *pgsql_db_info = NULL;
 static char *pgsql_db_name = NULL;
@@ -137,7 +137,7 @@ static pgsql_db_info_t *_pgsql_acct_create_db_info()
 	/* it turns out it is better if using defaults to let postgres
 	   handle them on it's own terms */
 	if(!db_info->port) {
-		db_info->port = 5432;
+		db_info->port = DEFAULT_PGSQL_PORT;
 		slurm_set_accounting_storage_port(db_info->port);
 	}
 	db_info->host = slurm_get_accounting_storage_host();
@@ -731,20 +731,20 @@ extern int init ( void )
 
 	location = slurm_get_accounting_storage_loc();
 	if(!location)
-		pgsql_db_name = xstrdup(DEFAULT_ACCT_DB);
+		pgsql_db_name = xstrdup(DEFAULT_ACCOUNTING_DB);
 	else {
 		int i = 0;
 		while(location[i]) {
 			if(location[i] == '.' || location[i] == '/') {
 				debug("%s doesn't look like a database "
 				      "name using %s",
-				      location, DEFAULT_ACCT_DB);
+				      location, DEFAULT_ACCOUNTING_DB);
 				break;
 			}
 			i++;
 		}
 		if(location[i]) {
-			pgsql_db_name = xstrdup(DEFAULT_ACCT_DB);
+			pgsql_db_name = xstrdup(DEFAULT_ACCOUNTING_DB);
 			xfree(location);
 		} else
 			pgsql_db_name = location;
@@ -852,7 +852,13 @@ extern int acct_storage_p_add_qos(PGconn *acct_pgsql_db, uint32_t uid,
 }
 
 extern int acct_storage_p_add_wckeys(PGconn *acct_pgsql_db, uint32_t uid, 
-				  List wckey_list)
+				     List wckey_list)
+{
+	return SLURM_SUCCESS;
+}
+
+extern int acct_storage_p_add_reservation(PGconn *acct_pgsql_db, 
+					   acct_reservation_rec_t *resv)
 {
 	return SLURM_SUCCESS;
 }
@@ -900,6 +906,12 @@ extern List acct_storage_p_modify_wckeys(PGconn *acct_pgsql_db, uint32_t uid,
 	return SLURM_SUCCESS;
 }
 
+extern int acct_storage_p_modify_reservation(PGconn *acct_pgsql_db, 
+					     acct_reservation_rec_t *resv)
+{
+	return SLURM_SUCCESS;
+}
+
 extern List acct_storage_p_remove_users(PGconn *acct_pgsql_db, uint32_t uid,
 					acct_user_cond_t *user_cond)
 {
@@ -944,6 +956,12 @@ extern List acct_storage_p_remove_wckeys(void *db_conn, uint32_t uid,
 	return NULL;
 }
 
+extern int acct_storage_p_remove_reservation(PGconn *acct_pgsql_db, 
+					     acct_reservation_rec_t *resv)
+{
+	return SLURM_SUCCESS;
+}
+
 extern List acct_storage_p_get_users(PGconn *acct_pgsql_db, uid_t uid,
 				     acct_user_cond_t *user_cond)
 {
@@ -962,6 +980,11 @@ extern List acct_storage_p_get_clusters(PGconn *acct_pgsql_db, uid_t uid,
 	return NULL;
 }
 
+extern List acct_storage_p_get_config(void *db_conn)
+{
+	return NULL;
+}
+
 extern List acct_storage_p_get_associations(PGconn *acct_pgsql_db, uid_t uid,
 					    acct_association_cond_t *assoc_cond)
 {
@@ -980,6 +1003,12 @@ extern List acct_storage_p_get_wckeys(void *db_conn, uid_t uid,
 	return NULL;
 }
 
+extern List acct_storage_p_get_reservations(void *mysql_conn, uid_t uid,
+					    acct_reservation_cond_t *resv_cond)
+{
+	return NULL;
+}
+
 extern List acct_storage_p_get_txn(PGconn *acct_pgsql_db, uid_t uid,
 				   acct_txn_cond_t *txn_cond)
 {
@@ -996,7 +1025,8 @@ extern int acct_storage_p_get_usage(PGconn *acct_pgsql_db, uid_t uid,
 }
 
 extern int acct_storage_p_roll_usage(PGconn *acct_pgsql_db, 
-				     time_t sent_start)
+				     time_t sent_start, time_t sent_end,
+				     uint16_t archive_data)
 {
 	int rc = SLURM_SUCCESS;
 
@@ -1077,6 +1107,7 @@ extern int clusteracct_storage_p_register_ctld(PGconn *acct_pgsql_db,
 
 extern int clusteracct_storage_p_cluster_procs(PGconn *acct_pgsql_db,
 					       char *cluster,
+					       char *cluster_nodes,
 					       uint32_t procs,
 					       time_t event_time)
 {
@@ -1170,7 +1201,6 @@ extern int jobacct_storage_p_job_start(PGconn *acct_pgsql_db,
 	char *block_id = NULL;
 	char *query = NULL;
 	int reinit = 0;
-	char *wckey = NULL;
 
 	if (!job_ptr->details || !job_ptr->details->submit_time) {
 		error("jobacct_storage_p_job_start: "
@@ -1188,25 +1218,9 @@ extern int jobacct_storage_p_job_start(PGconn *acct_pgsql_db,
 	priority = (job_ptr->priority == NO_VAL) ?
 		-1L : (long) job_ptr->priority;
 
-	if (job_ptr->name && job_ptr->name[0]) {
-		char *temp = NULL;
-		/* first set the jname to the job_ptr->name */
+	if (job_ptr->name && job_ptr->name[0]) 
 		jname = xstrdup(job_ptr->name);
-		/* then grep for " since that is the delimiter for
-		   the wckey */
-		if((temp = strchr(jname, '\"'))) {
-			/* if we have a wckey set the " to NULL to
-			 * end the jname */
-			temp[0] = '\0';
-			/* increment and copy the remainder */
-			temp++;
-			wckey = xstrdup(temp);
-		}
-	}
-
-	if(!jname || !jname[0]) {
-		/* free jname if something is allocated here */
-		xfree(jname);
+	else {
 		jname = xstrdup("allocation");
 		track_steps = 1;
 	}
@@ -1243,7 +1257,7 @@ extern int jobacct_storage_p_job_start(PGconn *acct_pgsql_db,
 			xstrcat(query, "partition, ");
 		if(block_id) 
 			xstrcat(query, "blockid, ");
-		if(wckey) 
+		if(job_ptr->wckey) 
 			xstrcat(query, "wckey, ");
 		
 		xstrfmtcat(query, 
@@ -1261,8 +1275,8 @@ extern int jobacct_storage_p_job_start(PGconn *acct_pgsql_db,
 			xstrfmtcat(query, "'%s', ", job_ptr->partition);
 		if(block_id) 
 			xstrfmtcat(query, "'%s', ", block_id);
-		if(wckey) 
-			xstrfmtcat(query, "\"%s\", ", wckey);
+		if(job_ptr->wckey) 
+			xstrfmtcat(query, "\"%s\", ", job_ptr->wckey);
 		
 		xstrfmtcat(query, 
 			   "%d, %d, %d, '%s', %u, %u, %u, %u, %u)",
@@ -1301,8 +1315,8 @@ extern int jobacct_storage_p_job_start(PGconn *acct_pgsql_db,
 				   job_ptr->partition);
 		if(block_id)
 			xstrfmtcat(query, "blockid='%s', ", block_id);
-		if(wckey) 
-			xstrfmtcat(query, ", wckey=\"%s\"", wckey);
+		if(job_ptr->wckey) 
+			xstrfmtcat(query, ", wckey=\"%s\"", job_ptr->wckey);
 
 		xstrfmtcat(query, "start=%d, name='%s', state=%u, "
 			   "alloc_cpus=%u, associd=%d where id=%d",
@@ -1314,8 +1328,6 @@ extern int jobacct_storage_p_job_start(PGconn *acct_pgsql_db,
 	}
 	xfree(block_id);
 	xfree(jname);
-	xfree(wckey);
-
 	xfree(query);
 	
 	return rc;
@@ -1519,7 +1531,7 @@ extern int jobacct_storage_p_step_complete(PGconn *acct_pgsql_db,
 	
 	if (jobacct == NULL) {
 		/* JobAcctGather=jobacct_gather/none, no data to process */
-		bzero(&dummy_jobacct, sizeof(dummy_jobacct));
+		memset(&dummy_jobacct, 0, sizeof(dummy_jobacct));
 		jobacct = &dummy_jobacct;
 	}
 
diff --git a/src/plugins/accounting_storage/pgsql/pgsql_jobacct_process.c b/src/plugins/accounting_storage/pgsql/pgsql_jobacct_process.c
index 2f5d422dc..12f6b8e5c 100644
--- a/src/plugins/accounting_storage/pgsql/pgsql_jobacct_process.c
+++ b/src/plugins/accounting_storage/pgsql/pgsql_jobacct_process.c
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -390,6 +391,7 @@ no_cond:
 
 	for (i = 0; i < PQntuples(result); i++) {
 		char *id = PQgetvalue(result, i, JOB_REQ_ID);
+		bool job_ended = 0;
 
 		curr_id = atoi(PQgetvalue(result, i, JOB_REQ_JOBID));
 
@@ -432,24 +434,25 @@ no_cond:
 		job->submit = atoi(PQgetvalue(result, i, JOB_REQ_SUBMIT));
 		job->start = atoi(PQgetvalue(result, i, JOB_REQ_START));
 		job->end = atoi(PQgetvalue(result, i, JOB_REQ_ENDTIME));
-		job->suspended = atoi(PQgetvalue(result, i, JOB_REQ_SUSPENDED));
-		if(!job->end) {
-			job->elapsed = now - job->start;
-		} else {
-			job->elapsed = job->end - job->start;
+
+		/* since the job->end could be set later end it here */
+		if(job->end) {
+			job_ended = 1;
+			if(!job->start || (job->start > job->end))
+				job->start = job->end;
 		}
-		job->elapsed -= job->suspended;
 
-		if(job_cond && job_cond->usage_start) {
+		if(job_cond && !job_cond->without_usage_truncation
+		   && job_cond->usage_start) {
 			if(job->start && (job->start < job_cond->usage_start))
 				job->start = job_cond->usage_start;
 
-			if(!job->start && job->end)
-				job->start = job->end;
-
 			if(!job->end || job->end > job_cond->usage_end) 
 				job->end = job_cond->usage_end;
 
+			if(!job->start && job->end)
+				job->start = job->end;
+			
 			job->elapsed = job->end - job->start;
 
 			if(atoi(PQgetvalue(result, i, JOB_REQ_SUSPENDED))) {
@@ -501,14 +504,21 @@ no_cond:
 		} else {
 			job->suspended =
 				atoi(PQgetvalue(result, i, JOB_REQ_SUSPENDED));
-			if(!job->end) {
+
+			if(!job->start) {
+				job->elapsed = 0;
+			} else if(!job->end) {
 				job->elapsed = now - job->start;
 			} else {
 				job->elapsed = job->end - job->start;
 			}
+
 			job->elapsed -= job->suspended;
 		}
 
+		if((int)job->elapsed < 0)
+			job->elapsed = 0;
+
 		job->jobid = curr_id;
 		job->jobname = xstrdup(PQgetvalue(result, i, JOB_REQ_NAME));
 		job->gid = atoi(PQgetvalue(result, i, JOB_REQ_GID));
@@ -583,7 +593,9 @@ no_cond:
 		xfree(query);
 		for(j = 0; j < PQntuples(step_result); j++) {
 			step = create_jobacct_step_rec();
-			step->jobid = job->jobid;
+			step->job_ptr = job;
+			if(!job->first_step_ptr)
+				job->first_step_ptr = step;
 			list_append(job->steps, step);
 			step->stepid = atoi(
 				PQgetvalue(step_result, j, STEP_REQ_STEPID));
@@ -600,6 +612,27 @@ no_cond:
 				PQgetvalue(step_result, j, STEP_REQ_START));
 			step->end = atoi(
 				PQgetvalue(step_result, j, STEP_REQ_ENDTIME));
+
+			/* if the job has ended end the step also */
+			if(!step->end && job_ended) {
+				step->end = job->end;
+				step->state = job->state;
+			}
+
+			if(job_cond && !job_cond->without_usage_truncation
+			   && job_cond->usage_start) {
+				if(step->start 
+				   && (step->start < job_cond->usage_start))
+					step->start = job_cond->usage_start;
+				
+				if(!step->start && step->end)
+					step->start = step->end;
+				
+				if(!step->end 
+				   || (step->end > job_cond->usage_end)) 
+					step->end = job_cond->usage_end;
+			}
+
 			/* figure this out by start stop */
 			step->suspended = atoi(
 				PQgetvalue(step_result, j, STEP_REQ_SUSPENDED));
@@ -609,6 +642,10 @@ no_cond:
 				step->elapsed = step->end - step->start;
 			}
 			step->elapsed -= step->suspended;
+
+			if((int)step->elapsed < 0)
+				step->elapsed = 0;
+
 			step->user_cpu_sec = atoi(
 				PQgetvalue(step_result, j, STEP_REQ_USER_SEC));
 			step->user_cpu_usec = atoi(
diff --git a/src/plugins/accounting_storage/pgsql/pgsql_jobacct_process.h b/src/plugins/accounting_storage/pgsql/pgsql_jobacct_process.h
index d90cd7b15..d12ed5827 100644
--- a/src/plugins/accounting_storage/pgsql/pgsql_jobacct_process.h
+++ b/src/plugins/accounting_storage/pgsql/pgsql_jobacct_process.h
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/accounting_storage/slurmdbd/Makefile.in b/src/plugins/accounting_storage/slurmdbd/Makefile.in
index ada513ec4..4ac742ced 100644
--- a/src/plugins/accounting_storage/slurmdbd/Makefile.in
+++ b/src/plugins/accounting_storage/slurmdbd/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -112,6 +116,10 @@ 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@
diff --git a/src/plugins/accounting_storage/slurmdbd/accounting_storage_slurmdbd.c b/src/plugins/accounting_storage/slurmdbd/accounting_storage_slurmdbd.c
index 86093f83b..1c26ffef9 100644
--- a/src/plugins/accounting_storage/slurmdbd/accounting_storage_slurmdbd.c
+++ b/src/plugins/accounting_storage/slurmdbd/accounting_storage_slurmdbd.c
@@ -7,7 +7,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -175,6 +176,7 @@ extern int acct_storage_p_add_users(void *db_conn, uint32_t uid, List user_list)
 	dbd_list_msg_t get_msg;
 	int rc, resp_code;
 
+	memset(&get_msg, 0, sizeof(dbd_list_msg_t));
 	get_msg.my_list = user_list;
 
 	req.msg_type = DBD_ADD_USERS;
@@ -195,6 +197,7 @@ extern int acct_storage_p_add_coord(void *db_conn, uint32_t uid,
 	dbd_acct_coord_msg_t get_msg;
 	int rc, resp_code;
 
+	memset(&get_msg, 0, sizeof(dbd_acct_coord_msg_t));
 	get_msg.acct_list = acct_list;
 	get_msg.cond = user_cond;
 
@@ -215,6 +218,7 @@ extern int acct_storage_p_add_accts(void *db_conn, uint32_t uid, List acct_list)
 	dbd_list_msg_t get_msg;
 	int rc, resp_code;
 
+	memset(&get_msg, 0, sizeof(dbd_list_msg_t));
 	get_msg.my_list = acct_list;
 
 	req.msg_type = DBD_ADD_ACCOUNTS;
@@ -235,6 +239,7 @@ extern int acct_storage_p_add_clusters(void *db_conn, uint32_t uid,
 	dbd_list_msg_t get_msg;
 	int rc, resp_code;
 
+	memset(&get_msg, 0, sizeof(dbd_list_msg_t));
 	get_msg.my_list = cluster_list;
 
 	req.msg_type = DBD_ADD_CLUSTERS;
@@ -256,6 +261,7 @@ extern int acct_storage_p_add_associations(void *db_conn, uint32_t uid,
 	dbd_list_msg_t get_msg;
 	int rc, resp_code;
 
+	memset(&get_msg, 0, sizeof(dbd_list_msg_t));
 	get_msg.my_list = association_list;
 
 	req.msg_type = DBD_ADD_ASSOCS;
@@ -276,6 +282,7 @@ extern int acct_storage_p_add_qos(void *db_conn, uint32_t uid,
 	dbd_list_msg_t get_msg;
 	int rc, resp_code;
 
+	memset(&get_msg, 0, sizeof(dbd_list_msg_t));
 	get_msg.my_list = qos_list;
 
 	req.msg_type = DBD_ADD_QOS;
@@ -290,12 +297,13 @@ extern int acct_storage_p_add_qos(void *db_conn, uint32_t uid,
 }
 
 extern int acct_storage_p_add_wckeys(void *db_conn, uint32_t uid,
-				  List wckey_list)
+				     List wckey_list)
 {
 	slurmdbd_msg_t req;
 	dbd_list_msg_t get_msg;
 	int rc, resp_code;
 
+	memset(&get_msg, 0, sizeof(dbd_list_msg_t));
 	get_msg.my_list = wckey_list;
 
 	req.msg_type = DBD_ADD_WCKEYS;
@@ -309,6 +317,28 @@ extern int acct_storage_p_add_wckeys(void *db_conn, uint32_t uid,
 	return rc;
 }
 
+extern int acct_storage_p_add_reservation(void *db_conn, 
+					   acct_reservation_rec_t *resv)
+{
+	slurmdbd_msg_t req;
+	dbd_rec_msg_t get_msg;
+	int rc, resp_code;
+
+	memset(&get_msg, 0, sizeof(dbd_rec_msg_t));
+	get_msg.rec = resv;
+
+	req.msg_type = DBD_ADD_RESV;
+	req.data = &get_msg;
+
+	rc = slurm_send_slurmdbd_recv_rc_msg(SLURMDBD_VERSION,
+					     &req, &resp_code);
+	
+	if(resp_code != SLURM_SUCCESS)
+		rc = resp_code;
+
+	return rc;
+}
+
 extern List acct_storage_p_modify_users(void *db_conn, uint32_t uid,
 					acct_user_cond_t *user_cond,
 					acct_user_rec_t *user)
@@ -319,6 +349,7 @@ extern List acct_storage_p_modify_users(void *db_conn, uint32_t uid,
 	List ret_list = NULL;
 	int rc;
 
+	memset(&get_msg, 0, sizeof(dbd_modify_msg_t));
 	get_msg.cond = user_cond;
 	get_msg.rec = user;
 
@@ -359,6 +390,7 @@ extern List acct_storage_p_modify_accounts(void *db_conn, uint32_t uid,
 	int rc;
 	List ret_list = NULL;
 
+	memset(&get_msg, 0, sizeof(dbd_modify_msg_t));
 	get_msg.cond = acct_cond;
 	get_msg.rec = acct;
 
@@ -400,6 +432,7 @@ extern List acct_storage_p_modify_clusters(void *db_conn, uint32_t uid,
 	dbd_list_msg_t *got_msg;
 	List ret_list = NULL;
 
+	memset(&get_msg, 0, sizeof(dbd_modify_msg_t));
 	get_msg.cond = cluster_cond;
 	get_msg.rec = cluster;
 
@@ -444,6 +477,7 @@ extern List acct_storage_p_modify_associations(
 	List ret_list = NULL;
 
 
+	memset(&get_msg, 0, sizeof(dbd_modify_msg_t));
 	get_msg.cond = assoc_cond;
 	get_msg.rec = assoc;
 
@@ -484,6 +518,7 @@ extern List acct_storage_p_modify_qos(void *db_conn, uint32_t uid,
 	List ret_list = NULL;
 	int rc;
 
+	memset(&get_msg, 0, sizeof(dbd_modify_msg_t));
 	get_msg.cond = qos_cond;
 	get_msg.rec = qos;
 
@@ -524,6 +559,7 @@ extern List acct_storage_p_modify_wckeys(void *db_conn, uint32_t uid,
 	List ret_list = NULL;
 	int rc;
 
+	memset(&get_msg, 0, sizeof(dbd_modify_msg_t));
 	get_msg.cond = wckey_cond;
 	get_msg.rec = wckey;
 
@@ -554,6 +590,28 @@ extern List acct_storage_p_modify_wckeys(void *db_conn, uint32_t uid,
 	return ret_list;
 }
 
+extern int acct_storage_p_modify_reservation(void *db_conn, 
+					   acct_reservation_rec_t *resv)
+{
+	slurmdbd_msg_t req;
+	dbd_rec_msg_t get_msg;
+	int rc, resp_code;
+
+	memset(&get_msg, 0, sizeof(dbd_rec_msg_t));
+	get_msg.rec = resv;
+
+	req.msg_type = DBD_MODIFY_RESV;
+	req.data = &get_msg;
+
+	rc = slurm_send_slurmdbd_recv_rc_msg(SLURMDBD_VERSION,
+					     &req, &resp_code);
+	
+	if(resp_code != SLURM_SUCCESS)
+		rc = resp_code;
+
+	return rc;
+}
+
 extern List acct_storage_p_remove_users(void *db_conn, uint32_t uid,
 					acct_user_cond_t *user_cond)
 {
@@ -564,7 +622,7 @@ extern List acct_storage_p_remove_users(void *db_conn, uint32_t uid,
 	dbd_list_msg_t *got_msg;
 	List ret_list = NULL;
 
-
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = user_cond;
 
 	req.msg_type = DBD_REMOVE_USERS;
@@ -605,7 +663,7 @@ extern List acct_storage_p_remove_coord(void *db_conn, uint32_t uid,
 	dbd_list_msg_t *got_msg;
 	List ret_list = NULL;
 
-
+	memset(&get_msg, 0, sizeof(dbd_acct_coord_msg_t));
 	get_msg.acct_list = acct_list;
 	get_msg.cond = user_cond;
 
@@ -646,7 +704,7 @@ extern List acct_storage_p_remove_accts(void *db_conn, uint32_t uid,
 	dbd_list_msg_t *got_msg;
 	List ret_list = NULL;
 
-
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = acct_cond;
 
 	req.msg_type = DBD_REMOVE_ACCOUNTS;
@@ -686,7 +744,7 @@ extern List acct_storage_p_remove_clusters(void *db_conn, uint32_t uid,
 	dbd_list_msg_t *got_msg;
 	List ret_list = NULL;
 
-
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = cluster_cond;
 
 	req.msg_type = DBD_REMOVE_CLUSTERS;
@@ -728,6 +786,7 @@ extern List acct_storage_p_remove_associations(
 	List ret_list = NULL;
 
 
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = assoc_cond;
 
 	req.msg_type = DBD_REMOVE_ASSOCS;
@@ -769,6 +828,7 @@ extern List acct_storage_p_remove_qos(
 	List ret_list = NULL;
 
 
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = qos_cond;
 
 	req.msg_type = DBD_REMOVE_QOS;
@@ -810,6 +870,7 @@ extern List acct_storage_p_remove_wckeys(
 	List ret_list = NULL;
 
 
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = wckey_cond;
 
 	req.msg_type = DBD_REMOVE_WCKEYS;
@@ -839,6 +900,28 @@ extern List acct_storage_p_remove_wckeys(
 	return ret_list;
 }
 
+extern int acct_storage_p_remove_reservation(void *db_conn, 
+					   acct_reservation_rec_t *resv)
+{
+	slurmdbd_msg_t req;
+	dbd_rec_msg_t get_msg;
+	int rc, resp_code;
+
+	memset(&get_msg, 0, sizeof(dbd_rec_msg_t));
+	get_msg.rec = resv;
+
+	req.msg_type = DBD_REMOVE_RESV;
+	req.data = &get_msg;
+
+	rc = slurm_send_slurmdbd_recv_rc_msg(SLURMDBD_VERSION,
+					     &req, &resp_code);
+	
+	if(resp_code != SLURM_SUCCESS)
+		rc = resp_code;
+
+	return rc;
+}
+
 extern List acct_storage_p_get_users(void *db_conn, uid_t uid,
 				     acct_user_cond_t *user_cond)
 {
@@ -848,6 +931,7 @@ extern List acct_storage_p_get_users(void *db_conn, uid_t uid,
 	int rc;
 	List ret_list = NULL;
 
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = user_cond;
 	
 	req.msg_type = DBD_GET_USERS;
@@ -886,6 +970,7 @@ extern List acct_storage_p_get_accts(void *db_conn, uid_t uid,
 	int rc;
 	List ret_list = NULL;
 
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = acct_cond;
 	
 	req.msg_type = DBD_GET_ACCOUNTS;
@@ -925,6 +1010,7 @@ extern List acct_storage_p_get_clusters(void *db_conn, uid_t uid,
 	int rc;
 	List ret_list = NULL;
 
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = cluster_cond;
 	
 	req.msg_type = DBD_GET_CLUSTERS;
@@ -955,6 +1041,40 @@ extern List acct_storage_p_get_clusters(void *db_conn, uid_t uid,
 	return ret_list;
 }
 
+extern List acct_storage_p_get_config(void)
+{
+	slurmdbd_msg_t req, resp;
+	dbd_list_msg_t *got_msg;
+	int rc;
+	List ret_list = NULL;
+	
+	req.msg_type = DBD_GET_CONFIG;
+	req.data = NULL;
+	rc = slurm_send_recv_slurmdbd_msg(SLURMDBD_VERSION, &req, &resp);
+
+	if (rc != SLURM_SUCCESS)
+		error("slurmdbd: DBD_GET_CONFIG failure: %m");
+	else if (resp.msg_type == DBD_RC) {
+		dbd_rc_msg_t *msg = resp.data;
+		if(msg->return_code == SLURM_SUCCESS) {
+			info("%s", msg->comment);
+			ret_list = list_create(NULL);
+		} else
+			error("%s", msg->comment);
+		slurmdbd_free_rc_msg(SLURMDBD_VERSION, msg);
+	} else if (resp.msg_type != DBD_GOT_CONFIG) {
+		error("slurmdbd: response type not DBD_GOT_CONFIG: %u", 
+		      resp.msg_type);
+	} else {
+		got_msg = (dbd_list_msg_t *) resp.data;
+		ret_list = got_msg->my_list;
+		got_msg->my_list = NULL;
+		slurmdbd_free_list_msg(SLURMDBD_VERSION, got_msg);
+	}
+
+	return ret_list;
+}
+
 extern List acct_storage_p_get_associations(void *db_conn, uid_t uid,
 					    acct_association_cond_t *assoc_cond)
 {
@@ -964,6 +1084,7 @@ extern List acct_storage_p_get_associations(void *db_conn, uid_t uid,
 	int rc;
 	List ret_list = NULL;
 
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = assoc_cond;
 	
 	req.msg_type = DBD_GET_ASSOCS;
@@ -1002,6 +1123,7 @@ extern List acct_storage_p_get_qos(void *db_conn, uid_t uid,
 	int rc;
 	List ret_list = NULL;
 
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = qos_cond;
 
 	req.msg_type = DBD_GET_QOS;
@@ -1047,6 +1169,7 @@ extern List acct_storage_p_get_wckeys(void *db_conn, uid_t uid,
 	int rc;
 	List ret_list = NULL;
 
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = wckey_cond;
 
 	req.msg_type = DBD_GET_WCKEYS;
@@ -1083,6 +1206,52 @@ extern List acct_storage_p_get_wckeys(void *db_conn, uid_t uid,
 	return ret_list;
 }
 
+extern List acct_storage_p_get_reservations(void *mysql_conn, uid_t uid,
+					    acct_reservation_cond_t *resv_cond)
+{
+	slurmdbd_msg_t req, resp;
+	dbd_cond_msg_t get_msg;
+	dbd_list_msg_t *got_msg;
+	int rc;
+	List ret_list = NULL;
+
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
+	get_msg.cond = resv_cond;
+
+	req.msg_type = DBD_GET_RESVS;
+	req.data = &get_msg;
+	rc = slurm_send_recv_slurmdbd_msg(SLURMDBD_VERSION, &req, &resp);
+
+	if (rc != SLURM_SUCCESS)
+		error("slurmdbd: DBD_GET_RESVS failure: %m");
+	else if (resp.msg_type == DBD_RC) {
+		dbd_rc_msg_t *msg = resp.data;
+		if(msg->return_code == SLURM_SUCCESS) {
+			info("%s", msg->comment);
+			ret_list = list_create(NULL);
+		} else
+			error("%s", msg->comment);
+		slurmdbd_free_rc_msg(SLURMDBD_VERSION, msg);
+	} else if (resp.msg_type != DBD_GOT_RESVS) {
+		error("slurmdbd: response type not DBD_GOT_RESVS: %u", 
+		      resp.msg_type);
+	} else {
+		got_msg = (dbd_list_msg_t *) resp.data;
+		/* do this just for this type since it could be called
+		 * multiple times, and if we send back and empty list
+		 * instead of no list we will only call this once.
+		 */
+		if(!got_msg->my_list)
+		        ret_list = list_create(NULL);
+		else 
+			ret_list = got_msg->my_list;
+		got_msg->my_list = NULL;
+		slurmdbd_free_list_msg(SLURMDBD_VERSION, got_msg);
+	}
+
+	return ret_list;
+}
+
 extern List acct_storage_p_get_txn(void *db_conn, uid_t uid,
 				   acct_txn_cond_t *txn_cond)
 {
@@ -1092,6 +1261,7 @@ extern List acct_storage_p_get_txn(void *db_conn, uid_t uid,
 	int rc;
 	List ret_list = NULL;
 
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
 	get_msg.cond = txn_cond;
 
 	req.msg_type = DBD_GET_TXN;
@@ -1133,6 +1303,7 @@ extern int acct_storage_p_get_usage(void *db_conn, uid_t uid,
 	List *my_list = NULL;
 	int rc;
 
+	memset(&get_msg, 0, sizeof(dbd_usage_msg_t));
 	get_msg.rec = in;
 	get_msg.start = start;
 	get_msg.end = end;
@@ -1195,13 +1366,17 @@ extern int acct_storage_p_get_usage(void *db_conn, uid_t uid,
 }
 
 extern int acct_storage_p_roll_usage(void *db_conn, 
-				     time_t sent_start)
+				     time_t sent_start, time_t sent_end,
+				     uint16_t archive_data)
 {
 	slurmdbd_msg_t req;
 	dbd_roll_usage_msg_t get_msg;
 	int rc, resp_code;
 	
+	memset(&get_msg, 0, sizeof(dbd_roll_usage_msg_t));
+	get_msg.end = sent_end;
 	get_msg.start = sent_start;
+	get_msg.archive_data = archive_data;
 
 	req.msg_type = DBD_ROLL_USAGE;
 
@@ -1212,7 +1387,8 @@ extern int acct_storage_p_roll_usage(void *db_conn,
 
 	if(resp_code != SLURM_SUCCESS)
 		rc = resp_code;
-	
+	else
+		info("SUCCESS");
 	return rc;
 }
 
@@ -1236,12 +1412,14 @@ extern int clusteracct_storage_p_node_down(void *db_conn,
 	else
 		my_reason = node_ptr->reason;
 
+	memset(&req, 0, sizeof(dbd_node_state_msg_t));
 	req.cluster_name = cluster;
 	req.cpu_count = cpus;
 	req.hostlist   = node_ptr->name;
 	req.new_state  = DBD_NODE_STATE_DOWN;
 	req.event_time = event_time;
 	req.reason     = my_reason;
+	req.state      = node_ptr->node_state;
 	msg.msg_type   = DBD_NODE_STATE;
 	msg.data       = &req;
 
@@ -1250,6 +1428,7 @@ extern int clusteracct_storage_p_node_down(void *db_conn,
 
 	return SLURM_SUCCESS;
 }
+
 extern int clusteracct_storage_p_node_up(void *db_conn,
 					 char *cluster,
 					 struct node_record *node_ptr,
@@ -1258,6 +1437,7 @@ extern int clusteracct_storage_p_node_up(void *db_conn,
 	slurmdbd_msg_t msg;
 	dbd_node_state_msg_t req;
 
+	memset(&req, 0, sizeof(dbd_node_state_msg_t));
 	req.cluster_name = cluster;
 	req.hostlist   = node_ptr->name;
 	req.new_state  = DBD_NODE_STATE_UP;
@@ -1274,6 +1454,7 @@ extern int clusteracct_storage_p_node_up(void *db_conn,
 
 extern int clusteracct_storage_p_cluster_procs(void *db_conn,
 					       char *cluster,
+					       char *cluster_nodes,
 					       uint32_t procs,
 					       time_t event_time)
 {
@@ -1282,7 +1463,9 @@ extern int clusteracct_storage_p_cluster_procs(void *db_conn,
 	int rc = SLURM_ERROR;
 
 	debug2("Sending info for cluster %s", cluster);
+	memset(&req, 0, sizeof(dbd_cluster_procs_msg_t));
 	req.cluster_name = cluster;
+	req.cluster_nodes = cluster_nodes;
 	req.proc_count   = procs;
 	req.event_time   = event_time;
 	msg.msg_type     = DBD_CLUSTER_PROCS;
@@ -1301,6 +1484,8 @@ extern int clusteracct_storage_p_register_ctld(void *db_conn,
 	dbd_register_ctld_msg_t req;
 	info("Registering slurmctld for cluster %s at port %u with slurmdbd.",
 	     cluster, port);
+	memset(&req, 0, sizeof(dbd_register_ctld_msg_t));
+
 	req.cluster_name = cluster;
 	req.port         = port;
 	msg.msg_type     = DBD_REGISTER_CTLD;
@@ -1323,6 +1508,8 @@ extern int clusteracct_storage_p_get_usage(
 	acct_cluster_rec_t *got_rec;
 	int rc;
 
+	memset(&get_msg, 0, sizeof(dbd_usage_msg_t));
+
 	get_msg.rec = cluster_rec;
 	get_msg.start = start;
 	get_msg.end = end;
@@ -1366,15 +1553,17 @@ extern int jobacct_storage_p_job_start(void *db_conn, char *cluster_name,
 {
 	slurmdbd_msg_t msg, msg_rc;
 	dbd_job_start_msg_t req;
-	dbd_job_start_rc_msg_t *resp;
+	dbd_id_rc_msg_t *resp;
 	char *block_id = NULL;
 	int rc = SLURM_SUCCESS;
+	char temp_bit[BUF_SIZE];
 
 	if (!job_ptr->details || !job_ptr->details->submit_time) {
 		error("jobacct_storage_p_job_start: "
 		      "Not inputing this job, it has no submit time.");
 		return SLURM_ERROR;
 	}
+	memset(&req, 0, sizeof(dbd_job_start_msg_t));
 
 	req.alloc_cpus    = job_ptr->total_procs;
 	req.cluster       = cluster_name;
@@ -1384,6 +1573,11 @@ extern int jobacct_storage_p_job_start(void *db_conn, char *cluster_name,
 	select_g_get_jobinfo(job_ptr->select_jobinfo, 
 			     SELECT_DATA_BLOCK_ID, 
 			     &block_id);
+	select_g_get_jobinfo(job_ptr->select_jobinfo, 
+			     SELECT_DATA_NODE_CNT, 
+			     &req.alloc_nodes);
+#else
+	req.alloc_nodes      = job_ptr->node_cnt;
 #endif
 	req.block_id      = block_id;
 	req.db_index      = job_ptr->db_index;
@@ -1394,10 +1588,17 @@ extern int jobacct_storage_p_job_start(void *db_conn, char *cluster_name,
 	req.job_state     = job_ptr->job_state & (~JOB_COMPLETING);
 	req.name          = job_ptr->name;
 	req.nodes         = job_ptr->nodes;
+	if(job_ptr->node_bitmap) 
+		req.node_inx = bit_fmt(temp_bit, sizeof(temp_bit), 
+				       job_ptr->node_bitmap);
+	
 	req.partition     = job_ptr->partition;
 	req.req_cpus      = job_ptr->num_procs;
+	req.resv_id       = job_ptr->resv_id;
 	req.priority      = job_ptr->priority;
 	req.start_time    = job_ptr->start_time;
+	req.timelimit     = job_ptr->time_limit;
+	req.wckey         = job_ptr->wckey;
 	if (job_ptr->details)
 		req.submit_time   = job_ptr->details->submit_time;
 	req.uid           = job_ptr->user_id;
@@ -1426,15 +1627,15 @@ extern int jobacct_storage_p_job_start(void *db_conn, char *cluster_name,
 			xfree(block_id);
 			return SLURM_ERROR;
 		}
-	} else if (msg_rc.msg_type != DBD_JOB_START_RC) {
-		error("slurmdbd: response type not DBD_GOT_JOBS: %u", 
+	} else if (msg_rc.msg_type != DBD_ID_RC) {
+		error("slurmdbd: response type not DBD_ID_RC: %u", 
 		      msg_rc.msg_type);
 	} else {
-		resp = (dbd_job_start_rc_msg_t *) msg_rc.data;
-		job_ptr->db_index = resp->db_index;
+		resp = (dbd_id_rc_msg_t *) msg_rc.data;
+		job_ptr->db_index = resp->id;
 		rc = resp->return_code;
 		//info("here got %d for return code", resp->return_code);
-		slurmdbd_free_job_start_rc_msg(SLURMDBD_VERSION, resp);
+		slurmdbd_free_id_rc_msg(SLURMDBD_VERSION, resp);
 	}
 	xfree(block_id);
 	
@@ -1457,6 +1658,8 @@ extern int jobacct_storage_p_job_complete(void *db_conn,
 		return SLURM_ERROR;
 	}
 
+	memset(&req, 0, sizeof(dbd_job_comp_msg_t));
+
 	req.assoc_id    = job_ptr->assoc_id;
 	req.db_index    = job_ptr->db_index;
 	req.end_time    = job_ptr->end_time;
@@ -1483,15 +1686,16 @@ extern int jobacct_storage_p_job_complete(void *db_conn,
 extern int jobacct_storage_p_step_start(void *db_conn,
 					struct step_record *step_ptr)
 {
-	uint32_t cpus = 0;
+	uint32_t cpus = 0, tasks = 0, nodes = 0, task_dist = 0;
 	char node_list[BUFFER_SIZE];
 	slurmdbd_msg_t msg;
 	dbd_step_start_msg_t req;
+	char temp_bit[BUF_SIZE];
 
 #ifdef HAVE_BG
 	char *ionodes = NULL;
 
-	cpus = step_ptr->job_ptr->num_procs;
+	cpus = tasks = step_ptr->job_ptr->num_procs;
 	select_g_get_jobinfo(step_ptr->job_ptr->select_jobinfo, 
 			     SELECT_DATA_IONODES, 
 			     &ionodes);
@@ -1503,14 +1707,20 @@ extern int jobacct_storage_p_step_start(void *db_conn,
 		snprintf(node_list, BUFFER_SIZE, "%s",
 			 step_ptr->job_ptr->nodes);
 	}
-	
+	select_g_get_jobinfo(step_ptr->job_ptr->select_jobinfo, 
+			     SELECT_DATA_NODE_CNT, 
+			     &nodes);
 #else
 	if (!step_ptr->step_layout || !step_ptr->step_layout->task_cnt) {
-		cpus = step_ptr->job_ptr->total_procs;
+		cpus = tasks = step_ptr->job_ptr->total_procs;
 		snprintf(node_list, BUFFER_SIZE, "%s",
 			 step_ptr->job_ptr->nodes);
+		nodes = step_ptr->job_ptr->node_cnt;
 	} else {
-		cpus = step_ptr->step_layout->task_cnt;
+		cpus = step_ptr->cpu_count; 
+		tasks = step_ptr->step_layout->task_cnt;
+		nodes = step_ptr->step_layout->node_cnt;
+		task_dist = step_ptr->step_layout->task_dist;
 		snprintf(node_list, BUFFER_SIZE, "%s", 
 			 step_ptr->step_layout->node_list);
 	}
@@ -1523,17 +1733,26 @@ extern int jobacct_storage_p_step_start(void *db_conn,
 		      "Not inputing this job, it has no submit time.");
 		return SLURM_ERROR;
 	}
+	memset(&req, 0, sizeof(dbd_step_start_msg_t));
 
 	req.assoc_id    = step_ptr->job_ptr->assoc_id;
 	req.db_index    = step_ptr->job_ptr->db_index;
 	req.job_id      = step_ptr->job_ptr->job_id;
 	req.name        = step_ptr->name;
 	req.nodes       = node_list;
+	if(step_ptr->step_node_bitmap) 
+		req.node_inx = bit_fmt(temp_bit, sizeof(temp_bit), 
+				       step_ptr->step_node_bitmap);
+	req.node_cnt    = nodes;
 	req.start_time  = step_ptr->start_time;
 	if (step_ptr->job_ptr->details)
 		req.job_submit_time   = step_ptr->job_ptr->details->submit_time;
 	req.step_id     = step_ptr->step_id;
+	if (step_ptr->step_layout)
+		req.task_dist   = step_ptr->step_layout->task_dist;
+	req.task_dist   = task_dist;
 	req.total_procs = cpus;
+	req.total_tasks = tasks;
 
 	msg.msg_type    = DBD_STEP_START;
 	msg.data        = &req;
@@ -1550,7 +1769,7 @@ extern int jobacct_storage_p_step_start(void *db_conn,
 extern int jobacct_storage_p_step_complete(void *db_conn,
 					   struct step_record *step_ptr)
 {
-	uint32_t cpus = 0;
+	uint32_t cpus = 0, tasks = 0;
 	char node_list[BUFFER_SIZE];
 	slurmdbd_msg_t msg;
 	dbd_step_comp_msg_t req;
@@ -1558,7 +1777,7 @@ extern int jobacct_storage_p_step_complete(void *db_conn,
 #ifdef HAVE_BG
 	char *ionodes = NULL;
 
-	cpus = step_ptr->job_ptr->num_procs;
+	cpus = tasks = step_ptr->job_ptr->num_procs;
 	select_g_get_jobinfo(step_ptr->job_ptr->select_jobinfo, 
 			     SELECT_DATA_IONODES, 
 			     &ionodes);
@@ -1573,11 +1792,12 @@ extern int jobacct_storage_p_step_complete(void *db_conn,
 	
 #else
 	if (!step_ptr->step_layout || !step_ptr->step_layout->task_cnt) {
-		cpus = step_ptr->job_ptr->total_procs;
+		cpus = tasks = step_ptr->job_ptr->total_procs;
 		snprintf(node_list, BUFFER_SIZE, "%s", 
 			 step_ptr->job_ptr->nodes);
 	} else {
-		cpus = step_ptr->step_layout->task_cnt;
+		cpus = step_ptr->cpu_count; 
+		tasks = step_ptr->step_layout->task_cnt;
 		snprintf(node_list, BUFFER_SIZE, "%s", 
 			 step_ptr->step_layout->node_list);
 	}
@@ -1591,6 +1811,8 @@ extern int jobacct_storage_p_step_complete(void *db_conn,
 		return SLURM_ERROR;
 	}
 
+	memset(&req, 0, sizeof(dbd_step_comp_msg_t));
+
 	req.assoc_id    = step_ptr->job_ptr->assoc_id;
 	req.db_index    = step_ptr->job_ptr->db_index;
 	req.end_time    = time(NULL);	/* called at step completion */
@@ -1603,6 +1825,7 @@ extern int jobacct_storage_p_step_complete(void *db_conn,
 		req.job_submit_time   = step_ptr->job_ptr->details->submit_time;
 	req.step_id     = step_ptr->step_id;
 	req.total_procs = cpus;
+	req.total_tasks = tasks;
 
 	msg.msg_type    = DBD_STEP_COMPLETE;
 	msg.data        = &req;
@@ -1622,6 +1845,8 @@ extern int jobacct_storage_p_suspend(void *db_conn,
 	slurmdbd_msg_t msg;
 	dbd_job_suspend_msg_t req;
 
+	memset(&req, 0, sizeof(dbd_job_suspend_msg_t));
+	
 	req.assoc_id     = job_ptr->assoc_id;
 	req.job_id       = job_ptr->job_id;
 	req.db_index     = job_ptr->db_index;
@@ -1652,6 +1877,8 @@ extern List jobacct_storage_p_get_jobs_cond(void *db_conn, uid_t uid,
 	int rc;
 	List job_list = NULL;
 		
+	memset(&get_msg, 0, sizeof(dbd_cond_msg_t));
+
 	get_msg.cond = job_cond;
 
 	req.msg_type = DBD_GET_JOBS_COND;
@@ -1692,6 +1919,8 @@ extern int jobacct_storage_p_archive(void *db_conn,
 	dbd_cond_msg_t msg;
 	int rc = SLURM_SUCCESS;
 
+	memset(&msg, 0, sizeof(dbd_cond_msg_t));
+
 	msg.cond     = arch_cond;
 
 	req.msg_type = DBD_ARCHIVE_DUMP;
@@ -1726,7 +1955,7 @@ extern int jobacct_storage_p_archive_load(void *db_conn,
 {
 	slurmdbd_msg_t req, resp;
 	int rc = SLURM_SUCCESS;
-
+	
 	req.msg_type = DBD_ARCHIVE_LOAD;
 	req.data     = arch_rec;
 
@@ -1754,21 +1983,7 @@ extern int jobacct_storage_p_archive_load(void *db_conn,
 extern int acct_storage_p_update_shares_used(void *db_conn,
 					     List shares_used)
 {
-	slurmdbd_msg_t req;
-	dbd_list_msg_t shares_used_msg;
-	int rc, resp_code;
-
-	shares_used_msg.my_list = shares_used;
-
-	req.msg_type = DBD_UPDATE_SHARES_USED;
-	req.data = &shares_used_msg;
-	rc = slurm_send_slurmdbd_recv_rc_msg(SLURMDBD_VERSION,
-					     &req, &resp_code);
-
-	if(resp_code != SLURM_SUCCESS)
-		rc = resp_code;
-
-	return rc;
+	return SLURM_SUCCESS;
 }
 
 extern int acct_storage_p_flush_jobs_on_cluster(void *db_conn, char *cluster,
@@ -1779,9 +1994,13 @@ extern int acct_storage_p_flush_jobs_on_cluster(void *db_conn, char *cluster,
 
 	info("Ending any jobs in accounting that were running when controller "
 	     "went down on cluster %s", cluster);
+
+	memset(&req, 0, sizeof(dbd_cluster_procs_msg_t));
+
 	req.cluster_name = cluster;
 	req.proc_count   = 0;
 	req.event_time   = event_time;
+
 	msg.msg_type     = DBD_FLUSH_JOBS;
 	msg.data         = &req;
 
diff --git a/src/plugins/auth/Makefile.in b/src/plugins/auth/Makefile.in
index 03dbec9fe..1165aa6a8 100644
--- a/src/plugins/auth/Makefile.in
+++ b/src/plugins/auth/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/auth/authd/Makefile.in b/src/plugins/auth/authd/Makefile.in
index ff45e95f0..632c50627 100644
--- a/src/plugins/auth/authd/Makefile.in
+++ b/src/plugins/auth/authd/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -110,6 +114,10 @@ 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@
diff --git a/src/plugins/auth/authd/auth_authd.c b/src/plugins/auth/authd/auth_authd.c
index 06ef97759..f026204f5 100644
--- a/src/plugins/auth/authd/auth_authd.c
+++ b/src/plugins/auth/authd/auth_authd.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/auth/munge/Makefile.in b/src/plugins/auth/munge/Makefile.in
index 9a5272eba..73c7e2015 100644
--- a/src/plugins/auth/munge/Makefile.in
+++ b/src/plugins/auth/munge/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -111,6 +115,10 @@ 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@
diff --git a/src/plugins/auth/munge/auth_munge.c b/src/plugins/auth/munge/auth_munge.c
index aa01a42dd..d43f05a34 100644
--- a/src/plugins/auth/munge/auth_munge.c
+++ b/src/plugins/auth/munge/auth_munge.c
@@ -1,15 +1,16 @@
 /*****************************************************************************\
  *  auth_munge.c - SLURM auth implementation via Chris Dunlap's Munge
- *  $Id: auth_munge.c 14770 2008-08-14 18:24:35Z da $
+ *  $Id: auth_munge.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov> 
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/auth/none/Makefile.in b/src/plugins/auth/none/Makefile.in
index b62381dd4..23f553c63 100644
--- a/src/plugins/auth/none/Makefile.in
+++ b/src/plugins/auth/none/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/auth/none/auth_none.c b/src/plugins/auth/none/auth_none.c
index 307fcb2bb..ee61c54d2 100644
--- a/src/plugins/auth/none/auth_none.c
+++ b/src/plugins/auth/none/auth_none.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/checkpoint/Makefile.am b/src/plugins/checkpoint/Makefile.am
index 0527fc065..4d42811d1 100644
--- a/src/plugins/checkpoint/Makefile.am
+++ b/src/plugins/checkpoint/Makefile.am
@@ -1,3 +1,3 @@
 # Makefile for checkpoint plugins
 
-SUBDIRS = aix none ompi xlch
+SUBDIRS = aix blcr none ompi xlch
diff --git a/src/plugins/checkpoint/Makefile.in b/src/plugins/checkpoint/Makefile.in
index 076aca867..c6872fe7d 100644
--- a/src/plugins/checkpoint/Makefile.in
+++ b/src/plugins/checkpoint/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
@@ -250,7 +258,7 @@ target_os = @target_os@
 target_vendor = @target_vendor@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = aix none ompi xlch
+SUBDIRS = aix blcr none ompi xlch
 all: all-recursive
 
 .SUFFIXES:
diff --git a/src/plugins/checkpoint/aix/Makefile.in b/src/plugins/checkpoint/aix/Makefile.in
index bc5e93f5f..a7a02b70e 100644
--- a/src/plugins/checkpoint/aix/Makefile.in
+++ b/src/plugins/checkpoint/aix/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -114,6 +118,10 @@ 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@
diff --git a/src/plugins/checkpoint/aix/checkpoint_aix.c b/src/plugins/checkpoint/aix/checkpoint_aix.c
index fef01c9f3..aa748abce 100644
--- a/src/plugins/checkpoint/aix/checkpoint_aix.c
+++ b/src/plugins/checkpoint/aix/checkpoint_aix.c
@@ -1,14 +1,16 @@
 /*****************************************************************************\
  *  checkpoint_aix.c - AIX slurm checkpoint plugin.
- *  $Id: checkpoint_aix.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: checkpoint_aix.c 17706 2009-06-03 23:47:58Z jette $
  *****************************************************************************
- *  Copyright (C) 2004 The Regents of the University of California.
+ *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -56,6 +58,7 @@
 #include <slurm/slurm.h>
 #include <slurm/slurm_errno.h>
 
+#include "src/common/slurm_xlator.h"
 #include "src/common/list.h"
 #include "src/common/log.h"
 #include "src/common/pack.h"
@@ -65,6 +68,13 @@
 #include "src/slurmctld/agent.h"
 #include "src/slurmctld/slurmctld.h"
 
+/* These are defined here so when we link with something other than
+ * the slurmctld we will have these symbols defined.  They will get
+ * overwritten when linking with the slurmctld. 
+ */
+struct node_record *node_record_table_ptr = NULL;
+int node_record_count = 0;
+
 struct check_job_info {
 	uint16_t disabled;	/* counter, checkpointable only if zero */
 	uint16_t node_cnt;
@@ -131,7 +141,7 @@ static void  _ckpt_signal_step(struct ckpt_timeout_info *rec);
  */
 const char plugin_name[]       	= "Checkpoint AIX plugin";
 const char plugin_type[]       	= "checkpoint/aix";
-const uint32_t plugin_version	= 90;
+const uint32_t plugin_version	= 100;
 
 /*
  * init() is called when the plugin is loaded, before any other functions
@@ -176,14 +186,16 @@ extern int fini ( void )
  * The remainder of this file implements the standard SLURM checkpoint API.
  */
 
-extern int slurm_ckpt_op ( uint16_t op, uint16_t data,
-		struct step_record * step_ptr, time_t * event_time, 
-		uint32_t *error_code, char **error_msg )
+extern int slurm_ckpt_op (uint32_t job_id, uint32_t step_id, 
+			  struct step_record *step_ptr, uint16_t op,
+			  uint16_t data, char *image_dir, time_t * event_time, 
+			  uint32_t *error_code, char **error_msg )
 {
 	int rc = SLURM_SUCCESS;
 	struct check_job_info *check_ptr;
 
-	xassert(step_ptr);
+	if (!step_ptr)
+		return ESLURM_INVALID_JOB_ID;
 	check_ptr = (struct check_job_info *) step_ptr->check_job;
 	xassert(check_ptr);
 
@@ -507,8 +519,24 @@ static void _ckpt_dequeue_timeout(uint32_t job_id, uint32_t step_id,
 	slurm_mutex_unlock(&ckpt_agent_mutex);
 }
 
-extern int slurm_ckpt_task_comp ( struct step_record * step_ptr, uint32_t task_id,
-				  time_t event_time, uint32_t error_code, char *error_msg )
+extern int slurm_ckpt_task_comp ( struct step_record * step_ptr, 
+				  uint32_t task_id, time_t event_time,
+				  uint32_t error_code, char *error_msg )
+{
+	return SLURM_SUCCESS;
+}
+
+extern int slurm_ckpt_stepd_prefork(void *slurmd_job)
 {
 	return SLURM_SUCCESS;
 }
+
+extern int slurm_ckpt_signal_tasks(void *slurmd_job)
+{
+	return ESLURM_NOT_SUPPORTED;
+}
+
+extern int slurm_ckpt_restart_task(void *slurmd_job, char *image_dir, int gtid)
+{
+	return ESLURM_NOT_SUPPORTED;
+}
diff --git a/src/plugins/checkpoint/blcr/Makefile.am b/src/plugins/checkpoint/blcr/Makefile.am
new file mode 100644
index 000000000..bf629b6ca
--- /dev/null
+++ b/src/plugins/checkpoint/blcr/Makefile.am
@@ -0,0 +1,22 @@
+# Makefile for checkpoint/blcr plugin
+
+AUTOMAKE_OPTIONS = foreign
+
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+
+if WITH_BLCR
+pkglib_LTLIBRARIES = checkpoint_blcr.la
+checkpoint_blcr_la_SOURCES = checkpoint_blcr.c
+checkpoint_blcr_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+
+dist_bin_SCRIPTS = cr_checkpoint.sh cr_restart.sh
+
+force:
+
+$(checkpoint_blcr_LDADD) : force
+	@cd `dirname $@` && $(MAKE) `basename $@`
+else
+EXTRA_checkpoint_blcr_la_SOURCES = checkpoint_blcr.c
+endif
diff --git a/src/plugins/checkpoint/blcr/Makefile.in b/src/plugins/checkpoint/blcr/Makefile.in
new file mode 100644
index 000000000..df674f5f0
--- /dev/null
+++ b/src/plugins/checkpoint/blcr/Makefile.in
@@ -0,0 +1,607 @@
+# Makefile.in generated by automake 1.10.1 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@
+
+# Makefile for checkpoint/blcr plugin
+
+
+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 = src/plugins/checkpoint/blcr
+DIST_COMMON = $(am__dist_bin_SCRIPTS_DIST) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/cr_checkpoint.sh.in \
+	$(srcdir)/cr_restart.sh.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 = cr_checkpoint.sh cr_restart.sh
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(bindir)"
+pkglibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+checkpoint_blcr_la_LIBADD =
+am__checkpoint_blcr_la_SOURCES_DIST = checkpoint_blcr.c
+@WITH_BLCR_TRUE@am_checkpoint_blcr_la_OBJECTS = checkpoint_blcr.lo
+am__EXTRA_checkpoint_blcr_la_SOURCES_DIST = checkpoint_blcr.c
+checkpoint_blcr_la_OBJECTS = $(am_checkpoint_blcr_la_OBJECTS)
+checkpoint_blcr_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(checkpoint_blcr_la_LDFLAGS) $(LDFLAGS) -o $@
+@WITH_BLCR_TRUE@am_checkpoint_blcr_la_rpath = -rpath $(pkglibdir)
+am__dist_bin_SCRIPTS_DIST = cr_checkpoint.sh cr_restart.sh
+dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(dist_bin_SCRIPTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
+depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(checkpoint_blcr_la_SOURCES) \
+	$(EXTRA_checkpoint_blcr_la_SOURCES)
+DIST_SOURCES = $(am__checkpoint_blcr_la_SOURCES_DIST) \
+	$(am__EXTRA_checkpoint_blcr_la_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+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@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELAN_LIBS = @ELAN_LIBS@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
+FFLAGS = @FFLAGS@
+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@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_LDFLAGS = @LIB_LDFLAGS@
+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@
+NMEDIT = @NMEDIT@
+NUMA_LIBS = @NUMA_LIBS@
+OBJEXT = @OBJEXT@
+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_F77 = @ac_ct_F77@
+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@
+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_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+@WITH_BLCR_TRUE@pkglib_LTLIBRARIES = checkpoint_blcr.la
+@WITH_BLCR_TRUE@checkpoint_blcr_la_SOURCES = checkpoint_blcr.c
+@WITH_BLCR_TRUE@checkpoint_blcr_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+@WITH_BLCR_TRUE@dist_bin_SCRIPTS = cr_checkpoint.sh cr_restart.sh
+@WITH_BLCR_FALSE@EXTRA_checkpoint_blcr_la_SOURCES = checkpoint_blcr.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/plugins/checkpoint/blcr/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/plugins/checkpoint/blcr/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
+cr_checkpoint.sh: $(top_builddir)/config.status $(srcdir)/cr_checkpoint.sh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+cr_restart.sh: $(top_builddir)/config.status $(srcdir)/cr_restart.sh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    f=$(am__strip_dir) \
+	    echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	    $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  p=$(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$p'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$p"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+checkpoint_blcr.la: $(checkpoint_blcr_la_OBJECTS) $(checkpoint_blcr_la_DEPENDENCIES) 
+	$(checkpoint_blcr_la_LINK) $(am_checkpoint_blcr_la_rpath) $(checkpoint_blcr_la_OBJECTS) $(checkpoint_blcr_la_LIBADD) $(LIBS)
+install-dist_binSCRIPTS: $(dist_bin_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(dist_bin_SCRIPTS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f $$d$$p; then \
+	    f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	    echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	    $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-dist_binSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_bin_SCRIPTS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkpoint_blcr.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+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; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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:  $(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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(SCRIPTS)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+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 clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+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-dist_binSCRIPTS install-pkglibLTLIBRARIES
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_binSCRIPTS uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am \
+	install-dist_binSCRIPTS 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-pkglibLTLIBRARIES install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-dist_binSCRIPTS \
+	uninstall-pkglibLTLIBRARIES
+
+
+@WITH_BLCR_TRUE@force:
+
+@WITH_BLCR_TRUE@$(checkpoint_blcr_LDADD) : force
+@WITH_BLCR_TRUE@	@cd `dirname $@` && $(MAKE) `basename $@`
+# 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/src/plugins/checkpoint/blcr/checkpoint_blcr.c b/src/plugins/checkpoint/blcr/checkpoint_blcr.c
new file mode 100644
index 000000000..ba66d0f7f
--- /dev/null
+++ b/src/plugins/checkpoint/blcr/checkpoint_blcr.c
@@ -0,0 +1,715 @@
+/*****************************************************************************\
+ *  checkpoint_blcr.c - BLCR slurm checkpoint plugin.
+ *  $Id: checkpoint_blcr.c 0001 2008-12-29 16:50:11Z hjcao $
+ *****************************************************************************
+ *  Derived from checkpoint_aix.c
+ *  Copyright (C) 2007-2009 National University of Defense Technology, China.
+ *  Written by Hongia Cao.
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#if HAVE_STDINT_H
+#  include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H
+#  include <inttypes.h>
+#endif
+#ifdef WITH_PTHREADS
+#  include <pthread.h>
+#endif
+
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+#include <libgen.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <slurm/slurm.h>
+#include <slurm/slurm_errno.h>
+
+#include "src/common/list.h"
+#include "src/common/log.h"
+#include "src/common/pack.h"
+#include "src/common/xassert.h"
+#include "src/common/xstring.h"
+#include "src/common/xmalloc.h"
+#include "src/slurmctld/agent.h"
+#include "src/slurmctld/slurmctld.h"
+#include "src/slurmctld/locks.h"
+#include "src/slurmd/slurmstepd/slurmstepd_job.h"
+
+#define MAX_PATH_LEN 1024
+
+struct check_job_info {
+	uint16_t disabled;	/* counter, checkpointable only if zero */
+	time_t   time_stamp;	/* begin or end checkpoint time */
+	uint32_t error_code;
+	char    *error_msg;
+};
+
+struct ckpt_req {
+	uint32_t gid;
+	uint32_t uid;
+	uint32_t job_id;
+	uint32_t step_id;
+	time_t begin_time;
+	uint16_t wait;
+	char *image_dir;
+	char *nodelist;
+	uint16_t sig_done;
+};
+
+static void _send_sig(uint32_t job_id, uint32_t step_id, uint16_t signal, 
+		      char *nodelist);
+static void _send_sig(uint32_t job_id, uint32_t step_id,
+		      uint16_t signal, char *nodelist);
+static void *_ckpt_agent_thr(void *arg);
+static void _ckpt_req_free(void *ptr);
+static int _on_ckpt_complete(uint32_t group_id, uint32_t user_id,
+			     uint32_t job_id, uint32_t step_id,
+			     char *image_dir, uint32_t error_code);
+
+
+/* path to shell scripts */
+static char *scch_path = SLURM_PREFIX "/sbin/scch";
+static char *cr_checkpoint_path = SLURM_PREFIX "/bin/cr_checkpoint.sh";
+static char *cr_restart_path = SLURM_PREFIX "/bin/cr_restart.sh";
+
+static uint32_t ckpt_agent_jobid = 0;
+static uint16_t ckpt_agent_count = 0;
+static pthread_mutex_t ckpt_agent_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t ckpt_agent_cond = PTHREAD_COND_INITIALIZER;
+
+/*
+ * These variables are required by the generic plugin interface.  If they
+ * are not found in the plugin, the plugin loader will ignore it.
+ *
+ * plugin_name - a string giving a human-readable description of the
+ * plugin.  There is no maximum length, but the symbol must refer to
+ * a valid string.
+ *
+ * plugin_type - a string suggesting the type of the plugin or its
+ * applicability to a particular form of data or method of data handling.
+ * If the low-level plugin API is used, the contents of this string are
+ * unimportant and may be anything.  SLURM uses the higher-level plugin
+ * interface which requires this string to be of the form
+ *
+ *	<application>/<method>
+ *
+ * where <application> is a description of the intended application of
+ * the plugin (e.g., "checkpoint" for SLURM checkpoint) and <method>
+ * is a description of how this plugin satisfies that application.  SLURM will
+ * only load checkpoint plugins if the plugin_type string has a 
+ * prefix of "checkpoint/".
+ *
+ * plugin_version - an unsigned 32-bit integer giving the version number
+ * of the plugin.  If major and minor revisions are desired, the major
+ * version number may be multiplied by a suitable magnitude constant such
+ * as 100 or 1000.  Various SLURM versions will likely require a certain
+ * minimum versions for their plugins as the checkpoint API matures.
+ */
+const char plugin_name[]       	= "BLCR checkpoint plugin";
+const char plugin_type[]       	= "checkpoint/blcr";
+const uint32_t plugin_version	= 100;
+
+/*
+ * init() is called when the plugin is loaded, before any other functions
+ * are called.  Put global initialization here.
+ */
+extern int init ( void )
+{
+	info("checkpoint/blcr init");
+	return SLURM_SUCCESS;
+}
+
+
+extern int fini ( void )
+{
+	info("checkpoint/blcr fini");
+	return SLURM_SUCCESS;
+}
+
+/*
+ * The remainder of this file implements the standard SLURM checkpoint API.
+ */
+extern int slurm_ckpt_op (uint32_t job_id, uint32_t step_id, 
+			  struct step_record *step_ptr, uint16_t op,
+			  uint16_t data, char *image_dir, time_t * event_time, 
+			  uint32_t *error_code, char **error_msg )
+{
+	int rc = SLURM_SUCCESS;
+	struct check_job_info *check_ptr;
+	uint16_t done_sig = 0;
+	struct job_record *job_ptr;
+	struct node_record *node_ptr;
+	pthread_attr_t attr;
+	pthread_t ckpt_agent_tid = 0;
+	char *nodelist;
+	struct ckpt_req *req_ptr;
+
+	/* job/step checked already */
+	job_ptr = find_job_record(job_id);
+	if (!job_ptr)
+		return ESLURM_INVALID_JOB_ID;
+	if (step_id == SLURM_BATCH_SCRIPT) {
+		check_ptr = (struct check_job_info *)job_ptr->check_job;
+		node_ptr = find_first_node_record(job_ptr->node_bitmap);
+		nodelist = node_ptr->name;
+	} else {
+		step_ptr = find_step_record(job_ptr, step_id);
+		if (!step_ptr)
+			return ESLURM_INVALID_JOB_ID;
+		check_ptr = (struct check_job_info *)step_ptr->check_job;
+		nodelist = step_ptr->step_layout->node_list;
+	}
+	xassert(check_ptr);
+
+	switch (op) {
+	case CHECK_ABLE:
+		if (check_ptr->disabled)
+			rc = ESLURM_DISABLED;
+		else {
+			*event_time = check_ptr->time_stamp;
+			rc = SLURM_SUCCESS;
+		}
+		break;
+	case CHECK_DISABLE:
+		check_ptr->disabled++;
+		break;
+	case CHECK_ENABLE:
+		check_ptr->disabled--;
+		break;
+	case CHECK_VACATE:
+		done_sig = SIGTERM;
+		/* no break */
+	case CHECK_CREATE:
+		if (check_ptr->disabled) {
+			rc = ESLURM_DISABLED;
+			break;
+		}
+		if (check_ptr->time_stamp != 0) {
+			rc = EALREADY;
+			break;
+		}
+			
+		check_ptr->time_stamp = time(NULL);
+		check_ptr->error_code = 0;
+		xfree(check_ptr->error_msg);
+
+		req_ptr = xmalloc(sizeof(struct ckpt_req));
+		if (!req_ptr) {
+			rc = ENOMEM;
+			break;
+		}
+		req_ptr->gid = job_ptr->group_id;
+		req_ptr->uid = job_ptr->user_id;
+		req_ptr->job_id = job_id;
+		req_ptr->step_id = step_id;
+		req_ptr->begin_time = check_ptr->time_stamp;
+		req_ptr->wait = data;
+		req_ptr->image_dir = xstrdup(image_dir);
+		req_ptr->nodelist = xstrdup(nodelist);
+		req_ptr->sig_done = done_sig;
+
+		slurm_attr_init(&attr);
+		if (pthread_attr_setdetachstate(&attr, 
+						PTHREAD_CREATE_DETACHED)) {
+			error("pthread_attr_setdetachstate: %m");
+			rc = errno;
+			break;
+		}
+		
+		if (pthread_create(&ckpt_agent_tid, &attr, _ckpt_agent_thr, 
+				   req_ptr)) {
+			error("pthread_create: %m");
+			rc = errno;
+			break;
+		}
+		slurm_attr_destroy(&attr);
+
+		break;
+			
+	case CHECK_RESTART:
+		if (step_id != SLURM_BATCH_SCRIPT) {
+			rc = ESLURM_NOT_SUPPORTED;
+			break;
+		}
+		/* create a batch job from saved desc */
+		rc = ESLURM_NOT_SUPPORTED;
+		/* TODO: save job script */
+		break;
+			
+	case CHECK_ERROR:
+		xassert(error_code);
+		xassert(error_msg);
+		*error_code = check_ptr->error_code;
+		xfree(*error_msg);
+		*error_msg = xstrdup(check_ptr->error_msg);
+		break;
+	default:
+		error("Invalid checkpoint operation: %d", op);
+		rc = EINVAL;
+	}
+
+	return rc;
+}
+
+extern int slurm_ckpt_comp ( struct step_record * step_ptr, time_t event_time,
+		uint32_t error_code, char *error_msg )
+{
+	error("checkpoint/blcr: slurm_ckpt_comp not implemented");
+	return SLURM_FAILURE; 
+}
+
+extern int slurm_ckpt_task_comp ( struct step_record * step_ptr, 
+				  uint32_t task_id, time_t event_time, 
+				  uint32_t error_code, char *error_msg )
+{
+	error("checkpoint/blcr: slurm_ckpt_task_comp not implemented");
+	return SLURM_FAILURE; 
+}
+
+extern int slurm_ckpt_alloc_job(check_jobinfo_t *jobinfo)
+{
+	struct check_job_info *check_ptr;
+	check_ptr = xmalloc(sizeof(struct check_job_info));
+	*jobinfo = (check_jobinfo_t) check_ptr;
+	return SLURM_SUCCESS;
+}
+
+extern int slurm_ckpt_free_job(check_jobinfo_t jobinfo)
+{
+	struct check_job_info *check_ptr = (struct check_job_info *)jobinfo;
+	if (check_ptr) {
+		xfree(check_ptr->error_msg);
+		xfree(check_ptr);
+	}
+	return SLURM_SUCCESS;
+}
+
+extern int slurm_ckpt_pack_job(check_jobinfo_t jobinfo, Buf buffer)
+{
+	struct check_job_info *check_ptr = 
+		(struct check_job_info *)jobinfo;
+ 
+	pack16(check_ptr->disabled, buffer);
+	pack_time(check_ptr->time_stamp, buffer);
+	pack32(check_ptr->error_code, buffer);
+	packstr(check_ptr->error_msg, buffer);
+
+	return SLURM_SUCCESS;
+}
+
+extern int slurm_ckpt_unpack_job(check_jobinfo_t jobinfo, Buf buffer)
+{
+	uint32_t uint32_tmp;
+	struct check_job_info *check_ptr =
+		(struct check_job_info *)jobinfo;
+
+	safe_unpack16(&check_ptr->disabled, buffer);
+	safe_unpack_time(&check_ptr->time_stamp, buffer);
+	safe_unpack32(&check_ptr->error_code, buffer);
+	safe_unpackstr_xmalloc(&check_ptr->error_msg, &uint32_tmp, buffer);
+	
+	return SLURM_SUCCESS; 
+
+    unpack_error:
+	xfree(check_ptr->error_msg);
+	return SLURM_ERROR;
+}
+
+extern int slurm_ckpt_stepd_prefork(slurmd_job_t *job)
+{
+	char *old_env = NULL, *new_env = NULL, *ptr = NULL, *save_ptr = NULL;
+	
+	/*
+	 * I was thinking that a thread can be created here to
+	 * communicate with the tasks via sockets/pipes.
+	 * Maybe this is not needed - we can modify MVAPICH2
+	 */
+
+	/* set LD_PRELOAD for batch script shell */
+	//if (job->batch) {
+		old_env = getenvp(job->env, "LD_PRELOAD");
+		if (old_env) {
+			/* search and replace all libcr_run and libcr_omit
+			 * the old env value is messed up --
+			 * it will be replaced */
+			while ((ptr = strtok_r(old_env, " :", &save_ptr))) {
+				old_env = NULL;
+				if (!ptr)
+					break;
+				if (!strncmp(ptr, "libcr_run.so", 12) ||
+				    !strncmp(ptr, "libcr_omit.so", 13))
+					continue;
+				xstrcat(new_env, ptr);
+				xstrcat(new_env, ":");
+			}
+		}
+		ptr = xstrdup("libcr_run.so");
+		if (new_env)
+			xstrfmtcat(ptr, ":%s", new_env);
+		setenvf(&job->env, "LD_PRELOAD", ptr);
+		xfree(new_env);
+		xfree(ptr);
+		//}
+	return SLURM_SUCCESS;
+}
+
+extern int slurm_ckpt_signal_tasks(slurmd_job_t *job, char *image_dir)
+{
+	char *argv[4];
+	char context_file[MAX_PATH_LEN];
+	char pid[16];
+	int status;
+	pid_t *children = NULL;
+	int *fd = NULL;
+	int rc = SLURM_SUCCESS;
+	int i;
+	char c;
+
+	debug3("checkpoint/blcr: slurm_ckpt_signal_tasks: image_dir=%s", 
+	       image_dir);
+	/*
+	 * the tasks must be checkpointed concurrently.
+	 */
+	children = xmalloc(sizeof(pid_t) * job->ntasks);
+	fd = xmalloc(sizeof(int) * 2 * job->ntasks);
+	if (!children || !fd) {
+		error("slurm_ckpt_signal_tasks: memory exhausted");
+		rc = SLURM_FAILURE;
+		goto out;
+	}
+	for (i = 0; i < job->ntasks; i ++) {
+		fd[i*2] = -1;
+		fd[i*2+1] = -1;
+	}
+
+	for (i = 0; i < job->ntasks; i ++) {
+		if (job->batch) {
+			sprintf(context_file, "%s/script.ckpt", image_dir);
+		} else {
+			sprintf(context_file, "%s/task.%d.ckpt",
+				image_dir, job->task[i]->gtid);
+		}
+		sprintf(pid, "%u", (unsigned int)job->task[i]->pid);
+
+		if (pipe(&fd[i*2]) < 0) {
+			error("failed to create pipes: %m");
+			rc = SLURM_ERROR;
+			goto out_wait;
+		}
+
+		children[i] = fork();
+		if (children[i] < 0) {
+			error("error forking cr_checkpoint");
+			rc = SLURM_ERROR;
+			goto out_wait;
+		} else if (children[i] == 0) {
+			close(fd[i*2+1]);
+
+			while(read(fd[i*2], &c, 1) < 0 && errno == EINTR);
+			if (c)
+				exit(-1);
+
+			/* change cred to job owner */
+			if (setgid(job->gid) < 0) {
+				error ("checkpoint/blcr: "
+				       "slurm_ckpt_signal_tasks: "
+				       "failed to setgid: %m");
+				exit(errno);
+			}
+			if (setuid(job->uid) < 0) {
+				error ("checkpoint/blcr: "
+				       "slurm_ckpt_signal_tasks: "
+				       "failed to setuid: %m");
+				exit(errno);
+			}
+			if (chdir(job->cwd) < 0) {
+				error ("checkpoint/blcr: "
+				       "slurm_ckpt_signal_tasks: "
+				       "failed to chdir: %m");
+				exit(errno);
+			}
+			
+			argv[0] = cr_checkpoint_path;
+			argv[1] = pid;
+			argv[2] = context_file;
+			argv[3] = NULL;
+
+			execv(argv[0], argv);
+			exit(errno);
+		}
+		close(fd[i*2]);
+	}
+
+ out_wait:
+	c = (rc == SLURM_SUCCESS) ? 0 : 1;
+	for (i = 0; i < job->ntasks; i ++) {
+		if (fd[i*2+1] >= 0) {
+			while(write(fd[i*2+1], &c, 1) < 0 && errno == EINTR);
+		}
+	}
+	/* wait children in sequence is OK */
+	for (i = 0; i < job->ntasks; i ++) {
+		if (children[i] == 0)
+			continue;
+		while(waitpid(children[i], &status, 0) < 0 && errno == EINTR);
+		if (! (WIFEXITED(status) && WEXITSTATUS(status))== 0)
+			rc = SLURM_ERROR;
+	}
+ out:
+	xfree(children);
+	xfree(fd);
+
+	return rc;
+}
+
+extern int slurm_ckpt_restart_task(slurmd_job_t *job, char *image_dir, int gtid)
+{
+	char *argv[3];
+	char context_file[MAX_PATH_LEN];
+
+	/* jobid and stepid must NOT be spelled here, 
+	 * since it is a new job/step */
+	if (job->batch) {
+		sprintf(context_file, "%s/script.ckpt", image_dir);
+	} else {
+		sprintf(context_file, "%s/task.%d.ckpt", image_dir, gtid);
+	}
+
+	argv[0] = cr_restart_path;
+	argv[1] = context_file;
+	argv[2] = NULL;
+
+	execv(argv[0], argv);
+
+	error("execv failure: %m");
+	return SLURM_ERROR;
+}
+
+
+/* Send a signal RPC to a list of nodes */
+static void _send_sig(uint32_t job_id, uint32_t step_id, uint16_t signal, 
+		      char *nodelist)
+{
+	agent_arg_t *agent_args;
+	kill_tasks_msg_t *kill_tasks_msg;
+
+	kill_tasks_msg = xmalloc(sizeof(kill_tasks_msg_t));
+	kill_tasks_msg->job_id		= job_id;
+	kill_tasks_msg->job_step_id	= step_id;
+	kill_tasks_msg->signal		= signal;
+
+	agent_args = xmalloc(sizeof(agent_arg_t));
+	agent_args->msg_type		= REQUEST_SIGNAL_TASKS;
+	agent_args->retry		= 1;
+	agent_args->msg_args		= kill_tasks_msg;
+	agent_args->hostlist		= hostlist_create(nodelist);
+	agent_args->node_count		= hostlist_count(agent_args->hostlist);
+
+	agent_queue_request(agent_args);
+}
+
+
+/* Checkpoint processing pthread
+ * Never returns, but is cancelled on plugin termiantion */
+static void *_ckpt_agent_thr(void *arg)
+{
+	struct ckpt_req *req = (struct ckpt_req *)arg;
+	int rc;
+	/* Locks: write job */
+	slurmctld_lock_t job_write_lock = { 
+		NO_LOCK, WRITE_LOCK, NO_LOCK, NO_LOCK };
+	struct job_record *job_ptr;
+	struct step_record *step_ptr;
+	struct check_job_info *check_ptr;
+
+	/* only perform ckpt operation of ONE JOB */
+	slurm_mutex_lock(&ckpt_agent_mutex);
+	while (ckpt_agent_jobid && ckpt_agent_jobid != req->job_id) {
+		pthread_cond_wait(&ckpt_agent_cond, &ckpt_agent_mutex);
+	}
+	ckpt_agent_jobid = req->job_id;
+	ckpt_agent_count ++;
+	slurm_mutex_unlock(&ckpt_agent_mutex);
+
+	debug3("checkpoint/blcr: sending checkpoint tasks request to %u.%u",
+	       req->job_id, req->step_id);
+	
+	rc = checkpoint_tasks(req->job_id, req->step_id, req->begin_time,
+			      req->image_dir, req->wait, req->nodelist);
+
+	lock_slurmctld(job_write_lock);
+	
+	job_ptr = find_job_record(req->job_id);
+	if (!job_ptr) {
+		error("_ckpt_agent_thr: job finished");
+		goto out;
+	}
+	if (req->step_id == SLURM_BATCH_SCRIPT) {	/* batch job */
+		check_ptr = (struct check_job_info *)job_ptr->check_job;
+	} else {
+		step_ptr = find_step_record(job_ptr, req->step_id);
+		if (! step_ptr) {
+			error("_ckpt_agent_thr: step finished");
+			goto out;
+		}
+		check_ptr = (struct check_job_info *)step_ptr->check_job;
+	}
+	check_ptr->time_stamp = 0;
+	check_ptr->error_code = rc;
+	if (check_ptr->error_code != SLURM_SUCCESS)
+		check_ptr->error_msg = xstrdup(slurm_strerror(rc));
+
+ out:
+	unlock_slurmctld(job_write_lock);
+		
+	if (req->sig_done) {
+		_send_sig(req->job_id, req->step_id, req->sig_done, 
+			  req->nodelist);
+	}
+
+	_on_ckpt_complete(req->gid, req->uid, req->job_id, req->step_id, 
+			  req->image_dir, rc);
+
+	slurm_mutex_lock(&ckpt_agent_mutex);
+	ckpt_agent_count --;
+	if (ckpt_agent_count == 0) {
+		ckpt_agent_jobid = 0;
+		pthread_cond_broadcast(&ckpt_agent_cond);
+	}
+	slurm_mutex_unlock(&ckpt_agent_mutex);
+	_ckpt_req_free(req);
+	return NULL;
+}
+
+
+static void _ckpt_req_free(void *ptr)
+{
+	struct ckpt_req *req = (struct ckpt_req *)ptr;
+	
+	if (req) {
+		xfree(req->image_dir);
+		xfree(req->nodelist);
+		xfree(req);
+	}
+}
+
+
+/* a checkpoint completed, process the images files */
+static int _on_ckpt_complete(uint32_t group_id, uint32_t user_id,
+			     uint32_t job_id, uint32_t step_id,
+			     char *image_dir, uint32_t error_code)
+{
+	int status;
+	pid_t cpid;
+
+	if (access(scch_path, R_OK | X_OK) < 0) {
+		info("Access denied for %s: %m", scch_path);
+		return SLURM_ERROR;
+	}
+
+	if ((cpid = fork()) < 0) {
+		error ("_on_ckpt_complete: fork: %m");
+		return SLURM_ERROR;
+	}
+	
+	if (cpid == 0) {
+		/*
+		 * We don't fork and wait the child process because the job 
+		 * read lock is held. It could take minutes to delete/move 
+		 * the checkpoint image files. So there is a race condition
+		 * of the user requesting another checkpoint before SCCH
+		 * finishes.
+		 */
+		/* fork twice to avoid zombies */
+		if ((cpid = fork()) < 0) {
+			error("_on_ckpt_complete: second fork: %m");
+			exit(127);
+		}
+		/* grand child execs */
+		if (cpid == 0) {
+			char *args[6];
+			char str_job[11];
+			char str_step[11];
+			char str_err[11];
+		
+			/*
+			 * XXX: if slurmctld is running as root, we must setuid here.
+			 * But what if slurmctld is running as SlurmUser?
+			 * How about we make scch setuid and pass the user/group to it?
+			 */
+			if (geteuid() == 0) { /* root */
+				if (setgid(group_id) < 0) {
+					error("_on_ckpt_complete: failed to "
+					      "setgid: %m");
+					exit(127);
+				}
+				if (setuid(user_id) < 0) {
+					error("_on_ckpt_complete: failed to "
+					      "setuid: %m");
+					exit(127);
+				}
+			}
+			snprintf(str_job,  sizeof(str_job),  "%u", job_id);
+			snprintf(str_step, sizeof(str_step), "%u", step_id);
+			snprintf(str_err,  sizeof(str_err),  "%u", error_code);
+
+			args[0] = scch_path;
+			args[1] = str_job;
+			args[2] = str_step;
+			args[3] = str_err;
+			args[4] = image_dir;
+			args[5] = NULL;
+
+			execv(scch_path, args);
+			error("execv failure: %m");
+			exit(127);
+		}
+		/* child just exits */
+		exit(0);
+	}
+
+	while(1) {
+		if (waitpid(cpid, &status, 0) < 0 && errno == EINTR)
+			continue;
+		break;
+	}
+
+	return SLURM_SUCCESS;
+}
diff --git a/src/plugins/checkpoint/blcr/cr_checkpoint.sh.in b/src/plugins/checkpoint/blcr/cr_checkpoint.sh.in
new file mode 100644
index 000000000..23181dd37
--- /dev/null
+++ b/src/plugins/checkpoint/blcr/cr_checkpoint.sh.in
@@ -0,0 +1,4 @@
+#!/bin/sh
+image_dir=`dirname $2`
+mkdir -p $image_dir
+exec @BLCR_HOME@/bin/cr_checkpoint -T $1 -f $2
diff --git a/src/plugins/checkpoint/blcr/cr_restart.sh.in b/src/plugins/checkpoint/blcr/cr_restart.sh.in
new file mode 100644
index 000000000..297598774
--- /dev/null
+++ b/src/plugins/checkpoint/blcr/cr_restart.sh.in
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec @BLCR_HOME@/bin/cr_restart $1
diff --git a/src/plugins/checkpoint/none/Makefile.in b/src/plugins/checkpoint/none/Makefile.in
index 06685cc82..b3a6ea2b3 100644
--- a/src/plugins/checkpoint/none/Makefile.in
+++ b/src/plugins/checkpoint/none/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/checkpoint/none/checkpoint_none.c b/src/plugins/checkpoint/none/checkpoint_none.c
index 78a441782..b05b00dd2 100644
--- a/src/plugins/checkpoint/none/checkpoint_none.c
+++ b/src/plugins/checkpoint/none/checkpoint_none.c
@@ -1,13 +1,15 @@
 /*****************************************************************************\
  *  checkpoint_none.c - NO-OP slurm checkpoint plugin.
  *****************************************************************************
- *  Copyright (C) 2004 The Regents of the University of California.
+ *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -82,7 +84,7 @@
  */
 const char plugin_name[]       	= "Checkpoint NONE plugin";
 const char plugin_type[]       	= "checkpoint/none";
-const uint32_t plugin_version	= 90;
+const uint32_t plugin_version	= 100;
 
 /*
  * init() is called when the plugin is loaded, before any other functions
@@ -102,14 +104,15 @@ extern int fini ( void )
  * The remainder of this file implements the standard SLURM checkpoint API.
  */
 
-extern int slurm_ckpt_op ( uint16_t op, uint16_t data,
-		struct step_record * step_ptr, time_t * event_time,
-		uint32_t *error_code, char **error_msg )
+extern int slurm_ckpt_op (uint32_t job_id, uint32_t step_id, 
+			  struct step_record *step_ptr, uint16_t op,
+			  uint16_t data, char *image_dir, time_t * event_time, 
+			  uint32_t *error_code, char **error_msg )
 {
 	return ESLURM_NOT_SUPPORTED;
 }
 
-extern int slurm_ckpt_comp ( struct step_record * step_ptr, time_t event_time,
+extern int slurm_ckpt_comp (struct step_record * step_ptr, time_t event_time,
 		uint32_t error_code, char *error_msg)
 {
 	return ESLURM_NOT_SUPPORTED;
@@ -135,9 +138,24 @@ extern int slurm_ckpt_unpack_job(check_jobinfo_t jobinfo, Buf buffer)
 	return SLURM_SUCCESS;
 }
 
-extern int slurm_ckpt_task_comp ( struct step_record * step_ptr, uint32_t task_id,
-				  time_t event_time, uint32_t error_code, char *error_msg )
+extern int slurm_ckpt_task_comp (struct step_record * step_ptr, 
+				 uint32_t task_id, time_t event_time, 
+				 uint32_t error_code, char *error_msg )
 {
 	return SLURM_SUCCESS;
 }
 
+extern int slurm_ckpt_stepd_prefork(void *slurmd_job)
+{
+	return SLURM_SUCCESS;
+}
+
+extern int slurm_ckpt_signal_tasks(void *slurmd_job)
+{
+	return ESLURM_NOT_SUPPORTED;
+}
+
+extern int slurm_ckpt_restart_task(void *slurmd_job, char *image_dir, int gtid)
+{
+	return ESLURM_NOT_SUPPORTED;
+}
diff --git a/src/plugins/checkpoint/ompi/Makefile.in b/src/plugins/checkpoint/ompi/Makefile.in
index 82ca16142..bfa81bac3 100644
--- a/src/plugins/checkpoint/ompi/Makefile.in
+++ b/src/plugins/checkpoint/ompi/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/checkpoint/ompi/checkpoint_ompi.c b/src/plugins/checkpoint/ompi/checkpoint_ompi.c
index 37a60f63a..513fc93f2 100644
--- a/src/plugins/checkpoint/ompi/checkpoint_ompi.c
+++ b/src/plugins/checkpoint/ompi/checkpoint_ompi.c
@@ -2,12 +2,14 @@
  *  checkpoint_ompi.c - OpenMPI slurm checkpoint plugin.
  *****************************************************************************
  *  Copyright (C) 2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -98,7 +100,7 @@ static int _ckpt_step(struct step_record * step_ptr, uint16_t wait, int vacate);
  */
 const char plugin_name[]       	= "OpenMPI checkpoint plugin";
 const char plugin_type[]       	= "checkpoint/ompi";
-const uint32_t plugin_version	= 90;
+const uint32_t plugin_version	= 100;
 
 /*
  * init() is called when the plugin is loaded, before any other functions
@@ -121,15 +123,17 @@ extern int fini ( void )
  * The remainder of this file implements the standard SLURM checkpoint API.
  */
 
-extern int slurm_ckpt_op ( uint16_t op, uint16_t data,
-		struct step_record * step_ptr, time_t * event_time,
-		uint32_t *error_code, char **error_msg )
+extern int slurm_ckpt_op (uint32_t job_id, uint32_t step_id, 
+			  struct step_record *step_ptr, uint16_t op,
+			  uint16_t data, char *image_dir, time_t * event_time, 
+			  uint32_t *error_code, char **error_msg )
 {
 	int rc = SLURM_SUCCESS;
 	struct check_job_info *check_ptr;
 
-	xassert(step_ptr);
-	check_ptr = (struct check_job_info *) step_ptr->check_job;
+	if (!step_ptr)	/* batch job restore */
+		return ESLURM_NOT_SUPPORTED;
+	check_ptr = (struct check_job_info *)step_ptr->check_job;
 	xassert(check_ptr);
 
 	switch (op) {
@@ -308,9 +312,24 @@ static int _ckpt_step(struct step_record * step_ptr, uint16_t wait, int vacate)
 	return SLURM_SUCCESS;
 }
 
-extern int slurm_ckpt_task_comp ( struct step_record * step_ptr, uint32_t task_id,
-				  time_t event_time, uint32_t error_code, char *error_msg )
+extern int slurm_ckpt_task_comp ( struct step_record * step_ptr, 
+				  uint32_t task_id, time_t event_time,
+				  uint32_t error_code, char *error_msg )
+{
+	return SLURM_SUCCESS;
+}
+
+extern int slurm_ckpt_stepd_prefork(void *slurmd_job)
 {
 	return SLURM_SUCCESS;
 }
 
+extern int slurm_ckpt_signal_tasks(void *slurmd_job)
+{
+	return ESLURM_NOT_SUPPORTED;
+}
+
+extern int slurm_ckpt_restart_task(void *slurmd_job, char *image_dir, int gtid)
+{
+	return ESLURM_NOT_SUPPORTED;
+}
diff --git a/src/plugins/checkpoint/xlch/Makefile.am b/src/plugins/checkpoint/xlch/Makefile.am
index 93d497510..67c1f5c64 100644
--- a/src/plugins/checkpoint/xlch/Makefile.am
+++ b/src/plugins/checkpoint/xlch/Makefile.am
@@ -7,12 +7,9 @@ PLUGIN_FLAGS = -module -avoid-version --export-dynamic
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
 
 pkglib_LTLIBRARIES = checkpoint_xlch.la
-checkpoint_xlch_la_SOURCES = checkpoint_xlch.c config.c
+checkpoint_xlch_la_SOURCES = checkpoint_xlch.c
 checkpoint_xlch_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
 
-config.c: Makefile
-	@( echo "char *scch_path = \"$(prefix)/sbin/scch\";"\
-         ) > config.c
 
 force:
 
diff --git a/src/plugins/checkpoint/xlch/Makefile.in b/src/plugins/checkpoint/xlch/Makefile.in
index 8ce983abc..e6ac9386a 100644
--- a/src/plugins/checkpoint/xlch/Makefile.in
+++ b/src/plugins/checkpoint/xlch/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,7 +81,7 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)"
 pkglibLTLIBRARIES_INSTALL = $(INSTALL)
 LTLIBRARIES = $(pkglib_LTLIBRARIES)
 checkpoint_xlch_la_LIBADD =
-am_checkpoint_xlch_la_OBJECTS = checkpoint_xlch.lo config.lo
+am_checkpoint_xlch_la_OBJECTS = checkpoint_xlch.lo
 checkpoint_xlch_la_OBJECTS = $(am_checkpoint_xlch_la_OBJECTS)
 checkpoint_xlch_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@@ -109,6 +113,10 @@ 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@
@@ -272,7 +280,7 @@ AUTOMAKE_OPTIONS = foreign
 PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
 pkglib_LTLIBRARIES = checkpoint_xlch.la
-checkpoint_xlch_la_SOURCES = checkpoint_xlch.c config.c
+checkpoint_xlch_la_SOURCES = checkpoint_xlch.c
 checkpoint_xlch_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
 all: all-am
 
@@ -344,7 +352,6 @@ distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkpoint_xlch.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -553,10 +560,6 @@ uninstall-am: uninstall-pkglibLTLIBRARIES
 	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
 
 
-config.c: Makefile
-	@( echo "char *scch_path = \"$(prefix)/sbin/scch\";"\
-         ) > config.c
-
 force:
 
 $(checkpoint_xlch_LDADD) : force
diff --git a/src/plugins/checkpoint/xlch/checkpoint_xlch.c b/src/plugins/checkpoint/xlch/checkpoint_xlch.c
index 6089588cb..f2afc8528 100644
--- a/src/plugins/checkpoint/xlch/checkpoint_xlch.c
+++ b/src/plugins/checkpoint/xlch/checkpoint_xlch.c
@@ -2,15 +2,14 @@
  *  checkpoint_xlch.c - XLCH slurm checkpoint plugin.
  *  $Id: checkpoint_xlch.c 0001 2006-10-31 10:55:11Z hjcao $
  *****************************************************************************
- *  Copied from checkpoint_aix.c
- *  
- *  Copyright (C) 2004 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  Derived from checkpoint_aix.c
+ *  Copyright (C) 2007-2009 National University of Defense Technology, China.
+ *  Written by Hongia Cao.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -68,8 +67,9 @@
 #include "src/common/xmalloc.h"
 #include "src/slurmctld/agent.h"
 #include "src/slurmctld/slurmctld.h"
+#include "src/slurmd/slurmstepd/slurmstepd_job.h"
 
-#define SIGCKPT 20
+#define SIGCKPT SIGUSR2
 
 struct check_job_info {
 	uint16_t disabled;	/* counter, checkpointable only if zero */
@@ -87,10 +87,9 @@ struct check_job_info {
 
 static void _send_sig(uint32_t job_id, uint32_t step_id, uint16_t signal, 
 		      char *nodelist);
-static void _send_ckpt(uint32_t job_id, uint32_t step_id, uint16_t signal, 
-		       time_t timestamp, char *nodelist);
+
 static int _step_ckpt(struct step_record * step_ptr, uint16_t wait, 
-		      uint16_t signal, uint16_t sig_timeout);
+		      char *image_dir, uint16_t sig_timeout);
 
 /* checkpoint request timeout processing */
 static pthread_t	ckpt_agent_tid = 0;
@@ -115,7 +114,7 @@ static void  _ckpt_signal_step(struct ckpt_timeout_info *rec);
 
 static int _on_ckpt_complete(struct step_record *step_ptr, uint32_t error_code);
 
-extern char *scch_path;
+static char *scch_path = SLURM_PREFIX "/sbin/scch";
 
 /*
  * These variables are required by the generic plugin interface.  If they
@@ -147,7 +146,7 @@ extern char *scch_path;
  */
 const char plugin_name[]       	= "XLCH checkpoint plugin";
 const char plugin_type[]       	= "checkpoint/xlch";
-const uint32_t plugin_version	= 10;
+const uint32_t plugin_version	= 100;
 
 /*
  * init() is called when the plugin is loaded, before any other functions
@@ -192,13 +191,18 @@ extern int fini ( void )
  * The remainder of this file implements the standard SLURM checkpoint API.
  */
 
-extern int slurm_ckpt_op ( uint16_t op, uint16_t data,
-			   struct step_record * step_ptr, time_t * event_time, 
-			   uint32_t *error_code, char **error_msg )
+extern int slurm_ckpt_op (uint32_t job_id, uint32_t step_id, 
+			  struct step_record *step_ptr, uint16_t op,
+			  uint16_t data, char *image_dir, time_t * event_time, 
+			  uint32_t *error_code, char **error_msg )
 {
 	int rc = SLURM_SUCCESS;
 	struct check_job_info *check_ptr;
 
+	/* checkpoint/xlch does not support checkpoint batch jobs */
+	if (step_id == SLURM_BATCH_SCRIPT)
+		return ESLURM_NOT_SUPPORTED;
+	
 	xassert(step_ptr);
 	check_ptr = (struct check_job_info *) step_ptr->check_job;
 	check_ptr->task_cnt = step_ptr->step_layout->task_cnt; /* set it early */
@@ -233,7 +237,7 @@ extern int slurm_ckpt_op ( uint16_t op, uint16_t data,
 			check_ptr->error_code = 0;
 			check_ptr->sig_done = 0;
 			xfree(check_ptr->error_msg);
-			rc = _step_ckpt(step_ptr, data, SIGCKPT, SIGKILL);
+			rc = _step_ckpt(step_ptr, data, image_dir, SIGKILL);
 			break;
 		case CHECK_VACATE:
 			if (check_ptr->time_stamp != 0) {
@@ -246,7 +250,7 @@ extern int slurm_ckpt_op ( uint16_t op, uint16_t data,
 			check_ptr->error_code = 0;
 			check_ptr->sig_done = SIGTERM; /* exit elegantly */
 			xfree(check_ptr->error_msg);
-			rc = _step_ckpt(step_ptr, data, SIGCKPT, SIGKILL);
+			rc = _step_ckpt(step_ptr, data, image_dir, SIGKILL);
 			break;
 		case CHECK_RESTART:
 			rc = ESLURM_NOT_SUPPORTED;
@@ -273,7 +277,7 @@ extern int slurm_ckpt_comp ( struct step_record * step_ptr, time_t event_time,
 		uint32_t error_code, char *error_msg )
 {
 	error("checkpoint/xlch: slurm_ckpt_comp not implemented");
-	return SLURM_FAILURE; 
+	return ESLURM_NOT_SUPPORTED; 
 }
 
 extern int slurm_ckpt_task_comp ( struct step_record * step_ptr, uint32_t task_id,
@@ -427,29 +431,6 @@ extern int slurm_ckpt_unpack_job(check_jobinfo_t jobinfo, Buf buffer)
 	return SLURM_ERROR;
 }
 
-/* Send a checkpoint RPC to a specific job step */
-static void _send_ckpt(uint32_t job_id, uint32_t step_id, uint16_t signal, 
-		       time_t timestamp, char *nodelist)
-{
-	agent_arg_t *agent_args;
-	checkpoint_tasks_msg_t *ckpt_tasks_msg;
-
-	ckpt_tasks_msg = xmalloc(sizeof(checkpoint_tasks_msg_t));
-	ckpt_tasks_msg->job_id		= job_id;
-	ckpt_tasks_msg->job_step_id	= step_id;
-	ckpt_tasks_msg->signal		= signal;
-	ckpt_tasks_msg->timestamp       = timestamp;
-
-	agent_args = xmalloc(sizeof(agent_arg_t));
-	agent_args->msg_type		= REQUEST_CHECKPOINT_TASKS;
-	agent_args->retry		= 1; /* keep retrying until all nodes receives the request */
-	agent_args->msg_args		= ckpt_tasks_msg;
-	agent_args->hostlist 		= hostlist_create(nodelist);
-	agent_args->node_count		= hostlist_count(agent_args->hostlist);
-
-	agent_queue_request(agent_args);
-}
-
 /* Send a signal RPC to a list of nodes */
 static void _send_sig(uint32_t job_id, uint32_t step_id, uint16_t signal, 
 		      char *nodelist)
@@ -474,8 +455,8 @@ static void _send_sig(uint32_t job_id, uint32_t step_id, uint16_t signal,
 
 /* Send checkpoint request to the processes of a job step.
  * If the request times out, send sig_timeout. */
-static int _step_ckpt(struct step_record * step_ptr, uint16_t wait, 
-		      uint16_t signal, uint16_t sig_timeout)
+static int _step_ckpt(struct step_record * step_ptr, uint16_t wait,
+		      char *image_dir, uint16_t sig_timeout)
 {
 	struct check_job_info *check_ptr;
 	struct job_record *job_ptr;
@@ -501,9 +482,9 @@ static int _step_ckpt(struct step_record * step_ptr, uint16_t wait,
 	char* nodelist = xstrdup (step_ptr->step_layout->node_list);
 	check_ptr->wait_time  = wait; /* TODO: how about change wait_time according to task_cnt? */
 
-	_send_ckpt(step_ptr->job_ptr->job_id, step_ptr->step_id,
-		   signal, check_ptr->time_stamp, nodelist);
-
+	checkpoint_tasks(step_ptr->job_ptr->job_id, step_ptr->step_id,
+			 check_ptr->time_stamp, image_dir, wait, nodelist);
+	
 	_ckpt_enqueue_timeout(step_ptr->job_ptr->job_id, 
 			      step_ptr->step_id, check_ptr->time_stamp, 
 			      sig_timeout, check_ptr->wait_time, nodelist);  
@@ -675,7 +656,7 @@ static int _on_ckpt_complete(struct step_record *step_ptr, uint32_t error_code)
 			args[1] = str_job;
 			args[2] = str_step;
 			args[3] = str_err;
-			args[4] = step_ptr->ckpt_path;
+			args[4] = step_ptr->ckpt_dir;
 			args[5] = NULL;
 
 			execv(scch_path, args);
@@ -694,3 +675,31 @@ static int _on_ckpt_complete(struct step_record *step_ptr, uint32_t error_code)
 
 	return SLURM_SUCCESS;
 }
+
+extern int slurm_ckpt_stepd_prefork(void *slurmd_job)
+{
+	return SLURM_SUCCESS;
+}
+
+extern int slurm_ckpt_signal_tasks(void *slurmd_job)
+{
+	/* send SIGCKPT to all tasks */
+	return killpg(((slurmd_job_t *)slurmd_job)->pgid, SIGCKPT);
+}
+
+extern int slurm_ckpt_restart_task(void *slurmd_job, char *image_dir, int gtid)
+{
+	char buf[256];
+	
+	if (snprintf(buf, sizeof(buf), "%s/task.%d.ckpt", image_dir, gtid) >= sizeof(buf)) {
+		error("slurm buffer size too small");
+		return SLURM_FAILURE;
+	}
+	/* restart the task and update its environment */
+#if 0
+	restart(buf, ((slurmd_job_t *)slurmd_job)->env);
+#endif
+
+	error("restart() failed: rank=%d, file=%s: %m", gtid, buf);
+	return SLURM_FAILURE;
+}
diff --git a/src/plugins/crypto/Makefile.in b/src/plugins/crypto/Makefile.in
index 9145fcfaa..6b37a5fd3 100644
--- a/src/plugins/crypto/Makefile.in
+++ b/src/plugins/crypto/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/crypto/munge/Makefile.in b/src/plugins/crypto/munge/Makefile.in
index 9ab861212..443a7afd6 100644
--- a/src/plugins/crypto/munge/Makefile.in
+++ b/src/plugins/crypto/munge/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -111,6 +115,10 @@ 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@
diff --git a/src/plugins/crypto/munge/crypto_munge.c b/src/plugins/crypto/munge/crypto_munge.c
index 1f9e0df5c..2021d6cd5 100644
--- a/src/plugins/crypto/munge/crypto_munge.c
+++ b/src/plugins/crypto/munge/crypto_munge.c
@@ -2,12 +2,14 @@
  *  crypto_munge.c - Munge based cryptographic signature plugin
  *****************************************************************************
  *  Copyright (C) 2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark A. Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -94,7 +96,17 @@ const char plugin_name[]        = "Munge cryptographic signature plugin";
 const char plugin_type[]        = "crypto/munge";
 const uint32_t plugin_version   = 90;
 
-static munge_err_t munge_err;
+
+/*
+ *  Error codes local to this plugin:
+ */
+enum local_error_code {
+	ESIG_BUF_DATA_MISMATCH = 5000,
+	ESIG_BUF_SIZE_MISMATCH,
+	ESIG_BAD_USERID,
+};
+
+static uid_t slurm_user = 0;
 
 /*
  * init() is called when the plugin is loaded, before any other functions
@@ -126,102 +138,122 @@ crypto_destroy_key(void *key)
 extern void *
 crypto_read_private_key(const char *path)
 {
-	return (void *) munge_ctx_create();
-}
+	munge_ctx_t ctx;
+	munge_err_t err;
+
+	if ((ctx = munge_ctx_create()) == NULL) {
+		error ("crypto_read_private_key: munge_ctx_create failed");
+		return (NULL);
+	}
+
+	/*
+	 *   Only allow slurmd_user (usually root) to decode job
+	 *   credentials created by
+	 *   slurmctld. This provides a slight layer of extra security,
+	 *   as non-privileged users cannot get at the contents of job
+	 *   credentials.
+	 */
+	err = munge_ctx_set(ctx, MUNGE_OPT_UID_RESTRICTION, 
+			    slurm_get_slurmd_user_id());
+
+	if (err != EMUNGE_SUCCESS) {
+		error("Unable to set uid restriction on munge credentials: %s",
+		      munge_ctx_strerror (ctx));
+		munge_ctx_destroy(ctx);
+		return(NULL);
+	}
 
+	return ((void *) ctx);
+}
 
 extern void *
 crypto_read_public_key(const char *path)
 {
+	/*
+	 * Get slurm user id once. We use it later to verify credentials.
+	 */
+	slurm_user = slurm_get_slurm_user_id();
+
 	return (void *) munge_ctx_create();
 }
 
-extern char *
-crypto_str_error(void)
+extern const char *
+crypto_str_error(int errnum)
 {
-	return (char *) munge_strerror(munge_err); 
+	if (errnum == ESIG_BUF_DATA_MISMATCH)
+		return "Credential data mismatch";
+	else if (errnum == ESIG_BUF_SIZE_MISMATCH)
+		return "Credential data size mismatch";
+	else if (errnum == ESIG_BAD_USERID)
+		return "Credential created by invalid user";
+	else
+		return munge_strerror ((munge_err_t) errnum);
 }
 
 /* NOTE: Caller must xfree the signature returned by sig_pp */
 extern int
 crypto_sign(void * key, char *buffer, int buf_size, char **sig_pp, 
-		unsigned int *sig_size_p) 
+	    unsigned int *sig_size_p) 
 {
 	char *cred;
+	munge_err_t err;
 
-	munge_err = munge_encode(&cred, (munge_ctx_t) key,
-				 buffer, buf_size);
+	err = munge_encode(&cred, (munge_ctx_t) key,
+			   buffer, buf_size);
 
-	if (munge_err != EMUNGE_SUCCESS)
-		return SLURM_ERROR;
+	if (err != EMUNGE_SUCCESS)
+		return err;
 
 	*sig_size_p = strlen(cred) + 1;
 	*sig_pp = xstrdup(cred);
 	free(cred); 
-	return SLURM_SUCCESS;
+	return 0;
 }
 
 extern int
 crypto_verify_sign(void * key, char *buffer, unsigned int buf_size, 
-		char *signature, unsigned int sig_size)
+		   char *signature, unsigned int sig_size)
 {
-	static uid_t slurm_user = 0;
-	static int got_slurm_user = 0;
 	uid_t uid;
 	gid_t gid;
 	void *buf_out;
 	int   buf_out_size;
+	int   rc = 0;
+	munge_err_t err;
 
-	munge_err = munge_decode(signature, (munge_ctx_t) key,
-				 &buf_out, &buf_out_size, 
-				 &uid, &gid);
+	err = munge_decode(signature, (munge_ctx_t) key,
+			   &buf_out, &buf_out_size, 
+			   &uid, &gid);
 
-	if (munge_err != EMUNGE_SUCCESS) {
+	if (err != EMUNGE_SUCCESS) {
 #ifdef MULTIPLE_SLURMD
 		/* In multple slurmd mode this will happen all the
 		 * time since we are authenticating with the same
 		 * munged.
 		 */
-		if (munge_err != EMUNGE_CRED_REPLAYED) {
-			return SLURM_ERROR;
+		if (err != EMUNGE_CRED_REPLAYED) {
+			return err;
 		} else {
 			debug2("We had a replayed crypto, "
 			       "but this is expected in multiple "
 			       "slurmd mode.");
-			munge_err = 0;
 		}
 #else
-		return SLURM_ERROR;
+		return err;
 #endif
 	}
 
-	if (!got_slurm_user) {
-		slurm_user = slurm_get_slurm_user_id();
-		got_slurm_user = 1;
-	}
 
 	if ((uid != slurm_user) && (uid != 0)) {
-		error("crypto/munge: bad user id (%d != %d)", 
-			(int) slurm_user, (int) uid);
-		munge_err = EMUNGE_CRED_UNAUTHORIZED;
-		free(buf_out);
-		return SLURM_ERROR;
-	}
-
-	if (buf_size != buf_out_size) {
-		error("crypto/munge: buf_size bad");
-		munge_err = EMUNGE_CRED_INVALID;
-		free(buf_out);
-		return SLURM_ERROR;
-	}
-
-	if (memcmp(buffer, buf_out, buf_size)) {
-		error("crypto/munge: buffers different");
-		munge_err = EMUNGE_CRED_INVALID;
-		free(buf_out);
-		return SLURM_ERROR;
+		error("crypto/munge: Unexpected uid (%d) != SLURM uid (%d)",
+		      (int) uid, (int) slurm_user);
+		rc = ESIG_BAD_USERID;
 	}
+	else if (buf_size != buf_out_size)
+		rc = ESIG_BUF_SIZE_MISMATCH;
+	else if (memcmp(buffer, buf_out, buf_size))
+		rc = ESIG_BUF_DATA_MISMATCH;
 
 	free(buf_out);
-	return SLURM_SUCCESS;
+	return rc;
 }
diff --git a/src/plugins/crypto/openssl/Makefile.in b/src/plugins/crypto/openssl/Makefile.in
index 957c0746f..27290006e 100644
--- a/src/plugins/crypto/openssl/Makefile.in
+++ b/src/plugins/crypto/openssl/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -116,6 +120,10 @@ 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@
diff --git a/src/plugins/crypto/openssl/crypto_openssl.c b/src/plugins/crypto/openssl/crypto_openssl.c
index a6ab7c8de..6d0e5c33e 100644
--- a/src/plugins/crypto/openssl/crypto_openssl.c
+++ b/src/plugins/crypto/openssl/crypto_openssl.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark A. Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -162,8 +163,8 @@ crypto_read_public_key(const char *path)
 	return (void *) pk;
 }
 
-extern char *
-crypto_str_error(void)
+extern const char *
+crypto_str_error(int errnum)
 {
 	static int loaded = 0;
 
diff --git a/src/plugins/jobacct_gather/Makefile.in b/src/plugins/jobacct_gather/Makefile.in
index 575ea7ad6..0cc8a1f86 100644
--- a/src/plugins/jobacct_gather/Makefile.in
+++ b/src/plugins/jobacct_gather/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/jobacct_gather/aix/Makefile.in b/src/plugins/jobacct_gather/aix/Makefile.in
index 2618af22a..7a9cb5ce9 100644
--- a/src/plugins/jobacct_gather/aix/Makefile.in
+++ b/src/plugins/jobacct_gather/aix/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/jobacct_gather/aix/jobacct_gather_aix.c b/src/plugins/jobacct_gather/aix/jobacct_gather_aix.c
index 2abb0afd2..ab461450d 100644
--- a/src/plugins/jobacct_gather/aix/jobacct_gather_aix.c
+++ b/src/plugins/jobacct_gather/aix/jobacct_gather_aix.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *  Written by Andy Riebs, <andy.riebs@hp.com>, who borrowed heavily
  *  from other parts of SLURM, and Danny Auble, <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/jobacct_gather/linux/Makefile.in b/src/plugins/jobacct_gather/linux/Makefile.in
index 88e4b0cdc..420acc4c2 100644
--- a/src/plugins/jobacct_gather/linux/Makefile.in
+++ b/src/plugins/jobacct_gather/linux/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -111,6 +115,10 @@ 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@
diff --git a/src/plugins/jobacct_gather/linux/jobacct_gather_linux.c b/src/plugins/jobacct_gather/linux/jobacct_gather_linux.c
index ba5abdc50..bfd0a22c7 100644
--- a/src/plugins/jobacct_gather/linux/jobacct_gather_linux.c
+++ b/src/plugins/jobacct_gather/linux/jobacct_gather_linux.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *  Written by Andy Riebs, <andy.riebs@hp.com>, who borrowed heavily
  *  from other parts of SLURM, and Danny Auble, <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/jobacct_gather/none/Makefile.in b/src/plugins/jobacct_gather/none/Makefile.in
index fb0ecbc42..1f301a82c 100644
--- a/src/plugins/jobacct_gather/none/Makefile.in
+++ b/src/plugins/jobacct_gather/none/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/jobacct_gather/none/jobacct_gather_none.c b/src/plugins/jobacct_gather/none/jobacct_gather_none.c
index 48df0bf2d..16afda5a0 100644
--- a/src/plugins/jobacct_gather/none/jobacct_gather_none.c
+++ b/src/plugins/jobacct_gather/none/jobacct_gather_none.c
@@ -4,10 +4,11 @@
  *
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *  Written by Andy Riebs, <andy.riebs@hp.com>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/jobcomp/Makefile.in b/src/plugins/jobcomp/Makefile.in
index 35743b775..48317d2b4 100644
--- a/src/plugins/jobcomp/Makefile.in
+++ b/src/plugins/jobcomp/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/jobcomp/filetxt/Makefile.in b/src/plugins/jobcomp/filetxt/Makefile.in
index 1615d81b0..9c9e40903 100644
--- a/src/plugins/jobcomp/filetxt/Makefile.in
+++ b/src/plugins/jobcomp/filetxt/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -110,6 +114,10 @@ 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@
diff --git a/src/plugins/jobcomp/filetxt/filetxt_jobcomp_process.c b/src/plugins/jobcomp/filetxt/filetxt_jobcomp_process.c
index 1a5048f1e..3a4b17450 100644
--- a/src/plugins/jobcomp/filetxt/filetxt_jobcomp_process.c
+++ b/src/plugins/jobcomp/filetxt/filetxt_jobcomp_process.c
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/jobcomp/filetxt/filetxt_jobcomp_process.h b/src/plugins/jobcomp/filetxt/filetxt_jobcomp_process.h
index 178e85efb..3d2c54380 100644
--- a/src/plugins/jobcomp/filetxt/filetxt_jobcomp_process.h
+++ b/src/plugins/jobcomp/filetxt/filetxt_jobcomp_process.h
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c b/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c
index 56b145c4d..b1cde9af7 100644
--- a/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c
+++ b/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2003 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -92,7 +93,8 @@ const char plugin_type[]       	= "jobcomp/filetxt";
 const uint32_t plugin_version	= 100;
 
 #define JOB_FORMAT "JobId=%lu UserId=%s(%lu) GroupId=%s(%lu) Name=%s JobState=%s Partition=%s "\
-		"TimeLimit=%s StartTime=%s EndTime=%s NodeList=%s NodeCnt=%u ProcCnt=%u %s\n"
+		"TimeLimit=%s StartTime=%s EndTime=%s NodeList=%s NodeCnt=%u ProcCnt=%u "\
+		"WorkDir=%s %s\n"
  
 /* Type for error string table entries */
 typedef struct {
@@ -245,7 +247,7 @@ extern int slurm_jobcomp_log_record ( struct job_record *job_ptr )
 	int rc = SLURM_SUCCESS;
 	char job_rec[1024];
 	char usr_str[32], grp_str[32], start_str[32], end_str[32], lim_str[32];
-	char select_buf[128];
+	char select_buf[128], *work_dir;
 	size_t offset = 0, tot_size, wrote;
 	enum job_states job_state;
 
@@ -271,6 +273,11 @@ extern int slurm_jobcomp_log_record ( struct job_record *job_ptr )
 	_make_time_str(&(job_ptr->start_time), start_str, sizeof(start_str));
 	_make_time_str(&(job_ptr->end_time), end_str, sizeof(end_str));
 
+	if (job_ptr->details && job_ptr->details->work_dir)
+		work_dir = job_ptr->details->work_dir;
+	else
+		work_dir = "unknown";
+
 	select_g_sprint_jobinfo(job_ptr->select_jobinfo,
 		select_buf, sizeof(select_buf), SELECT_PRINT_MIXED);
 
@@ -281,7 +288,7 @@ extern int slurm_jobcomp_log_record ( struct job_record *job_ptr )
 		 job_state_string(job_state), 
 		 job_ptr->partition, lim_str, start_str, 
 		 end_str, job_ptr->nodes, job_ptr->node_cnt,
-		 job_ptr->total_procs,
+		 job_ptr->total_procs, work_dir,
 		 select_buf);
 	tot_size = strlen(job_rec);
 
diff --git a/src/plugins/jobcomp/mysql/Makefile.am b/src/plugins/jobcomp/mysql/Makefile.am
index 44da93ece..5b01a39a9 100644
--- a/src/plugins/jobcomp/mysql/Makefile.am
+++ b/src/plugins/jobcomp/mysql/Makefile.am
@@ -6,6 +6,7 @@ PLUGIN_FLAGS = -module -avoid-version --export-dynamic
 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
 
+if WITH_MYSQL
 pkglib_LTLIBRARIES = jobcomp_mysql.la
 
 # Mysql storage plugin.
@@ -16,4 +17,7 @@ jobcomp_mysql_la_CFLAGS = $(MYSQL_CFLAGS)
 jobcomp_mysql_la_LIBADD  = $(top_builddir)/src/database/libslurm_mysql.la \
 	$(MYSQL_LIBS)
 jobcomp_mysql_la_DEPENDENCIES = $(top_builddir)/src/database/libslurm_mysql.la
-
+else
+EXTRA_jobcomp_mysql_la_SOURCES = jobcomp_mysql.c \
+		mysql_jobcomp_process.c mysql_jobcomp_process.h
+endif
diff --git a/src/plugins/jobcomp/mysql/Makefile.in b/src/plugins/jobcomp/mysql/Makefile.in
index d60d778c9..ae76368d2 100644
--- a/src/plugins/jobcomp/mysql/Makefile.in
+++ b/src/plugins/jobcomp/mysql/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,12 +81,18 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)"
 pkglibLTLIBRARIES_INSTALL = $(INSTALL)
 LTLIBRARIES = $(pkglib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-am_jobcomp_mysql_la_OBJECTS = jobcomp_mysql_la-jobcomp_mysql.lo \
-	jobcomp_mysql_la-mysql_jobcomp_process.lo
+am__jobcomp_mysql_la_SOURCES_DIST = jobcomp_mysql.c \
+	mysql_jobcomp_process.c mysql_jobcomp_process.h
+@WITH_MYSQL_TRUE@am_jobcomp_mysql_la_OBJECTS =  \
+@WITH_MYSQL_TRUE@	jobcomp_mysql_la-jobcomp_mysql.lo \
+@WITH_MYSQL_TRUE@	jobcomp_mysql_la-mysql_jobcomp_process.lo
+am__EXTRA_jobcomp_mysql_la_SOURCES_DIST = jobcomp_mysql.c \
+	mysql_jobcomp_process.c mysql_jobcomp_process.h
 jobcomp_mysql_la_OBJECTS = $(am_jobcomp_mysql_la_OBJECTS)
 jobcomp_mysql_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(jobcomp_mysql_la_CFLAGS) \
 	$(CFLAGS) $(jobcomp_mysql_la_LDFLAGS) $(LDFLAGS) -o $@
+@WITH_MYSQL_TRUE@am_jobcomp_mysql_la_rpath = -rpath $(pkglibdir)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
 depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
 am__depfiles_maybe = depfiles
@@ -95,8 +105,10 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(jobcomp_mysql_la_SOURCES)
-DIST_SOURCES = $(jobcomp_mysql_la_SOURCES)
+SOURCES = $(jobcomp_mysql_la_SOURCES) \
+	$(EXTRA_jobcomp_mysql_la_SOURCES)
+DIST_SOURCES = $(am__jobcomp_mysql_la_SOURCES_DIST) \
+	$(am__EXTRA_jobcomp_mysql_la_SOURCES_DIST)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -110,6 +122,10 @@ 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@
@@ -272,18 +288,21 @@ top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 PLUGIN_FLAGS = -module -avoid-version --export-dynamic
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
-pkglib_LTLIBRARIES = jobcomp_mysql.la
+@WITH_MYSQL_TRUE@pkglib_LTLIBRARIES = jobcomp_mysql.la
 
 # Mysql storage plugin.
-jobcomp_mysql_la_SOURCES = jobcomp_mysql.c \
-			mysql_jobcomp_process.c mysql_jobcomp_process.h
+@WITH_MYSQL_TRUE@jobcomp_mysql_la_SOURCES = jobcomp_mysql.c \
+@WITH_MYSQL_TRUE@			mysql_jobcomp_process.c mysql_jobcomp_process.h
 
-jobcomp_mysql_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
-jobcomp_mysql_la_CFLAGS = $(MYSQL_CFLAGS)
-jobcomp_mysql_la_LIBADD = $(top_builddir)/src/database/libslurm_mysql.la \
-	$(MYSQL_LIBS)
+@WITH_MYSQL_TRUE@jobcomp_mysql_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+@WITH_MYSQL_TRUE@jobcomp_mysql_la_CFLAGS = $(MYSQL_CFLAGS)
+@WITH_MYSQL_TRUE@jobcomp_mysql_la_LIBADD = $(top_builddir)/src/database/libslurm_mysql.la \
+@WITH_MYSQL_TRUE@	$(MYSQL_LIBS)
+
+@WITH_MYSQL_TRUE@jobcomp_mysql_la_DEPENDENCIES = $(top_builddir)/src/database/libslurm_mysql.la
+@WITH_MYSQL_FALSE@EXTRA_jobcomp_mysql_la_SOURCES = jobcomp_mysql.c \
+@WITH_MYSQL_FALSE@		mysql_jobcomp_process.c mysql_jobcomp_process.h
 
-jobcomp_mysql_la_DEPENDENCIES = $(top_builddir)/src/database/libslurm_mysql.la
 all: all-am
 
 .SUFFIXES:
@@ -345,7 +364,7 @@ clean-pkglibLTLIBRARIES:
 	  rm -f "$${dir}/so_locations"; \
 	done
 jobcomp_mysql.la: $(jobcomp_mysql_la_OBJECTS) $(jobcomp_mysql_la_DEPENDENCIES) 
-	$(jobcomp_mysql_la_LINK) -rpath $(pkglibdir) $(jobcomp_mysql_la_OBJECTS) $(jobcomp_mysql_la_LIBADD) $(LIBS)
+	$(jobcomp_mysql_la_LINK) $(am_jobcomp_mysql_la_rpath) $(jobcomp_mysql_la_OBJECTS) $(jobcomp_mysql_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
diff --git a/src/plugins/jobcomp/mysql/jobcomp_mysql.c b/src/plugins/jobcomp/mysql/jobcomp_mysql.c
index bb61175ee..753255c9d 100644
--- a/src/plugins/jobcomp/mysql/jobcomp_mysql.c
+++ b/src/plugins/jobcomp/mysql/jobcomp_mysql.c
@@ -4,11 +4,13 @@
  *  $Id: storage_mysql.c 10893 2007-01-29 21:53:48Z da $
  *****************************************************************************
  *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -77,9 +79,6 @@ const char plugin_name[] = "Job completion MYSQL plugin";
 const char plugin_type[] = "jobcomp/mysql";
 const uint32_t plugin_version = 100;
 
-#ifdef HAVE_MYSQL
-
-#define DEFAULT_JOBCOMP_DB "slurm_jobcomp_db"
 
 MYSQL *jobcomp_mysql_db = NULL;
 
@@ -97,12 +96,12 @@ storage_field_t jobcomp_table_fields[] = {
 	{ "starttime", "int unsigned default 0 not null" }, 
 	{ "endtime", "int unsigned default 0 not null" },
 	{ "nodelist", "text" }, 
-	{ "nodecnt", "mediumint unsigned not null" },
-	{ "proc_cnt", "mediumint unsigned not null" },
+	{ "nodecnt", "int unsigned not null" },
+	{ "proc_cnt", "int unsigned not null" },
 	{ "connect_type", "tinytext" },
 	{ "reboot", "tinytext" },
 	{ "rotate", "tinytext" },
-	{ "maxprocs", "mediumint unsigned default 0 not null" },
+	{ "maxprocs", "int unsigned default 0 not null" },
 	{ "geometry", "tinytext" },
 	{ "start", "tinytext" },
 	{ "blockid", "tinytext" },
@@ -133,7 +132,7 @@ static mysql_db_info_t *_mysql_jobcomp_create_db_info()
 	mysql_db_info_t *db_info = xmalloc(sizeof(mysql_db_info_t));
 	db_info->port = slurm_get_jobcomp_port();
 	if(!db_info->port) {
-		db_info->port = 3306;
+		db_info->port = DEFAULT_MYSQL_PORT;
 		slurm_set_jobcomp_port(db_info->port);
 	}
 	db_info->host = slurm_get_jobcomp_host();	
@@ -209,7 +208,6 @@ static char *_lookup_slurm_api_errtab(int errnum)
 	}
 	return res;
 }
-#endif
 
 /*
  * init() is called when the plugin is loaded, before any other functions
@@ -218,11 +216,7 @@ static char *_lookup_slurm_api_errtab(int errnum)
 extern int init ( void )
 {
 	static int first = 1;
-#ifndef HAVE_MYSQL
-	fatal("No MySQL storage was found on the machine. "
-	      "Please check the config.log from the run of configure "
-	      "and run again.");	
-#endif
+
 	if(first) {
 		/* since this can be loaded from many different places
 		   only tell us once. */
@@ -237,20 +231,15 @@ extern int init ( void )
 
 extern int fini ( void )
 {
-#ifdef HAVE_MYSQL
 	if (jobcomp_mysql_db) {
 		mysql_close(jobcomp_mysql_db);
 		jobcomp_mysql_db = NULL;
 	}
 	return SLURM_SUCCESS;
-#else
-	return SLURM_ERROR;
-#endif 
 }
 
 extern int slurm_jobcomp_set_location(char *location)
 {
-#ifdef HAVE_MYSQL
 	mysql_db_info_t *db_info = _mysql_jobcomp_create_db_info();
 	int rc = SLURM_SUCCESS;
 	char *db_name = NULL;
@@ -260,19 +249,19 @@ extern int slurm_jobcomp_set_location(char *location)
 		return SLURM_SUCCESS;
 	
 	if(!location)
-		db_name = DEFAULT_JOBCOMP_DB;
+		db_name = DEFAULT_JOB_COMP_DB;
 	else {
 		while(location[i]) {
 			if(location[i] == '.' || location[i] == '/') {
 				debug("%s doesn't look like a database "
 				      "name using %s",
-				      location, DEFAULT_JOBCOMP_DB);
+				      location, DEFAULT_JOB_COMP_DB);
 				break;
 			}
 			i++;
 		}
 		if(location[i]) 
-			db_name = DEFAULT_JOBCOMP_DB;
+			db_name = DEFAULT_JOB_COMP_DB;
 		else
 			db_name = location;
 	}
@@ -290,14 +279,10 @@ extern int slurm_jobcomp_set_location(char *location)
 	else
 		debug("Jobcomp database init failed");
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif 
 }
 
 extern int slurm_jobcomp_log_record(struct job_record *job_ptr)
 {
-#ifdef HAVE_MYSQL
 	int rc = SLURM_SUCCESS;
 	char *usr_str = NULL, *grp_str = NULL, lim_str[32];
 	char *connect_type = NULL, *reboot = NULL, *rotate = NULL,
@@ -340,9 +325,13 @@ extern int slurm_jobcomp_log_record(struct job_record *job_ptr)
 					    SELECT_PRINT_GEOMETRY);
 	start = select_g_xstrdup_jobinfo(job_ptr->select_jobinfo,
 					 SELECT_PRINT_START);
+#ifdef HAVE_BG
 	blockid = select_g_xstrdup_jobinfo(job_ptr->select_jobinfo,
 					   SELECT_PRINT_BG_ID);
-
+#else
+	blockid = select_g_xstrdup_jobinfo(job_ptr->select_jobinfo,
+					   SELECT_PRINT_RESV_ID);
+#endif
 	query = xstrdup_printf(
 		"insert into %s (jobid, uid, user_name, gid, group_name, "
 		"name, state, proc_cnt, partition, timelimit, "
@@ -411,28 +400,17 @@ extern int slurm_jobcomp_log_record(struct job_record *job_ptr)
 	xfree(grp_str);
 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif 
 }
 
 extern int slurm_jobcomp_get_errno(void)
 {
-#ifdef HAVE_MYSQL
 	return plugin_errno;
-#else
-	return SLURM_ERROR;
-#endif 
 }
 
 extern char *slurm_jobcomp_strerror(int errnum)
 {
-#ifdef HAVE_MYSQL
 	char *res = _lookup_slurm_api_errtab(errnum);
 	return (res ? res : strerror(errnum));
-#else
-	return NULL;
-#endif 
 }
 
 /* 
@@ -444,7 +422,6 @@ extern List slurm_jobcomp_get_jobs(acct_job_cond_t *job_cond)
 {
 	List job_list = NULL;
 				   
-#ifdef HAVE_MYSQL
 	if(!jobcomp_mysql_db || mysql_ping(jobcomp_mysql_db) != 0) {
 		char *loc = slurm_get_jobcomp_loc();
 		if(slurm_jobcomp_set_location(loc) == SLURM_ERROR) {
@@ -455,7 +432,7 @@ extern List slurm_jobcomp_get_jobs(acct_job_cond_t *job_cond)
 	}
 
 	job_list = mysql_jobcomp_process_get_jobs(job_cond);	
-#endif 
+
 	return job_list;
 }
 
@@ -464,7 +441,6 @@ extern List slurm_jobcomp_get_jobs(acct_job_cond_t *job_cond)
  */
 extern int slurm_jobcomp_archive(acct_archive_cond_t *arch_cond)
 {
-#ifdef HAVE_MYSQL
 	if(!jobcomp_mysql_db || mysql_ping(jobcomp_mysql_db) != 0) {
 		char *loc = slurm_get_jobcomp_loc();
 		if(slurm_jobcomp_set_location(loc) == SLURM_ERROR) {
@@ -475,6 +451,4 @@ extern int slurm_jobcomp_archive(acct_archive_cond_t *arch_cond)
 	}
 
 	return mysql_jobcomp_process_archive(arch_cond);
-#endif 
-	return SLURM_ERROR;
 }
diff --git a/src/plugins/jobcomp/mysql/mysql_jobcomp_process.c b/src/plugins/jobcomp/mysql/mysql_jobcomp_process.c
index 19ca5945d..37b6ce03e 100644
--- a/src/plugins/jobcomp/mysql/mysql_jobcomp_process.c
+++ b/src/plugins/jobcomp/mysql/mysql_jobcomp_process.c
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -45,7 +46,6 @@
 #include "src/common/xstring.h"
 #include "mysql_jobcomp_process.h"
 
-#ifdef HAVE_MYSQL
 static void _do_fdump(MYSQL_ROW row, int lc)
 {	
 	int i = 0;
@@ -209,5 +209,3 @@ extern int mysql_jobcomp_process_archive(acct_archive_cond_t *arch_cond)
 {
 	return SLURM_SUCCESS;
 }
-
-#endif	
diff --git a/src/plugins/jobcomp/mysql/mysql_jobcomp_process.h b/src/plugins/jobcomp/mysql/mysql_jobcomp_process.h
index d5d578edd..dcc017a04 100644
--- a/src/plugins/jobcomp/mysql/mysql_jobcomp_process.h
+++ b/src/plugins/jobcomp/mysql/mysql_jobcomp_process.h
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -48,7 +49,6 @@
 #include "src/common/jobacct_common.h"
 #include "src/common/slurm_accounting_storage.h"
 
-#ifdef HAVE_MYSQL
 extern MYSQL *jobcomp_mysql_db;
 extern int jobcomp_db_init;
 
@@ -85,6 +85,5 @@ enum {
 extern List mysql_jobcomp_process_get_jobs(acct_job_cond_t *job_cond);
 
 extern int mysql_jobcomp_process_archive(acct_archive_cond_t *arch_cond);
-#endif
 
 #endif
diff --git a/src/plugins/jobcomp/none/Makefile.in b/src/plugins/jobcomp/none/Makefile.in
index 96986c544..914ccca0a 100644
--- a/src/plugins/jobcomp/none/Makefile.in
+++ b/src/plugins/jobcomp/none/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/jobcomp/none/jobcomp_none.c b/src/plugins/jobcomp/none/jobcomp_none.c
index 9864098f6..304539726 100644
--- a/src/plugins/jobcomp/none/jobcomp_none.c
+++ b/src/plugins/jobcomp/none/jobcomp_none.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/jobcomp/pgsql/Makefile.am b/src/plugins/jobcomp/pgsql/Makefile.am
index ae90b1625..6c78796b9 100644
--- a/src/plugins/jobcomp/pgsql/Makefile.am
+++ b/src/plugins/jobcomp/pgsql/Makefile.am
@@ -7,6 +7,7 @@ PLUGIN_FLAGS = -module -avoid-version --export-dynamic
 
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
 
+if WITH_PGSQL
 pkglib_LTLIBRARIES = jobcomp_pgsql.la
 
 # Pgsql storage plugin.
@@ -17,3 +18,7 @@ jobcomp_pgsql_la_CFLAGS = $(PGSQL_CFLAGS)
 jobcomp_pgsql_la_LIBADD  = $(top_builddir)/src/database/libslurm_pgsql.la \
 	$(PGSQL_LIBS)
 jobcomp_pgsql_la_DEPENDENCIES = $(top_builddir)/src/database/libslurm_pgsql.la
+else
+EXTRA_jobcomp_pgsql_la_SOURCES = jobcomp_pgsql.c \
+		pgsql_jobcomp_process.c pgsql_jobcomp_process.h
+endif
diff --git a/src/plugins/jobcomp/pgsql/Makefile.in b/src/plugins/jobcomp/pgsql/Makefile.in
index 5e80c2612..22e3ac79a 100644
--- a/src/plugins/jobcomp/pgsql/Makefile.in
+++ b/src/plugins/jobcomp/pgsql/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,12 +81,18 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)"
 pkglibLTLIBRARIES_INSTALL = $(INSTALL)
 LTLIBRARIES = $(pkglib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-am_jobcomp_pgsql_la_OBJECTS = jobcomp_pgsql_la-jobcomp_pgsql.lo \
-	jobcomp_pgsql_la-pgsql_jobcomp_process.lo
+am__jobcomp_pgsql_la_SOURCES_DIST = jobcomp_pgsql.c \
+	pgsql_jobcomp_process.c pgsql_jobcomp_process.h
+@WITH_PGSQL_TRUE@am_jobcomp_pgsql_la_OBJECTS =  \
+@WITH_PGSQL_TRUE@	jobcomp_pgsql_la-jobcomp_pgsql.lo \
+@WITH_PGSQL_TRUE@	jobcomp_pgsql_la-pgsql_jobcomp_process.lo
+am__EXTRA_jobcomp_pgsql_la_SOURCES_DIST = jobcomp_pgsql.c \
+	pgsql_jobcomp_process.c pgsql_jobcomp_process.h
 jobcomp_pgsql_la_OBJECTS = $(am_jobcomp_pgsql_la_OBJECTS)
 jobcomp_pgsql_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(jobcomp_pgsql_la_CFLAGS) \
 	$(CFLAGS) $(jobcomp_pgsql_la_LDFLAGS) $(LDFLAGS) -o $@
+@WITH_PGSQL_TRUE@am_jobcomp_pgsql_la_rpath = -rpath $(pkglibdir)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
 depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
 am__depfiles_maybe = depfiles
@@ -95,8 +105,10 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(jobcomp_pgsql_la_SOURCES)
-DIST_SOURCES = $(jobcomp_pgsql_la_SOURCES)
+SOURCES = $(jobcomp_pgsql_la_SOURCES) \
+	$(EXTRA_jobcomp_pgsql_la_SOURCES)
+DIST_SOURCES = $(am__jobcomp_pgsql_la_SOURCES_DIST) \
+	$(am__EXTRA_jobcomp_pgsql_la_SOURCES_DIST)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -110,6 +122,10 @@ 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@
@@ -272,18 +288,21 @@ top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 PLUGIN_FLAGS = -module -avoid-version --export-dynamic
 INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
-pkglib_LTLIBRARIES = jobcomp_pgsql.la
+@WITH_PGSQL_TRUE@pkglib_LTLIBRARIES = jobcomp_pgsql.la
 
 # Pgsql storage plugin.
-jobcomp_pgsql_la_SOURCES = jobcomp_pgsql.c \
-			pgsql_jobcomp_process.c pgsql_jobcomp_process.h
+@WITH_PGSQL_TRUE@jobcomp_pgsql_la_SOURCES = jobcomp_pgsql.c \
+@WITH_PGSQL_TRUE@			pgsql_jobcomp_process.c pgsql_jobcomp_process.h
 
-jobcomp_pgsql_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
-jobcomp_pgsql_la_CFLAGS = $(PGSQL_CFLAGS)
-jobcomp_pgsql_la_LIBADD = $(top_builddir)/src/database/libslurm_pgsql.la \
-	$(PGSQL_LIBS)
+@WITH_PGSQL_TRUE@jobcomp_pgsql_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+@WITH_PGSQL_TRUE@jobcomp_pgsql_la_CFLAGS = $(PGSQL_CFLAGS)
+@WITH_PGSQL_TRUE@jobcomp_pgsql_la_LIBADD = $(top_builddir)/src/database/libslurm_pgsql.la \
+@WITH_PGSQL_TRUE@	$(PGSQL_LIBS)
+
+@WITH_PGSQL_TRUE@jobcomp_pgsql_la_DEPENDENCIES = $(top_builddir)/src/database/libslurm_pgsql.la
+@WITH_PGSQL_FALSE@EXTRA_jobcomp_pgsql_la_SOURCES = jobcomp_pgsql.c \
+@WITH_PGSQL_FALSE@		pgsql_jobcomp_process.c pgsql_jobcomp_process.h
 
-jobcomp_pgsql_la_DEPENDENCIES = $(top_builddir)/src/database/libslurm_pgsql.la
 all: all-am
 
 .SUFFIXES:
@@ -345,7 +364,7 @@ clean-pkglibLTLIBRARIES:
 	  rm -f "$${dir}/so_locations"; \
 	done
 jobcomp_pgsql.la: $(jobcomp_pgsql_la_OBJECTS) $(jobcomp_pgsql_la_DEPENDENCIES) 
-	$(jobcomp_pgsql_la_LINK) -rpath $(pkglibdir) $(jobcomp_pgsql_la_OBJECTS) $(jobcomp_pgsql_la_LIBADD) $(LIBS)
+	$(jobcomp_pgsql_la_LINK) $(am_jobcomp_pgsql_la_rpath) $(jobcomp_pgsql_la_OBJECTS) $(jobcomp_pgsql_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
diff --git a/src/plugins/jobcomp/pgsql/jobcomp_pgsql.c b/src/plugins/jobcomp/pgsql/jobcomp_pgsql.c
index 979e75cf5..6ae020c28 100644
--- a/src/plugins/jobcomp/pgsql/jobcomp_pgsql.c
+++ b/src/plugins/jobcomp/pgsql/jobcomp_pgsql.c
@@ -4,11 +4,13 @@
  *  $Id: storage_pgsql.c 10893 2007-01-29 21:53:48Z da $
  *****************************************************************************
  *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -77,10 +79,6 @@ const char plugin_name[] = "Job completion POSTGRESQL plugin";
 const char plugin_type[] = "jobcomp/pgsql";
 const uint32_t plugin_version = 100;
 
-#ifdef HAVE_PGSQL
-
-#define DEFAULT_JOBCOMP_DB "slurm_jobcomp_db"
-
 PGconn *jobcomp_pgsql_db = NULL;
 
 char *jobcomp_table = "jobcomp_table";
@@ -133,7 +131,7 @@ static pgsql_db_info_t *_pgsql_jobcomp_create_db_info()
 	/* it turns out it is better if using defaults to let postgres
 	   handle them on it's own terms */
 	if(!db_info->port) {
-		db_info->port = 5432;
+		db_info->port = DEFAULT_PGSQL_PORT;
 		slurm_set_jobcomp_port(db_info->port);
 	}
 	db_info->host = slurm_get_jobcomp_host();
@@ -232,7 +230,6 @@ static char *_lookup_slurm_api_errtab(int errnum)
 	}
 	return res;
 }
-#endif
 
 /*
  * init() is called when the plugin is loaded, before any other functions
@@ -241,11 +238,7 @@ static char *_lookup_slurm_api_errtab(int errnum)
 extern int init ( void )
 {
 	static int first = 1;
-#ifndef HAVE_PGSQL
-	fatal("No Postgresql storage was found on the machine. "
-	      "Please check the config.log from the run of configure "
-	      "and run again.");	
-#endif
+
 	if(first) {
 		/* since this can be loaded from many different places
 		   only tell us once. */
@@ -260,20 +253,15 @@ extern int init ( void )
 
 extern int fini ( void )
 {
-#ifdef HAVE_PGSQL
 	if (jobcomp_pgsql_db) {
 		PQfinish(jobcomp_pgsql_db);
 		jobcomp_pgsql_db = NULL;
 	}
 	return SLURM_SUCCESS;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int slurm_jobcomp_set_location(char *location)
 {
-#ifdef HAVE_PGSQL
 	pgsql_db_info_t *db_info = _pgsql_jobcomp_create_db_info();
 	int rc = SLURM_SUCCESS;
 	char *db_name = NULL;
@@ -283,19 +271,19 @@ extern int slurm_jobcomp_set_location(char *location)
 		return SLURM_SUCCESS;
 	
 	if(!location)
-		db_name = DEFAULT_JOBCOMP_DB;
+		db_name = DEFAULT_JOB_COMP_DB;
 	else {
 		while(location[i]) {
 			if(location[i] == '.' || location[i] == '/') {
 				debug("%s doesn't look like a database "
 				      "name using %s",
-				      location, DEFAULT_JOBCOMP_DB);
+				      location, DEFAULT_JOB_COMP_DB);
 				break;
 			}
 			i++;
 		}
 		if(location[i]) 
-			db_name = DEFAULT_JOBCOMP_DB;
+			db_name = DEFAULT_JOB_COMP_DB;
 		else
 			db_name = location;
 	}
@@ -313,14 +301,10 @@ extern int slurm_jobcomp_set_location(char *location)
 	else
 		debug("Jobcomp database init failed");
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif
 }
 
 extern int slurm_jobcomp_log_record(struct job_record *job_ptr)
 {
-#ifdef HAVE_PGSQL
 	int rc = SLURM_SUCCESS;
 	char *usr_str = NULL, *grp_str = NULL, lim_str[32];
 	char *connect_type = NULL, *reboot = NULL, *rotate = NULL,
@@ -363,9 +347,13 @@ extern int slurm_jobcomp_log_record(struct job_record *job_ptr)
 					    SELECT_PRINT_GEOMETRY);
 	start = select_g_xstrdup_jobinfo(job_ptr->select_jobinfo,
 					 SELECT_PRINT_START);
+#ifdef HAVE_BG
 	blockid = select_g_xstrdup_jobinfo(job_ptr->select_jobinfo,
 					   SELECT_PRINT_BG_ID);
-
+#else
+	blockid = select_g_xstrdup_jobinfo(job_ptr->select_jobinfo,
+					   SELECT_PRINT_RESV_ID);
+#endif
 	query = xstrdup_printf(
 		"insert into %s (jobid, uid, user_name, gid, group_name, "
 		"name, state, proc_cnt, partition, timelimit, "
@@ -435,28 +423,17 @@ extern int slurm_jobcomp_log_record(struct job_record *job_ptr)
 	xfree(usr_str);
 
 	return rc;
-#else
-	return SLURM_ERROR;
-#endif 
 }
 
 extern int slurm_jobcomp_get_errno()
 {
-#ifdef HAVE_PGSQL
 	return plugin_errno;
-#else
-	return SLURM_ERROR;
-#endif 
 }
 
 extern char *slurm_jobcomp_strerror(int errnum)
 {
-#ifdef HAVE_PGSQL
 	char *res = _lookup_slurm_api_errtab(errnum);
 	return (res ? res : strerror(errnum));
-#else
-	return NULL;
-#endif 
 }
 
 /* 
@@ -468,7 +445,6 @@ extern List slurm_jobcomp_get_jobs(acct_job_cond_t *job_cond)
 {
 	List job_list = NULL;
 
-#ifdef HAVE_PGSQL
 	if(!jobcomp_pgsql_db || PQstatus(jobcomp_pgsql_db) != CONNECTION_OK) {
 		char *loc = slurm_get_jobcomp_loc();
 		if(slurm_jobcomp_set_location(loc) == SLURM_ERROR) {
@@ -479,7 +455,7 @@ extern List slurm_jobcomp_get_jobs(acct_job_cond_t *job_cond)
 	}
 
 	job_list = pgsql_jobcomp_process_get_jobs(job_cond);	
-#endif 
+
 	return job_list;
 }
 
@@ -488,7 +464,6 @@ extern List slurm_jobcomp_get_jobs(acct_job_cond_t *job_cond)
  */
 extern int slurm_jobcomp_archive(acct_archive_cond_t *arch_cond)
 {
-#ifdef HAVE_PGSQL
 	if(!jobcomp_pgsql_db || PQstatus(jobcomp_pgsql_db) != CONNECTION_OK) {
 		char *loc = slurm_get_jobcomp_loc();
 		if(slurm_jobcomp_set_location(loc) == SLURM_ERROR) {
@@ -499,6 +474,4 @@ extern int slurm_jobcomp_archive(acct_archive_cond_t *arch_cond)
 	}
 
 	return pgsql_jobcomp_process_archive(arch_cond);
-#endif 
-	return SLURM_ERROR;
 }
diff --git a/src/plugins/jobcomp/pgsql/pgsql_jobcomp_process.c b/src/plugins/jobcomp/pgsql/pgsql_jobcomp_process.c
index babb42c98..ef93a4f51 100644
--- a/src/plugins/jobcomp/pgsql/pgsql_jobcomp_process.c
+++ b/src/plugins/jobcomp/pgsql/pgsql_jobcomp_process.c
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -45,7 +46,6 @@
 #include "src/common/xstring.h"
 #include "pgsql_jobcomp_process.h"
 
-#ifdef HAVE_PGSQL
 static void _do_fdump(PGresult *result, int lc)
 {
 	int i = 0;
@@ -224,5 +224,3 @@ extern int pgsql_jobcomp_process_archive(acct_archive_cond_t *arch_cond)
 {
 	return SLURM_SUCCESS;
 }
-
-#endif	
diff --git a/src/plugins/jobcomp/pgsql/pgsql_jobcomp_process.h b/src/plugins/jobcomp/pgsql/pgsql_jobcomp_process.h
index ffa8b4c70..124d32339 100644
--- a/src/plugins/jobcomp/pgsql/pgsql_jobcomp_process.h
+++ b/src/plugins/jobcomp/pgsql/pgsql_jobcomp_process.h
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -48,7 +49,6 @@
 #include "src/common/jobacct_common.h"
 #include "src/common/slurm_accounting_storage.h"
 
-#ifdef HAVE_PGSQL
 extern PGconn *jobcomp_pgsql_db;
 extern int jobcomp_db_init;
 
@@ -85,6 +85,5 @@ enum {
 extern List pgsql_jobcomp_process_get_jobs(acct_job_cond_t *job_cond);
 
 extern int pgsql_jobcomp_process_archive(acct_archive_cond_t *arch_cond);
-#endif
 
 #endif
diff --git a/src/plugins/jobcomp/script/Makefile.in b/src/plugins/jobcomp/script/Makefile.in
index abab766da..05c7e5f84 100644
--- a/src/plugins/jobcomp/script/Makefile.in
+++ b/src/plugins/jobcomp/script/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/jobcomp/script/jobcomp_script.c b/src/plugins/jobcomp/script/jobcomp_script.c
index 3767c6273..bf1fa21a1 100644
--- a/src/plugins/jobcomp/script/jobcomp_script.c
+++ b/src/plugins/jobcomp/script/jobcomp_script.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  jobcomp_script.c - Script running slurm job completion logging plugin.
- *  $Id: jobcomp_script.c 16035 2008-12-22 21:46:26Z da $
+ *  $Id: jobcomp_script.c 17214 2009-04-09 23:31:28Z jette $
  *****************************************************************************
  *  Produced at Center for High Performance Computing, North Dakota State
  *  University
  *  Written by Nathan Huff <nhuff@acm.org>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -34,6 +35,30 @@
  *  You should have received a copy of the GNU General Public License along
  *  with SLURM; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+ *****************************************************************************
+ *  Here is a list of the environment variables set
+ *
+ *  ACCOUNT		Account name
+ *  BATCH		"yes" if submitted via sbatch, "no" otherwise
+ *  END			Time of job termination, UTS
+ *  GID			Group ID of job owner
+ *  JOBID		SLURM Job ID
+ *  JOBNAME		Job name
+ *  JOBSTATE		Termination state of job (FIXME
+ *  NODECNT		Count of allocated nodes
+ *  NODES		List of allocated nodes
+ *  PARTITION		Partition name used to run job
+ *  PROCS		Count of allocated CPUs
+ *  START		Time of job start, UTS
+ *  SUBMIT		Time of job submission, UTS
+ *  UID			User ID of job owner
+ *  WORK_DIR		Job's working directory
+ *
+ *  BlueGene specific environment variables:
+ *  BLOCKID		Name of Block ID
+ *  CONNECT_TYPE	Connection type: small, torus or mesh
+ *  GEOMETRY		Requested geometry of the job, "#x#x#" where "#" 
+ *			represents the X, Y and Z dimension sizes
 \*****************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -159,13 +184,10 @@ struct jobcomp_info {
 	char *partition;
 	char *jobstate;
 	char *account;
+	char *work_dir;
 #ifdef HAVE_BG
 	char *connect_type;
-	char *reboot;
-	char *rotate;
-	char *maxprocs;
 	char *geometry;
-	char *block_start;
 	char *blockid;
 #endif
 };
@@ -198,19 +220,15 @@ static struct jobcomp_info * _jobcomp_info_create (struct job_record *job)
 	j->nprocs = job->total_procs;
 	j->nnodes = job->node_cnt;
 	j->account = job->account ? xstrdup (job->account) : NULL;
+	if (job->details && job->details->work_dir)
+		j->work_dir = xstrdup(job->details->work_dir);
+	else
+		j->work_dir = xstrdup("unknown");
 #ifdef HAVE_BG
 	j->connect_type = select_g_xstrdup_jobinfo(job->select_jobinfo,
 						   SELECT_PRINT_CONNECTION);
-	j->reboot = select_g_xstrdup_jobinfo(job->select_jobinfo,
-					     SELECT_PRINT_REBOOT);
-	j->rotate = select_g_xstrdup_jobinfo(job->select_jobinfo,
-					     SELECT_PRINT_ROTATE);
-	j->maxprocs = select_g_xstrdup_jobinfo(job->select_jobinfo,
-					       SELECT_PRINT_MAX_PROCS);
 	j->geometry = select_g_xstrdup_jobinfo(job->select_jobinfo,
 					       SELECT_PRINT_GEOMETRY);
-	j->block_start = select_g_xstrdup_jobinfo(job->select_jobinfo,
-						  SELECT_PRINT_START);
 	j->blockid = select_g_xstrdup_jobinfo(job->select_jobinfo,
 					      SELECT_PRINT_BG_ID);
 #endif
@@ -226,13 +244,10 @@ static void _jobcomp_info_destroy (struct jobcomp_info *j)
 	xfree (j->nodes);
 	xfree (j->jobstate);
 	xfree (j->account);
+	xfree (j->work_dir);
 #ifdef HAVE_BG
 	xfree (j->connect_type);
-	xfree (j->reboot);
-	xfree (j->rotate);
-	xfree (j->maxprocs);
 	xfree (j->geometry);
-	xfree (j->block_start);
 	xfree (j->blockid);
 #endif
 	xfree (j);
@@ -338,15 +353,12 @@ static char ** _create_environment (struct jobcomp_info *job)
 	_env_append (&env, "JOBNAME",   job->name);
 	_env_append (&env, "JOBSTATE",  job->jobstate);
 	_env_append (&env, "PARTITION", job->partition);
-	
+	_env_append (&env, "WORK_DIR",  job->work_dir);
+
 #ifdef HAVE_BG
+	_env_append (&env, "BLOCKID",      job->blockid);
 	_env_append (&env, "CONNECT_TYPE", job->connect_type);
-	_env_append (&env, "REBOOT",       job->reboot);
-	_env_append (&env, "ROTATE",       job->rotate);
-	_env_append (&env, "MAXPROCS",     job->maxprocs);
 	_env_append (&env, "GEOMETRY",     job->geometry);
-	_env_append (&env, "BLOCK_START",  job->block_start);
-	_env_append (&env, "BLOCKID",      job->blockid);
 #endif
 
 	if (job->limit == INFINITE)
diff --git a/src/plugins/mpi/Makefile.in b/src/plugins/mpi/Makefile.in
index e6e7b6a91..742968be4 100644
--- a/src/plugins/mpi/Makefile.in
+++ b/src/plugins/mpi/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/mpi/lam/Makefile.in b/src/plugins/mpi/lam/Makefile.in
index 6fcaab3c6..968515f09 100644
--- a/src/plugins/mpi/lam/Makefile.in
+++ b/src/plugins/mpi/lam/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/mpi/lam/lam.h b/src/plugins/mpi/lam/lam.h
index b09c0cbe8..1c20e4af7 100644
--- a/src/plugins/mpi/lam/lam.h
+++ b/src/plugins/mpi/lam/lam.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/mpi/lam/mpi_lam.c b/src/plugins/mpi/lam/mpi_lam.c
index c1d90bbcf..61d87ef32 100644
--- a/src/plugins/mpi/lam/mpi_lam.c
+++ b/src/plugins/mpi/lam/mpi_lam.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/mpi/mpich1_p4/Makefile.in b/src/plugins/mpi/mpich1_p4/Makefile.in
index c4e36b27c..b4fd87090 100644
--- a/src/plugins/mpi/mpich1_p4/Makefile.in
+++ b/src/plugins/mpi/mpich1_p4/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/mpi/mpich1_p4/mpich1_p4.c b/src/plugins/mpi/mpich1_p4/mpich1_p4.c
index 66303a9a2..c730112a1 100644
--- a/src/plugins/mpi/mpich1_p4/mpich1_p4.c
+++ b/src/plugins/mpi/mpich1_p4/mpich1_p4.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/mpi/mpich1_shmem/Makefile.in b/src/plugins/mpi/mpich1_shmem/Makefile.in
index d4d9c52a8..b797b202b 100644
--- a/src/plugins/mpi/mpich1_shmem/Makefile.in
+++ b/src/plugins/mpi/mpich1_shmem/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/mpi/mpich1_shmem/mpich1_shmem.c b/src/plugins/mpi/mpich1_shmem/mpich1_shmem.c
index 2a848feac..e853b946b 100644
--- a/src/plugins/mpi/mpich1_shmem/mpich1_shmem.c
+++ b/src/plugins/mpi/mpich1_shmem/mpich1_shmem.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/mpi/mpichgm/Makefile.in b/src/plugins/mpi/mpichgm/Makefile.in
index cc2234e21..6d618f376 100644
--- a/src/plugins/mpi/mpichgm/Makefile.in
+++ b/src/plugins/mpi/mpichgm/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/mpi/mpichgm/mpi_mpichgm.c b/src/plugins/mpi/mpichgm/mpi_mpichgm.c
index 3524f351b..581da3578 100644
--- a/src/plugins/mpi/mpichgm/mpi_mpichgm.c
+++ b/src/plugins/mpi/mpichgm/mpi_mpichgm.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -97,14 +98,14 @@ int p_mpi_hook_slurmstepd_task(const mpi_plugin_task_info_t *job,
 	env_array_overwrite_fmt(env, "GMPI_SLAVE",  "%s", addrbuf);
 	env_array_overwrite_fmt(env, "GMPI_ID",  "%u", job->gtaskid);
 	if (!getenv("GMPI_RECV")) {
-		env_array_overwrite_fmt(env, "GMPI_RECV",  "%u", "hybrid");
+		env_array_overwrite_fmt(env, "GMPI_RECV",  "%s", "hybrid");
 	}
 
 	env_array_overwrite_fmt(env, "MXMPI_MASTER", "%s", addr);
 	env_array_overwrite_fmt(env, "MXMPI_ID", "%u", job->gtaskid);
 	env_array_overwrite_fmt(env, "MXMPI_SLAVE", "%s", addrbuf);
 	if (!getenv("MXMPI_RECV")) {
-		env_array_overwrite_fmt(env, "MXMPI_RECV",  "%u", "hybrid");
+		env_array_overwrite_fmt(env, "MXMPI_RECV",  "%s", "hybrid");
 	}
 	debug2("init for mpi rank %u\n", job->gtaskid);
 	
diff --git a/src/plugins/mpi/mpichgm/mpichgm.c b/src/plugins/mpi/mpichgm/mpichgm.c
index c42295e7c..05295c74e 100644
--- a/src/plugins/mpi/mpichgm/mpichgm.c
+++ b/src/plugins/mpi/mpichgm/mpichgm.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Takao Hatazaki <takao.hatazaki@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -226,7 +227,7 @@ static int _gmpi_establish_map(gmpi_state_t *st)
 		if (setsockopt(newfd, SOL_SOCKET, SO_REUSEADDR,
 			       (void *)&j, sizeof(j)))
 			error("setsockopt in GMPI master: %m");
-		bzero(&addr, sizeof(addr));
+		memset(&addr, 0, sizeof(addr));
 		addr.sin_family = AF_INET;
 		addr.sin_addr.s_addr = htonl(iaddrs[i]);
 		addr.sin_port = htons(dp->remote_port);
diff --git a/src/plugins/mpi/mpichgm/mpichgm.h b/src/plugins/mpi/mpichgm/mpichgm.h
index f7180de8d..f6a1d2e72 100644
--- a/src/plugins/mpi/mpichgm/mpichgm.h
+++ b/src/plugins/mpi/mpichgm/mpichgm.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/mpi/mpichmx/Makefile.in b/src/plugins/mpi/mpichmx/Makefile.in
index 944c62ff4..2f465710e 100644
--- a/src/plugins/mpi/mpichmx/Makefile.in
+++ b/src/plugins/mpi/mpichmx/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/mpi/mpichmx/mpi_mpichmx.c b/src/plugins/mpi/mpichmx/mpi_mpichmx.c
index 77b67a303..780f25a28 100644
--- a/src/plugins/mpi/mpichmx/mpi_mpichmx.c
+++ b/src/plugins/mpi/mpichmx/mpi_mpichmx.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -96,14 +97,14 @@ int p_mpi_hook_slurmstepd_task(const mpi_plugin_task_info_t *job,
 	env_array_overwrite_fmt(env, "GMPI_SLAVE",  "%s", addrbuf);
 	env_array_overwrite_fmt(env, "GMPI_ID",  "%u", job->gtaskid);
 	if (!getenv("GMPI_RECV")) {
-		env_array_overwrite_fmt(env, "GMPI_RECV",  "%u", "hybrid");
+		env_array_overwrite_fmt(env, "GMPI_RECV",  "%s", "hybrid");
 	}
 
 	env_array_overwrite_fmt(env, "MXMPI_MASTER", "%s", addr);
 	env_array_overwrite_fmt(env, "MXMPI_ID", "%u", job->gtaskid);
 	env_array_overwrite_fmt(env, "MXMPI_SLAVE", "%s", addrbuf);
 	if (!getenv("MXMPI_RECV")) {
-		env_array_overwrite_fmt(env, "MXMPI_RECV",  "%u", "hybrid");
+		env_array_overwrite_fmt(env, "MXMPI_RECV",  "%s", "hybrid");
 	}
 	debug2("init for mpi rank %u\n", job->gtaskid);
 	
diff --git a/src/plugins/mpi/mpichmx/mpichmx.c b/src/plugins/mpi/mpichmx/mpichmx.c
index 19998ab74..17c3c89c3 100644
--- a/src/plugins/mpi/mpichmx/mpichmx.c
+++ b/src/plugins/mpi/mpichmx/mpichmx.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Takao Hatazaki <takao.hatazaki@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -229,7 +230,7 @@ static int _gmpi_establish_map(gmpi_state_t *st)
 		if (setsockopt(newfd, SOL_SOCKET, SO_REUSEADDR,
 			       (void *)&j, sizeof(j)))
 			error("setsockopt in GMPI master: %m");
-		bzero(&addr, sizeof(addr));
+		memset(&addr, 0, sizeof(addr));
 		addr.sin_family = AF_INET;
 		addr.sin_addr.s_addr = htonl(iaddrs[i]);
 		addr.sin_port = htons(dp->remote_port);
diff --git a/src/plugins/mpi/mpichmx/mpichmx.h b/src/plugins/mpi/mpichmx/mpichmx.h
index 6f71bb29b..8cb2b879a 100644
--- a/src/plugins/mpi/mpichmx/mpichmx.h
+++ b/src/plugins/mpi/mpichmx/mpichmx.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/mpi/mvapich/Makefile.in b/src/plugins/mpi/mvapich/Makefile.in
index 8da11d77f..8dcb01135 100644
--- a/src/plugins/mpi/mvapich/Makefile.in
+++ b/src/plugins/mpi/mvapich/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/mpi/mvapich/mpi_mvapich.c b/src/plugins/mpi/mvapich/mpi_mvapich.c
index 01e516354..0807052c8 100644
--- a/src/plugins/mpi/mvapich/mpi_mvapich.c
+++ b/src/plugins/mpi/mvapich/mpi_mvapich.c
@@ -3,12 +3,14 @@
  **  type mpi. 
  *****************************************************************************
  *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/mpi/mvapich/mvapich.c b/src/plugins/mpi/mvapich/mvapich.c
index 5e9c50a92..394b86369 100644
--- a/src/plugins/mpi/mvapich/mvapich.c
+++ b/src/plugins/mpi/mvapich/mvapich.c
@@ -2,12 +2,13 @@
  *  mvapich.c - srun support for MPICH-IB (MVAPICH 0.9.4 and 0.9.5,7,8)
  *****************************************************************************
  *  Copyright (C) 2004-2007 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).  
- *
- *  LLNL-CODE-402394.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/mpi/mvapich/mvapich.h b/src/plugins/mpi/mvapich/mvapich.h
index c4708a176..5caf3891e 100644
--- a/src/plugins/mpi/mvapich/mvapich.h
+++ b/src/plugins/mpi/mvapich/mvapich.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/mpi/none/Makefile.in b/src/plugins/mpi/none/Makefile.in
index 20c19cf46..7614ed507 100644
--- a/src/plugins/mpi/none/Makefile.in
+++ b/src/plugins/mpi/none/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/mpi/none/mpi_none.c b/src/plugins/mpi/none/mpi_none.c
index b331e5f77..8ed26b367 100644
--- a/src/plugins/mpi/none/mpi_none.c
+++ b/src/plugins/mpi/none/mpi_none.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/mpi/openmpi/Makefile.in b/src/plugins/mpi/openmpi/Makefile.in
index 4069688ad..6c9d7efb8 100644
--- a/src/plugins/mpi/openmpi/Makefile.in
+++ b/src/plugins/mpi/openmpi/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/mpi/openmpi/mpi_openmpi.c b/src/plugins/mpi/openmpi/mpi_openmpi.c
index 543b39a1e..4ac55561b 100644
--- a/src/plugins/mpi/openmpi/mpi_openmpi.c
+++ b/src/plugins/mpi/openmpi/mpi_openmpi.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/priority/Makefile.am b/src/plugins/priority/Makefile.am
new file mode 100644
index 000000000..0b4761ffb
--- /dev/null
+++ b/src/plugins/priority/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = basic multifactor
diff --git a/src/plugins/priority/Makefile.in b/src/plugins/priority/Makefile.in
new file mode 100644
index 000000000..11dfc0071
--- /dev/null
+++ b/src/plugins/priority/Makefile.in
@@ -0,0 +1,574 @@
+# Makefile.in generated by automake 1.10.1 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 = src/plugins/priority
+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/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@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELAN_LIBS = @ELAN_LIBS@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
+FFLAGS = @FFLAGS@
+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@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_LDFLAGS = @LIB_LDFLAGS@
+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@
+NMEDIT = @NMEDIT@
+NUMA_LIBS = @NUMA_LIBS@
+OBJEXT = @OBJEXT@
+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_F77 = @ac_ct_F77@
+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@
+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_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = basic multifactor
+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 \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/plugins/priority/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  src/plugins/priority/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; nonemtpy = 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/src/plugins/priority/basic/Makefile.am b/src/plugins/priority/basic/Makefile.am
new file mode 100644
index 000000000..48a2a7b58
--- /dev/null
+++ b/src/plugins/priority/basic/Makefile.am
@@ -0,0 +1,13 @@
+# Makefile for priority/basic plugin
+
+AUTOMAKE_OPTIONS = foreign
+
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+
+pkglib_LTLIBRARIES = priority_basic.la
+
+# basic priority logging plugin.
+priority_basic_la_SOURCES = priority_basic.c
+priority_basic_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
diff --git a/src/plugins/priority/basic/Makefile.in b/src/plugins/priority/basic/Makefile.in
new file mode 100644
index 000000000..1390e1682
--- /dev/null
+++ b/src/plugins/priority/basic/Makefile.in
@@ -0,0 +1,566 @@
+# Makefile.in generated by automake 1.10.1 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@
+
+# Makefile for priority/basic plugin
+
+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 = src/plugins/priority/basic
+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/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 =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+pkglibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+priority_basic_la_LIBADD =
+am_priority_basic_la_OBJECTS = priority_basic.lo
+priority_basic_la_OBJECTS = $(am_priority_basic_la_OBJECTS)
+priority_basic_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(priority_basic_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
+depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(priority_basic_la_SOURCES)
+DIST_SOURCES = $(priority_basic_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+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@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELAN_LIBS = @ELAN_LIBS@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
+FFLAGS = @FFLAGS@
+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@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_LDFLAGS = @LIB_LDFLAGS@
+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@
+NMEDIT = @NMEDIT@
+NUMA_LIBS = @NUMA_LIBS@
+OBJEXT = @OBJEXT@
+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_F77 = @ac_ct_F77@
+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@
+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_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+pkglib_LTLIBRARIES = priority_basic.la
+
+# basic priority logging plugin.
+priority_basic_la_SOURCES = priority_basic.c
+priority_basic_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/plugins/priority/basic/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/plugins/priority/basic/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
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    f=$(am__strip_dir) \
+	    echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	    $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  p=$(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$p'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$p"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+priority_basic.la: $(priority_basic_la_OBJECTS) $(priority_basic_la_DEPENDENCIES) 
+	$(priority_basic_la_LINK) -rpath $(pkglibdir) $(priority_basic_la_OBJECTS) $(priority_basic_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/priority_basic.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+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; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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:  $(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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+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 clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+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-pkglibLTLIBRARIES
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-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-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+# 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/src/plugins/priority/basic/priority_basic.c b/src/plugins/priority/basic/priority_basic.c
new file mode 100644
index 000000000..93cf56837
--- /dev/null
+++ b/src/plugins/priority/basic/priority_basic.c
@@ -0,0 +1,146 @@
+/*****************************************************************************\
+ *  priority_basic.c - NO-OP slurm priority plugin.
+ *****************************************************************************
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#if HAVE_STDINT_H
+#  include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H
+#  include <inttypes.h>
+#endif
+
+#include <stdio.h>
+#include <slurm/slurm_errno.h>
+
+#include "src/common/slurm_priority.h"
+
+/*
+ * These variables are required by the generic plugin interface.  If they
+ * are not found in the plugin, the plugin loader will ignore it.
+ *
+ * plugin_name - a string giving a human-readable description of the
+ * plugin.  There is no maximum length, but the symbol must refer to
+ * a valid string.
+ *
+ * plugin_type - a string suggesting the type of the plugin or its
+ * applicability to a particular form of data or method of data handling.
+ * If the low-level plugin API is used, the contents of this string are
+ * unimportant and may be anything.  SLURM uses the higher-level plugin
+ * interface which requires this string to be of the form
+ *
+ *	<application>/<method>
+ *
+ * where <application> is a description of the intended application of
+ * the plugin (e.g., "jobcomp" for SLURM job completion logging) and <method>
+ * is a description of how this plugin satisfies that application.  SLURM will
+ * only load job completion logging plugins if the plugin_type string has a 
+ * prefix of "jobcomp/".
+ *
+ * plugin_version - an unsigned 32-bit integer giving the version number
+ * of the plugin.  If major and minor revisions are desired, the major
+ * version number may be multiplied by a suitable magnitude constant such
+ * as 100 or 1000.  Various SLURM versions will likely require a certain
+ * minimum versions for their plugins as the job completion logging API 
+ * matures.
+ */
+const char plugin_name[]       	= "Priority BASIC plugin";
+const char plugin_type[]       	= "priority/basic";
+const uint32_t plugin_version	= 100;
+
+/*
+ * init() is called when the plugin is loaded, before any other functions
+ * are called.  Put global initialization here.
+ */
+int init ( void )
+{
+	verbose("%s loaded", plugin_name);
+	return SLURM_SUCCESS;
+}
+
+int fini ( void )
+{
+	return SLURM_SUCCESS;
+}
+
+/*
+ * The remainder of this file implements the standard SLURM priority API.
+ */
+
+extern uint32_t priority_p_set(uint32_t last_prio, struct job_record *job_ptr)
+{
+	uint32_t new_prio = 1;
+
+	if(job_ptr->direct_set_prio)
+		return job_ptr->priority;
+
+	if(last_prio >= 2)
+		new_prio = (last_prio - 1);
+
+	if(job_ptr->details)
+		new_prio -= (job_ptr->details->nice - NICE_OFFSET);
+
+	if(new_prio < 1)
+		new_prio = 1;
+
+	return new_prio;
+}
+
+extern void priority_p_reconfig()
+{
+	
+	return;
+}
+
+extern int priority_p_set_max_cluster_usage(uint32_t procs, uint32_t half_life) 
+{
+	return SLURM_SUCCESS;
+}
+
+extern void priority_p_set_assoc_usage(acct_association_rec_t *assoc)
+{
+	return;
+}
+
+extern List priority_p_get_priority_factors_list(
+	priority_factors_request_msg_t *req_msg)
+{
+	return(list_create(NULL));
+}
diff --git a/src/plugins/priority/multifactor/Makefile.am b/src/plugins/priority/multifactor/Makefile.am
new file mode 100644
index 000000000..1fd4972fe
--- /dev/null
+++ b/src/plugins/priority/multifactor/Makefile.am
@@ -0,0 +1,14 @@
+# Makefile for priority/multifactor plugin
+
+AUTOMAKE_OPTIONS = foreign
+
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+
+pkglib_LTLIBRARIES = priority_multifactor.la
+
+# Null priority logging plugin.
+priority_multifactor_la_SOURCES = priority_multifactor.c
+priority_multifactor_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+priority_multifactor_la_LIBADD  = -lm
diff --git a/src/plugins/priority/multifactor/Makefile.in b/src/plugins/priority/multifactor/Makefile.in
new file mode 100644
index 000000000..10cb10f68
--- /dev/null
+++ b/src/plugins/priority/multifactor/Makefile.in
@@ -0,0 +1,568 @@
+# Makefile.in generated by automake 1.10.1 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@
+
+# Makefile for priority/multifactor plugin
+
+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 = src/plugins/priority/multifactor
+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/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 =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+pkglibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+priority_multifactor_la_DEPENDENCIES =
+am_priority_multifactor_la_OBJECTS = priority_multifactor.lo
+priority_multifactor_la_OBJECTS =  \
+	$(am_priority_multifactor_la_OBJECTS)
+priority_multifactor_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(priority_multifactor_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
+depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(priority_multifactor_la_SOURCES)
+DIST_SOURCES = $(priority_multifactor_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+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@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELAN_LIBS = @ELAN_LIBS@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
+FFLAGS = @FFLAGS@
+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@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_LDFLAGS = @LIB_LDFLAGS@
+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@
+NMEDIT = @NMEDIT@
+NUMA_LIBS = @NUMA_LIBS@
+OBJEXT = @OBJEXT@
+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_F77 = @ac_ct_F77@
+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@
+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_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+pkglib_LTLIBRARIES = priority_multifactor.la
+
+# Null priority logging plugin.
+priority_multifactor_la_SOURCES = priority_multifactor.c
+priority_multifactor_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+priority_multifactor_la_LIBADD = -lm
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/plugins/priority/multifactor/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/plugins/priority/multifactor/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
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    f=$(am__strip_dir) \
+	    echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	    $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  p=$(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$p'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$p"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+priority_multifactor.la: $(priority_multifactor_la_OBJECTS) $(priority_multifactor_la_DEPENDENCIES) 
+	$(priority_multifactor_la_LINK) -rpath $(pkglibdir) $(priority_multifactor_la_OBJECTS) $(priority_multifactor_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/priority_multifactor.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+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; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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:  $(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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+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 clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+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-pkglibLTLIBRARIES
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-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-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+# 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/src/plugins/priority/multifactor/priority_multifactor.c b/src/plugins/priority/multifactor/priority_multifactor.c
new file mode 100644
index 000000000..980b6eae2
--- /dev/null
+++ b/src/plugins/priority/multifactor/priority_multifactor.c
@@ -0,0 +1,1140 @@
+/*****************************************************************************\
+ *  priority_multifactor.c - slurm multifactor priority plugin.
+ *****************************************************************************
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#if HAVE_STDINT_H
+#  include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H
+#  include <inttypes.h>
+#endif
+#ifdef WITH_PTHREADS
+#  include <pthread.h>
+#endif				/* WITH_PTHREADS */
+
+#include <sys/stat.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <slurm/slurm_errno.h>
+#include <math.h>
+
+#include "src/common/slurm_priority.h"
+#include "src/common/xstring.h"
+#include "src/common/assoc_mgr.h"
+#include "src/common/parse_time.h"
+
+#include "src/slurmctld/locks.h"
+
+#define DECAY_INTERVAL	300 /* sleep for this many seconds */
+#define SECS_PER_DAY	(24 * 60 * 60)
+#define SECS_PER_WEEK	(7 * 24 * 60 * 60)
+
+/*
+ * These variables are required by the generic plugin interface.  If they
+ * are not found in the plugin, the plugin loader will ignore it.
+ *
+ * plugin_name - a string giving a human-readable description of the
+ * plugin.  There is no maximum length, but the symbol must refer to
+ * a valid string.
+ *
+ * plugin_type - a string suggesting the type of the plugin or its
+ * applicability to a particular form of data or method of data handling.
+ * If the low-level plugin API is used, the contents of this string are
+ * unimportant and may be anything.  SLURM uses the higher-level plugin
+ * interface which requires this string to be of the form
+ *
+ *	<application>/<method>
+ *
+ * where <application> is a description of the intended application of
+ * the plugin (e.g., "jobcomp" for SLURM job completion logging) and <method>
+ * is a description of how this plugin satisfies that application.  SLURM will
+ * only load job completion logging plugins if the plugin_type string has a 
+ * prefix of "jobcomp/".
+ *
+ * plugin_version - an unsigned 32-bit integer giving the version number
+ * of the plugin.  If major and minor revisions are desired, the major
+ * version number may be multiplied by a suitable magnitude constant such
+ * as 100 or 1000.  Various SLURM versions will likely require a certain
+ * minimum versions for their plugins as the job completion logging API 
+ * matures.
+ */
+const char plugin_name[]       	= "Priority MULTIFACTOR plugin";
+const char plugin_type[]       	= "priority/multifactor";
+const uint32_t plugin_version	= 100;
+
+static pthread_t decay_handler_thread;
+static pthread_t cleanup_handler_thread;
+static pthread_mutex_t decay_lock = PTHREAD_MUTEX_INITIALIZER;
+static bool running_decay = 0, reconfig = 0, calc_fairshare = 1;
+static bool favor_small; /* favor small jobs over large */
+static uint32_t max_age; /* time when not to add any more
+			  * priority to a job if reached */
+static uint32_t weight_age; /* weight for age factor */
+static uint32_t weight_fs; /* weight for Fairshare factor */
+static uint32_t weight_js; /* weight for Job Size factor */
+static uint32_t weight_part; /* weight for Partition factor */
+static uint32_t weight_qos; /* weight for QOS factor */
+
+extern int priority_p_set_max_cluster_usage(uint32_t procs, uint32_t half_life);
+extern void priority_p_set_assoc_usage(acct_association_rec_t *assoc);
+
+/*
+ * apply decay factor to all associations usage_raw
+ * IN: decay_factor - decay to be applied to each associations' used
+ * shares.  This should already be modified with the amount of delta
+ * time from last application..
+ * RET: SLURM_SUCCESS on SUCCESS, SLURM_ERROR else.
+ */
+static int _apply_decay(double decay_factor)
+{
+	ListIterator itr = NULL;
+	acct_association_rec_t *assoc = NULL;
+	acct_qos_rec_t *qos = NULL;
+
+	/* continue if decay_factor is 0 or 1 since that doesn't help
+	   us at all. 1 means no decay and 0 will just zero
+	   everything out so don't waste time doing it */
+	if(!decay_factor)
+		return SLURM_ERROR;
+	else if(!calc_fairshare)
+		return SLURM_SUCCESS;
+
+	xassert(assoc_mgr_association_list);
+
+	slurm_mutex_lock(&assoc_mgr_association_lock);
+	itr = list_iterator_create(assoc_mgr_association_list);
+	while((assoc = list_next(itr))) {
+		if (assoc == assoc_mgr_root_assoc)
+			continue;
+		assoc->usage_raw *= decay_factor;
+		assoc->grp_used_wall *= decay_factor;
+	}
+	list_iterator_destroy(itr);
+	slurm_mutex_unlock(&assoc_mgr_association_lock);
+
+	slurm_mutex_lock(&assoc_mgr_qos_lock);
+	itr = list_iterator_create(assoc_mgr_qos_list);
+	while((qos = list_next(itr))) {
+		qos->usage_raw *= decay_factor;
+		qos->grp_used_wall *= decay_factor;
+	}
+	list_iterator_destroy(itr);
+	slurm_mutex_unlock(&assoc_mgr_qos_lock);
+
+	return SLURM_SUCCESS;
+}
+
+/*
+ * reset usage_raw, and grp_used_cpu_mins on all associations 
+ * This should be called every PriorityUsageResetPeriod
+ * RET: SLURM_SUCCESS on SUCCESS, SLURM_ERROR else.
+ */
+static int _reset_usage()
+{
+	ListIterator itr = NULL;
+	acct_association_rec_t *assoc = NULL;
+	acct_qos_rec_t *qos = NULL;
+
+	if(!calc_fairshare)
+		return SLURM_SUCCESS;
+
+	xassert(assoc_mgr_association_list);
+
+	slurm_mutex_lock(&assoc_mgr_association_lock);
+	itr = list_iterator_create(assoc_mgr_association_list);
+	while((assoc = list_next(itr))) {
+		if (assoc == assoc_mgr_root_assoc)
+			continue;
+		assoc->usage_raw = 0;
+		assoc->grp_used_wall = 0;
+	}
+	list_iterator_destroy(itr);
+	slurm_mutex_unlock(&assoc_mgr_association_lock);
+
+	slurm_mutex_lock(&assoc_mgr_qos_lock);
+	itr = list_iterator_create(assoc_mgr_qos_list);
+	while((qos = list_next(itr))) {
+		qos->usage_raw = 0;
+		qos->grp_used_wall = 0;
+	}
+	list_iterator_destroy(itr);
+	slurm_mutex_unlock(&assoc_mgr_qos_lock);
+
+	return SLURM_SUCCESS;
+}
+
+static void _read_last_decay_ran(time_t *last_ran, time_t *last_reset)
+{
+	int data_allocated, data_read = 0;
+	uint32_t data_size = 0;
+	int state_fd;
+	char *data = NULL, *state_file;
+	Buf buffer;
+
+	xassert(last_ran);
+	xassert(last_reset);
+
+	(*last_ran) = 0;
+	(*last_reset) = 0;
+
+	/* read the file */
+	state_file = xstrdup(slurmctld_conf.state_save_location);
+	xstrcat(state_file, "/priority_last_decay_ran");
+	lock_state_files();
+	state_fd = open(state_file, O_RDONLY);
+	if (state_fd < 0) {
+		info("No last decay (%s) to recover", state_file);
+		unlock_state_files();
+		return;
+	} else {
+		data_allocated = BUF_SIZE;
+		data = xmalloc(data_allocated);
+		while (1) {
+			data_read = read(state_fd, &data[data_size],
+					 BUF_SIZE);
+			if (data_read < 0) {
+				if (errno == EINTR)
+					continue;
+				else {
+					error("Read error on %s: %m", 
+					      state_file);
+					break;
+				}
+			} else if (data_read == 0)	/* eof */
+				break;
+			data_size      += data_read;
+			data_allocated += data_read;
+			xrealloc(data, data_allocated);
+		}
+		close(state_fd);
+	}
+	xfree(state_file);
+	unlock_state_files();
+
+	buffer = create_buf(data, data_size);
+	safe_unpack_time(last_ran, buffer);
+	safe_unpack_time(last_reset, buffer);
+	free_buf(buffer);
+	debug5("Last ran decay on jobs at %d", last_ran);
+
+	return;
+
+unpack_error:
+	error("Incomplete priority last decay file returning");
+	free_buf(buffer);
+	return;
+
+}
+
+static int _write_last_decay_ran(time_t last_ran, time_t last_reset)
+{
+	/* Save high-water mark to avoid buffer growth with copies */
+	static int high_buffer_size = BUF_SIZE;
+	int error_code = SLURM_SUCCESS;
+	int state_fd;
+	char *old_file, *new_file, *state_file;
+	Buf buffer = init_buf(high_buffer_size);
+
+	pack_time(last_ran, buffer);
+	pack_time(last_reset, buffer);
+
+	/* read the file */
+	old_file = xstrdup(slurmctld_conf.state_save_location);
+	xstrcat(old_file, "/priority_last_decay_ran.old");
+	state_file = xstrdup(slurmctld_conf.state_save_location);
+	xstrcat(state_file, "/priority_last_decay_ran");
+	new_file = xstrdup(slurmctld_conf.state_save_location);
+	xstrcat(new_file, "/priority_last_decay_ran.new");
+
+	lock_state_files();
+	state_fd = creat(new_file, 0600);
+	if (state_fd < 0) {
+		error("Can't save decay state, create file %s error %m",
+		      new_file);
+		error_code = errno;
+	} else {
+		int pos = 0, nwrite = get_buf_offset(buffer), amount;
+		char *data = (char *)get_buf_data(buffer);
+		high_buffer_size = MAX(nwrite, high_buffer_size);
+		while (nwrite > 0) {
+			amount = write(state_fd, &data[pos], nwrite);
+			if ((amount < 0) && (errno != EINTR)) {
+				error("Error writing file %s, %m", new_file);
+				error_code = errno;
+				break;
+			}
+			nwrite -= amount;
+			pos    += amount;
+		}
+		fsync(state_fd);
+		close(state_fd);
+	}
+
+	if (error_code != SLURM_SUCCESS)
+		(void) unlink(new_file);
+	else {			/* file shuffle */
+		(void) unlink(old_file);
+		(void) link(state_file, old_file);
+		(void) unlink(state_file);
+		(void) link(new_file, state_file);
+		(void) unlink(new_file);
+	}
+	xfree(old_file);
+	xfree(state_file);
+	xfree(new_file);
+
+	unlock_state_files();
+	debug5("done writing time %d", last_ran);
+	free_buf(buffer);
+
+	return error_code;
+}
+
+/* This should initially get the childern list from
+ * assoc_mgr_root_assoc.  Since our algorythm goes from top down we
+ * calculate all the non-user associations now.  When a user submits a
+ * job, that norm_fairshare is calculated.  Here we will set the
+ * usage_efctv to NO_VAL for users to not have to calculate a bunch
+ * of things that will never be used. 
+ *
+ * NOTE: acct_mgr_association_lock must be locked before this is called.
+ */
+static int _set_children_usage_efctv(List childern_list)
+{
+	acct_association_rec_t *assoc = NULL;
+	ListIterator itr = NULL;
+
+	if(!childern_list || !list_count(childern_list)) 
+		return SLURM_SUCCESS;
+
+	itr = list_iterator_create(childern_list);
+	while((assoc = list_next(itr))) {
+		if(assoc->user) {
+			assoc->usage_efctv = (long double)NO_VAL;
+			continue;
+		}
+		priority_p_set_assoc_usage(assoc);
+		_set_children_usage_efctv(assoc->childern_list);
+	}
+	list_iterator_destroy(itr);
+	return SLURM_SUCCESS;
+}
+
+/* job_ptr should already have the partition priority and such added
+ * here before had we will be adding to it
+ */
+static double _get_fairshare_priority( struct job_record *job_ptr)
+{
+	acct_association_rec_t *assoc =
+		(acct_association_rec_t *)job_ptr->assoc_ptr;
+	double priority_fs = 0.0;
+
+	if(!calc_fairshare)
+		return 0;
+
+	if(!assoc) {
+		error("Job %u has no association.  Unable to "
+		      "compute fairshare.");
+		return 0;
+	}
+
+	slurm_mutex_lock(&assoc_mgr_association_lock);
+	if(assoc->usage_efctv == (long double)NO_VAL)
+		priority_p_set_assoc_usage(assoc);
+
+	// Priority is 0 -> 1
+	priority_fs =
+		(assoc->shares_norm - (double)assoc->usage_efctv + 1.0) / 2.0;
+	debug4("Fairshare priority for user %s in acct %s"
+	       "((%f - %Lf) + 1) / 2 = %f",
+	       assoc->user, assoc->acct, assoc->shares_norm,
+	       assoc->usage_efctv, priority_fs);
+
+	slurm_mutex_unlock(&assoc_mgr_association_lock);
+
+	debug3("job %u has a fairshare priority of %f",
+	      job_ptr->job_id, priority_fs);
+
+	return priority_fs;
+}
+
+static void _get_priority_factors(time_t start_time, struct job_record *job_ptr,
+				  priority_factors_object_t* factors,
+				  bool status_only)
+{
+	acct_qos_rec_t *qos_ptr = NULL;
+
+	xassert(factors);
+	xassert(job_ptr);
+
+	qos_ptr = (acct_qos_rec_t *)job_ptr->qos_ptr;
+
+	memset(factors, 0, sizeof(priority_factors_object_t));
+
+	if(weight_age) {
+		uint32_t diff = start_time - job_ptr->details->begin_time;
+		if(job_ptr->details->begin_time) {
+			if(diff < max_age)
+				factors->priority_age =
+					(double)diff / (double)max_age;
+			else
+				factors->priority_age = 1.0;
+		}
+	}
+
+	if(job_ptr->assoc_ptr && weight_fs) {
+		if (status_only)
+			factors->priority_fs = job_ptr->priority_fs;
+		else {
+			factors->priority_fs = _get_fairshare_priority(job_ptr);
+			job_ptr->priority_fs = factors->priority_fs;
+		}
+	}
+
+	if(weight_js) {
+		/* FIXME: This will not work correctly when
+		 * the job is requesting smaller than 1 node.
+		 * We need a way to figure out how to look at
+		 * cpus requested here for those situations.  This can
+		 * probably be done with the num_procs, but
+		 * that isn't always used.  This is usually
+		 * set on bluegene systems, which is where
+		 * this problem arose.  The code below was
+		 * tested on a bluegene system, seemed to
+		 * work, but isn't probably that generic.
+		 * Also the variable total_cpus doesn't exist
+		 * yet so that would need to be defined.
+		 */
+		
+		if(favor_small) {
+			factors->priority_js = (double)(node_record_count
+					   - job_ptr->details->min_nodes)
+				/ (double)node_record_count;
+/* 			if(job_ptr->num_procs && job_ptr->num_procs != NO_VAL) { */
+/* 				factors->priority_js +=  */
+/* 					(double)(total_cpus - job_ptr->num_procs) */
+/* 					/ (double)total_cpus; */
+/* 				factors->priority_js /= 2;			 */
+/* 			} */
+		} else {
+			factors->priority_js =
+				(double)job_ptr->details->min_nodes
+				/ (double)node_record_count;
+/* 			if(job_ptr->num_procs && job_ptr->num_procs != NO_VAL) { */
+/* 				factors->priority_js +=  */
+/* 					(double)job_ptr->num_procs */
+/* 					/ (double)total_cpus; */
+/* 				factors->priority_js /= 2;			 */
+/* 			} */
+		}
+		if (factors->priority_js < .0)
+			factors->priority_js = 0.0;
+		else if (factors->priority_js > 1.0)
+			factors->priority_js = 1.0;
+	}
+
+	if(job_ptr->part_ptr && job_ptr->part_ptr->priority && weight_part) {
+		factors->priority_part = job_ptr->part_ptr->norm_priority;
+	}
+
+	if(qos_ptr && qos_ptr->priority && weight_qos) {
+		factors->priority_qos = qos_ptr->norm_priority;
+	}
+
+	factors->nice = job_ptr->details->nice;
+}
+
+static uint32_t _get_priority_internal(time_t start_time,
+				       struct job_record *job_ptr)
+{
+	double priority		= 0.0;
+	double priority_age	= 0.0;
+	double priority_fs	= 0.0;
+	double priority_js	= 0.0;
+	double priority_part	= 0.0;
+	double priority_qos	= 0.0;
+	priority_factors_object_t	factors;
+
+	if(job_ptr->direct_set_prio)
+		return job_ptr->priority;
+
+	if(!job_ptr->details) {
+		error("_get_priority_internal: job %u does not have a "
+		      "details symbol set, can't set priority");
+		return 0;
+	}
+	/*
+	 * This means the job is not eligible yet
+	 */
+	if(!job_ptr->details->begin_time
+	   || (job_ptr->details->begin_time > start_time))
+		return 1;
+
+	/* figure out the priority */
+	_get_priority_factors(start_time, job_ptr, &factors, false);
+
+	priority_age = factors.priority_age * (double)weight_age;
+	debug3("Weighted Age priority is %f * %u = %.2f",
+	       factors.priority_age, weight_age, priority_age);
+
+	priority_fs = factors.priority_fs * (double)weight_fs;
+	debug3("Weighted Fairshare priority is %f * %u = %.2f",
+	       factors.priority_fs, weight_fs, priority_fs);
+
+	priority_js = factors.priority_js * (double)weight_js;
+	debug3("Weighted JobSize priority is %f * %u = %.2f",
+	       factors.priority_js, weight_js, priority_js);
+
+	priority_part = factors.priority_part * (double)weight_part;
+	debug3("Weighted Partition priority is %f * %u = %.2f",
+	       factors.priority_part, weight_part, priority_part);
+
+	priority_qos = factors.priority_qos * (double)weight_qos;
+	debug3("Weighted QOS priority is %f * %u = %.2f",
+	       factors.priority_qos, weight_qos, priority_qos);
+
+	priority = priority_age + priority_fs + priority_js + priority_part +
+		priority_qos - (double)(factors.nice - NICE_OFFSET);
+
+	/*
+	 * 0 means the job is held; 1 means system hold
+	 * so 2 is the lowest non-held priority
+	 */
+	if(priority < 2)
+		priority = 2;
+
+	debug3("Job %u priority: %.2f + %.2f + %.2f + %.2f + %.2f - %d = %.2f",
+	       job_ptr->job_id, priority_age, priority_fs, priority_js,
+	       priority_part, priority_qos, (factors.nice - NICE_OFFSET),
+	       priority);
+
+	return (uint32_t)priority;
+}
+
+/* based upon the last reset time, compute when the next reset should be */
+static time_t _next_reset(uint16_t reset_period, time_t last_reset)
+{
+	struct tm last_tm;
+	time_t tmp_time, now = time(NULL);
+
+	if(localtime_r(&last_reset, &last_tm) == NULL)
+		return (time_t) 0;
+
+	last_tm.tm_sec   = 0;
+	last_tm.tm_min   = 0;
+	last_tm.tm_hour  = 0;
+/*	last_tm.tm_wday = 0	ignored */
+/*	last_tm.tm_yday = 0;	ignored */
+	last_tm.tm_isdst = -1;
+	switch (reset_period) {
+		case PRIORITY_RESET_DAILY:
+			tmp_time = mktime(&last_tm);
+			tmp_time += SECS_PER_DAY;
+			while ((tmp_time + SECS_PER_DAY) < now)
+				tmp_time += SECS_PER_DAY;
+			return tmp_time;
+		case PRIORITY_RESET_WEEKLY:
+			tmp_time = mktime(&last_tm);
+			tmp_time += (SECS_PER_DAY * (7 - last_tm.tm_wday));
+			while ((tmp_time + SECS_PER_WEEK) < now)
+				tmp_time += SECS_PER_WEEK;
+			return tmp_time;
+		case PRIORITY_RESET_MONTHLY:
+			last_tm.tm_mday = 1;
+			if(last_tm.tm_mon < 11)
+				last_tm.tm_mon++;
+			else {
+				last_tm.tm_mon  = 0;
+				last_tm.tm_year++;
+			}
+			break;
+		case PRIORITY_RESET_QUARTERLY:
+			last_tm.tm_mday = 1;
+			if(last_tm.tm_mon < 3)
+				last_tm.tm_mon = 3;
+			else if(last_tm.tm_mon < 6)
+				last_tm.tm_mon = 6;
+			else if(last_tm.tm_mon < 9)
+				last_tm.tm_mon = 9;
+			else {
+				last_tm.tm_mon  = 0;
+				last_tm.tm_year++;
+			}
+			break;
+		case PRIORITY_RESET_YEARLY:
+			last_tm.tm_mday = 1;
+			last_tm.tm_mon  = 0;
+			last_tm.tm_year++;
+			break;
+		default:
+			return (time_t) 0;
+	}
+	return mktime(&last_tm);
+}
+
+static void *_decay_thread(void *no_data)
+{
+	struct job_record *job_ptr = NULL;
+	ListIterator itr;
+	time_t start_time = time(NULL);
+	time_t next_time;
+/* 	int sigarray[] = {SIGUSR1, 0}; */
+	struct tm tm;
+	time_t last_ran = 0;
+	time_t last_reset = 0, next_reset = 0;
+	double decay_hl = (double)slurm_get_priority_decay_hl();
+	double decay_factor = 1;
+	uint16_t reset_period = slurm_get_priority_reset_period();
+
+	if(decay_hl > 0)
+		decay_factor = 1 - (0.693 / decay_hl);
+
+	/* Write lock on jobs, read lock on nodes and partitions */
+	slurmctld_lock_t job_write_lock =
+		{ NO_LOCK, WRITE_LOCK, READ_LOCK, READ_LOCK };
+
+	(void) pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
+	(void) pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
+
+	if(!localtime_r(&start_time, &tm)) {
+		fatal("_decay_thread: "
+		      "Couldn't get localtime for rollup handler %d",
+		      start_time);
+		return NULL;
+	}
+
+	_read_last_decay_ran(&last_ran, &last_reset);
+	if (last_reset == 0)
+		last_reset = start_time;
+
+	while(1) {
+		time_t now = time(NULL);
+		int run_delta = 0;
+		double real_decay = 0.0;
+
+		slurm_mutex_lock(&decay_lock);
+		running_decay = 1;
+
+		/* If reconfig is called handle all that happens
+		   outside of the loop here */
+		if(reconfig) {
+			/* if decay_hl is 0 or less that means no
+			   decay is to be had.  This also means we
+			   flush the used time at a certain time
+			   set by PriorityUsageResetPeriod in the slurm.conf
+			*/
+			reset_period = slurm_get_priority_reset_period();
+			next_reset = 0;
+			decay_hl = (double)slurm_get_priority_decay_hl();
+			if(decay_hl > 0)
+				decay_factor = 1 - (0.693 / decay_hl);
+			else
+				decay_factor = 1;
+			
+			reconfig = 0;
+		}
+
+		/* this needs to be done right away so as to
+		 * incorporate it into the decay loop.
+		 */
+		switch(reset_period) {
+			case PRIORITY_RESET_NONE:
+				break;
+			case PRIORITY_RESET_NOW:	/* do once */
+				_reset_usage();
+				reset_period = PRIORITY_RESET_NONE;
+				last_reset = now;
+				break;
+			case PRIORITY_RESET_DAILY:
+			case PRIORITY_RESET_WEEKLY:
+			case PRIORITY_RESET_MONTHLY:
+			case PRIORITY_RESET_QUARTERLY:
+			case PRIORITY_RESET_YEARLY:
+				if(next_reset == 0) {
+					next_reset = _next_reset(reset_period, 
+								 last_reset);
+				}
+				if(now >= next_reset) {
+					_reset_usage();
+					last_reset = next_reset;
+					next_reset = _next_reset(reset_period, 
+								 last_reset);
+				}
+		}
+
+		if(!last_ran) 
+			goto get_usage;
+		else
+			run_delta = (start_time - last_ran);
+
+		if(run_delta <= 0)
+			goto get_usage;
+
+		real_decay = pow(decay_factor, (double)run_delta);
+
+		debug3("Decay factor over %d seconds goes from %.15f -> %.15f",
+		       run_delta, decay_factor, real_decay);
+
+		/* first apply decay to used time */
+		if(_apply_decay(real_decay) != SLURM_SUCCESS) {
+			error("problem applying decay");
+			running_decay = 0;
+			slurm_mutex_unlock(&decay_lock);
+			break;
+		}
+
+		lock_slurmctld(job_write_lock);
+		itr = list_iterator_create(job_list);
+		while ((job_ptr = list_next(itr))) {
+			/* apply new usage */
+			if(!IS_JOB_PENDING(job_ptr) &&
+			   job_ptr->start_time && job_ptr->assoc_ptr) {
+				acct_qos_rec_t *qos = 
+					(acct_qos_rec_t *)job_ptr->qos_ptr;
+				acct_association_rec_t *assoc =	
+					(acct_association_rec_t *)
+					job_ptr->assoc_ptr;
+				time_t start_period = last_ran;
+				time_t end_period = start_time;
+				double run_decay = 0;
+
+				if(job_ptr->start_time > start_period) 
+					start_period = job_ptr->start_time;
+
+				if(job_ptr->end_time 
+				   && (end_period > job_ptr->end_time)) 
+					end_period = job_ptr->end_time;
+
+				run_delta = (int)end_period - (int)start_period;
+
+				/* job already has been accounted for
+				   go to next */
+				if(run_delta < 1) 
+					continue;
+
+				debug4("job %u ran for %d seconds",
+				       job_ptr->job_id, run_delta);
+
+				/* get the time in decayed fashion */
+				run_decay = run_delta 
+					* pow(decay_factor, (double)run_delta);
+
+				real_decay = run_decay
+					* (double)job_ptr->total_procs;
+	
+				/* now apply the usage factor for this
+				   qos */
+				if(qos) {
+					slurm_mutex_lock(&assoc_mgr_qos_lock);
+					if(qos->usage_factor > 0) {
+						real_decay *= qos->usage_factor;
+						run_decay *= qos->usage_factor;
+					}
+					qos->grp_used_wall += run_decay;
+					qos->usage_raw +=
+						(long double)real_decay;
+					slurm_mutex_unlock(&assoc_mgr_qos_lock);
+				}
+
+				slurm_mutex_lock(&assoc_mgr_association_lock);
+				while(assoc) {
+					/* we don't want to make the
+					   root assoc responsible for
+					   keeping track of time 
+					*/ 
+					if (assoc == assoc_mgr_root_assoc)
+						break;
+					assoc->grp_used_wall += run_decay;
+					assoc->usage_raw +=
+						(long double)real_decay;
+					debug4("adding %f new usage to "
+					       "assoc %u (user='%s' acct='%s') "
+					       "raw usage is now %Lf.  Group "
+					       "wall added %d making it %d.",
+					       real_decay, assoc->id, 
+					       assoc->user, assoc->acct,
+					       assoc->usage_raw, run_delta,
+					       assoc->grp_used_wall);
+				
+					assoc = assoc->parent_assoc_ptr;
+				}
+				slurm_mutex_unlock(&assoc_mgr_association_lock);
+			}
+
+			/* 
+			 * This means the job is held, 0, or a system
+			 * hold, 1. Continue also if the job is not
+			 * pending.  There is no reason to set the
+			 * priority if the job isn't pending.
+			 */ 
+			if((job_ptr->priority <= 1) || !IS_JOB_PENDING(job_ptr))
+				continue;
+	
+			job_ptr->priority =
+				_get_priority_internal(start_time, job_ptr);
+
+			debug2("priority for job %u is now %u", 
+			       job_ptr->job_id, job_ptr->priority);
+		}
+		list_iterator_destroy(itr);
+		unlock_slurmctld(job_write_lock);
+
+	get_usage:
+		/* now calculate all the normalized usage here */
+		slurm_mutex_lock(&assoc_mgr_association_lock);
+		_set_children_usage_efctv(assoc_mgr_root_assoc->childern_list);
+		slurm_mutex_unlock(&assoc_mgr_association_lock);
+	
+		last_ran = start_time;
+
+		_write_last_decay_ran(last_ran, last_reset);
+
+		running_decay = 0;
+		slurm_mutex_unlock(&decay_lock);
+
+		/* sleep for DECAY_INTERVAL secs */
+		tm.tm_sec += DECAY_INTERVAL;
+		tm.tm_isdst = -1;
+		next_time = mktime(&tm);
+		sleep((next_time-start_time));
+		start_time = next_time;
+		/* repeat ;) */
+	}
+	return NULL;
+}
+
+/* Selects the specific jobs that the user wanted to see
+ * Requests that include job id(s) and user id(s) must match both to be passed.
+ * Returns 1 if job should be omitted */
+static int _filter_job(struct job_record *job_ptr, List req_job_list,
+		       List req_user_list)
+{
+	int filter = 0;
+	ListIterator iterator;
+	uint32_t *job_id;
+	uint32_t *user_id;
+
+	if (req_job_list) {
+		filter = 1;
+		iterator = list_iterator_create(req_job_list);
+		while ((job_id = list_next(iterator))) {
+			if (*job_id == job_ptr->job_id) {
+				filter = 0;
+				break;
+			}
+		}
+		list_iterator_destroy(iterator);
+		if (filter == 1) {
+			return 1;
+		}
+	}
+
+	if (req_user_list) {
+		filter = 1;
+		iterator = list_iterator_create(req_user_list);
+		while ((user_id = list_next(iterator))) {
+			if (*user_id == job_ptr->user_id) {
+				filter = 0;
+				break;
+			}
+		}
+		list_iterator_destroy(iterator);
+		if (filter == 1)
+			return 1;
+	}
+
+	return filter;
+}
+
+static void *_cleanup_thread(void *no_data)
+{
+	pthread_join(decay_handler_thread, NULL);
+	return NULL;
+}
+
+static void _internal_setup()
+{
+	favor_small = slurm_get_priority_favor_small();
+
+	max_age = slurm_get_priority_max_age();
+	weight_age = slurm_get_priority_weight_age();
+	weight_fs = slurm_get_priority_weight_fairshare();
+	weight_js = slurm_get_priority_weight_job_size();
+	weight_part = slurm_get_priority_weight_partition();
+	weight_qos = slurm_get_priority_weight_qos();
+
+	debug3("priority: Max Age is %u", max_age);
+	debug3("priority: Weight Age is %u", weight_age);
+	debug3("priority: Weight Fairshare is %u", weight_fs);
+	debug3("priority: Weight JobSize is %u", weight_js);
+	debug3("priority: Weight Part is %u", weight_part);
+	debug3("priority: Weight QOS is %u", weight_qos);
+}
+
+/*
+ * init() is called when the plugin is loaded, before any other functions
+ * are called.  Put global initialization here.
+ */
+int init ( void )
+{
+	pthread_attr_t thread_attr;
+	char *temp = NULL;
+
+	_internal_setup();
+
+	/* Check to see if we are running a supported accounting plugin */
+	temp = slurm_get_accounting_storage_type();
+	if(strcasecmp(temp, "accounting_storage/slurmdbd")
+	   && strcasecmp(temp, "accounting_storage/mysql")) {
+		error("You are not running a supported "
+		      "accounting_storage plugin\n(%s).\n"
+		      "Fairshare can only be calculated with either "
+		      "'accounting_storage/slurmdbd' "
+		      "or 'accounting_storage/mysql' enabled.  "
+		      "If you want multifactor priority without fairshare "
+		      "ignore this message.\n",
+		      temp);
+		calc_fairshare = 0;
+		weight_fs = 0;
+	} else {
+		if(!cluster_procs)
+			fatal("We need to have a cluster cpu count "
+			      "before we can init the priority/multifactor "
+			      "plugin");
+		priority_p_set_max_cluster_usage(cluster_procs,
+						 slurm_get_priority_decay_hl());
+		slurm_attr_init(&thread_attr);
+		if (pthread_create(&decay_handler_thread, &thread_attr,
+				   _decay_thread, NULL))
+			fatal("pthread_create error %m");
+		
+		/* This is here to join the decay thread so we don't core
+		   dump if in the sleep, since there is no other place to join
+		   we have to create another thread to do it.
+		*/
+		slurm_attr_init(&thread_attr);
+		if (pthread_create(&cleanup_handler_thread, &thread_attr,
+				   _cleanup_thread, NULL))
+			fatal("pthread_create error %m");
+		
+		slurm_attr_destroy(&thread_attr);
+	}
+	xfree(temp);
+
+	verbose("%s loaded", plugin_name);
+	return SLURM_SUCCESS;
+}
+
+int fini ( void )
+{
+	/* Daemon termination handled here */
+	if(running_decay)
+		debug("Waiting for decay thread to finish.");
+
+	slurm_mutex_lock(&decay_lock);
+	
+	/* cancel the decay thread and then join the cleanup thread */
+	if(decay_handler_thread)
+		pthread_cancel(decay_handler_thread);
+	if(cleanup_handler_thread)
+		pthread_join(cleanup_handler_thread, NULL);
+
+	slurm_mutex_unlock(&decay_lock);
+
+	return SLURM_SUCCESS;
+}
+
+extern uint32_t priority_p_set(uint32_t last_prio, struct job_record *job_ptr)
+{
+	uint32_t priority = _get_priority_internal(time(NULL), job_ptr);
+
+	debug2("initial priority for job %u is %u", job_ptr->job_id, priority);
+
+	return priority;
+}
+
+extern void priority_p_reconfig()
+{
+	reconfig = 1;
+	_internal_setup();
+	debug2("%s reconfigured", plugin_name);
+	
+	return;
+}
+
+extern int priority_p_set_max_cluster_usage(uint32_t procs, uint32_t half_life)
+{
+	static uint32_t last_procs = 0;
+	static uint32_t last_half_life = 0;
+
+	if(!calc_fairshare)
+		return SLURM_SUCCESS;
+
+	/* No need to do this if nothing has changed so just return */
+	if((procs == last_procs) && (half_life == last_half_life))
+		return SLURM_SUCCESS;
+
+	xassert(assoc_mgr_root_assoc);
+
+	last_procs = procs;
+	last_half_life = half_life;
+
+	/* get the total decay for the entire cluster */
+	assoc_mgr_root_assoc->usage_raw =
+		(long double)procs * (long double)half_life * (long double)2;
+	assoc_mgr_root_assoc->usage_norm = 1.0;
+	debug3("Total possible cpu usage for half_life of %d secs "
+	       "on the system is %.0Lf",
+	       half_life, assoc_mgr_root_assoc->usage_raw);
+
+	return SLURM_SUCCESS;
+}
+
+extern void priority_p_set_assoc_usage(acct_association_rec_t *assoc)
+{
+	char *child = "account";
+	char *child_str = assoc->acct;
+
+	xassert(assoc);
+
+	if(assoc->user) {
+		child = "user";
+		child_str = assoc->user;
+	}
+
+	xassert(assoc_mgr_root_assoc);
+	xassert(assoc_mgr_root_assoc->usage_raw);
+	xassert(assoc->parent_assoc_ptr);
+	
+	assoc->usage_norm = assoc->usage_raw / assoc_mgr_root_assoc->usage_raw;
+	debug4("Normalized usage for %s %s off %s %Lf / %Lf = %Lf",
+	       child, child_str, assoc->parent_assoc_ptr->acct,
+	       assoc->usage_raw, assoc_mgr_root_assoc->usage_raw,
+	       assoc->usage_norm);
+	/* This is needed in case someone changes the half-life on the
+	   fly and now we have used more time than is available under
+	   the new config */
+	if (assoc->usage_norm > 1.0) 
+		assoc->usage_norm = 1.0;
+	
+	if (assoc->parent_assoc_ptr == assoc_mgr_root_assoc) {
+		assoc->usage_efctv = assoc->usage_norm;
+		debug4("Effective usage for %s %s off %s %Lf %Lf",
+		       child, child_str, assoc->parent_assoc_ptr->acct,
+		       assoc->usage_efctv, assoc->usage_norm);
+	} else {
+		assoc->usage_efctv = assoc->usage_norm +
+			((assoc->parent_assoc_ptr->usage_efctv -
+			  assoc->usage_norm) *
+			 assoc->shares_raw / 
+			 (long double)assoc->level_shares);
+		debug4("Effective usage for %s %s off %s "
+		       "%Lf + ((%Lf - %Lf) * %d / %d) = %Lf",
+		       child, child_str, assoc->parent_assoc_ptr->acct,
+		       assoc->usage_norm,
+		       assoc->parent_assoc_ptr->usage_efctv,
+		       assoc->usage_norm, assoc->shares_raw,
+		       assoc->level_shares, assoc->usage_efctv);
+	}
+}
+
+extern List priority_p_get_priority_factors_list(
+	priority_factors_request_msg_t *req_msg)
+{
+	List req_job_list;
+	List req_user_list;
+	List ret_list = NULL;
+	ListIterator itr;
+	priority_factors_object_t *obj = NULL;
+	struct job_record *job_ptr = NULL;
+	time_t start_time = time(NULL);
+
+	xassert(req_msg);
+	req_job_list = req_msg->job_id_list;
+	req_user_list = req_msg->uid_list;
+
+	/* Read lock on jobs, nodes, and partitions */
+	slurmctld_lock_t job_read_lock =
+		{ NO_LOCK, READ_LOCK, READ_LOCK, READ_LOCK };
+
+	if (job_list && list_count(job_list)) {
+		ret_list = list_create(slurm_destroy_priority_factors_object);
+		lock_slurmctld(job_read_lock);
+		itr = list_iterator_create(job_list);
+		while ((job_ptr = list_next(itr))) {
+			/*
+			 * We are only looking for pending jobs 
+			 */
+			if(!IS_JOB_PENDING(job_ptr))
+				continue;
+			/*
+			 * This means the job is not eligible yet
+			 */
+			if(!job_ptr->details->begin_time
+			   || (job_ptr->details->begin_time > start_time))
+				continue;
+
+			/*
+			 * 0 means the job is held; 1 means system hold
+			 */
+			if(job_ptr->priority <= 1)
+				continue;
+			
+			if (_filter_job(job_ptr, req_job_list, req_user_list))
+				continue;
+			
+			obj = xmalloc(sizeof(priority_factors_object_t));
+			
+			_get_priority_factors(start_time, job_ptr, obj, true);
+			obj->job_id = job_ptr->job_id;
+			obj->user_id = job_ptr->user_id;
+			list_append(ret_list, obj);
+		}
+		list_iterator_destroy(itr);
+		unlock_slurmctld(job_read_lock);
+		if (!list_count(ret_list)) {
+			list_destroy(ret_list);
+			ret_list = NULL;
+		}
+	}
+
+	return ret_list;
+}
diff --git a/src/plugins/proctrack/Makefile.in b/src/plugins/proctrack/Makefile.in
index 19758aa90..1f93dca05 100644
--- a/src/plugins/proctrack/Makefile.in
+++ b/src/plugins/proctrack/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/proctrack/aix/Makefile.in b/src/plugins/proctrack/aix/Makefile.in
index 04ad764d8..c99342ce7 100644
--- a/src/plugins/proctrack/aix/Makefile.in
+++ b/src/plugins/proctrack/aix/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/proctrack/aix/proctrack_aix.c b/src/plugins/proctrack/aix/proctrack_aix.c
index d3b7fb63e..5eaa97126 100644
--- a/src/plugins/proctrack/aix/proctrack_aix.c
+++ b/src/plugins/proctrack/aix/proctrack_aix.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/proctrack/linuxproc/Makefile.in b/src/plugins/proctrack/linuxproc/Makefile.in
index 60026f036..c87ae8f72 100644
--- a/src/plugins/proctrack/linuxproc/Makefile.in
+++ b/src/plugins/proctrack/linuxproc/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -110,6 +114,10 @@ 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@
diff --git a/src/plugins/proctrack/linuxproc/kill_tree.c b/src/plugins/proctrack/linuxproc/kill_tree.c
index b792cea0f..d4c480394 100644
--- a/src/plugins/proctrack/linuxproc/kill_tree.c
+++ b/src/plugins/proctrack/linuxproc/kill_tree.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Takao Hatazaki <takao.hatazaki@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/proctrack/linuxproc/kill_tree.h b/src/plugins/proctrack/linuxproc/kill_tree.h
index 8ae0d2c56..4129505c8 100644
--- a/src/plugins/proctrack/linuxproc/kill_tree.h
+++ b/src/plugins/proctrack/linuxproc/kill_tree.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Takao Hatazaki <takao.hatazaki@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/proctrack/linuxproc/proctrack_linuxproc.c b/src/plugins/proctrack/linuxproc/proctrack_linuxproc.c
index 95331c8d9..1e1b63a9f 100644
--- a/src/plugins/proctrack/linuxproc/proctrack_linuxproc.c
+++ b/src/plugins/proctrack/linuxproc/proctrack_linuxproc.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/proctrack/pgid/Makefile.in b/src/plugins/proctrack/pgid/Makefile.in
index dcc057da6..49f8eff0c 100644
--- a/src/plugins/proctrack/pgid/Makefile.in
+++ b/src/plugins/proctrack/pgid/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/proctrack/pgid/proctrack_pgid.c b/src/plugins/proctrack/pgid/proctrack_pgid.c
index 94f6f2b59..fc27dfb57 100644
--- a/src/plugins/proctrack/pgid/proctrack_pgid.c
+++ b/src/plugins/proctrack/pgid/proctrack_pgid.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/proctrack/rms/Makefile.in b/src/plugins/proctrack/rms/Makefile.in
index 9c4d24aaa..7de197ff1 100644
--- a/src/plugins/proctrack/rms/Makefile.in
+++ b/src/plugins/proctrack/rms/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -110,6 +114,10 @@ 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@
diff --git a/src/plugins/proctrack/rms/proctrack_rms.c b/src/plugins/proctrack/rms/proctrack_rms.c
index 93204494f..0e56f0349 100644
--- a/src/plugins/proctrack/rms/proctrack_rms.c
+++ b/src/plugins/proctrack/rms/proctrack_rms.c
@@ -3,10 +3,11 @@
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/proctrack/sgi_job/Makefile.in b/src/plugins/proctrack/sgi_job/Makefile.in
index c279fb5e6..80a211739 100644
--- a/src/plugins/proctrack/sgi_job/Makefile.in
+++ b/src/plugins/proctrack/sgi_job/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/proctrack/sgi_job/proctrack_sgi_job.c b/src/plugins/proctrack/sgi_job/proctrack_sgi_job.c
index 53fa0d62c..23a46aeed 100644
--- a/src/plugins/proctrack/sgi_job/proctrack_sgi_job.c
+++ b/src/plugins/proctrack/sgi_job/proctrack_sgi_job.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/Makefile.in b/src/plugins/sched/Makefile.in
index ed121a34f..b623e469c 100644
--- a/src/plugins/sched/Makefile.in
+++ b/src/plugins/sched/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/sched/backfill/Makefile.in b/src/plugins/sched/backfill/Makefile.in
index e87019023..c58ec8c08 100644
--- a/src/plugins/sched/backfill/Makefile.in
+++ b/src/plugins/sched/backfill/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/sched/backfill/backfill.c b/src/plugins/sched/backfill/backfill.c
index 02555505e..f97d954b0 100644
--- a/src/plugins/sched/backfill/backfill.c
+++ b/src/plugins/sched/backfill/backfill.c
@@ -15,13 +15,14 @@
  *  priority job.
  *****************************************************************************
  *  Copyright (C) 2003-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>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -29,7 +30,7 @@
  *  any later version.
  *
  *  In addition, as a special exception, the copyright holders give permission 
- *  to link the code of portions of this program with the OpenSSL library under 
+ *  to link the code of portions of this program with the OpenSSL library under
  *  certain conditions as described in each individual source file, and 
  *  distribute linked combinations including the two. You must obey the GNU 
  *  General Public License in all respects for all of the code used other than 
@@ -72,6 +73,7 @@
 #include "src/slurmctld/licenses.h"
 #include "src/slurmctld/locks.h"
 #include "src/slurmctld/node_scheduler.h"
+#include "src/slurmctld/reservation.h"
 #include "src/slurmctld/slurmctld.h"
 #include "src/slurmctld/srun_comm.h"
 #include "backfill.h"
@@ -89,10 +91,6 @@ static bool new_work      = false;
 static bool stop_backfill = false;
 static pthread_mutex_t thread_flag_mutex = PTHREAD_MUTEX_INITIALIZER;
 
-/* Backfill scheduling has considerable overhead, 
- *	so only attempt it every BACKFILL_INTERVAL seconds.
- * Much of the scheduling for BlueGene happens through backfill,
- *	so we run it more frequently. */
 #ifndef BACKFILL_INTERVAL
 #  ifdef HAVE_BG
 #    define BACKFILL_INTERVAL	5
@@ -122,7 +120,11 @@ static void _attempt_backfill(void);
 static void _diff_tv_str(struct timeval *tv1,struct timeval *tv2,
 		char *tv_str, int len_tv_str);
 static bool _more_work(void);
-static int _start_job(struct job_record *job_ptr, bitstr_t *avail_bitmap);
+static int  _num_feature_count(struct job_record *job_ptr);
+static int  _start_job(struct job_record *job_ptr, bitstr_t *avail_bitmap);
+static int  _try_sched(struct job_record *job_ptr, bitstr_t **avail_bitmap,
+		       uint32_t min_nodes, uint32_t max_nodes,
+		       uint32_t req_nodes);
 
 #if __DEBUG
 /* Log resource allocate table */
@@ -163,6 +165,112 @@ static void _diff_tv_str(struct timeval *tv1,struct timeval *tv2,
 	snprintf(tv_str, len_tv_str, "usec=%ld", delta_t);
 }
 
+/* test if job has feature count specification */
+static int _num_feature_count(struct job_record *job_ptr)
+{
+	struct job_details *detail_ptr = job_ptr->details;
+	int rc = 0;
+	ListIterator feat_iter;
+	struct feature_record *feat_ptr;
+
+	if (detail_ptr->feature_list == NULL)	/* no constraints */
+		return rc;
+
+	feat_iter = list_iterator_create(detail_ptr->feature_list);
+	while ((feat_ptr = (struct feature_record *) list_next(feat_iter))) {
+		if (feat_ptr->count)
+			rc++;
+	}
+	list_iterator_destroy(feat_iter);
+
+	return rc;
+}
+
+/* Attempt to schedule a specific job on specific available nodes
+ * IN job_ptr - job to schedule
+ * IN/OUT avail_bitmap - nodes available/selected to use
+ * RET SLURM_SUCCESS on success, otherwise an error code
+ */
+static int  _try_sched(struct job_record *job_ptr, bitstr_t **avail_bitmap,
+		       uint32_t min_nodes, uint32_t max_nodes,
+		       uint32_t req_nodes)
+{
+	bitstr_t *tmp_bitmap;
+	int rc = SLURM_SUCCESS;
+	int feat_cnt = _num_feature_count(job_ptr);
+
+	if (feat_cnt) {
+		/* Ideally schedule the job feature by feature,
+		 * but I don't want to add that complexity here
+		 * right now, so clear the feature counts and try
+		 * to schedule. This will work if there is only 
+		 * one feature count. It should work fairly well
+		 * in cases where there are multiple feature
+		 * counts. */
+		struct job_details *detail_ptr = job_ptr->details;
+		ListIterator feat_iter;
+		struct feature_record *feat_ptr;
+		int i = 0, list_size;
+		uint16_t *feat_cnt_orig = NULL, high_cnt = 0;
+
+		/* Clear the feature counts */
+		list_size = list_count(detail_ptr->feature_list);
+		feat_cnt_orig = xmalloc(sizeof(uint16_t) * list_size);
+		feat_iter = list_iterator_create(detail_ptr->feature_list);
+		while ((feat_ptr = 
+			(struct feature_record *) list_next(feat_iter))) {
+			high_cnt = MAX(high_cnt, feat_ptr->count);
+			feat_cnt_orig[i++] = feat_ptr->count;
+			feat_ptr->count = 0;
+		}
+		list_iterator_destroy(feat_iter);
+
+		if ((job_req_node_filter(job_ptr, *avail_bitmap) != 
+		     SLURM_SUCCESS) ||
+		    (bit_set_count(*avail_bitmap) < high_cnt)) {
+			rc = ESLURM_NODES_BUSY;
+		} else {
+			rc = select_g_job_test(job_ptr, *avail_bitmap, 
+					       high_cnt, max_nodes, req_nodes,
+					       SELECT_MODE_WILL_RUN);
+		}
+
+		/* Restore the feature counts */
+		i = 0;
+		feat_iter = list_iterator_create(detail_ptr->feature_list);
+		while ((feat_ptr = 
+			(struct feature_record *) list_next(feat_iter))) {
+			feat_ptr->count = feat_cnt_orig[i++];
+		}
+		list_iterator_destroy(feat_iter);
+		xfree(feat_cnt_orig);
+	} else {
+		/* Try to schedule the job. First on dedicated nodes
+		 * then on shared nodes (if so configured). */
+		uint16_t orig_shared;
+		time_t now = time(NULL);
+		orig_shared = job_ptr->details->shared;
+		job_ptr->details->shared = 0;
+		tmp_bitmap = bit_copy(*avail_bitmap);
+		rc = select_g_job_test(job_ptr, *avail_bitmap, min_nodes,
+				       max_nodes, req_nodes,
+				       SELECT_MODE_WILL_RUN);
+		job_ptr->details->shared = orig_shared;
+		if (((rc != SLURM_SUCCESS) || (job_ptr->start_time > now)) &&
+		    (orig_shared != 0)) {
+			FREE_NULL_BITMAP(*avail_bitmap);
+			*avail_bitmap= tmp_bitmap;
+			rc = select_g_job_test(job_ptr, *avail_bitmap, 
+					       min_nodes, max_nodes, req_nodes,
+					       SELECT_MODE_WILL_RUN);
+		} else
+			FREE_NULL_BITMAP(tmp_bitmap);
+	}
+
+	return rc;
+
+}
+
 /* Terminate backfill_agent */
 extern void stop_backfill_agent(void)
 {
@@ -174,14 +282,24 @@ extern void stop_backfill_agent(void)
 extern void *backfill_agent(void *args)
 {
 	struct timeval tv1, tv2;
-	char tv_str[20];
+	char tv_str[20], *sched_params, *tmp_ptr;
 	time_t now;
-	int i, iter;
+	int backfill_interval = 0, i, iter;
 	static time_t last_backfill_time = 0;
 	/* Read config, and partitions; Write jobs and nodes */
 	slurmctld_lock_t all_locks = {
 		READ_LOCK, WRITE_LOCK, WRITE_LOCK, READ_LOCK };
 
+	sched_params = slurm_get_sched_params();
+	if (sched_params && (tmp_ptr=strstr(sched_params, "interval=")))
+		backfill_interval = atoi(tmp_ptr+9);
+	else
+		backfill_interval = BACKFILL_INTERVAL;
+	if (backfill_interval < 1) {
+		fatal("Invalid backfill scheduler interval: %d", 
+		      backfill_interval);
+	}
+
 	while (!stop_backfill) {
 		iter = (BACKFILL_CHECK_SEC * 1000000) /
 		       STOP_CHECK_USEC;
@@ -193,9 +311,9 @@ extern void *backfill_agent(void *args)
 		
 		now = time(NULL);
 		/* Avoid resource fragmentation if important */
-		if (switch_no_frag() && job_is_completing())
+		if (job_is_completing())
 			continue;
-		if ((difftime(now, last_backfill_time) < BACKFILL_INTERVAL) ||
+		if ((difftime(now, last_backfill_time) < backfill_interval) ||
 		    stop_backfill || (!_more_work()))
 			continue;
 		last_backfill_time = now;
@@ -222,9 +340,8 @@ static void _attempt_backfill(void)
 	struct part_record *part_ptr;
 	uint32_t end_time, end_reserve, time_limit;
 	uint32_t min_nodes, max_nodes, req_nodes;
-	uint16_t orig_shared;
-	bitstr_t *avail_bitmap = NULL, *tmp_bitmap;
-	time_t now = time(NULL);
+	bitstr_t *avail_bitmap = NULL, *resv_bitmap = NULL;
+	time_t now = time(NULL), start_res;
 	node_space_map_t node_space[MAX_BACKFILL_JOB_CNT + 2];
 
 	if (slurm_get_root_filter())
@@ -300,13 +417,24 @@ static void _attempt_backfill(void)
 				time_limit = MIN(job_ptr->time_limit,
 						 part_ptr->max_time);
 		}
-		end_time = (time_limit * 60) + now;
 
-		/* Identify usable nodes for this job */
+		/* Determine impact of any resource reservations */
 		FREE_NULL_BITMAP(avail_bitmap);
-		avail_bitmap = bit_copy(part_ptr->node_bitmap);
+		start_res = now;
+		j = job_test_resv(job_ptr, &start_res, true, &avail_bitmap);
+		if (j != SLURM_SUCCESS)
+			continue;
+		if (start_res > now)
+			end_time = (time_limit * 60) + start_res;
+		else
+			end_time = (time_limit * 60) + now;
+
+		/* Identify usable nodes for this job */
+		bit_and(avail_bitmap, part_ptr->node_bitmap);
 		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) {
 				bit_and(avail_bitmap, 
 					node_space[j].avail_bitmap);
@@ -315,8 +443,12 @@ static void _attempt_backfill(void)
 			if ((j = node_space[j].next) == 0)
 				break;
 		}
-		if (job_req_node_filter(job_ptr, avail_bitmap))
-			continue;	/* problem with features */
+
+		/* Identify nodes which are definitely off limits */
+		FREE_NULL_BITMAP(resv_bitmap);
+		resv_bitmap = bit_copy(avail_bitmap);
+		bit_not(resv_bitmap);
+
 		if (job_ptr->details->exc_node_bitmap) {
 			bit_not(job_ptr->details->exc_node_bitmap);
 			bit_and(avail_bitmap, 
@@ -329,35 +461,24 @@ static void _attempt_backfill(void)
 			continue;	/* required nodes missing */
 		if (bit_set_count(avail_bitmap) < min_nodes)
 			continue;	/* insufficient nodes remain */
+		if (job_req_node_filter(job_ptr, avail_bitmap))
+			continue;	/* nodes lack features */
 
-		/* Try to schedule the job. First on dedicated nodes
-		 * then on shared nodes (if so configured). */
-		orig_shared = job_ptr->details->shared;
-		job_ptr->details->shared = 0;
-		tmp_bitmap = bit_copy(avail_bitmap);
-		j = select_g_job_test(job_ptr, avail_bitmap, min_nodes,
-				      max_nodes, req_nodes,
-				      SELECT_MODE_WILL_RUN);
-		job_ptr->details->shared = orig_shared;
-		if ((j != SLURM_SUCCESS) && (orig_shared != 0)) {
-			FREE_NULL_BITMAP(avail_bitmap);
-			avail_bitmap= tmp_bitmap;
-			j = select_g_job_test(job_ptr, avail_bitmap, min_nodes,
-					      max_nodes, req_nodes,
-					      SELECT_MODE_WILL_RUN);
-		} else
-			FREE_NULL_BITMAP(tmp_bitmap);
+		j = _try_sched(job_ptr, &avail_bitmap, 
+			       min_nodes, max_nodes, req_nodes);
 		if (j != SLURM_SUCCESS)
 			continue;	/* not runable */
-
+		
+		job_ptr->start_time = MAX(job_ptr->start_time, start_res);
 		if (job_ptr->start_time <= now) {
-			int rc = _start_job(job_ptr, avail_bitmap);
-			if(rc == ESLURM_ACCOUNTING_POLICY) 
+			int rc = _start_job(job_ptr, resv_bitmap);
+			if (rc == ESLURM_ACCOUNTING_POLICY) 
+				continue;
+			else if (rc != SLURM_SUCCESS)
+				/* Planned to start job, but something bad
+				 * happended. Reserve nodes where this should
+				 * apparently run and try more jobs. */
 				continue;
-			else if(rc != SLURM_SUCCESS)
-				/* Planned to start job, but something
-				 * bad happended */
-				break;
 		}
 		if (job_ptr->start_time > (now + BACKFILL_WINDOW)) {
 			/* Starts too far in the future to worry about */
@@ -381,6 +502,7 @@ static void _attempt_backfill(void)
 #endif
 	}
 	FREE_NULL_BITMAP(avail_bitmap);
+	FREE_NULL_BITMAP(resv_bitmap);
 
 	for (i=0; ; ) {
 		bit_free(node_space[i].avail_bitmap);
@@ -390,16 +512,18 @@ static void _attempt_backfill(void)
 	xfree(job_queue);
 }
 
-static int _start_job(struct job_record *job_ptr, bitstr_t *avail_bitmap)
+/* Try to start the job on any non-reserved nodes */
+static int _start_job(struct job_record *job_ptr, bitstr_t *resv_bitmap)
 {
 	int rc;
 	bitstr_t *orig_exc_nodes = NULL;
 	static uint32_t fail_jobid = 0;
 
-	if (job_ptr->details->exc_node_bitmap)
+	if (job_ptr->details->exc_node_bitmap) {
 		orig_exc_nodes = job_ptr->details->exc_node_bitmap;
-	job_ptr->details->exc_node_bitmap = bit_copy(avail_bitmap);
-	bit_not(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);
 
 	rc = select_nodes(job_ptr, false, NULL);
 	bit_free(job_ptr->details->exc_node_bitmap);
@@ -417,13 +541,15 @@ static int _start_job(struct job_record *job_ptr, bitstr_t *avail_bitmap)
 #if __DEBUG
 		info("backfill: Jobs backfilled: %d", backfilled_jobs);
 #endif
-	} else if ((job_ptr->job_id != fail_jobid)
-		   && (rc != ESLURM_ACCOUNTING_POLICY)) {
-		char *node_list = bitmap2node_name(avail_bitmap);
+	} else if ((job_ptr->job_id != fail_jobid) &&
+		   (rc != ESLURM_ACCOUNTING_POLICY)) {
+		char *node_list;
+		bit_not(resv_bitmap);
+		node_list = bitmap2node_name(resv_bitmap);
 		/* This happens when a job has sharing disabled and
 		 * a selected node is still completing some job, 
 		 * which should be a temporary situation. */
-		verbose("backfill: Failed to start JobId=%u on %s: %s",
+		verbose("backfill: Failed to start JobId=%u in %s: %s",
 			job_ptr->job_id, node_list, slurm_strerror(rc));
 		xfree(node_list);
 		fail_jobid = job_ptr->job_id;
diff --git a/src/plugins/sched/backfill/backfill.h b/src/plugins/sched/backfill/backfill.h
index 2e894eaa6..0af52ec48 100644
--- a/src/plugins/sched/backfill/backfill.h
+++ b/src/plugins/sched/backfill/backfill.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2003 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/backfill/backfill_wrapper.c b/src/plugins/sched/backfill/backfill_wrapper.c
index b21ff971e..6a369fcf9 100644
--- a/src/plugins/sched/backfill/backfill_wrapper.c
+++ b/src/plugins/sched/backfill/backfill_wrapper.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2003 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jay Windley <jwindley@lnxi.com>, Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -44,6 +45,7 @@
 
 #include "src/common/plugin.h"
 #include "src/common/log.h"
+#include "src/common/slurm_priority.h"
 #include "src/common/macros.h"
 #include "src/slurmctld/slurmctld.h"
 #include "backfill.h"
@@ -142,10 +144,7 @@ u_int32_t
 slurm_sched_plugin_initial_priority( u_int32_t last_prio, 
 				     struct job_record *job_ptr )
 {
-	if (last_prio >= 2)
-		return (last_prio - 1);
-	else
-		return 1;
+	return priority_g_set(last_prio, job_ptr);
 }
 
 /**************************************************************************/
diff --git a/src/plugins/sched/builtin/Makefile.in b/src/plugins/sched/builtin/Makefile.in
index b1f665e0a..4df72f0bc 100644
--- a/src/plugins/sched/builtin/Makefile.in
+++ b/src/plugins/sched/builtin/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/sched/builtin/builtin_wrapper.c b/src/plugins/sched/builtin/builtin_wrapper.c
index 9abed1f5e..935582675 100644
--- a/src/plugins/sched/builtin/builtin_wrapper.c
+++ b/src/plugins/sched/builtin/builtin_wrapper.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -41,6 +42,7 @@
 #include "src/common/plugin.h"
 #include "src/common/log.h"
 #include "src/slurmctld/slurmctld.h"
+#include "src/common/slurm_priority.h"
 
 const char		plugin_name[]	= "SLURM Built-in Scheduler plugin";
 const char		plugin_type[]	= "sched/builtin";
@@ -109,10 +111,7 @@ u_int32_t
 slurm_sched_plugin_initial_priority( u_int32_t last_prio,
 				     struct job_record *job_ptr )
 {
-	if (last_prio >= 2)
-		return (last_prio - 1);
-	else
-		return 1;
+	return priority_g_set(last_prio, job_ptr);
 }
 
 /**************************************************************************/
diff --git a/src/plugins/sched/gang/Makefile.in b/src/plugins/sched/gang/Makefile.in
index 2183caff1..387f69e2f 100644
--- a/src/plugins/sched/gang/Makefile.in
+++ b/src/plugins/sched/gang/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/sched/gang/gang.c b/src/plugins/sched/gang/gang.c
index 86ab638b1..4fe9f6a7d 100644
--- a/src/plugins/sched/gang/gang.c
+++ b/src/plugins/sched/gang/gang.c
@@ -3,10 +3,11 @@
  *****************************************************************************
  *  Copyright (C) 2008 Hewlett-Packard Development Company, L.P.
  *  Written by Chris Holmes
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -77,10 +78,9 @@ enum gs_flags {
 
 struct gs_job {
 	uint32_t job_id;
+	struct job_record *job_ptr;
 	uint16_t sig_state;
 	uint16_t row_state;
-	bitstr_t *resmap;
-	uint16_t *alloc_cpus;
 };
 
 struct gs_part {
@@ -103,21 +103,21 @@ struct gs_part {
  *
  *       SUMMARY OF DATA MANAGEMENT
  *
- * For GS_NODE and GS_CPU:    bits in resmaps represent nodes
- * For GS_SOCKET and GS_CORE: bits in resmaps represent sockets
- * GS_NODE and GS_SOCKET ignore the CPU array
- * GS_CPU and GS_CORE use the CPU array to help resolve conflict
+ * For GS_NODE:   job_ptr->select_job->node_bitmap only
+ * For GS_CPU:    job_ptr->select_job->{node_bitmap, cpus}
+ * For GS_SOCKET: job_ptr->select_job->{node,core}_bitmap
+ * For GS_CORE:   job_ptr->select_job->{node,core}_bitmap
  *
  *         EVALUATION ALGORITHM
  *
- * For GS_NODE and GS_SOCKET: bits CANNOT conflict
- * For GS_CPUS and GS_CORE:  if bits conflict, make sure sum of CPUs per
- *                           resource don't exceed physical resource count
+ * For GS_NODE, GS_SOCKET, and GS_CORE, the bits CANNOT conflict
+ * For GS_CPU:  if bits conflict, make sure sum of CPUs per
+ *              resource don't exceed physical resource count
  *
  *
- * The j_ptr->alloc_cpus array is a collection of allocated values ONLY.
- * For every bit set in j_ptr->resmap, there is a corresponding element
- * (with an equal-to or less-than index value) in j_ptr->alloc_cpus. 
+ * The core_bitmap and cpus array are a collection of allocated values
+ * ONLY. For every bit set in node_bitmap, there is a corresponding
+ * element in cpus and a set of elements in the core_bitmap. 
  *
  ******************************************
  *
@@ -143,9 +143,11 @@ static uint32_t default_job_list_size = 64;
 static uint32_t gs_resmap_size = 0;
 static pthread_mutex_t data_mutex = PTHREAD_MUTEX_INITIALIZER;
 
-static uint32_t gs_num_groups = 0;
-static uint16_t *gs_cpus_per_res = NULL;
-static uint32_t *gs_cpu_count_reps = NULL;
+static uint16_t *gs_bits_per_node = NULL;
+static uint32_t *gs_bit_rep_count = NULL;
+
+static uint16_t *gs_sockets_per_node = NULL;
+static uint32_t *gs_socket_rep_count = NULL;
 
 static struct gs_part **gs_part_sorted = NULL;
 static uint32_t num_sorted_part = 0;
@@ -178,13 +180,13 @@ void _print_jobs(struct gs_part *p_ptr)
 		p_ptr->part_name, p_ptr->num_jobs, p_ptr->num_shadows);
 	for (i = 0; i < p_ptr->num_shadows; i++) {
 		debug3("sched/gang:   shadow job %u row_s %s, sig_s %s",
-			p_ptr->shadow[i]->job_id,
+			p_ptr->shadow[i]->job_ptr->job_id,
 			_print_flag(p_ptr->shadow[i]->row_state),
 			_print_flag(p_ptr->shadow[i]->sig_state));
 	}
 	for (i = 0; i < p_ptr->num_jobs; i++) {
 		debug3("sched/gang:   job %u row_s %s, sig_s %s",
-			p_ptr->job_list[i]->job_id,
+			p_ptr->job_list[i]->job_ptr->job_id,
 			_print_flag(p_ptr->job_list[i]->row_state),
 			_print_flag(p_ptr->job_list[i]->sig_state));
 	}
@@ -214,92 +216,151 @@ _get_gr_type() {
 	return GS_NODE;
 }
 
-/* Return resource data for the given node */
-static uint16_t
-_compute_resources(int i, char socket_count)
+
+static void _load_socket_cnt()
 {
-	if (gr_type == GS_NODE)
-		return 1;
+	uint32_t i, index = 0, array_size = GS_CPU_ARRAY_INCREMENT;
 
-	if (gr_type == GS_CPU) {
-		if (socket_count)
-			return 1;
-		if (gs_fast_schedule)
-			return node_record_table_ptr[i].config_ptr->cpus;
-		return node_record_table_ptr[i].cpus;
+	if (gr_type != GS_SOCKET)
+		return;
+
+	gs_sockets_per_node = xmalloc(array_size * sizeof(uint16_t));
+	gs_socket_rep_count = xmalloc(array_size * sizeof(uint32_t));
+
+	for (i = 0; i < node_record_count; i++) {
+		uint16_t sock;
+		if (gs_fast_schedule) {
+			sock = node_record_table_ptr[i].config_ptr->sockets;
+		} else {
+			sock = node_record_table_ptr[i].sockets;
+		}
+		if (gs_sockets_per_node[index] == sock) {
+			gs_socket_rep_count[index]++;
+			continue;
+		}
+		if (gs_socket_rep_count[index] > 0) {
+			/* advance index and check array_size */
+			index++;
+			if (index >= array_size) {
+				array_size += GS_CPU_ARRAY_INCREMENT;
+				xrealloc(gs_sockets_per_node,
+				 	array_size * sizeof(uint16_t));
+				xrealloc(gs_socket_rep_count,
+				 	array_size * sizeof(uint32_t));
+			}
+		}
+		gs_sockets_per_node[index] = sock;
+		gs_socket_rep_count[index] = 1;
 	}
-	
-	if (socket_count || gr_type == GS_SOCKET) {
-		if (gs_fast_schedule)
-			return node_record_table_ptr[i].config_ptr->sockets;
-		return node_record_table_ptr[i].sockets;
+	index++;
+	if (index >= array_size) {
+		array_size += GS_CPU_ARRAY_INCREMENT;
+		xrealloc(gs_sockets_per_node, array_size * sizeof(uint16_t));
+		xrealloc(gs_socket_rep_count, array_size * sizeof(uint32_t));
 	}
+	/* leave the last entries '0' */
 
-	/* gr_type == GS_CORE */
-	if (gs_fast_schedule)
-		return node_record_table_ptr[i].config_ptr->cores;
-	return node_record_table_ptr[i].cores;
+	for (i = 0; i < index; i++) {
+		debug3("sched/gang: _load_socket_cnt: grp %d bits %u reps %u",
+			i, gs_sockets_per_node[i], gs_socket_rep_count[i]);
+	}
 }
 
 /* For GS_CPU  the gs_phys_res_cnt is the total number of CPUs per node.
- * For GS_CORE the gs_phys_res_cnt is the total number of cores per socket per
- * node (currently no nodes are made with different core counts per socket) */
+ * For GS_CORE and GS_SOCKET the gs_phys_res_cnt is the total number of
+ * cores per per node.
+ * This function also sets gs_resmap_size;
+ */
 static void
 _load_phys_res_cnt()
 {
-	int i, array_size = GS_CPU_ARRAY_INCREMENT;
-	uint32_t adder;
+	uint32_t i, index = 0, array_size = GS_CPU_ARRAY_INCREMENT;
+
+	xfree(gs_bits_per_node);
+	xfree(gs_bit_rep_count);
+	xfree(gs_sockets_per_node);
+	xfree(gs_socket_rep_count);
 
-	xfree(gs_cpus_per_res);
-	xfree(gs_cpu_count_reps);
-	gs_num_groups = 0;
-	if (gr_type == GS_NODE || gr_type == GS_SOCKET)
+	if (gr_type != GS_CPU && gr_type != GS_CORE && gr_type != GS_SOCKET)
 		return;
 
-	gs_cpus_per_res   = xmalloc(array_size * sizeof(uint16_t));
-	gs_cpu_count_reps = xmalloc(array_size * sizeof(uint32_t));
+	gs_bits_per_node = xmalloc(array_size * sizeof(uint16_t));
+	gs_bit_rep_count = xmalloc(array_size * sizeof(uint32_t));
+
+	gs_resmap_size = 0;
 	for (i = 0; i < node_record_count; i++) {
-		uint16_t res = _compute_resources(i, 0);
-		if (gs_cpus_per_res[gs_num_groups] == res) {
-			adder = 1;
-			if (gr_type == GS_CORE)
-				adder = _compute_resources(i, 1);
-			gs_cpu_count_reps[gs_num_groups] += adder;
+		uint16_t bit;
+		if (gr_type == GS_CPU) {
+			if (gs_fast_schedule) 
+				bit = node_record_table_ptr[i].config_ptr->cpus;
+			else
+				bit = node_record_table_ptr[i].cpus;
+		} else {
+			if (gs_fast_schedule) {
+				bit  = node_record_table_ptr[i].config_ptr->cores;
+				bit *= node_record_table_ptr[i].config_ptr->sockets;
+			} else {
+				bit  = node_record_table_ptr[i].cores;
+				bit *= node_record_table_ptr[i].sockets;
+			}
+		}
+		gs_resmap_size += bit;
+		if (gs_bits_per_node[index] == bit) {
+			gs_bit_rep_count[index]++;
 			continue;
 		}
-		if (gs_cpus_per_res[gs_num_groups] != 0) {
-			gs_num_groups++;
-			if (gs_num_groups >= array_size) {
+		if (gs_bit_rep_count[index] > 0) {
+			/* advance index and check array_size */
+			index++;
+			if (index >= array_size) {
 				array_size += GS_CPU_ARRAY_INCREMENT;
-				xrealloc(gs_cpus_per_res,
-					 array_size * sizeof(uint16_t));
-				xrealloc(gs_cpu_count_reps,
-					 array_size * sizeof(uint32_t));
+				xrealloc(gs_bits_per_node,
+				 	array_size * sizeof(uint16_t));
+				xrealloc(gs_bit_rep_count,
+				 	array_size * sizeof(uint32_t));
 			}
 		}
-		gs_cpus_per_res[gs_num_groups] = res;
-		adder = 1;
-		if (gr_type == GS_CORE)
-			adder = _compute_resources(i, 1);
-		gs_cpu_count_reps[gs_num_groups] = adder;
+		gs_bits_per_node[index] = bit;
+		gs_bit_rep_count[index] = 1;
 	}
-	gs_num_groups++;
-	for (i = 0; i < gs_num_groups; i++) {
-		debug3("sched/gang: _load_phys_res_cnt: grp %d cpus %u reps %u",
-			i, gs_cpus_per_res[i], gs_cpu_count_reps[i]);
+	/* leave the last entries '0' */
+	index++;
+	if (index >= array_size) {
+		array_size += GS_CPU_ARRAY_INCREMENT;
+		xrealloc(gs_bits_per_node, array_size * sizeof(uint16_t));
+		xrealloc(gs_bit_rep_count, array_size * sizeof(uint32_t));
 	}
-	return;
+
+	for (i = 0; i < index; i++) {
+		debug3("sched/gang: _load_phys_res_cnt: grp %d bits %u reps %u",
+			i, gs_bits_per_node[i], gs_bit_rep_count[i]);
+
+	}
+	if (gr_type == GS_SOCKET)
+		_load_socket_cnt();
 }
 
-static uint16_t
-_get_phys_res_cnt(int res_index)
+static uint16_t _get_phys_bit_cnt(int node_index)
 {
 	int i = 0;
-	int pos = gs_cpu_count_reps[i++];
-	while (res_index >= pos) {
-		pos += gs_cpu_count_reps[i++];
+	int pos = gs_bit_rep_count[i++];
+	while (node_index >= pos) {
+		pos += gs_bit_rep_count[i++];
+	}
+	return gs_bits_per_node[i-1];
+}
+
+
+static uint16_t _get_socket_cnt(int node_index)
+{
+	int pos, i = 0;
+	if (!gs_socket_rep_count || !gs_sockets_per_node)
+		return 0;
+	pos = gs_socket_rep_count[i++];
+	while (node_index >= pos) {
+		pos += gs_socket_rep_count[i++];
 	}
-	return gs_cpus_per_res[i-1];
+	return gs_sockets_per_node[i-1];
 }
 
 
@@ -307,14 +368,11 @@ _get_phys_res_cnt(int res_index)
  * To destroy it, step down the array and destroy the pieces of
  * each gs_part entity, and then delete the whole array.
  * To destroy a gs_part entity, you need to delete the name, the
- * list of jobs, the shadow list, and the active_resmap. Each
- * job has a resmap that must be deleted also.
+ * list of jobs, the shadow list, and the active_resmap.
  */
-static void
-_destroy_parts() {
+static void _destroy_parts() {
 	int i;
 	struct gs_part *tmp, *ptr = gs_part_list;
-	struct gs_job *j_ptr;
 
 	while (ptr) {
 		tmp = ptr;
@@ -322,11 +380,7 @@ _destroy_parts() {
 
 		xfree(tmp->part_name);
 		for (i = 0; i < tmp->num_jobs; i++) {
-			j_ptr = tmp->job_list[i];
-			if (j_ptr->resmap)
-				bit_free(j_ptr->resmap);
-			xfree(j_ptr->alloc_cpus);
-			xfree(j_ptr);
+			xfree(tmp->job_list[i]);
 		}
 		xfree(tmp->shadow);
 		if (tmp->active_resmap)
@@ -339,8 +393,7 @@ _destroy_parts() {
 
 /* Build the gs_part_list. The job_list will be created later,
  * once a job is added. */
-static void
-_build_parts() {
+static void _build_parts() {
 	ListIterator part_iterator;
 	struct part_record *p_ptr;
 	int i, num_parts;
@@ -390,33 +443,36 @@ static int
 _find_job_index(struct gs_part *p_ptr, uint32_t job_id) {
 	int i;
 	for (i = 0; i < p_ptr->num_jobs; i++) {
-		if (p_ptr->job_list[i]->job_id == job_id)
+		if (p_ptr->job_list[i]->job_ptr->job_id == job_id)
 			return i;
 	}
 	return -1;
 }
 
-/* Return 1 if job fits in this row, else return 0 */
+/* Return 1 if job "cpu count" fits in this row, else return 0 */
 static int
-_can_cpus_fit(bitstr_t *setmap, struct gs_job *j_ptr, struct gs_part *p_ptr)
+_can_cpus_fit(struct job_record *job_ptr, struct gs_part *p_ptr)
 {
-	int i, size, a = 0;
+	int i, j, size;
 	uint16_t *p_cpus, *j_cpus;
+	select_job_res_t job_res = job_ptr->select_job;
 
-	size = bit_size(setmap);
+	if (gr_type != GS_CPU)
+		return 0;
+	
+	size = bit_size(job_res->node_bitmap);
 	p_cpus = p_ptr->active_cpus;
-	j_cpus = j_ptr->alloc_cpus;
+	j_cpus = job_res->cpus;
 
 	if (!p_cpus || !j_cpus)
 		return 0;
 
-	for (i = 0; i < size; i++) {
-		if (bit_test(setmap, i)) {
-			if (p_cpus[i]+j_cpus[a] > _get_phys_res_cnt(i))
+	for (j = 0, i = 0; i < size; i++) {
+		if (bit_test(job_res->node_bitmap, i)) {
+			if (p_cpus[i]+j_cpus[j] > _get_phys_bit_cnt(i))
 				return 0;
+			j++;
 		}
-		if (bit_test(j_ptr->resmap, i))
-			a++;
 	}
 	return 1;
 }
@@ -424,92 +480,141 @@ _can_cpus_fit(bitstr_t *setmap, struct gs_job *j_ptr, struct gs_part *p_ptr)
 
 /* Return 1 if job fits in this row, else return 0 */
 static int
-_job_fits_in_active_row(struct gs_job *j_ptr, struct gs_part *p_ptr)
+_job_fits_in_active_row(struct job_record *job_ptr, struct gs_part *p_ptr)
 {
+	select_job_res_t job_res = job_ptr->select_job;
 	int count;
-	bitstr_t *tmpmap;
+	bitstr_t *job_map;
 
 	if (p_ptr->active_resmap == NULL || p_ptr->jobs_active == 0)
 		return 1;
 
-	tmpmap = bit_copy(j_ptr->resmap);
-	if (!tmpmap)
-		fatal("sched/gang: memory allocation error");
+	if (gr_type == GS_CORE || gr_type == GS_SOCKET) {
+		return can_select_job_cores_fit(job_res, p_ptr->active_resmap,
+						gs_bits_per_node,
+						gs_bit_rep_count);
+	}
 	
-	bit_and(tmpmap, p_ptr->active_resmap);
+	/* gr_type == GS_NODE || gr_type == GS_CPU */
+	job_map = bit_copy(job_res->node_bitmap);
+	if (!job_map)
+		fatal("sched/gang: memory allocation error");
+	bit_and(job_map, p_ptr->active_resmap);
 	/* any set bits indicate contention for the same resource */
-	count = bit_set_count(tmpmap);
+	count = bit_set_count(job_map);
 	debug3("sched/gang: _job_fits_in_active_row: %d bits conflict", count);
-
-	if (count == 0) {
-		bit_free(tmpmap);
+	bit_free(job_map);
+	if (count == 0)
 		return 1;
+	if (gr_type == GS_CPU)
+		/* For GS_CPU we check the CPU arrays */
+		return _can_cpus_fit(job_ptr, p_ptr);
+
+	return 0;
+}
+
+
+/* a helper function for _add_job_to_active when GS_SOCKET
+ * a job has just been added to p_ptr->active_resmap, so set all cores of
+ * each used socket to avoid activating another job on the same socket */
+static void _fill_sockets(bitstr_t *job_nodemap, struct gs_part *p_ptr)
+{
+	uint32_t c, i, size;
+	int n, first_bit, last_bit;
+
+	if (!job_nodemap || !p_ptr || !p_ptr->active_resmap)
+		return;
+	size      = bit_size(job_nodemap);
+	first_bit = bit_ffs(job_nodemap);
+	last_bit  = bit_fls(job_nodemap);
+	if (first_bit < 0 || last_bit < 0)
+		fatal("sched/gang: _add_job_to_active: nodeless job?");
+
+	for (c = 0, n = 0; n < first_bit; n++) {
+		c += _get_phys_bit_cnt(n);
 	}
-	if (gr_type == GS_NODE || gr_type == GS_SOCKET) {
-		bit_free(tmpmap);
-		return 0;
+	for (n = first_bit; n <= last_bit; n++) {
+		uint16_t s, socks, cps, cores_per_node;
+		cores_per_node = _get_phys_bit_cnt(n);
+		if (bit_test(job_nodemap, n) == 0) {
+			c += cores_per_node;
+			continue;
+		}
+		socks = _get_socket_cnt(n);
+		cps = cores_per_node / socks;
+		for (s = 0; s < socks; s++) {
+			for (i = c; i < c+cps; i++) {
+				if (bit_test(p_ptr->active_resmap, i))
+					break;
+			}
+			if (i < c+cps) {
+				/* set all bits on this used socket */
+				bit_nset(p_ptr->active_resmap, c, c+cps-1);
+			}
+			c += cps;
+		}
 	}
-
-	/* for GS_CPU and GS_CORE, we need to compare CPU arrays and
-	 * see if the sum of CPUs on any one resource exceed the total
-	 * of physical resources available */
-	count = _can_cpus_fit(tmpmap, j_ptr, p_ptr);
-	bit_free(tmpmap);
-	return count;
 }
 
+
 /* Add the given job to the "active" structures of
  * the given partition and increment the run count */
 static void
-_add_job_to_active(struct gs_job *j_ptr, struct gs_part *p_ptr)
+_add_job_to_active(struct job_record *job_ptr, struct gs_part *p_ptr)
 {
-	int i, a, sz;
+	select_job_res_t job_res = job_ptr->select_job;
 
 	/* add job to active_resmap */
-	if (!p_ptr->active_resmap) {
-		/* allocate the active resmap */
-		debug3("sched/gang: _add_job_to_active: using job %u as active base",
-			j_ptr->job_id);
-		p_ptr->active_resmap = bit_copy(j_ptr->resmap);
-	} else if (p_ptr->jobs_active == 0) {
-		/* if the active_resmap exists but jobs_active is '0',
-		 * this means to overwrite the bitmap memory */
-		debug3("sched/gang: _add_job_to_active: copying job %u into active base",
-			j_ptr->job_id);
-		bit_copybits(p_ptr->active_resmap, j_ptr->resmap);
+	if (gr_type == GS_CORE || gr_type == GS_SOCKET) {
+		if (p_ptr->jobs_active == 0 && p_ptr->active_resmap) {
+			uint32_t size = bit_size(p_ptr->active_resmap);
+			bit_nclear(p_ptr->active_resmap, 0, size-1);
+		}
+		add_select_job_to_row(job_res, &(p_ptr->active_resmap),
+				      gs_bits_per_node, gs_bit_rep_count);
+		if (gr_type == GS_SOCKET)
+			_fill_sockets(job_res->node_bitmap, p_ptr);
 	} else {
-		/* add job to existing jobs in the active resmap */
-		debug3("sched/gang: _add_job_to_active: merging job %u into active resmap",
-			j_ptr->job_id);
-		bit_or(p_ptr->active_resmap, j_ptr->resmap);
+		/* GS_NODE or GS_CPU */
+		if (!p_ptr->active_resmap) {
+			debug3("sched/gang: _add_job_to_active: job %u first",
+				job_ptr->job_id);
+			p_ptr->active_resmap = bit_copy(job_res->node_bitmap);
+		} else if (p_ptr->jobs_active == 0) {
+			debug3("sched/gang: _add_job_to_active: job %u copied",
+				job_ptr->job_id);
+			bit_copybits(p_ptr->active_resmap,job_res->node_bitmap);
+		} else {
+			debug3("sched/gang: _add_job_to_active: adding job %u",
+				job_ptr->job_id);
+			bit_or(p_ptr->active_resmap, job_res->node_bitmap);
+		}
 	}
 	
 	/* add job to the active_cpus array */
-	if (gr_type == GS_CPU || gr_type == GS_CORE) {
-		sz = bit_size(p_ptr->active_resmap);
+	if (gr_type == GS_CPU) {
+		uint32_t i, a, sz = bit_size(p_ptr->active_resmap);
 		if (!p_ptr->active_cpus) {
 			/* create active_cpus array */
 			p_ptr->active_cpus = xmalloc(sz * sizeof(uint16_t));
 		}
 		if (p_ptr->jobs_active == 0) {
 			/* overwrite the existing values in active_cpus */
-			a = 0;
-			for (i = 0; i < sz; i++) {
-				if (bit_test(j_ptr->resmap, i)) {
+			for (a = 0, i = 0; i < sz; i++) {
+				if (bit_test(job_res->node_bitmap, i)) {
 					p_ptr->active_cpus[i] =
-						j_ptr->alloc_cpus[a++];
+						job_res->cpus[a++];
 				} else {
 					p_ptr->active_cpus[i] = 0;
 				}
 			}
 		} else {
 			/* add job to existing jobs in the active cpus */
-			a = 0;
-			for (i = 0; i < sz; i++) {
-				if (bit_test(j_ptr->resmap, i)) {
-					uint16_t limit = _get_phys_res_cnt(i);
+			for (a = 0, i = 0; i < sz; i++) {
+				if (bit_test(job_res->node_bitmap, i)) {
+					uint16_t limit = _get_phys_bit_cnt(i);
 					p_ptr->active_cpus[i] +=
-						j_ptr->alloc_cpus[a++];
+						job_res->cpus[a++];
 					/* when adding shadows, the resources
 					 * may get overcommitted */
 					if (p_ptr->active_cpus[i] > limit)
@@ -521,6 +626,7 @@ _add_job_to_active(struct gs_job *j_ptr, struct gs_part *p_ptr)
 	p_ptr->jobs_active += 1;
 }
 
+
 static void
 _signal_job(uint32_t job_id, int sig)
 {
@@ -541,94 +647,6 @@ _signal_job(uint32_t job_id, int sig)
 		      job_id);
 }
 
-static uint32_t
-_get_resmap_size()
-{
-	int i;
-	uint32_t count = 0;
-	/* if GS_NODE or GS_CPU, then size is the number of nodes */
-	if (gr_type == GS_NODE || gr_type == GS_CPU)
-		return node_record_count;
-	/* else the size is the total number of sockets on all nodes */
-	for (i = 0; i < node_record_count; i++) {
-		count += _compute_resources(i, 1);
-	}
-	return count;
-}
-
-/* Load the gs_job struct with the correct
- * resmap and CPU array information
- */
-static void
-_load_alloc_cpus(struct gs_job *j_ptr, bitstr_t *nodemap)
-{
-	int i, a, alloc_index, sz;
-
-	xfree(j_ptr->alloc_cpus);
-	sz = bit_set_count(j_ptr->resmap);
-	j_ptr->alloc_cpus = xmalloc(sz * sizeof(uint16_t));
-
-	a = 0;
-	alloc_index = 0;
-	for (i = 0; i < node_record_count; i++) {
-		uint16_t j, cores, sockets = _compute_resources(i, 1);
-		
-		if (bit_test(nodemap, i)) {
-			for (j = 0; j < sockets; j++) {
-				cores = select_g_get_job_cores(j_ptr->job_id,
-								alloc_index,
-								j);
-				if (cores > 0)
-					j_ptr->alloc_cpus[a++] = cores;
-			}
-			alloc_index++;
-		}
-	}
-}
-
-/* return an appropriate resmap given the granularity (GS_NODE/GS_CORE/etc.) */
-/* This code fails if the bitmap size has changed. */
-static bitstr_t *
-_get_resmap(bitstr_t *origmap, uint32_t job_id)
-{
-	int i, alloc_index = 0, map_index = 0;
-	bitstr_t *newmap;
-	
-	if (bit_size(origmap) != node_record_count) {
-		error("sched/gang: bitmap size has changed from %d for %u",
-			node_record_count, job_id);
-		fatal("sched/gang: inconsistent bitmap size error");
-	}
-	if (gr_type == GS_NODE || gr_type == GS_CPU) {
-		newmap = bit_copy(origmap);
-		return newmap;
-	}
-	
-	/* for GS_SOCKET and GS_CORE the resmap represents sockets */
-	newmap = bit_alloc(gs_resmap_size);
-	if (!newmap) {
-		fatal("sched/gang: memory error creating newmap");
-	}
-	for (i = 0; i < node_record_count; i++) {
-		uint16_t j, cores, sockets = _compute_resources(i, 1);
-		
-		if (bit_test(origmap, i)) {
-			for (j = 0; j < sockets; j++) {
-				cores = select_g_get_job_cores(job_id,
-								alloc_index,
-								j);
-				if (cores > 0)
-					bit_set(newmap, map_index);
-				map_index++;
-			}
-			alloc_index++;
-		} else {
-			/* no cores allocated on this node */
-			map_index += sockets;
-		}
-	}
-	return newmap;
-}
 
 /* construct gs_part_sorted as a sorted list of the current partitions */
 static void
@@ -670,6 +688,7 @@ _sort_partitions()
 	}
 }
 
+
 /* Scan the partition list. Add the given job as a "shadow" to every
  * partition with a lower priority than the given partition */
 static void
@@ -708,6 +727,7 @@ _cast_shadow(struct gs_job *j_ptr, uint16_t priority)
 	}
 }
 
+
 /* Remove the given job as a "shadow" from all partitions */
 static void
 _clear_shadow(struct gs_job *j_ptr)
@@ -737,6 +757,7 @@ _clear_shadow(struct gs_job *j_ptr)
 	}
 }
 
+
 /* Rebuild the active row BUT preserve the order of existing jobs.
  * This is called after one or more jobs have been removed from
  * the partition or if a higher priority "shadow" has been added
@@ -748,10 +769,12 @@ _update_active_row(struct gs_part *p_ptr, int add_new_jobs)
 	int i;
 	struct gs_job *j_ptr;
 
+	debug3("sched/gang: update_active_row: rebuilding part %s...",
+		p_ptr->part_name);
 	/* rebuild the active row, starting with any shadows */
 	p_ptr->jobs_active = 0;
 	for (i = 0; p_ptr->shadow && p_ptr->shadow[i]; i++) {
-		_add_job_to_active(p_ptr->shadow[i], p_ptr);
+		_add_job_to_active(p_ptr->shadow[i]->job_ptr, p_ptr);
 	}
 	
 	/* attempt to add the existing 'active' jobs */
@@ -759,8 +782,8 @@ _update_active_row(struct gs_part *p_ptr, int add_new_jobs)
 		j_ptr = p_ptr->job_list[i];
 		if (j_ptr->row_state != GS_ACTIVE)
 			continue;
-		if (_job_fits_in_active_row(j_ptr, p_ptr)) {
-			_add_job_to_active(j_ptr, p_ptr);
+		if (_job_fits_in_active_row(j_ptr->job_ptr, p_ptr)) {
+			_add_job_to_active(j_ptr->job_ptr, p_ptr);
 			_cast_shadow(j_ptr, p_ptr->priority);
 			
 		} else {
@@ -779,8 +802,8 @@ _update_active_row(struct gs_part *p_ptr, int add_new_jobs)
 		j_ptr = p_ptr->job_list[i];
 		if (j_ptr->row_state != GS_FILLER)
 			continue;
-		if (_job_fits_in_active_row(j_ptr, p_ptr)) {
-			_add_job_to_active(j_ptr, p_ptr);
+		if (_job_fits_in_active_row(j_ptr->job_ptr, p_ptr)) {
+			_add_job_to_active(j_ptr->job_ptr, p_ptr);
 			_cast_shadow(j_ptr, p_ptr->priority);
 		} else {
 			/* this job has been preempted by a shadow job.
@@ -802,8 +825,8 @@ _update_active_row(struct gs_part *p_ptr, int add_new_jobs)
 		j_ptr = p_ptr->job_list[i];
 		if (j_ptr->row_state != GS_NO_ACTIVE)
 			continue;
-		if (_job_fits_in_active_row(j_ptr, p_ptr)) {
-			_add_job_to_active(j_ptr, p_ptr);
+		if (_job_fits_in_active_row(j_ptr->job_ptr, p_ptr)) {
+			_add_job_to_active(j_ptr->job_ptr, p_ptr);
 			_cast_shadow(j_ptr, p_ptr->priority);
 			/* note that this job is a "filler" for this row */
 			j_ptr->row_state = GS_FILLER;
@@ -846,13 +869,14 @@ _remove_job_from_part(uint32_t job_id, struct gs_part *p_ptr)
 	if (!job_id || !p_ptr)
 		return;
 
-	debug3("sched/gang: _remove_job_from_part: removing job %u", job_id);
 	/* find the job in the job_list */
 	i = _find_job_index(p_ptr, job_id);
 	if (i < 0)
 		/* job not found */
 		return;
 
+	debug3("sched/gang: _remove_job_from_part: removing job %u from %s",
+		job_id, p_ptr->part_name);
 	j_ptr = p_ptr->job_list[i];
 	
 	/* remove any shadow first */
@@ -871,11 +895,7 @@ _remove_job_from_part(uint32_t job_id, struct gs_part *p_ptr)
 			j_ptr->job_id);
 		_signal_job(j_ptr->job_id, GS_RESUME);
 	}
-	bit_free(j_ptr->resmap);
-	j_ptr->resmap = NULL;
-	if (j_ptr->alloc_cpus)
-		xfree(j_ptr->alloc_cpus);
-	j_ptr->alloc_cpus = NULL;
+	j_ptr->job_ptr = NULL;
 	xfree(j_ptr);
 	
 	return;
@@ -886,17 +906,19 @@ _remove_job_from_part(uint32_t job_id, struct gs_part *p_ptr)
  * lower priority than the given partition. Return the sig state of the
  * job (GS_SUSPEND or GS_RESUME) */
 static uint16_t
-_add_job_to_part(struct gs_part *p_ptr, uint32_t job_id, bitstr_t *job_bitmap)
+_add_job_to_part(struct gs_part *p_ptr, struct job_record *job_ptr)
 {
 	int i;
 	struct gs_job *j_ptr;
 
 	xassert(p_ptr);
-	xassert(job_id > 0);
-	xassert(job_bitmap);
+	xassert(job_ptr->job_id > 0);
+	xassert(job_ptr->select_job);
+	xassert(job_ptr->select_job->node_bitmap);
+	xassert(job_ptr->select_job->core_bitmap);
 
-	debug3("sched/gang: _add_job_to_part: adding job %u", job_id);
-	_print_jobs(p_ptr);
+	debug3("sched/gang: _add_job_to_part: adding job %u to %s",
+		job_ptr->job_id, p_ptr->part_name);
 	
 	/* take care of any memory needs */
 	if (!p_ptr->job_list) {
@@ -907,15 +929,15 @@ _add_job_to_part(struct gs_part *p_ptr, uint32_t job_id, bitstr_t *job_bitmap)
 	}
 	
 	/* protect against duplicates */
-	i = _find_job_index(p_ptr, job_id);
+	i = _find_job_index(p_ptr, job_ptr->job_id);
 	if (i >= 0) {
 		/* This job already exists, but the resource allocation
 		 * may have changed. In any case, remove the existing
 		 * job before adding this new one.
 		 */
 		debug3("sched/gang: _add_job_to_part: duplicate job %u detected",
-			job_id);
-		_remove_job_from_part(job_id, p_ptr);
+			job_ptr->job_id);
+		_remove_job_from_part(job_ptr->job_id, p_ptr);
 		_update_active_row(p_ptr, 0);
 	}
 	
@@ -930,23 +952,19 @@ _add_job_to_part(struct gs_part *p_ptr, uint32_t job_id, bitstr_t *job_bitmap)
 	j_ptr = xmalloc(sizeof(struct gs_job));
 	
 	/* gather job info */
-	j_ptr->job_id    = job_id;
+	j_ptr->job_id    = job_ptr->job_id;
+	j_ptr->job_ptr   = job_ptr;
 	j_ptr->sig_state = GS_RESUME;  /* all jobs are running initially */
 	j_ptr->row_state = GS_NO_ACTIVE; /* job is not in the active row */
-	j_ptr->resmap    = _get_resmap(job_bitmap, job_id);
-	j_ptr->alloc_cpus = NULL;
-	if (gr_type == GS_CORE || gr_type == GS_CPU) {
-		_load_alloc_cpus(j_ptr, job_bitmap);
-	}
 
 	/* append this job to the job_list */
 	p_ptr->job_list[p_ptr->num_jobs++] = j_ptr;
 	
 	/* determine the immediate fate of this job (run or suspend) */
-	if (_job_fits_in_active_row(j_ptr, p_ptr)) {
-		debug3("sched/gang: _add_job_to_part: adding job %u to active row", 
-			job_id);
-		_add_job_to_active(j_ptr, p_ptr);
+	if (_job_fits_in_active_row(job_ptr, p_ptr)) {
+		debug3("sched/gang: _add_job_to_part: job %u remains running", 
+			job_ptr->job_id);
+		_add_job_to_active(job_ptr, p_ptr);
 		/* note that this job is a "filler" for this row */
 		j_ptr->row_state = GS_FILLER;
 		/* all jobs begin in the run state, so
@@ -958,8 +976,8 @@ _add_job_to_part(struct gs_part *p_ptr, uint32_t job_id, bitstr_t *job_bitmap)
 
 	} else {
 		debug3("sched/gang: _add_job_to_part: suspending job %u",
-			job_id);
-		_signal_job(j_ptr->job_id, GS_SUSPEND);
+			job_ptr->job_id);
+		_signal_job(job_ptr->job_id, GS_SUSPEND);
 		j_ptr->sig_state = GS_SUSPEND;
 	}
 	
@@ -1015,8 +1033,7 @@ _scan_slurm_job_list()
 			 */
 				_signal_job(job_ptr->job_id, GS_RESUME);
 			
-			_add_job_to_part(p_ptr, job_ptr->job_id,
-					 job_ptr->node_bitmap);
+			_add_job_to_part(p_ptr, job_ptr);
 			continue;
 		}
 		
@@ -1086,7 +1103,6 @@ gs_init()
 	timeslicer_seconds = slurmctld_conf.sched_time_slice;
 	gs_fast_schedule = slurm_get_fast_schedule();
 	gr_type = _get_gr_type();
-	gs_resmap_size = _get_resmap_size();
 
 	/* load the physical resource count data */
 	_load_phys_res_cnt();
@@ -1128,9 +1144,10 @@ gs_fini()
 	_destroy_parts();
 	xfree(gs_part_sorted);
 	gs_part_sorted = NULL;
-	xfree(gs_cpus_per_res);
-	xfree(gs_cpu_count_reps);
-	gs_num_groups = 0;
+	xfree(gs_bits_per_node);
+	xfree(gs_bit_rep_count);
+	xfree(gs_sockets_per_node);
+	xfree(gs_socket_rep_count);
 	pthread_mutex_unlock(&data_mutex);
 	debug3("sched/gang: leaving gs_fini");
 
@@ -1148,8 +1165,7 @@ gs_job_start(struct job_record *job_ptr)
 	pthread_mutex_lock(&data_mutex);
 	p_ptr = _find_gs_part(job_ptr->partition);
 	if (p_ptr) {
-		job_state = _add_job_to_part(p_ptr, job_ptr->job_id,
-						job_ptr->node_bitmap);
+		job_state = _add_job_to_part(p_ptr, job_ptr);
 		/* if this job is running then check for preemption */
 		if (job_state == GS_RESUME)
 			_update_all_active_rows();
@@ -1244,6 +1260,11 @@ gs_reconfig()
 
 	old_part_list = gs_part_list;
 	gs_part_list = NULL;
+
+	/* reset global data */
+	gs_fast_schedule = slurm_get_fast_schedule();
+	gr_type = _get_gr_type();
+	_load_phys_res_cnt();
 	_build_parts();
 	
 	/* scan the old part list and add existing jobs to the new list */
@@ -1287,8 +1308,7 @@ gs_reconfig()
 			/* transfer the job as long as it is still active */
 			if (job_ptr->job_state == JOB_SUSPENDED ||
 			    job_ptr->job_state == JOB_RUNNING) {				
-				_add_job_to_part(newp_ptr, job_ptr->job_id,
-						 job_ptr->node_bitmap);
+				_add_job_to_part(newp_ptr, job_ptr);
 			}
 		}
 	}
@@ -1326,13 +1346,13 @@ _build_active_row(struct gs_part *p_ptr)
 	
 	/* apply all shadow jobs first */
 	for (i = 0; i < p_ptr->num_shadows; i++) {
-		_add_job_to_active(p_ptr->shadow[i], p_ptr);
+		_add_job_to_active(p_ptr->shadow[i]->job_ptr, p_ptr);
 	}
 	
 	/* attempt to add jobs from the job_list in the current order */
 	for (i = 0; i < p_ptr->num_jobs; i++) {
-		if (_job_fits_in_active_row(p_ptr->job_list[i], p_ptr)) {
-			_add_job_to_active(p_ptr->job_list[i], p_ptr);
+		if (_job_fits_in_active_row(p_ptr->job_list[i]->job_ptr, p_ptr)) {
+			_add_job_to_active(p_ptr->job_list[i]->job_ptr, p_ptr);
 			p_ptr->job_list[i]->row_state = GS_ACTIVE;
 		}
 	}
@@ -1360,7 +1380,6 @@ _cycle_job_list(struct gs_part *p_ptr)
 	struct gs_job *j_ptr;
 	
 	debug3("sched/gang: entering _cycle_job_list");
-	_print_jobs(p_ptr);
 	/* re-prioritize the job_list and set all row_states to GS_NO_ACTIVE */
 	for (i = 0; i < p_ptr->num_jobs; i++) {
 		while (p_ptr->job_list[i]->row_state == GS_ACTIVE) {
@@ -1377,7 +1396,6 @@ _cycle_job_list(struct gs_part *p_ptr)
 			
 	}
 	debug3("sched/gang: _cycle_job_list reordered job list:");
-	_print_jobs(p_ptr);
 	/* Rebuild the active row. */
 	_build_active_row(p_ptr);
 	debug3("sched/gang: _cycle_job_list new active job list:");
diff --git a/src/plugins/sched/gang/gang.h b/src/plugins/sched/gang/gang.h
index 520ea513a..97acc00e4 100644
--- a/src/plugins/sched/gang/gang.h
+++ b/src/plugins/sched/gang/gang.h
@@ -3,10 +3,11 @@
  *****************************************************************************
  *  Copyright (C) 2008 Hewlett-Packard Development Company, L.P.
  *  Written by Chris Holmes
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/gang/sched_gang.c b/src/plugins/sched/gang/sched_gang.c
index 52095c6a8..73187e841 100644
--- a/src/plugins/sched/gang/sched_gang.c
+++ b/src/plugins/sched/gang/sched_gang.c
@@ -3,10 +3,11 @@
  *****************************************************************************
  *  Copyright (C) 2008 Hewlett-Packard Development Company, L.P.
  *  Written by Chris Holmes
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -35,6 +36,7 @@
 \*****************************************************************************/
 
 #include "./gang.h"
+#include "src/common/slurm_priority.h"
 
 const char		plugin_name[]	= "Gang Scheduler plugin";
 const char		plugin_type[]	= "sched/gang";
@@ -111,10 +113,7 @@ slurm_sched_plugin_initial_priority( uint32_t last_prio,
 {
 	/* ignored for timeslicing, but will be used to support priority */
 
-	if (last_prio >= 2)
-		return (last_prio - 1);
-	else
-		return 1;
+	return priority_g_set(last_prio, job_ptr);
 }
 
 /**************************************************************************/
diff --git a/src/plugins/sched/hold/Makefile.in b/src/plugins/sched/hold/Makefile.in
index 35ac58b0a..7dfe7247b 100644
--- a/src/plugins/sched/hold/Makefile.in
+++ b/src/plugins/sched/hold/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/sched/hold/hold_wrapper.c b/src/plugins/sched/hold/hold_wrapper.c
index 7e6dc6405..60bba4825 100644
--- a/src/plugins/sched/hold/hold_wrapper.c
+++ b/src/plugins/sched/hold/hold_wrapper.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -46,6 +47,7 @@
 #include "src/common/plugin.h"
 #include "src/common/log.h"
 #include "src/slurmctld/slurmctld.h"
+#include "src/common/slurm_priority.h"
 
 const char		plugin_name[]	= "SLURM Hold Scheduler plugin";
 const char		plugin_type[]	= "sched/hold";
@@ -119,10 +121,7 @@ slurm_sched_plugin_initial_priority( u_int32_t last_prio,
 	if (stat("/etc/slurm.hold", &buf) == 0)
 		return 0;	/* hold all new jobs */
 
-	if (last_prio >= 2)
-		return (last_prio - 1);
-	else
-		return 1;
+	return priority_g_set(last_prio, job_ptr);
 }
 
 /**************************************************************************/
diff --git a/src/plugins/sched/wiki/Makefile.in b/src/plugins/sched/wiki/Makefile.in
index 45183cd16..60fb5ddd8 100644
--- a/src/plugins/sched/wiki/Makefile.in
+++ b/src/plugins/sched/wiki/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -111,6 +115,10 @@ 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@
diff --git a/src/plugins/sched/wiki/cancel_job.c b/src/plugins/sched/wiki/cancel_job.c
index a74921f06..1deb25f9c 100644
--- a/src/plugins/sched/wiki/cancel_job.c
+++ b/src/plugins/sched/wiki/cancel_job.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki/get_jobs.c b/src/plugins/sched/wiki/get_jobs.c
index 3989f614f..3362472cb 100644
--- a/src/plugins/sched/wiki/get_jobs.c
+++ b/src/plugins/sched/wiki/get_jobs.c
@@ -1,13 +1,15 @@
 /*****************************************************************************\
  *  get_jobs.c - Process Wiki get job info request
  *****************************************************************************
- *  Copyright (C) 2006 The Regents of the University of California.
+ *  Copyright (C) 2006-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -15,7 +17,7 @@
  *  any later version.
  *
  *  In addition, as a special exception, the copyright holders give permission 
- *  to link the code of portions of this program with the OpenSSL library under 
+ *  to link the code of portions of this program with the OpenSSL library under
  *  certain conditions as described in each individual source file, and 
  *  distribute linked combinations including the two. You must obey the GNU 
  *  General Public License in all respects for all of the code used other than 
@@ -49,6 +51,7 @@
 static char *	_dump_all_jobs(int *job_cnt, time_t update_time);
 static char *	_dump_job(struct job_record *job_ptr, time_t update_time);
 static uint16_t _get_job_cpus_per_task(struct job_record *job_ptr);
+static uint16_t _get_job_tasks_per_node(struct job_record *job_ptr);
 static uint32_t	_get_job_end_time(struct job_record *job_ptr);
 static char *	_get_job_features(struct job_record *job_ptr);
 static uint32_t	_get_job_min_disk(struct job_record *job_ptr);
@@ -81,16 +84,19 @@ static char *	_task_list(struct job_record *job_ptr);
  *	WCLIMIT=<secs>;			wall clock time limit, seconds
  *	TASKS=<cpus>;			CPUs required
  *	[NODES=<nodes>;]		count of nodes required
+ *	[TASKSPERNODE=<cnt>;]		tasks required per node
  *	DPROCS=<cpus_per_task>;		count of CPUs required per task
  *	QUEUETIME=<uts>;		submission time
  *	STARTTIME=<uts>;		time execution started
  *	PARTITIONMASK=<partition>;	partition name
+ *	[DMEM=<mbytes>;]		MB of memory required per cpu
  *	RMEM=<MB>;			MB of memory required
  *	RDISK=<MB>;			MB of disk space required
  *	[COMPLETETIME=<uts>;]		termination time
  *	[SUSPENDTIME=<secs>;]		seconds that job has been suspended
- *	[QOS=<quality_of_service>];	quality of service
- *	[ACCOUNT=<bank_account>];	bank account name
+ *	[ACCOUNT=<bank_account>;]	bank account name
+ *	[QOS=<quality_of_service>;]	quality of service
+ *	[RCLASS=<resource_class>;]	resource class
  *	[COMMENT=<whatever>;]		job dependency or account number
  *	UNAME=<user_name>;		user name
  *	GNAME=<group_name>;		group name
@@ -203,7 +209,7 @@ static char *	_dump_job(struct job_record *job_ptr, time_t update_time)
 {
 	char tmp[16384], *buf = NULL;
 	char *uname, *gname;
-	uint32_t end_time, suspend_time;
+	uint32_t end_time, suspend_time, min_mem;
 
 	if (!job_ptr)
 		return NULL;
@@ -265,10 +271,18 @@ static char *	_dump_job(struct job_record *job_ptr, time_t update_time)
 	xstrcat(buf, tmp);
 
 	if (!IS_JOB_FINISHED(job_ptr)) {
+	        uint16_t tpn;
 		snprintf(tmp, sizeof(tmp),
 			"NODES=%u;",
 			_get_job_min_nodes(job_ptr));
 		xstrcat(buf, tmp);
+		tpn = _get_job_tasks_per_node(job_ptr);
+		if (tpn > 0) {
+			snprintf(tmp, sizeof(tmp),
+				 "TASKPERNODE=%u;",
+				 tpn);
+			xstrcat(buf, tmp);
+		}
 	}
 
 	snprintf(tmp, sizeof(tmp),
@@ -283,6 +297,13 @@ static char *	_dump_job(struct job_record *job_ptr, time_t update_time)
 		job_ptr->partition);
 	xstrcat(buf, tmp);
 
+	min_mem = _get_job_min_mem(job_ptr);
+	if (min_mem & MEM_PER_CPU) {
+		snprintf(tmp, sizeof(tmp),
+			"DMEM=%u;", min_mem & (~MEM_PER_CPU));
+		xstrcat(buf, tmp);
+	}
+
 	snprintf(tmp, sizeof(tmp),
 		"RMEM=%u;RDISK=%u;",
 		_get_job_min_mem(job_ptr),
@@ -305,7 +326,7 @@ static char *	_dump_job(struct job_record *job_ptr, time_t update_time)
 
 	if (job_ptr->account) {
 		/* allow QOS spec in form "qos-name" */
-		if (!strncmp(job_ptr->account,"qos-",4)) {
+		if (!strncmp(job_ptr->account, "qos-", 4)) {
 			snprintf(tmp, sizeof(tmp),
 				 "QOS=%s;", job_ptr->account + 4);
 		} else {
@@ -316,9 +337,33 @@ static char *	_dump_job(struct job_record *job_ptr, time_t update_time)
 	}
 
 	if (job_ptr->comment && job_ptr->comment[0]) {
-		snprintf(tmp,sizeof(tmp),
-			"COMMENT=%s;", job_ptr->comment);
-		xstrcat(buf,tmp);
+		/* Parse comment for class/qos spec */
+		char *copy;
+		char *cred, *value;
+		copy = xstrdup(job_ptr->comment);
+		cred = strtok(copy, ",");
+		while (cred != NULL) {
+			if (!strncmp(cred, "qos:", 4)) {
+				value = &cred[4];
+				if (value[0] != '\0') {
+					snprintf(tmp, sizeof(tmp),
+						 "QOS=%s;", value);
+					xstrcat(buf, tmp);
+				}
+			} else if (!strncmp(cred, "class:", 6)) {
+				value = &cred[6];
+				if (value[0] != '\0') {
+					snprintf(tmp, sizeof(tmp),
+						"RCLASS=%s;", value);
+					xstrcat(buf, tmp);
+				}
+			}
+			cred = strtok(NULL, ",");
+		}
+		xfree(copy);
+		snprintf(tmp, sizeof(tmp),
+			 "COMMENT=%s;", job_ptr->comment);
+		xstrcat(buf, tmp);
 	}
 
 	if (job_ptr->details &&
@@ -345,6 +390,16 @@ static uint16_t _get_job_cpus_per_task(struct job_record *job_ptr)
 	return cpus_per_task;
 }
 
+
+static uint16_t _get_job_tasks_per_node(struct job_record *job_ptr)
+{
+	uint16_t tasks_per_node = 0;
+
+	if (job_ptr->details && job_ptr->details->ntasks_per_node)
+		tasks_per_node = job_ptr->details->ntasks_per_node;
+	return tasks_per_node;
+}
+
 static uint32_t _get_job_min_mem(struct job_record *job_ptr)
 {
 	if (job_ptr->details)
@@ -526,20 +581,22 @@ static char * _task_list(struct job_record *job_ptr)
 	int i, j, task_cnt;
 	char *buf = NULL, *host;
 	hostlist_t hl = hostlist_create(job_ptr->nodes);
+	select_job_res_t select_ptr = job_ptr->select_job;
 
+	xassert(select_ptr && select_ptr->cpus);
 	buf = xstrdup("");
 	if (hl == NULL)
 		return buf;
 
-	for (i=0; i<job_ptr->alloc_lps_cnt; i++) {
+	for (i=0; i<select_ptr->nhosts; i++) {
 		host = hostlist_shift(hl);
 		if (host == NULL) {
-			error("bad alloc_lps_cnt for job %u (%s, %d)", 
+			error("bad node_cnt for job %u (%s, %d)", 
 				job_ptr->job_id, job_ptr->nodes,
-				job_ptr->alloc_lps_cnt);
+				job_ptr->node_cnt);
 			break;
 		}
-		task_cnt = job_ptr->alloc_lps[i];
+		task_cnt = select_ptr->cpus[i];
 		if (job_ptr->details && job_ptr->details->cpus_per_task)
 			task_cnt /= job_ptr->details->cpus_per_task;
 		for (j=0; j<task_cnt; j++) {
diff --git a/src/plugins/sched/wiki/get_nodes.c b/src/plugins/sched/wiki/get_nodes.c
index 02f5b4dd4..0128e90be 100644
--- a/src/plugins/sched/wiki/get_nodes.c
+++ b/src/plugins/sched/wiki/get_nodes.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -132,10 +133,14 @@ static char *	_dump_all_nodes(int *node_cnt, time_t update_time)
 	int i, cnt = 0;
 	struct node_record *node_ptr = node_record_table_ptr;
 	char *tmp_buf, *buf = NULL;
+	uint16_t base_state;
 
 	for (i=0; i<node_record_count; i++, node_ptr++) {
 		if (node_ptr->name == NULL)
 			continue;
+		base_state = node_ptr->node_state & NODE_STATE_BASE;
+		if (base_state == NODE_STATE_FUTURE)
+			continue;
 		tmp_buf = _dump_node(node_ptr, update_time);
 		if (cnt > 0)
 			xstrcat(buf, "#");
diff --git a/src/plugins/sched/wiki/hostlist.c b/src/plugins/sched/wiki/hostlist.c
index 1c3214891..50d4555db 100644
--- a/src/plugins/sched/wiki/hostlist.c
+++ b/src/plugins/sched/wiki/hostlist.c
@@ -2,12 +2,14 @@
  *  hostlist.c - Convert hostlist expressions between Slurm and Moab formats
  *****************************************************************************
  *  Copyright (C) 2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -81,7 +83,7 @@ extern char * moab2slurm_task_list(char *moab_tasklist, int *task_cnt)
 	static uint32_t cr_test = 0, cr_enabled = 0;
 
 	if (cr_test == 0) {
-		select_g_get_info_from_plugin(SELECT_CR_PLUGIN,
+		select_g_get_info_from_plugin(SELECT_CR_PLUGIN, NULL,
 						&cr_enabled);
 		cr_test = 1;
 	}
@@ -161,32 +163,43 @@ extern char * slurm_job2moab_task_list(struct job_record *job_ptr)
 /* Return task list in Moab format 1: tux0:tux0:tux1:tux1:tux2 */
 static char * _task_list(struct job_record *job_ptr)
 {
-	int i, j;
+	int i, j, node_inx = 0, task_cnt;
 	char *buf = NULL, *host;
-	hostlist_t hl = hostlist_create(job_ptr->nodes);
+	select_job_res_t select_ptr = job_ptr->select_job;
 
-	if (hl == NULL) {
-		error("hostlist_create error for job %u, %s",
-			job_ptr->job_id, job_ptr->nodes);
-		return buf;
-	}
+	xassert(select_ptr);
+	for (i=0; i<select_ptr->nhosts; i++) {
+		if (i == 0) {
+			xassert(select_ptr->cpus && select_ptr->node_bitmap);
+			node_inx = bit_ffs(select_ptr->node_bitmap);
+		} else {
+			for (node_inx++; node_inx<node_record_count; 
+			     node_inx++) {
+				if (bit_test(select_ptr->node_bitmap,node_inx))
+					break;
+			}
+			if (node_inx >= node_record_count) {
+				error("Improperly formed select_job for %u",
+				      job_ptr->job_id);
+				break;
+			}
+		}
+		host = node_record_table_ptr[node_inx].name;
 
-	for (i=0; i<job_ptr->alloc_lps_cnt; i++) {
-		host = hostlist_shift(hl);
-		if (host == NULL) {
-			error("bad alloc_lps_cnt for job %u (%s, %d)", 
-				job_ptr->job_id, job_ptr->nodes,
-				job_ptr->alloc_lps_cnt);
-			break;
+		task_cnt = select_ptr->cpus[i];
+		if (job_ptr->details && job_ptr->details->cpus_per_task)
+			task_cnt /= job_ptr->details->cpus_per_task;
+		if (task_cnt < 1) {
+			error("Invalid task_cnt for job %u on node %s",
+			      job_ptr->job_id, host);
+			task_cnt = 1;
 		}
-		for (j=0; j<job_ptr->alloc_lps[i]; j++) {
+		for (j=0; j<task_cnt; j++) {
 			if (buf)
 				xstrcat(buf, ":");
 			xstrcat(buf, host);
 		}
-		free(host);
 	}
-	hostlist_destroy(hl);
 	return buf;
 }
 
@@ -248,27 +261,39 @@ static void _append_hl_buf(char **buf, hostlist_t *hl_tmp, int *reps)
 /* Return task list in Moab format 2: tux[0-1]*2:tux2 */
 static char * _task_list_exp(struct job_record *job_ptr)
 {
-	int i, reps = -1;
+	int i, node_inx = 0, reps = -1, task_cnt;
 	char *buf = NULL, *host;
-	hostlist_t hl = hostlist_create(job_ptr->nodes);
 	hostlist_t hl_tmp = (hostlist_t) NULL;
+	select_job_res_t select_ptr = job_ptr->select_job;
 
-	if (hl == NULL) {
-		error("hostlist_create error for job %u, %s",
-			job_ptr->job_id, job_ptr->nodes);
-		return buf;
-	}
-
-	for (i=0; i<job_ptr->alloc_lps_cnt; i++) {
-		host = hostlist_shift(hl);
-		if (host == NULL) {
-			error("bad alloc_lps_cnt for job %u (%s, %d)", 
-				job_ptr->job_id, job_ptr->nodes,
-				job_ptr->alloc_lps_cnt);
-			break;
+	xassert(select_ptr);
+	for (i=0; i<select_ptr->nhosts; i++) {
+		if (i == 0) {
+			xassert(select_ptr->cpus && select_ptr->node_bitmap);
+			node_inx = bit_ffs(select_ptr->node_bitmap);
+		} else {
+			for (node_inx++; node_inx<node_record_count; 
+			     node_inx++) {
+				if (bit_test(select_ptr->node_bitmap,node_inx))
+					break;
+			}
+			if (node_inx >= node_record_count) {
+				error("Improperly formed select_job for %u",
+				      job_ptr->job_id);
+				break;
+			}
 		}
+		host = node_record_table_ptr[node_inx].name;
 
-		if (reps == job_ptr->alloc_lps[i]) {
+		task_cnt = select_ptr->cpus[i];
+		if (job_ptr->details && job_ptr->details->cpus_per_task)
+			task_cnt /= job_ptr->details->cpus_per_task;
+		if (task_cnt < 1) {
+			error("Invalid task_cnt for job %u on node %s",
+			      job_ptr->job_id, host);
+			task_cnt = 1;
+		}
+		if (reps == task_cnt) {
 			/* append to existing hostlist record */
 			if (hostlist_push(hl_tmp, host) == 0)
 				error("hostlist_push failure");
@@ -279,13 +304,11 @@ static char * _task_list_exp(struct job_record *job_ptr)
 			/* start new hostlist record */
 			hl_tmp = hostlist_create(host);
 			if (hl_tmp)
-				reps = job_ptr->alloc_lps[i];
+				reps = task_cnt;
 			else
 				error("hostlist_create failure");
 		}
-		free(host);
 	}
-	hostlist_destroy(hl);
 	if (hl_tmp)
 		_append_hl_buf(&buf, &hl_tmp, &reps);
 	return buf;
diff --git a/src/plugins/sched/wiki/job_modify.c b/src/plugins/sched/wiki/job_modify.c
index 263e418bd..b1ede96fe 100644
--- a/src/plugins/sched/wiki/job_modify.c
+++ b/src/plugins/sched/wiki/job_modify.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki/msg.c b/src/plugins/sched/wiki/msg.c
index 4b7ebfd6c..5ae992e74 100644
--- a/src/plugins/sched/wiki/msg.c
+++ b/src/plugins/sched/wiki/msg.c
@@ -1,13 +1,15 @@
 /*****************************************************************************\
  *  msg.c - Message/communcation manager for Wiki plugin
  *****************************************************************************
- *  Copyright (C) 2006 The Regents of the University of California.
+ *  Copyright (C) 2006-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -35,10 +37,11 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
 \*****************************************************************************/
 
-#include "./crypto.h"
-#include "./msg.h"
-#include "src/common/uid.h"
-#include "src/slurmctld/locks.h"
+#include "slurm/slurm.h"
+#include <src/common/uid.h>
+#include <src/slurmctld/locks.h>
+#include <src/plugins/sched/wiki/crypto.h>
+#include <src/plugins/sched/wiki/msg.h>
 
 #define _DEBUG 0
 
@@ -474,7 +477,11 @@ static char *	_recv_msg(slurm_fd new_fd)
 		return NULL;
 	}
 
-	debug2("wiki msg recv:%s", buf);
+	if (slurm_get_debug_flags() && DEBUG_FLAG_WIKI)
+		info("wiki msg recv:%s", buf);
+	else
+		debug2("wiki msg recv:%s", buf);
+
 	return buf;
 }
 
@@ -488,7 +495,10 @@ static size_t	_send_msg(slurm_fd new_fd, char *buf, size_t size)
 	char header[10];
 	size_t data_sent;
 
-	debug2("wiki msg send:%s", buf);
+	if (slurm_get_debug_flags() && DEBUG_FLAG_WIKI)
+		info("wiki msg send:%s", buf);
+	else
+		debug2("wiki msg send:%s", buf);
 
 	(void) sprintf(header, "%08lu\n", (unsigned long) size);
 	if (_write_bytes((int) new_fd, header, 9) != 9) {
diff --git a/src/plugins/sched/wiki/msg.h b/src/plugins/sched/wiki/msg.h
index d01f20d00..13cd14335 100644
--- a/src/plugins/sched/wiki/msg.h
+++ b/src/plugins/sched/wiki/msg.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -84,8 +85,8 @@
 
 /* Global configuration parameters */
 #define E_HOST_SIZE  256
-#define EXC_PART_CNT  10
-#define HIDE_PART_CNT 10
+#define EXC_PART_CNT  32
+#define HIDE_PART_CNT 32
 #define KEY_SIZE      32
 #define PRIO_HOLD      0
 #define PRIO_DECREMENT 1
diff --git a/src/plugins/sched/wiki/resume_job.c b/src/plugins/sched/wiki/resume_job.c
index b172e04d2..2308f95b9 100644
--- a/src/plugins/sched/wiki/resume_job.c
+++ b/src/plugins/sched/wiki/resume_job.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki/sched_wiki.c b/src/plugins/sched/wiki/sched_wiki.c
index 4fdb4dd7d..d7270af8f 100644
--- a/src/plugins/sched/wiki/sched_wiki.c
+++ b/src/plugins/sched/wiki/sched_wiki.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -42,6 +43,7 @@
 #include "src/common/log.h"
 #include "src/slurmctld/slurmctld.h"
 #include "./msg.h"
+#include "src/common/slurm_priority.h"
 
 const char		plugin_name[]	= "Wiki (Maui) Scheduler plugin";
 const char		plugin_type[]	= "sched/wiki";
@@ -117,12 +119,9 @@ slurm_sched_plugin_initial_priority( uint32_t last_prio,
 		return 0;
 	}
 
-	if (init_prio_mode == PRIO_DECREMENT) {
-		if (last_prio >= 2)
-			return (last_prio - 1);
-		else
-			return 1;
-	}
+	if (init_prio_mode == PRIO_DECREMENT) 
+		return priority_g_set(last_prio, job_ptr);
+
 	return 0;
 }
 
diff --git a/src/plugins/sched/wiki/start_job.c b/src/plugins/sched/wiki/start_job.c
index 7be3a0cbc..245722cb8 100644
--- a/src/plugins/sched/wiki/start_job.c
+++ b/src/plugins/sched/wiki/start_job.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -147,7 +148,7 @@ static int	_start_job(uint32_t jobid, int task_cnt, char *hostlist,
 	static uint32_t cr_test = 0, cr_enabled = 0;
 
 	if (cr_test == 0) {
-		select_g_get_info_from_plugin(SELECT_CR_PLUGIN,
+		select_g_get_info_from_plugin(SELECT_CR_PLUGIN, NULL,
 						&cr_enabled);
 		cr_test = 1;
 	}
@@ -280,6 +281,7 @@ static int	_start_job(uint32_t jobid, int task_cnt, char *hostlist,
 			}
 			wait_string = job_reason_string(wait_reason);
 			job_ptr->state_reason = WAIT_HELD;
+			xfree(job_ptr->state_desc);
 		}
 		*err_code = -910 - wait_reason;
 		snprintf(tmp_msg, sizeof(tmp_msg),
diff --git a/src/plugins/sched/wiki/suspend_job.c b/src/plugins/sched/wiki/suspend_job.c
index 383b9539b..fc6879d81 100644
--- a/src/plugins/sched/wiki/suspend_job.c
+++ b/src/plugins/sched/wiki/suspend_job.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki2/Makefile.in b/src/plugins/sched/wiki2/Makefile.in
index ad0c7a25b..d10c4e247 100644
--- a/src/plugins/sched/wiki2/Makefile.in
+++ b/src/plugins/sched/wiki2/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -114,6 +118,10 @@ 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@
diff --git a/src/plugins/sched/wiki2/cancel_job.c b/src/plugins/sched/wiki2/cancel_job.c
index 8a91bf0a0..921eb5516 100644
--- a/src/plugins/sched/wiki2/cancel_job.c
+++ b/src/plugins/sched/wiki2/cancel_job.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki2/event.c b/src/plugins/sched/wiki2/event.c
index 5c8405071..41fc23f0e 100644
--- a/src/plugins/sched/wiki2/event.c
+++ b/src/plugins/sched/wiki2/event.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki2/get_jobs.c b/src/plugins/sched/wiki2/get_jobs.c
index 96226ae70..024acb08e 100644
--- a/src/plugins/sched/wiki2/get_jobs.c
+++ b/src/plugins/sched/wiki2/get_jobs.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -126,7 +127,7 @@ extern int	get_jobs(char *cmd_ptr, int *err_code, char **err_msg)
 	int job_rec_cnt = 0, buf_size = 0;
 
 	if (cr_test == 0) {
-		select_g_get_info_from_plugin(SELECT_CR_PLUGIN,
+		select_g_get_info_from_plugin(SELECT_CR_PLUGIN, NULL,
 					      &cr_enabled);
 		cr_test = 1;
 	}
diff --git a/src/plugins/sched/wiki2/get_nodes.c b/src/plugins/sched/wiki2/get_nodes.c
index af8263ded..96b135ff3 100644
--- a/src/plugins/sched/wiki2/get_nodes.c
+++ b/src/plugins/sched/wiki2/get_nodes.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -116,7 +117,8 @@ extern int	get_nodes(char *cmd_ptr, int *err_code, char **err_msg)
 					      node_name);
 					continue;
 				}
-				tmp_buf = _dump_node(node_ptr, NULL, update_time);
+				tmp_buf = _dump_node(node_ptr, NULL, 
+						     update_time);
 				if (node_rec_cnt > 0)
 					xstrcat(buf, "#");
 				xstrcat(buf, tmp_buf);
@@ -152,10 +154,14 @@ static char *	_dump_all_nodes(int *node_cnt, time_t update_time)
 	char *tmp_buf = NULL, *buf = NULL;
 	struct node_record *uniq_node_ptr = NULL;
 	hostlist_t hl = NULL;
-	
+	uint16_t base_state;
+
 	for (i=0; i<node_record_count; i++, node_ptr++) {
 		if (node_ptr->name == NULL)
 			continue;
+		base_state = node_ptr->node_state & NODE_STATE_BASE;
+		if (base_state == NODE_STATE_FUTURE)
+			continue;
 		if (use_host_exp == 2) {
 			rc = _same_info(uniq_node_ptr, node_ptr, update_time);
 			if (rc == 0) {
diff --git a/src/plugins/sched/wiki2/hostlist.c b/src/plugins/sched/wiki2/hostlist.c
index c9f83f4a2..b11cf7fe2 100644
--- a/src/plugins/sched/wiki2/hostlist.c
+++ b/src/plugins/sched/wiki2/hostlist.c
@@ -2,12 +2,14 @@
  *  hostlist.c - Convert hostlist expressions between Slurm and Moab formats
  *****************************************************************************
  *  Copyright (C) 2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -81,7 +83,7 @@ extern char * moab2slurm_task_list(char *moab_tasklist, int *task_cnt)
 	static uint32_t cr_test = 0, cr_enabled = 0;
 
 	if (cr_test == 0) {
-		select_g_get_info_from_plugin(SELECT_CR_PLUGIN,
+		select_g_get_info_from_plugin(SELECT_CR_PLUGIN, NULL,
 						&cr_enabled);
 		cr_test = 1;
 	}
@@ -161,35 +163,43 @@ extern char * slurm_job2moab_task_list(struct job_record *job_ptr)
 /* Return task list in Moab format 1: tux0:tux0:tux1:tux1:tux2 */
 static char * _task_list(struct job_record *job_ptr)
 {
-	int i, j, task_cnt;
+	int i, j, node_inx = 0, task_cnt;
 	char *buf = NULL, *host;
-	hostlist_t hl = hostlist_create(job_ptr->nodes);
+	select_job_res_t select_ptr = job_ptr->select_job;
 
-	if (hl == NULL) {
-		error("hostlist_create error for job %u, %s",
-			job_ptr->job_id, job_ptr->nodes);
-		return buf;
-	}
-
-	for (i=0; i<job_ptr->alloc_lps_cnt; i++) {
-		host = hostlist_shift(hl);
-		if (host == NULL) {
-			error("bad alloc_lps_cnt for job %u (%s, %d)", 
-				job_ptr->job_id, job_ptr->nodes,
-				job_ptr->alloc_lps_cnt);
-			break;
+	xassert(select_ptr);
+	for (i=0; i<select_ptr->nhosts; i++) {
+		if (i == 0) {
+			xassert(select_ptr->cpus && select_ptr->node_bitmap);
+			node_inx = bit_ffs(select_ptr->node_bitmap);
+		} else {
+			for (node_inx++; node_inx<node_record_count; 
+			     node_inx++) {
+				if (bit_test(select_ptr->node_bitmap,node_inx))
+					break;
+			}
+			if (node_inx >= node_record_count) {
+				error("Improperly formed select_job for %u",
+				      job_ptr->job_id);
+				break;
+			}
 		}
-		task_cnt = job_ptr->alloc_lps[i];
+		host = node_record_table_ptr[node_inx].name;
+
+		task_cnt = select_ptr->cpus[i];
 		if (job_ptr->details && job_ptr->details->cpus_per_task)
 			task_cnt /= job_ptr->details->cpus_per_task;
+		if (task_cnt < 1) {
+			error("Invalid task_cnt for job %u on node %s",
+			      job_ptr->job_id, host);
+			task_cnt = 1;
+		}
 		for (j=0; j<task_cnt; j++) {
 			if (buf)
 				xstrcat(buf, ":");
 			xstrcat(buf, host);
 		}
-		free(host);
 	}
-	hostlist_destroy(hl);
 	return buf;
 }
 
@@ -251,29 +261,38 @@ static void _append_hl_buf(char **buf, hostlist_t *hl_tmp, int *reps)
 /* Return task list in Moab format 2: tux[0-1]*2:tux2 */
 static char * _task_list_exp(struct job_record *job_ptr)
 {
-	int i, reps = -1, task_cnt;
+	int i, node_inx = 0, reps = -1, task_cnt;
 	char *buf = NULL, *host;
-	hostlist_t hl = hostlist_create(job_ptr->nodes);
 	hostlist_t hl_tmp = (hostlist_t) NULL;
+	select_job_res_t select_ptr = job_ptr->select_job;
 
-	if (hl == NULL) {
-		error("hostlist_create error for job %u, %s",
-			job_ptr->job_id, job_ptr->nodes);
-		return buf;
-	}
-
-	for (i=0; i<job_ptr->alloc_lps_cnt; i++) {
-		host = hostlist_shift(hl);
-		if (host == NULL) {
-			error("bad alloc_lps_cnt for job %u (%s, %d)", 
-				job_ptr->job_id, job_ptr->nodes,
-				job_ptr->alloc_lps_cnt);
-			break;
+	xassert(select_ptr);
+	for (i=0; i<select_ptr->nhosts; i++) {
+		if (i == 0) {
+			xassert(select_ptr->cpus && select_ptr->node_bitmap);
+			node_inx = bit_ffs(select_ptr->node_bitmap);
+		} else {
+			for (node_inx++; node_inx<node_record_count; 
+			     node_inx++) {
+				if (bit_test(select_ptr->node_bitmap,node_inx))
+					break;
+			}
+			if (node_inx >= node_record_count) {
+				error("Improperly formed select_job for %u",
+				      job_ptr->job_id);
+				break;
+			}
 		}
+		host = node_record_table_ptr[node_inx].name;
 
-		task_cnt = job_ptr->alloc_lps[i];
+		task_cnt = select_ptr->cpus[i];
 		if (job_ptr->details && job_ptr->details->cpus_per_task)
 			task_cnt /= job_ptr->details->cpus_per_task;
+		if (task_cnt < 1) {
+			error("Invalid task_cnt for job %u on node %s",
+			      job_ptr->job_id, host);
+			task_cnt = 1;
+		}
 		if (reps == task_cnt) {
 			/* append to existing hostlist record */
 			if (hostlist_push(hl_tmp, host) == 0)
@@ -289,9 +308,7 @@ static char * _task_list_exp(struct job_record *job_ptr)
 			else
 				error("hostlist_create failure");
 		}
-		free(host);
 	}
-	hostlist_destroy(hl);
 	if (hl_tmp)
 		_append_hl_buf(&buf, &hl_tmp, &reps);
 	return buf;
diff --git a/src/plugins/sched/wiki2/initialize.c b/src/plugins/sched/wiki2/initialize.c
index f94576ab1..4314b2901 100644
--- a/src/plugins/sched/wiki2/initialize.c
+++ b/src/plugins/sched/wiki2/initialize.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki2/job_add_task.c b/src/plugins/sched/wiki2/job_add_task.c
index 97d6604ac..4671a19aa 100644
--- a/src/plugins/sched/wiki2/job_add_task.c
+++ b/src/plugins/sched/wiki2/job_add_task.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki2/job_modify.c b/src/plugins/sched/wiki2/job_modify.c
index c0c7673ab..834dd9978 100644
--- a/src/plugins/sched/wiki2/job_modify.c
+++ b/src/plugins/sched/wiki2/job_modify.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki2/job_notify.c b/src/plugins/sched/wiki2/job_notify.c
index ddb3a65dd..7aa80a7e4 100644
--- a/src/plugins/sched/wiki2/job_notify.c
+++ b/src/plugins/sched/wiki2/job_notify.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki2/job_release_task.c b/src/plugins/sched/wiki2/job_release_task.c
index 1a02f40e1..b0b825f87 100644
--- a/src/plugins/sched/wiki2/job_release_task.c
+++ b/src/plugins/sched/wiki2/job_release_task.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki2/job_requeue.c b/src/plugins/sched/wiki2/job_requeue.c
index a756dcf00..539aa9942 100644
--- a/src/plugins/sched/wiki2/job_requeue.c
+++ b/src/plugins/sched/wiki2/job_requeue.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki2/job_signal.c b/src/plugins/sched/wiki2/job_signal.c
index d1a24fa06..fc12f41c5 100644
--- a/src/plugins/sched/wiki2/job_signal.c
+++ b/src/plugins/sched/wiki2/job_signal.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki2/job_will_run.c b/src/plugins/sched/wiki2/job_will_run.c
index 27e7d1e45..0211556e5 100644
--- a/src/plugins/sched/wiki2/job_will_run.c
+++ b/src/plugins/sched/wiki2/job_will_run.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -16,7 +17,7 @@
  *  any later version.
  *
  *  In addition, as a special exception, the copyright holders give permission 
- *  to link the code of portions of this program with the OpenSSL library under 
+ *  to link the code of portions of this program with the OpenSSL library under
  *  certain conditions as described in each individual source file, and 
  *  distribute linked combinations including the two. You must obey the GNU 
  *  General Public License in all respects for all of the code used other than 
@@ -39,8 +40,9 @@
 #include "./msg.h"
 #include "src/common/node_select.h"
 #include "src/slurmctld/locks.h"
-#include "src/slurmctld/slurmctld.h"
 #include "src/slurmctld/node_scheduler.h"
+#include "src/slurmctld/reservation.h"
+#include "src/slurmctld/slurmctld.h"
 #include "src/slurmctld/state_save.h"
 
 #define MAX_JOB_QUEUE 20
@@ -96,7 +98,8 @@ extern int	job_will_run(char *cmd_ptr, int *err_code, char **err_msg)
 		arg_ptr += 6;
 		jobid[job_cnt] = strtoul(arg_ptr, &tmp_char, 10);
 		if (tmp_char[0] == '@')
-			start_time[job_cnt] = strtoul(tmp_char+1, &tmp_char, 10);
+			start_time[job_cnt] = strtoul(tmp_char+1, &tmp_char,
+						      10);
 		else
 			start_time[job_cnt] = 0;
 		if (tmp_char[0] != ',') {
@@ -150,13 +153,14 @@ static char *	_will_run_test(uint32_t *jobid, time_t *start_time,
 {
 	struct job_record *job_ptr;
 	struct part_record *part_ptr;
-	bitstr_t *avail_bitmap = NULL;
+	bitstr_t *avail_bitmap = NULL, *resv_bitmap = NULL;
 	char *hostlist, *reply_msg = NULL;
 	uint32_t min_nodes, max_nodes, req_nodes;
 	int i, rc;
 	select_will_run_t *select_will_run = NULL;
 	List select_list;
 	ListIterator iter;
+	time_t now = time(NULL), start_res;
 
 	select_list = list_create(_select_list_del);
 	if (select_list == NULL)
@@ -208,6 +212,23 @@ static char *	_will_run_test(uint32_t *jobid, time_t *start_time,
 			break;
 		}
 
+		/* Enforce reservation: access control, time and nodes */
+		if (start_time[i])
+			start_res = start_time[i];
+		else
+			start_res = now;
+		rc = job_test_resv(job_ptr, &start_res, true, &resv_bitmap);
+		if (rc != SLURM_SUCCESS) {
+			*err_code = -730;
+			*err_msg = "Job denied access to reservation";
+			error("wiki: reservation access denied for job %u", 
+			      jobid[i]);
+			break;
+		}
+		start_time[i] = MAX(start_time[i], start_res);
+		bit_and(avail_bitmap, resv_bitmap);
+		FREE_NULL_BITMAP(resv_bitmap);
+
 		/* Only consider nodes that are not DOWN or DRAINED */
 		bit_and(avail_bitmap, avail_node_bitmap);
 
diff --git a/src/plugins/sched/wiki2/msg.c b/src/plugins/sched/wiki2/msg.c
index 466868415..6b2d10465 100644
--- a/src/plugins/sched/wiki2/msg.c
+++ b/src/plugins/sched/wiki2/msg.c
@@ -2,12 +2,14 @@
  *  msg.c - Message/communcation manager for Wiki plugin
  *****************************************************************************
  *  Copyright (C) 2006-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -35,10 +37,11 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
 \*****************************************************************************/
 
-#include "./crypto.h"
-#include "./msg.h"
-#include "src/common/uid.h"
-#include "src/slurmctld/locks.h"
+#include "slurm/slurm.h"
+#include <src/common/uid.h>
+#include <src/slurmctld/locks.h>
+#include <src/plugins/sched/wiki2/crypto.h>
+#include <src/plugins/sched/wiki2/msg.h>
 #include <sys/poll.h>
 
 #define _DEBUG 0
@@ -529,7 +532,11 @@ static char *	_recv_msg(slurm_fd new_fd)
 		return NULL;
 	}
 
-	debug2("wiki msg recv:%s", buf);
+	if (slurm_get_debug_flags() && DEBUG_FLAG_WIKI)
+		info("wiki msg recv:%s", buf);
+	else
+		debug2("wiki msg recv:%s", buf);
+
 	return buf;
 }
 
@@ -543,7 +550,10 @@ static size_t	_send_msg(slurm_fd new_fd, char *buf, size_t size)
 	char header[10];
 	size_t data_sent;
 
-	debug2("wiki msg send:%s", buf);
+	if (slurm_get_debug_flags() && DEBUG_FLAG_WIKI)
+		info("wiki msg send:%s", buf);
+	else
+		debug2("wiki msg send:%s", buf);
 
 	(void) sprintf(header, "%08lu\n", (unsigned long) size);
 	if (_write_bytes((int) new_fd, header, 9) != 9) {
diff --git a/src/plugins/sched/wiki2/msg.h b/src/plugins/sched/wiki2/msg.h
index b9d22f640..de55e0f2c 100644
--- a/src/plugins/sched/wiki2/msg.h
+++ b/src/plugins/sched/wiki2/msg.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -84,8 +85,8 @@
 
 /* Global configuration parameters */
 #define E_HOST_SIZE	256
-#define EXC_PART_CNT	10
-#define HIDE_PART_CNT	10
+#define EXC_PART_CNT	32
+#define HIDE_PART_CNT	32
 #define KEY_SIZE	32
 #define PRIO_HOLD	0
 #define PRIO_DECREMENT	1
diff --git a/src/plugins/sched/wiki2/resume_job.c b/src/plugins/sched/wiki2/resume_job.c
index b172e04d2..2308f95b9 100644
--- a/src/plugins/sched/wiki2/resume_job.c
+++ b/src/plugins/sched/wiki2/resume_job.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/sched/wiki2/sched_wiki.c b/src/plugins/sched/wiki2/sched_wiki.c
index db4168acf..5f8f6fa30 100644
--- a/src/plugins/sched/wiki2/sched_wiki.c
+++ b/src/plugins/sched/wiki2/sched_wiki.c
@@ -2,12 +2,14 @@
  *  sched_wiki.c - Wiki plugin for Moab and Maui schedulers.
  *****************************************************************************
  *  Copyright (C) 2006-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -39,6 +41,7 @@
 
 #include "src/common/plugin.h"
 #include "src/common/log.h"
+#include "src/common/slurm_priority.h"
 #include "./msg.h"
 
 const char		plugin_name[]	= "Wiki (Maui and Moab) Scheduler plugin";
@@ -118,12 +121,9 @@ slurm_sched_plugin_initial_priority( uint32_t last_prio,
 		return 0;
 	}
 
-	if (init_prio_mode == PRIO_DECREMENT) {
-		if (last_prio >= 2)
-			return (last_prio - 1);
-		else
-			return 1;
-	}
+	if (init_prio_mode == PRIO_DECREMENT) 
+		return priority_g_set(last_prio, job_ptr);
+	
 	return 0;
 }
 
@@ -140,7 +140,9 @@ void slurm_sched_plugin_job_is_pending( void )
 /**************************************************************************/
 int slurm_sched_plugin_reconfig( void )
 {
-	return parse_wiki_config();
+	int rc = parse_wiki_config();
+	(void) event_notify(1235, "Partition change");
+	return rc;
 }
 
 /**************************************************************************/
diff --git a/src/plugins/sched/wiki2/start_job.c b/src/plugins/sched/wiki2/start_job.c
index 3dfe72a84..06ddf6f82 100644
--- a/src/plugins/sched/wiki2/start_job.c
+++ b/src/plugins/sched/wiki2/start_job.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -190,7 +191,7 @@ static int	_start_job(uint32_t jobid, int task_cnt, char *hostlist,
 	static uint32_t cr_test = 0, cr_enabled = 0;
 
 	if (cr_test == 0) {
-		select_g_get_info_from_plugin(SELECT_CR_PLUGIN,
+		select_g_get_info_from_plugin(SELECT_CR_PLUGIN, NULL,
 						&cr_enabled);
 		cr_test = 1;
 	}
@@ -334,6 +335,7 @@ static int	_start_job(uint32_t jobid, int task_cnt, char *hostlist,
 			}
 			wait_string = job_reason_string(wait_reason);
 			job_ptr->state_reason = WAIT_HELD;
+			xfree(job_ptr->state_desc);
 		}
 		*err_code = -910 - wait_reason;
 		snprintf(tmp_msg, sizeof(tmp_msg),
diff --git a/src/plugins/sched/wiki2/suspend_job.c b/src/plugins/sched/wiki2/suspend_job.c
index 383b9539b..fc6879d81 100644
--- a/src/plugins/sched/wiki2/suspend_job.c
+++ b/src/plugins/sched/wiki2/suspend_job.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/select/Makefile.in b/src/plugins/select/Makefile.in
index 67ea11018..7c6b40662 100644
--- a/src/plugins/select/Makefile.in
+++ b/src/plugins/select/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/select/bluegene/Makefile.in b/src/plugins/select/bluegene/Makefile.in
index 6c605f7cc..4e96779fa 100644
--- a/src/plugins/select/bluegene/Makefile.in
+++ b/src/plugins/select/bluegene/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/select/bluegene/block_allocator/Makefile.am b/src/plugins/select/bluegene/block_allocator/Makefile.am
index bbc7f300e..5f74086f7 100644
--- a/src/plugins/select/bluegene/block_allocator/Makefile.am
+++ b/src/plugins/select/bluegene/block_allocator/Makefile.am
@@ -5,21 +5,6 @@ CLEANFILES = core.*
 
 INCLUDES = -I$(top_srcdir) $(BG_INCLUDES)
 
-#to build the executable
-# noinst_PROGRAMS = block_allocator
-
-# block_allocator_SOURCES = block_allocator.c bridge_linker.c \
-# 	block_allocator.h bridge_linker.h
-
-# block_allocator_LDADD = \
-# 	$(top_builddir)/src/api/libslurm.la
-
-
-# block_allocator_LDFLAGS = -export-dynamic -lm $(CMD_LDFLAGS)
-
-# CPPFLAGS = -DBUILD_EXE
-
-
 # making a .la
 
 noinst_LTLIBRARIES = libbluegene_block_allocator.la 
@@ -29,3 +14,16 @@ libbluegene_block_allocator_la_SOURCES =    \
 libbluegene_block_allocator_la_LDFLAGS        = \
 	$(LIB_LDFLAGS) -lm    
 
+if BLUEGENE_LOADED
+
+#to build the debug executable
+noinst_PROGRAMS = wire_test
+
+wire_testSOURCES = wire_test.c block_allocator.h
+
+wire_test_LDADD = libbluegene_block_allocator.la \
+	$(top_builddir)/src/api/libslurm.o -ldl
+
+wire_test_LDFLAGS = -export-dynamic -lm $(CMD_LDFLAGS)
+
+endif
diff --git a/src/plugins/select/bluegene/block_allocator/Makefile.in b/src/plugins/select/bluegene/block_allocator/Makefile.in
index c06ae39c1..bffdc1650 100644
--- a/src/plugins/select/bluegene/block_allocator/Makefile.in
+++ b/src/plugins/select/bluegene/block_allocator/Makefile.in
@@ -16,6 +16,7 @@
 
 # Makefile.am for bluegene_block_allocator
 
+
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -35,6 +36,7 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
+@BLUEGENE_LOADED_TRUE@noinst_PROGRAMS = wire_test$(EXEEXT)
 subdir = src/plugins/select/bluegene/block_allocator
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -43,14 +45,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,6 +83,15 @@ libbluegene_block_allocator_la_LINK = $(LIBTOOL) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(AM_CFLAGS) $(CFLAGS) \
 	$(libbluegene_block_allocator_la_LDFLAGS) $(LDFLAGS) -o $@
+PROGRAMS = $(noinst_PROGRAMS)
+wire_test_SOURCES = wire_test.c
+wire_test_OBJECTS = wire_test.$(OBJEXT)
+@BLUEGENE_LOADED_TRUE@wire_test_DEPENDENCIES =  \
+@BLUEGENE_LOADED_TRUE@	libbluegene_block_allocator.la \
+@BLUEGENE_LOADED_TRUE@	$(top_builddir)/src/api/libslurm.o
+wire_test_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(wire_test_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
 depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
 am__depfiles_maybe = depfiles
@@ -89,8 +104,8 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(libbluegene_block_allocator_la_SOURCES)
-DIST_SOURCES = $(libbluegene_block_allocator_la_SOURCES)
+SOURCES = $(libbluegene_block_allocator_la_SOURCES) wire_test.c
+DIST_SOURCES = $(libbluegene_block_allocator_la_SOURCES) wire_test.c
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -104,6 +119,10 @@ 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@
@@ -267,19 +286,6 @@ AUTOMAKE_OPTIONS = foreign
 CLEANFILES = core.*
 INCLUDES = -I$(top_srcdir) $(BG_INCLUDES)
 
-#to build the executable
-# noinst_PROGRAMS = block_allocator
-
-# block_allocator_SOURCES = block_allocator.c bridge_linker.c \
-# 	block_allocator.h bridge_linker.h
-
-# block_allocator_LDADD = \
-# 	$(top_builddir)/src/api/libslurm.la
-
-# block_allocator_LDFLAGS = -export-dynamic -lm $(CMD_LDFLAGS)
-
-# CPPFLAGS = -DBUILD_EXE
-
 # making a .la
 noinst_LTLIBRARIES = libbluegene_block_allocator.la 
 libbluegene_block_allocator_la_SOURCES = \
@@ -288,6 +294,11 @@ libbluegene_block_allocator_la_SOURCES = \
 libbluegene_block_allocator_la_LDFLAGS = \
 	$(LIB_LDFLAGS) -lm    
 
+@BLUEGENE_LOADED_TRUE@wire_testSOURCES = wire_test.c block_allocator.h
+@BLUEGENE_LOADED_TRUE@wire_test_LDADD = libbluegene_block_allocator.la \
+@BLUEGENE_LOADED_TRUE@	$(top_builddir)/src/api/libslurm.o -ldl
+
+@BLUEGENE_LOADED_TRUE@wire_test_LDFLAGS = -export-dynamic -lm $(CMD_LDFLAGS)
 all: all-am
 
 .SUFFIXES:
@@ -333,6 +344,16 @@ clean-noinstLTLIBRARIES:
 libbluegene_block_allocator.la: $(libbluegene_block_allocator_la_OBJECTS) $(libbluegene_block_allocator_la_DEPENDENCIES) 
 	$(libbluegene_block_allocator_la_LINK)  $(libbluegene_block_allocator_la_OBJECTS) $(libbluegene_block_allocator_la_LIBADD) $(LIBS)
 
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+wire_test$(EXEEXT): $(wire_test_OBJECTS) $(wire_test_DEPENDENCIES) 
+	@rm -f wire_test$(EXEEXT)
+	$(wire_test_LINK) $(wire_test_OBJECTS) $(wire_test_LDADD) $(LIBS)
+
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
 
@@ -341,6 +362,7 @@ distclean-compile:
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/block_allocator.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bridge_linker.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wire_test.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -444,7 +466,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(LTLIBRARIES)
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -474,7 +496,7 @@ maintainer-clean-generic:
 clean: clean-am
 
 clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
+	clean-noinstPROGRAMS mostlyclean-am
 
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
@@ -533,17 +555,18 @@ uninstall-am:
 .MAKE: install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-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-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
+	clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \
+	ctags distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-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-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags 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.
diff --git a/src/plugins/select/bluegene/block_allocator/block_allocator.c b/src/plugins/select/bluegene/block_allocator/block_allocator.c
index 546771f90..ec5a201d6 100644
--- a/src/plugins/select/bluegene/block_allocator/block_allocator.c
+++ b/src/plugins/select/bluegene/block_allocator/block_allocator.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  block_allocator.c - Assorted functions for layout of bluegene blocks, 
  *	 wiring, mapping for smap, etc.
- *  $Id: block_allocator.c 17225 2009-04-10 19:25:52Z da $
+ *  $Id: block_allocator.c 17643 2009-05-29 17:20:48Z da $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dan Phung <phung4@llnl.gov>, Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -200,7 +201,8 @@ static int _find_next_free_using_port_2(ba_switch_t *curr_switch,
 /* 			     List nodes, int dim,  */
 /* 			     int count, int highest_phys_x);  */
 /* */
-static int _finish_torus(ba_switch_t *curr_switch, int source_port, 
+static int _finish_torus(List results, 
+			 ba_switch_t *curr_switch, int source_port, 
 			 int dim, int count, int *start);
 /* */
 static int *_set_best_path();
@@ -500,12 +502,11 @@ extern int new_ba_request(ba_request_t* ba_request)
 #ifdef HAVE_BG
 	float sz=1;
 	int geo[BA_SYSTEM_DIMENSIONS] = {0,0,0};
-	int i2, i3, picked, total_sz=1 , size2, size3;
-	ListIterator itr;
-	int checked[8];
+	int i2, i3, picked, total_sz=1, size2=0;
+	int checked[DIM_SIZE[X]];
 	int *geo_ptr;
 	int messed_with = 0;
-	
+
 	ba_request->save_name= NULL;
 	ba_request->rotate_count= 0;
 	ba_request->elongate_count = 0;
@@ -583,7 +584,7 @@ extern int new_ba_request(ba_request_t* ba_request)
 				    ba_request->rotate);
 		}
 	
-		if(ba_request->size>total_sz || ba_request->size<1) {
+		if(ba_request->size > total_sz || ba_request->size < 1) {
 			return 0;			
 		}
 		sz = ba_request->size % (DIM_SIZE[Y] * DIM_SIZE[Z]);
@@ -593,54 +594,55 @@ extern int new_ba_request(ba_request_t* ba_request)
 		      geo[Y] = DIM_SIZE[Y];
 		      geo[Z] = DIM_SIZE[Z];
 		      sz=ba_request->size;
-		      _append_geo(geo,
-				  ba_request->elongate_geos,
-				  ba_request->rotate);
+		      if((geo[X]*geo[Y]*geo[Z]) == ba_request->size)
+			      _append_geo(geo,
+					  ba_request->elongate_geos,
+					  ba_request->rotate);
+		      else
+			      error("%d I was just trying to add a "
+				    "geo of %d%d%d "
+				    "while I am trying to request %d midplanes",
+				    __LINE__, geo[X], geo[Y], geo[Z],
+				    ba_request->size);
 		}	
 //	startagain:		
 		picked=0;
-		for(i=0;i<8;i++)
+		for(i=0; i<DIM_SIZE[X]; i++)
 			checked[i]=0;
 		
-		size3=ba_request->size;
-		
 		for (i=0; i<BA_SYSTEM_DIMENSIONS; i++) {
 			total_sz *= DIM_SIZE[i];
 			geo[i] = 1;
 		}
-	
+	       
 		sz = 1;
-		size3=ba_request->size;
 		picked=0;
 	tryagain:	
-		if(size3!=ba_request->size)
-			size2=size3;
-		else
-			size2=ba_request->size;
+		size2 = ba_request->size;
 		//messedup:
-
 		for (i=picked; i<BA_SYSTEM_DIMENSIONS; i++) { 
-			if(size2<=1) 
+			if(size2 <= 1) 
 				break;
-			sz = size2%DIM_SIZE[i];
+	
+			sz = size2 % DIM_SIZE[i];
 			if(!sz) {
 				geo[i] = DIM_SIZE[i];	
 				size2 /= DIM_SIZE[i];
-			} else if (size2 > DIM_SIZE[i]){
-				for(i2=(DIM_SIZE[i]-1);i2>1;i2--) {
+			} else if (size2 > DIM_SIZE[i]) {
+				for(i2=(DIM_SIZE[i]-1); i2 > 1; i2--) {
 					/* go through each number to see if 
 					   the size is divisable by a smaller 
 					   number that is 
 					   good in the other dims. */
 					if (!(size2%i2) && !checked[i2]) {
 						size2 /= i2;
-									
+					
 						if(i==0)
 							checked[i2]=1;
 							
-						if(i2<DIM_SIZE[i]) 
+						if(i2<DIM_SIZE[i]) {
 							geo[i] = i2;
-						else {
+						} else {
 							goto tryagain;
 						}
 						if((i2-1)!=1 && 
@@ -657,20 +659,21 @@ extern int new_ba_request(ba_request_t* ba_request)
 				   run.  
 				*/
 				if(i2==1) {
-					error("Can't make a block of "
-					      "%d into a cube.",
-					      ba_request->size);
-					return 0;
+					if(!list_count(
+						   ba_request->elongate_geos))
+						error("Can't make a block of "
+						      "%d into a cube.",
+						      ba_request->size);
+					goto endit;
 /* 					ba_request->size +=1; */
 /* 					goto startagain; */
 				}
-						
 			} else {
 				geo[i] = sz;	
 				break;
 			}					
 		}
-		
+
 		if((geo[X]*geo[Y]) <= DIM_SIZE[Y]) {
 			ba_request->geometry[X] = 1;
 			ba_request->geometry[Y] = geo[X] * geo[Y];
@@ -689,7 +692,10 @@ extern int new_ba_request(ba_request_t* ba_request)
 				    ba_request->rotate);		
 	
 		}
-		if((geo[X]/2) <= DIM_SIZE[Y]) {
+
+		/* Make sure geo[X] is even and then see if we can get
+		   it into the Y or Z dim. */
+		if(!(geo[X]%2) && ((geo[X]/2) <= DIM_SIZE[Y])) {
 			if(geo[Y] == 1) {
 				ba_request->geometry[Y] = geo[X]/2;
 				messed_with = 1;
@@ -746,9 +752,15 @@ extern int new_ba_request(ba_request_t* ba_request)
 			}
 		}
 		
-		_append_geo(geo, 
-			    ba_request->elongate_geos, 
-			    ba_request->rotate);
+		if((geo[X]*geo[Y]*geo[Z]) == ba_request->size)
+			_append_geo(geo, 
+				    ba_request->elongate_geos, 
+				    ba_request->rotate);
+		else
+			error("%d I was just trying to add a geo of %d%d%d "
+			      "while I am trying to request %d midplanes",
+			       __LINE__, geo[X], geo[Y], geo[Z],
+			      ba_request->size);
 	
 		/* see if We can find a cube or square root of the 
 		   size to make an easy cube */
@@ -771,18 +783,22 @@ extern int new_ba_request(ba_request_t* ba_request)
 				else
 					goto endit;
 				
-			_append_geo(geo, 
-				    ba_request->elongate_geos, 
-				    ba_request->rotate);
+			if((geo[X]*geo[Y]*geo[Z]) == ba_request->size)
+				_append_geo(geo, 
+					    ba_request->elongate_geos, 
+					    ba_request->rotate);
+			else
+				error("%d I was just trying to add "
+				      "a geo of %d%d%d "
+				      "while I am trying to request "
+				      "%d midplanes",
+				      __LINE__, geo[X], geo[Y], geo[Z],
+				      ba_request->size);			
 		} 
 	}
 	
 endit:
-	itr = list_iterator_create(ba_request->elongate_geos);
-	geo_ptr = list_next(itr);
-	list_iterator_destroy(itr);
-	
-	if(geo_ptr == NULL)
+	if(!(geo_ptr = list_peek(ba_request->elongate_geos)))
 		return 0;
 
 	ba_request->elongate_count++;
@@ -1036,12 +1052,15 @@ node_info_error:
 					  % (HOSTLIST_BASE * HOSTLIST_BASE))
 					/ HOSTLIST_BASE;
 				end[Z] = (number % HOSTLIST_BASE);
+				j += 3;
+
 				DIM_SIZE[X] = MAX(DIM_SIZE[X], end[X]);
 				DIM_SIZE[Y] = MAX(DIM_SIZE[Y], end[Y]);
 				DIM_SIZE[Z] = MAX(DIM_SIZE[Z], end[Z]);
-				break;
-			}
-				
+
+				if(node->nodenames[j] != ',')
+					break;
+			}			
 		}
 		if ((DIM_SIZE[X]==0) && (DIM_SIZE[Y]==0) && (DIM_SIZE[Z]==0)) 
 			info("are you sure you only have 1 midplane? %s",
@@ -1204,7 +1223,7 @@ extern void ba_fini()
 	bridge_fini();
 #endif
 	_delete_ba_system();
-//	debug2("pa system destroyed");
+//	debug3("pa system destroyed");
 }
 
 
@@ -1294,7 +1313,7 @@ extern int copy_node_path(List nodes, List *dest_nodes)
 		list_iterator_destroy(itr2);
 	
 		if(!new_ba_node) {
-			debug2("adding %c%c%c as a new node",
+			debug3("adding %c%c%c as a new node",
 			       alpha_num[ba_node->coord[X]], 
 			       alpha_num[ba_node->coord[Y]],
 			       alpha_num[ba_node->coord[Z]]);
@@ -1489,7 +1508,7 @@ extern int check_and_set_node_list(List nodes)
 			[ba_node->coord[Y]]
 			[ba_node->coord[Z]];
 		if(ba_node->used && curr_ba_node->used) {
-			debug3("I have already been to "
+			debug4("I have already been to "
 			       "this node %c%c%c",
 			       alpha_num[ba_node->coord[X]], 
 			       alpha_num[ba_node->coord[Y]],
@@ -1512,7 +1531,7 @@ extern int check_and_set_node_list(List nodes)
 				   && curr_ba_switch->int_wire[j].used
 					&& j != curr_ba_switch->
 				   int_wire[j].port_tar) {
-					debug3("%c%c%c dim %d port %d "
+					debug4("%c%c%c dim %d port %d "
 					       "is already in use to %d",
 					       alpha_num[ba_node->coord[X]], 
 					       alpha_num[ba_node->coord[Y]],
@@ -1615,7 +1634,7 @@ extern char *set_bg_block(List results, int *start,
 		if(ba_node->letter == '.') {
 			ba_node->letter = letters[color_count%62];
 			ba_node->color = colors[color_count%6];
-			debug3("count %d setting letter = %c "
+			debug4("count %d setting letter = %c "
 			       "color = %d",
 			       color_count,
 			       ba_node->letter,
@@ -2173,20 +2192,36 @@ extern int *find_bp_loc(char* bp_id)
 			check[4] = '\0';
 		}
 	}
+	
+	if((check[1] < '0' || check[1] > '9')
+	   || (check[2] < '0' || check[2] > '9')
+	   || (check[3] < '0' || check[3] > '9')) {
+		error("%s is not a valid Rack-Midplane (i.e. R000)", bp_id);
+		goto cleanup;
+	}
+			
 #else
 	if(check[3] != '-') {
 		xfree(check);
 		check = xstrdup_printf("R%c%c-M%c",
 				       bp_id[1], bp_id[2], bp_id[3]);
 	}
-#endif
 
+	if((check[1] < '0' || check[1] > '9')
+	   || (check[2] < '0' || check[2] > '9')
+	   || (check[5] < '0' || check[5] > '9')) {
+		error("%s is not a valid Rack-Midplane (i.e. R00-M0)", bp_id);
+		goto cleanup;
+	}
+#endif
+	
 	itr = list_iterator_create(bp_map_list);
 	while ((bp_map = list_next(itr)))  
 		if (!strcasecmp(bp_map->bp_id, check)) 
 			break;	/* we found it */
 	list_iterator_destroy(itr);
 
+cleanup:
 	xfree(check);
 
 	if(bp_map != NULL)
@@ -2213,11 +2248,22 @@ extern char *find_bp_rack_mid(char* xyz)
 	len -= 3;
 	if(len<0)
 		return NULL;
+
+	if((xyz[len] < '0' || xyz[len] > '9')
+	   || (xyz[len+1] < '0' || xyz[len+1] > '9')
+	   || (xyz[len+2] < '0' || xyz[len+2] > '9')) {
+		error("%s is not a valid Location (i.e. 000)", xyz);
+		return NULL;
+	}
+
+
 	number = xstrntol(&xyz[X]+len, NULL,
 			  BA_SYSTEM_DIMENSIONS, HOSTLIST_BASE);
 	coord[X] = number / (HOSTLIST_BASE * HOSTLIST_BASE);
 	coord[Y] = (number % (HOSTLIST_BASE * HOSTLIST_BASE)) / HOSTLIST_BASE;
 	coord[Z] = (number % HOSTLIST_BASE);
+
+
 	if(!bp_map_list) {
 		if(set_bp_map() == -1)
 			return NULL;
@@ -2259,7 +2305,7 @@ extern int load_block_wiring(char *bg_block_id)
 	ba_switch_t *ba_switch = NULL; 
 	int *geo = NULL;
 	
-	debug2("getting info for block %s\n", bg_block_id);
+	debug3("getting info for block %s\n", bg_block_id);
 	
 	if ((rc = bridge_get_block(bg_block_id,  &block_ptr)) != STATUS_OK) {
 		error("bridge_get_block(%s): %s", 
@@ -2275,7 +2321,7 @@ extern int load_block_wiring(char *bg_block_id)
 		return SLURM_ERROR;
 	} 
 	if(!switch_cnt) {
-		debug3("no switch_cnt");
+		debug4("no switch_cnt");
 		if ((rc = bridge_get_data(block_ptr, 
 					  RM_PartitionFirstBP, 
 					  &curr_bp)) 
@@ -2348,7 +2394,7 @@ extern int load_block_wiring(char *bg_block_id)
 			      bg_err_str(rc));
 			return SLURM_ERROR;
 		}
-		debug2("switch id = %s dim %d conns = %d", 
+		debug3("switch id = %s dim %d conns = %d", 
 		       switchid, dim, cnt);
 		ba_switch = &ba_system_ptr->
 			grid[geo[X]][geo[Y]][geo[Z]].axis_switch[dim];
@@ -2421,7 +2467,7 @@ extern int load_block_wiring(char *bg_block_id)
 				ba_system_ptr->grid[geo[X]][geo[Y]][geo[Z]].
 					used = true;		
 			}
-			debug3("connection going from %d -> %d",
+			debug4("connection going from %d -> %d",
 			      curr_conn.p1, curr_conn.p2);
 			
 			if(ba_switch->int_wire[curr_conn.p1].used) {
@@ -2483,7 +2529,7 @@ extern List get_and_set_block_wiring(char *bg_block_id)
 	List results = list_create(destroy_ba_node);
 	ListIterator itr = NULL;
 	
-	debug2("getting info for block %s\n", bg_block_id);
+	debug3("getting info for block %s\n", bg_block_id);
 	
 	if ((rc = bridge_get_block(bg_block_id,  &block_ptr)) != STATUS_OK) {
 		error("bridge_get_block(%s): %s", 
@@ -2499,7 +2545,7 @@ extern List get_and_set_block_wiring(char *bg_block_id)
 		goto end_it;
 	} 
 	if(!switch_cnt) {
-		debug3("no switch_cnt");
+		debug4("no switch_cnt");
 		if ((rc = bridge_get_data(block_ptr, 
 					  RM_PartitionFirstBP, 
 					  &curr_bp)) 
@@ -2578,7 +2624,7 @@ extern List get_and_set_block_wiring(char *bg_block_id)
 			      bg_err_str(rc));
 			goto end_it;
 		}
-		debug2("switch id = %s dim %d conns = %d", 
+		debug3("switch id = %s dim %d conns = %d", 
 		       switchid, dim, cnt);
 		
 		itr = list_iterator_create(results);
@@ -2665,7 +2711,7 @@ extern List get_and_set_block_wiring(char *bg_block_id)
 				}
 				ba_node->used = true;		
 			}
-			debug3("connection going from %d -> %d",
+			debug4("connection going from %d -> %d",
 			      curr_conn.p1, curr_conn.p2);
 			
 			if(ba_switch->int_wire[curr_conn.p1].used) {
@@ -2890,13 +2936,13 @@ static int _append_geo(int *geometry, List geos, int rotate)
 		
 	}
 	list_iterator_destroy(itr);
-	
+
 	if(geo_ptr == NULL) { 
 		geo = xmalloc(sizeof(int)*BA_SYSTEM_DIMENSIONS);
 		geo[X] = geometry[X];
 		geo[Y] = geometry[Y];
 		geo[Z] = geometry[Z];
-		debug3("adding geo %c%c%c",
+		debug4("adding geo %c%c%c",
 		       alpha_num[geo[X]], alpha_num[geo[Y]],
 		       alpha_num[geo[Z]]);
 		list_append(geos, geo);
@@ -2960,7 +3006,7 @@ static int _fill_in_coords(List results, List start_list,
 					continue;
 
 				if (!_node_used(ba_node, geometry[X])) {
-					debug3("here Adding %c%c%c",
+					debug4("here Adding %c%c%c",
 					       alpha_num[ba_node->coord[X]],
 					       alpha_num[ba_node->coord[Y]],
 					       alpha_num[ba_node->coord[Z]]);
@@ -3064,7 +3110,7 @@ static int _copy_the_path(List nodes, ba_switch_t *curr_switch,
 	node_curr = curr_switch->ext_wire[0].node_tar;
 	node_tar = curr_switch->ext_wire[port_tar].node_tar;
 	if(mark_switch->int_wire[source].used)
-		debug2("setting dim %d %c%c%c %d-> %c%c%c %d",
+		debug3("setting dim %d %c%c%c %d-> %c%c%c %d",
 		       dim,
 		       alpha_num[node_curr[X]],
 		       alpha_num[node_curr[Y]],
@@ -3092,7 +3138,7 @@ static int _copy_the_path(List nodes, ba_switch_t *curr_switch,
 	   && node_curr[Z] == node_tar[Z]) {
 		/* We are going to the same node! this should never
 		   happen */
-		debug4("something bad happened!! "
+		debug5("something bad happened!! "
 		       "we are on %c%c%c and are going to it "
 		       "from port %d - > %d", 
 		       alpha_num[node_curr[X]],
@@ -3132,7 +3178,7 @@ static int _copy_the_path(List nodes, ba_switch_t *curr_switch,
 					       [mark_node_tar[Z]]);
 			_new_ba_node(ba_node, mark_node_tar, false);
 			list_push(nodes, ba_node);
-			debug3("haven't seen %c%c%c adding it",
+			debug4("haven't seen %c%c%c adding it",
 			       alpha_num[ba_node->coord[X]], 
 			       alpha_num[ba_node->coord[Y]],
 			       alpha_num[ba_node->coord[Z]]);
@@ -3158,7 +3204,7 @@ static int _find_yz_path(ba_node_t *ba_node, int *first,
 
 	for(i2=1;i2<=2;i2++) {
 		if(geometry[i2] > 1) {
-			debug3("%d node %c%c%c port 2 -> ",
+			debug4("%d node %c%c%c port 2 -> ",
 			       i2,
 			       alpha_num[ba_node->coord[X]],
 			       alpha_num[ba_node->coord[Y]],
@@ -3166,7 +3212,7 @@ static int _find_yz_path(ba_node_t *ba_node, int *first,
 							       
 			dim_curr_switch = &ba_node->axis_switch[i2];
 			if(dim_curr_switch->int_wire[2].used) {
-				debug4("returning here");
+				debug5("returning here");
 				return 0;
 			}
 							
@@ -3175,16 +3221,16 @@ static int _find_yz_path(ba_node_t *ba_node, int *first,
 			next_node = &ba_system_ptr->
 				grid[node_tar[X]][node_tar[Y]][node_tar[Z]];
 			dim_next_switch = &next_node->axis_switch[i2];
-			debug3("%c%c%c port 5",
+			debug4("%c%c%c port 5",
 			       alpha_num[next_node->coord[X]],
 			       alpha_num[next_node->coord[Y]],
 			       alpha_num[next_node->coord[Z]]);
 							  
 			if(dim_next_switch->int_wire[5].used) {
-				debug2("returning here 2");
+				debug3("returning here 2");
 				return 0;
 			}
-			debug4("%d %d %d %d",i2, node_tar[i2],
+			debug5("%d %d %d %d",i2, node_tar[i2],
 			       first[i2], geometry[i2]);
 
 			/* Here we need to see where we are in
@@ -3201,7 +3247,7 @@ static int _find_yz_path(ba_node_t *ba_node, int *first,
 				count = (node_tar[i2]-first[i2]);
 
 			if(count == geometry[i2]) {
-				debug4("found end of me %c%c%c",
+				debug5("found end of me %c%c%c",
 				       alpha_num[node_tar[X]],
 				       alpha_num[node_tar[Y]],
 				       alpha_num[node_tar[Z]]);
@@ -3224,7 +3270,7 @@ static int _find_yz_path(ba_node_t *ba_node, int *first,
 								PASS_FOUND_Z;
 					}
 					while(node_tar[i2] != first[i2]) {
-						debug3("on dim %d at %d "
+						debug4("on dim %d at %d "
 						       "looking for %d",
 						       i2,
 						       node_tar[i2],
@@ -3232,7 +3278,7 @@ static int _find_yz_path(ba_node_t *ba_node, int *first,
 						
 						if(dim_curr_switch->
 						   int_wire[2].used) {
-							debug3("returning "
+							debug4("returning "
 							       "here 3");
 							return 0;
 						} 
@@ -3262,7 +3308,7 @@ static int _find_yz_path(ba_node_t *ba_node, int *first,
 							axis_switch[i2];
 					}
 									
-					debug3("back to first on dim %d "
+					debug4("back to first on dim %d "
 					       "at %d looking for %d",
 					       i2,
 					       node_tar[i2],
@@ -3333,7 +3379,7 @@ static int _find_yz_path(ba_node_t *ba_node, int *first,
 			*/
 
 			dim_curr_switch = &ba_node->axis_switch[i2];
-			debug3("%d node %c%c%c port 0 -> 1",
+			debug4("%d node %c%c%c port 0 -> 1",
 			       i2,
 			       alpha_num[ba_node->coord[X]],
 			       alpha_num[ba_node->coord[Y]],
@@ -3459,7 +3505,7 @@ static int _reset_the_path(ba_switch_t *curr_switch, int source,
 		      port_tar);
 		return 0;
 	}
-	debug4("from %c%c%c %d %d -> %c%c%c %d",
+	debug5("from %c%c%c %d %d -> %c%c%c %d",
 	       alpha_num[node_curr[X]],
 	       alpha_num[node_curr[Y]],
 	       alpha_num[node_curr[Z]],
@@ -3472,7 +3518,7 @@ static int _reset_the_path(ba_switch_t *curr_switch, int source,
 	if(node_curr[X] == node_tar[X]
 	   && node_curr[Y] == node_tar[Y]
 	   && node_curr[Z] == node_tar[Z]) {
-		debug4("%d something bad happened!!", dim);
+		debug5("%d something bad happened!!", dim);
 		return 0;
 	}
 	next_switch = &ba_system_ptr->
@@ -3633,7 +3679,7 @@ start_again:
 		x = startx-1;
 	while(x!=startx) {
 		x++;
-		debug3("finding %c%c%c try %d",
+		debug4("finding %c%c%c try %d",
 		       alpha_num[ba_request->geometry[X]],
 #ifdef HAVE_3D
 		       alpha_num[ba_request->geometry[Y]],
@@ -3643,7 +3689,7 @@ start_again:
 #ifdef HAVE_3D
 	new_node:
 #endif
-		debug2("starting at %c%c%c",
+		debug3("starting at %c%c%c",
 		       alpha_num[start[X]]
 #ifdef HAVE_3D
 		       , alpha_num[start[Y]],
@@ -3660,7 +3706,7 @@ start_again:
 			;
 
 		if (!_node_used(ba_node, ba_request->geometry[X])) {
-			debug3("trying this node %c%c%c %c%c%c %d",
+			debug4("trying this node %c%c%c %c%c%c %d",
 			       alpha_num[start[X]],
 			       alpha_num[start[Y]],
 			       alpha_num[start[Z]],
@@ -3745,7 +3791,7 @@ static bool _node_used(ba_node_t* ba_node, int x_size)
 	
 	/* if we've used this node in another block already */
 	if (!ba_node || ba_node->used) {
-		debug3("node %c%c%c used", 
+		debug4("node %c%c%c used", 
 		       alpha_num[ba_node->coord[X]],
 		       alpha_num[ba_node->coord[Y]],
 		       alpha_num[ba_node->coord[Z]]);
@@ -3767,7 +3813,7 @@ static bool _node_used(ba_node_t* ba_node, int x_size)
 		   other they must be connected to the other ports.
 		*/
 		if(ba_switch->int_wire[3].used && ba_switch->int_wire[5].used) {
-			debug3("switch full in the X dim on node %c%c%c!",
+			debug4("switch full in the X dim on node %c%c%c!",
 			       alpha_num[ba_node->coord[X]],
 			       alpha_num[ba_node->coord[Y]],
 			       alpha_num[ba_node->coord[Z]]);
@@ -3952,7 +3998,7 @@ static int _set_external_wires(int dim, int count, ba_node_t* source,
 			       _port_enum(from_port),
 			       _port_enum(to_port));	
 		
-		debug2("dim %d from %c%c%c %d -> %c%c%c %d",
+		debug3("dim %d from %c%c%c %d -> %c%c%c %d",
 		       dim,
 		       alpha_num[source->coord[X]],
 		       alpha_num[source->coord[Y]],
@@ -4076,6 +4122,57 @@ static int _set_external_wires(int dim, int count, ba_node_t* source,
 			      count, DIM_SIZE[X]);
 			break;
 		}
+	} else if(DIM_SIZE[X] == 9) {
+		switch(count) {
+		case 0:
+		case 4:
+			/* 0 and 4th Node */
+			/* nothing */
+		case 5:
+		case 6:
+		case 7:
+			/*already handled below */
+			break;
+		case 1:
+			/* 1st Node */
+			target = &ba_system_ptr->grid[7]
+				[source->coord[Y]]
+				[source->coord[Z]];
+			/* 4->3 of 7th and back */
+			_switch_config(source, target, dim, 4, 3);
+			_switch_config(target, source, dim, 4, 3);
+			break;	
+		case 2:
+			/* 2nd Node */
+			target = &ba_system_ptr->grid[6]
+				[source->coord[Y]]
+				[source->coord[Z]];
+			/* 4->3 of 6th and back */
+			_switch_config(source, target, dim, 4, 3);
+			_switch_config(target, source, dim, 4, 3);
+			break;
+		case 3:
+			/* 3rd Node */
+			target = &ba_system_ptr->grid[5]
+				[source->coord[Y]]
+				[source->coord[Z]];
+			/* 4->3 of 5th and back */
+			_switch_config(source, target, dim, 4, 3);
+			_switch_config(target, source, dim, 4, 3);
+			break;
+		case 8:
+			/* 8th Node */
+			target = &ba_system_ptr->grid[0]
+				[source->coord[Y]]
+				[source->coord[Z]];
+			/* 4->3 of 0th */
+			_switch_config(source, target, dim, 4, 3);	
+			break;
+		default:
+			fatal("got %d for a count on a %d X-dim system",
+			      count, DIM_SIZE[X]);
+			break;
+		}
 	} else if(DIM_SIZE[X] == 13) {
 		int temp_num = 0;
 
@@ -4099,7 +4196,7 @@ static int _set_external_wires(int dim, int count, ba_node_t* source,
 		case 5:
 			/* get the node count - 1 then subtract it
 			 * from 12 to get the new target and then go
-			 * from 3->4 and back again
+			 * from 4->3 and back again
 			 */
 			temp_num = 12 - (count - 1);
 			if(temp_num < 5) 
@@ -4109,10 +4206,10 @@ static int _set_external_wires(int dim, int count, ba_node_t* source,
 			target = &ba_system_ptr->grid[temp_num]
 				[source->coord[Y]]
 				[source->coord[Z]];
-			/* 3->4 */
-			_switch_config(source, target, dim, 3, 4);
-			/* and back 3->4 */
-			_switch_config(target, source, dim, 3, 4);
+			/* 4->3 */
+			_switch_config(source, target, dim, 4, 3);
+			/* and back 4->3 */
+			_switch_config(target, source, dim, 4, 3);
 			break;
 		case 7:
 			/* 7th Node */
@@ -4167,7 +4264,7 @@ static char *_set_internal_wires(List nodes, int size, int conn_type)
 			 alpha_num[ba_node[count]->coord[X]],
 			 alpha_num[ba_node[count]->coord[Y]],
 			 alpha_num[ba_node[count]->coord[Z]]);
-		debug3("name = %s", temp_name);
+		debug4("name = %s", temp_name);
 		count++;
 		hostlist_push(hostlist, temp_name);
 	}
@@ -4184,7 +4281,7 @@ static char *_set_internal_wires(List nodes, int size, int conn_type)
 			if(ba_node[i]->letter == '.') {
 				ba_node[i]->letter = letters[color_count%62];
 				ba_node[i]->color = colors[color_count%6];
-				debug3("count %d setting letter = %c "
+				debug4("count %d setting letter = %c "
 				       "color = %d",
 				       color_count,
 				       ba_node[i]->letter,
@@ -4281,7 +4378,7 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 		return 0;
 	}			
 	
-	debug3("Algo(%d) found - %d", algo, found);
+	debug4("Algo(%d) found - %d", algo, found);
 
 	/* Check the 2 ports we can leave though in ports_to_try */
 	for(i=0;i<2;i++) {
@@ -4321,7 +4418,7 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 			   already been before */
 			itr = list_iterator_create(results);
 			while((next_node = list_next(itr))) {
-				debug3("Algo(%d) looking at %c%c%c and %c%c%c",
+				debug4("Algo(%d) looking at %c%c%c and %c%c%c",
 				       algo,
 				       alpha_num[next_node->coord[X]],
 				       alpha_num[next_node->coord[Y]],
@@ -4338,7 +4435,7 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 			}
 			list_iterator_destroy(itr);
 			if(not_first && found < DIM_SIZE[X]) {
-				debug2("Algo(%d) already been there before",
+				debug3("Algo(%d) already been there before",
 				       algo);
 				not_first = 0;
 				continue;
@@ -4355,17 +4452,17 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 			next_switch = &next_node->axis_switch[X];
 
  			if((conn_type == SELECT_MESH) && (found == (x_size))) {
-				debug2("Algo(%d) we found the end of the mesh",
+				debug3("Algo(%d) we found the end of the mesh",
 				       algo);
 				return 1;
 			}
-			debug3("Algo(%d) Broke = %d Found = %d x_size = %d",
+			debug4("Algo(%d) Broke = %d Found = %d x_size = %d",
 			       algo, broke, found, x_size);
 
 			if(broke && (found == x_size)) {
 				goto found_path;
 			} else if(found == x_size) {
-				debug2("Algo(%d) finishing the torus!", algo);
+				debug3("Algo(%d) finishing the torus!", algo);
 
 				if(deny_pass && (*deny_pass & PASS_DENY_X)) {
 					info("we don't allow passthroughs 1");
@@ -4383,10 +4480,11 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 				else
 					path = list_create(_delete_path_list);
 				
-				_finish_torus(curr_switch, 0, X, 0, start);
+				_finish_torus(results, 
+					      curr_switch, 0, X, 0, start);
 
 				if(best_count < BEST_COUNT_INIT) {
-					debug2("Algo(%d) Found a best path "
+					debug3("Algo(%d) Found a best path "
 					       "with %d steps.",
 					       algo, best_count);
 					_set_best_path();
@@ -4401,7 +4499,7 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 
 			if (!_node_used(next_node, x_size)) {
 #ifdef HAVE_BG
-				debug2("Algo(%d) found %d looking at %c%c%c "
+				debug3("Algo(%d) found %d looking at %c%c%c "
 				       "%d going to %c%c%c %d",
 				       algo,
 				       found,
@@ -4427,7 +4525,7 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 				list_iterator_destroy(itr);
 				if(!check_node) {
 #ifdef HAVE_BG
-					debug2("Algo(%d) add %c%c%c",
+					debug3("Algo(%d) add %c%c%c",
 					       algo,
 					       alpha_num[next_node->coord[X]],
 					       alpha_num[next_node->coord[Y]],
@@ -4436,7 +4534,7 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 					list_append(results, next_node);
 				} else {
 #ifdef HAVE_BG
-					debug2("Algo(%d) Hey this is already "
+					debug3("Algo(%d) Hey this is already "
 					       "added %c%c%c",
 					       algo,
 					       alpha_num[node_tar[X]],
@@ -4457,7 +4555,7 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 				} else {
 				found_path:
 #ifdef HAVE_BG
-					debug2("Algo(%d) added node %c%c%c "
+					debug3("Algo(%d) added node %c%c%c "
 					       "%d %d -> %c%c%c %d %d",
 					       algo,
 					       alpha_num[ba_node->coord[X]],
@@ -4498,11 +4596,11 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 	}
 
 	if(algo == BLOCK_ALGO_FIRST) {
-		debug2("Algo(%d) couldn't find path", algo);
+		debug3("Algo(%d) couldn't find path", algo);
 		return 0;
 	} else if(algo == BLOCK_ALGO_SECOND) {
 #ifdef HAVE_BG
-		debug2("Algo(%d) looking for the next free node "
+		debug3("Algo(%d) looking for the next free node "
 		       "starting at %c%c%c",
 		       algo,
 		       alpha_num[ba_node->coord[X]],
@@ -4523,7 +4621,7 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 		_find_next_free_using_port_2(curr_switch, 0, results, X, 0);
 		
 		if(best_count < BEST_COUNT_INIT) {
-			debug2("Algo(%d) yes found next free %d", algo,
+			debug3("Algo(%d) yes found next free %d", algo,
 			       best_count);
 			node_tar = _set_best_path();
 
@@ -4543,7 +4641,7 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 			next_switch = &next_node->axis_switch[X];
 			
 #ifdef HAVE_BG
-			debug2("Algo(%d) found %d looking at %c%c%c "
+			debug3("Algo(%d) found %d looking at %c%c%c "
 			       "going to %c%c%c %d",
 			       algo, found,
 			       alpha_num[ba_node->coord[X]],
@@ -4564,12 +4662,12 @@ static int _find_x_path(List results, ba_node_t *ba_node,
 				found--;
 				_reset_the_path(curr_switch, 0, 1, X);
 				_remove_node(results, next_node->coord);
-				debug2("Algo(%d) couldn't finish "
+				debug3("Algo(%d) couldn't finish "
 				       "the path off this one", algo);
 			}
 		} 
 		
-		debug2("Algo(%d) couldn't find path", algo);
+		debug3("Algo(%d) couldn't find path", algo);
 		return 0;
 	}
 
@@ -4590,7 +4688,7 @@ static int _remove_node(List results, int *node_tar)
 		if(node_tar[X] == ba_node->coord[X] 
 		   && node_tar[Y] == ba_node->coord[Y] 
 		   && node_tar[Z] == ba_node->coord[Z]) {
-			debug2("removing %c%c%c from list",
+			debug3("removing %c%c%c from list",
 			       alpha_num[node_tar[X]],
 			       alpha_num[node_tar[Y]],
 			       alpha_num[node_tar[Z]]);
@@ -4599,7 +4697,7 @@ static int _remove_node(List results, int *node_tar)
 		}
 #else
 		if(node_tar[X] == ba_node->coord[X]) {
-			debug2("removing %d from list",
+			debug3("removing %d from list",
 			       node_tar[X]);
 			list_remove (itr);
 			break;
@@ -4669,7 +4767,7 @@ static int _find_next_free_using_port_2(ba_switch_t *curr_switch,
 	   .used) {
 		
 #ifdef HAVE_BG
-		debug2("this one not found %c%c%c",
+		debug3("this one not found %c%c%c",
 		       alpha_num[node_tar[X]],
 		       alpha_num[node_tar[Y]],
 		       alpha_num[node_tar[Z]]);
@@ -4730,6 +4828,7 @@ static int _find_next_free_using_port_2(ba_switch_t *curr_switch,
 		}
 		list_iterator_destroy(itr);
 			
+		/* check to see if wire 0 is used with this port */
 		if(curr_switch->
 		   ext_wire[port_to_try].node_tar[X]
 		   == curr_switch->ext_wire[0].node_tar[X]  
@@ -4767,7 +4866,7 @@ static int _find_next_free_using_port_2(ba_switch_t *curr_switch,
 					dim, count);
 			while((temp_switch = list_pop(path)) != path_add){
 				xfree(temp_switch);
-				debug3("something here 1");
+				debug4("something here 1");
 			}
 		}
 	}
@@ -4793,7 +4892,8 @@ return_0:
  * to apply this path to the main system (ba_system_ptr)
  */
 
-static int _finish_torus(ba_switch_t *curr_switch, int source_port,
+static int _finish_torus(List results, 
+			 ba_switch_t *curr_switch, int source_port,
 			 int dim, int count, int *start)
 {
 	ba_switch_t *next_switch = NULL;
@@ -4890,6 +4990,8 @@ static int _finish_torus(ba_switch_t *curr_switch, int source_port,
 				}
 			}
 			list_iterator_destroy(itr);
+
+			/* check to see if wire 0 is used with this port */
 			if((curr_switch->
 			    ext_wire[ports_to_try[i]].node_tar[X] ==
 			    curr_switch->ext_wire[0].node_tar[X] &&
@@ -4901,12 +5003,50 @@ static int _finish_torus(ba_switch_t *curr_switch, int source_port,
 			    curr_switch->ext_wire[0].node_tar[Z])) {
 				continue;
 			}
+
+
 			if(!used) {
+				ba_node_t *next_node = NULL;
 				port_tar = curr_switch->
 					ext_wire[ports_to_try[i]].port_tar;
 				node_tar = curr_switch->
 					ext_wire[ports_to_try[i]].node_tar;
-				
+
+				/* Check to see if I am going to a place I have
+				   already been before, because even
+				   though we may be able to do this
+				   electrically this doesn't mean the
+				   under lying infrastructure will
+				   allow it. */
+				itr = list_iterator_create(results);
+				while((next_node = list_next(itr))) {
+					debug4("finishing_torus: "
+					       "looking at %c%c%c and %c%c%c",
+					       alpha_num[next_node->coord[X]],
+					       alpha_num[next_node->coord[Y]],
+					       alpha_num[next_node->coord[Z]],
+					       alpha_num[node_tar[X]],
+					       alpha_num[node_tar[Y]],
+					       alpha_num[node_tar[Z]]);
+					if((node_tar[X] == next_node->coord[X]) 
+					   && (node_tar[Y] 
+					       == next_node->coord[Y])
+					   && (node_tar[Z] 
+					       == next_node->coord[Z])) {
+						break;
+					}				
+				}
+				list_iterator_destroy(itr);
+				if(next_node) {
+					debug3("finishing_torus: "
+					       "Can't finish torus with "
+					       "%c%c%c we already were there.",
+					       alpha_num[next_node->coord[X]],
+					       alpha_num[next_node->coord[Y]],
+					       alpha_num[next_node->coord[Z]]);
+					continue;
+				}
+
 				next_switch = &ba_system_ptr->grid[node_tar[X]]
 #ifdef HAVE_3D
 					[node_tar[Y]]
@@ -4918,12 +5058,12 @@ static int _finish_torus(ba_switch_t *curr_switch, int source_port,
 				count++;
 				path_add->out = ports_to_try[i];
 				list_push(path, path_add);
-				_finish_torus(next_switch, port_tar, 
+				_finish_torus(results, next_switch, port_tar, 
 					      dim, count, start);
 				while((temp_switch = list_pop(path))
 				      != path_add){
 					xfree(temp_switch);
-					debug3("something here 3");
+					debug4("something here 3");
 				}
 			}
 		}
@@ -4955,7 +5095,7 @@ static int *_set_best_path()
 			debug2("got a passthrough in X");
 		}
 #ifdef HAVE_3D
-		debug3("mapping %c%c%c %d->%d",
+		debug4("mapping %c%c%c %d->%d",
 		       alpha_num[path_switch->geometry[X]],
 		       alpha_num[path_switch->geometry[Y]],
 		       alpha_num[path_switch->geometry[Z]],
@@ -5016,189 +5156,3 @@ static void _destroy_geo(void *object)
 	int *geo_ptr = (int *)object;
 	xfree(geo_ptr);
 }
-
-//#define BUILD_EXE
-#ifdef BUILD_EXE
-/** */
-int main(int argc, char** argv)
-{
-	ba_request_t *request = (ba_request_t*) xmalloc(sizeof(ba_request_t)); 
-	log_options_t log_opts = LOG_OPTS_INITIALIZER;
-	int debug_level = 6;
-	node_info_msg_t *new_node_ptr = NULL;
-
-	List results;
-//	List results2;
-//	int i,j;
-	log_opts.stderr_level  = debug_level;
-	log_opts.logfile_level = debug_level;
-	log_opts.syslog_level  = debug_level;
-	
-	log_alter(log_opts, LOG_DAEMON, 
-		  "/dev/null");
-	
-	DIM_SIZE[X]=0;
-	DIM_SIZE[Y]=0;
-	DIM_SIZE[Z]=0;
-	while (slurm_load_node((time_t) NULL, &new_node_ptr, SHOW_ALL)) { 
-		
-		sleep(10);	/* keep trying to reconnect */
-	}
-	
-	ba_init(new_node_ptr);
-	init_wires(NULL);
-						
-	results = list_create(NULL);
-	request->geometry[0] = 1;
-	request->geometry[1] = 1;
-	request->geometry[2] = 1;
-	request->start[0] = 6;
-	request->start[1] = 3;
-	request->start[2] = 2;
-	request->start_req = 1;
-//	request->size = 1;
-	request->rotate = 0;
-	request->elongate = 0;
-	request->conn_type = SELECT_TORUS;
-	new_ba_request(request);
-	print_ba_request(request);
-	if(!allocate_block(request, results)) {
-       		debug("couldn't allocate %c%c%c",
-		       request->geometry[0],
-		       request->geometry[1],
-		       request->geometry[2]);
-	}
-	list_destroy(results);
-
-	results = list_create(NULL);
-	request->geometry[0] = 2;
-	request->geometry[1] = 4;
-	request->geometry[2] = 1;
-	request->start[0] = 3;
-	request->start[1] = 0;
-	request->start[2] = 2;
-	request->start_req = 1;
-//	request->size = 16;
-	request->rotate = 0;
-	request->elongate = 0;
-	request->conn_type = SELECT_TORUS;
-	new_ba_request(request);
-	print_ba_request(request);
-	if(!allocate_block(request, results)) {
-       		debug("couldn't allocate %c%c%c",
-		       alpha_num[request->geometry[0]],
-		       alpha_num[request->geometry[1]],
-		       alpha_num[request->geometry[2]]);
-	}
-	list_destroy(results);
-
-	results = list_create(NULL);
-	request->geometry[0] = 2;
-	request->geometry[1] = 1;
-	request->geometry[2] = 4;
-	request->start[0] = 5;
-	request->start[1] = 2;
-	request->start[2] = 0;
-	request->start_req = 1;
-	request->rotate = 0;
-	request->elongate = 0;
-	request->conn_type = SELECT_TORUS;
-	new_ba_request(request);
-	print_ba_request(request);
-	if(!allocate_block(request, results)) {
-       		debug("couldn't allocate %c%c%c",
-		       alpha_num[request->geometry[0]],
-		       alpha_num[request->geometry[1]],
-		       alpha_num[request->geometry[2]]);
-	}
-	list_destroy(results);
-	
-/* 	results = list_create(NULL); */
-/* 	request->geometry[0] = 4; */
-/* 	request->geometry[1] = 4; */
-/* 	request->geometry[2] = 4; */
-/* 	//request->size = 2; */
-/* 	request->conn_type = SELECT_TORUS; */
-/* 	new_ba_request(request); */
-/* 	print_ba_request(request); */
-/* 	if(!allocate_block(request, results)) { */
-/*        		printf("couldn't allocate %c%c%c\n", */
-/* 		       request->geometry[0], */
-/* 		       request->geometry[1], */
-/* 		       request->geometry[2]); */
-/* 	} */
-
-/* 	results = list_create(NULL); */
-/* 	request->geometry[0] = 1; */
-/* 	request->geometry[1] = 4; */
-/* 	request->geometry[2] = 4; */
-/* 	//request->size = 2; */
-/* 	request->conn_type = SELECT_TORUS; */
-/* 	new_ba_request(request); */
-/* 	print_ba_request(request); */
-/* 	if(!allocate_block(request, results)) { */
-/*        		printf("couldn't allocate %c%c%c\n", */
-/* 		       request->geometry[0], */
-/* 		       request->geometry[1], */
-/* 		       request->geometry[2]); */
-/* 	} */
-	
-	int dim,j;
-	int x,y,z;
-	int startx=0;
-	int starty=0;
-	int startz=0;
-	int endx=DIM_SIZE[X];
-	int endy=1;//DIM_SIZE[Y];
-	int endz=1;//DIM_SIZE[Z];
-
-	for(x=startx;x<endx;x++) {
-		for(y=starty;y<endy;y++) {
-			for(z=startz;z<endz;z++) {
-				ba_node_t *curr_node = 
-					&(ba_system_ptr->grid[x][y][z]);
-				info("Node %c%c%c Used = %d Letter = %c",
-				     alpha_num[x],alpha_num[y],alpha_num[z],
-				     curr_node->used,
-				     curr_node->letter);
-				for(dim=0;dim<1;dim++) {
-					info("Dim %d",dim);
-					ba_switch_t *wire =
-						&curr_node->axis_switch[dim];
-					for(j=0;j<NUM_PORTS_PER_NODE;j++)
-						info("\t%d -> %d -> %c%c%c %d "
-						     "Used = %d",
-						     j, wire->int_wire[j].
-						     port_tar,
-						     alpha_num[wire->ext_wire[
-							     wire->int_wire[j].
-							     port_tar].
-							       node_tar[X]],
-						     alpha_num[wire->ext_wire[
-							     wire->int_wire[j].
-							     port_tar].
-						     node_tar[Y]],
-						     alpha_num[wire->ext_wire[
-							     wire->int_wire[j].
-							     port_tar].
-						     node_tar[Z]],
-						     wire->ext_wire[
-							     wire->int_wire[j].
-							     port_tar].
-						     port_tar,
-						     wire->int_wire[j].used);
-				}
-			}
-		}
-	}
-	/* list_destroy(results); */
-
-/* 	ba_fini(); */
-
-/* 	delete_ba_request(request); */
-	
-	return 0;
-}
-
-
-#endif
diff --git a/src/plugins/select/bluegene/block_allocator/block_allocator.h b/src/plugins/select/bluegene/block_allocator/block_allocator.h
index 45aea50ca..61e62e059 100644
--- a/src/plugins/select/bluegene/block_allocator/block_allocator.h
+++ b/src/plugins/select/bluegene/block_allocator/block_allocator.h
@@ -7,7 +7,8 @@
  *  Written by Dan Phung <phung4@llnl.gov>, Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -272,6 +273,7 @@ extern int DIM_SIZE[BA_SYSTEM_DIMENSIONS]; /* how many midplanes in
 extern s_p_options_t bg_conf_file_options[]; /* used to parse the
 					      * bluegene.conf file. */
 extern uint16_t ba_deny_pass;
+extern ba_system_t *ba_system_ptr;
 
 /* Translate a state enum to a readable string */
 extern char *bg_block_state_string(rm_partition_state_t state);
@@ -314,13 +316,9 @@ extern void destroy_ba_node(void *ptr);
  * IN/OUT - geometry: requested/returned geometry of block
  * IN - linuximage: LinuxImage for this block if not default
  * IN - mloaderimage: MLoaderImage for this block if not default
- * IN - nodecards: Number of nodecards in each block in request only
- *      used of small block allocations.
  * OUT - passthroughs: if there were passthroughs used in the
  *       generation of the block.
  * IN - procs: Number of real processors requested
- * IN - quarters: Number of midplane quarters in each block in request only
- *      used of small block allocations.
  * IN - RamDiskimage: RamDiskImage for this block if not default
  * IN - rotate: if true, allows rotation of block during fit
  * OUT - save_name: hostlist of midplanes used in block
diff --git a/src/plugins/select/bluegene/block_allocator/bridge_linker.c b/src/plugins/select/bluegene/block_allocator/bridge_linker.c
index c2f90061d..43ef5210f 100644
--- a/src/plugins/select/bluegene/block_allocator/bridge_linker.c
+++ b/src/plugins/select/bluegene/block_allocator/bridge_linker.c
@@ -7,7 +7,8 @@
  *  Written by Dan Phung <phung4@llnl.gov>, Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/select/bluegene/block_allocator/bridge_linker.h b/src/plugins/select/bluegene/block_allocator/bridge_linker.h
index 8c4a00cd8..6ec9bf8bc 100644
--- a/src/plugins/select/bluegene/block_allocator/bridge_linker.h
+++ b/src/plugins/select/bluegene/block_allocator/bridge_linker.h
@@ -7,7 +7,8 @@
  *  Written by Dan Phung <phung4@llnl.gov>, Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/select/bluegene/block_allocator/wire_test.c b/src/plugins/select/bluegene/block_allocator/wire_test.c
new file mode 100644
index 000000000..29a720d7c
--- /dev/null
+++ b/src/plugins/select/bluegene/block_allocator/wire_test.c
@@ -0,0 +1,201 @@
+/*****************************************************************************\
+ *  wire_test.c - used to debug and test wires on any given system.  
+ *
+ *  $Id: block_allocator.c 17495 2009-05-14 16:49:52Z da $
+ *****************************************************************************
+ *  Copyright (C) 2004 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#if HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include "block_allocator.h"
+#include "src/common/uid.h"
+#include "src/common/timers.h"
+
+/** */
+int main(int argc, char** argv)
+{
+	ba_request_t *request = (ba_request_t*) xmalloc(sizeof(ba_request_t)); 
+	log_options_t log_opts = LOG_OPTS_INITIALIZER;
+	int debug_level = 5;
+
+	List results;
+//	List results2;
+//	int i,j;
+	log_opts.stderr_level  = debug_level;
+	log_opts.logfile_level = debug_level;
+	log_opts.syslog_level  = debug_level;
+	
+	log_alter(log_opts, LOG_DAEMON, 
+		  "/dev/null");
+	
+	DIM_SIZE[X]=0;
+	DIM_SIZE[Y]=0;
+	DIM_SIZE[Z]=0;
+
+	slurm_conf_reinit(NULL);
+	ba_init(NULL);
+	init_wires(NULL);
+		
+	/* [010x831] */
+/* 	results = list_create(NULL); */
+/* 	request->geometry[0] = 9; */
+/* 	request->geometry[1] = 3; */
+/* 	request->geometry[2] = 2; */
+/* 	request->start[0] = 0; */
+/* 	request->start[1] = 1; */
+/* 	request->start[2] = 0; */
+/* 	request->start_req = 1; */
+/* //	request->size = 16; */
+/* 	request->rotate = 0; */
+/* 	request->elongate = 0; */
+/* 	request->conn_type = SELECT_TORUS; */
+/* 	new_ba_request(request); */
+/* 	print_ba_request(request); */
+/* 	if(!allocate_block(request, results)) { */
+/*        		debug("couldn't allocate %c%c%c", */
+/* 		       alpha_num[request->geometry[0]], */
+/* 		       alpha_num[request->geometry[1]], */
+/* 		       alpha_num[request->geometry[2]]); */
+/* 	} */
+/* 	list_destroy(results); */
+
+/* 	/\* [001x801] *\/ */
+/* 	results = list_create(NULL); */
+/* 	request->geometry[0] = 9; */
+/* 	request->geometry[1] = 1; */
+/* 	request->geometry[2] = 1; */
+/* 	request->start[0] = 0; */
+/* 	request->start[1] = 0; */
+/* 	request->start[2] = 1; */
+/* 	request->start_req = 1; */
+/* //	request->size = 1; */
+/* 	request->rotate = 0; */
+/* 	request->elongate = 0; */
+/* 	request->conn_type = SELECT_TORUS; */
+/* 	new_ba_request(request); */
+/* 	print_ba_request(request); */
+/* 	if(!allocate_block(request, results)) { */
+/*        		debug("couldn't allocate %c%c%c", */
+/* 		       request->geometry[0], */
+/* 		       request->geometry[1], */
+/* 		       request->geometry[2]); */
+/* 	} */
+/* 	list_destroy(results); */
+
+	/* [001x801] */
+	results = list_create(NULL);
+	request->geometry[0] = 7;
+	request->geometry[1] = 4;
+	request->geometry[2] = 2;
+	request->start[0] = 0;
+	request->start[1] = 0;
+	request->start[2] = 0;
+	request->start_req = 0;
+//	request->size = 1;
+	request->rotate = 1;
+	request->elongate = 1;
+	request->conn_type = SELECT_TORUS;
+	new_ba_request(request);
+	print_ba_request(request);
+	if(!allocate_block(request, results)) {
+       		debug("couldn't allocate %c%c%c",
+		       request->geometry[0],
+		       request->geometry[1],
+		       request->geometry[2]);
+	}
+	list_destroy(results);
+
+	
+	int dim,j;
+	int x,y,z;
+	int startx=0;
+	int starty=0;
+	int startz=0;
+	int endx=DIM_SIZE[X];
+	int endy=1;//DIM_SIZE[Y];
+	int endz=1;//DIM_SIZE[Z];
+
+	for(x=startx;x<endx;x++) {
+		for(y=starty;y<endy;y++) {
+			for(z=startz;z<endz;z++) {
+				ba_node_t *curr_node = 
+					&(ba_system_ptr->grid[x][y][z]);
+				info("Node %c%c%c Used = %d Letter = %c",
+				     alpha_num[x],alpha_num[y],alpha_num[z],
+				     curr_node->used,
+				     curr_node->letter);
+				for(dim=0;dim<1;dim++) {
+					info("Dim %d",dim);
+					ba_switch_t *wire =
+						&curr_node->axis_switch[dim];
+					for(j=0;j<NUM_PORTS_PER_NODE;j++)
+						info("\t%d -> %d -> %c%c%c %d "
+						     "Used = %d",
+						     j, wire->int_wire[j].
+						     port_tar,
+						     alpha_num[wire->ext_wire[
+							     wire->int_wire[j].
+							     port_tar].
+							       node_tar[X]],
+						     alpha_num[wire->ext_wire[
+							     wire->int_wire[j].
+							     port_tar].
+						     node_tar[Y]],
+						     alpha_num[wire->ext_wire[
+							     wire->int_wire[j].
+							     port_tar].
+						     node_tar[Z]],
+						     wire->ext_wire[
+							     wire->int_wire[j].
+							     port_tar].
+						     port_tar,
+						     wire->int_wire[j].used);
+				}
+			}
+		}
+	}
+	/* list_destroy(results); */
+
+/* 	ba_fini(); */
+
+/* 	delete_ba_request(request); */
+	
+	return 0;
+}
diff --git a/src/plugins/select/bluegene/plugin/Makefile.in b/src/plugins/select/bluegene/plugin/Makefile.in
index a862654ee..aca3aceb3 100644
--- a/src/plugins/select/bluegene/plugin/Makefile.in
+++ b/src/plugins/select/bluegene/plugin/Makefile.in
@@ -46,14 +46,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -176,6 +180,10 @@ 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@
diff --git a/src/plugins/select/bluegene/plugin/bg_block_info.c b/src/plugins/select/bluegene/plugin/bg_block_info.c
index 5bc20ac15..114334712 100644
--- a/src/plugins/select/bluegene/plugin/bg_block_info.c
+++ b/src/plugins/select/bluegene/plugin/bg_block_info.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  bg_block_info.c - bluegene block information from the db2 database.
  *
- *  $Id: bg_block_info.c 17202 2009-04-09 16:56:23Z da $
+ *  $Id: bg_block_info.c 17534 2009-05-19 00:58:46Z da $
  *****************************************************************************
  *  Copyright (C) 2004-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -90,7 +91,7 @@ static int _block_is_deallocating(bg_record_t *bg_record)
 	if(bg_record->modifying)
 		return SLURM_SUCCESS;
 	
-	user_name = xstrdup(bg_slurm_user_name);
+	user_name = xstrdup(bg_conf->slurm_user_name);
 	if(remove_all_users(bg_record->bg_block_id, NULL) 
 	   == REMOVE_USER_ERR) {
 		error("Something happened removing "
@@ -136,9 +137,10 @@ static int _block_is_deallocating(bg_record_t *bg_record)
 		bg_record->target_name = xstrdup(bg_record->user_name);
 	}
 
-	if(remove_from_bg_list(bg_job_block_list, bg_record) == SLURM_SUCCESS) 
+	if(remove_from_bg_list(bg_lists->job_running, bg_record)
+	   == SLURM_SUCCESS) 
 		num_unused_cpus += bg_record->cpu_cnt;			       
-	remove_from_bg_list(bg_booted_block_list, bg_record);
+	remove_from_bg_list(bg_lists->booted, bg_record);
 
 	xfree(user_name);
 			
@@ -174,7 +176,7 @@ extern int block_ready(struct job_record *job_ptr)
 	rc = select_g_get_jobinfo(job_ptr->select_jobinfo,
 				  SELECT_DATA_BLOCK_ID, &block_id);
 	if (rc == SLURM_SUCCESS) {
-		bg_record = find_bg_record_in_list(bg_list, block_id);
+		bg_record = find_bg_record_in_list(bg_lists->main, block_id);
 		slurm_mutex_lock(&block_state_mutex);
 		
 		if(bg_record) {
@@ -189,7 +191,7 @@ extern int block_ready(struct job_record *job_ptr)
 			else
 				rc = READY_JOB_ERROR;	/* try again */
 		} else {
-			error("block_ready: block %s not in bg_list.",
+			error("block_ready: block %s not in bg_lists->main.",
 			      block_id);
 			rc = READY_JOB_FATAL;	/* fatal error */
 		}
@@ -213,10 +215,9 @@ extern void pack_block(bg_record_t *bg_record, Buf buffer)
 	pack16((uint16_t)bg_record->conn_type, buffer);
 #ifdef HAVE_BGL
 	pack16((uint16_t)bg_record->node_use, buffer);	
-	pack16((uint16_t)0, buffer);	
-	pack16((uint16_t)0, buffer);	
 #endif
 	pack32((uint32_t)bg_record->node_cnt, buffer);
+	pack32((uint32_t)bg_record->job_running, buffer);
 	pack_bit_fmt(bg_record->bitmap, buffer);
 	pack_bit_fmt(bg_record->ionode_bitmap, buffer);
 #ifdef HAVE_BGL
@@ -248,18 +249,18 @@ extern int update_block_list()
 	if(!kill_job_list)
 		kill_job_list = list_create(_destroy_kill_struct);
 
-	if(!bg_list) 
+	if(!bg_lists->main) 
 		return updated;
 	
 	slurm_mutex_lock(&block_state_mutex);
-	itr = list_iterator_create(bg_list);
+	itr = list_iterator_create(bg_lists->main);
 	while ((bg_record = (bg_record_t *) list_next(itr)) != NULL) {
 		if(!bg_record->bg_block_id)
 			continue;
 		name = bg_record->bg_block_id;
 		if ((rc = bridge_get_block_info(name, &block_ptr)) 
 		    != STATUS_OK) {
-			if(bluegene_layout_mode == LAYOUT_DYNAMIC) {
+			if(bg_conf->layout_mode == LAYOUT_DYNAMIC) {
 				switch(rc) {
 				case INCONSISTENT_DATA:
 					debug2("got inconsistent data when "
@@ -301,8 +302,8 @@ extern int update_block_list()
 			updated = 1;
 		}
 #else
-		if((bg_record->node_cnt < bluegene_bp_node_cnt) 
-		   || (bluegene_bp_node_cnt == bluegene_nodecard_node_cnt)) {
+		if((bg_record->node_cnt < bg_conf->bp_node_cnt) 
+		   || (bg_conf->bp_node_cnt == bg_conf->nodecard_node_cnt)) {
 			char *mode = NULL;
 			uint16_t conn_type = SELECT_SMALL;
 			if ((rc = bridge_get_data(block_ptr,
@@ -404,12 +405,12 @@ extern int update_block_list()
 			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_job_block_list, 
+				if(remove_from_bg_list(bg_lists->job_running, 
 						       bg_record) 
 				   == SLURM_SUCCESS) {
 					num_unused_cpus += bg_record->cpu_cnt;
 				}
-				remove_from_bg_list(bg_booted_block_list,
+				remove_from_bg_list(bg_lists->booted,
 						    bg_record);
 			} 
 			updated = 1;
@@ -445,7 +446,7 @@ extern int update_block_list()
 					freeit->jobid = bg_record->job_running;
 					list_push(kill_job_list, freeit);
 					if(remove_from_bg_list(
-						   bg_job_block_list, 
+						   bg_lists->job_running, 
 						   bg_record) 
 					   == SLURM_SUCCESS) {
 						num_unused_cpus += 
@@ -455,7 +456,7 @@ extern int update_block_list()
 					error("block %s in an error "
 					      "state while booting.",
 					      bg_record->bg_block_id);
-				remove_from_bg_list(bg_booted_block_list,
+				remove_from_bg_list(bg_lists->booted,
 						    bg_record);
 				trigger_block_error();
 				break;
@@ -495,14 +496,14 @@ extern int update_block_list()
 					bg_record->boot_state = 0;
 					bg_record->boot_count = 0;
 					if(remove_from_bg_list(
-						   bg_job_block_list, 
+						   bg_lists->job_running, 
 						   bg_record) 
 					   == SLURM_SUCCESS) {
 						num_unused_cpus += 
 							bg_record->cpu_cnt;
 					} 
 					remove_from_bg_list(
-						bg_booted_block_list,
+						bg_lists->booted,
 						bg_record);
 				}
 				break;
@@ -576,11 +577,11 @@ extern int update_freeing_block_list()
 	bg_record_t *bg_record = NULL;
 	ListIterator itr = NULL;
 	
-	if(!bg_freeing_list) 
+	if(!bg_lists->freeing) 
 		return updated;
 	
 	slurm_mutex_lock(&block_state_mutex);
-	itr = list_iterator_create(bg_freeing_list);
+	itr = list_iterator_create(bg_lists->freeing);
 	while ((bg_record = (bg_record_t *) list_next(itr)) != NULL) {
 		if(!bg_record->bg_block_id)
 			continue;
@@ -588,7 +589,7 @@ extern int update_freeing_block_list()
 		name = bg_record->bg_block_id;
 		if ((rc = bridge_get_block_info(name, &block_ptr)) 
 		    != STATUS_OK) {
-			if(bluegene_layout_mode == LAYOUT_DYNAMIC) {
+			if(bg_conf->layout_mode == LAYOUT_DYNAMIC) {
 				switch(rc) {
 				case INCONSISTENT_DATA:
 					debug2("got inconsistent data when "
diff --git a/src/plugins/select/bluegene/plugin/bg_block_info.h b/src/plugins/select/bluegene/plugin/bg_block_info.h
index d50db0d09..9d20a11b6 100644
--- a/src/plugins/select/bluegene/plugin/bg_block_info.h
+++ b/src/plugins/select/bluegene/plugin/bg_block_info.h
@@ -6,7 +6,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/select/bluegene/plugin/bg_boot_time.h b/src/plugins/select/bluegene/plugin/bg_boot_time.h
index dd53c74c3..d1cd399b7 100644
--- a/src/plugins/select/bluegene/plugin/bg_boot_time.h
+++ b/src/plugins/select/bluegene/plugin/bg_boot_time.h
@@ -7,7 +7,8 @@
  *  Written by Morris Jette <jette1@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/select/bluegene/plugin/bg_job_place.c b/src/plugins/select/bluegene/plugin/bg_job_place.c
index abd4c48af..0174a675a 100644
--- a/src/plugins/select/bluegene/plugin/bg_job_place.c
+++ b/src/plugins/select/bluegene/plugin/bg_job_place.c
@@ -1,15 +1,15 @@
 /*****************************************************************************\
  *  bg_job_place.c - blue gene job placement (e.g. base block selection)
  *  functions.
- *
- *  $Id: bg_job_place.c 17205 2009-04-09 17:24:11Z da $ 
  *****************************************************************************
  *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dan Phung <phung4@llnl.gov> and Morris Jette <jette1@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -46,8 +46,6 @@
 #include "bluegene.h"
 #include "dynamic_block.h"
 
-#ifdef HAVE_BG 
-
 #define _DEBUG 0
 #define MAX_GROUPS 128
 
@@ -63,8 +61,8 @@ pthread_mutex_t create_dynamic_mutex = PTHREAD_MUTEX_INITIALIZER;
 pthread_mutex_t job_list_test_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 /* This list is for the test_job_list function because we will be
- * adding and removing blocks off the bg_job_block_list and don't want
- * to ruin that list in submit_job it should = bg_job_block_list
+ * adding and removing blocks off the bg_lists->job_running and don't want
+ * to ruin that list in submit_job it should = bg_lists->job_running
  * otherwise it should be a copy of that list.
  */
 List job_block_test_list = NULL;
@@ -99,7 +97,6 @@ static int _check_for_booted_overlapping_blocks(
 	bool test_only);
 static int _dynamically_request(List block_list, int *blocks_added,
 				ba_request_t *request,
-				bitstr_t* slurm_block_bitmap,
 				char *user_req_nodes);
 static int _find_best_block_match(List block_list, int *blocks_added,
 				  struct job_record* job_ptr,
@@ -284,7 +281,7 @@ static int _check_images(struct job_record* job_ptr,
 			     SELECT_DATA_BLRTS_IMAGE, blrtsimage);
 	
 	if (*blrtsimage) {
-		allow = _test_image_perms(*blrtsimage, bg_blrtsimage_list, 
+		allow = _test_image_perms(*blrtsimage, bg_conf->blrts_list, 
 					  job_ptr);
 		if (!allow) {
 			error("User %u:%u is not allowed to use BlrtsImage %s",
@@ -298,7 +295,7 @@ static int _check_images(struct job_record* job_ptr,
 	select_g_get_jobinfo(job_ptr->select_jobinfo,
 			     SELECT_DATA_LINUX_IMAGE, linuximage);
 	if (*linuximage) {
-		allow = _test_image_perms(*linuximage, bg_linuximage_list, 
+		allow = _test_image_perms(*linuximage, bg_conf->linux_list, 
 					  job_ptr);
 		if (!allow) {
 			error("User %u:%u is not allowed to use LinuxImage %s",
@@ -310,7 +307,8 @@ static int _check_images(struct job_record* job_ptr,
 	select_g_get_jobinfo(job_ptr->select_jobinfo,
 			     SELECT_DATA_MLOADER_IMAGE, mloaderimage);
 	if (*mloaderimage) {
-		allow = _test_image_perms(*mloaderimage, bg_mloaderimage_list, 
+		allow = _test_image_perms(*mloaderimage,
+					  bg_conf->mloader_list, 
 					  job_ptr);
 		if(!allow) {
 			error("User %u:%u is not allowed "
@@ -324,7 +322,8 @@ static int _check_images(struct job_record* job_ptr,
 	select_g_get_jobinfo(job_ptr->select_jobinfo,
 			     SELECT_DATA_RAMDISK_IMAGE, ramdiskimage);
 	if (*ramdiskimage) {
-		allow = _test_image_perms(*ramdiskimage, bg_ramdiskimage_list, 
+		allow = _test_image_perms(*ramdiskimage,
+					  bg_conf->ramdisk_list, 
 					  job_ptr);
 		if(!allow) {
 			error("User %u:%u is not allowed "
@@ -372,9 +371,9 @@ static bg_record_t *_find_matching_block(List block_list,
 			continue;
 		} else if((bg_record->job_running != NO_JOB_RUNNING) 
 			  && (bg_record->job_running != job_ptr->job_id)
-			  && (bluegene_layout_mode == LAYOUT_DYNAMIC 
+			  && (bg_conf->layout_mode == LAYOUT_DYNAMIC 
 			      || (!test_only 
-				  && bluegene_layout_mode != LAYOUT_DYNAMIC))) {
+				  && bg_conf->layout_mode != LAYOUT_DYNAMIC))) {
 			debug("block %s in use by %s job %d", 
 			      bg_record->bg_block_id,
 			      bg_record->user_name,
@@ -478,7 +477,16 @@ static bg_record_t *_find_matching_block(List block_list,
 					continue;			
 				} 
 				goto good_conn_type;
-			} 
+			} else if(bg_record->conn_type >= SELECT_SMALL) {
+				/* since we already checked to see if
+				   the cpus were good this means we are
+				   looking for a block in a range that
+				   includes small and regular blocks.
+				   So we can just continue on.
+				*/
+				goto good_conn_type;				
+			}
+			
 #endif
 			debug("bg block %s conn-type not usable asking for %s "
 			      "bg_record is %s", 
@@ -537,7 +545,7 @@ static int _check_for_booted_overlapping_blocks(
 	int overlap = 0;
 
 	 /* this test only is for actually picking a block not testing */
-	if(test_only && bluegene_layout_mode == LAYOUT_DYNAMIC)
+	if(test_only && bg_conf->layout_mode == LAYOUT_DYNAMIC)
 		return rc;
 
 	/* Make sure no other blocks are under this block 
@@ -604,7 +612,7 @@ static int _check_for_booted_overlapping_blocks(
 			 * overlapping that we could avoid freeing if
 			 * we choose something else
 			 */
-			if(bluegene_layout_mode == LAYOUT_OVERLAP
+			if(bg_conf->layout_mode == LAYOUT_OVERLAP
 			   && ((overlap_check == 0 && bg_record->state 
 				!= RM_PARTITION_READY)
 			       || (overlap_check == 1 && found_record->state 
@@ -636,7 +644,8 @@ static int _check_for_booted_overlapping_blocks(
 					      found_record->job_running,
 					      found_record->bg_block_id);
 				
-				if(bluegene_layout_mode == LAYOUT_DYNAMIC) {
+				if(bg_conf->layout_mode == LAYOUT_DYNAMIC) {
+					List temp_list = list_create(NULL);
 					/* this will remove and
 					 * destroy the memory for
 					 * bg_record
@@ -649,44 +658,35 @@ static int _check_for_booted_overlapping_blocks(
 						found_record =
 							bg_record->original;
 						remove_from_bg_list(
-							bg_list, found_record);
+							bg_lists->main,
+							found_record);
 					} else {
 						debug("looking for original");
 						found_record =
 							find_and_remove_org_from_bg_list(
-								bg_list,
+								bg_lists->main,
 								bg_record);
 					}
-					destroy_bg_record(bg_record);
+
 					if(!found_record) {
-						/* There may be a bug
-						   here where on a real
-						   system we don't go
-						   destroy this block
-						   in the real system.
-						   If that is the case we
-						   need to add the
-						   bg_record to the
-						   free_block_list
-						   instead of destroying
-						   it like above.
-						*/ 
-						debug("This record wasn't "
-						      "found in the bg_list, "
+						debug("This record %s wasn't "
+						      "found in the "
+						      "bg_lists->main, "
 						      "no big deal, it "
-						      "probably wasn't added");
-						//rc = SLURM_ERROR;
-					} else {
-						debug("removing the block "
-						      "from the system");
-						List temp_list =
-							list_create(NULL);
-						list_push(temp_list, 
-							  found_record);
-						num_block_to_free++;
-						free_block_list(temp_list);
-						list_destroy(temp_list);
-					}
+						      "probably wasn't added",
+						      bg_record->bg_block_id);
+						found_record = bg_record;
+					} else
+						destroy_bg_record(bg_record);
+					
+					debug("removing the block %s"
+					      "from the system",
+					      bg_record->bg_block_id);
+					
+					list_push(temp_list, found_record);
+					free_block_list(temp_list);
+					list_destroy(temp_list);
+					
 					slurm_mutex_unlock(&block_state_mutex);
 				} 
 				rc = 1;
@@ -708,7 +708,6 @@ static int _check_for_booted_overlapping_blocks(
 
 static int _dynamically_request(List block_list, int *blocks_added,
 				ba_request_t *request,
-				bitstr_t* slurm_block_bitmap,
 				char *user_req_nodes)
 {
 	List list_of_lists = NULL;
@@ -727,10 +726,10 @@ static int _dynamically_request(List block_list, int *blocks_added,
 		list_append(list_of_lists, job_block_test_list);
 	else {
 		list_append(list_of_lists, block_list);
-		if(job_block_test_list == bg_job_block_list &&
-		   list_count(block_list) != list_count(bg_booted_block_list)) {
-			list_append(list_of_lists, bg_booted_block_list);
-			if(list_count(bg_booted_block_list) 
+		if(job_block_test_list == bg_lists->job_running &&
+		   list_count(block_list) != list_count(bg_lists->booted)) {
+			list_append(list_of_lists, bg_lists->booted);
+			if(list_count(bg_lists->booted) 
 			   != list_count(job_block_test_list)) 
 				list_append(list_of_lists, job_block_test_list);
 		} else if(list_count(block_list) 
@@ -758,7 +757,7 @@ static int _dynamically_request(List block_list, int *blocks_added,
 					destroy_bg_record(bg_record);
 				else {
 					if(job_block_test_list 
-					   == bg_job_block_list) {
+					   == bg_lists->job_running) {
 						if(configure_block(bg_record)
 						   == SLURM_ERROR) {
 							destroy_bg_record(
@@ -848,7 +847,7 @@ static int _find_best_block_match(List block_list,
 
 	if(!total_cpus)
 		total_cpus = DIM_SIZE[X] * DIM_SIZE[Y] * DIM_SIZE[Z] 
-			* procs_per_node;
+			* bg_conf->procs_per_bp;
 
 	if(req_nodes > max_nodes) {
 		error("can't run this job max bps is %u asking for %u",
@@ -930,13 +929,13 @@ static int _find_best_block_match(List block_list,
 				tmp_record->bg_block_list =
 					list_create(destroy_ba_node);
 				
-				len += strlen(bg_slurm_node_prefix)+1;
+				len += strlen(bg_conf->slurm_node_prefix)+1;
 				tmp_record->nodes = xmalloc(len);
 				
 				snprintf(tmp_record->nodes,
 					 len,
 					 "%s%s", 
-					 bg_slurm_node_prefix, 
+					 bg_conf->slurm_node_prefix, 
 					 tmp_nodes+i);
 				
 			
@@ -1000,7 +999,7 @@ static int _find_best_block_match(List block_list,
 	 *  need to set a max_procs if given
 	 */
 	if(max_procs == (uint32_t)NO_VAL) 
-		max_procs = max_nodes * procs_per_node;
+		max_procs = max_nodes * bg_conf->procs_per_bp;
 	
 	while(1) {
 		/* Here we are creating a list of all the blocks that
@@ -1008,7 +1007,7 @@ static int _find_best_block_match(List block_list,
 		 * works we will have can look and see the earliest
 		 * the job can start.  This doesn't apply to Dynamic mode.
 		 */ 
-		if(test_only && bluegene_layout_mode != LAYOUT_DYNAMIC) 
+		if(test_only && bg_conf->layout_mode != LAYOUT_DYNAMIC) 
 			overlapped_list = list_create(NULL);
 		
 		bg_record = _find_matching_block(block_list, 
@@ -1021,7 +1020,7 @@ static int _find_best_block_match(List block_list,
 						 overlapped_list,
 						 test_only);
 		if(!bg_record && test_only
-		   && bluegene_layout_mode != LAYOUT_DYNAMIC
+		   && bg_conf->layout_mode != LAYOUT_DYNAMIC
 		   && list_count(overlapped_list)) {
 			ListIterator itr =
 				list_iterator_create(overlapped_list);
@@ -1035,7 +1034,7 @@ static int _find_best_block_match(List block_list,
 			list_iterator_destroy(itr);
 		}
 		
-		if(test_only && bluegene_layout_mode != LAYOUT_DYNAMIC)
+		if(test_only && bg_conf->layout_mode != LAYOUT_DYNAMIC)
 			list_destroy(overlapped_list);
 
 		/* set the bitmap and do other allocation activities */
@@ -1080,18 +1079,17 @@ static int _find_best_block_match(List block_list,
 
 		/* all these assume that the *bg_record is NULL */
 
-		if(bluegene_layout_mode == LAYOUT_OVERLAP
+		if(bg_conf->layout_mode == LAYOUT_OVERLAP
 		   && !test_only && overlap_check < 2) {
 			overlap_check++;
 			continue;
 		}
 		
-		if(create_try || bluegene_layout_mode != LAYOUT_DYNAMIC)
+		if(create_try || bg_conf->layout_mode != LAYOUT_DYNAMIC)
 			goto no_match;
 		
 		if((rc = _dynamically_request(block_list, blocks_added,
 					      &request, 
-					      slurm_block_bitmap, 
 					      job_ptr->details->req_nodes))
 		   == SLURM_SUCCESS) {
 			create_try = 1;
@@ -1104,7 +1102,7 @@ static int _find_best_block_match(List block_list,
 			List job_list = NULL;
 			debug("trying with empty machine");
 			slurm_mutex_lock(&block_state_mutex);
-			if(job_block_test_list == bg_job_block_list) 
+			if(job_block_test_list == bg_lists->job_running) 
 				job_list = copy_bg_list(job_block_test_list);
 			else
 				job_list = job_block_test_list;
@@ -1134,12 +1132,7 @@ static int _find_best_block_match(List block_list,
 						debug2("taking off (%s) "
 						       "which is in an error "
 						       "state",
-						       bg_record->job_running,
-						       bg_record->bg_block_id,
-						       bg_record->job_ptr->
-						       start_time,
-						       bg_record->job_ptr->
-						       end_time);
+						       bg_record->bg_block_id);
 				} else 
 					/* This means we didn't have
 					   any jobs to take off
@@ -1186,7 +1179,8 @@ static int _find_best_block_match(List block_list,
 					destroy_bg_record(bg_record);
 				}
 					
-				if(job_block_test_list != bg_job_block_list) {
+				if(job_block_test_list 
+				   != bg_lists->job_running) {
 					list_append(block_list,
 						    (*found_bg_record));
 					while((bg_record = 
@@ -1208,7 +1202,7 @@ static int _find_best_block_match(List block_list,
 				break;
 			}
 
-			if(job_block_test_list == bg_job_block_list) 
+			if(job_block_test_list == bg_lists->job_running) 
 				list_destroy(job_list);
 
 			goto end_it;
@@ -1267,7 +1261,63 @@ static int _sync_block_lists(List full_list, List incomp_list)
 	return count;
 }
 
-#endif // HAVE_BG
+static void _build_select_struct(struct job_record *job_ptr, bitstr_t *bitmap)
+{
+	int i, j, k;
+	int first_bit, last_bit;
+	uint32_t node_cpus, total_cpus = 0, node_cnt;
+	select_job_res_t select_ptr;
+
+	if (job_ptr->select_job) {
+		error("select_p_job_test: already have select_job");
+		free_select_job_res(&job_ptr->select_job);
+	}
+
+
+	node_cnt = bit_set_count(bitmap);
+	job_ptr->select_job = select_ptr = create_select_job_res();
+	select_ptr->cpu_array_reps = xmalloc(sizeof(uint32_t) * node_cnt);
+	select_ptr->cpu_array_value = xmalloc(sizeof(uint16_t) * node_cnt);
+	select_ptr->cpus = xmalloc(sizeof(uint16_t) * node_cnt);
+	select_ptr->cpus_used = xmalloc(sizeof(uint16_t) * node_cnt);
+	select_ptr->nhosts = node_cnt;
+	select_ptr->node_bitmap = bit_copy(bitmap);
+	if (select_ptr->node_bitmap == NULL)
+		fatal("bit_copy malloc failure");
+	select_ptr->nprocs = job_ptr->num_procs;
+	if (build_select_job_res(select_ptr, (void *)node_record_table_ptr, 1))
+		error("select_p_job_test: build_select_job_res: %m");
+
+	if (job_ptr->num_procs <= bg_conf->procs_per_bp)
+		node_cpus = job_ptr->num_procs;
+	else
+		node_cpus = bg_conf->procs_per_bp;
+
+	first_bit = bit_ffs(bitmap);
+	last_bit  = bit_fls(bitmap);
+	for (i=first_bit, j=0, k=-1; i<=last_bit; i++) {
+		if (!bit_test(bitmap, i))
+			continue;
+
+		select_ptr->cpus[j] = node_cpus;
+		if ((k == -1) || 
+		    (select_ptr->cpu_array_value[k] != node_cpus)) {
+			select_ptr->cpu_array_cnt++;
+			select_ptr->cpu_array_reps[++k] = 1;
+			select_ptr->cpu_array_value[k] = node_cpus;
+		} else
+			select_ptr->cpu_array_reps[k]++;
+		total_cpus += node_cpus;
+
+		if (set_select_job_res_node(select_ptr, j))
+			error("select_p_job_test: set_select_job_res_node: %m");
+		j++;
+	}
+	if (select_ptr->nprocs != total_cpus) {
+		error("select_p_job_test: nprocs mismatch %u != %u",
+		      select_ptr->nprocs, total_cpus);
+	}
+}
 
 /*
  * Try to find resources for a given job request
@@ -1286,7 +1336,6 @@ extern int submit_job(struct job_record *job_ptr, bitstr_t *slurm_block_bitmap,
 		      uint32_t req_nodes, int mode)
 {
 	int rc = SLURM_SUCCESS;
-#ifdef HAVE_BG
 	bg_record_t* bg_record = NULL;
 	char buf[100];
 	uint16_t conn_type = (uint16_t)NO_VAL;
@@ -1302,16 +1351,16 @@ extern int submit_job(struct job_record *job_ptr, bitstr_t *slurm_block_bitmap,
 	else	
 		return EINVAL;	/* something not yet supported */
 
-	if(bluegene_layout_mode == LAYOUT_DYNAMIC)
+	if(bg_conf->layout_mode == LAYOUT_DYNAMIC)
 		slurm_mutex_lock(&create_dynamic_mutex);
 
-	job_block_test_list = bg_job_block_list;
+	job_block_test_list = bg_lists->job_running;
 	
 	select_g_get_jobinfo(job_ptr->select_jobinfo,
 			     SELECT_DATA_CONN_TYPE, &conn_type);
 	if(conn_type == SELECT_NAV) {
 		uint32_t max_procs = (uint32_t)NO_VAL;
-		if(bluegene_bp_node_cnt == bluegene_nodecard_node_cnt)
+		if(bg_conf->bp_node_cnt == bg_conf->nodecard_node_cnt)
 			conn_type = SELECT_SMALL;
 		else if(min_nodes > 1) {
 			conn_type = SELECT_TORUS;
@@ -1324,7 +1373,7 @@ extern int submit_job(struct job_record *job_ptr, bitstr_t *slurm_block_bitmap,
 			select_g_get_jobinfo(job_ptr->select_jobinfo,
 					     SELECT_DATA_MAX_PROCS,
 					     &max_procs);
-			if((max_procs > procs_per_node)
+			if((max_procs > bg_conf->procs_per_bp)
 			   || (max_procs == NO_VAL))
 				conn_type = SELECT_TORUS;
 			else
@@ -1362,7 +1411,7 @@ extern int submit_job(struct job_record *job_ptr, bitstr_t *slurm_block_bitmap,
 	debug2("RamDiskIoLoadImage=%s", buf);
 #endif	
 	slurm_mutex_lock(&block_state_mutex);
-	block_list = copy_bg_list(bg_list);
+	block_list = copy_bg_list(bg_lists->main);
 	slurm_mutex_unlock(&block_state_mutex);
 	
 	list_sort(block_list, (ListCmpF)_bg_record_sort_aval_dec);
@@ -1450,28 +1499,30 @@ extern int submit_job(struct job_record *job_ptr, bitstr_t *slurm_block_bitmap,
 /* 						     SELECT_DATA_CONN_TYPE,  */
 /* 						     &tmp16); */
 			}
+			if (mode == SELECT_MODE_RUN_NOW) {
+				_build_select_struct(job_ptr, 
+						     slurm_block_bitmap);
+			}
 		} else {
 			error("we got a success, but no block back");
 		}
 	}
 
-	if(bluegene_layout_mode == LAYOUT_DYNAMIC) {		
+	if(bg_conf->layout_mode == LAYOUT_DYNAMIC) {		
 		slurm_mutex_lock(&block_state_mutex);
 		if(blocks_added) 
-			_sync_block_lists(block_list, bg_list);		
+			_sync_block_lists(block_list, bg_lists->main);		
 		slurm_mutex_unlock(&block_state_mutex);
 		slurm_mutex_unlock(&create_dynamic_mutex);
 	}
 
 	list_destroy(block_list);
-#endif
 	return rc;
 }
 
 extern int test_job_list(List req_list)
 {
 	int rc = SLURM_SUCCESS;
-#ifdef HAVE_BG
 	bg_record_t* bg_record = NULL;
 	bg_record_t* new_record = NULL;
 	char buf[100];
@@ -1484,13 +1535,13 @@ extern int test_job_list(List req_list)
 
 	slurm_mutex_lock(&job_list_test_mutex);
 	
-	if(bluegene_layout_mode == LAYOUT_DYNAMIC)
+	if(bg_conf->layout_mode == LAYOUT_DYNAMIC)
 		slurm_mutex_lock(&create_dynamic_mutex);
 
-	job_block_test_list = copy_bg_list(bg_job_block_list);
+	job_block_test_list = copy_bg_list(bg_lists->job_running);
 
 	slurm_mutex_lock(&block_state_mutex);
-	block_list = copy_bg_list(bg_list);
+	block_list = copy_bg_list(bg_lists->main);
 	slurm_mutex_unlock(&block_state_mutex);
 
 	itr = list_iterator_create(req_list);
@@ -1520,7 +1571,7 @@ extern int test_job_list(List req_list)
 					will_run->job_ptr->select_jobinfo,
 					SELECT_DATA_MAX_PROCS,
 					&max_procs);
-				if((max_procs > procs_per_node)
+				if((max_procs > bg_conf->procs_per_bp)
 				   || (max_procs == NO_VAL))
 					conn_type = SELECT_TORUS;
 				else
@@ -1640,17 +1691,17 @@ extern int test_job_list(List req_list)
 /* 						SELECT_DATA_BLOCK_ID, */
 /* 						"unassigned"); */
 /* 					if(will_run->job_ptr->num_procs */
-/* 					   < bluegene_bp_node_cnt  */
+/* 					   < bg_conf->bp_node_cnt  */
 /* 					   && will_run->job_ptr->num_procs */
 /* 					   > 0) { */
-/* 						i = procs_per_node/ */
+/* 						i = bg_conf->procs_per_bp/ */
 /* 							will_run->job_ptr-> */
 /* 							num_procs; */
 /* 						debug2("divide by %d", i); */
 /* 					} else  */
 /* 						i = 1; */
 /* 					will_run->min_nodes *=  */
-/* 						bluegene_bp_node_cnt/i; */
+/* 						bg_conf->bp_node_cnt/i; */
 /* 					select_g_set_jobinfo( */
 /* 						will_run->job_ptr-> */
 /* 						select_jobinfo, */
@@ -1708,7 +1759,7 @@ extern int test_job_list(List req_list)
 	}
 	list_iterator_destroy(itr);
 
-	if(bluegene_layout_mode == LAYOUT_DYNAMIC) 		
+	if(bg_conf->layout_mode == LAYOUT_DYNAMIC) 		
 		slurm_mutex_unlock(&create_dynamic_mutex);
 	
 
@@ -1716,6 +1767,5 @@ extern int test_job_list(List req_list)
 	list_destroy(job_block_test_list);
 	
 	slurm_mutex_unlock(&job_list_test_mutex);
-#endif
 	return rc;
 }
diff --git a/src/plugins/select/bluegene/plugin/bg_job_place.h b/src/plugins/select/bluegene/plugin/bg_job_place.h
index 448698e58..a50a454c5 100644
--- a/src/plugins/select/bluegene/plugin/bg_job_place.h
+++ b/src/plugins/select/bluegene/plugin/bg_job_place.h
@@ -7,7 +7,8 @@
  *  Written by Dan Phung <phung4@llnl.gov> et. al.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/select/bluegene/plugin/bg_job_run.c b/src/plugins/select/bluegene/plugin/bg_job_run.c
index 800a6813d..317a1ca48 100644
--- a/src/plugins/select/bluegene/plugin/bg_job_run.c
+++ b/src/plugins/select/bluegene/plugin/bg_job_run.c
@@ -2,14 +2,15 @@
  *  bg_job_run.c - blue gene job execution (e.g. initiation and termination) 
  *  functions.
  *
- *  $Id: bg_job_run.c 17202 2009-04-09 16:56:23Z da $ 
+ *  $Id: bg_job_run.c 17529 2009-05-18 18:43:42Z da $ 
  *****************************************************************************
  *  Copyright (C) 2004-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -160,7 +161,6 @@ static int _remove_job(db_job_id_t job_id)
 		if(job_state == RM_JOB_TERMINATED)
 			return STATUS_OK;
 		else if(job_state == RM_JOB_DYING) {
-			/* start sending sigkills for the last 5 tries */
 			if(count > MAX_POLL_RETRIES) 
 				error("Job %d isn't dying, trying for "
 				      "%d seconds", count*POLL_INTERVAL);
@@ -215,14 +215,14 @@ static int _reset_block(bg_record_t *bg_record)
 		/* remove user from list */		
 		
 		if(bg_record->target_name) {
-			if(strcmp(bg_record->target_name, bg_slurm_user_name)) {
+			if(strcmp(bg_record->target_name, bg_conf->slurm_user_name)) {
 				xfree(bg_record->target_name);
 				bg_record->target_name = 
-					xstrdup(bg_slurm_user_name);
+					xstrdup(bg_conf->slurm_user_name);
 			}
 			update_block_user(bg_record, 1);
 		} else {
-			bg_record->target_name = xstrdup(bg_slurm_user_name);
+			bg_record->target_name = xstrdup(bg_conf->slurm_user_name);
 		}	
 		
 			
@@ -230,7 +230,7 @@ static int _reset_block(bg_record_t *bg_record)
 		bg_record->boot_count = 0;
 		
 		last_bg_update = time(NULL);
-		if(remove_from_bg_list(bg_job_block_list, bg_record) 
+		if(remove_from_bg_list(bg_lists->job_running, bg_record) 
 		   == SLURM_SUCCESS) {
 			num_unused_cpus += bg_record->cpu_cnt;
 		}
@@ -262,7 +262,8 @@ static void _sync_agent(bg_update_t *bg_update_ptr)
 {
 	bg_record_t * bg_record = NULL;
 	
-	bg_record = find_bg_record_in_list(bg_list, bg_update_ptr->bg_block_id);
+	bg_record = find_bg_record_in_list(bg_lists->main,
+					   bg_update_ptr->bg_block_id);
 	if(!bg_record) {
 		error("No block %s", bg_update_ptr->bg_block_id);
 		return;
@@ -272,12 +273,12 @@ static void _sync_agent(bg_update_t *bg_update_ptr)
 	bg_record->job_running = bg_update_ptr->job_ptr->job_id;
 	bg_record->job_ptr = bg_update_ptr->job_ptr;
 
-	if(!block_ptr_exist_in_list(bg_job_block_list, bg_record)) {
-		list_push(bg_job_block_list, bg_record);
+	if(!block_ptr_exist_in_list(bg_lists->job_running, bg_record)) {
+		list_push(bg_lists->job_running, bg_record);
 		num_unused_cpus -= bg_record->cpu_cnt;
 	}
-	if(!block_ptr_exist_in_list(bg_booted_block_list, bg_record)) 
-		list_push(bg_booted_block_list, bg_record);
+	if(!block_ptr_exist_in_list(bg_lists->booted, bg_record)) 
+		list_push(bg_lists->booted, bg_record);
 	slurm_mutex_unlock(&block_state_mutex);
 
 	if(bg_record->state == RM_PARTITION_READY) {
@@ -325,10 +326,11 @@ static void _start_agent(bg_update_t *bg_update_ptr)
 
 	slurm_mutex_lock(&job_start_mutex);
 		
-	bg_record = find_bg_record_in_list(bg_list, bg_update_ptr->bg_block_id);
+	bg_record = find_bg_record_in_list(bg_lists->main, 
+					   bg_update_ptr->bg_block_id);
 
 	if(!bg_record) {
-		error("block %s not found in bg_list",
+		error("block %s not found in bg_lists->main",
 		      bg_update_ptr->bg_block_id);
 		/* wait for the slurmd to begin 
 		   the batch script, slurm_fail_job() 
@@ -370,7 +372,7 @@ static void _start_agent(bg_update_t *bg_update_ptr)
 	
 	delete_list = list_create(NULL);
 	slurm_mutex_lock(&block_state_mutex);
-	itr = list_iterator_create(bg_list);
+	itr = list_iterator_create(bg_lists->main);
 	while ((found_record = list_next(itr))) {
 		if ((!found_record) || (bg_record == found_record))
 			continue;
@@ -400,16 +402,13 @@ static void _start_agent(bg_update_t *bg_update_ptr)
 		       found_record->bg_block_id, 
 		       bg_record->bg_block_id);
 		list_push(delete_list, found_record);
-		if(bluegene_layout_mode == LAYOUT_DYNAMIC) {
+		if(bg_conf->layout_mode == LAYOUT_DYNAMIC) 
 			list_remove(itr);
-		}
-		num_block_to_free++;
 	}		
 	list_iterator_destroy(itr);
 
 	if(requeue_job) {
-		num_block_to_free = 0;
-		num_block_freed = 0;
+		num_block_to_free = num_block_freed = 0;
 		list_destroy(delete_list);
 
 		_reset_block(bg_record);
@@ -446,8 +445,7 @@ static void _start_agent(bg_update_t *bg_update_ptr)
 	}
 	/* Zero out the values here because we are done with them and
 	   they will be ready for the next job */
-	num_block_to_free = 0;
-	num_block_freed = 0;
+	num_block_to_free = num_block_freed = 0;
 	
 	slurm_mutex_lock(&block_state_mutex);
 	if(bg_record->job_running <= NO_JOB_RUNNING) {
@@ -637,7 +635,7 @@ static void _start_agent(bg_update_t *bg_update_ptr)
 	} else if (bg_record->state == RM_PARTITION_CONFIGURING) {
 		bg_record->boot_state = 1;		
 	}
-	
+
 	if(bg_record->job_running <= NO_JOB_RUNNING) {
 		slurm_mutex_unlock(&job_start_mutex);
 		debug("job %u finished during the start of the boot "
@@ -672,7 +670,7 @@ static void _start_agent(bg_update_t *bg_update_ptr)
 		   incase the fail job isn't ran */
 		(void) slurm_fail_job(bg_record->job_running);
 		slurm_mutex_lock(&block_state_mutex);
-		if (remove_from_bg_list(bg_job_block_list, bg_record)
+		if (remove_from_bg_list(bg_lists->job_running, bg_record)
 		    == SLURM_SUCCESS) {
 			num_unused_cpus += bg_record->cpu_cnt;
 		}
@@ -710,7 +708,8 @@ static void _term_agent(bg_update_t *bg_update_ptr)
 	}
 	
 			
-	if ((rc = bridge_get_data(job_list, RM_JobListSize, &jobs)) != STATUS_OK) {
+	if ((rc = bridge_get_data(job_list, RM_JobListSize, &jobs)) 
+	    != STATUS_OK) {
 		error("bridge_get_data(RM_JobListSize): %s", bg_err_str(rc));
 		jobs = 0;
 	}
@@ -778,7 +777,8 @@ static void _term_agent(bg_update_t *bg_update_ptr)
 #endif
 	
 	/* remove the block's users */
-	bg_record = find_bg_record_in_list(bg_list, bg_update_ptr->bg_block_id);
+	bg_record = find_bg_record_in_list(bg_lists->main,
+					   bg_update_ptr->bg_block_id);
 	if(bg_record) {
 		debug("got the record %s user is %s",
 		      bg_record->bg_block_id,
@@ -804,9 +804,9 @@ static void _term_agent(bg_update_t *bg_update_ptr)
 		
 		slurm_mutex_unlock(&block_state_mutex);
 		
-	} else if (bluegene_layout_mode == LAYOUT_DYNAMIC) {
+	} else if (bg_conf->layout_mode == LAYOUT_DYNAMIC) {
 		debug2("Hopefully we are destroying this block %s "
-		       "since it isn't in the bg_list",
+		       "since it isn't in the bg_lists->main",
 		       bg_update_ptr->bg_block_id);
 	} else {
 		error("Could not find block %s previously assigned to job.  "
@@ -894,8 +894,9 @@ static void _block_op(bg_update_t *bg_update_ptr)
 		slurm_mutex_unlock(&agent_cnt_mutex);
 		return;
 	}
-	agent_cnt++;
+
 	slurm_mutex_unlock(&agent_cnt_mutex);
+	agent_cnt++;
 	/* spawn an agent */
 	slurm_attr_init(&attr_agent);
 	if (pthread_attr_setdetachstate(&attr_agent, 
@@ -925,8 +926,8 @@ static List _get_all_blocks(void)
 	if (!ret_list)
 		fatal("malloc error");
 
-	if(bg_list) {
-		itr = list_iterator_create(bg_list);
+	if(bg_lists->main) {
+		itr = list_iterator_create(bg_lists->main);
 		while ((block_ptr = (bg_record_t *) list_next(itr))) {
 			if ((block_ptr->user_name == NULL)
 			    ||  (block_ptr->user_name[0] == '\0')
@@ -941,7 +942,7 @@ static List _get_all_blocks(void)
 		}
 		list_iterator_destroy(itr);
 	} else {
-		error("_get_all_blocks: no bg_list");
+		error("_get_all_blocks: no bg_lists->main");
 	}
 
 	return ret_list;
@@ -1040,7 +1041,8 @@ extern int start_job(struct job_record *job_ptr)
 			     &(bg_update_ptr->reboot));
 #ifdef HAVE_BGL
 	if(!bg_update_ptr->blrtsimage) {
-		bg_update_ptr->blrtsimage = xstrdup(default_blrtsimage);
+		bg_update_ptr->blrtsimage =
+			xstrdup(bg_conf->default_blrtsimage);
 		select_g_set_jobinfo(job_ptr->select_jobinfo,
 				     SELECT_DATA_BLRTS_IMAGE, 
 				     bg_update_ptr->blrtsimage);
@@ -1055,7 +1057,8 @@ extern int start_job(struct job_record *job_ptr)
 			     SELECT_DATA_LINUX_IMAGE, 
 			     &(bg_update_ptr->linuximage));
 	if(!bg_update_ptr->linuximage) {
-		bg_update_ptr->linuximage = xstrdup(default_linuximage);
+		bg_update_ptr->linuximage =
+			xstrdup(bg_conf->default_linuximage);
 		select_g_set_jobinfo(job_ptr->select_jobinfo,
 				     SELECT_DATA_LINUX_IMAGE, 
 				     bg_update_ptr->linuximage);
@@ -1064,7 +1067,8 @@ extern int start_job(struct job_record *job_ptr)
 			     SELECT_DATA_MLOADER_IMAGE, 
 			     &(bg_update_ptr->mloaderimage));
 	if(!bg_update_ptr->mloaderimage) {
-		bg_update_ptr->mloaderimage = xstrdup(default_mloaderimage);
+		bg_update_ptr->mloaderimage = 
+			xstrdup(bg_conf->default_mloaderimage);
 		select_g_set_jobinfo(job_ptr->select_jobinfo,
 				     SELECT_DATA_MLOADER_IMAGE, 
 				     bg_update_ptr->mloaderimage);
@@ -1073,24 +1077,27 @@ extern int start_job(struct job_record *job_ptr)
 			     SELECT_DATA_RAMDISK_IMAGE, 
 			     &(bg_update_ptr->ramdiskimage));
 	if(!bg_update_ptr->ramdiskimage) {
-		bg_update_ptr->ramdiskimage = xstrdup(default_ramdiskimage);
+		bg_update_ptr->ramdiskimage =
+			xstrdup(bg_conf->default_ramdiskimage);
 		select_g_set_jobinfo(job_ptr->select_jobinfo,
 				     SELECT_DATA_RAMDISK_IMAGE, 
 				     bg_update_ptr->ramdiskimage);
 	}
 	bg_record = 
-		find_bg_record_in_list(bg_list, bg_update_ptr->bg_block_id);
+		find_bg_record_in_list(bg_lists->main, 
+				       bg_update_ptr->bg_block_id);
 	if (bg_record) {
 		slurm_mutex_lock(&block_state_mutex);
 		job_ptr->num_procs = bg_record->cpu_cnt;
+		job_ptr->total_procs = job_ptr->num_procs;
 		bg_record->job_running = bg_update_ptr->job_ptr->job_id;
 		bg_record->job_ptr = bg_update_ptr->job_ptr;
-		if(!block_ptr_exist_in_list(bg_job_block_list, bg_record)) {
-			list_push(bg_job_block_list, bg_record);
+		if(!block_ptr_exist_in_list(bg_lists->job_running, bg_record)) {
+			list_push(bg_lists->job_running, bg_record);
 			num_unused_cpus -= bg_record->cpu_cnt;
 		}
-		if(!block_ptr_exist_in_list(bg_booted_block_list, bg_record))
-			list_push(bg_booted_block_list, bg_record);
+		if(!block_ptr_exist_in_list(bg_lists->booted, bg_record))
+			list_push(bg_lists->booted, bg_record);
 		slurm_mutex_unlock(&block_state_mutex);
 	} else {
 		error("bg_record %s doesn't exist, requested for job (%d)", 
@@ -1258,11 +1265,11 @@ extern int boot_block(bg_record_t *bg_record)
 	int rc;	
 		
 	if ((rc = bridge_set_block_owner(bg_record->bg_block_id, 
-					 bg_slurm_user_name)) 
+					 bg_conf->slurm_user_name)) 
 	    != STATUS_OK) {
 		error("bridge_set_block_owner(%s,%s): %s", 
 		      bg_record->bg_block_id, 
-		      bg_slurm_user_name,
+		      bg_conf->slurm_user_name,
 		      bg_err_str(rc));
 		return SLURM_ERROR;
 	}	
@@ -1291,8 +1298,8 @@ extern int boot_block(bg_record_t *bg_record)
 	}
 	
 	slurm_mutex_lock(&block_state_mutex);
-	if(!block_ptr_exist_in_list(bg_booted_block_list, bg_record))
-		list_push(bg_booted_block_list, bg_record);
+	if(!block_ptr_exist_in_list(bg_lists->booted, bg_record))
+		list_push(bg_lists->booted, bg_record);
 	slurm_mutex_unlock(&block_state_mutex);
 	
 	rc = 0;
@@ -1317,8 +1324,8 @@ extern int boot_block(bg_record_t *bg_record)
 	slurm_mutex_unlock(&block_state_mutex);
 #else
 	slurm_mutex_lock(&block_state_mutex);
-	if(!block_ptr_exist_in_list(bg_booted_block_list, bg_record))
-		list_push(bg_booted_block_list, bg_record);
+	if(!block_ptr_exist_in_list(bg_lists->booted, bg_record))
+		list_push(bg_lists->booted, bg_record);
 	bg_record->state = RM_PARTITION_READY;
 	last_bg_update = time(NULL);
 	slurm_mutex_unlock(&block_state_mutex);				
diff --git a/src/plugins/select/bluegene/plugin/bg_job_run.h b/src/plugins/select/bluegene/plugin/bg_job_run.h
index 694df91af..d4e57bae8 100644
--- a/src/plugins/select/bluegene/plugin/bg_job_run.h
+++ b/src/plugins/select/bluegene/plugin/bg_job_run.h
@@ -7,7 +7,8 @@
  *  Written by Morris Jette <jette1@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/select/bluegene/plugin/bg_record_functions.c b/src/plugins/select/bluegene/plugin/bg_record_functions.c
index e46ff618a..551c1538b 100644
--- a/src/plugins/select/bluegene/plugin/bg_record_functions.c
+++ b/src/plugins/select/bluegene/plugin/bg_record_functions.c
@@ -8,7 +8,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -44,10 +45,8 @@
 #include "src/slurmctld/locks.h"
 
 /* some local functions */
-#ifdef HAVE_BG
 static int  _addto_node_list(bg_record_t *bg_record, int *start, int *end);
 static int  _ba_node_cmpf_inc(ba_node_t *node_a, ba_node_t *node_b);
-#endif
 
 extern void print_bg_record(bg_record_t* bg_record)
 {
@@ -163,7 +162,6 @@ extern int block_ptr_exist_in_list(List my_list, bg_record_t *bg_record)
 
 extern void process_nodes(bg_record_t *bg_record, bool startup)
 {
-#ifdef HAVE_BG
 	int j=0, number;
 	int diff=0;
 	int largest_diff=-1;
@@ -182,7 +180,8 @@ extern void process_nodes(bg_record_t *bg_record, bool startup)
 		memset(&best_start, 0, sizeof(best_start));
 		bg_record->bp_count = 0;
 		if((bg_record->conn_type >= SELECT_SMALL) && (!startup))
-			error("We shouldn't be here there could be some "
+			error("process_nodes: "
+			      "We shouldn't be here there could be some "
 			      "badness if we use this logic %s",
 			      bg_record->nodes);
 		while (bg_record->nodes[j] != '\0') {
@@ -217,7 +216,8 @@ extern void process_nodes(bg_record_t *bg_record, bool startup)
 					best_start[X] = start[X];
 					best_start[Y] = start[Y];
 					best_start[Z] = start[Z];
-					debug3("start is now %dx%dx%d",
+					debug3("process_nodes: "
+					       "start is now %dx%dx%d",
 					       best_start[X],
 					       best_start[Y],
 					       best_start[Z]);
@@ -250,7 +250,8 @@ extern void process_nodes(bg_record_t *bg_record, bool startup)
 					best_start[X] = start[X];
 					best_start[Y] = start[Y];
 					best_start[Z] = start[Z];
-					debug3("start is now %dx%dx%d",
+					debug3("process_nodes: "
+					       "start is now %dx%dx%d",
 					       best_start[X],
 					       best_start[Y],
 					       best_start[Z]);
@@ -272,7 +273,8 @@ extern void process_nodes(bg_record_t *bg_record, bool startup)
 		bg_record->start[X] = best_start[X];
 		bg_record->start[Y] = best_start[Y];
 		bg_record->start[Z] = best_start[Z];
-		debug2("start is %dx%dx%d",
+		debug2("process_nodes: "
+		       "start is %dx%dx%d",
 		       bg_record->start[X],
 		       bg_record->start[Y],
 		       bg_record->start[Z]);
@@ -291,7 +293,8 @@ extern void process_nodes(bg_record_t *bg_record, bool startup)
 	while ((ba_node = list_next(itr)) != NULL) {
 		if(!ba_node->used)
 			continue;
-		debug4("%c%c%c is included in this block",
+		debug4("process_nodes: "
+		       "%c%c%c is included in this block",
 		       alpha_num[ba_node->coord[X]],
 		       alpha_num[ba_node->coord[Y]],
 		       alpha_num[ba_node->coord[Z]]);
@@ -310,7 +313,8 @@ extern void process_nodes(bg_record_t *bg_record, bool startup)
 		}
 	}
 	list_iterator_destroy(itr);
-	debug3("geo = %c%c%c bp count is %d\n",
+	debug3("process_nodes: "
+	       "geo = %c%c%c bp count is %d\n",
 	       alpha_num[bg_record->geo[X]],
 	       alpha_num[bg_record->geo[Y]],
 	       alpha_num[bg_record->geo[Z]],
@@ -325,10 +329,9 @@ extern void process_nodes(bg_record_t *bg_record, bool startup)
 		    && (bg_record->geo[Z] == DIM_SIZE[Z])) {
 			bg_record->full_block = 1;	
 		}	
-	} else if(bg_record->node_cnt == bluegene_bp_node_cnt)
+	} else if(bg_record->node_cnt == bg_conf->bp_node_cnt)
 		bg_record->full_block = 1;
 	
-	
 /* #ifndef HAVE_BG_FILES */
 /* 	max_dim[X] = MAX(max_dim[X], end[X]); */
 /* 	max_dim[Y] = MAX(max_dim[Y], end[Y]); */
@@ -338,10 +341,10 @@ extern void process_nodes(bg_record_t *bg_record, bool startup)
 	if (node_name2bitmap(bg_record->nodes, 
 			     false, 
 			     &bg_record->bitmap)) {
-		fatal("1 Unable to convert nodes %s to bitmap", 
+		fatal("process_nodes: "
+		      "1 Unable to convert nodes %s to bitmap", 
 		      bg_record->nodes);
 	}
-#endif
 	return;
 }
 
@@ -524,7 +527,7 @@ extern int update_block_user(bg_record_t *bg_record, int set)
 	}
 	if(!bg_record->user_name) {
 		error("No user_name");
-		bg_record->user_name = xstrdup(bg_slurm_user_name);
+		bg_record->user_name = xstrdup(bg_conf->slurm_user_name);
 	}
 #ifdef HAVE_BG_FILES
 	int rc=0;	
@@ -538,7 +541,7 @@ extern int update_block_user(bg_record_t *bg_record, int set)
 			return -1;
 		} else if (rc == REMOVE_USER_NONE) {
 			if (strcmp(bg_record->target_name, 
-				   bg_slurm_user_name)) {
+				   bg_conf->slurm_user_name)) {
 				info("Adding user %s to Block %s",
 				     bg_record->target_name, 
 				     bg_record->bg_block_id);
@@ -601,7 +604,7 @@ extern void drain_as_needed(bg_record_t *bg_record, char *reason)
 		}
 		unlock_slurmctld(job_write_lock);
 		slurm_mutex_lock(&block_state_mutex);
-		if(remove_from_bg_list(bg_job_block_list, bg_record) 
+		if(remove_from_bg_list(bg_lists->job_running, bg_record) 
 		   == SLURM_SUCCESS) {
 			num_unused_cpus += bg_record->cpu_cnt;
 		}
@@ -609,7 +612,7 @@ extern void drain_as_needed(bg_record_t *bg_record, char *reason)
 	}
 
 	/* small blocks */
-	if(bg_record->cpu_cnt < procs_per_node) {
+	if(bg_record->cpu_cnt < bg_conf->procs_per_bp) {
 		debug2("small block");
 		goto end_it;
 	}
@@ -651,7 +654,7 @@ extern int set_ionodes(bg_record_t *bg_record, int io_start, int io_nodes)
 	if(!bg_record)
 		return SLURM_ERROR;
 	
-	bg_record->ionode_bitmap = bit_alloc(bluegene_numpsets);
+	bg_record->ionode_bitmap = bit_alloc(bg_conf->numpsets);
 	/* Set the correct ionodes being used in this block */
 	bit_nset(bg_record->ionode_bitmap, io_start, io_start+io_nodes);
 	bit_fmt(bitstring, BITSIZE, bg_record->ionode_bitmap);
@@ -669,18 +672,19 @@ extern int add_bg_record(List records, List used_nodes, blockreq_t *blockreq,
 	int i, len;
 	int small_count = 0;
 
+	xassert(bg_conf->slurm_user_name);
+
 	if(!records) {
 		fatal("add_bg_record: no records list given");
 	}
-	bg_record = (bg_record_t*) xmalloc(sizeof(bg_record_t));
-	
+	bg_record = (bg_record_t*) xmalloc(sizeof(bg_record_t));	
 	
-	bg_record->user_name = xstrdup(bg_slurm_user_name);
-	bg_record->target_name = xstrdup(bg_slurm_user_name);
+	bg_record->user_name = xstrdup(bg_conf->slurm_user_name);
+	bg_record->target_name = xstrdup(bg_conf->slurm_user_name);
 	
 	pw_uid = uid_from_string(bg_record->user_name);
 	if(pw_uid == (uid_t) -1) {
-		error("No such user: %s", bg_record->user_name);
+		error("add_bg_record: No such user: %s", bg_record->user_name);
 	} else {
 		bg_record->user_uid = pw_uid;
 	}
@@ -689,17 +693,18 @@ extern int add_bg_record(List records, List used_nodes, blockreq_t *blockreq,
 	if(used_nodes) {
 		if(copy_node_path(used_nodes, &bg_record->bg_block_list)
 		   == SLURM_ERROR)
-			error("couldn't copy the path for the allocation");
+			error("add_bg_record: "
+			      "couldn't copy the path for the allocation");
 		bg_record->bp_count = list_count(used_nodes);
 	}
 	/* bg_record->boot_state = 0; 	Implicit */
 	/* bg_record->state = 0;	Implicit */
 #ifdef HAVE_BGL
-	debug2("asking for %s %d %d %s", 
+	debug2("add_bg_record: asking for %s %d %d %s", 
 	       blockreq->block, blockreq->small32, blockreq->small128,
 	       convert_conn_type(blockreq->conn_type));
 #else
-	debug2("asking for %s %d %d %d %d %d %s", 
+	debug2("add_bg_record: asking for %s %d %d %d %d %d %s", 
 	       blockreq->block, blockreq->small256, 
 	       blockreq->small128, blockreq->small64,
 	       blockreq->small32, blockreq->small16, 
@@ -708,7 +713,7 @@ extern int add_bg_record(List records, List used_nodes, blockreq_t *blockreq,
 	/* Set the bitmap blank here if it is a full node we don't
 	   want anything set we also don't want the bg_record->ionodes set.
 	*/
-	bg_record->ionode_bitmap = bit_alloc(bluegene_numpsets);
+	bg_record->ionode_bitmap = bit_alloc(bg_conf->numpsets);
 
 	len = strlen(blockreq->block);
 	i=0;
@@ -721,12 +726,13 @@ extern int add_bg_record(List records, List used_nodes, blockreq_t *blockreq,
 	if(i<len) {
 		len -= i;
 		
-		len += strlen(bg_slurm_node_prefix)+1;
+		len += strlen(bg_conf->slurm_node_prefix)+1;
 		bg_record->nodes = xmalloc(len);
 		snprintf(bg_record->nodes, len, "%s%s", 
-			bg_slurm_node_prefix, blockreq->block+i);
+			bg_conf->slurm_node_prefix, blockreq->block+i);
 	} else 
-		fatal("BPs=%s is in a weird format", blockreq->block); 
+		fatal("add_bg_record: BPs=%s is in a weird format",
+		      blockreq->block); 
 	
 	process_nodes(bg_record, false);
 	
@@ -734,30 +740,32 @@ extern int add_bg_record(List records, List used_nodes, blockreq_t *blockreq,
 	bg_record->node_use = SELECT_COPROCESSOR_MODE;
 #endif
 	bg_record->conn_type = blockreq->conn_type;
-	bg_record->cpu_cnt = procs_per_node * bg_record->bp_count;
-	bg_record->node_cnt = bluegene_bp_node_cnt * bg_record->bp_count;
+	bg_record->cpu_cnt = bg_conf->procs_per_bp * bg_record->bp_count;
+	bg_record->node_cnt = bg_conf->bp_node_cnt * bg_record->bp_count;
 	bg_record->job_running = NO_JOB_RUNNING;
 
 #ifdef HAVE_BGL
 	if(blockreq->blrtsimage)
 		bg_record->blrtsimage = xstrdup(blockreq->blrtsimage);
 	else
-		bg_record->blrtsimage = xstrdup(default_blrtsimage);
+		bg_record->blrtsimage = xstrdup(bg_conf->default_blrtsimage);
 #endif
 	if(blockreq->linuximage)
 		bg_record->linuximage = xstrdup(blockreq->linuximage);
 	else
-		bg_record->linuximage = xstrdup(default_linuximage);
+		bg_record->linuximage = xstrdup(bg_conf->default_linuximage);
 
 	if(blockreq->mloaderimage)
 		bg_record->mloaderimage = xstrdup(blockreq->mloaderimage);
 	else
-		bg_record->mloaderimage = xstrdup(default_mloaderimage);
+		bg_record->mloaderimage =
+			xstrdup(bg_conf->default_mloaderimage);
 
 	if(blockreq->ramdiskimage)
 		bg_record->ramdiskimage = xstrdup(blockreq->ramdiskimage);
 	else
-		bg_record->ramdiskimage = xstrdup(default_ramdiskimage);
+		bg_record->ramdiskimage =
+			xstrdup(bg_conf->default_ramdiskimage);
 		
 	if(bg_record->conn_type != SELECT_SMALL) {
 		/* this needs to be an append so we keep things in the
@@ -766,66 +774,73 @@ extern int add_bg_record(List records, List used_nodes, blockreq_t *blockreq,
 		/* this isn't a correct list so we need to set it later for
 		   now we just used it to be the bp number */
 		if(!used_nodes) {
-			debug4("we didn't get a request list so we are "
+			debug4("add_bg_record: "
+			       "we didn't get a request list so we are "
 			       "destroying this bp list");
 			list_destroy(bg_record->bg_block_list);
 			bg_record->bg_block_list = NULL;
 		}
 	} else {
-		debug("adding a small block");
+		debug("add_bg_record: adding a small block");
 		if(no_check)
 			goto no_check;
 		/* if the ionode cnt for small32 is 0 then don't
 		   allow a sub quarter allocation 
 		*/
-		if(bluegene_nodecard_ionode_cnt < 2) {
-			if(!bluegene_nodecard_ionode_cnt && blockreq->small32) 
-				fatal("There is an error in your "
+		if(bg_conf->nodecard_ionode_cnt < 2) {
+			if(!bg_conf->nodecard_ionode_cnt && blockreq->small32) 
+				fatal("add_bg_record: "
+				      "There is an error in your "
 				      "bluegene.conf file.\n"
 				      "Can't create a 32 node block with "
 				      "Numpsets=%u. (Try setting it "
 				      "to at least 16)",
-				      bluegene_numpsets);
+				      bg_conf->numpsets);
 #ifndef HAVE_BGL
 			if(blockreq->small16) 
-				fatal("There is an error in your "
+				fatal("add_bg_record: "
+				      "There is an error in your "
 				      "bluegene.conf file.\n"
 				      "Can't create a 16 node block with "
 				      "Numpsets=%u. (Try setting it to "
 				      "at least 32)",
-				      bluegene_numpsets);
-			if((bluegene_io_ratio < 0.5) && blockreq->small64) 
-				fatal("There is an error in your "
+				      bg_conf->numpsets);
+			if((bg_conf->io_ratio < 0.5) && blockreq->small64) 
+				fatal("add_bg_record: "
+				      "There is an error in your "
 				      "bluegene.conf file.\n"
 				      "Can't create a 64 node block with "
 				      "Numpsets=%u. (Try setting it "
 				      "to at least 8)",
-				      bluegene_numpsets);
+				      bg_conf->numpsets);
 #endif
 		}
 
 #ifdef HAVE_BGL
 		if(blockreq->small32==0 && blockreq->small128==0) {
-			info("No specs given for this small block, "
+			info("add_bg_record: "
+			     "No specs given for this small block, "
 			     "I am spliting this block into 4 128CnBlocks");
 			blockreq->small128=4;
 		}		
 
-		i = (blockreq->small32*bluegene_nodecard_node_cnt) + 
-			(blockreq->small128*bluegene_quarter_node_cnt);
-		if(i != bluegene_bp_node_cnt)
-			fatal("There is an error in your bluegene.conf file.\n"
+		i = (blockreq->small32*bg_conf->nodecard_node_cnt) + 
+			(blockreq->small128*bg_conf->quarter_node_cnt);
+		if(i != bg_conf->bp_node_cnt)
+			fatal("add_bg_record: "
+			      "There is an error in your bluegene.conf file.\n"
 			      "I am unable to request %d nodes consisting of "
 			      "%u 32CnBlocks and\n%u 128CnBlocks in one "
 			      "base partition with %u nodes.", 
 			      i, blockreq->small32, blockreq->small128,
-			      bluegene_bp_node_cnt);
+			      bg_conf->bp_node_cnt);
 		small_count = blockreq->small32+blockreq->small128; 
 #else
 		if(!blockreq->small16 && !blockreq->small32 
 		   && !blockreq->small64 && !blockreq->small128 
 		   && !blockreq->small256) {
-			info("No specs given for this small block, "
+			info("add_bg_record: "
+			     "No specs given for this small block, "
 			     "I am spliting this block into 2 256CnBlocks");
 			blockreq->small256=2;
 		}		
@@ -835,8 +850,9 @@ extern int add_bg_record(List records, List used_nodes, blockreq_t *blockreq,
 			+ (blockreq->small64*64) 
 			+ (blockreq->small128*128)
 			+ (blockreq->small256*256);
-		if(i != bluegene_bp_node_cnt)
-			fatal("There is an error in your bluegene.conf file.\n"
+		if(i != bg_conf->bp_node_cnt)
+			fatal("add_bg_record: "
+			      "There is an error in your bluegene.conf file.\n"
 			      "I am unable to request %d nodes consisting of "
 			      "%u 16CNBlocks, %u 32CNBlocks,\n"
 			      "%u 64CNBlocks, %u 128CNBlocks, "
@@ -844,7 +860,7 @@ extern int add_bg_record(List records, List used_nodes, blockreq_t *blockreq,
 			      "in one base partition with %u nodes.", 
 			      i, blockreq->small16, blockreq->small32, 
 			      blockreq->small64, blockreq->small128, 
-			      blockreq->small256, bluegene_bp_node_cnt);
+			      blockreq->small256, bg_conf->bp_node_cnt);
 		small_count = blockreq->small16
 			+ blockreq->small32
 			+ blockreq->small64
@@ -872,7 +888,7 @@ extern int add_bg_record(List records, List used_nodes, blockreq_t *blockreq,
 extern int handle_small_record_request(List records, blockreq_t *blockreq,
 				       bg_record_t *bg_record, bitoff_t start)
 {
-	bitstr_t *ionodes = bit_alloc(bluegene_numpsets);
+	bitstr_t *ionodes = bit_alloc(bg_conf->numpsets);
 	int i=0, ionode_cnt = 0;
 	bg_record_t *found_record = NULL;
 
@@ -881,7 +897,7 @@ extern int handle_small_record_request(List records, blockreq_t *blockreq,
 	xassert(bg_record);
 
 	xassert(start >= 0);
-	xassert(start < bluegene_numpsets);
+	xassert(start < bg_conf->numpsets);
 
 #ifndef HAVE_BGL
 	for(i=0; i<blockreq->small16; i++) {
@@ -895,7 +911,7 @@ extern int handle_small_record_request(List records, blockreq_t *blockreq,
 		start++;
 	}
 #endif
-	if((ionode_cnt = bluegene_nodecard_ionode_cnt))
+	if((ionode_cnt = bg_conf->nodecard_ionode_cnt))
 		ionode_cnt--;
 	for(i=0; i<blockreq->small32; i++) {
 		bit_nset(ionodes, start, start+ionode_cnt);
@@ -909,7 +925,7 @@ extern int handle_small_record_request(List records, blockreq_t *blockreq,
 	}
 	
 #ifndef HAVE_BGL
-	if((ionode_cnt = bluegene_nodecard_ionode_cnt * 2))
+	if((ionode_cnt = bg_conf->nodecard_ionode_cnt * 2))
 		ionode_cnt--;
 	for(i=0; i<blockreq->small64; i++) {
 		bit_nset(ionodes, start, start+ionode_cnt);
@@ -922,7 +938,7 @@ extern int handle_small_record_request(List records, blockreq_t *blockreq,
 		start+=ionode_cnt+1;
 	}
 #endif
-	if((ionode_cnt = bluegene_quarter_ionode_cnt))
+	if((ionode_cnt = bg_conf->quarter_ionode_cnt))
 		ionode_cnt--;
 	for(i=0; i<blockreq->small128; i++) {
 		bit_nset(ionodes, start, start+ionode_cnt);
@@ -936,7 +952,7 @@ extern int handle_small_record_request(List records, blockreq_t *blockreq,
 	}
 
 #ifndef HAVE_BGL
-	if((ionode_cnt = bluegene_quarter_ionode_cnt * 2))
+	if((ionode_cnt = bg_conf->quarter_ionode_cnt * 2))
 		ionode_cnt--;
 	for(i=0; i<blockreq->small256; i++) {
 		bit_nset(ionodes, start, start+ionode_cnt);
@@ -987,14 +1003,15 @@ extern int down_nodecard(char *bp_name, bitoff_t io_start)
 	if(io_cnt == NO_VAL) {
 		io_cnt = 1;
 		/* Translate 1 nodecard count to ionode count */
-		if((io_cnt *= bluegene_io_ratio))
+		if((io_cnt *= bg_conf->io_ratio))
 			io_cnt--;
+
 		/* make sure we create something that is able to be
 		   created */
-		if(bluegene_smallest_block < bluegene_nodecard_node_cnt)
-			create_size = bluegene_nodecard_node_cnt;
+		if(bg_conf->smallest_block < bg_conf->nodecard_node_cnt)
+			create_size = bg_conf->nodecard_node_cnt;
 		else
-			create_size = bluegene_smallest_block;
+			create_size = bg_conf->smallest_block;
 	}
 
 	node_ptr = find_node_record(bp_name);
@@ -1003,6 +1020,16 @@ extern int down_nodecard(char *bp_name, bitoff_t io_start)
 		       bp_name);
 		return EINVAL;
 	}
+
+	/* this is here for sanity check to make sure we don't core on
+	   these bits when we set them below. */
+	if(io_start >= bg_conf->numpsets 
+	   || (io_start+io_cnt) >= bg_conf->numpsets) {
+		debug("io %d-%d not configured on this "
+		      "system, only %d ionodes per midplane",
+		      io_start, io_start+io_cnt, bg_conf->numpsets);
+		return EINVAL;
+	}
 	bp_bit = (node_ptr - node_record_table_ptr);
 	
 	memset(&blockreq, 0, sizeof(blockreq_t));
@@ -1010,21 +1037,21 @@ extern int down_nodecard(char *bp_name, bitoff_t io_start)
 	blockreq.conn_type = SELECT_SMALL;
 	blockreq.block = bp_name;
 
-	debug3("here setting %d of %d and %d-%d of %d",
+	debug3("here setting node %d of %d and ionodes %d-%d of %d",
 	       bp_bit, node_record_count, io_start, 
-	       io_start+io_cnt, bluegene_numpsets);
+	       io_start+io_cnt, bg_conf->numpsets);
 
 	memset(&tmp_record, 0, sizeof(bg_record_t));
 	tmp_record.bp_count = 1;
-	tmp_record.node_cnt = bluegene_nodecard_node_cnt;
+	tmp_record.node_cnt = bg_conf->nodecard_node_cnt;
 	tmp_record.bitmap = bit_alloc(node_record_count);
 	bit_set(tmp_record.bitmap, bp_bit);
 
-	tmp_record.ionode_bitmap = bit_alloc(bluegene_numpsets);
+	tmp_record.ionode_bitmap = bit_alloc(bg_conf->numpsets);
 	bit_nset(tmp_record.ionode_bitmap, io_start, io_start+io_cnt);
 
 	slurm_mutex_lock(&block_state_mutex);
-	itr = list_iterator_create(bg_list);
+	itr = list_iterator_create(bg_lists->main);
 	while ((bg_record = list_next(itr))) {
 		if(!bit_test(bg_record->bitmap, bp_bit))
 			continue;
@@ -1036,7 +1063,7 @@ extern int down_nodecard(char *bp_name, bitoff_t io_start)
 			slurm_fail_job(bg_record->job_running);
 
 		/* mark every one of these in an error state */
-		if(bluegene_layout_mode != LAYOUT_DYNAMIC) {
+		if(bg_conf->layout_mode != LAYOUT_DYNAMIC) {
 			if(!delete_list)
 				delete_list = list_create(NULL);
 			list_append(delete_list, bg_record);
@@ -1048,8 +1075,12 @@ extern int down_nodecard(char *bp_name, bitoff_t io_start)
 		/* if the block is smaller than the create size just
 		   continue on.
 		*/
-		if(bg_record->node_cnt < create_size)
+		if(bg_record->node_cnt < create_size) {
+			if(!delete_list)
+				delete_list = list_create(NULL);
+			list_append(delete_list, bg_record);
 			continue;
+		}
 
 		if(!smallest_bg_record || 
 		   (smallest_bg_record->node_cnt > bg_record->node_cnt))
@@ -1058,7 +1089,7 @@ extern int down_nodecard(char *bp_name, bitoff_t io_start)
 	list_iterator_destroy(itr);
 	slurm_mutex_unlock(&block_state_mutex);
 	
-	if(bluegene_layout_mode != LAYOUT_DYNAMIC) {
+	if(bg_conf->layout_mode != LAYOUT_DYNAMIC) {
 		debug3("running non-dynamic mode");
 		if(delete_list) {
 			int cnt_set = 0;
@@ -1100,8 +1131,49 @@ extern int down_nodecard(char *bp_name, bitoff_t io_start)
 		goto cleanup;
 	} 
 
+	/* below is only for Dynamic mode */
 	
-	if(smallest_bg_record) {
+	if(delete_list) {
+		int cnt_set = 0;
+		bitstr_t *iobitmap = bit_alloc(bg_conf->numpsets);
+		/* don't lock here since it is handled inside
+		   the put_block_in_error_state
+		*/
+		itr = list_iterator_create(delete_list);
+		while ((bg_record = list_next(itr))) {
+			debug2("combining smaller than nodecard "
+			       "dynamic block %s",
+			       bg_record->bg_block_id);
+			while(bg_record->job_running > NO_JOB_RUNNING)
+				sleep(1);
+
+			bit_or(iobitmap, bg_record->ionode_bitmap);
+			cnt_set++;
+		}
+		list_iterator_destroy(itr);
+		list_destroy(delete_list);
+		if(!cnt_set) {
+			FREE_NULL_BITMAP(iobitmap);
+			rc = SLURM_ERROR;
+			goto cleanup;
+		}
+		/* set the start to be the same as the start of the
+		   ionode_bitmap.  If no ionodes set (not a small
+		   block) set io_start = 0. */
+		if((io_start = bit_ffs(iobitmap)) == -1) {
+			io_start = 0;
+			if(create_size > bg_conf->nodecard_node_cnt) 
+				blockreq.small128 = 4;
+			else
+				blockreq.small32 = 16;
+		} else if(create_size <= bg_conf->nodecard_node_cnt) 
+			blockreq.small32 = 1;
+		else
+			/* this should never happen */
+			blockreq.small128 = 1;
+		
+		FREE_NULL_BITMAP(iobitmap);		
+	} else if(smallest_bg_record) {
 		debug2("smallest dynamic block is %s",
 		       smallest_bg_record->bg_block_id);
 		if(smallest_bg_record->state == RM_PARTITION_ERROR) {
@@ -1146,15 +1218,15 @@ extern int down_nodecard(char *bp_name, bitoff_t io_start)
 			break;
 		}
 
-		if(create_size != bluegene_nodecard_node_cnt) {
+		if(create_size != bg_conf->nodecard_node_cnt) {
 			blockreq.small128 = blockreq.small32 / 4;
 			blockreq.small32 = 0;
-		}
-		/* set the start to be the same as the start of the
-		   ionode_bitmap.  If no ionodes set (not a small
-		   block) set io_start = 0. */
-		if((io_start = bit_ffs(smallest_bg_record->ionode_bitmap))
-		   == -1)
+			io_start = 0;
+		} else if((io_start =
+			   bit_ffs(smallest_bg_record->ionode_bitmap)) == -1)
+			/* set the start to be the same as the start of the
+			   ionode_bitmap.  If no ionodes set (not a small
+			   block) set io_start = 0. */
 			io_start = 0;
 	} else {
 		switch(create_size) {
@@ -1208,13 +1280,12 @@ extern int down_nodecard(char *bp_name, bitoff_t io_start)
 	delete_list = list_create(NULL);
 	while((bg_record = list_pop(requests))) {
 		slurm_mutex_lock(&block_state_mutex);
-		itr = list_iterator_create(bg_list);
+		itr = list_iterator_create(bg_lists->main);
 		while((found_record = list_next(itr))) {
 			if(!blocks_overlap(bg_record, found_record))
 				continue;
 			list_push(delete_list, found_record);
 			list_remove(itr);
-			num_block_to_free++;
 		}
 		list_iterator_destroy(itr);
 		slurm_mutex_unlock(&block_state_mutex);
@@ -1232,7 +1303,7 @@ extern int down_nodecard(char *bp_name, bitoff_t io_start)
 		      bg_record->bg_block_id);
 		print_bg_record(bg_record);
 		slurm_mutex_lock(&block_state_mutex);
-		list_append(bg_list, bg_record);
+		list_append(bg_lists->main, bg_record);
 		slurm_mutex_unlock(&block_state_mutex);
 		if(bit_overlap(bg_record->ionode_bitmap, 
 			       tmp_record.ionode_bitmap)) {
@@ -1247,7 +1318,7 @@ extern int down_nodecard(char *bp_name, bitoff_t io_start)
 	slurm_mutex_lock(&block_state_mutex);
 	free_block_list(delete_list);
 	list_destroy(delete_list);
-	sort_bg_record_inc_size(bg_list);
+	sort_bg_record_inc_size(bg_lists->main);
 	slurm_mutex_unlock(&block_state_mutex);
 	last_bg_update = time(NULL);	
 
@@ -1279,7 +1350,7 @@ extern int up_nodecard(char *bp_name, bitstr_t *ionode_bitmap)
 	bp_bit = (node_ptr - node_record_table_ptr);
 	
 	slurm_mutex_lock(&block_state_mutex);
-	itr = list_iterator_create(bg_list);
+	itr = list_iterator_create(bg_lists->main);
 	while((bg_record = list_next(itr))) {
 		if(bg_record->job_running != BLOCK_ERROR_STATE)
 			continue;
@@ -1330,12 +1401,12 @@ extern int put_block_in_error_state(bg_record_t *bg_record, int state)
 	info("Setting Block %s to ERROR state.", bg_record->bg_block_id);
 	/* we add the block to these lists so we don't try to schedule
 	   on them. */
-	if(!block_ptr_exist_in_list(bg_job_block_list, bg_record)) {
-		list_push(bg_job_block_list, bg_record);
+	if(!block_ptr_exist_in_list(bg_lists->job_running, bg_record)) {
+		list_push(bg_lists->job_running, bg_record);
 		num_unused_cpus -= bg_record->cpu_cnt;
 	}
-	if(!block_ptr_exist_in_list(bg_booted_block_list, bg_record)) 
-		list_push(bg_booted_block_list, bg_record);
+	if(!block_ptr_exist_in_list(bg_lists->booted, bg_record)) 
+		list_push(bg_lists->booted, bg_record);
 	
 	slurm_mutex_lock(&block_state_mutex);
 	bg_record->job_running = state;
@@ -1343,8 +1414,8 @@ extern int put_block_in_error_state(bg_record_t *bg_record, int state)
 
 	xfree(bg_record->user_name);
 	xfree(bg_record->target_name);
-	bg_record->user_name = xstrdup(bg_slurm_user_name);
-	bg_record->target_name = xstrdup(bg_slurm_user_name);
+	bg_record->user_name = xstrdup(bg_conf->slurm_user_name);
+	bg_record->target_name = xstrdup(bg_conf->slurm_user_name);
 	
 	pw_uid = uid_from_string(bg_record->user_name);
 	if(pw_uid == (uid_t) -1) {
@@ -1355,7 +1426,6 @@ extern int put_block_in_error_state(bg_record_t *bg_record, int state)
 	slurm_mutex_unlock(&block_state_mutex);
 
 	trigger_block_error();
-	last_bg_update = time(NULL);
 
 	return SLURM_SUCCESS;
 }
@@ -1372,9 +1442,10 @@ extern int resume_block(bg_record_t *bg_record)
 	     "being in an error state.",
 	      bg_record->bg_block_id);
 
-	if(remove_from_bg_list(bg_job_block_list, bg_record) == SLURM_SUCCESS) 
+	if(remove_from_bg_list(bg_lists->job_running, bg_record)
+	   == SLURM_SUCCESS) 
 		num_unused_cpus += bg_record->cpu_cnt;
-	remove_from_bg_list(bg_booted_block_list, bg_record);
+	remove_from_bg_list(bg_lists->booted, bg_record);
 
 	bg_record->job_running = NO_JOB_RUNNING;
 	bg_record->state = RM_PARTITION_FREE;
@@ -1385,7 +1456,6 @@ extern int resume_block(bg_record_t *bg_record)
 
 /************************* local functions ***************************/
 
-#ifdef HAVE_BG
 static int _addto_node_list(bg_record_t *bg_record, int *start, int *end)
 {
 	int node_count=0;
@@ -1420,7 +1490,7 @@ static int _addto_node_list(bg_record_t *bg_record, int *start, int *end)
 				
 				snprintf(node_name_tmp, sizeof(node_name_tmp),
 					 "%s%c%c%c", 
-					 bg_slurm_node_prefix,
+					 bg_conf->slurm_node_prefix,
 					 alpha_num[x], alpha_num[y],
 					 alpha_num[z]);		
 				
@@ -1460,6 +1530,3 @@ static int _ba_node_cmpf_inc(ba_node_t *node_a, ba_node_t *node_b)
 }
 
 
-#endif //HAVE_BG
-
-
diff --git a/src/plugins/select/bluegene/plugin/bg_record_functions.h b/src/plugins/select/bluegene/plugin/bg_record_functions.h
index 1727e24fa..12bf01028 100644
--- a/src/plugins/select/bluegene/plugin/bg_record_functions.h
+++ b/src/plugins/select/bluegene/plugin/bg_record_functions.h
@@ -8,7 +8,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/select/bluegene/plugin/bg_switch_connections.c b/src/plugins/select/bluegene/plugin/bg_switch_connections.c
index c8a382c28..59f7d74e1 100644
--- a/src/plugins/select/bluegene/plugin/bg_switch_connections.c
+++ b/src/plugins/select/bluegene/plugin/bg_switch_connections.c
@@ -2,14 +2,15 @@
  *  bg_switch_connections.c - Blue Gene switch management functions, 
  *  establish switch connections
  *
- *  $Id: bg_switch_connections.c 17104 2009-04-01 17:20:31Z da $
+ *  $Id: bg_switch_connections.c 17483 2009-05-13 18:31:42Z da $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dan Phung <phung4@llnl.gov> and Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -221,7 +222,7 @@ static int _add_switch_conns(rm_switch_t* curr_switch,
 				break;	
 			}
 			conn[i].part_state = RM_PARTITION_READY;
-			debug2("adding %d -> %d", source, ba_conn->port_tar);
+			debug3("adding %d -> %d", source, ba_conn->port_tar);
 			list_push(conn_list, &conn[i]);
 		}
 	}
@@ -236,7 +237,7 @@ static int _add_switch_conns(rm_switch_t* curr_switch,
 			return SLURM_ERROR;
 		} 
 	} else {
-		debug("we got a switch with no connections");
+		debug2("we got a switch with no connections");
 		list_destroy(conn_list);
                 return SLURM_ERROR;
 	}
@@ -287,12 +288,12 @@ static int _used_switches(ba_node_t* ba_node)
 	int i = 0, j = 0, switch_count = 0;
 	int source = 0;
 	
-	debug4("checking node %c%c%c",
+	debug5("checking node %c%c%c",
 	       alpha_num[ba_node->coord[X]], 
 	       alpha_num[ba_node->coord[Y]], 
 	       alpha_num[ba_node->coord[Z]]);
 	for(i=0; i<BA_SYSTEM_DIMENSIONS; i++) {
-		debug4("dim %d", i);
+		debug5("dim %d", i);
 		ba_switch = &ba_node->axis_switch[i];
 		for(j=0; j<num_connections; j++) {
 			/* set the source port(-) to check */
@@ -314,7 +315,7 @@ static int _used_switches(ba_node_t* ba_node)
 			ba_conn = &ba_switch->int_wire[source];
 			if(ba_conn->used && ba_conn->port_tar != source) {
 				switch_count++;
-				debug4("used");
+				debug5("used");
 				break;
 			}
 		}
@@ -338,7 +339,7 @@ extern int configure_small_block(bg_record_t *bg_record)
 	rm_nodecard_t *ncard;
 	rm_nodecard_list_t *ncard_list = NULL;
 	int num, i;
-	int use_nc[bluegene_bp_nodecard_cnt];
+	int use_nc[bg_conf->bp_nodecard_cnt];
 	double nc_pos = 0;
 #endif
 	xassert(bg_record->ionode_bitmap);
@@ -348,7 +349,7 @@ extern int configure_small_block(bg_record_t *bg_record)
 		return SLURM_ERROR;
 	}
 /* 	info("configuring small block on ionodes %s out of %d ncs",  */
-/* 	     bg_record->ionodes, bluegene_bp_nodecard_cnt); */
+/* 	     bg_record->ionodes, bg_conf->bp_nodecard_cnt); */
 #ifdef HAVE_BG_FILES	
 	/* set that we are doing a small block */
 	if ((rc = bridge_set_data(bg_record->bg_block, RM_PartitionSmall, 
@@ -358,7 +359,7 @@ extern int configure_small_block(bg_record_t *bg_record)
 		      bg_err_str(rc));
 	}
 
-	num_ncards = bg_record->node_cnt/bluegene_nodecard_node_cnt;
+	num_ncards = bg_record->node_cnt/bg_conf->nodecard_node_cnt;
 	if(num_ncards < 1) {
 		num_ncards = 1;
 		sub_nodecard = 1;
@@ -367,11 +368,11 @@ extern int configure_small_block(bg_record_t *bg_record)
 
 	/* find out how many nodecards to get for each ionode */
 		
-	for(i = 0; i<bluegene_numpsets; i++) {
+	for(i = 0; i<bg_conf->numpsets; i++) {
 		if(bit_test(bg_record->ionode_bitmap, i)) {
-			if(bluegene_nc_ratio > 1) {
+			if(bg_conf->nc_ratio > 1) {
 				int j=0;
-				for(j=0; j<bluegene_nc_ratio; j++)
+				for(j=0; j<bg_conf->nc_ratio; j++)
 					use_nc[(int)nc_pos+j] = 1;
 			} else {
 				use_nc[(int)nc_pos] = 1;
@@ -379,7 +380,7 @@ extern int configure_small_block(bg_record_t *bg_record)
 					ionode_card = 1;
 			}
 		}
-		nc_pos += bluegene_nc_ratio;
+		nc_pos += bg_conf->nc_ratio;
 	}
 
 	if ((rc = bridge_set_data(bg_record->bg_block,
@@ -687,8 +688,8 @@ extern int configure_block_switches(bg_record_t * bg_record)
 		goto cleanup;
 	}
 #endif	
-	debug3("BP count %d", bg_record->bp_count);
-	debug3("switch count %d", bg_record->switch_count);
+	debug4("BP count %d", bg_record->bp_count);
+	debug4("switch count %d", bg_record->switch_count);
 
 	list_iterator_reset(itr);
 	while ((ba_node = list_next(itr))) {
@@ -700,13 +701,13 @@ extern int configure_block_switches(bg_record_t * bg_record)
 		}
 #endif
 		if(!ba_node->used) {
-			debug3("%c%c%c is a passthrough, "
+			debug4("%c%c%c is a passthrough, "
 			       "not including in request",
 			       alpha_num[ba_node->coord[X]], 
 			       alpha_num[ba_node->coord[Y]], 
 			       alpha_num[ba_node->coord[Z]]);
 		} else {
-			debug2("using node %c%c%c",
+			debug3("using node %c%c%c",
 			       alpha_num[ba_node->coord[X]], 
 			       alpha_num[ba_node->coord[Y]], 
 			       alpha_num[ba_node->coord[Z]]);
@@ -757,7 +758,7 @@ extern int configure_block_switches(bg_record_t * bg_record)
 			if(_add_switch_conns(coord_switch[i],
 					     &ba_node->axis_switch[i])
 			   == SLURM_SUCCESS) {
-				debug2("adding switch dim %d", i);
+				debug3("adding switch dim %d", i);
 				if (first_switch){
 					if ((rc = bridge_set_data(
 						     bg_record->bg_block,
diff --git a/src/plugins/select/bluegene/plugin/block_sys.c b/src/plugins/select/bluegene/plugin/block_sys.c
index 6abd01ef7..0df901705 100755
--- a/src/plugins/select/bluegene/plugin/block_sys.c
+++ b/src/plugins/select/bluegene/plugin/block_sys.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  block_sys.c - component used for wiring up the blocks
  *
- *  $Id: block_sys.c 17162 2009-04-06 20:18:23Z da $
+ *  $Id: block_sys.c 17680 2009-06-02 21:27:50Z da $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dan Phung <phung4@llnl.gov> and Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -103,7 +104,7 @@ static void _pre_allocate(bg_record_t *bg_record)
 {
 #ifdef HAVE_BG_FILES
 	int rc;
-	int send_psets=bluegene_numpsets;
+	int send_psets=bg_conf->numpsets;
 
 #ifdef HAVE_BGL
 	if ((rc = bridge_set_data(bg_record->bg_block, RM_PartitionBlrtsImg,   
@@ -153,9 +154,9 @@ static void _pre_allocate(bg_record_t *bg_record)
 		error("bridge_set_data(RM_PartitionConnection)", 
 		      bg_err_str(rc));
 	
-	/* rc = bluegene_bp_node_cnt/bg_record->node_cnt; */
+	/* rc = bg_conf->bp_node_cnt/bg_record->node_cnt; */
 /* 	if(rc > 1) */
-/* 		send_psets = bluegene_numpsets/rc; */
+/* 		send_psets = bg_conf->numpsets/rc; */
 	
 	if ((rc = bridge_set_data(bg_record->bg_block, RM_PartitionPsetsPerBP, 
 				  &send_psets)) != STATUS_OK)
@@ -163,7 +164,7 @@ static void _pre_allocate(bg_record_t *bg_record)
 		      bg_err_str(rc));
 	
 	if ((rc = bridge_set_data(bg_record->bg_block, RM_PartitionUserName, 
-				  bg_slurm_user_name)) 
+				  bg_conf->slurm_user_name)) 
 	    != STATUS_OK)
 		error("bridge_set_data(RM_PartitionUserName)", bg_err_str(rc));
 	
@@ -223,11 +224,11 @@ static int _post_allocate(bg_record_t *bg_record)
 
 		
 		bg_record->target_name = 
-			xstrdup(bg_slurm_user_name);
+			xstrdup(bg_conf->slurm_user_name);
 
 		xfree(bg_record->user_name);
 		bg_record->user_name = 
-			xstrdup(bg_slurm_user_name);
+			xstrdup(bg_conf->slurm_user_name);
 		
 
 		my_uid = uid_from_string(bg_record->user_name);
@@ -381,7 +382,7 @@ extern int configure_block(bg_record_t *bg_record)
 #endif
 	_pre_allocate(bg_record);
 
-	if(bg_record->cpu_cnt < procs_per_node)
+	if(bg_record->cpu_cnt < bg_conf->procs_per_bp)
 		configure_small_block(bg_record);
 	else
 		configure_block_switches(bg_record);
@@ -394,7 +395,7 @@ extern int configure_block(bg_record_t *bg_record)
 /*
  * Download from MMCS the initial BG block information
  */
-int read_bg_blocks()
+int read_bg_blocks(List curr_block_list)
 {
 	int rc = SLURM_SUCCESS;
 
@@ -485,7 +486,7 @@ int read_bg_blocks()
 		/* New BG Block record */		
 		
 		bg_record = xmalloc(sizeof(bg_record_t));
-		list_push(bg_curr_block_list, bg_record);
+		list_push(curr_block_list, bg_record);
 		
 		bg_record->bg_block_id = xstrdup(tmp_char);
 		free(tmp_char);
@@ -505,7 +506,7 @@ int read_bg_blocks()
 			goto clean_up;
 
 		bg_record->node_cnt = bp_cnt;
-		bg_record->cpu_cnt = bluegene_proc_ratio * bg_record->node_cnt;
+		bg_record->cpu_cnt = bg_conf->proc_ratio * bg_record->node_cnt;
 #endif
 		bg_record->job_running = NO_JOB_RUNNING;
 		
@@ -592,7 +593,7 @@ int read_bg_blocks()
 			}
 #ifdef HAVE_BGL
 			/* Translate nodecard count to ionode count */
-			if((io_cnt = nc_cnt * bluegene_io_ratio))
+			if((io_cnt = nc_cnt * bg_conf->io_ratio))
 				io_cnt--;
 
 			nc_id = 0;
@@ -600,9 +601,9 @@ int read_bg_blocks()
 				_find_nodecard(block_ptr, &nc_id);
 			
 			bg_record->node_cnt = 
-				nc_cnt * bluegene_nodecard_node_cnt;
+				nc_cnt * bg_conf->nodecard_node_cnt;
 			bg_record->cpu_cnt =
-				bluegene_proc_ratio * bg_record->node_cnt;
+				bg_conf->proc_ratio * bg_record->node_cnt;
 
 			if ((rc = bridge_get_data(ncard, 
 						  RM_NodeCardQuarter, 
@@ -610,11 +611,11 @@ int read_bg_blocks()
 				error("bridge_get_data(CardQuarter): %d",rc);
 				goto clean_up;
 			}
-			io_start *= bluegene_quarter_ionode_cnt;
-			io_start += bluegene_nodecard_ionode_cnt * (nc_id%4);
+			io_start *= bg_conf->quarter_ionode_cnt;
+			io_start += bg_conf->nodecard_ionode_cnt * (nc_id%4);
 #else
 			/* Translate nodecard count to ionode count */
-			if((io_cnt = nc_cnt * bluegene_io_ratio))
+			if((io_cnt = nc_cnt * bg_conf->io_ratio))
 				io_cnt--;
 
 			if ((rc = bridge_get_data(ncard, 
@@ -632,8 +633,8 @@ int read_bg_blocks()
 			*/
 			nc_id = atoi((char*)tmp_char+1);
 			free(tmp_char);
-			io_start = nc_id * bluegene_io_ratio;
-			if(bg_record->node_cnt < bluegene_nodecard_node_cnt) {
+			io_start = nc_id * bg_conf->io_ratio;
+			if(bg_record->node_cnt < bg_conf->nodecard_node_cnt) {
 				rm_ionode_t *ionode;
 
 				/* figure out the ionode we are using */
@@ -679,9 +680,9 @@ int read_bg_blocks()
 			       bg_record->ionodes);
 		} else {
 #ifdef HAVE_BGL
-			bg_record->cpu_cnt = procs_per_node 
+			bg_record->cpu_cnt = bg_conf->procs_per_bp 
 				* bg_record->bp_count;
-			bg_record->node_cnt =  bluegene_bp_node_cnt
+			bg_record->node_cnt =  bg_conf->bp_node_cnt
 				* bg_record->bp_count;
 #endif
 			if ((rc = bridge_get_data(block_ptr, 
@@ -697,7 +698,7 @@ int read_bg_blocks()
 			   node we don't want anything set we also
 			   don't want the bg_record->ionodes set.
 			*/
-			bg_record->ionode_bitmap = bit_alloc(bluegene_numpsets);
+			bg_record->ionode_bitmap = bit_alloc(bg_conf->numpsets);
 		}		
 		
 		bg_record->bg_block_list =
@@ -757,7 +758,7 @@ int read_bg_blocks()
 			snprintf(node_name_tmp, 
 				 sizeof(node_name_tmp),
 				 "%s%c%c%c", 
-				 bg_slurm_node_prefix,
+				 bg_conf->slurm_node_prefix,
 				 alpha_num[coord[X]], alpha_num[coord[Y]],
 				 alpha_num[coord[Z]]);
 			
@@ -803,10 +804,10 @@ int read_bg_blocks()
 		/* We can stop processing information now since we
 		   don't need to rest of the information to decide if
 		   this is the correct block. */
-		if(bluegene_layout_mode == LAYOUT_DYNAMIC) {
+		if(bg_conf->layout_mode == LAYOUT_DYNAMIC) {
 			bg_record_t *tmp_record = xmalloc(sizeof(bg_record_t));
 			copy_bg_record(bg_record, tmp_record);
-			list_push(bg_list, tmp_record);
+			list_push(bg_lists->main, tmp_record);
 		}
 
 		if ((rc = bridge_get_data(block_ptr, RM_PartitionUsersNum,
@@ -818,9 +819,9 @@ int read_bg_blocks()
 			if(bp_cnt==0) {
 				
 				bg_record->user_name = 
-					xstrdup(bg_slurm_user_name);
+					xstrdup(bg_conf->slurm_user_name);
 				bg_record->target_name = 
-					xstrdup(bg_slurm_user_name);
+					xstrdup(bg_conf->slurm_user_name);
 				
 			} else {
 				user_name = NULL;
@@ -844,7 +845,7 @@ int read_bg_blocks()
 				if(!bg_record->boot_state) {
 					
 					bg_record->target_name = 
-						xstrdup(bg_slurm_user_name);
+						xstrdup(bg_conf->slurm_user_name);
 					
 				} else
 					bg_record->target_name = 
@@ -964,7 +965,7 @@ int read_bg_blocks()
 
 #endif
 
-extern int load_state_file(char *dir_name)
+extern int load_state_file(List curr_block_list, char *dir_name)
 {
 	int state_fd, i, j=0;
 	char *state_file = NULL;
@@ -995,7 +996,7 @@ extern int load_state_file(char *dir_name)
 		return SLURM_SUCCESS;
 	}
 
-	xassert(bg_curr_block_list);
+	xassert(curr_block_list);
 
 	state_file = xstrdup(dir_name);
 	xstrcat(state_file, "/block_state");
@@ -1064,13 +1065,13 @@ extern int load_state_file(char *dir_name)
 		 * everthing else should have been set up already */
 		if(bg_info_record->state == RM_PARTITION_ERROR) {
 			if((bg_record = find_bg_record_in_list(
-				    bg_curr_block_list,
+				    curr_block_list,
 				    bg_info_record->bg_block_id)))
 				/* put_block_in_error_state should be
-				   called after the bg_list has been
+				   called after the bg_lists->main has been
 				   made.  We can't call it here since
 				   this record isn't the record kept
-				   around in bg_list.
+				   around in bg_lists->main.
 				*/
 				bg_record->state = bg_info_record->state;
 		}
@@ -1100,7 +1101,7 @@ extern int load_state_file(char *dir_name)
 	removable_set_bps(non_usable_nodes);
 
 	node_bitmap = bit_alloc(node_record_count);	
-	ionode_bitmap = bit_alloc(bluegene_numpsets);	
+	ionode_bitmap = bit_alloc(bg_conf->numpsets);	
 	for (i=0; i<node_select_ptr->record_count; i++) {
 		bg_info_record = &(node_select_ptr->bg_info_array[i]);
 		
@@ -1125,10 +1126,10 @@ extern int load_state_file(char *dir_name)
 		j = 0;
 		while(bg_info_record->ionode_inx[j] >= 0) {
 			if (bg_info_record->ionode_inx[j+1]
-			    >= bluegene_numpsets) {
+			    >= bg_conf->numpsets) {
 				fatal("Job state recovered incompatable with "
 					"bluegene.conf. ionodes=%u state=%d",
-					bluegene_numpsets,
+					bg_conf->numpsets,
 					bg_info_record->ionode_inx[j+1]);
 			}
 			bit_nset(ionode_bitmap,
@@ -1146,22 +1147,22 @@ extern int load_state_file(char *dir_name)
 			xstrdup(bg_info_record->ionodes);
 		bg_record->ionode_bitmap = bit_copy(ionode_bitmap);
 		/* put_block_in_error_state should be
-		   called after the bg_list has been
+		   called after the bg_lists->main has been
 		   made.  We can't call it here since
 		   this record isn't the record kept
-		   around in bg_list.
+		   around in bg_lists->main.
 		*/
 		bg_record->state = bg_info_record->state;
 		bg_record->job_running = NO_JOB_RUNNING;
 
-		bg_record->bp_count = bit_size(node_bitmap);
+		bg_record->bp_count = bit_set_count(node_bitmap);
 		bg_record->node_cnt = bg_info_record->node_cnt;
-		if(bluegene_bp_node_cnt > bg_record->node_cnt) {
-			ionodes = bluegene_bp_node_cnt 
+		if(bg_conf->bp_node_cnt > bg_record->node_cnt) {
+			ionodes = bg_conf->bp_node_cnt 
 				/ bg_record->node_cnt;
-			bg_record->cpu_cnt = procs_per_node / ionodes;
+			bg_record->cpu_cnt = bg_conf->procs_per_bp / ionodes;
 		} else {
-			bg_record->cpu_cnt = procs_per_node
+			bg_record->cpu_cnt = bg_conf->procs_per_bp
 				* bg_record->bp_count;
 		}
 #ifdef HAVE_BGL
@@ -1172,8 +1173,8 @@ extern int load_state_file(char *dir_name)
 
 		process_nodes(bg_record, true);
 
-		bg_record->target_name = xstrdup(bg_slurm_user_name);
-		bg_record->user_name = xstrdup(bg_slurm_user_name);
+		bg_record->target_name = xstrdup(bg_conf->slurm_user_name);
+		bg_record->user_name = xstrdup(bg_conf->slurm_user_name);
 			
 		my_uid = uid_from_string(bg_record->user_name);
 		if (my_uid == (uid_t) -1) {
@@ -1197,7 +1198,8 @@ extern int load_state_file(char *dir_name)
 		for(j=0; j<BA_SYSTEM_DIMENSIONS; j++) 
 			geo[j] = bg_record->geo[j];
 				
-		if(bluegene_layout_mode == LAYOUT_OVERLAP) {
+		if((bg_conf->layout_mode == LAYOUT_OVERLAP)
+		   || bg_record->full_block) {
 			reset_ba_system(false);
 			removable_set_bps(non_usable_nodes);
 		}
@@ -1218,7 +1220,7 @@ extern int load_state_file(char *dir_name)
 
 			
 		snprintf(temp, sizeof(temp), "%s%s",
-			 bg_slurm_node_prefix,
+			 bg_conf->slurm_node_prefix,
 			 name);
 		
 		xfree(name);
@@ -1237,11 +1239,11 @@ extern int load_state_file(char *dir_name)
 			
 		configure_block(bg_record);
 		blocks++;
-		list_push(bg_curr_block_list, bg_record);		
-		if(bluegene_layout_mode == LAYOUT_DYNAMIC) {
+		list_push(curr_block_list, bg_record);		
+		if(bg_conf->layout_mode == LAYOUT_DYNAMIC) {
 			bg_record_t *tmp_record = xmalloc(sizeof(bg_record_t));
 			copy_bg_record(bg_record, tmp_record);
-			list_push(bg_list, tmp_record);
+			list_push(bg_lists->main, tmp_record);
 		}
 	}
 
@@ -1249,7 +1251,7 @@ extern int load_state_file(char *dir_name)
 	FREE_NULL_BITMAP(ionode_bitmap);
 	FREE_NULL_BITMAP(node_bitmap);
 
-	sort_bg_record_inc_size(bg_curr_block_list);
+	sort_bg_record_inc_size(curr_block_list);
 	slurm_mutex_unlock(&block_state_mutex);
 		
 	info("Recovered %d blocks", blocks);
diff --git a/src/plugins/select/bluegene/plugin/bluegene.c b/src/plugins/select/bluegene/plugin/bluegene.c
index 0378a615a..c7b64845e 100644
--- a/src/plugins/select/bluegene/plugin/bluegene.c
+++ b/src/plugins/select/bluegene/plugin/bluegene.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  bluegene.c - blue gene node configuration processing module. 
  *
- *  $Id: bluegene.c 17202 2009-04-09 16:56:23Z da $
+ *  $Id: bluegene.c 17605 2009-05-27 16:21:13Z da $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <auble1@llnl.gov> et. al.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -46,47 +47,10 @@
 
 #define _DEBUG 0
 
-char* bg_conf = NULL;
-
 /* Global variables */
-List bg_list = NULL;			/* total list of bg_record entries */
-List bg_curr_block_list = NULL;  	/* current bg blocks in bluegene.conf*/
-List bg_job_block_list = NULL;  	/* jobs running in these blocks */
-List bg_booted_block_list = NULL;  	/* blocks that are booted */
-List bg_freeing_list = NULL;  	        /* blocks that being freed */
-
-#ifdef HAVE_BGL
-List bg_blrtsimage_list = NULL;
-#endif
-List bg_linuximage_list = NULL;
-List bg_mloaderimage_list = NULL;
-List bg_ramdiskimage_list = NULL;
-#ifdef HAVE_BGL
-char *default_blrtsimage = NULL;
-#endif
-List bg_valid_small32 = NULL;
-List bg_valid_small64 = NULL;
-List bg_valid_small128 = NULL;
-List bg_valid_small256 = NULL;
-char *default_linuximage = NULL;
-char *default_mloaderimage = NULL, *default_ramdiskimage = NULL;
-char *bridge_api_file = NULL; 
-char *bg_slurm_user_name = NULL;
-char *bg_slurm_node_prefix = NULL;
-bg_layout_t bluegene_layout_mode = NO_VAL;
-double bluegene_io_ratio = 0.0;
-double bluegene_nc_ratio = 0.0;
-uint32_t bluegene_smallest_block = 512;
-uint16_t bluegene_proc_ratio = 0;
-uint16_t bluegene_numpsets = 0;
-uint16_t bluegene_bp_node_cnt = 0;
-uint16_t bluegene_bp_nodecard_cnt = 0;
-uint16_t bluegene_quarter_node_cnt = 0;
-uint16_t bluegene_quarter_ionode_cnt = 0;
-uint16_t bluegene_nodecard_node_cnt = 0;
-uint16_t bluegene_nodecard_ionode_cnt = 0;
-uint16_t bridge_api_verb = 0;
 
+bg_config_t *bg_conf = NULL;
+bg_lists_t *bg_lists = NULL;
 bool agent_fini = false;
 time_t last_bg_update;
 pthread_mutex_t block_state_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -112,9 +76,14 @@ int max_dim[BA_SYSTEM_DIMENSIONS] = { 0 };
 #endif
 
 
+static void _destroy_bg_config(bg_config_t *bg_conf);
+static void _destroy_bg_lists(bg_lists_t *bg_lists);
+
 static void _set_bg_lists();
-static int  _validate_config_nodes(List *bg_found_block_list, char *dir);
-static int _delete_old_blocks(List bg_found_block_list);
+static int  _validate_config_nodes(List curr_block_list, 
+				   List found_block_list, char *dir);
+static int _delete_old_blocks(List curr_block_list, 
+			      List found_block_list);
 static char *_get_bg_conf(void);
 static int  _reopen_bridge_log(void);
 static void _destroy_bitmap(void *object);
@@ -122,6 +91,35 @@ static void _destroy_bitmap(void *object);
 /* Initialize all plugin variables */
 extern int init_bg(void)
 {
+	_set_bg_lists();
+
+	if(!bg_conf)
+		bg_conf = xmalloc(sizeof(bg_config_t));
+
+	xfree(bg_conf->slurm_user_name);
+	xfree(bg_conf->slurm_node_prefix);
+	slurm_conf_lock();
+	xassert(slurmctld_conf.slurm_user_name);
+	xassert(slurmctld_conf.node_prefix);
+	bg_conf->slurm_user_name = xstrdup(slurmctld_conf.slurm_user_name);
+	bg_conf->slurm_node_prefix = xstrdup(slurmctld_conf.node_prefix);
+	slurm_conf_unlock();	
+
+#ifdef HAVE_BGL
+	if(bg_conf->blrts_list)
+		list_destroy(bg_conf->blrts_list);
+	bg_conf->blrts_list = list_create(destroy_image);
+#endif
+	if(bg_conf->linux_list)
+		list_destroy(bg_conf->linux_list);
+	bg_conf->linux_list = list_create(destroy_image);
+	if(bg_conf->mloader_list)
+		list_destroy(bg_conf->mloader_list);
+	bg_conf->mloader_list = list_create(destroy_image);
+	if(bg_conf->ramdisk_list)
+		list_destroy(bg_conf->ramdisk_list);
+	bg_conf->ramdisk_list = list_create(destroy_image);	
+
 	ba_init(NULL);
 
 	info("BlueGene plugin loaded successfully");
@@ -144,74 +142,10 @@ extern void fini_bg(void)
 		pthread_cond_wait(&freed_cond, &freed_cnt_mutex);
 	if(destroy_cnt)
 		pthread_cond_wait(&destroy_cond, &freed_cnt_mutex);
-	
-	if (bg_list) {
-		list_destroy(bg_list);
-		bg_list = NULL;
-	}	
-	if (bg_curr_block_list) {
-		list_destroy(bg_curr_block_list);
-		bg_curr_block_list = NULL;
-	}	
-	if (bg_job_block_list) {
-		list_destroy(bg_job_block_list);
-		bg_job_block_list = NULL;
-		num_unused_cpus = 0;
-	}
-	if (bg_booted_block_list) {
-		list_destroy(bg_booted_block_list);
-		bg_booted_block_list = NULL;
-	}
-		
-#ifdef HAVE_BGL
-	if(bg_blrtsimage_list) {
-		list_destroy(bg_blrtsimage_list);
-		bg_blrtsimage_list = NULL;
-	}
-#endif	
-	if(bg_linuximage_list) {
-		list_destroy(bg_linuximage_list);
-		bg_linuximage_list = NULL;
-	}
-	
-	if(bg_mloaderimage_list) {
-		list_destroy(bg_mloaderimage_list);
-		bg_mloaderimage_list = NULL;
-	}
-
-	if(bg_ramdiskimage_list) {
-		list_destroy(bg_ramdiskimage_list);
-		bg_ramdiskimage_list = NULL;
-	}
-	
-	if(bg_valid_small32) {
-		list_destroy(bg_valid_small32);
-		bg_valid_small32 = NULL;
-	}
-	if(bg_valid_small64) {
-		list_destroy(bg_valid_small64);
-		bg_valid_small64 = NULL;
-	}
-	if(bg_valid_small128) {
-		list_destroy(bg_valid_small128);
-		bg_valid_small128 = NULL;
-	}
-	if(bg_valid_small256) {
-		list_destroy(bg_valid_small256);
-		bg_valid_small256 = NULL;
-	}
 
-#ifdef HAVE_BGL
-	xfree(default_blrtsimage);
-#endif
-	xfree(default_linuximage);
-	xfree(default_mloaderimage);
-	xfree(default_ramdiskimage);
-	xfree(bridge_api_file);
-	xfree(bg_conf);
-	xfree(bg_slurm_user_name);
-	xfree(bg_slurm_node_prefix);
-	
+	_destroy_bg_config(bg_conf);
+	_destroy_bg_lists(bg_lists);
+		
 	ba_fini();
 }
 
@@ -233,8 +167,8 @@ extern bool blocks_overlap(bg_record_t *rec_a, bg_record_t *rec_b)
 	if (!bit_overlap(rec_a->bitmap, rec_b->bitmap)) 
 		return false;
 
-	if((rec_a->node_cnt >= bluegene_bp_node_cnt)
-	   || (rec_b->node_cnt >= bluegene_bp_node_cnt))
+	if((rec_a->node_cnt >= bg_conf->bp_node_cnt)
+	   || (rec_b->node_cnt >= bg_conf->bp_node_cnt))
 		return true;
 	
 	if (!bit_overlap(rec_a->ionode_bitmap, rec_b->ionode_bitmap)) 
@@ -253,7 +187,7 @@ extern int remove_all_users(char *bg_block_id, char *user_name)
 
 	if ((rc = bridge_get_block(bg_block_id,  &block_ptr)) != STATUS_OK) {
 		if(rc == INCONSISTENT_DATA
-		   && bluegene_layout_mode == LAYOUT_DYNAMIC)
+		   && bg_conf->layout_mode == LAYOUT_DYNAMIC)
 			return REMOVE_USER_FOUND;
 			
 		error("bridge_get_block(%s): %s", 
@@ -299,7 +233,7 @@ extern int remove_all_users(char *bg_block_id, char *user_name)
 			error("No user was returned from database");
 			continue;
 		}
-		if(!strcmp(user, bg_slurm_user_name)) {
+		if(!strcmp(user, bg_conf->slurm_user_name)) {
 			free(user);
 			continue;
 		}
@@ -351,7 +285,7 @@ extern int set_block_user(bg_record_t *bg_record)
 		rc = SLURM_ERROR;
 	}	
 	xfree(bg_record->target_name);
-	bg_record->target_name = xstrdup(bg_slurm_user_name);
+	bg_record->target_name = xstrdup(bg_conf->slurm_user_name);
 
 	return rc;
 }
@@ -435,7 +369,7 @@ extern void *block_agent(void *args)
 					last_bg_update = now;
 				} else if(rc == -1)
 					error("Error with update_block_list");
-				if(bluegene_layout_mode == LAYOUT_DYNAMIC) {
+				if(bg_conf->layout_mode == LAYOUT_DYNAMIC) {
 					if((rc = update_freeing_block_list())
 					   == 1) {
 						last_bg_update = now;
@@ -577,8 +511,8 @@ extern int bg_free_block(bg_record_t *bg_record)
 		if (bg_record->state != NO_VAL
 		    && bg_record->state != RM_PARTITION_FREE 
 		    && bg_record->state != RM_PARTITION_DEALLOCATING) {
+			debug2("bridge_destroy %s", bg_record->bg_block_id);
 #ifdef HAVE_BG_FILES
-			debug2("bridge_destroy %s",bg_record->bg_block_id);
 			
 			rc = bridge_destroy_block(bg_record->bg_block_id);
 			if (rc != STATUS_OK) {
@@ -615,7 +549,7 @@ extern int bg_free_block(bg_record_t *bg_record)
 		slurm_mutex_unlock(&block_state_mutex);			
 		sleep(3);
 	}
-	remove_from_bg_list(bg_booted_block_list, bg_record);
+	remove_from_bg_list(bg_lists->booted, bg_record);
 	slurm_mutex_unlock(&block_state_mutex);			
 		
 	return SLURM_SUCCESS;
@@ -675,9 +609,9 @@ extern void *mult_destroy_block(void *args)
 	int rc;
 #endif
 	slurm_mutex_lock(&freed_cnt_mutex);
-	if ((bg_freeing_list == NULL) 
-	    && ((bg_freeing_list = list_create(destroy_bg_record)) == NULL))
-		fatal("malloc failure in bg_freeing_list");
+	if ((bg_lists->freeing == NULL) 
+	    && ((bg_lists->freeing = list_create(destroy_bg_record)) == NULL))
+		fatal("malloc failure in bg_lists->freeing");
 	slurm_mutex_unlock(&freed_cnt_mutex);
 	
 	/*
@@ -695,15 +629,15 @@ extern void *mult_destroy_block(void *args)
 			continue;
 		}
 		slurm_mutex_lock(&block_state_mutex);
-		remove_from_bg_list(bg_list, bg_record);
-		list_push(bg_freeing_list, bg_record);
+		remove_from_bg_list(bg_lists->main, bg_record);
+		list_push(bg_lists->freeing, bg_record);
 		
 		/* 
 		 * we only are sorting this so when we send it to a
 		 * tool such as smap it will be in a nice order
 		 */
-		sort_bg_record_inc_size(bg_freeing_list);
-		if(remove_from_bg_list(bg_job_block_list, bg_record) 
+		sort_bg_record_inc_size(bg_lists->freeing);
+		if(remove_from_bg_list(bg_lists->job_running, bg_record) 
 		   == SLURM_SUCCESS) {
 			num_unused_cpus += bg_record->cpu_cnt;
 		}
@@ -719,7 +653,7 @@ extern void *mult_destroy_block(void *args)
 		}
 		debug2("done destroying");
 		slurm_mutex_lock(&block_state_mutex);
-		remove_from_bg_list(bg_freeing_list, bg_record);
+		remove_from_bg_list(bg_lists->freeing, bg_record);
 		slurm_mutex_unlock(&block_state_mutex);
 								
 #ifdef HAVE_BG_FILES
@@ -755,9 +689,9 @@ extern void *mult_destroy_block(void *args)
 	slurm_mutex_lock(&freed_cnt_mutex);
 	destroy_cnt--;
 	if(destroy_cnt == 0) {
-		if(bg_freeing_list) {
-			list_destroy(bg_freeing_list);
-			bg_freeing_list = NULL;
+		if(bg_lists->freeing) {
+			list_destroy(bg_lists->freeing);
+			bg_lists->freeing = NULL;
 		}
 		list_destroy(bg_destroy_block_list);
 		bg_destroy_block_list = NULL;
@@ -781,7 +715,7 @@ extern int free_block_list(List delete_list)
 		return SLURM_SUCCESS;
 
 	/* set up which list to push onto */
-	if(bluegene_layout_mode == LAYOUT_DYNAMIC) {
+	if(bg_conf->layout_mode == LAYOUT_DYNAMIC) {
 		block_list = &bg_destroy_block_list;
 		count = &destroy_cnt;
 	} else {
@@ -799,12 +733,12 @@ extern int free_block_list(List delete_list)
 		/* push job onto queue in a FIFO */
 		debug3("adding %s to be freed", found_record->bg_block_id);
 		if(!block_ptr_exist_in_list(*block_list, found_record)) {
+			num_block_to_free++;
 			if (list_push(*block_list, found_record) == NULL)
 				fatal("malloc failure in _block_op/list_push");
 		} else {
 			error("we had block %s already on the freeing list",
 			      found_record->bg_block_id);
-			num_block_to_free--;
 			continue;
 		}
 		/* already running MAX_AGENTS we don't really need more 
@@ -820,7 +754,7 @@ extern int free_block_list(List delete_list)
 			    PTHREAD_CREATE_DETACHED))
 			error("pthread_attr_setdetachstate error %m");
 		retries = 0;
-		if(bluegene_layout_mode == LAYOUT_DYNAMIC) {
+		if(bg_conf->layout_mode == LAYOUT_DYNAMIC) {
 			while (pthread_create(&thread_agent, 
 					      &attr_agent, 
 					      mult_destroy_block,
@@ -869,23 +803,25 @@ extern int read_bg_conf(void)
 	static time_t last_config_update = (time_t) 0;
 	struct stat config_stat;
 	ListIterator itr = NULL;
-	
+	char* bg_conf_file = NULL;
+
 	debug("Reading the bluegene.conf file");
 
 	/* check if config file has changed */
-	if (!bg_conf)
-		bg_conf = _get_bg_conf();
-	if (stat(bg_conf, &config_stat) < 0)
-		fatal("can't stat bluegene.conf file %s: %m", bg_conf);
+	bg_conf_file = _get_bg_conf();
+
+	if (stat(bg_conf_file, &config_stat) < 0)
+		fatal("can't stat bluegene.conf file %s: %m", bg_conf_file);
 	if (last_config_update) {
 		_reopen_bridge_log();
 		if(last_config_update == config_stat.st_mtime)
-			debug("%s unchanged", bg_conf);
+			debug("%s unchanged", bg_conf_file);
 		else {
 			info("Restart slurmctld for %s changes to take effect", 
-			     bg_conf);
+			     bg_conf_file);
 		}
 		last_config_update = config_stat.st_mtime; 
+		xfree(bg_conf_file);
 		return SLURM_SUCCESS;
 	}
 	last_config_update = config_stat.st_mtime; 
@@ -894,338 +830,351 @@ extern int read_bg_conf(void)
 	/* bg_conf defined in bg_node_alloc.h */
 	tbl = s_p_hashtbl_create(bg_conf_file_options);
 	
-	if(s_p_parse_file(tbl, bg_conf) == SLURM_ERROR)
+	if(s_p_parse_file(tbl, bg_conf_file) == SLURM_ERROR)
 		fatal("something wrong with opening/reading bluegene "
 		      "conf file");
+	xfree(bg_conf_file);
 	
-	_set_bg_lists();	
 #ifdef HAVE_BGL
 	if (s_p_get_array((void ***)&image_array, 
 			  &count, "AltBlrtsImage", tbl)) {
 		for (i = 0; i < count; i++) {
-			list_append(bg_blrtsimage_list, image_array[i]);
+			list_append(bg_conf->blrts_list, image_array[i]);
 			image_array[i] = NULL;
 		}
 	}
-	if (!s_p_get_string(&default_blrtsimage, "BlrtsImage", tbl)) {
-		if(!list_count(bg_blrtsimage_list))
+	if (!s_p_get_string(&bg_conf->default_blrtsimage, "BlrtsImage", tbl)) {
+		if(!list_count(bg_conf->blrts_list))
 			fatal("BlrtsImage not configured "
 			      "in bluegene.conf");
-		itr = list_iterator_create(bg_blrtsimage_list);
+		itr = list_iterator_create(bg_conf->blrts_list);
 		image = list_next(itr);
 		image->def = true;
 		list_iterator_destroy(itr);
-		default_blrtsimage = xstrdup(image->name);
+		bg_conf->default_blrtsimage = xstrdup(image->name);
 		info("Warning: using %s as the default BlrtsImage.  "
 		     "If this isn't correct please set BlrtsImage",
-		     default_blrtsimage); 
+		     bg_conf->default_blrtsimage); 
 	} else {
-		debug3("default BlrtsImage %s", default_blrtsimage);
+		debug3("default BlrtsImage %s", bg_conf->default_blrtsimage);
 		image = xmalloc(sizeof(image_t));
-		image->name = xstrdup(default_blrtsimage);
+		image->name = xstrdup(bg_conf->default_blrtsimage);
 		image->def = true;
 		image->groups = NULL;
 		/* we want it to be first */
-		list_push(bg_blrtsimage_list, image);
+		list_push(bg_conf->blrts_list, image);
 	}
 		
 	if (s_p_get_array((void ***)&image_array, 
 			  &count, "AltLinuxImage", tbl)) {
 		for (i = 0; i < count; i++) {
-			list_append(bg_linuximage_list, image_array[i]);
+			list_append(bg_conf->linux_list, image_array[i]);
 			image_array[i] = NULL;
 		}
 	}
-	if (!s_p_get_string(&default_linuximage, "LinuxImage", tbl)) {
-		if(!list_count(bg_linuximage_list))
+	if (!s_p_get_string(&bg_conf->default_linuximage, "LinuxImage", tbl)) {
+		if(!list_count(bg_conf->linux_list))
 			fatal("LinuxImage not configured "
 			      "in bluegene.conf");
-		itr = list_iterator_create(bg_linuximage_list);
+		itr = list_iterator_create(bg_conf->linux_list);
 		image = list_next(itr);
 		image->def = true;
 		list_iterator_destroy(itr);
-		default_linuximage = xstrdup(image->name);
+		bg_conf->default_linuximage = xstrdup(image->name);
 		info("Warning: using %s as the default LinuxImage.  "
 		     "If this isn't correct please set LinuxImage",
-		     default_linuximage); 
+		     bg_conf->default_linuximage); 
 	} else {
-		debug3("default LinuxImage %s", default_linuximage);
+		debug3("default LinuxImage %s", bg_conf->default_linuximage);
 		image = xmalloc(sizeof(image_t));
-		image->name = xstrdup(default_linuximage);
+		image->name = xstrdup(bg_conf->default_linuximage);
 		image->def = true;
 		image->groups = NULL;
 		/* we want it to be first */
-		list_push(bg_linuximage_list, image);		
+		list_push(bg_conf->linux_list, image);		
 	}
 
 	if (s_p_get_array((void ***)&image_array, 
 			  &count, "AltRamDiskImage", tbl)) {
 		for (i = 0; i < count; i++) {
-			list_append(bg_ramdiskimage_list, image_array[i]);
+			list_append(bg_conf->ramdisk_list, image_array[i]);
 			image_array[i] = NULL;
 		}
 	}
-	if (!s_p_get_string(&default_ramdiskimage,
+	if (!s_p_get_string(&bg_conf->default_ramdiskimage,
 			    "RamDiskImage", tbl)) {
-		if(!list_count(bg_ramdiskimage_list))
+		if(!list_count(bg_conf->ramdisk_list))
 			fatal("RamDiskImage not configured "
 			      "in bluegene.conf");
-		itr = list_iterator_create(bg_ramdiskimage_list);
+		itr = list_iterator_create(bg_conf->ramdisk_list);
 		image = list_next(itr);
 		image->def = true;
 		list_iterator_destroy(itr);
-		default_ramdiskimage = xstrdup(image->name);
+		bg_conf->default_ramdiskimage = xstrdup(image->name);
 		info("Warning: using %s as the default RamDiskImage.  "
 		     "If this isn't correct please set RamDiskImage",
-		     default_ramdiskimage); 
+		     bg_conf->default_ramdiskimage); 
 	} else {
-		debug3("default RamDiskImage %s", default_ramdiskimage);
+		debug3("default RamDiskImage %s",
+		       bg_conf->default_ramdiskimage);
 		image = xmalloc(sizeof(image_t));
-		image->name = xstrdup(default_ramdiskimage);
+		image->name = xstrdup(bg_conf->default_ramdiskimage);
 		image->def = true;
 		image->groups = NULL;
 		/* we want it to be first */
-		list_push(bg_ramdiskimage_list, image);		
+		list_push(bg_conf->ramdisk_list, image);		
 	}
 #else
 
 	if (s_p_get_array((void ***)&image_array, 
 			  &count, "AltCnloadImage", tbl)) {
 		for (i = 0; i < count; i++) {
-			list_append(bg_linuximage_list, image_array[i]);
+			list_append(bg_conf->linux_list, image_array[i]);
 			image_array[i] = NULL;
 		}
 	}
-	if (!s_p_get_string(&default_linuximage, "CnloadImage", tbl)) {
-		if(!list_count(bg_linuximage_list))
+	if (!s_p_get_string(&bg_conf->default_linuximage, "CnloadImage", tbl)) {
+		if(!list_count(bg_conf->linux_list))
 			fatal("CnloadImage not configured "
 			      "in bluegene.conf");
-		itr = list_iterator_create(bg_linuximage_list);
+		itr = list_iterator_create(bg_conf->linux_list);
 		image = list_next(itr);
 		image->def = true;
 		list_iterator_destroy(itr);
-		default_linuximage = xstrdup(image->name);
+		bg_conf->default_linuximage = xstrdup(image->name);
 		info("Warning: using %s as the default CnloadImage.  "
 		     "If this isn't correct please set CnloadImage",
-		     default_linuximage); 
+		     bg_conf->default_linuximage); 
 	} else {
-		debug3("default CnloadImage %s", default_linuximage);
+		debug3("default CnloadImage %s", bg_conf->default_linuximage);
 		image = xmalloc(sizeof(image_t));
-		image->name = xstrdup(default_linuximage);
+		image->name = xstrdup(bg_conf->default_linuximage);
 		image->def = true;
 		image->groups = NULL;
 		/* we want it to be first */
-		list_push(bg_linuximage_list, image);		
+		list_push(bg_conf->linux_list, image);		
 	}
 
 	if (s_p_get_array((void ***)&image_array, 
 			  &count, "AltIoloadImage", tbl)) {
 		for (i = 0; i < count; i++) {
-			list_append(bg_ramdiskimage_list, image_array[i]);
+			list_append(bg_conf->ramdisk_list, image_array[i]);
 			image_array[i] = NULL;
 		}
 	}
-	if (!s_p_get_string(&default_ramdiskimage,
+	if (!s_p_get_string(&bg_conf->default_ramdiskimage,
 			    "IoloadImage", tbl)) {
-		if(!list_count(bg_ramdiskimage_list))
+		if(!list_count(bg_conf->ramdisk_list))
 			fatal("IoloadImage not configured "
 			      "in bluegene.conf");
-		itr = list_iterator_create(bg_ramdiskimage_list);
+		itr = list_iterator_create(bg_conf->ramdisk_list);
 		image = list_next(itr);
 		image->def = true;
 		list_iterator_destroy(itr);
-		default_ramdiskimage = xstrdup(image->name);
+		bg_conf->default_ramdiskimage = xstrdup(image->name);
 		info("Warning: using %s as the default IoloadImage.  "
 		     "If this isn't correct please set IoloadImage",
-		     default_ramdiskimage); 
+		     bg_conf->default_ramdiskimage); 
 	} else {
-		debug3("default IoloadImage %s", default_ramdiskimage);
+		debug3("default IoloadImage %s", bg_conf->default_ramdiskimage);
 		image = xmalloc(sizeof(image_t));
-		image->name = xstrdup(default_ramdiskimage);
+		image->name = xstrdup(bg_conf->default_ramdiskimage);
 		image->def = true;
 		image->groups = NULL;
 		/* we want it to be first */
-		list_push(bg_ramdiskimage_list, image);		
+		list_push(bg_conf->ramdisk_list, image);		
 	}
 
 #endif
 	if (s_p_get_array((void ***)&image_array, 
 			  &count, "AltMloaderImage", tbl)) {
 		for (i = 0; i < count; i++) {
-			list_append(bg_mloaderimage_list, image_array[i]);
+			list_append(bg_conf->mloader_list, image_array[i]);
 			image_array[i] = NULL;
 		}
 	}
-	if (!s_p_get_string(&default_mloaderimage,
+	if (!s_p_get_string(&bg_conf->default_mloaderimage,
 			    "MloaderImage", tbl)) {
-		if(!list_count(bg_mloaderimage_list))
+		if(!list_count(bg_conf->mloader_list))
 			fatal("MloaderImage not configured "
 			      "in bluegene.conf");
-		itr = list_iterator_create(bg_mloaderimage_list);
+		itr = list_iterator_create(bg_conf->mloader_list);
 		image = list_next(itr);
 		image->def = true;
 		list_iterator_destroy(itr);
-		default_mloaderimage = xstrdup(image->name);
+		bg_conf->default_mloaderimage = xstrdup(image->name);
 		info("Warning: using %s as the default MloaderImage.  "
 		     "If this isn't correct please set MloaderImage",
-		     default_mloaderimage); 
+		     bg_conf->default_mloaderimage); 
 	} else {
-		debug3("default MloaderImage %s", default_mloaderimage);
+		debug3("default MloaderImage %s",
+		       bg_conf->default_mloaderimage);
 		image = xmalloc(sizeof(image_t));
-		image->name = xstrdup(default_mloaderimage);
+		image->name = xstrdup(bg_conf->default_mloaderimage);
 		image->def = true;
 		image->groups = NULL;
 		/* we want it to be first */
-		list_push(bg_mloaderimage_list, image);		
+		list_push(bg_conf->mloader_list, image);		
 	}
 
 	if (!s_p_get_uint16(
-		    &bluegene_bp_node_cnt, "BasePartitionNodeCnt", tbl)) {
+		    &bg_conf->bp_node_cnt, "BasePartitionNodeCnt", tbl)) {
 		error("BasePartitionNodeCnt not configured in bluegene.conf "
 		      "defaulting to 512 as BasePartitionNodeCnt");
-		bluegene_bp_node_cnt = 512;
-		bluegene_quarter_node_cnt = 128;
+		bg_conf->bp_node_cnt = 512;
+		bg_conf->quarter_node_cnt = 128;
 	} else {
-		if(bluegene_bp_node_cnt<=0)
+		if(bg_conf->bp_node_cnt <= 0)
 			fatal("You should have more than 0 nodes "
 			      "per base partition");
 
-		bluegene_quarter_node_cnt = bluegene_bp_node_cnt/4;
+		bg_conf->quarter_node_cnt = bg_conf->bp_node_cnt/4;
 	}
-
-	/* select_p_node_init needs to be called before this to set
-	   this up correctly
-	*/
-	bluegene_proc_ratio = procs_per_node/bluegene_bp_node_cnt;
-	if(!bluegene_proc_ratio)
+	/* bg_conf->procs_per_bp should had already been set from the
+	 * node_init */
+	if(bg_conf->procs_per_bp < bg_conf->bp_node_cnt) {
+		fatal("For some reason we have only %u procs per bp, but "
+		      "have %u cnodes per bp.  You need at least the same "
+		      "number of procs as you have cnodes per bp.  "
+		      "Check the NodeName Procs= "
+		      "definition in the slurm.conf.", 
+		      bg_conf->procs_per_bp, bg_conf->bp_node_cnt); 
+	}
+	
+	bg_conf->proc_ratio = bg_conf->procs_per_bp/bg_conf->bp_node_cnt;
+	if(!bg_conf->proc_ratio)
 		fatal("We appear to have less than 1 proc on a cnode.  "
 		      "You specified %u for BasePartitionNodeCnt "
 		      "in the blugene.conf and %u procs "
 		      "for each node in the slurm.conf",
-		      bluegene_bp_node_cnt, procs_per_node);
+		      bg_conf->bp_node_cnt, bg_conf->procs_per_bp);
+	num_unused_cpus = 
+		DIM_SIZE[X] * DIM_SIZE[Y] * DIM_SIZE[Z] 
+		* bg_conf->procs_per_bp;
 
 	if (!s_p_get_uint16(
-		    &bluegene_nodecard_node_cnt, "NodeCardNodeCnt", tbl)) {
+		    &bg_conf->nodecard_node_cnt, "NodeCardNodeCnt", tbl)) {
 		error("NodeCardNodeCnt not configured in bluegene.conf "
 		      "defaulting to 32 as NodeCardNodeCnt");
-		bluegene_nodecard_node_cnt = 32;
+		bg_conf->nodecard_node_cnt = 32;
 	}
 	
-	if(bluegene_nodecard_node_cnt<=0)
+	if(bg_conf->nodecard_node_cnt<=0)
 		fatal("You should have more than 0 nodes per nodecard");
 
-	bluegene_bp_nodecard_cnt = 
-		bluegene_bp_node_cnt / bluegene_nodecard_node_cnt;
+	bg_conf->bp_nodecard_cnt = 
+		bg_conf->bp_node_cnt / bg_conf->nodecard_node_cnt;
 
-	if (!s_p_get_uint16(&bluegene_numpsets, "Numpsets", tbl))
+	if (!s_p_get_uint16(&bg_conf->numpsets, "Numpsets", tbl))
 		fatal("Warning: Numpsets not configured in bluegene.conf");
 
-	if(bluegene_numpsets) {
+	if(bg_conf->numpsets) {
 		bitstr_t *tmp_bitmap = NULL;
 		int small_size = 1;
 
 		/* THIS IS A HACK TO MAKE A 1 NODECARD SYSTEM WORK */
-		if(bluegene_bp_node_cnt == bluegene_nodecard_node_cnt) {
-			bluegene_quarter_ionode_cnt = 2;
-			bluegene_nodecard_ionode_cnt = 2;
+		if(bg_conf->bp_node_cnt == bg_conf->nodecard_node_cnt) {
+			bg_conf->quarter_ionode_cnt = 2;
+			bg_conf->nodecard_ionode_cnt = 2;
 		} else {
-			bluegene_quarter_ionode_cnt = bluegene_numpsets/4;
-			bluegene_nodecard_ionode_cnt =
-				bluegene_quarter_ionode_cnt/4;
+			bg_conf->quarter_ionode_cnt = bg_conf->numpsets/4;
+			bg_conf->nodecard_ionode_cnt =
+				bg_conf->quarter_ionode_cnt/4;
 		}
 			
 		/* How many nodecards per ionode */
-		bluegene_nc_ratio = 
-			((double)bluegene_bp_node_cnt 
-			 / (double)bluegene_nodecard_node_cnt) 
-			/ (double)bluegene_numpsets;
+		bg_conf->nc_ratio = 
+			((double)bg_conf->bp_node_cnt 
+			 / (double)bg_conf->nodecard_node_cnt) 
+			/ (double)bg_conf->numpsets;
 		/* How many ionodes per nodecard */
-		bluegene_io_ratio = 
-			(double)bluegene_numpsets /
-			((double)bluegene_bp_node_cnt 
-			 / (double)bluegene_nodecard_node_cnt);
-		//info("got %f %f", bluegene_nc_ratio, bluegene_io_ratio);
+		bg_conf->io_ratio = 
+			(double)bg_conf->numpsets /
+			((double)bg_conf->bp_node_cnt 
+			 / (double)bg_conf->nodecard_node_cnt);
+		//info("got %f %f", bg_conf->nc_ratio, bg_conf->io_ratio);
 		/* figure out the smallest block we can have on the
 		   system */
 #ifdef HAVE_BGL
-		if(bluegene_io_ratio >= 2)
-			bluegene_smallest_block=32;
+		if(bg_conf->io_ratio >= 1)
+			bg_conf->smallest_block=32;
 		else
-			bluegene_smallest_block=128;
+			bg_conf->smallest_block=128;
 #else
-		if(bluegene_io_ratio >= 2)
-			bluegene_smallest_block=16;
-		else if(bluegene_io_ratio == 1)
-			bluegene_smallest_block=32;
-		else if(bluegene_io_ratio == .5)
-			bluegene_smallest_block=64;
-		else if(bluegene_io_ratio == .25)
-			bluegene_smallest_block=128;
-		else if(bluegene_io_ratio == .125)
-			bluegene_smallest_block=256;
+		if(bg_conf->io_ratio >= 2)
+			bg_conf->smallest_block=16;
+		else if(bg_conf->io_ratio == 1)
+			bg_conf->smallest_block=32;
+		else if(bg_conf->io_ratio == .5)
+			bg_conf->smallest_block=64;
+		else if(bg_conf->io_ratio == .25)
+			bg_conf->smallest_block=128;
+		else if(bg_conf->io_ratio == .125)
+			bg_conf->smallest_block=256;
 		else {
 			error("unknown ioratio %f.  Can't figure out "
 			      "smallest block size, setting it to midplane");
-			bluegene_smallest_block=512;
+			bg_conf->smallest_block=512;
 		}
 #endif
 		debug("Smallest block possible on this system is %u",
-		      bluegene_smallest_block);
+		      bg_conf->smallest_block);
 		/* below we are creating all the possible bitmaps for
 		 * each size of small block
 		 */
-		if((int)bluegene_nodecard_ionode_cnt < 1) {
-			bluegene_nodecard_ionode_cnt = 0;
+		if((int)bg_conf->nodecard_ionode_cnt < 1) {
+			bg_conf->nodecard_ionode_cnt = 0;
 		} else {
-			bg_valid_small32 = list_create(_destroy_bitmap);
-			if((small_size = bluegene_nodecard_ionode_cnt))
+			bg_lists->valid_small32 = list_create(_destroy_bitmap);
+			if((small_size = bg_conf->nodecard_ionode_cnt))
 				small_size--;
 			i = 0;
-			while(i<bluegene_numpsets) {
-				tmp_bitmap = bit_alloc(bluegene_numpsets);
+			while(i<bg_conf->numpsets) {
+				tmp_bitmap = bit_alloc(bg_conf->numpsets);
 				bit_nset(tmp_bitmap, i, i+small_size);
 				i += small_size+1;
-				list_append(bg_valid_small32, tmp_bitmap);
+				list_append(bg_lists->valid_small32,
+					    tmp_bitmap);
 			}
 		}
 		/* If we only have 1 nodecard just jump to the end
 		   since this will never need to happen below.
 		   Pretty much a hack to avoid seg fault;). */
-		if(bluegene_bp_node_cnt == bluegene_nodecard_node_cnt) 
+		if(bg_conf->bp_node_cnt == bg_conf->nodecard_node_cnt) 
 			goto no_calc;
 
-		bg_valid_small128 = list_create(_destroy_bitmap);
-		if((small_size = bluegene_quarter_ionode_cnt))
+		bg_lists->valid_small128 = list_create(_destroy_bitmap);
+		if((small_size = bg_conf->quarter_ionode_cnt))
 			small_size--;
 		i = 0;
-		while(i<bluegene_numpsets) {
-			tmp_bitmap = bit_alloc(bluegene_numpsets);
+		while(i<bg_conf->numpsets) {
+			tmp_bitmap = bit_alloc(bg_conf->numpsets);
 			bit_nset(tmp_bitmap, i, i+small_size);
 			i += small_size+1;
-			list_append(bg_valid_small128, tmp_bitmap);
+			list_append(bg_lists->valid_small128, tmp_bitmap);
 		}
 
 #ifndef HAVE_BGL
-		bg_valid_small64 = list_create(_destroy_bitmap);
-		if((small_size = bluegene_nodecard_ionode_cnt * 2))
+		bg_lists->valid_small64 = list_create(_destroy_bitmap);
+		if((small_size = bg_conf->nodecard_ionode_cnt * 2))
 			small_size--;
 		i = 0;
-		while(i<bluegene_numpsets) {
-			tmp_bitmap = bit_alloc(bluegene_numpsets);
+		while(i<bg_conf->numpsets) {
+			tmp_bitmap = bit_alloc(bg_conf->numpsets);
 			bit_nset(tmp_bitmap, i, i+small_size);
 			i += small_size+1;
-			list_append(bg_valid_small64, tmp_bitmap);
+			list_append(bg_lists->valid_small64, tmp_bitmap);
 		}
 
-		bg_valid_small256 = list_create(_destroy_bitmap);
-		if((small_size = bluegene_quarter_ionode_cnt * 2))
+		bg_lists->valid_small256 = list_create(_destroy_bitmap);
+		if((small_size = bg_conf->quarter_ionode_cnt * 2))
 			small_size--;
 		i = 0;
-		while(i<bluegene_numpsets) {
-			tmp_bitmap = bit_alloc(bluegene_numpsets);
+		while(i<bg_conf->numpsets) {
+			tmp_bitmap = bit_alloc(bg_conf->numpsets);
 			bit_nset(tmp_bitmap, i, i+small_size);
 			i += small_size+1;
-			list_append(bg_valid_small256, tmp_bitmap);
+			list_append(bg_lists->valid_small256, tmp_bitmap);
 		}
 #endif			
 	} else {
@@ -1234,10 +1183,11 @@ extern int read_bg_conf(void)
 
 no_calc:
 
-	if (!s_p_get_uint16(&bridge_api_verb, "BridgeAPIVerbose", tbl))
+	if (!s_p_get_uint16(&bg_conf->bridge_api_verb, "BridgeAPIVerbose", tbl))
 		info("Warning: BridgeAPIVerbose not configured "
 		     "in bluegene.conf");
-	if (!s_p_get_string(&bridge_api_file, "BridgeAPILogFile", tbl)) 
+	if (!s_p_get_string(&bg_conf->bridge_api_file,
+			    "BridgeAPILogFile", tbl)) 
 		info("BridgeAPILogFile not configured in bluegene.conf");
 	else
 		_reopen_bridge_log();
@@ -1251,21 +1201,21 @@ no_calc:
 			ba_deny_pass |= PASS_DENY_Z;
 		if(!strcasecmp(layout, "ALL")) 
 			ba_deny_pass |= PASS_DENY_ALL;
-		
+		bg_conf->deny_pass = ba_deny_pass;
 		xfree(layout);
 	}
 
 	if (!s_p_get_string(&layout, "LayoutMode", tbl)) {
 		info("Warning: LayoutMode was not specified in bluegene.conf "
 		     "defaulting to STATIC partitioning");
-		bluegene_layout_mode = LAYOUT_STATIC;
+		bg_conf->layout_mode = LAYOUT_STATIC;
 	} else {
 		if(!strcasecmp(layout,"STATIC")) 
-			bluegene_layout_mode = LAYOUT_STATIC;
+			bg_conf->layout_mode = LAYOUT_STATIC;
 		else if(!strcasecmp(layout,"OVERLAP")) 
-			bluegene_layout_mode = LAYOUT_OVERLAP;
+			bg_conf->layout_mode = LAYOUT_OVERLAP;
 		else if(!strcasecmp(layout,"DYNAMIC")) 
-			bluegene_layout_mode = LAYOUT_DYNAMIC;
+			bg_conf->layout_mode = LAYOUT_DYNAMIC;
 		else {
 			fatal("I don't understand this LayoutMode = %s", 
 			      layout);
@@ -1274,7 +1224,7 @@ no_calc:
 	}
 
 	/* add blocks defined in file */
-	if(bluegene_layout_mode != LAYOUT_DYNAMIC) {
+	if(bg_conf->layout_mode != LAYOUT_DYNAMIC) {
 		if (!s_p_get_array((void ***)&blockreq_array, 
 				   &count, "BPs", tbl)) {
 			info("WARNING: no blocks defined in bluegene.conf, "
@@ -1283,7 +1233,8 @@ no_calc:
 		}
 		
 		for (i = 0; i < count; i++) {
-			add_bg_record(bg_list, NULL, blockreq_array[i], 0, 0);
+			add_bg_record(bg_lists->main, NULL,
+				      blockreq_array[i], 0, 0);
 		}
 	}
 	s_p_hashtbl_destroy(tbl);
@@ -1294,7 +1245,8 @@ no_calc:
 extern int validate_current_blocks(char *dir)
 {
 	/* found bg blocks already on system */
-	List bg_found_block_list = NULL;
+	List curr_block_list = NULL;
+	List found_block_list = NULL;
 	static time_t last_config_update = (time_t) 0;
 	ListIterator itr = NULL;
 	bg_record_t *bg_record = NULL;
@@ -1304,20 +1256,22 @@ extern int validate_current_blocks(char *dir)
 		return SLURM_SUCCESS;
 
 	last_config_update = time(NULL);
-	bg_found_block_list = list_create(NULL);
+	curr_block_list = list_create(destroy_bg_record);
+	found_block_list = list_create(NULL);
 //#if 0	
 	/* Check to see if the configs we have are correct */
-	if (_validate_config_nodes(&bg_found_block_list, dir) == SLURM_ERROR) { 
-		_delete_old_blocks(bg_found_block_list);
+	if (_validate_config_nodes(curr_block_list, found_block_list, dir)
+	    == SLURM_ERROR) { 
+		_delete_old_blocks(curr_block_list, found_block_list);
 	}
 //#endif
 	/* looking for blocks only I created */
-	if(bluegene_layout_mode == LAYOUT_DYNAMIC) {
+	if(bg_conf->layout_mode == LAYOUT_DYNAMIC) {
 		init_wires();
 		info("No blocks created until jobs are submitted");
 	} else {
-		if (create_defined_blocks(bluegene_layout_mode,
-					  bg_found_block_list) 
+		if (create_defined_blocks(bg_conf->layout_mode,
+					  found_block_list) 
 		    == SLURM_ERROR) {
 			/* error in creating the static blocks, so
 			 * blocks referenced by submitted jobs won't
@@ -1328,81 +1282,150 @@ extern int validate_current_blocks(char *dir)
 		}
 	} 
 	
-	/* ok now since bg_list has been made we now can put blocks in
+	/* ok now since bg_lists->main has been made we now can put blocks in
 	   an error state this needs to be done outside of a lock
 	   it doesn't matter much in the first place though since
 	   no threads are started before this function. */
-	itr = list_iterator_create(bg_list);
+	itr = list_iterator_create(bg_lists->main);
 	while((bg_record = list_next(itr))) {
 		if(bg_record->state == RM_PARTITION_ERROR) 
 			put_block_in_error_state(bg_record, BLOCK_ERROR_STATE);
 	}
 	list_iterator_destroy(itr);
 
-	slurm_mutex_lock(&block_state_mutex);
-	list_destroy(bg_curr_block_list);
-	bg_curr_block_list = NULL;
-	if(bg_found_block_list) {
-		list_destroy(bg_found_block_list);
-		bg_found_block_list = NULL;
-	}
+	list_destroy(curr_block_list);
+	curr_block_list = NULL;
+	list_destroy(found_block_list);
+	found_block_list = NULL;
 
+	slurm_mutex_lock(&block_state_mutex);
 	last_bg_update = time(NULL);
 	blocks_are_created = 1;
-	sort_bg_record_inc_size(bg_list);
+	sort_bg_record_inc_size(bg_lists->main);
 	slurm_mutex_unlock(&block_state_mutex);
 	debug("Blocks have finished being created.");
 	return SLURM_SUCCESS;
 }
 
+static void _destroy_bg_config(bg_config_t *bg_conf)
+{
+	if(bg_conf) {
+#ifdef HAVE_BGL
+		if(bg_conf->blrts_list) {
+			list_destroy(bg_conf->blrts_list);
+			bg_conf->blrts_list = NULL;
+		}
+		xfree(bg_conf->default_blrtsimage);
+#endif	
+		xfree(bg_conf->bridge_api_file);
+		xfree(bg_conf->default_linuximage);
+		xfree(bg_conf->default_mloaderimage);
+		xfree(bg_conf->default_ramdiskimage);
+		if(bg_conf->linux_list) {
+			list_destroy(bg_conf->linux_list);
+			bg_conf->linux_list = NULL;
+		}
+	
+		if(bg_conf->mloader_list) {
+			list_destroy(bg_conf->mloader_list);
+			bg_conf->mloader_list = NULL;
+		}
+
+		if(bg_conf->ramdisk_list) {
+			list_destroy(bg_conf->ramdisk_list);
+			bg_conf->ramdisk_list = NULL;
+		}
+		xfree(bg_conf->slurm_user_name);
+		xfree(bg_conf->slurm_node_prefix);
+		xfree(bg_conf);
+	}
+}
+
+static void _destroy_bg_lists(bg_lists_t *bg_lists)
+{
+	if(bg_lists) {
+		if (bg_lists->booted) {
+			list_destroy(bg_lists->booted);
+			bg_lists->booted = NULL;
+		}
+
+		if (bg_lists->freeing) {
+			list_destroy(bg_lists->freeing);
+			bg_lists->freeing = NULL;
+		}	
+
+		if (bg_lists->job_running) {
+			list_destroy(bg_lists->job_running);
+			bg_lists->job_running = NULL;
+			num_unused_cpus = 0;
+		}
+
+		if (bg_lists->main) {
+			list_destroy(bg_lists->main);
+			bg_lists->main = NULL;
+		}	
+
+		if(bg_lists->valid_small32) {
+			list_destroy(bg_lists->valid_small32);
+			bg_lists->valid_small32 = NULL;
+		}
+		if(bg_lists->valid_small64) {
+			list_destroy(bg_lists->valid_small64);
+			bg_lists->valid_small64 = NULL;
+		}
+		if(bg_lists->valid_small128) {
+			list_destroy(bg_lists->valid_small128);
+			bg_lists->valid_small128 = NULL;
+		}
+		if(bg_lists->valid_small256) {
+			list_destroy(bg_lists->valid_small256);
+			bg_lists->valid_small256 = NULL;
+		}
+
+		xfree(bg_lists);
+	}
+}
 
 static void _set_bg_lists()
 {
+	if(!bg_lists)
+		bg_lists = xmalloc(sizeof(bg_lists_t));
+
 	slurm_mutex_lock(&block_state_mutex);
-	if(bg_booted_block_list) 
-		list_destroy(bg_booted_block_list);
-	bg_booted_block_list = list_create(NULL);
-	if(bg_job_block_list) 
-		list_destroy(bg_job_block_list);
-	bg_job_block_list = list_create(NULL);	
-	num_unused_cpus = 
-		DIM_SIZE[X] * DIM_SIZE[Y] * DIM_SIZE[Z] * procs_per_node;
-	if(bg_curr_block_list)
-		list_destroy(bg_curr_block_list);	
-	bg_curr_block_list = list_create(destroy_bg_record);
-	
-	if(bg_list) 
-		list_destroy(bg_list);
-	bg_list = list_create(destroy_bg_record);
+
+	if(bg_lists->booted) 
+		list_destroy(bg_lists->booted);
+	bg_lists->booted = list_create(NULL);
+
+	if(bg_lists->job_running) 
+		list_destroy(bg_lists->job_running);
+	bg_lists->job_running = list_create(NULL);	
+
+	if(bg_lists->main) 
+		list_destroy(bg_lists->main);
+
+	bg_lists->main = list_create(destroy_bg_record);
 
 	slurm_mutex_unlock(&block_state_mutex);	
 	
-#ifdef HAVE_BGL
-	if(bg_blrtsimage_list)
-		list_destroy(bg_blrtsimage_list);
-	bg_blrtsimage_list = list_create(destroy_image);
-#endif
-	if(bg_linuximage_list)
-		list_destroy(bg_linuximage_list);
-	bg_linuximage_list = list_create(destroy_image);
-	if(bg_mloaderimage_list)
-		list_destroy(bg_mloaderimage_list);
-	bg_mloaderimage_list = list_create(destroy_image);
-	if(bg_ramdiskimage_list)
-		list_destroy(bg_ramdiskimage_list);
-	bg_ramdiskimage_list = list_create(destroy_image);	
 }
 
 /*
  * _validate_config_nodes - Match slurm configuration information with
  *                          current BG block configuration.
- * IN/OUT bg_found_block_list - if NULL is created and then any blocks
- *                              found on the system are then pushed on.
+ * IN/OUT curr_block_list -  List of blocks already existing on the system.
+ * IN/OUT found_block_list - List of blocks found on the system
+ *                              that are listed in the bluegene.conf.
+ * NOTE: Both of the lists above should be created with list_create(NULL)
+ *       since the bg_lists->main will contain the complete list of pointers
+ *       and be destroyed with it.
+ *
  * RET - SLURM_SUCCESS if they match, else an error 
- * code. Writes bg_block_id into bg_list records.
+ * code. Writes bg_block_id into bg_lists->main records.
  */
 
-static int _validate_config_nodes(List *bg_found_block_list, char *dir)
+static int _validate_config_nodes(List curr_block_list, 
+				  List found_block_list, char *dir)
 {
 	int rc = SLURM_ERROR;
 	bg_record_t* bg_record = NULL;	
@@ -1412,18 +1435,21 @@ static int _validate_config_nodes(List *bg_found_block_list, char *dir)
 	ListIterator itr_curr;
 	char tmp_char[256];
 
+	xassert(curr_block_list);
+	xassert(found_block_list);
+
 #ifdef HAVE_BG_FILES
-	/* read current bg block info into bg_curr_block_list This
+	/* read current bg block info into curr_block_list This
 	 * happens in the state load before this in emulation mode */
-	if (read_bg_blocks() == SLURM_ERROR)
+	if (read_bg_blocks(curr_block_list) == SLURM_ERROR)
 		return SLURM_ERROR;
 	/* since we only care about error states here we don't care
-	   about the return code this must be done after the bg_list
+	   about the return code this must be done after the bg_lists->main
 	   is created */
-	load_state_file(dir);
+	load_state_file(curr_block_list, dir);
 #else
 	/* read in state from last run. */
-	if ((rc = load_state_file(dir)) != SLURM_SUCCESS)
+	if ((rc = load_state_file(curr_block_list, dir)) != SLURM_SUCCESS)
 		return rc;
 	/* This needs to be reset to SLURM_ERROR or it will never we
 	   that way again ;). */
@@ -1432,15 +1458,9 @@ static int _validate_config_nodes(List *bg_found_block_list, char *dir)
 	if(!bg_recover) 
 		return SLURM_ERROR;
 
-	if(!bg_curr_block_list)
-		return SLURM_ERROR;
-	
-	if(!*bg_found_block_list)
-		(*bg_found_block_list) = list_create(NULL);
-
-	itr_curr = list_iterator_create(bg_curr_block_list);
-	itr_conf = list_iterator_create(bg_list);
-	while ((bg_record = (bg_record_t*) list_next(itr_conf))) {
+	itr_curr = list_iterator_create(curr_block_list);
+	itr_conf = list_iterator_create(bg_lists->main);
+	while ((bg_record = list_next(itr_conf))) {
 		list_iterator_reset(itr_curr);
 		while ((init_bg_record = list_next(itr_curr))) {
 			if (strcasecmp(bg_record->nodes, init_bg_record->nodes))
@@ -1493,7 +1513,7 @@ static int _validate_config_nodes(List *bg_found_block_list, char *dir)
 			if(bg_record->full_block)
 				full_created = 1;
 
-			list_push(*bg_found_block_list, bg_record);
+			list_push(found_block_list, bg_record);
 			format_node_name(bg_record, tmp_char,
 					 sizeof(tmp_char));
 			info("Existing: BlockID:%s Nodes:%s Conn:%s",
@@ -1502,12 +1522,12 @@ static int _validate_config_nodes(List *bg_found_block_list, char *dir)
 			     convert_conn_type(bg_record->conn_type));
 			if(((bg_record->state == RM_PARTITION_READY)
 			    || (bg_record->state == RM_PARTITION_CONFIGURING))
-			   && !block_ptr_exist_in_list(bg_booted_block_list, 
+			   && !block_ptr_exist_in_list(bg_lists->booted, 
 						       bg_record))
-				list_push(bg_booted_block_list, bg_record);
+				list_push(bg_lists->booted, bg_record);
 		}
 	}		
-	if(bluegene_layout_mode == LAYOUT_DYNAMIC)
+	if(bg_conf->layout_mode == LAYOUT_DYNAMIC)
 		goto finished;
 
 	if(!full_created) {
@@ -1516,8 +1536,8 @@ static int _validate_config_nodes(List *bg_found_block_list, char *dir)
 			if(init_bg_record->full_block) {
 				list_remove(itr_curr);
 				bg_record = init_bg_record;
-				list_append(bg_list, bg_record);
-				list_push(*bg_found_block_list, bg_record);
+				list_append(bg_lists->main, bg_record);
+				list_push(found_block_list, bg_record);
 				format_node_name(bg_record, tmp_char,
 						 sizeof(tmp_char));
 				info("Existing: BlockID:%s Nodes:%s Conn:%s",
@@ -1528,8 +1548,8 @@ static int _validate_config_nodes(List *bg_found_block_list, char *dir)
 				    || (bg_record->state 
 					== RM_PARTITION_CONFIGURING))
 				   && !block_ptr_exist_in_list(
-					   bg_booted_block_list, bg_record))
-					list_push(bg_booted_block_list,
+					   bg_lists->booted, bg_record))
+					list_push(bg_lists->booted,
 						  bg_record);
 				break;
 			}
@@ -1539,77 +1559,50 @@ static int _validate_config_nodes(List *bg_found_block_list, char *dir)
 finished:
 	list_iterator_destroy(itr_conf);
 	list_iterator_destroy(itr_curr);
-	if(!list_count(bg_curr_block_list))
+	if(!list_count(curr_block_list))
 		rc = SLURM_SUCCESS;
 	return rc;
 }
 
-static int _delete_old_blocks(List bg_found_block_list)
+static int _delete_old_blocks(List curr_block_list, List found_block_list)
 {
 	ListIterator itr_curr, itr_found;
 	bg_record_t *found_record = NULL, *init_record = NULL;
 	pthread_attr_t attr_agent;
 	pthread_t thread_agent;
 	int retries;
-	List bg_destroy_list = list_create(NULL);
+	List destroy_list = list_create(NULL);
+
+	xassert(curr_block_list);
+	xassert(found_block_list);
 
 	info("removing unspecified blocks");
 	if(!bg_recover) {
-		if(bg_curr_block_list) {
-			itr_curr = list_iterator_create(bg_curr_block_list);
-			while ((init_record = 
-				(bg_record_t*)list_next(itr_curr))) {
-				list_remove(itr_curr);
-				list_push(bg_destroy_list, init_record);
-			}
-			list_iterator_destroy(itr_curr);
-		} else {
-			error("_delete_old_blocks: "
-			      "no bg_curr_block_list 1");
-			list_destroy(bg_destroy_list);
-			return SLURM_ERROR;
+		itr_curr = list_iterator_create(curr_block_list);
+		while ((init_record = list_next(itr_curr))) {
+			list_remove(itr_curr);
+			list_push(destroy_list, init_record);
 		}
+		list_iterator_destroy(itr_curr);
 	} else {
-		if(bg_curr_block_list) {
-			itr_curr = list_iterator_create(bg_curr_block_list);
-			while ((init_record = list_next(itr_curr))) {
-				if(bg_found_block_list) {
-					itr_found = list_iterator_create(
-						bg_found_block_list);
-					while ((found_record 
-						= list_next(itr_found)) 
-					       != NULL) {
-						if (!strcmp(init_record->
-							    bg_block_id, 
-							    found_record->
-							    bg_block_id)) {
-							/* don't delete 
-							   this one 
-							*/
-							break;	
-						}
-					}
-					list_iterator_destroy(itr_found);
-				} else {
-					error("_delete_old_blocks: "
-					      "no bg_found_block_list");
-					list_iterator_destroy(itr_curr);
-					list_destroy(bg_destroy_list);
-					return SLURM_ERROR;
+		itr_curr = list_iterator_create(curr_block_list);
+		while ((init_record = list_next(itr_curr))) {
+			itr_found = list_iterator_create(found_block_list);
+			while ((found_record = list_next(itr_found))) {
+				if (!strcmp(init_record->bg_block_id, 
+					    found_record->bg_block_id)) {
+					/* don't delete this one */
+					break;	
 				}
-				if(found_record == NULL) {
-					list_remove(itr_curr);
-					list_push(bg_destroy_list, 
-						  init_record);
-				}
-			}		
-			list_iterator_destroy(itr_curr);
-		} else {
-			error("_delete_old_blocks: "
-			      "no bg_curr_block_list 2");
-			list_destroy(bg_destroy_list);
-			return SLURM_ERROR;
-		}
+			}
+			list_iterator_destroy(itr_found);
+			
+			if(found_record == NULL) {
+				list_remove(itr_curr);
+				list_push(destroy_list, init_record);
+			}
+		}		
+		list_iterator_destroy(itr_curr);
 	}
 
 	slurm_mutex_lock(&freed_cnt_mutex);
@@ -1617,7 +1610,7 @@ static int _delete_old_blocks(List bg_found_block_list)
 	    && ((bg_destroy_block_list = list_create(NULL)) == NULL))
 		fatal("malloc failure in block_list");
 
-	itr_curr = list_iterator_create(bg_destroy_list);
+	itr_curr = list_iterator_create(destroy_list);
 	while ((init_record = (bg_record_t*) list_next(itr_curr))) {
 		list_push(bg_destroy_block_list, init_record);
 		num_block_to_free++;
@@ -1648,7 +1641,7 @@ static int _delete_old_blocks(List bg_found_block_list)
 	}
 	list_iterator_destroy(itr_curr);
 	slurm_mutex_unlock(&freed_cnt_mutex);
-	list_destroy(bg_destroy_list);
+	list_destroy(destroy_list);
 		
 	retries=30;
 	while(num_block_to_free > num_block_freed) {
@@ -1665,7 +1658,9 @@ static int _delete_old_blocks(List bg_found_block_list)
 		retries++;
 		sleep(1);
 	}
-	
+
+	num_block_to_free = num_block_freed = 0;
+
 	info("I am done deleting");
 
 	return SLURM_SUCCESS;
@@ -1674,7 +1669,7 @@ static int _delete_old_blocks(List bg_found_block_list)
 static char *_get_bg_conf(void)
 {
 	char *val = getenv("SLURM_CONF");
-	char *rc;
+	char *rc = NULL;
 	int i;
 
 	if (!val)
@@ -1697,14 +1692,15 @@ static int _reopen_bridge_log(void)
 {
 	int rc = SLURM_SUCCESS;
 
-	if (bridge_api_file == NULL)
+	if (bg_conf->bridge_api_file == NULL)
 		return rc;
 	
 #ifdef HAVE_BG_FILES
-	rc = bridge_set_log_params(bridge_api_file, bridge_api_verb);
+	rc = bridge_set_log_params(bg_conf->bridge_api_file,
+				   bg_conf->bridge_api_verb);
 #endif
 	debug3("Bridge api file set to %s, verbose level %d\n", 
-	       bridge_api_file, bridge_api_verb);
+	       bg_conf->bridge_api_file, bg_conf->bridge_api_verb);
 	
 	return rc;
 }
diff --git a/src/plugins/select/bluegene/plugin/bluegene.h b/src/plugins/select/bluegene/plugin/bluegene.h
index 3f6201036..bea0b1a39 100644
--- a/src/plugins/select/bluegene/plugin/bluegene.h
+++ b/src/plugins/select/bluegene/plugin/bluegene.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  bluegene.h - header for blue gene configuration processing module. 
  *
- *  $Id: bluegene.h 17102 2009-03-31 23:23:01Z da $
+ *  $Id: bluegene.h 17534 2009-05-19 00:58:46Z da $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dan Phung <phung4@llnl.gov> and Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -49,55 +50,61 @@ typedef enum bg_layout_type {
 	LAYOUT_DYNAMIC	/* slurm will make all blocks */
 } bg_layout_t;
 
-/* Global variables */
+typedef struct {
 #ifdef HAVE_BGL
-extern char *default_blrtsimage;
+	List blrts_list;
 #endif
-extern char *default_linuximage;
-extern char *default_mloaderimage;
-extern char *default_ramdiskimage;
-extern char *bridge_api_file;
-extern char *bg_slurm_user_name;
-extern char *bg_slurm_node_prefix;
-extern bg_layout_t bluegene_layout_mode;
-extern double bluegene_io_ratio;
-extern double bluegene_nc_ratio;
-extern uint32_t bluegene_smallest_block;
-extern uint16_t bluegene_proc_ratio;
-extern uint16_t bluegene_numpsets;
-extern uint16_t bluegene_bp_node_cnt;
-extern uint16_t bluegene_bp_nodecard_cnt;
-extern uint16_t bluegene_nodecard_node_cnt;
-extern uint16_t bluegene_nodecard_ionode_cnt;
-extern uint16_t bluegene_quarter_node_cnt;
-extern uint16_t bluegene_quarter_ionode_cnt;
-
-extern ba_system_t *ba_system_ptr;
-extern time_t last_bg_update;
-
-extern List bg_curr_block_list; 	/* Initial bg block state */
-extern List bg_list;			/* List of configured BG blocks */
-extern List bg_job_block_list;  	/* jobs running in these blocks */
-extern List bg_booted_block_list;  	/* blocks that are booted */
-extern List bg_freeing_list;  	        /* blocks that being freed */
+	uint16_t bp_node_cnt;
+	uint16_t bp_nodecard_cnt;
+	char *bridge_api_file;
+	uint16_t bridge_api_verb;
 #ifdef HAVE_BGL
-extern List bg_blrtsimage_list;
+	char *default_blrtsimage;
 #endif
-extern List bg_linuximage_list;
-extern List bg_mloaderimage_list;
-extern List bg_ramdiskimage_list;
-extern List bg_valid_small32;
-extern List bg_valid_small64;
-extern List bg_valid_small128;
-extern List bg_valid_small256;
+	char *default_linuximage;
+	char *default_mloaderimage;
+	char *default_ramdiskimage;
+	uint16_t deny_pass;
+	double io_ratio;
+	bg_layout_t layout_mode;
+	List linux_list;
+	List mloader_list;
+	double nc_ratio;
+	uint16_t nodecard_node_cnt;
+	uint16_t nodecard_ionode_cnt;
+	uint16_t numpsets;
+	uint16_t proc_ratio;
+	uint32_t procs_per_bp;
+	uint16_t quarter_node_cnt;
+	uint16_t quarter_ionode_cnt;
+	List ramdisk_list;
+	char *slurm_user_name;
+	char *slurm_node_prefix;
+	uint32_t smallest_block;
+} bg_config_t;
+
+typedef struct {
+	List booted;         /* blocks that are booted */
+	List job_running;    /* jobs running in these blocks */
+	List freeing;        /* blocks that being freed */
+	List main;	    /* List of configured BG blocks */
+	List valid_small32;
+	List valid_small64;
+	List valid_small128;
+	List valid_small256;
+} bg_lists_t;
 
+/* Global variables */
+extern bg_config_t *bg_conf;
+extern bg_lists_t *bg_lists;
+extern ba_system_t *ba_system_ptr;
+extern time_t last_bg_update;
 extern bool agent_fini;
 extern pthread_mutex_t block_state_mutex;
 extern pthread_mutex_t request_list_mutex;
 extern int num_block_to_free;
 extern int num_block_freed;
 extern int blocks_are_created;
-extern int procs_per_node;
 extern int num_unused_cpus;
 
 #define MAX_PTHREAD_RETRIES  1
@@ -109,7 +116,7 @@ extern int num_unused_cpus;
 #define BITSIZE 128
 /* Change BLOCK_STATE_VERSION value when changing the state save
  * format i.e. pack_block() */
-#define BLOCK_STATE_VERSION      "VER001"
+#define BLOCK_STATE_VERSION      "VER002"
 
 #include "bg_block_info.h"
 #include "bg_job_place.h"
@@ -161,14 +168,14 @@ extern bg_record_t *find_org_in_bg_list(List my_list, bg_record_t *bg_record);
 extern void *mult_free_block(void *args);
 extern void *mult_destroy_block(void *args);
 extern int free_block_list(List delete_list);
-extern int read_bg_conf(void);
+extern int read_bg_conf();
 extern int validate_current_blocks(char *dir);
 
 /* block_sys.c */
 /*****************************************************/
 extern int configure_block(bg_record_t * bg_conf_record);
 extern int read_bg_blocks();
-extern int load_state_file(char *dir_name);
+extern int load_state_file(List curr_block_list, char *dir_name);
 
 /* bg_switch_connections.c */
 /*****************************************************/
diff --git a/src/plugins/select/bluegene/plugin/defined_block.c b/src/plugins/select/bluegene/plugin/defined_block.c
index c2ac0a62b..1872c8abb 100644
--- a/src/plugins/select/bluegene/plugin/defined_block.c
+++ b/src/plugins/select/bluegene/plugin/defined_block.c
@@ -8,7 +8,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -66,7 +67,6 @@ extern int create_defined_blocks(bg_layout_t overlapped,
 #ifdef HAVE_BG_FILES
 	init_wires();
 #endif
- 		
 	/* Locks are already in place to protect part_list here */
 	itr = list_iterator_create(part_list);
 	while ((part_ptr = list_next(itr))) {
@@ -84,15 +84,15 @@ extern int create_defined_blocks(bg_layout_t overlapped,
 	
 	slurm_mutex_lock(&block_state_mutex);
 	reset_ba_system(false);
-	if(bg_list) {
-		itr = list_iterator_create(bg_list);
+	if(bg_lists->main) {
+		itr = list_iterator_create(bg_lists->main);
 		while((bg_record = list_next(itr))) {
 			if(bg_found_block_list) {
 				itr_found = list_iterator_create(
 					bg_found_block_list);
 				while ((found_record = (bg_record_t*) 
 					list_next(itr_found)) != NULL) {
-/* 					info("%s[%s[ ?= %s[%s]\n", */
+/* 					info("%s[%s] ?= %s[%s]\n", */
 /* 					     bg_record->nodes, */
 /* 					     bg_record->ionodes, */
 /* 					     found_record->nodes, */
@@ -105,7 +105,7 @@ extern int create_defined_blocks(bg_layout_t overlapped,
 							  found_record->
 							  ionode_bitmap))
 						) {
-						/* don't reboot this one */
+						/* don't remake this one */
 						break;	
 					}
 				}
@@ -116,7 +116,7 @@ extern int create_defined_blocks(bg_layout_t overlapped,
 			}
 			if(bg_record->bp_count > 0 
 			   && !bg_record->full_block
-			   && bg_record->cpu_cnt >= procs_per_node) {
+			   && bg_record->cpu_cnt >= bg_conf->procs_per_bp) {
 				char *name = NULL;
 
 				if(overlapped == LAYOUT_OVERLAP) {
@@ -130,7 +130,7 @@ extern int create_defined_blocks(bg_layout_t overlapped,
 				if(set_all_bps_except(bg_record->nodes)
 				   != SLURM_SUCCESS)
 					fatal("something happened in "
-					      "the load of %s"
+					      "the load of %s.  "
 					      "Did you use smap to "
 					      "make the "
 					      "bluegene.conf file?",
@@ -185,7 +185,7 @@ extern int create_defined_blocks(bg_layout_t overlapped,
 					}
 					
 					snprintf(temp, sizeof(temp), "%s%s",
-						 bg_slurm_node_prefix,
+						 bg_conf->slurm_node_prefix,
 						 name);
 					
 					xfree(name);
@@ -237,7 +237,7 @@ extern int create_defined_blocks(bg_layout_t overlapped,
 		}
 		list_iterator_destroy(itr);
 	} else {
-		error("create_defined_blocks: no bg_list 2");
+		error("create_defined_blocks: no bg_lists->main 2");
 		slurm_mutex_unlock(&block_state_mutex);
 		xfree(non_usable_nodes);
 		return SLURM_ERROR;
@@ -248,12 +248,12 @@ extern int create_defined_blocks(bg_layout_t overlapped,
 	create_full_system_block(bg_found_block_list);
 
 	slurm_mutex_lock(&block_state_mutex);
-	sort_bg_record_inc_size(bg_list);
+	sort_bg_record_inc_size(bg_lists->main);
 	slurm_mutex_unlock(&block_state_mutex);
 	
 #ifdef _PRINT_BLOCKS_AND_EXIT
-	if(bg_list) {
-		itr = list_iterator_create(bg_list);
+	if(bg_lists->main) {
+		itr = list_iterator_create(bg_lists->main);
 		debug("\n\n");
 		while ((found_record = (bg_record_t *) list_next(itr)) 
 		       != NULL) {
@@ -261,7 +261,7 @@ extern int create_defined_blocks(bg_layout_t overlapped,
 		}
 		list_iterator_destroy(itr);
 	} else {
-		error("create_defined_blocks: no bg_list 5");
+		error("create_defined_blocks: no bg_lists->main 5");
 	}
  	exit(0);
 #endif	/* _PRINT_BLOCKS_AND_EXIT */
@@ -318,14 +318,14 @@ extern int create_full_system_block(List bg_found_block_list)
 /* 	geo[Z] = max_dim[Z]; */
 /* #endif */
 	
-	i = (10+strlen(bg_slurm_node_prefix));
+	i = (10+strlen(bg_conf->slurm_node_prefix));
 	name = xmalloc(i);
 	if((geo[X] == 0) && (geo[Y] == 0) && (geo[Z] == 0))
 		snprintf(name, i, "%s000",
-			 bg_slurm_node_prefix);
+			 bg_conf->slurm_node_prefix);
 	else
 		snprintf(name, i, "%s[000x%c%c%c]",
-			 bg_slurm_node_prefix,
+			 bg_conf->slurm_node_prefix,
 			 alpha_num[geo[X]], alpha_num[geo[Y]],
 			 alpha_num[geo[Z]]);
 	
@@ -345,8 +345,8 @@ extern int create_full_system_block(List bg_found_block_list)
 		error("create_full_system_block: no bg_found_block_list 2");
 	}
 	
-	if(bg_list) {
-		itr = list_iterator_create(bg_list);
+	if(bg_lists->main) {
+		itr = list_iterator_create(bg_lists->main);
 		while ((bg_record = (bg_record_t *) list_next(itr)) 
 		       != NULL) {
 			if (!strcmp(name, bg_record->nodes)) {
@@ -359,7 +359,7 @@ extern int create_full_system_block(List bg_found_block_list)
 		list_iterator_destroy(itr);
 	} else {
 		xfree(name);
-		error("create_overlapped_blocks: no bg_list 3");
+		error("create_overlapped_blocks: no bg_lists->main 3");
 		rc = SLURM_ERROR;
 		goto no_total;
 	}
@@ -417,7 +417,7 @@ extern int create_full_system_block(List bg_found_block_list)
 	}
 
 	print_bg_record(bg_record);
-	list_append(bg_list, bg_record);
+	list_append(bg_lists->main, bg_record);
 
 no_total:
 	if(records)
diff --git a/src/plugins/select/bluegene/plugin/defined_block.h b/src/plugins/select/bluegene/plugin/defined_block.h
index 4255135f3..048de8ef4 100644
--- a/src/plugins/select/bluegene/plugin/defined_block.h
+++ b/src/plugins/select/bluegene/plugin/defined_block.h
@@ -8,7 +8,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/select/bluegene/plugin/dynamic_block.c b/src/plugins/select/bluegene/plugin/dynamic_block.c
index 79d265616..fca825883 100644
--- a/src/plugins/select/bluegene/plugin/dynamic_block.c
+++ b/src/plugins/select/bluegene/plugin/dynamic_block.c
@@ -8,7 +8,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -63,13 +64,13 @@ extern List create_dynamic_block(List block_list,
 	int geo[BA_SYSTEM_DIMENSIONS];
 	int i;
 	blockreq_t blockreq;
-	int cnodes = request->procs / bluegene_proc_ratio;
+	int cnodes = request->procs / bg_conf->proc_ratio;
 
-	if(cnodes < bluegene_smallest_block) {
+	if(cnodes < bg_conf->smallest_block) {
 		error("Can't create this size %d "
 		      "on this system numpsets is %d",
 		      request->procs,
-		      bluegene_numpsets);
+		      bg_conf->numpsets);
 		goto finished;
 	}
 	memset(&blockreq, 0, sizeof(blockreq_t));
@@ -135,7 +136,7 @@ extern List create_dynamic_block(List block_list,
 		FREE_NULL_BITMAP(bitmap);
 	}
 
-	if(request->size==1 && cnodes < bluegene_bp_node_cnt) {
+	if(request->size==1 && cnodes < bg_conf->bp_node_cnt) {
 		switch(cnodes) {
 #ifdef HAVE_BGL
 		case 32:
@@ -226,11 +227,11 @@ extern List create_dynamic_block(List block_list,
 			/* Here we are only looking for the first
 			   block on the midplane.  So either the count
 			   is greater or equal than
-			   bluegene_bp_node_cnt or the first bit is
+			   bg_conf->bp_node_cnt or the first bit is
 			   set in the ionode_bitmap.
 			*/
 			if(bg_record->job_running == NO_JOB_RUNNING 
-			   && ((bg_record->node_cnt >= bluegene_bp_node_cnt)
+			   && ((bg_record->node_cnt >= bg_conf->bp_node_cnt)
 			       || (bit_ffs(bg_record->ionode_bitmap) == 0))) {
 				
 				for(i=0; i<BA_SYSTEM_DIMENSIONS; i++) 
@@ -358,7 +359,7 @@ extern bg_record_t *create_small_record(bg_record_t *bg_record,
 		found_record->bp_count = 1;
 		found_record->nodes = xstrdup_printf(
 			"%s%c%c%c", 
-			bg_slurm_node_prefix, 
+			bg_conf->slurm_node_prefix, 
 			alpha_num[ba_node->coord[X]],
 			alpha_num[ba_node->coord[Y]],
 			alpha_num[ba_node->coord[Z]]);
@@ -375,8 +376,8 @@ extern bg_record_t *create_small_record(bg_record_t *bg_record,
 				
 	found_record->conn_type = SELECT_SMALL;
 				
-	xassert(bluegene_proc_ratio);
-	found_record->cpu_cnt = bluegene_proc_ratio * size;
+	xassert(bg_conf->proc_ratio);
+	found_record->cpu_cnt = bg_conf->proc_ratio * size;
 	found_record->node_cnt = size;
 
 	found_record->ionode_bitmap = bit_copy(ionodes);
@@ -583,10 +584,9 @@ static int _breakup_blocks(List block_list, List new_blocks,
 	ListIterator itr = NULL, bit_itr = NULL;
 	int search_cnt = 0;
 	int total_cnode_cnt=0;
-	uint16_t last_quarter = (uint16_t) NO_VAL;
 	char tmp_char[256];
-	bitstr_t *ionodes = bit_alloc(bluegene_numpsets);
-	int cnodes = request->procs / bluegene_proc_ratio;
+	bitstr_t *ionodes = bit_alloc(bg_conf->numpsets);
+	int cnodes = request->procs / bg_conf->proc_ratio;
 	
 	debug2("proc count = %d cnodes = %d size = %d",
 	       request->procs, cnodes, request->size);
@@ -596,16 +596,16 @@ static int _breakup_blocks(List block_list, List new_blocks,
 		/* a 16 can go anywhere */
 		break;
 	case 32:
-		bit_itr = list_iterator_create(bg_valid_small32);
+		bit_itr = list_iterator_create(bg_lists->valid_small32);
 		break;
 	case 64:
-		bit_itr = list_iterator_create(bg_valid_small64);
+		bit_itr = list_iterator_create(bg_lists->valid_small64);
 		break;
 	case 128:
-		bit_itr = list_iterator_create(bg_valid_small128);
+		bit_itr = list_iterator_create(bg_lists->valid_small128);
 		break;
 	case 256:
-		bit_itr = list_iterator_create(bg_valid_small256);
+		bit_itr = list_iterator_create(bg_lists->valid_small256);
 		break;
 	default:
 		error("We shouldn't be here with this size %d", cnodes);
@@ -630,7 +630,7 @@ again:
 				continue;
 		/* check small blocks first */
 		if((search_cnt == 0)
-		   && (bg_record->node_cnt > bluegene_bp_node_cnt))
+		   && (bg_record->node_cnt > bg_conf->bp_node_cnt))
 				continue;
 		
 		if (request->avail_node_bitmap &&
@@ -691,7 +691,7 @@ again:
 				list_iterator_reset(bit_itr);
 			}
 			if(!bitstr) {
-				bit_nclear(ionodes, 0, (bluegene_numpsets-1));
+				bit_nclear(ionodes, 0, (bg_conf->numpsets-1));
 				bit_or(ionodes, bg_record->ionode_bitmap);
 				total_cnode_cnt = bg_record->node_cnt;
 			} else
@@ -731,9 +731,8 @@ again:
 	if(!bg_record && (search_cnt < 2)) {
 		search_cnt++;
 		list_iterator_reset(itr);
-		bit_nclear(ionodes, 0, (bluegene_numpsets-1));
+		bit_nclear(ionodes, 0, (bg_conf->numpsets-1));
 		total_cnode_cnt = 0;		
-		last_quarter = (uint16_t) NO_VAL;
 		goto again;
 	}
 
@@ -747,7 +746,7 @@ again:
 		} else {
 			debug3("looking for original");
 			found_record = find_org_in_bg_list(
-				bg_list, bg_record);
+				bg_lists->main, bg_record);
 		}
 		if(!found_record) {
 			error("this record wasn't found in the list!");
@@ -772,10 +771,9 @@ again:
 		_split_block(block_list, new_blocks, found_record, cnodes);
 		remove_from_bg_list(block_list, bg_record);
 		destroy_bg_record(bg_record);
-		remove_from_bg_list(bg_list, found_record);
+		remove_from_bg_list(bg_lists->main, found_record);
 		temp_list = list_create(NULL);
 		list_push(temp_list, found_record);
-		num_block_to_free++;
 		free_block_list(temp_list);
 		list_destroy(temp_list);
 		rc = SLURM_SUCCESS;
diff --git a/src/plugins/select/bluegene/plugin/dynamic_block.h b/src/plugins/select/bluegene/plugin/dynamic_block.h
index 9e65a27de..28027618a 100644
--- a/src/plugins/select/bluegene/plugin/dynamic_block.h
+++ b/src/plugins/select/bluegene/plugin/dynamic_block.h
@@ -8,7 +8,8 @@
  *  Written by Danny Auble <da@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -45,12 +46,7 @@ extern List create_dynamic_block(List block_list,
 				 ba_request_t *request, List my_block_list,
 				 bool track_down_nodes);
 
-#ifdef HAVE_BGQ 
-extern bg_record_t *create_small_record(bg_record_t *bg_record, 
-					uint16_t quarter, uint16_t nodecard);
-#else
 extern bg_record_t *create_small_record(bg_record_t *bg_record, 
 					bitstr_t *ionodes, int size);
-#endif
 
 #endif /* _BLUEGENE_DYNAMIC_BLOCK_H_ */
diff --git a/src/plugins/select/bluegene/plugin/libsched_if64.c b/src/plugins/select/bluegene/plugin/libsched_if64.c
index ea9b9281b..3be8812e1 100644
--- a/src/plugins/select/bluegene/plugin/libsched_if64.c
+++ b/src/plugins/select/bluegene/plugin/libsched_if64.c
@@ -9,7 +9,8 @@
  *  Written by Danny Auble <auble1@llnl.gov> et. al.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/select/bluegene/plugin/opts.c b/src/plugins/select/bluegene/plugin/opts.c
index 4fa939229..760cfc110 100644
--- a/src/plugins/select/bluegene/plugin/opts.c
+++ b/src/plugins/select/bluegene/plugin/opts.c
@@ -1,14 +1,15 @@
 /****************************************************************************\
  *  opts.c - sfree command line option processing functions
- *  $Id: opts.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: opts.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/plugins/select/bluegene/plugin/select_bluegene.c b/src/plugins/select/bluegene/plugin/select_bluegene.c
index 16364b372..5604ee13f 100644
--- a/src/plugins/select/bluegene/plugin/select_bluegene.c
+++ b/src/plugins/select/bluegene/plugin/select_bluegene.c
@@ -1,15 +1,15 @@
 /*****************************************************************************\
  *  select_bluegene.c - node selection plugin for Blue Gene system.
- * 
- *  $Id: select_bluegene.c 17175 2009-04-07 17:24:20Z da $
  *****************************************************************************
- *  Copyright (C) 2004-2006 The Regents of the University of California.
+ *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dan Phung <phung4@llnl.gov> Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -39,19 +39,12 @@
 
 #include "bluegene.h"
 
-#ifndef HAVE_BG
-#include "defined_block.h"
-#endif
-
 //#include "src/common/uid.h"
 #include "src/slurmctld/trigger_mgr.h"
 #include <fcntl.h>
 
 #define HUGE_BUF_SIZE (1024*16)
 
-/* global */
-int procs_per_node = 512;
-
 /*
  * These variables are required by the generic plugin interface.  If they
  * are not found in the plugin, the plugin loader will ignore it.
@@ -101,9 +94,7 @@ extern int select_p_alter_node_cnt(enum select_node_cnt type, void *data);
  */
 extern int init ( void )
 {
-#ifndef HAVE_BG
-	fatal("Plugin select/bluegene is illegal on non-BlueGene computers");
-#endif
+
 #if (SYSTEM_DIMENSIONS != 3)
 	fatal("SYSTEM_DIMENSIONS value (%d) invalid for Blue Gene",
 		SYSTEM_DIMENSIONS);
@@ -164,14 +155,12 @@ static char *_block_state_str(int state)
 {
 	static char tmp[16];
 
-#ifdef HAVE_BG
 	switch (state) {
 		case 0: 
 			return "ERROR";
 		case 1:
 			return "FREE";
 	}
-#endif
 
 	snprintf(tmp, sizeof(tmp), "%d", state);
 	return tmp;
@@ -209,21 +198,14 @@ extern int fini ( void )
  */
  extern int select_p_block_init(List part_list)
 {
-	xfree(bg_slurm_user_name);
-	xfree(bg_slurm_node_prefix);
-
-	slurm_conf_lock();
-	xassert(slurmctld_conf.slurm_user_name);
-	xassert(slurmctld_conf.node_prefix);
-	bg_slurm_user_name = xstrdup(slurmctld_conf.slurm_user_name);
-	bg_slurm_node_prefix = xstrdup(slurmctld_conf.node_prefix);
-	slurm_conf_unlock();	
-
-#ifdef HAVE_BG
+	/* select_p_node_init needs to be called before this to set
+	   this up correctly
+	*/
 	if(read_bg_conf() == SLURM_ERROR) {
 		fatal("Error, could not read the file");
 		return SLURM_ERROR;
 	}
+	
 	if(part_list) {
 		struct part_record *part_ptr = NULL;
 		ListIterator itr = list_iterator_create(part_list);
@@ -237,18 +219,6 @@ extern int fini ( void )
 		}
 		list_iterator_destroy(itr);
 	}
-#else
-	/*looking for blocks only I created */
-	if (create_defined_blocks(bluegene_layout_mode, NULL) 
-			== SLURM_ERROR) {
-		/* error in creating the static blocks, so
-		 * blocks referenced by submitted jobs won't
-		 * correspond to actual slurm blocks.
-		 */
-		fatal("Error, could not create the static blocks");
-		return SLURM_ERROR;
-	}
-#endif
 
 	return SLURM_SUCCESS; 
 }
@@ -274,7 +244,7 @@ extern int select_p_state_save(char *dir_name)
 
 	/* write block records to buffer */
 	slurm_mutex_lock(&block_state_mutex);
-	itr = list_iterator_create(bg_list);
+	itr = list_iterator_create(bg_lists->main);
 	while((bg_record = list_next(itr))) {
 		/* on real bluegene systems we only want to keep track of
 		 * the blocks in an error state
@@ -360,12 +330,13 @@ extern int select_p_job_init(List job_list)
 	return sync_jobs(job_list);
 }
 
-/* All initialization is performed by select_p_block_init() */
+/* All initialization is performed by init() */
 extern int select_p_node_init(struct node_record *node_ptr, int node_cnt)
 {
 	if(node_cnt>0)
-		if(node_ptr->cpus >= bluegene_bp_node_cnt)
-			procs_per_node = node_ptr->cpus;
+		if(node_ptr->cpus >= bg_conf->bp_node_cnt) 
+			bg_conf->procs_per_bp = node_ptr->cpus;
+		
 	return SLURM_SUCCESS;
 }
 
@@ -442,20 +413,9 @@ extern int select_p_job_resume(struct job_record *job_ptr)
 	return ESLURM_NOT_SUPPORTED;
 }
 
-extern int select_p_get_job_cores(uint32_t job_id, int alloc_index, int s)
-{
-	return ESLURM_NOT_SUPPORTED;
-}
-
 extern int select_p_job_ready(struct job_record *job_ptr)
 {
-#ifdef HAVE_BG_FILES
 	return block_ready(job_ptr);
-#else
-	if (job_ptr->job_state == JOB_RUNNING)
-		return 1;
-	return 0;
-#endif
 }
 
 extern int select_p_pack_node_info(time_t last_query_time, Buf *buffer_ptr)
@@ -476,9 +436,9 @@ extern int select_p_pack_node_info(time_t last_query_time, Buf *buffer_ptr)
 		pack32(blocks_packed, buffer);
 		pack_time(last_bg_update, buffer);
 
-		if(bg_list) {
+		if(bg_lists->main) {
 			slurm_mutex_lock(&block_state_mutex);
-			itr = list_iterator_create(bg_list);
+			itr = list_iterator_create(bg_lists->main);
 			while ((bg_record = list_next(itr))) {
 				pack_block(bg_record, buffer);
 				blocks_packed++;
@@ -486,16 +446,16 @@ extern int select_p_pack_node_info(time_t last_query_time, Buf *buffer_ptr)
 			list_iterator_destroy(itr);
 			slurm_mutex_unlock(&block_state_mutex);
 		} else {
-			error("select_p_pack_node_info: no bg_list");
+			error("select_p_pack_node_info: no bg_lists->main");
 			return SLURM_ERROR;
 		}
 		/*
 		 * get all the blocks we are freeing since they have
 		 * been moved here
 		 */
-		if(bg_freeing_list) {
+		if(bg_lists->freeing) {
 			slurm_mutex_lock(&block_state_mutex);
-			itr = list_iterator_create(bg_freeing_list);
+			itr = list_iterator_create(bg_lists->freeing);
 			while ((bg_record = (bg_record_t *) list_next(itr)) 
 			       != NULL) {
 				xassert(bg_record->bg_block_id != NULL);
@@ -513,7 +473,7 @@ extern int select_p_pack_node_info(time_t last_query_time, Buf *buffer_ptr)
 		
 		*buffer_ptr = buffer;
 	} else {
-		error("select_p_pack_node_info: bg_list not ready yet");
+		error("select_p_pack_node_info: bg_lists->main not ready yet");
 		return SLURM_ERROR;
 	}
 
@@ -540,7 +500,7 @@ extern int select_p_update_block (update_part_msg_t *part_desc_ptr)
 	time_t now;
 	char reason[128], tmp[64], time_str[32];
 
-	bg_record = find_bg_record_in_list(bg_list, part_desc_ptr->name);
+	bg_record = find_bg_record_in_list(bg_lists->main, part_desc_ptr->name);
 	if(!bg_record)
 		return SLURM_ERROR;
 
@@ -566,14 +526,14 @@ extern int select_p_update_block (update_part_msg_t *part_desc_ptr)
 	
 	/* Free all overlapping blocks and kill any jobs only
 	 * if we are going into an error state */ 
-	if (bluegene_layout_mode != LAYOUT_DYNAMIC
+	if (bg_conf->layout_mode != LAYOUT_DYNAMIC
 	    && !part_desc_ptr->state_up) {
 		bg_record_t *found_record = NULL;
 		ListIterator itr;
 		List delete_list = list_create(NULL);
 		
 		slurm_mutex_lock(&block_state_mutex);
-		itr = list_iterator_create(bg_list);
+		itr = list_iterator_create(bg_lists->main);
 		while ((found_record = list_next(itr))) {
 			if (bg_record == found_record)
 				continue;
@@ -608,7 +568,6 @@ extern int select_p_update_block (update_part_msg_t *part_desc_ptr)
 				       bg_record->bg_block_id);	
 			}
 			list_push(delete_list, found_record);
-			num_block_to_free++;
 		}		
 		list_iterator_destroy(itr);
 		free_block_list(delete_list);
@@ -621,11 +580,13 @@ extern int select_p_update_block (update_part_msg_t *part_desc_ptr)
 	} else if(part_desc_ptr->state_up){
 		resume_block(bg_record);
 	} else {
+		error("state is ? %d", part_desc_ptr->state_up);
 		return rc;
 	}
 				
 	info("%s", reason);
 	last_bg_update = time(NULL);
+
 	return rc;
 }
 
@@ -639,7 +600,7 @@ extern int select_p_update_sub_node (update_part_msg_t *part_desc_ptr)
 	double nc_pos = 0, last_pos = -1;
 	bitstr_t *ionode_bitmap = NULL;
 	
-	if(bluegene_layout_mode != LAYOUT_DYNAMIC) {
+	if(bg_conf->layout_mode != LAYOUT_DYNAMIC) {
 		info("You can't use this call unless you are on a Dynamically "
 		     "allocated system.  Please use update BlockName instead");
 		rc = SLURM_ERROR;
@@ -719,7 +680,7 @@ extern int select_p_update_sub_node (update_part_msg_t *part_desc_ptr)
 		rc = SLURM_ERROR;
 		goto end_it;
 	}
-	ionode_bitmap = bit_alloc(bluegene_numpsets);
+	ionode_bitmap = bit_alloc(bg_conf->numpsets);
 	bit_unfmt(ionode_bitmap, ionodes);
 	if(bit_ffs(ionode_bitmap) == -1) {
 		error("update_sub_node: Invalid ionode '%s' given.", ionodes);
@@ -727,19 +688,22 @@ extern int select_p_update_sub_node (update_part_msg_t *part_desc_ptr)
 		FREE_NULL_BITMAP(ionode_bitmap);
 		goto end_it;		
 	}
-	node_name = xstrdup_printf("%s%s", bg_slurm_node_prefix, coord);
+	node_name = xstrdup_printf("%s%s", bg_conf->slurm_node_prefix, coord);
 	/* find out how many nodecards to get for each ionode */
 	if(!part_desc_ptr->state_up) {
 		info("Admin setting %s[%s] in an error state",
 		     node_name, ionodes);
-		for(i = 0; i<bluegene_numpsets; i++) {
+		for(i = 0; i<bg_conf->numpsets; i++) {
 			if(bit_test(ionode_bitmap, i)) {
 				if((int)nc_pos != (int)last_pos) {
-					down_nodecard(node_name, i);
+					/* find first bit in nc */
+					int start_io = 
+						(int)nc_pos * bg_conf->io_ratio;
+					down_nodecard(node_name, start_io);
 					last_pos = nc_pos;
 				}
 			}
-			nc_pos += bluegene_nc_ratio;
+			nc_pos += bg_conf->nc_ratio;
 		}
 	} else if(part_desc_ptr->state_up){
 		info("Admin setting %s[%s] in an free state",
@@ -759,32 +723,24 @@ end_it:
 	return rc;
 }
 
-extern int select_p_get_extra_jobinfo (struct node_record *node_ptr, 
-				       struct job_record *job_ptr, 
-                                       enum select_data_info info,
-                                       void *data)
-{
-	if (info == SELECT_AVAIL_CPUS) {
-		/* Needed to track CPUs allocated to jobs on whole nodes
-		 * for sched/wiki2 (Moab scheduler). Small block allocations
-		 * handled through use of job_ptr->num_procs in slurmctld */
-		uint16_t *cpus_per_bp = (uint16_t *) data;
-		*cpus_per_bp = procs_per_node;
-	}
-	return SLURM_SUCCESS;
-}
-
 extern int select_p_get_info_from_plugin (enum select_data_info info, 
+					  struct job_record *job_ptr,
 					  void *data)
 {
+	if (info == SELECT_STATIC_PART) {
+		uint16_t *tmp16 = (uint16_t *) data;
+		if (bg_conf->layout_mode == LAYOUT_STATIC)
+			*tmp16 = 1;
+		else
+			*tmp16 = 0;
+	}
+
 	return SLURM_SUCCESS;
 }
 
 extern int select_p_update_node_state (int index, uint16_t state)
 {
-	int x;
-#ifdef HAVE_BG
-	int y, z;
+	int x, y, z;
 	
 	for (y = DIM_SIZE[Y] - 1; y >= 0; y--) {
 		for (z = 0; z < DIM_SIZE[Z]; z++) {
@@ -799,14 +755,7 @@ extern int select_p_update_node_state (int index, uint16_t state)
 			}
 		}
 	}
-#else
-	for (x = 0; x < DIM_SIZE[X]; x++) {
-		if (ba_system_ptr->grid[x].index == index) {
-			ba_update_node_state(&ba_system_ptr->grid[x], state);
-			return SLURM_SUCCESS;
-		}
-	}
-#endif
+
 	return SLURM_ERROR;
 }
 
@@ -817,22 +766,22 @@ extern int select_p_alter_node_cnt(enum select_node_cnt type, void *data)
 	int i;
 	uint16_t req_geometry[BA_SYSTEM_DIMENSIONS];
 
-	if(!bluegene_bp_node_cnt) {
+	if(!bg_conf->bp_node_cnt) {
 		fatal("select_g_alter_node_cnt: This can't be called "
-		      "before select_g_block_init");
+		      "before init");
 	}
 
 	switch (type) {
 	case SELECT_GET_NODE_SCALING:
 		if((*nodes) != INFINITE)
-			(*nodes) = bluegene_bp_node_cnt;
+			(*nodes) = bg_conf->bp_node_cnt;
 		break;
 	case SELECT_SET_BP_CNT:
 		if(((*nodes) == INFINITE) || ((*nodes) == NO_VAL))
 			tmp = (*nodes);
-		else if((*nodes) > bluegene_bp_node_cnt) {
+		else if((*nodes) > bg_conf->bp_node_cnt) {
 			tmp = (*nodes);
-			tmp /= bluegene_bp_node_cnt;
+			tmp /= bg_conf->bp_node_cnt;
 			if(tmp < 1) 
 				tmp = 1;
 		} else 
@@ -846,11 +795,11 @@ extern int select_p_alter_node_cnt(enum select_node_cnt type, void *data)
 			 * don't scale up this value. */
 			break;
 		}
-		(*nodes) *= bluegene_bp_node_cnt;
+		(*nodes) *= bg_conf->bp_node_cnt;
 		break;
 	case SELECT_APPLY_NODE_MAX_OFFSET:
 		if((*nodes) != INFINITE)
-			(*nodes) *= bluegene_bp_node_cnt;
+			(*nodes) *= bg_conf->bp_node_cnt;
 		break;
 	case SELECT_SET_NODE_CNT:
 		select_g_get_jobinfo(job_desc->select_jobinfo,
@@ -877,29 +826,30 @@ extern int select_p_alter_node_cnt(enum select_node_cnt type, void *data)
 			for (i=0; i<BA_SYSTEM_DIMENSIONS; i++)
 				job_desc->min_nodes *= 
 					(uint16_t)req_geometry[i];
-			job_desc->min_nodes *= bluegene_bp_node_cnt;
+			job_desc->min_nodes *= bg_conf->bp_node_cnt;
 			job_desc->max_nodes = job_desc->min_nodes;
 		}
 
 		if(job_desc->num_procs != NO_VAL) {
+			job_desc->num_procs /= bg_conf->proc_ratio;
 			if(job_desc->min_nodes < job_desc->num_procs)
 				job_desc->min_nodes = job_desc->num_procs;
 			if(job_desc->max_nodes < job_desc->num_procs)
 				job_desc->max_nodes = job_desc->num_procs;
 		}
 		/* See if min_nodes is greater than one base partition */
-		if(job_desc->min_nodes > bluegene_bp_node_cnt) {
+		if(job_desc->min_nodes > bg_conf->bp_node_cnt) {
 			/*
 			 * if it is make sure it is a factor of 
-			 * bluegene_bp_node_cnt, if it isn't make it 
+			 * bg_conf->bp_node_cnt, if it isn't make it 
 			 * that way 
 			 */
-			tmp = job_desc->min_nodes % bluegene_bp_node_cnt;
+			tmp = job_desc->min_nodes % bg_conf->bp_node_cnt;
 			if(tmp > 0)
 				job_desc->min_nodes += 
-					(bluegene_bp_node_cnt-tmp);
+					(bg_conf->bp_node_cnt-tmp);
 		}				
-		tmp = job_desc->min_nodes / bluegene_bp_node_cnt;
+		tmp = job_desc->min_nodes / bg_conf->bp_node_cnt;
 		
 		/* this means it is greater or equal to one bp */
 		if(tmp > 0) {
@@ -907,32 +857,32 @@ extern int select_p_alter_node_cnt(enum select_node_cnt type, void *data)
 					     SELECT_DATA_NODE_CNT,
 					     &job_desc->min_nodes);
 			job_desc->min_nodes = tmp;
-			job_desc->num_procs = procs_per_node * tmp;
+			job_desc->num_procs = bg_conf->procs_per_bp * tmp;
 		} else { 
 #ifdef HAVE_BGL
-			if(job_desc->min_nodes <= bluegene_nodecard_node_cnt
-			   && bluegene_nodecard_ionode_cnt)
+			if(job_desc->min_nodes <= bg_conf->nodecard_node_cnt
+			   && bg_conf->nodecard_ionode_cnt)
 				job_desc->min_nodes = 
-					bluegene_nodecard_node_cnt;
+					bg_conf->nodecard_node_cnt;
 			else if(job_desc->min_nodes 
-				<= bluegene_quarter_node_cnt)
+				<= bg_conf->quarter_node_cnt)
 				job_desc->min_nodes = 
-					bluegene_quarter_node_cnt;
+					bg_conf->quarter_node_cnt;
 			else 
 				job_desc->min_nodes = 
-					bluegene_bp_node_cnt;
+					bg_conf->bp_node_cnt;
 			
 			select_g_set_jobinfo(job_desc->select_jobinfo,
 					     SELECT_DATA_NODE_CNT,
 					     &job_desc->min_nodes);
 
-			tmp = bluegene_bp_node_cnt/job_desc->min_nodes;
+			tmp = bg_conf->bp_node_cnt/job_desc->min_nodes;
 			
-			job_desc->num_procs = procs_per_node/tmp;
+			job_desc->num_procs = bg_conf->procs_per_bp/tmp;
 			job_desc->min_nodes = 1;
 #else
-			i = bluegene_smallest_block;
-			while(i <= bluegene_bp_node_cnt) {
+			i = bg_conf->smallest_block;
+			while(i <= bg_conf->bp_node_cnt) {
 				if(job_desc->min_nodes <= i) {
 					job_desc->min_nodes = i;
 					break;
@@ -945,7 +895,7 @@ extern int select_p_alter_node_cnt(enum select_node_cnt type, void *data)
 					     &job_desc->min_nodes);
 
 			job_desc->num_procs = job_desc->min_nodes 
-				* bluegene_proc_ratio;
+				* bg_conf->proc_ratio;
 			job_desc->min_nodes = 1;
 #endif
 		}
@@ -953,40 +903,40 @@ extern int select_p_alter_node_cnt(enum select_node_cnt type, void *data)
 		if(job_desc->max_nodes == (uint32_t) NO_VAL) 
 			return SLURM_SUCCESS;
 		
-		if(job_desc->max_nodes > bluegene_bp_node_cnt) {
-			tmp = job_desc->max_nodes % bluegene_bp_node_cnt;
+		if(job_desc->max_nodes > bg_conf->bp_node_cnt) {
+			tmp = job_desc->max_nodes % bg_conf->bp_node_cnt;
 			if(tmp > 0)
 				job_desc->max_nodes += 
-					(bluegene_bp_node_cnt-tmp);
+					(bg_conf->bp_node_cnt-tmp);
 		}
-		tmp = job_desc->max_nodes / bluegene_bp_node_cnt;
+		tmp = job_desc->max_nodes / bg_conf->bp_node_cnt;
 		if(tmp > 0) {
 			job_desc->max_nodes = tmp;
 			tmp = NO_VAL;
 		} else {
 #ifdef HAVE_BGL
-			if(job_desc->max_nodes <= bluegene_nodecard_node_cnt
-			   && bluegene_nodecard_ionode_cnt)
+			if(job_desc->max_nodes <= bg_conf->nodecard_node_cnt
+			   && bg_conf->nodecard_ionode_cnt)
 				job_desc->max_nodes = 
-					bluegene_nodecard_node_cnt;
+					bg_conf->nodecard_node_cnt;
 			else if(job_desc->max_nodes 
-				<= bluegene_quarter_node_cnt)
+				<= bg_conf->quarter_node_cnt)
 				job_desc->max_nodes = 
-					bluegene_quarter_node_cnt;
+					bg_conf->quarter_node_cnt;
 			else 
 				job_desc->max_nodes = 
-					bluegene_bp_node_cnt;
+					bg_conf->bp_node_cnt;
 		
-			tmp = bluegene_bp_node_cnt/job_desc->max_nodes;
-			tmp = procs_per_node/tmp;
+			tmp = bg_conf->bp_node_cnt/job_desc->max_nodes;
+			tmp = bg_conf->procs_per_bp/tmp;
 			
 			select_g_set_jobinfo(job_desc->select_jobinfo,
 					     SELECT_DATA_MAX_PROCS, 
 					     &tmp);
 			job_desc->max_nodes = 1;
 #else
-			i = bluegene_smallest_block;
-			while(i <= bluegene_bp_node_cnt) {
+			i = bg_conf->smallest_block;
+			while(i <= bg_conf->bp_node_cnt) {
 				if(job_desc->max_nodes <= i) {
 					job_desc->max_nodes = i;
 					break;
@@ -994,7 +944,7 @@ extern int select_p_alter_node_cnt(enum select_node_cnt type, void *data)
 				i *= 2;
 			}
 			
-			tmp = job_desc->max_nodes * bluegene_proc_ratio;
+			tmp = job_desc->max_nodes * bg_conf->proc_ratio;
 			select_g_set_jobinfo(job_desc->select_jobinfo,
 					     SELECT_DATA_MAX_PROCS,
 					     &tmp);
@@ -1014,15 +964,130 @@ extern int select_p_alter_node_cnt(enum select_node_cnt type, void *data)
 
 extern int select_p_reconfigure(void)
 {
-	return SLURM_SUCCESS;
-}
+	slurm_conf_lock();
+	if(!slurmctld_conf.slurm_user_name 
+	   || strcmp(bg_conf->slurm_user_name, slurmctld_conf.slurm_user_name))
+		error("The slurm user has changed from '%s' to '%s'.  "
+		      "If this is really what you "
+		      "want you will need to restart slurm for this "
+		      "change to be enforced in the bluegene plugin.",
+		      bg_conf->slurm_user_name, slurmctld_conf.slurm_user_name);
+	if(!slurmctld_conf.node_prefix
+	   || strcmp(bg_conf->slurm_node_prefix, slurmctld_conf.node_prefix))
+		error("Node Prefix has changed from '%s' to '%s'.  "
+		      "If this is really what you "
+		      "want you will need to restart slurm for this "
+		      "change to be enforced in the bluegene plugin.",
+		      bg_conf->slurm_node_prefix, slurmctld_conf.node_prefix);
+	slurm_conf_unlock();	
 
-extern int select_p_step_begin(struct step_record *step_ptr)
-{
 	return SLURM_SUCCESS;
 }
 
-extern int select_p_step_fini(struct step_record *step_ptr)
+extern List select_p_get_config(void)
 {
-	return SLURM_SUCCESS;
+	config_key_pair_t *key_pair;
+	List my_list = list_create(destroy_config_key_pair);
+
+	if (!my_list)
+		fatal("malloc failure on list_create");
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("BasePartitionNodeCnt");
+	key_pair->value = xstrdup_printf("%u", bg_conf->bp_node_cnt);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("NodeCPUCnt");
+	key_pair->value = xstrdup_printf("%u", bg_conf->proc_ratio);
+	list_append(my_list, key_pair);
+
+
+#ifdef HAVE_BGL
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("BlrtsImage");
+	key_pair->value = xstrdup(bg_conf->default_blrtsimage);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("LinuxImage");
+	key_pair->value = xstrdup(bg_conf->default_linuximage);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("RamDiskImage");
+	key_pair->value = xstrdup(bg_conf->default_ramdiskimage);
+	list_append(my_list, key_pair);
+#else
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("CnloadImage");
+	key_pair->value = xstrdup(bg_conf->default_linuximage);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("IoloadImage");
+	key_pair->value = xstrdup(bg_conf->default_ramdiskimage);
+	list_append(my_list, key_pair);
+#endif
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("BridgeAPILogFile");
+	key_pair->value = xstrdup(bg_conf->bridge_api_file);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("BridgeAPIVerbose");
+	key_pair->value = xstrdup_printf("%u", bg_conf->bridge_api_verb);
+	list_append(my_list, key_pair);
+
+	if(bg_conf->deny_pass) {
+		key_pair = xmalloc(sizeof(config_key_pair_t));
+		key_pair->name = xstrdup("DenyPassThrough");
+		if(bg_conf->deny_pass & PASS_DENY_X)
+			xstrcat(key_pair->value, "X,");
+		if(bg_conf->deny_pass & PASS_DENY_Y)
+			xstrcat(key_pair->value, "Y,");
+		if(bg_conf->deny_pass & PASS_DENY_Z)
+			xstrcat(key_pair->value, "Z,");
+		if(key_pair->value)
+			key_pair->value[strlen(key_pair->value)-1] = '\0';
+		list_append(my_list, key_pair);
+	}
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("LayoutMode");
+	switch(bg_conf->layout_mode) {
+	case LAYOUT_STATIC:
+		key_pair->value = xstrdup("Static");
+		break;
+	case LAYOUT_OVERLAP:
+		key_pair->value = xstrdup("Overlap");
+		break;
+	case LAYOUT_DYNAMIC:
+		key_pair->value = xstrdup("Dynamic");
+		break;
+	default:
+		key_pair->value = xstrdup("Unknown");
+		break;
+	}
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("MloaderImage");
+	key_pair->value = xstrdup(bg_conf->default_mloaderimage);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("NodeCardNodeCnt");
+	key_pair->value = xstrdup_printf("%u", bg_conf->nodecard_node_cnt);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("Numpsets");
+	key_pair->value = xstrdup_printf("%u", bg_conf->numpsets);
+	list_append(my_list, key_pair);
+
+	list_sort(my_list, (ListCmpF) sort_key_pairs);
+
+	return my_list;
 }
diff --git a/src/plugins/select/bluegene/plugin/sfree.c b/src/plugins/select/bluegene/plugin/sfree.c
index 36db832cf..5c043f752 100644
--- a/src/plugins/select/bluegene/plugin/sfree.c
+++ b/src/plugins/select/bluegene/plugin/sfree.c
@@ -1,15 +1,16 @@
 /*****************************************************************************\
  *  sfree.c - free specified block or all blocks.
- *  $Id: sfree.c 16357 2009-01-30 18:05:07Z da $
+ *  $Id: sfree.c 17366 2009-04-28 23:04:14Z da $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -39,7 +40,7 @@
 
 #include "sfree.h"
 
-#define MAX_POLL_RETRIES    110
+#define MAX_POLL_RETRIES    220
 #define POLL_INTERVAL        3
 #define MAX_PTHREAD_RETRIES  1
 
@@ -292,10 +293,17 @@ static int _free_block(delete_record_t *delete_record)
 				if(rc == PARTITION_NOT_FOUND) {
 					info("block %s is not found");
 					break;
+				} else if(rc == INCOMPATIBLE_STATE) {
+					debug2("bridge_destroy_partition"
+					       "(%s): %s State = %d",
+					       delete_record->bg_block_id, 
+					       _bg_err_str(rc), 
+					       delete_record->state);
+				} else {
+					error("bridge_destroy_block(%s): %s",
+					      delete_record->bg_block_id,
+					      _bg_err_str(rc));
 				}
-				error("bridge_destroy_block(%s): %s",
-				      delete_record->bg_block_id,
-				      _bg_err_str(rc));
 			}
 #else
 			bg_record->state = RM_PARTITION_FREE;	
@@ -519,14 +527,15 @@ static char *_bg_err_str(status_t inx)
 /* Kill a job and remove its record from MMCS */
 static int _remove_job(db_job_id_t job_id)
 {
-	int i, rc;
+	int rc, count = 0;
 	rm_job_t *job_rec = NULL;
 	rm_job_state_t job_state;
 
 	info("removing job %d from MMCS", job_id);
-	for (i=0; i<MAX_POLL_RETRIES; i++) {
-		if (i > 0)
+	while(1) {
+		if (count)
 			sleep(POLL_INTERVAL);
+		count++;
 
 		/* Find the job */
 		if ((rc = bridge_get_job(job_id, &job_rec)) != STATUS_OK) {
@@ -560,17 +569,30 @@ static int _remove_job(db_job_id_t job_id)
 		/* check the state and process accordingly */
 		if(job_state == RM_JOB_TERMINATED)
 			return STATUS_OK;
-		else if(job_state == RM_JOB_DYING)
+		else if(job_state == RM_JOB_DYING) {
+			if(count > MAX_POLL_RETRIES) 
+				error("Job %d isn't dying, trying for "
+				      "%d seconds", count*POLL_INTERVAL);
 			continue;
-		else if(job_state == RM_JOB_ERROR) {
+		} else if(job_state == RM_JOB_ERROR) {
 			error("job %d is in a error state.", job_id);
 			
 			//free_bg_block();
 			return STATUS_OK;
 		}
 
-		(void) bridge_signal_job(job_id, SIGKILL);
-		rc = bridge_cancel_job(job_id);
+		/* we have been told the next 2 lines do the same
+		 * thing, but I don't believe it to be true.  In most
+		 * cases when you do a signal of SIGTERM the mpirun
+		 * process gets killed with a SIGTERM.  In the case of
+		 * bridge_cancel_job it always gets killed with a
+		 * SIGKILL.  From IBM's point of view that is a bad
+		 * deally, so we are going to use signal ;).
+		 */
+
+//		 rc = bridge_cancel_job(job_id);
+		 rc = bridge_signal_job(job_id, SIGTERM);
+
 		if (rc != STATUS_OK) {
 			if (rc == JOB_NOT_FOUND) {
 				debug("job %d removed from MMCS", job_id);
diff --git a/src/plugins/select/bluegene/plugin/sfree.h b/src/plugins/select/bluegene/plugin/sfree.h
index f8bad5a1c..7bbfdcc73 100644
--- a/src/plugins/select/bluegene/plugin/sfree.h
+++ b/src/plugins/select/bluegene/plugin/sfree.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/plugins/select/bluegene/plugin/slurm_epilog.c b/src/plugins/select/bluegene/plugin/slurm_epilog.c
index a281e5e73..68d8466df 100644
--- a/src/plugins/select/bluegene/plugin/slurm_epilog.c
+++ b/src/plugins/select/bluegene/plugin/slurm_epilog.c
@@ -3,15 +3,16 @@
  *      owned by this user. This is executed via SLURM to synchronize the 
  *      user's job execution with slurmctld configuration of partitions.
  *
- * $Id: slurm_epilog.c 13672 2008-03-19 23:10:58Z jette $
+ * $Id: slurm_epilog.c 17313 2009-04-21 20:28:06Z lipari $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -78,15 +79,15 @@ int main(int argc, char *argv[])
 	char *job_id_char = NULL;
 	uint32_t job_id;
 
-	job_id_char = getenv("SLURM_JOBID");		/* get SLURM job ID */
+	job_id_char = getenv("SLURM_JOB_ID");		/* get SLURM job ID */
 	if (!job_id_char) {
-		fprintf(stderr, "SLURM_JOBID not set\n");
+		fprintf(stderr, "SLURM_JOB_ID not set\n");
 		exit(0);
 	}
 
 	job_id = (uint32_t) atol(job_id_char);
 	if (job_id == 0) {
-		fprintf(stderr, "SLURM_JOBID invalid: %s\n", job_id_char);
+		fprintf(stderr, "SLURM_JOB_ID invalid: %s\n", job_id_char);
 		exit(0);
 	}
 
diff --git a/src/plugins/select/bluegene/plugin/slurm_prolog.c b/src/plugins/select/bluegene/plugin/slurm_prolog.c
index 07f27e96e..ef33f4bc7 100644
--- a/src/plugins/select/bluegene/plugin/slurm_prolog.c
+++ b/src/plugins/select/bluegene/plugin/slurm_prolog.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -79,15 +80,15 @@ int main(int argc, char *argv[])
 	char *job_id_char = NULL;
 	uint32_t job_id;
 
-	job_id_char = getenv("SLURM_JOBID");		/* get SLURM job ID */
+	job_id_char = getenv("SLURM_JOB_ID");		/* get SLURM job ID */
 	if (!job_id_char) {
-		fprintf(stderr, "SLURM_JOBID not set\n");
+		fprintf(stderr, "SLURM_JOB_ID not set\n");
 		exit(1);				/* abort job */
 	}
 
 	job_id = (uint32_t) atol(job_id_char);
 	if (job_id == 0) {
-		fprintf(stderr, "SLURM_JOBID invalid: %s\n", job_id_char);
+		fprintf(stderr, "SLURM_JOB_ID invalid: %s\n", job_id_char);
 		exit(1);				/* abort job */
 	}
 
diff --git a/src/plugins/select/bluegene/plugin/state_test.c b/src/plugins/select/bluegene/plugin/state_test.c
index 0d32e0e2c..2c636d91f 100644
--- a/src/plugins/select/bluegene/plugin/state_test.c
+++ b/src/plugins/select/bluegene/plugin/state_test.c
@@ -2,14 +2,15 @@
  *  state_test.c - Test state of Bluegene base partitions and switches. 
  *  DRAIN nodes in SLURM that are not usable. 
  *
- *  $Id: state_test.c 17202 2009-04-09 16:56:23Z da $
+ *  $Id: state_test.c 17317 2009-04-21 21:39:50Z da $
  *****************************************************************************
  *  Copyright (C) 2004-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dan Phung <phung4@llnl.gov> and Morris Jette <jette1@llnl.gov>
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -121,7 +122,7 @@ static void _configure_node_down(rm_bp_id_t bp_id, my_bluegene_t *my_bg)
 		}
 		
 		snprintf(bg_down_node, sizeof(bg_down_node), "%s%c%c%c", 
-			 bg_slurm_node_prefix,
+			 bg_conf->slurm_node_prefix,
 			 alpha_num[bp_loc.X], alpha_num[bp_loc.Y],
 			 alpha_num[bp_loc.Z]);
 		
@@ -157,7 +158,7 @@ static int _test_down_nodecards(rm_BP_t *bp_ptr)
 	//int io_cnt = 1;
 
 	/* Translate 1 nodecard count to ionode count */
-/* 	if((io_cnt *= bluegene_io_ratio)) */
+/* 	if((io_cnt *= bg_conf->io_ratio)) */
 /* 		io_cnt--; */
 
 	if ((rc = bridge_get_data(bp_ptr, RM_BPID, &bp_id))
@@ -182,9 +183,18 @@ static int _test_down_nodecards(rm_BP_t *bp_ptr)
 		rc = SLURM_ERROR;
 		goto clean_up;
 	}
-	
+
+	/* make sure we have this midplane in the system */
+	if(coord[X] >= DIM_SIZE[X]
+	   || coord[Y] >= DIM_SIZE[Y]
+	   || coord[Z] >= DIM_SIZE[Z]) {
+		debug4("node %s isn't configured", bp_id);
+		rc = SLURM_SUCCESS;
+		goto clean_up;
+	}
+
 	node_name = xstrdup_printf("%s%c%c%c",
-				   bg_slurm_node_prefix,
+				   bg_conf->slurm_node_prefix,
 				   alpha_num[coord[X]], 
 				   alpha_num[coord[Y]],
 				   alpha_num[coord[Z]]);
@@ -253,20 +263,37 @@ static int _test_down_nodecards(rm_BP_t *bp_ptr)
 			error("bridge_get_data(CardQuarter): %d",rc);
 			goto clean_up;
 		}
-		io_start *= bluegene_quarter_ionode_cnt;
-		io_start += bluegene_nodecard_ionode_cnt * (i%4);
+		io_start *= bg_conf->quarter_ionode_cnt;
+		io_start += bg_conf->nodecard_ionode_cnt * (i%4);
 #else
 		/* From the first nodecard id we can figure
 		   out where to start from with the alloc of ionodes.
 		*/
 		io_start = atoi((char*)nc_name+1);
-		io_start *= bluegene_io_ratio;
+		io_start *= bg_conf->io_ratio;
 #endif
-
+		/* On small systems with less than a midplane the
+		   database may see the nodecards there but in missing
+		   state.  To avoid getting a bunch of warnings here just
+		   skip over the ones missing.
+		*/
+		if(io_start >= bg_conf->numpsets) {
+			if(state == RM_NODECARD_MISSING) {
+				debug3("Nodecard %s is missing continue",
+				       nc_name);
+			} else {
+				error("We don't have the system configured "
+				      "for this nodecard %s, we only have "
+				      "%d ionodes and this starts at %d", 
+				      nc_name, io_start, bg_conf->numpsets);
+			}
+			free(nc_name);
+			continue;
+		}
 /* 		if(!ionode_bitmap)  */
-/* 			ionode_bitmap = bit_alloc(bluegene_numpsets); */
-/* 		info("setting %d-%d of %d", */
-/* 		     io_start, io_start+io_cnt, bluegene_numpsets); */
+/* 			ionode_bitmap = bit_alloc(bg_conf->numpsets); */
+/* 		info("setting %s start %d of %d", */
+/* 		     nc_name,  io_start, bg_conf->numpsets); */
 /* 		bit_nset(ionode_bitmap, io_start, io_start+io_cnt); */
 		/* we have to handle each nodecard separately to make
 		   sure we don't create holes in the system */
@@ -294,7 +321,7 @@ static int _test_down_nodecards(rm_BP_t *bp_ptr)
 /* 		info("no ionode_bitmap"); */
 /* 		ListIterator itr = NULL; */
 /* 		slurm_mutex_lock(&block_state_mutex); */
-/* 		itr = list_iterator_create(bg_list); */
+/* 		itr = list_iterator_create(bg_lists->main); */
 /* 		while ((bg_record = list_next(itr))) { */
 /* 			if(bg_record->job_running != BLOCK_ERROR_STATE) */
 /* 				continue; */
diff --git a/src/plugins/select/bluegene/plugin/state_test.h b/src/plugins/select/bluegene/plugin/state_test.h
index b6a96d99f..4134be4e1 100644
--- a/src/plugins/select/bluegene/plugin/state_test.h
+++ b/src/plugins/select/bluegene/plugin/state_test.h
@@ -1,13 +1,14 @@
 /*****************************************************************************\
  *  state_test.h - header for Blue Gene node and switch state test. 
- *  $Id: state_test.h 17102 2009-03-31 23:23:01Z da $
+ *  $Id: state_test.h 17121 2009-04-02 18:55:59Z da $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dan Phung <phung4@llnl.gov> et. al.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/select/cons_res/Makefile.am b/src/plugins/select/cons_res/Makefile.am
index fc88fa6fe..631d2dc97 100644
--- a/src/plugins/select/cons_res/Makefile.am
+++ b/src/plugins/select/cons_res/Makefile.am
@@ -10,5 +10,6 @@ pkglib_LTLIBRARIES = select_cons_res.la
 
 # Consumable resources node selection plugin.
 select_cons_res_la_SOURCES =  select_cons_res.c select_cons_res.h \
-                              dist_tasks.c dist_tasks.h
+                              dist_tasks.c dist_tasks.h \
+			      job_test.c job_test.h
 select_cons_res_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
diff --git a/src/plugins/select/cons_res/Makefile.in b/src/plugins/select/cons_res/Makefile.in
index 4370a64e6..da73591e0 100644
--- a/src/plugins/select/cons_res/Makefile.in
+++ b/src/plugins/select/cons_res/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,7 +81,8 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)"
 pkglibLTLIBRARIES_INSTALL = $(INSTALL)
 LTLIBRARIES = $(pkglib_LTLIBRARIES)
 select_cons_res_la_LIBADD =
-am_select_cons_res_la_OBJECTS = select_cons_res.lo dist_tasks.lo
+am_select_cons_res_la_OBJECTS = select_cons_res.lo dist_tasks.lo \
+	job_test.lo
 select_cons_res_la_OBJECTS = $(am_select_cons_res_la_OBJECTS)
 select_cons_res_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@@ -109,6 +114,10 @@ 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@
@@ -275,7 +284,8 @@ pkglib_LTLIBRARIES = select_cons_res.la
 
 # Consumable resources node selection plugin.
 select_cons_res_la_SOURCES = select_cons_res.c select_cons_res.h \
-                              dist_tasks.c dist_tasks.h
+                              dist_tasks.c dist_tasks.h \
+			      job_test.c job_test.h
 
 select_cons_res_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
 all: all-am
@@ -348,6 +358,7 @@ distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dist_tasks.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job_test.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select_cons_res.Plo@am__quote@
 
 .c.o:
diff --git a/src/plugins/select/cons_res/dist_tasks.c b/src/plugins/select/cons_res/dist_tasks.c
index deafd2fd3..2036353a8 100644
--- a/src/plugins/select/cons_res/dist_tasks.c
+++ b/src/plugins/select/cons_res/dist_tasks.c
@@ -1,15 +1,14 @@
 /*****************************************************************************\
  *  dist_tasks - Assign task count to {socket,core,thread} or CPU
  *               resources
- *
- *  $Id: dist_tasks.c,v 1.3 2006/10/31 19:31:31 palermo Exp $
  ***************************************************************************** 
- *  Copyright (C) 2006 Hewlett-Packard Development Company, L.P.
+ *  Copyright (C) 2006-2008 Hewlett-Packard Development Company, L.P.
  *  Written by Susanne M. Balle, <susanne.balle@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -40,10 +39,19 @@
 #include "select_cons_res.h"
 #include "dist_tasks.h"
 
-#if (0)
+#if(0)
 #define CR_DEBUG 1
 #endif
 
+#if(0)
+/* Using CR_SOCKET or CR_SOCKET_MEMORY will not allocate a socket to more
+ * than one job at a time, but it also will not grant a job access to more
+ * CPUs on the socket than requested. If ALLOCATE_FULL_SOCKET is defined,
+ * then a job will be given access to every cores on each allocated socket.
+ */
+#define ALLOCATE_FULL_SOCKET 1
+#endif
+
 /* _compute_task_c_b_task_dist - compute the number of tasks on each
  * of the node for the cyclic and block distribution. We need to do
  * this in the case of consumable resources so that we have an exact
@@ -57,313 +65,278 @@
  * resources.
  *
  * IN/OUT job_ptr - pointer to job being scheduled. The per-node
- *                  job->alloc_cpus array is computed here.
+ *                  job_res->cpus array is recomputed here.
  *
  */
-int compute_c_b_task_dist(struct select_cr_job *job)
+static int _compute_c_b_task_dist(struct job_record *job_ptr)
 {
-	int i, j, rc = SLURM_SUCCESS;
-	bool over_commit = false;
 	bool over_subscribe = false;
-	uint32_t taskid = 0, last_taskid, maxtasks = job->nprocs;
+	uint32_t n, i, tid, maxtasks;
+	uint16_t *avail_cpus;
+	select_job_res_t job_res = job_ptr->select_job;
+	if (!job_res || !job_res->cpus) {
+		error("cons_res: _compute_c_b_task_dist given NULL job_ptr");
+		return SLURM_ERROR;
+	}
 
-	if (job->job_ptr->details && job->job_ptr->details->overcommit)
-		over_commit = true;
+	maxtasks = job_res->nprocs;
+	avail_cpus = job_res->cpus;
+	job_res->cpus = xmalloc(job_res->nhosts * sizeof(uint16_t));
 
-	for (j = 0; (taskid < maxtasks); j++) {	/* cycle counter */
+	for (tid = 0, i = 0; (tid < maxtasks); i++) { /* cycle counter */
 		bool space_remaining = false;
-		last_taskid = taskid;
-		for (i = 0; ((i < job->nhosts) && (taskid < maxtasks)); i++) {
-			if ((j < job->cpus[i]) || over_subscribe) {
-				taskid++;
-				if ((job->alloc_cpus[i] == 0) ||
-				    (!over_commit))
-					job->alloc_cpus[i]++;
-				if ((j + 1) < job->cpus[i])
+		if (over_subscribe) {
+			/* 'over_subscribe' is a relief valve that guards
+			 * against an infinite loop, and it *should* never
+			 * come into play because maxtasks should never be
+			 * greater than the total number of available cpus
+			 */
+			error("cons_res: _compute_c_b_task_dist oversubscribe");
+		}
+		for (n = 0; ((n < job_res->nhosts) && (tid < maxtasks)); n++) {
+			if ((i < avail_cpus[n]) || over_subscribe) {
+				tid++;
+				if (job_res->cpus[n] < avail_cpus[n])
+					job_res->cpus[n]++;
+				if ((i + 1) < avail_cpus[n])
 					space_remaining = true;
 			}
 		}
-		if (!space_remaining)
+		if (!space_remaining) {
 			over_subscribe = true;
-		if (last_taskid == taskid) {
-			/* avoid infinite loop */
-			error("compute_c_b_task_dist failure");
-			rc = SLURM_ERROR;
-			break;
 		}
 	}
-
-#if (CR_DEBUG)	
-	for (i = 0; i < job->nhosts; i++) {
-		info("cons_res _c_b_task_dist %u host_index %d nprocs %u "
-		     "maxtasks %u cpus %u alloc_cpus %u", 
-		     job->job_id, i, job->nprocs, 
-		     maxtasks, job->cpus[i], job->alloc_cpus[i]);
-	}
-#endif	
-
-	return rc;
+	xfree(avail_cpus);
+	return SLURM_SUCCESS;
 }
 
-/* scan all rows looking for the best fit, and return the offset */
-static int _find_offset(struct select_cr_job *job, const int job_index,
-			uint16_t cores, uint16_t sockets, uint32_t maxcores,
-			const select_type_plugin_info_t cr_type,
-			struct node_cr_record *this_cr_node)
-{
-	struct part_cr_record *p_ptr;
-	int i, j, index, offset, skip;
-	uint16_t acores, asockets, freecpus, last_freecpus = 0;
-	struct multi_core_data *mc_ptr;
 
-	p_ptr = get_cr_part_ptr(this_cr_node, job->job_ptr->part_ptr);
-	if (p_ptr == NULL)
-		abort();
-	mc_ptr = job->job_ptr->details->mc_ptr;
+/* distribute blocks (planes) of tasks cyclically */
+static int _compute_plane_dist(struct job_record *job_ptr)
+{
+	bool over_subscribe = false;
+	uint32_t n, i, p, tid, maxtasks;
+	uint16_t *avail_cpus, plane_size = 1;
+	select_job_res_t job_res = job_ptr->select_job;
+	if (!job_res || !job_res->cpus) {
+		error("cons_res: _compute_plane_dist given NULL job_res");
+		return SLURM_ERROR;
+	}
 
-	index = -1;
-	for (i = 0; i < p_ptr->num_rows; i++) {
-		acores = 0;
-		asockets = 0;
-		skip = 0;
-		offset = i * this_cr_node->sockets;
-		for (j = 0; j < this_cr_node->sockets; j++) {
-			if ((cores - p_ptr->alloc_cores[offset+j]) <
-							mc_ptr->min_cores) {
-				/* count the number of unusable sockets */
-				skip++;
-				acores += cores;
-			} else { 
-				acores += p_ptr->alloc_cores[offset+j];
-			}
-			if (p_ptr->alloc_cores[offset+j])
-				asockets++;
-		}
-		/* make sure we have the required number of usable sockets */
-		if (skip && ((sockets - skip) < mc_ptr->min_sockets))
-			continue;
-		/* CR_SOCKET needs UNALLOCATED sockets */
-		if ((cr_type == CR_SOCKET) || (cr_type == CR_SOCKET_MEMORY)) {
-			if (sockets - asockets < mc_ptr->min_sockets)
-				continue;
-		}
+	maxtasks = job_res->nprocs;
+	avail_cpus = job_res->cpus;
+	
+	if (job_ptr->details && job_ptr->details->mc_ptr)
+		plane_size = job_ptr->details->mc_ptr->plane_size;
 
-		freecpus = (cores * sockets) - acores;
-		if (freecpus < maxcores)
-			continue;
+	if (plane_size <= 0) {
+		error("cons_res: _compute_plane_dist received invalid plane_size");
+		return SLURM_ERROR;
+	}
+	job_res->cpus = xmalloc(job_res->nhosts * sizeof(uint16_t));
 
-		if (index < 0) {
-			index = i;
-			last_freecpus = freecpus;
+	for (tid = 0, i = 0; (tid < maxtasks); i++) { /* cycle counter */
+		bool space_remaining = false;
+		if (over_subscribe) {
+			/* 'over_subscribe' is a relief valve that guards
+			 * against an infinite loop, and it *should* never
+			 * come into play because maxtasks should never be
+			 * greater than the total number of available cpus
+			 */
+			error("cons_res: _compute_plane_dist oversubscribe");
 		}
-		if (freecpus < last_freecpus) {
-			index = i;
-			last_freecpus = freecpus;
+		for (n = 0; ((n < job_res->nhosts) && (tid < maxtasks)); n++) {
+			for (p = 0; p < plane_size && (tid < maxtasks); p++) {
+				if ((job_res->cpus[n] < avail_cpus[n]) ||
+				    over_subscribe) {
+					tid++;
+					if (job_res->cpus[n] < avail_cpus[n])
+						job_res->cpus[n]++;
+				}
+			}
+			if (job_res->cpus[n] < avail_cpus[n])
+				space_remaining = true;
+		}
+		if (!space_remaining) {
+			over_subscribe = true;
 		}
 	}
-	if (index < 0) {
-		/* This may happen if a node has fewer nodes than
-		 * configured and FastSchedule=2 */
-		error("job_assign_task: failure in computing offset");
-		index = 0;
-	}
-
-	return index * this_cr_node->sockets;
+	xfree(avail_cpus);
+	return SLURM_SUCCESS;
 }
 
-/*  _job_assign_tasks: Assign tasks to hardware for block and cyclic
- *  distributions */
-static int _job_assign_tasks(struct select_cr_job *job, 
-			struct node_cr_record *this_cr_node,
-			const int job_index, 
-			const select_type_plugin_info_t cr_type,
-			const int cyclic) 
+/* sync up core bitmap with new CPU count
+ *
+ * The CPU array contains the distribution of CPUs, which can include
+ * virtual CPUs (hyperthreads)
+ */
+static void _block_sync_core_bitmap(struct job_record *job_ptr,
+				    const select_type_plugin_info_t cr_type)
 {
-	int i, j, rc = SLURM_SUCCESS;
-	uint16_t cores, cpus, sockets, threads;
-	uint16_t usable_cores, usable_sockets, usable_threads;
-	uint16_t *avail_cores = NULL;
-	uint32_t corecount, last_corecount;
-	uint16_t asockets, offset, total;
-	uint32_t maxcores, reqcores, maxtasks = job->alloc_cpus[job_index];
-	struct part_cr_record *p_ptr;
-	struct multi_core_data *mc_ptr;
-	
-	p_ptr = get_cr_part_ptr(this_cr_node, job->job_ptr->part_ptr);
-	if (p_ptr == NULL)
-		return SLURM_ERROR;
+	uint32_t c, i, n, size, csize;
+	uint16_t cpus, num_bits, vpus = 1;
+	select_job_res_t job_res = job_ptr->select_job;
+	bool alloc_sockets = false;
 
-	if ((job->job_ptr == NULL) || (job->job_ptr->details == NULL)) {
-		/* This should never happen */
-		error("cons_res: job %u has no details", job->job_id);
-		return SLURM_ERROR;
-	}
-	if (!job->job_ptr->details->mc_ptr)
-		job->job_ptr->details->mc_ptr = create_default_mc();
-	mc_ptr = job->job_ptr->details->mc_ptr;
+	if (!job_res)
+		return;
 
-	/* get hardware info for this node */	
-	get_resources_this_node(&cpus,  &sockets, &cores, &threads, 
-				this_cr_node, job->job_id);
+#ifdef ALLOCATE_FULL_SOCKET
+	if ((cr_type == CR_SOCKET) || (cr_type == CR_SOCKET_MEMORY))
+		alloc_sockets = true;
+#endif
 
-	/* compute any job limits */	
-	usable_sockets = MIN(mc_ptr->max_sockets, sockets);
-	usable_cores   = MIN(mc_ptr->max_cores,   cores);
-	usable_threads = MIN(mc_ptr->max_threads, threads);
+	size  = bit_size(job_res->node_bitmap);
+	csize = bit_size(job_res->core_bitmap);
+	for (c = 0, i = 0, n = 0; n < size; n++) {
+		
+		if (bit_test(job_res->node_bitmap, n) == 0)
+			continue;
+		num_bits = select_node_record[n].sockets *
+				select_node_record[n].cores;
+		if ((c + num_bits) > csize)
+			fatal ("cons_res: _block_sync_core_bitmap index error");
+		
+		cpus  = job_res->cpus[i++];
+		if (job_ptr->details && job_ptr->details->mc_ptr) {
+			vpus  = MIN(job_ptr->details->mc_ptr->max_threads,
+				    select_node_record[n].vpus);
+		}
 
-	/* determine the number of required cores. When multiple threads
-	 * are available, the maxtasks value may not reflect the requested
-	 * core count, which is what we are seeking here. */
-	if (job->job_ptr->details->overcommit) {
-		maxcores = 1;
-		reqcores = 1;
-	} else {
-		maxcores = maxtasks / usable_threads;
-		while ((maxcores * usable_threads) < maxtasks)
-			maxcores++;
-		reqcores = mc_ptr->min_cores * mc_ptr->min_sockets;
-		if (maxcores < reqcores)
-			maxcores = reqcores;
+		while (cpus > 0 && num_bits > 0) {
+			if (bit_test(job_res->core_bitmap, c++)) {
+				if (cpus < vpus)
+					cpus = 0;
+				else
+					cpus -= vpus;
+			}
+			num_bits--;
+		}
+		if (cpus > 0)
+			/* cpu count should NEVER be greater than the number
+			 * of set bits in the core bitmap for a given node */
+			fatal("cons_res: cpus computation error");
+
+		if (alloc_sockets) {	/* Advance to end of socket */
+			while ((num_bits > 0) && 
+			       (c % select_node_record[n].cores)) {
+				c++;
+				num_bits--;
+			}
+		}
+		while (num_bits > 0) {
+			bit_clear(job_res->core_bitmap, c++);
+			num_bits--;
+		}
+		
 	}
+}
 
-	offset = _find_offset(job, job_index, cores, sockets, maxcores, cr_type,
-			      this_cr_node);
-	job->node_offset[job_index] = offset;
 
-	debug3("job_assign_task %u s_ min %u u %u c_ min %u u %u"
-	       " t_ min %u u %u task %u core %u offset %u", 
-	       job->job_id, mc_ptr->min_sockets, usable_sockets, 
-	       mc_ptr->min_cores, usable_cores, mc_ptr->min_threads, 
-	       usable_threads, maxtasks, maxcores, offset);
+/* Sync up the core_bitmap with the CPU array using cyclic distribution
+ *
+ * The CPU array contains the distribution of CPUs, which can include
+ * virtual CPUs (hyperthreads)
+ */
+static void _cyclic_sync_core_bitmap(struct job_record *job_ptr,
+				     const select_type_plugin_info_t cr_type)
+{
+	uint32_t c, i, s, n, *sock_start, *sock_end, size, csize;
+	uint16_t cps = 0, cpus, vpus, sockets, sock_size;
+	select_job_res_t job_res = job_ptr->select_job;
+	bitstr_t *core_map;
+	bool *sock_used, alloc_sockets = false;
+
+	if ((job_res == NULL) || (job_res->core_bitmap == NULL))
+		return;
+
+#ifdef ALLOCATE_FULL_SOCKET
+	if ((cr_type == CR_SOCKET) || (cr_type == CR_SOCKET_MEMORY))
+		alloc_sockets = true;
+#endif
 
-	avail_cores = xmalloc(sizeof(uint16_t) * sockets);
-	/* initialized to zero by xmalloc */
+	core_map = job_res->core_bitmap;
 
-	total = 0;
-	asockets = 0;
-	for (i = 0; i < sockets; i++) {
-		if ((total >= maxcores) && (asockets >= mc_ptr->min_sockets)) {
-			break;
-		}
-		if (this_cr_node->cores <= p_ptr->alloc_cores[offset+i]) {
-			continue;
-		}
-		/* for CR_SOCKET, we only want to allocate empty sockets */
-		if ((cr_type == CR_SOCKET || cr_type == CR_SOCKET_MEMORY) &&
-		    (p_ptr->alloc_cores[offset+i] > 0))
-			continue;
-		avail_cores[i] = this_cr_node->cores - 
-				 p_ptr->alloc_cores[offset+i];
-		if (usable_cores <= avail_cores[i]) {
-			avail_cores[i] = usable_cores;
-		} else if (mc_ptr->min_cores > avail_cores[i]) {
-			avail_cores[i] = 0;
-		}
-		if (avail_cores[i] > 0) {
-			total += avail_cores[i];
-			asockets++;
-		}
-	}
+	sock_size  = select_node_record[0].sockets;
+	sock_start = xmalloc(sock_size * sizeof(uint32_t));
+	sock_end   = xmalloc(sock_size * sizeof(uint32_t));
+	sock_used  = xmalloc(sock_size * sizeof(bool));
 	
-#if(CR_DEBUG)
-    	for (i = 0; i < sockets; i+=2) {
-		info("cons_res: assign_task: avail_cores[%d]=%u, [%d]=%u", i,
-		     avail_cores[i], i+1, avail_cores[i+1]);
-	}
+	size  = bit_size(job_res->node_bitmap);
+	csize = bit_size(core_map);
+	for (c = 0, i = 0, n = 0; n < size; n++) {
+		
+		if (bit_test(job_res->node_bitmap, n) == 0)
+			continue;
+		sockets = select_node_record[n].sockets;
+		cps     = select_node_record[n].cores;
+		vpus    = MIN(job_ptr->details->mc_ptr->max_threads,
+			      select_node_record[n].vpus);
+#ifdef CR_DEBUG
+		info("DEBUG: job %u node %s max_threads %u, vpus %u cpus %u",
+		     job_ptr->job_id, select_node_record[n].node_ptr->name,
+		     job_ptr->details->mc_ptr->max_threads, vpus,
+		     job_res->cpus[i]);
 #endif
-	if (asockets == 0) {
-		/* Should never get here but just in case */
-		error("cons_res: %u Zero sockets satisfy"
-		      " request -B %u:%u: Using alternative strategy",
-		      job->job_id, mc_ptr->min_sockets, mc_ptr->min_cores);
-		for (i = 0; i < sockets; i++) {
-			if (this_cr_node->cores <= p_ptr->alloc_cores[offset+i])
-				continue;
-			avail_cores[i] = this_cr_node->cores - 
-				p_ptr->alloc_cores[offset+i];
+		if ((c + (sockets * cps)) > csize)
+			fatal ("cons_res: _cyclic_sync_core_bitmap index error");
+
+		if (sockets > sock_size) {
+			sock_size = sockets;
+			xrealloc(sock_start, sock_size * sizeof(uint32_t));
+			xrealloc(sock_end,   sock_size * sizeof(uint32_t));
+			xrealloc(sock_used,  sock_size * sizeof(bool));
 		}
-	}
-	
-	if (asockets < mc_ptr->min_sockets) {
-		error("cons_res: %u maxcores %u Cannot satisfy"
-		      " request -B %u:%u: Using -B %u:%u",
-		      job->job_id, maxcores, mc_ptr->min_sockets, 
-		      mc_ptr->min_cores, asockets, mc_ptr->min_cores);
-	}
+		
+		for (s = 0; s < sockets; s++) {
+			sock_start[s] = c + (s * cps);
+			sock_end[s]   = sock_start[s] + cps;
+		}
+		cpus  = job_res->cpus[i++];
+		while (cpus > 0) {
+			uint16_t prev_cpus = cpus;
+			for (s = 0; s < sockets && cpus > 0; s++) {
+
+				while (sock_start[s] < sock_end[s]) {
+					if (bit_test(core_map,sock_start[s])) {
+						sock_used[s] = true;
+						break;
+					} else
+						sock_start[s]++;
+				}
 
-	corecount = 0;
-	if (cyclic) {
-		/* distribute tasks cyclically across the sockets */
-		for (i=1; corecount<maxcores; i++) {
-			last_corecount = corecount;
-			for (j=0; ((j<sockets) && (corecount<maxcores)); j++) {
-				if (avail_cores[j] == 0)
+				if (sock_start[s] == sock_end[s])
+					/* this socket is unusable*/
 					continue;
-				if (i<=avail_cores[j]) {
-					job->alloc_cores[job_index][j]++;
-					corecount++;
-				}
+				if (cpus < vpus)
+					cpus = 0;
+				else
+					cpus -= vpus;
+				sock_start[s]++;
 			}
-			if (last_corecount == corecount) {
-				/* Avoid possible infinite loop on error */
-				error("_job_assign_tasks failure");
-				rc = SLURM_ERROR;
-				goto fini;
+			if (prev_cpus == cpus) {
+				/* we're stuck!*/
+				fatal("cons_res: sync loop not progressing");
 			}
 		}
-	} else {
-		/* distribute tasks in blocks across the sockets */
-		for (j=0; ((j<sockets) && (corecount<maxcores)); j++) {
-			last_corecount = corecount;
-			if (avail_cores[j] == 0)
+		/* clear the rest of the cores in each socket
+		 * FIXME: do we need min_core/min_socket checks here? */
+		for (s = 0; s < sockets; s++) {
+			if (sock_start[s] == sock_end[s])
 				continue;
-			for (i = 0; (i < avail_cores[j]) && 
-				    (corecount<maxcores); i++) {
-				job->alloc_cores[job_index][j]++;
-				corecount++;
-			}
-			if (last_corecount == corecount) {
-				/* Avoid possible infinite loop on error */
-				error("_job_assign_tasks failure");
-				rc = SLURM_ERROR;
-				goto fini;
+			if (!alloc_sockets || !sock_used[s]) {
+				bit_nclear(core_map, sock_start[s], 
+					   sock_end[s]-1);
 			}
 		}
+		/* advance 'c' to the beginning of the next node */
+		c += sockets * cps;
 	}
- fini:	xfree(avail_cores);
-	return rc;
+	xfree(sock_start);
+	xfree(sock_end);
+	xfree(sock_used);
 }
 
-static uint16_t _get_cpu_offset(struct select_cr_job *job, int index,
-				struct node_cr_record *this_node)
-{
-	int i, set = 0;
-	uint16_t cpus, sockets, cores, threads, besto = 0, offset = 0;
-	struct part_cr_record *p_ptr;
-
-	p_ptr = get_cr_part_ptr(this_node, job->job_ptr->part_ptr);
-	if ((p_ptr == NULL) || (p_ptr->num_rows < 2))
-		return offset;
-
-	get_resources_this_node(&cpus, &sockets, &cores, &threads,
-	        		this_node, job->job_id);
-	/* scan all rows looking for the best row for job->alloc_cpus[index] */
-	for (i = 0; i < p_ptr->num_rows; i++) {
-		if ((cpus - p_ptr->alloc_cores[offset]) >=
-						job->alloc_cpus[index]) {
-			if (!set) {
-				set = 1;
-				besto = offset;
-			}
-			if (p_ptr->alloc_cores[offset] >
-						p_ptr->alloc_cores[besto]) {
-				besto = offset;
-			}
-		}
-		offset += this_node->sockets;
-	}
-	return besto;
-}
 
 /* To effectively deal with heterogeneous nodes, we fake a cyclic
  * distribution to figure out how many cpus are needed on each node.
@@ -375,7 +348,7 @@ static uint16_t _get_cpu_offset(struct select_cr_job *job, int index,
  *
  * For the consumable resources support we need to determine what
  * "node/CPU/Core/thread"-tuplets will be allocated for a given job.
- * In the past we assumed that we only allocated on task per CPU (at
+ * In the past we assumed that we only allocated one task per CPU (at
  * that point the lowest level of logical processor) and didn't allow
  * the use of overcommit. We have change this philosophy and are now
  * allowing people to overcommit their resources and expect the system
@@ -385,232 +358,75 @@ static uint16_t _get_cpu_offset(struct select_cr_job *job, int index,
  *
  * In the consumable resources environment we need to determine the
  * layout schema within slurmctld.
-*/
-extern int cr_dist(struct select_cr_job *job, int cyclic,
+ *
+ * We have a core_bitmap of all available cores. All we're doing here
+ * is removing cores that are not needed based on the task count, and
+ * the choice of cores to remove is based on the distribution:
+ * - "cyclic" removes cores "evenly", starting from the last socket,
+ * - "block" removes cores from the "last" socket(s)
+ * - "plane" removes cores "in chunks"
+ */
+extern int cr_dist(struct job_record *job_ptr,
 		   const select_type_plugin_info_t cr_type)
 {
-	int i, cr_cpu = 0, rc = SLURM_SUCCESS; 
-	uint32_t taskcount = 0;
-	int host_index;
-	int job_index = -1;
-
-	int error_code = compute_c_b_task_dist(job);
-	if (error_code != SLURM_SUCCESS) {
-		error(" Error in compute_c_b_task_dist");
-		return error_code;
+	int error_code, cr_cpu = 1; 
+	
+	if (job_ptr->select_job->node_req == NODE_CR_RESERVED) {
+		/* the job has been allocated an EXCLUSIVE set of nodes,
+		 * so it gets all of the bits in the core_bitmap and
+		 * all of the available CPUs in the cpus array */
+		int size = bit_size(job_ptr->select_job->core_bitmap);
+		bit_nset(job_ptr->select_job->core_bitmap, 0, size-1);
+		return SLURM_SUCCESS;
 	}
-
-	if ((cr_type == CR_CPU) || (cr_type == CR_MEMORY) ||
-	    (cr_type == CR_CPU_MEMORY)) 
-		cr_cpu = 1;
-
-	for (host_index = 0; 
-	     ((host_index < node_record_count) && (taskcount < job->nprocs));
-	     host_index++) {
-		struct node_cr_record *this_cr_node;
-
-		if (bit_test(job->node_bitmap, host_index) == 0)
-			continue;
-		job_index++;
-		
-		if (select_node_ptr == NULL) {
-			error("cons_res: select_node_ptr is NULL");
-			return SLURM_ERROR;
-		}
-		this_cr_node = &select_node_ptr[host_index];
-		
-		if (job->cpus[job_index] == 0) {
-			error("cons_res: %d no available cpus on node %s ",
-			      job->job_id,
-			      node_record_table_ptr[host_index].name);
-			continue;
-		}
-
-		if (cr_cpu) {
-			/* compute the offset */
-			job->node_offset[job_index] =
-				_get_cpu_offset(job, job_index, this_cr_node);
-		} else {
-			for (i = 0; i < job->num_sockets[job_index]; i++)
-				job->alloc_cores[job_index][i] = 0;
-
-			if (_job_assign_tasks(job, this_cr_node, job_index, 
-					      cr_type, cyclic) != SLURM_SUCCESS)
-				return SLURM_ERROR;
+	
+	if (job_ptr->details->task_dist == SLURM_DIST_PLANE) {
+		/* perform a plane distribution on the 'cpus' array */
+		error_code = _compute_plane_dist(job_ptr);
+		if (error_code != SLURM_SUCCESS) {
+			error("cons_res: cr_dist: Error in _compute_plane_dist");
+			return error_code;
 		}
-#if(CR_DEBUG)
-		info("cons_res _cr_dist %u host %d %s alloc_cpus %u", 
-		     job->job_id, host_index, this_cr_node->node_ptr->name, 
-		     job->alloc_cpus[job_index]);
-		for(i=0; !cr_cpu && i<job->num_sockets[job_index];i+=2) {
-			info("cons_res: _cr_dist: job %u " 
-			     "alloc_cores[%d][%d]=%u, [%d][%d]=%u", 
-			     job->job_id, 
-			     job_index, i, job->alloc_cores[job_index][i], 
-			     job_index, i+1, job->alloc_cores[job_index][i+1]);
+	} else {
+		/* perform a cyclic distribution on the 'cpus' array */
+		error_code = _compute_c_b_task_dist(job_ptr);
+		if (error_code != SLURM_SUCCESS) {
+			error("cons_res: cr_dist: Error in _compute_c_b_task_dist");
+			return error_code;
 		}
-#endif
 	}
-	return rc;
-}
-
-/* User has specified the --exclusive flag on the srun command line
- * which means that the job should use only dedicated nodes.  In this
- * case we do not need to compute the number of tasks on each nodes
- * since it should be set to the number of cpus.
- */
-extern int cr_exclusive_dist(struct select_cr_job *job,
-		 	     const select_type_plugin_info_t cr_type)
-{
-	int i, j;
-	int host_index = 0, get_cores = 0;
 
+	/* now sync up the core_bitmap with the allocated 'cpus' array
+	 * based on the given distribution AND resource setting */	
 	if ((cr_type == CR_CORE)   || (cr_type == CR_CORE_MEMORY) ||
 	    (cr_type == CR_SOCKET) || (cr_type == CR_SOCKET_MEMORY))
-		get_cores = 1;
+		cr_cpu = 0;
 
-	if (select_fast_schedule) {
-		struct config_record *config_ptr;
-		for (i = 0; i < node_record_count; i++) {
-			if (bit_test(job->node_bitmap, i) == 0)
-				continue;
-			config_ptr = node_record_table_ptr[i].config_ptr;
-			job->alloc_cpus[host_index] = config_ptr->cpus;
-			if (get_cores) {
-				for (j=0; j<config_ptr->sockets; 
-				     j++) {
-					job->alloc_cores[host_index][j] = 
-						config_ptr->cores;
-				}
-			}
-			host_index++;
-		}
-	} else {
-		for (i = 0; i < node_record_count; i++) {
-			if (bit_test(job->node_bitmap, i) == 0)
-				continue;
-			job->alloc_cpus[host_index] = node_record_table_ptr[i].
-						      cpus;
-			if (get_cores) {
-				for (j=0; j<node_record_table_ptr[i].sockets; 
-				     j++) {
-					job->alloc_cores[host_index][j] = 
-						node_record_table_ptr[i].cores;
-				}
-			}
-			host_index++;
-		}
+	if (cr_cpu) {
+		_block_sync_core_bitmap(job_ptr, cr_type);
+		return SLURM_SUCCESS;
 	}
-	return SLURM_SUCCESS;
-}
 
-extern int cr_plane_dist(struct select_cr_job *job, 
-			 const uint16_t plane_size,
-			 const select_type_plugin_info_t cr_type)
-{
-	uint32_t maxtasks  = job->nprocs;
-	uint32_t num_hosts = job->nhosts;
-	int i, j, k, host_index, cr_cpu = 0;
-	uint32_t taskcount = 0, last_taskcount;
-	int job_index = -1;
-	bool count_done = false;
-	bool over_commit = false;
-
-	debug3("cons_res _cr_plane_dist plane_size %u ", plane_size);
-	debug3("cons_res _cr_plane_dist  maxtasks %u num_hosts %u",
-	       maxtasks, num_hosts);
-
-	if (plane_size <= 0) {
-		error("Error in _cr_plane_dist");
+	/* Determine the number of logical processors per node needed
+	 * for this job. Make sure below matches the layouts in
+	 * lllp_distribution in plugins/task/affinity/dist_task.c (FIXME) */
+	switch(job_ptr->details->task_dist) {
+	case SLURM_DIST_BLOCK_BLOCK:
+	case SLURM_DIST_CYCLIC_BLOCK:
+	case SLURM_DIST_PLANE:
+		_block_sync_core_bitmap(job_ptr, cr_type);
+		break;
+	case SLURM_DIST_ARBITRARY:
+	case SLURM_DIST_BLOCK:
+	case SLURM_DIST_CYCLIC:				
+	case SLURM_DIST_BLOCK_CYCLIC:
+	case SLURM_DIST_CYCLIC_CYCLIC:
+	case SLURM_DIST_UNKNOWN:
+		_cyclic_sync_core_bitmap(job_ptr, cr_type); 
+		break;
+	default:
+		error("select/cons_res: invalid task_dist entry");
 		return SLURM_ERROR;
 	}
-
-	if (job->job_ptr->details && job->job_ptr->details->overcommit)
-		over_commit = true;
-
-	taskcount = 0;
-	for (j=0; ((taskcount<maxtasks) && (!count_done)); j++) {
-		last_taskcount = taskcount;
-		for (i=0; 
-		     (((i<num_hosts) && (taskcount<maxtasks)) && (!count_done));
-		     i++) {
-			for (k=0; ((k<plane_size) && (!count_done)); k++) {
-				if (taskcount >= maxtasks) {
-					count_done = true;
-					break;
-				}
-				taskcount++;
-				if ((job->alloc_cpus[i] == 0) ||
-				    (!over_commit))
-					job->alloc_cpus[i]++;
-			}
-		}
-		if (last_taskcount == taskcount) {
-			/* avoid possible infinite loop on error */
-			error("cr_plane_dist failure");
-			return SLURM_ERROR;
-		}
-	}
-
-#if(CR_DEBUG)	
-	for (i = 0; i < job->nhosts; i++) {
-		info("cons_res _cr_plane_dist %u host_index %d alloc_cpus %u ", 
-		     job->job_id, i, job->alloc_cpus[i]);
-	}
-#endif
-
-	if ((cr_type == CR_CPU) || (cr_type == CR_MEMORY) ||
-	    (cr_type == CR_CPU_MEMORY))
-		cr_cpu = 1;
-
-	taskcount = 0;
-	for (host_index = 0; 
-	     ((host_index < node_record_count) && (taskcount < job->nprocs));
-	     host_index++) {
-		struct node_cr_record *this_cr_node = NULL;
-
-		if (bit_test(job->node_bitmap, host_index) == 0)
-			continue;
-		job_index++;
-
-		if (select_node_ptr == NULL) {
-			error("cons_res: select_node_ptr is NULL");
-			return SLURM_ERROR;
-		}
-		this_cr_node = &select_node_ptr[host_index];
-		
-		if (job->cpus[job_index] == 0) {
-			error("cons_res: no available cpus on node %s", 
-			      node_record_table_ptr[host_index].name);
-			continue;
-		}
-
-		if (cr_cpu) {
-			/* compute the offset */
-			job->node_offset[job_index] =
-				_get_cpu_offset(job, job_index, this_cr_node);
-		} else {
-			for (j = 0; j < job->num_sockets[job_index]; j++)
-				job->alloc_cores[job_index][j] = 0;
-
-			if (_job_assign_tasks(job, this_cr_node, job_index, 
-					      cr_type, 0) != SLURM_SUCCESS)
-				return SLURM_ERROR;
-		}
-#if(CR_DEBUG)
-		info("cons_res _cr_plane_dist %u host %d %s alloc_cpus %u", 
-		     job->job_id, host_index, this_cr_node->node_ptr->name, 
-		     job->alloc_cpus[job_index]);
-
-		for (i = 0; !cr_cpu && i < this_cr_node->sockets; i++) {
-			info("cons_res _cr_plane_dist %u host %d %s alloc_cores %u",
-			     job->job_id, host_index,
-			     this_cr_node->node_ptr->name,
-			     job->alloc_cores[job_index][i]);
-		}
-#endif
-		
-	}
-
 	return SLURM_SUCCESS;
 }
diff --git a/src/plugins/select/cons_res/dist_tasks.h b/src/plugins/select/cons_res/dist_tasks.h
index aea7e3f19..2b032609d 100644
--- a/src/plugins/select/cons_res/dist_tasks.h
+++ b/src/plugins/select/cons_res/dist_tasks.h
@@ -5,10 +5,11 @@
  *****************************************************************************
  *  Copyright (C) 2006 Hewlett-Packard Development Company, L.P.
  *  Written by Susanne M. Balle, <susanne.balle@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -49,16 +50,6 @@
 
 #include "select_cons_res.h"
 
-int cr_exclusive_dist(struct select_cr_job *job,
-		      const select_type_plugin_info_t cr_type);
-
-int cr_dist(struct select_cr_job *job, int cyclic,
-	    const select_type_plugin_info_t cr_type);
-
-int cr_plane_dist(struct select_cr_job *job, 
-		  const uint16_t plane_size,
-		  const select_type_plugin_info_t cr_type);
-
-int compute_c_b_task_dist(struct select_cr_job *job);
+int cr_dist(struct job_record *job_ptr,const select_type_plugin_info_t cr_type);
 
 #endif /* !_CONS_RES_DIST_TASKS_H */
diff --git a/src/plugins/select/cons_res/job_test.c b/src/plugins/select/cons_res/job_test.c
new file mode 100644
index 000000000..b219e2266
--- /dev/null
+++ b/src/plugins/select/cons_res/job_test.c
@@ -0,0 +1,2123 @@
+/*****************************************************************************\
+ *  select_cons_res.c - node selection plugin supporting consumable 
+ *  resources policies.
+ *****************************************************************************\
+ *
+ *  The following example below illustrates how four jobs are allocated
+ *  across a cluster using when a processor consumable resource approach.
+ * 
+ *  The example cluster is composed of 4 nodes (10 cpus in total):
+ *  linux01 (with 2 processors), 
+ *  linux02 (with 2 processors), 
+ *  linux03 (with 2 processors), and
+ *  linux04 (with 4 processors). 
+ *
+ *  The four jobs are the following: 
+ *  1. srun -n 4 -N 4  sleep 120 &
+ *  2. srun -n 3 -N 3 sleep 120 &
+ *  3. srun -n 1 sleep 120 &
+ *  4. srun -n 3 sleep 120 &
+ *  The user launches them in the same order as listed above.
+ * 
+ *  Using a processor consumable resource approach we get the following
+ *  job allocation and scheduling:
+ * 
+ *  The output of squeue shows that we have 3 out of the 4 jobs allocated
+ *  and running. This is a 2 running job increase over the default SLURM
+ *  approach.
+ * 
+ *  Job 2, Job 3, and Job 4 are now running concurrently on the cluster.
+ * 
+ *  [<snip>]# squeue
+ *  JOBID PARTITION     NAME     USER  ST       TIME  NODES NODELIST(REASON)
+ *     5        lsf    sleep     root  PD       0:00      1 (Resources)
+ *     2        lsf    sleep     root   R       0:13      4 linux[01-04]
+ *     3        lsf    sleep     root   R       0:09      3 linux[01-03]
+ *     4        lsf    sleep     root   R       0:05      1 linux04
+ *  [<snip>]#
+ * 
+ *  Once Job 2 finishes, Job 5, which was pending, is allocated
+ *  available resources and is then running as illustrated below:
+ * 
+ *  [<snip>]# squeue4
+ *   JOBID PARTITION    NAME     USER  ST       TIME  NODES NODELIST(REASON)
+ *     3        lsf    sleep     root   R       1:58      3 linux[01-03]
+ *     4        lsf    sleep     root   R       1:54      1 linux04
+ *     5        lsf    sleep     root   R       0:02      3 linux[01-03]
+ *  [<snip>]#
+ * 
+ *  Job 3, Job 4, and Job 5 are now running concurrently on the cluster.
+ * 
+ *  [<snip>]#  squeue4
+ *  JOBID PARTITION     NAME     USER  ST       TIME  NODES NODELIST(REASON)
+ *     5        lsf    sleep     root   R       1:52      3 xc14n[13-15]
+ *  [<snip>]#
+ *
+ * The advantage of the consumable resource scheduling policy is that
+ * the job throughput can increase dramatically.
+ *
+ *****************************************************************************
+ *  Copyright (C) 2005-2008 Hewlett-Packard Development Company, L.P.
+ *  Written by Susanne M. Balle <susanne.balle@hp.com>, who borrowed heavily
+ *  from select/linear 
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#  if HAVE_STDINT_H
+#    include <stdint.h>
+#  endif
+#  if HAVE_INTTYPES_H
+#    include <inttypes.h>
+#  endif
+#endif
+
+#include "dist_tasks.h"
+#include "job_test.h"
+#include "select_cons_res.h"
+
+#define SELECT_DEBUG	0
+
+static int _eval_nodes(struct job_record *job_ptr, bitstr_t *node_map,
+			uint32_t min_nodes, uint32_t max_nodes,
+			uint32_t req_nodes, uint32_t cr_node_cnt,
+			uint16_t *cpu_cnt, uint32_t *freq, uint32_t size);
+static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *node_map,
+			uint32_t min_nodes, uint32_t max_nodes,
+			uint32_t req_nodes, uint32_t cr_node_cnt,
+			uint16_t *cpu_cnt, uint32_t *freq, uint32_t size);
+
+/* _allocate_sockets - Given the job requirements, determine which sockets
+ *                     from the given node can be allocated (if any) to this
+ *                     job. Returns the number of cpus that can be used by
+ *                     this node AND a core-level bitmap of the selected
+ *                     sockets.
+ *
+ * IN job_ptr      - pointer to job requirements
+ * IN/OUT core_map - core_bitmap of available cores
+ * IN node_i       - index of node to be evaluated
+ */
+uint16_t _allocate_sockets(struct job_record *job_ptr, bitstr_t *core_map,
+			   const uint32_t node_i)
+{
+	uint16_t cpu_count = 0, cpu_cnt = 0;
+	uint16_t si, cps, avail_cpus = 0, num_tasks = 0;
+	uint32_t core_begin    = cr_get_coremap_offset(node_i);
+	uint32_t core_end      = cr_get_coremap_offset(node_i+1);
+	uint16_t cpus_per_task = job_ptr->details->cpus_per_task;
+	uint16_t *used_cores, *free_cores, free_core_count = 0;
+	uint16_t i, c, sockets    = select_node_record[node_i].sockets;
+	uint16_t cores_per_socket = select_node_record[node_i].cores;
+	uint16_t threads_per_core = select_node_record[node_i].vpus;
+
+	uint16_t min_cores = 0, min_sockets = 0, ntasks_per_socket = 0;
+	uint16_t max_cores = 0, max_sockets = 0, max_threads = 0;
+
+	if (job_ptr->details && job_ptr->details->mc_ptr) {
+		min_cores   = job_ptr->details->mc_ptr->min_cores;
+		min_sockets = job_ptr->details->mc_ptr->min_sockets;
+		max_cores   = job_ptr->details->mc_ptr->max_cores;
+		max_sockets = job_ptr->details->mc_ptr->max_sockets;
+		max_threads = job_ptr->details->mc_ptr->max_threads;
+		ntasks_per_socket = job_ptr->details->mc_ptr->ntasks_per_socket;
+	}
+	
+	/* These are the job parameters that we must respect:
+	 *
+	 *   job_ptr->details->mc_ptr->min_cores (cr_core|cr_socket)
+	 *	- min # of cores per socket to allocate to this job
+	 *   job_ptr->details->mc_ptr->max_cores (cr_core|cr_socket)
+	 *	- max # of cores per socket to allocate to this job
+	 *   job_ptr->details->mc_ptr->min_sockets (cr_core|cr_socket)
+	 *	- min # of sockets per node to allocate to this job
+	 *   job_ptr->details->mc_ptr->max_sockets (cr_core|cr_socket)
+	 *	- max # of sockets per node to allocate to this job
+	 *
+	 *   job_ptr->details->mc_ptr->max_threads (cr_core|cr_socket)
+	 *	- max_threads per core to allocate to this job
+	 *   job_ptr->details->mc_ptr->ntasks_per_core (cr_core|cr_socket)
+	 *	- number of tasks to launch per core
+	 *   job_ptr->details->mc_ptr->ntasks_per_socket (cr_core|cr_socket)
+	 *	- number of tasks to launch per socket
+	 *
+	 *   job_ptr->details->ntasks_per_node (all cr_types)
+	 *	- total number of tasks to launch on this node
+	 *   job_ptr->details->cpus_per_task (all cr_types)
+	 *	- number of cpus to allocate per task
+	 *
+	 * These are the hardware constraints:
+	 *   cpus = sockets * cores_per_socket * threads_per_core
+	 *
+	 * These are the cores/sockets that are available: core_map
+	 *
+	 * NOTE: currently we only allocate at the socket level, the core
+	 *       level, or the cpu level. When hyperthreading is enabled
+	 *       in the BIOS, then there can be more than one thread/cpu
+	 *       per physical core.
+	 *
+	 * PROCEDURE:
+	 *
+	 * Step 1: Determine the current usage data: used_cores[],
+	 *         used_core_count, free_cores[], free_core_count
+	 *
+	 * Step 2: For core-level and socket-level: apply min_sockets,
+	 *         max_sockets, min_cores, and max_cores to the "free"
+	 *         cores.
+	 *
+	 * Step 3: Compute task-related data: max_threads, ntasks_per_core,
+	 *         ntasks_per_socket, ntasks_per_node and cpus_per_task
+	 *         and determine the number of tasks to run on this node
+	 *
+	 * Step 4: Mark the allocated resources in the job_cores bitmap
+	 *         and return "num_tasks" from Step 3.
+	 *
+	 *
+	 * For socket and core counts, start by assuming that all available
+	 * resources will be given to the job. Check min_* to ensure that
+	 * there's enough resources. Reduce the resource count to match max_*
+	 * (if necessary). Also reduce resource count (if necessary) to
+	 * match ntasks_per_resource.
+	 *
+	 * NOTE: Memory is not used as a constraint here - should it?
+	 *       If not then it needs to be done somewhere else!
+	 */
+
+
+	/* Step 1: create and compute core-count-per-socket
+	 * arrays and total core counts */
+	free_cores = xmalloc(sockets * sizeof(uint16_t));
+	used_cores = xmalloc(sockets * sizeof(uint16_t));
+	
+	for (c = core_begin; c < core_end; c++) {
+		i = (c - core_begin) / cores_per_socket;
+		if (bit_test(core_map, c)) {
+			free_cores[i]++;
+			free_core_count++;
+		} else {
+			used_cores[i]++;
+		}
+	}
+	/* if a socket is already in use, it cannot be used
+	 * by this job */
+	for (i = 0; i < sockets; i++) {
+		if (used_cores[i]) {
+			free_core_count -= free_cores[i];
+			used_cores[i] += free_cores[i];
+			free_cores[i] = 0;
+		}
+	}
+	xfree(used_cores);
+	used_cores = NULL;
+
+	/* Step 2: check min_cores per socket and min_sockets per node */
+	c = 0;
+	for (i = 0; i < sockets; i++) {
+		if (free_cores[i] < min_cores) {
+			/* cannot use this socket */
+			free_core_count -= free_cores[i];
+			free_cores[i] = 0;
+			continue;
+		}
+		/* count this socket as usable */
+		c++;
+	}
+	if (c < min_sockets) {
+		/* cannot use this node */
+		num_tasks = 0;
+		goto fini;
+	}
+	
+	/* check max_cores and max_sockets */
+	c = 0;
+	for (i = 0; i < sockets; i++) {
+		if (max_cores && free_cores[i] > max_cores) {
+			/* remove extra cores from this socket */
+			uint16_t tmp = free_cores[i] - max_cores;
+			free_core_count -= tmp;
+			free_cores[i] -= tmp;
+		}
+		if (free_cores[i] > 0)
+			c++;
+		if (max_sockets && free_cores[i] && c > max_sockets) {
+			/* remove extra sockets from use */
+			free_core_count -= free_cores[i];
+			free_cores[i] = 0;
+		}
+	}
+	if (free_core_count < 1) {
+		/* no available resources on this node */
+		num_tasks = 0;
+		goto fini;
+	}
+
+
+	/* Step 3: Compute task-related data: use max_threads,
+	 *         ntasks_per_socket, ntasks_per_node and cpus_per_task
+	 *         to determine the number of tasks to run on this node
+	 *
+	 * Note: cpus_per_task and ntasks_per_core need to play nice
+	 *       2 tasks_per_core vs. 2 cpus_per_task
+	 */
+	avail_cpus = 0;
+	num_tasks = 0;
+	threads_per_core = MIN(threads_per_core,max_threads);
+	for (i = 0; i < sockets; i++) {
+		uint16_t tmp = free_cores[i] * threads_per_core;
+		avail_cpus += tmp;
+		if (ntasks_per_socket)
+			num_tasks += MIN(tmp,ntasks_per_socket);
+		else
+			num_tasks += tmp;
+	}
+	if (job_ptr->details->ntasks_per_node)
+		num_tasks = MIN(num_tasks, job_ptr->details->ntasks_per_node);
+	
+	if (cpus_per_task < 2) {
+		avail_cpus = num_tasks;
+		cps = num_tasks;
+	} else {
+		c = avail_cpus / cpus_per_task;
+		num_tasks = MIN(num_tasks, c);
+		avail_cpus = num_tasks * cpus_per_task;
+	}
+	
+	/* Step 4 - make sure that ntasks_per_socket is enforced when
+	 *          allocating cores
+	 */
+	cps = num_tasks;
+	if (ntasks_per_socket > 1) {
+		cps = ntasks_per_socket;
+		if (cpus_per_task > 1)
+			cps = ntasks_per_socket * cpus_per_task;
+	}
+	si = 9999;
+	for (c = core_begin; c < core_end && avail_cpus > 0; c++) {
+		if (bit_test(core_map, c) == 0)
+			continue;
+		i = (c - core_begin) / cores_per_socket;
+		if (free_cores[i] > 0) {
+			/* this socket has free cores, but make sure
+			 * we don't use more than are needed for
+			 * ntasks_per_socket */
+			if (si != i) {
+				si = i;
+				cpu_cnt = threads_per_core;
+			} else {
+				if (cpu_cnt >= cps) {
+					/* do not allocate this core */
+					bit_clear(core_map, c);
+					continue;
+				}
+				cpu_cnt += threads_per_core;
+			}
+			free_cores[i]--;
+			cpu_count += threads_per_core;
+			if (avail_cpus >= threads_per_core)
+				avail_cpus -= threads_per_core;
+			else
+				avail_cpus = 0;
+			
+		} else
+			bit_clear(core_map, c);
+	}
+	/* clear leftovers */
+	if (c < core_end)
+		bit_nclear(core_map, c, core_end-1);
+
+fini:
+	/* if num_tasks == 0 then clear all bits on this node */
+	if (!num_tasks) {
+		bit_nclear(core_map, core_begin, core_end-1);
+		cpu_count = 0;
+	}
+	xfree(free_cores);
+	return cpu_count;
+}
+
+
+/* _allocate_cores - Given the job requirements, determine which cores
+ *                   from the given node can be allocated (if any) to this
+ *                   job. Returns the number of cpus that can be used by
+ *                   this node AND a bitmap of the selected cores.
+ *
+ * IN job_ptr      - pointer to job requirements
+ * IN/OUT core_map - bitmap of cores available for use/selected for use
+ * IN node_i       - index of node to be evaluated
+ */
+uint16_t _allocate_cores(struct job_record *job_ptr, bitstr_t *core_map,
+			 const uint32_t node_i, int cpu_type)
+{
+	uint16_t cpu_count = 0, avail_cpus = 0, num_tasks = 0;
+	uint32_t core_begin    = cr_get_coremap_offset(node_i);
+	uint32_t core_end      = cr_get_coremap_offset(node_i+1);
+	uint16_t cpus_per_task = job_ptr->details->cpus_per_task;
+	uint16_t *free_cores, free_core_count = 0;
+	uint16_t i, c, sockets    = select_node_record[node_i].sockets;
+	uint16_t cores_per_socket = select_node_record[node_i].cores;
+	uint16_t threads_per_core = select_node_record[node_i].vpus;
+
+	uint16_t min_cores = 0, min_sockets = 0;
+	uint16_t max_cores = 0, max_sockets = 0, max_threads = 0;
+
+	if (!cpu_type && job_ptr->details && job_ptr->details->mc_ptr) {
+		min_cores   = job_ptr->details->mc_ptr->min_cores;
+		min_sockets = job_ptr->details->mc_ptr->min_sockets;
+		max_cores   = job_ptr->details->mc_ptr->max_cores;
+		max_sockets = job_ptr->details->mc_ptr->max_sockets;
+		max_threads = job_ptr->details->mc_ptr->max_threads;
+	}
+	
+	/* These are the job parameters that we must respect:
+	 *
+	 *   job_ptr->details->mc_ptr->min_cores (cr_core|cr_socket)
+	 *	- min # of cores per socket to allocate to this job
+	 *   job_ptr->details->mc_ptr->max_cores (cr_core|cr_socket)
+	 *	- max # of cores per socket to allocate to this job
+	 *   job_ptr->details->mc_ptr->min_sockets (cr_core|cr_socket)
+	 *	- min # of sockets per node to allocate to this job
+	 *   job_ptr->details->mc_ptr->max_sockets (cr_core|cr_socket)
+	 *	- max # of sockets per node to allocate to this job
+	 *
+	 *   job_ptr->details->mc_ptr->max_threads (cr_core|cr_socket)
+	 *	- max_threads per core to allocate to this job
+	 *   job_ptr->details->mc_ptr->ntasks_per_core (cr_core|cr_socket)
+	 *	- number of tasks to launch per core
+	 *   job_ptr->details->mc_ptr->ntasks_per_socket (cr_core|cr_socket)
+	 *	- number of tasks to launch per socket
+	 *
+	 *   job_ptr->details->ntasks_per_node (all cr_types)
+	 *	- total number of tasks to launch on this node
+	 *   job_ptr->details->cpus_per_task (all cr_types)
+	 *	- number of cpus to allocate per task
+	 *
+	 * These are the hardware constraints:
+	 *   cpus = sockets * cores_per_socket * threads_per_core
+	 *
+	 * These are the cores that are available for use: core_map
+	 *
+	 * NOTE: currently we only allocate at the socket level, the core
+	 *       level, or the cpu level. When hyperthreading is enabled
+	 *       in the BIOS, then there can be more than one thread/cpu
+	 *       per physical core.
+	 *
+	 * PROCEDURE:
+	 *
+	 * Step 1: Determine the current usage data: free_cores[] and
+	 *         free_core_count
+	 *
+	 * Step 2: Apply min_sockets, max_sockets, min_cores and
+	 *         max_cores and to the "free" cores.
+	 *
+	 * Step 3: Compute task-related data: use max_threads,
+	 *         ntasks_per_core, ntasks_per_node and cpus_per_task
+	 *         to determine the number of tasks that can run on
+	 *         this node
+	 *
+	 * Step 4: Mark the allocated resources in the job_cores bitmap
+	 *         and return "num_tasks" from Step 3.
+	 *
+	 *
+	 * Start by assuming that all "free" cores will be given to the
+	 * job. Check min_* to ensure that there's enough resources.
+	 * Reduce the core count to match max_* (if necessary). Also,
+	 * reduce the core count (if necessary) to match ntasks_per_core.
+	 * Note that we're not processing ntasks_per_socket, because the
+	 * srun manpage says that ntasks_per_socket is only valid for
+	 * CR_SOCKET.
+	 */
+
+	/* Step 1: create and compute core-count-per-socket
+	 * arrays and total core counts */
+	free_cores = xmalloc(sockets * sizeof(uint16_t));
+	
+	for (c = core_begin; c < core_end; c++) {
+		i = (c - core_begin) / cores_per_socket;
+		if (bit_test(core_map, c)) {
+			free_cores[i]++;
+			free_core_count++;
+		}
+	}
+	
+	/* Step 2a: check min_cores per socket and min_sockets per node */
+	c = 0;
+	for (i = 0; i < sockets; i++) {
+		if (free_cores[i] < min_cores) {
+			/* cannot use this socket */
+			free_core_count -= free_cores[i];
+			free_cores[i] = 0;
+			continue;
+		}
+		/* count this socket as usable */
+		c++;
+	}
+	if (c < min_sockets) {
+		/* cannot use this node */
+		num_tasks = 0;
+		goto fini;
+	}
+	
+	/* Step 2b: check max_cores per socket and max_sockets per node */
+	c = 0;
+	for (i = 0; i < sockets; i++) {
+		if (max_cores && free_cores[i] > max_cores) {
+			/* remove extra cores from this socket */
+			uint16_t tmp = free_cores[i] - max_cores;
+			free_core_count -= tmp;
+			free_cores[i] -= tmp;
+		}
+		if (free_cores[i] > 0)
+			c++;
+		if (max_sockets && free_cores[i] && c > max_sockets) {
+			/* remove extra sockets from use */
+			free_core_count -= free_cores[i];
+			free_cores[i] = 0;
+		}
+	}
+	if (free_core_count < 1) {
+		/* no available resources on this node */
+		num_tasks = 0;
+		goto fini;
+	}
+
+
+	/* Step 3: Compute task-related data: use max_threads,
+	 *         ntasks_per_core, ntasks_per_node and cpus_per_task
+	 *         to determine the number of tasks to run on this node
+	 *
+	 * Note: cpus_per_task and ntasks_per_core need to play nice
+	 *       2 tasks_per_core vs. 2 cpus_per_task
+	 */
+
+	if (cpu_type)
+		max_threads = threads_per_core;
+	threads_per_core = MIN(threads_per_core,max_threads);
+	num_tasks = avail_cpus = threads_per_core;
+	i = job_ptr->details->mc_ptr->ntasks_per_core;
+	if (!cpu_type && i > 0)
+		num_tasks = MIN(num_tasks, i);
+	
+	/* convert from PER_CORE to TOTAL_FOR_NODE */
+	avail_cpus *= free_core_count;
+	num_tasks *= free_core_count;
+
+	if (job_ptr->details->ntasks_per_node)
+		num_tasks = MIN(num_tasks, job_ptr->details->ntasks_per_node);
+	
+	if (cpus_per_task < 2) {
+		avail_cpus = num_tasks;
+	} else {
+		c = avail_cpus / cpus_per_task;
+		num_tasks = MIN(num_tasks, c);
+		avail_cpus = num_tasks * cpus_per_task;
+	}
+	
+	/* Step 4 */
+	for (c = core_begin; c < core_end && avail_cpus > 0; c++) {
+		if (bit_test(core_map, c) == 0)
+			continue;
+		i = (c - core_begin) / cores_per_socket;
+		if (free_cores[i] == 0)
+			bit_clear(core_map, c);
+		else {
+			free_cores[i]--;
+			cpu_count += threads_per_core;
+			if (avail_cpus >= threads_per_core)
+				avail_cpus -= threads_per_core;
+			else
+				avail_cpus = 0;
+		}
+	}
+	/* clear leftovers */
+	if (c < core_end)
+		bit_nclear(core_map, c, core_end-1);
+
+fini:
+	if (!num_tasks) {
+		bit_nclear(core_map, core_begin, core_end-1);
+		cpu_count = 0;
+	}
+	xfree(free_cores);
+	return cpu_count;
+}
+
+
+/*
+ * _can_job_run_on_node - Given the job requirements, determine which
+ *                        resources from the given node (if any) can be
+ *                        allocated to this job. Returns the number of
+ *                        cpus that can be used by this node and a bitmap
+ *                        of available resources for allocation.
+ *       NOTE: This process does NOT support overcommitting resources
+ *
+ * IN job_ptr       - pointer to job requirements
+ * IN/OUT core_map  - core_bitmap of available cores
+ * IN n             - index of node to be evaluated
+ * IN cr_type       - Consumable Resource setting
+ * IN test_only     - ignore allocated memory check
+ *
+ * NOTE: The returned cpu_count may be less than the number of set bits in 
+ *       core_map for the given node. The cr_dist functions will determine
+ *       which bits to deselect from the core_map to match the cpu_count.
+ */
+uint16_t _can_job_run_on_node(struct job_record *job_ptr, bitstr_t *core_map,
+			      const uint32_t node_i,
+			      struct node_use_record *node_usage,
+			      select_type_plugin_info_t cr_type,
+			      bool test_only)
+{
+	uint16_t cpus;
+	uint32_t avail_mem, req_mem;
+
+	switch (cr_type) {
+	case CR_CORE:
+	case CR_CORE_MEMORY:
+		cpus = _allocate_cores(job_ptr, core_map, node_i, 0);
+		break;
+	case CR_SOCKET:
+	case CR_SOCKET_MEMORY:
+		cpus = _allocate_sockets(job_ptr, core_map, node_i);
+		break;
+	case SELECT_TYPE_INFO_NONE:
+		/* Default for select/linear */
+	case CR_CPU:
+	case CR_CPU_MEMORY:
+	case CR_MEMORY:
+	default:
+		cpus = _allocate_cores(job_ptr, core_map, node_i, 1);
+	}
+	
+	if ((cr_type != CR_CPU_MEMORY)    && (cr_type != CR_CORE_MEMORY) &&
+	    (cr_type != CR_SOCKET_MEMORY) && (cr_type != CR_MEMORY))
+		return cpus;
+
+	/* Memory Check: check job_min_memory to see if:
+	 *          - this node has enough memory (MEM_PER_CPU == 0)
+	 *          - there are enough free_cores (MEM_PER_CPU = 1)
+	 */
+	req_mem   = job_ptr->details->job_min_memory & ~MEM_PER_CPU;
+	avail_mem = select_node_record[node_i].real_memory;
+	if (!test_only)
+		avail_mem -= node_usage[node_i].alloc_memory;
+	if (job_ptr->details->job_min_memory & MEM_PER_CPU) {
+		/* memory is per-cpu */
+		while (cpus > 0 && (req_mem * cpus) > avail_mem)
+			cpus--;	
+		if (cpus < job_ptr->details->ntasks_per_node)
+			cpus = 0;
+		/* FIXME: do we need to recheck min_cores, etc. here? */	
+	} else {
+		/* memory is per node */
+		if (req_mem > avail_mem) {
+			bit_nclear(core_map, cr_get_coremap_offset(node_i), 
+					(cr_get_coremap_offset(node_i+1))-1);
+			cpus = 0;
+		}
+	}
+	
+	debug3("cons_res: _can_job_run_on_node: %u cpus on %s(%d), mem %u/%u",
+		cpus, select_node_record[node_i].node_ptr->name,
+		node_usage[node_i].node_state,
+		node_usage[node_i].alloc_memory,
+		select_node_record[node_i].real_memory);
+	
+	return cpus;
+}
+
+
+/* Test to see if a node already has running jobs.
+ * if (sharing_only) then only check sharing partitions. This is because
+ * the job was submitted to a single-row partition which does not share
+ * allocated CPUs with multi-row partitions.
+ */
+static int _is_node_busy(struct part_res_record *p_ptr, uint32_t node_i,
+			 int sharing_only)
+{
+	uint32_t r, cpu_begin = cr_get_coremap_offset(node_i);
+	uint32_t i, cpu_end   = cr_get_coremap_offset(node_i+1);
+
+	for (; p_ptr; p_ptr = p_ptr->next) {
+		if (sharing_only && p_ptr->num_rows < 2)
+			continue;
+		if (!p_ptr->row)
+			continue;
+		for (r = 0; r < p_ptr->num_rows; r++) {
+			if (!p_ptr->row[r].row_bitmap)
+				continue;
+			for (i = cpu_begin; i < cpu_end; i++) {
+				if (bit_test(p_ptr->row[r].row_bitmap, i))
+					return 1;
+			}
+		}
+	}
+	return 0;
+}
+
+
+/*
+ * Determine which of these nodes are usable by this job
+ *
+ * Remove nodes from the bitmap that don't have enough memory to
+ * support the job. Return SLURM_ERROR if a required node doesn't
+ * have enough memory.
+ *
+ * if node_state = NODE_CR_RESERVED, clear bitmap (if node is required
+ *                                   then should we return NODE_BUSY!?!)
+ *
+ * if node_state = NODE_CR_ONE_ROW, then this node can only be used by
+ *                                  another NODE_CR_ONE_ROW job
+ *
+ * if node_state = NODE_CR_AVAILABLE AND:
+ *  - job_node_req = NODE_CR_RESERVED, then we need idle nodes
+ *  - job_node_req = NODE_CR_ONE_ROW, then we need idle or non-sharing nodes
+ */
+static int _verify_node_state(struct part_res_record *cr_part_ptr,
+			      struct job_record *job_ptr, bitstr_t * bitmap,
+			      select_type_plugin_info_t cr_type,
+			      struct node_use_record *node_usage,
+			      enum node_cr_state job_node_req)
+{
+	uint32_t i, free_mem, min_mem, size;
+
+	min_mem = job_ptr->details->job_min_memory & (~MEM_PER_CPU);
+	size = bit_size(bitmap);
+	for (i = 0; i < size; i++) {
+		if (!bit_test(bitmap, i))
+			continue;
+
+		/* node-level memory check */
+		if ((job_ptr->details->job_min_memory) &&
+		    ((cr_type == CR_CORE_MEMORY) || (cr_type == CR_CPU_MEMORY) ||
+		     (cr_type == CR_MEMORY) || (cr_type == CR_SOCKET_MEMORY))) {
+			free_mem  = select_node_record[i].real_memory;
+			free_mem -= node_usage[i].alloc_memory;
+			if (free_mem < min_mem) {
+				debug3("cons_res: _vns: node %s no mem %u < %u",
+					select_node_record[i].node_ptr->name,
+					free_mem, min_mem);
+				goto clear_bit;
+			}
+		}
+		
+		/* if priority_selection (sched/gang) has been configured,
+		 * then we cannot rule out nodes just because Shared=NO
+		 * (NODE_CR_ONE_ROW) or Shared=EXCLUSIVE(NODE_CR_RESERVED)
+		 */
+		if (cr_priority_selection_enabled())
+			continue;
+
+		/* exclusive node check */
+		if (node_usage[i].node_state >= NODE_CR_RESERVED) {
+			debug3("cons_res: _vns: node %s in exclusive use",
+				select_node_record[i].node_ptr->name);
+			goto clear_bit;
+		
+		/* non-resource-sharing node check */
+		} else if (node_usage[i].node_state >= NODE_CR_ONE_ROW) {
+			if ((job_node_req == NODE_CR_RESERVED) ||
+			    (job_node_req == NODE_CR_AVAILABLE)) {
+				debug3("cons_res: _vns: node %s non-sharing",
+					select_node_record[i].node_ptr->name);
+				goto clear_bit;
+			}
+			/* cannot use this node if it is running jobs
+			 * in sharing partitions */
+			if ( _is_node_busy(cr_part_ptr, i, 1) ) {
+				debug3("cons_res: _vns: node %s sharing?",
+					select_node_record[i].node_ptr->name);
+				goto clear_bit;
+			}
+		
+		/* node is NODE_CR_AVAILABLE - check job request */
+		} else {
+			if (job_node_req == NODE_CR_RESERVED) {
+				if ( _is_node_busy(cr_part_ptr, i, 0) ) {
+					debug3("cons_res: _vns: node %s busy",
+					  select_node_record[i].node_ptr->name);
+					goto clear_bit;
+				}
+			} else if (job_node_req == NODE_CR_ONE_ROW) {
+				/* cannot use this node if it is running jobs
+				 * in sharing partitions */
+				if ( _is_node_busy(cr_part_ptr, i, 1) ) {
+					debug3("cons_res: _vns: node %s vbusy",
+					  select_node_record[i].node_ptr->name);
+					goto clear_bit;
+				}
+			}
+		}
+		continue;	/* node is usable, test next node */
+
+clear_bit:	/* This node is not usable by this job */
+		bit_clear(bitmap, i);
+		if (job_ptr->details->req_node_bitmap &&
+		    bit_test(job_ptr->details->req_node_bitmap, i))
+			return SLURM_ERROR;
+
+	}
+
+	return SLURM_SUCCESS;
+}
+
+
+/* given an "avail" node_bitmap, return a corresponding "avail" core_bitmap */
+bitstr_t *_make_core_bitmap(bitstr_t *node_map)
+{
+	uint32_t n, c, nodes, size;
+
+	nodes = bit_size(node_map);
+	size = cr_get_coremap_offset(nodes+1);
+	bitstr_t *core_map = bit_alloc(size);
+	if (!core_map)
+		return NULL;
+
+	nodes = bit_size(node_map);
+	for (n = 0, c = 0; n < nodes; n++) {
+		if (bit_test(node_map, n)) {
+			while (c < cr_get_coremap_offset(n+1)) {
+				bit_set(core_map, c++);
+			}
+		}
+	}
+	return core_map;
+}
+
+
+/* return the number of cpus that the given
+ * job can run on the indexed node */
+static int _get_cpu_cnt(struct job_record *job_ptr, const int node_index,
+			 uint16_t *cpu_cnt, uint32_t *freq, uint32_t size)
+{
+	int i, pos, cpus;
+	uint16_t *layout_ptr = job_ptr->details->req_node_layout;
+
+	pos = 0;
+	for (i = 0; i < size; i++) {
+		if (pos+freq[i] > node_index)
+			break;
+		pos += freq[i];
+	}
+	cpus = cpu_cnt[i];
+	if (layout_ptr && bit_test(job_ptr->details->req_node_bitmap, i)) {
+		pos = bit_get_pos_num(job_ptr->details->req_node_bitmap, i);
+		cpus = MIN(cpus, layout_ptr[pos]);
+	} else if (layout_ptr) {
+		cpus = 0; /* should not happen? */
+	}
+	return cpus;
+}
+
+
+#define CR_FREQ_ARRAY_INCREMENT 16
+
+/* Compute resource usage for the given job on all available resources
+ *
+ * IN: job_ptr     - pointer to the job requesting resources
+ * IN: node_map    - bitmap of available nodes
+ * IN: core_map    - bitmap of available cores
+ * IN: cr_node_cnt - total number of nodes in the cluster
+ * IN: cr_type     - resource type
+ * OUT: cpu_cnt    - number of cpus that can be used by this job
+ * OUT: freq       - number of nodes to which the corresponding cpu_cnt applies
+ * IN: test_only   - ignore allocated memory check
+ * OUT:            returns the length of the 2 arrays
+ */
+uint32_t _get_res_usage(struct job_record *job_ptr, bitstr_t *node_map,
+			bitstr_t *core_map, uint32_t cr_node_cnt,
+			struct node_use_record *node_usage,
+			select_type_plugin_info_t cr_type,
+			uint16_t **cpu_cnt_ptr, uint32_t **freq_ptr,
+			bool test_only)
+{
+	uint16_t *cpu_cnt, cpu_count;
+	uint32_t *freq;
+	uint32_t n, size = 0, array_size = CR_FREQ_ARRAY_INCREMENT;
+
+	cpu_cnt = xmalloc(array_size * sizeof(uint16_t));
+	freq    = xmalloc(array_size * sizeof(uint32_t));
+	
+	for (n = 0; n < cr_node_cnt; n++) {
+		if (bit_test(node_map, n)) {
+			cpu_count = _can_job_run_on_node(job_ptr, core_map,
+							n, node_usage, cr_type,
+							test_only);
+			if (cpu_count == cpu_cnt[size]) {
+				freq[size]++;
+				continue;
+			}
+			if (freq[size] == 0) {
+				cpu_cnt[size] = cpu_count;
+				freq[size]++;
+				continue;
+			}
+			size++;
+			if (size >= array_size) {
+				array_size += CR_FREQ_ARRAY_INCREMENT;
+				xrealloc(cpu_cnt, array_size *sizeof(uint16_t));
+				xrealloc(freq, array_size * sizeof(uint32_t));
+			}
+			cpu_cnt[size] = cpu_count;
+			freq[size]++;
+		} else {
+			if (cpu_cnt[size] == 0) {
+				freq[size]++;
+				continue;
+			}
+			size++;
+			if (size >= array_size) {
+				array_size += CR_FREQ_ARRAY_INCREMENT;
+				xrealloc(cpu_cnt, array_size *sizeof(uint16_t));
+				xrealloc(freq, array_size * sizeof(uint32_t));
+			}
+			freq[size]++;
+		}
+	}
+	*cpu_cnt_ptr = cpu_cnt;
+	*freq_ptr = freq;
+	return size+1;
+}			
+
+
+static bool _enough_nodes(int avail_nodes, int rem_nodes, 
+			  uint32_t min_nodes, uint32_t req_nodes)
+{
+	int needed_nodes;
+
+	if (req_nodes > min_nodes)
+		needed_nodes = rem_nodes + min_nodes - req_nodes;
+	else
+		needed_nodes = rem_nodes;
+
+	return (avail_nodes >= needed_nodes);
+}
+
+
+/* this is the heart of the selection process */
+static int _eval_nodes(struct job_record *job_ptr, bitstr_t *node_map,
+			uint32_t min_nodes, uint32_t max_nodes,
+			uint32_t req_nodes, uint32_t cr_node_cnt,
+			uint16_t *cpu_cnt, uint32_t *freq, uint32_t size)
+{
+	int i, f, index, error_code = SLURM_ERROR;
+	int *consec_nodes;	/* how many nodes we can add from this 
+				 * consecutive set of nodes */
+	int *consec_cpus;	/* how many nodes we can add from this 
+				 * consecutive set of nodes */
+	int *consec_start;	/* where this consecutive set starts (index) */
+	int *consec_end;	/* where this consecutive set ends (index) */
+	int *consec_req;	/* are nodes from this set required 
+				 * (in req_bitmap) */
+	int consec_index, consec_size, sufficient;
+	int rem_cpus, rem_nodes;	/* remaining resources desired */
+	int best_fit_nodes, best_fit_cpus, best_fit_req;
+	int best_fit_sufficient, best_fit_index = 0;
+	int avail_cpus, ll;	/* ll = layout array index */
+	bool required_node;
+	bitstr_t *req_map      = job_ptr->details->req_node_bitmap;
+	uint16_t *layout_ptr = job_ptr->details->req_node_layout;
+
+	xassert(node_map);
+
+	if (cr_node_cnt != node_record_count) {
+		error("cons_res: node count inconsistent with slurmctld");
+		return error_code;
+	}
+	if (bit_set_count(node_map) < min_nodes)
+		return error_code;
+
+	if ((job_ptr->details->req_node_bitmap) &&
+	    (!bit_super_set(job_ptr->details->req_node_bitmap, node_map)))
+		return error_code;
+
+	if (switch_record_cnt && switch_record_table) {
+		/* Perform optimized resource selection based upon topology */
+		return _eval_nodes_topo(job_ptr, node_map, 
+					min_nodes, max_nodes, req_nodes,
+					cr_node_cnt, cpu_cnt, freq, size);
+	}
+
+	consec_size = 50;	/* start allocation for 50 sets of 
+				 * consecutive nodes */
+	consec_cpus  = xmalloc(sizeof(int) * consec_size);
+	consec_nodes = xmalloc(sizeof(int) * consec_size);
+	consec_start = xmalloc(sizeof(int) * consec_size);
+	consec_end   = xmalloc(sizeof(int) * consec_size);
+	consec_req   = xmalloc(sizeof(int) * consec_size);
+
+	/* Build table with information about sets of consecutive nodes */
+	consec_index = 0;
+	consec_cpus[consec_index] = consec_nodes[consec_index] = 0;
+	consec_req[consec_index] = -1;	/* no required nodes here by default */
+
+	rem_cpus = job_ptr->num_procs;
+	rem_nodes = MAX(min_nodes, req_nodes);
+
+	i = 0;
+	f = 0;
+	for (index = 0, ll = -1; index < cr_node_cnt; index++, f++) {
+		if (f >= freq[i]) {
+			f = 0;
+			i++;
+		}
+		if (req_map) {
+			required_node = bit_test(req_map, index);
+		} else
+			required_node = false;
+		if (layout_ptr && required_node)
+			ll++;
+		if (bit_test(node_map, index)) {
+			if (consec_nodes[consec_index] == 0)
+				consec_start[consec_index] = index;
+			avail_cpus = cpu_cnt[i];
+			if (layout_ptr && required_node){
+				avail_cpus = MIN(avail_cpus, layout_ptr[ll]);
+			} else if (layout_ptr) {
+				avail_cpus = 0; /* should not happen? */
+			}
+			if ((max_nodes > 0) && required_node) {
+				if (consec_req[consec_index] == -1) {
+					/* first required node in set */
+					consec_req[consec_index] = index;
+				}
+				rem_cpus -= avail_cpus;
+				rem_nodes--;
+				/* leaving bitmap set, decrement max limit */
+				max_nodes--;
+			} else {	/* node not selected (yet) */
+				bit_clear(node_map, index);
+				consec_cpus[consec_index] += avail_cpus;
+				consec_nodes[consec_index]++;
+			}
+		} else if (consec_nodes[consec_index] == 0) {
+			consec_req[consec_index] = -1;
+			/* already picked up any required nodes */
+			/* re-use this record */
+		} else {
+			consec_end[consec_index] = index - 1;
+			if (++consec_index >= consec_size) {
+				consec_size *= 2;
+				xrealloc(consec_cpus, sizeof(int)*consec_size);
+				xrealloc(consec_nodes,sizeof(int)*consec_size);
+				xrealloc(consec_start,sizeof(int)*consec_size);
+				xrealloc(consec_end,  sizeof(int)*consec_size);
+				xrealloc(consec_req,  sizeof(int)*consec_size);
+			}
+			consec_cpus[consec_index]  = 0;
+			consec_nodes[consec_index] = 0;
+			consec_req[consec_index]   = -1;
+		}
+	}
+	if (consec_nodes[consec_index] != 0)
+		consec_end[consec_index++] = index - 1;
+	
+	for (i = 0; i < consec_index; i++) {
+		debug3("cons_res: eval_nodes:%d consec c=%d n=%d b=%d e=%d r=%d",
+		       i, consec_cpus[i], consec_nodes[i], consec_start[i],
+		       consec_end[i], consec_req[i]);
+	}
+	
+	/* accumulate nodes from these sets of consecutive nodes until */
+	/*   sufficient resources have been accumulated */
+	while (consec_index && (max_nodes > 0)) {
+		best_fit_cpus = best_fit_nodes = best_fit_sufficient = 0;
+		best_fit_req = -1;	/* first required node, -1 if none */
+		for (i = 0; i < consec_index; i++) {
+			if (consec_nodes[i] == 0)
+				continue;	/* no usable nodes here */
+
+			if (job_ptr->details->contiguous &&
+			    job_ptr->details->req_node_bitmap &&
+			    (consec_req[i] == -1))
+				break;  /* not required nodes */
+
+			sufficient = (consec_cpus[i] >= rem_cpus) &&
+				     _enough_nodes(consec_nodes[i], rem_nodes,
+						   min_nodes, req_nodes);
+			
+			/* if first possibility OR */
+			/* contains required nodes OR */
+			/* first set large enough for request OR */
+			/* tightest fit (less resource waste) OR */
+			/* nothing yet large enough, but this is biggest */
+			if ((best_fit_nodes == 0) ||
+			    ((best_fit_req == -1) && (consec_req[i] != -1)) ||
+			    (sufficient && (best_fit_sufficient == 0)) ||
+			    (sufficient && (consec_cpus[i] < best_fit_cpus)) ||
+			    (!sufficient && (consec_cpus[i] > best_fit_cpus))) {
+				best_fit_cpus = consec_cpus[i];
+				best_fit_nodes = consec_nodes[i];
+				best_fit_index = i;
+				best_fit_req = consec_req[i];
+				best_fit_sufficient = sufficient;
+			}
+
+			if (job_ptr->details->contiguous &&
+			    job_ptr->details->req_node_bitmap) {
+				/* Must wait for all required nodes to be 
+				 * in a single consecutive block */
+				int j, other_blocks = 0;
+				for (j = (i+1); j < consec_index; j++) {
+					if (consec_req[j] != -1) {
+						other_blocks = 1;
+						break;
+					}
+				}
+				if (other_blocks) {
+					best_fit_nodes = 0;
+					break;
+				}
+			}
+		}
+		if (best_fit_nodes == 0)
+			break;
+		if (job_ptr->details->contiguous &&
+		    ((best_fit_cpus < rem_cpus) ||
+		     (!_enough_nodes(best_fit_nodes, rem_nodes,
+				     min_nodes, req_nodes))))
+			break;	/* no hole large enough */
+		if (best_fit_req != -1) {
+			/* This collection of nodes includes required ones
+			 * select nodes from this set, first working up
+			 * then down from the required nodes */
+			for (i = best_fit_req;
+			     i <= consec_end[best_fit_index]; i++) {
+				if ((max_nodes <= 0) ||
+				    ((rem_nodes <= 0) && (rem_cpus <= 0)))
+					break;
+				if (bit_test(node_map, i))
+					continue;
+				bit_set(node_map, i);
+				rem_nodes--;
+				max_nodes--;
+				avail_cpus = _get_cpu_cnt(job_ptr, i, cpu_cnt,
+							  freq, size);
+				rem_cpus -= avail_cpus;
+			}
+			for (i = (best_fit_req - 1);
+			     i >= consec_start[best_fit_index]; i--) {
+				if ((max_nodes <= 0) ||
+				    ((rem_nodes <= 0) && (rem_cpus <= 0)))
+					break;
+				if (bit_test(node_map, i)) 
+					continue;
+				avail_cpus = _get_cpu_cnt(job_ptr, i, cpu_cnt,
+							  freq, size);
+				if (avail_cpus <= 0)
+					continue;
+				rem_cpus -= avail_cpus;
+				bit_set(node_map, i);
+				rem_nodes--;
+				max_nodes--;
+			}
+		} else {
+			for (i = consec_start[best_fit_index];
+			     i <= consec_end[best_fit_index]; i++) {
+				if ((max_nodes <= 0) ||
+				    ((rem_nodes <= 0) && (rem_cpus <= 0)))
+					break;
+				if (bit_test(node_map, i))
+					continue;
+				avail_cpus = _get_cpu_cnt(job_ptr, i, cpu_cnt,
+							  freq, size);
+				if (avail_cpus <= 0)
+					continue;
+				if ((max_nodes == 1) && 
+				    (avail_cpus < rem_cpus)) {
+					/* Job can only take one more node and
+					 * this one has insufficient CPU */
+					continue;
+				}
+				rem_cpus -= avail_cpus;
+				bit_set(node_map, i);
+				rem_nodes--;
+				max_nodes--;
+			}
+		}
+
+		if (job_ptr->details->contiguous ||
+		    ((rem_nodes <= 0) && (rem_cpus <= 0))) {
+			error_code = SLURM_SUCCESS;
+			break;
+		}
+		consec_cpus[best_fit_index] = 0;
+		consec_nodes[best_fit_index] = 0;
+	}
+	
+	if (error_code && (rem_cpus <= 0) &&
+	    _enough_nodes(0, rem_nodes, min_nodes, req_nodes))
+		error_code = SLURM_SUCCESS;
+
+	xfree(consec_cpus);
+	xfree(consec_nodes);
+	xfree(consec_start);
+	xfree(consec_end);
+	xfree(consec_req);
+	return error_code;
+}
+
+/*
+ * A network topology aware version of _eval_nodes().
+ * NOTE: The logic here is almost identical to that of _job_test_topo() 
+ *       in select_linear.c. Any bug found here is probably also there.
+ */
+static int _eval_nodes_topo(struct job_record *job_ptr, bitstr_t *bitmap,
+			uint32_t min_nodes, uint32_t max_nodes,
+			uint32_t req_nodes, uint32_t cr_node_cnt,
+			uint16_t *cpu_cnt, uint32_t *freq, uint32_t size)
+{
+	bitstr_t **switches_bitmap;		/* nodes on this switch */
+	int       *switches_cpu_cnt;		/* total CPUs on switch */
+	int       *switches_node_cnt;		/* total nodes on switch */
+	int       *switches_required;		/* set if has required node */
+
+	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 i, j, rc = SLURM_SUCCESS;
+	int best_fit_inx, first, last;
+	int best_fit_nodes, best_fit_cpus;
+	int best_fit_location = 0, best_fit_sufficient;
+	bool sufficient;
+
+	rem_cpus = job_ptr->num_procs;
+	if (req_nodes > min_nodes)
+		rem_nodes = req_nodes;
+	else
+		rem_nodes = min_nodes;
+
+	if (job_ptr->details->req_node_bitmap) {
+		req_nodes_bitmap = bit_copy(job_ptr->details->req_node_bitmap);
+		i = bit_set_count(req_nodes_bitmap);
+		if (i > max_nodes) {
+			info("job %u requires more nodes than currently "
+			     "available (%u>%u)",
+			     job_ptr->job_id, i, max_nodes);
+			rc = SLURM_ERROR;
+			goto fini;
+		}
+	}
+
+	/* Construct a set of switch array entries, 
+	 * use the same indexes as switch_record_table in slurmctld */
+	switches_bitmap   = xmalloc(sizeof(bitstr_t *) * switch_record_cnt);
+	switches_cpu_cnt  = xmalloc(sizeof(int)        * switch_record_cnt);
+	switches_node_cnt = xmalloc(sizeof(int)        * switch_record_cnt);
+	switches_required = xmalloc(sizeof(int)        * switch_record_cnt);
+	avail_nodes_bitmap = bit_alloc(node_record_count);
+	for (i=0; i<switch_record_cnt; i++) {
+		switches_bitmap[i] = bit_copy(switch_record_table[i].
+					      node_bitmap);
+		bit_and(switches_bitmap[i], bitmap);
+		bit_or(avail_nodes_bitmap, switches_bitmap[i]);
+		switches_node_cnt[i] = bit_set_count(switches_bitmap[i]);
+		if (req_nodes_bitmap &&
+		    bit_overlap(req_nodes_bitmap, switches_bitmap[i])) {
+			switches_required[i] = 1;
+		}
+	}
+	bit_nclear(bitmap, 0, node_record_count - 1);
+
+#if SELECT_DEBUG
+	/* Don't compile this, it slows things down too much */
+	for (i=0; i<switch_record_cnt; i++) {
+		char *node_names = NULL;
+		if (switches_node_cnt[i])
+			node_names = bitmap2node_name(switches_bitmap[i]);
+		debug("switch=%s nodes=%u:%s required:%u speed:%u",
+		      switch_record_table[i].name,
+		      switches_node_cnt[i], node_names,
+		      switches_required[i],
+		      switch_record_table[i].link_speed);
+		xfree(node_names);
+	}
+#endif
+
+	if (req_nodes_bitmap &&
+	    (!bit_super_set(req_nodes_bitmap, avail_nodes_bitmap))) {
+		info("job %u requires nodes not available on any switch",
+		     job_ptr->job_id);
+		rc = SLURM_ERROR;
+		goto fini;
+	}
+
+	if (req_nodes_bitmap) {
+		/* Accumulate specific required resources, if any */
+		first = bit_ffs(req_nodes_bitmap);
+		last  = bit_fls(req_nodes_bitmap);
+		for (i=first; ((i<=last) && (first>=0)); i++) {
+			if (!bit_test(req_nodes_bitmap, i))
+				continue;
+			if (max_nodes <= 0) {
+				info("job %u requires nodes than allowed",
+				     job_ptr->job_id);
+				rc = SLURM_ERROR;
+				goto fini;
+			}
+			bit_set(bitmap, i);
+			bit_clear(avail_nodes_bitmap, i);
+			rem_nodes--;
+			max_nodes--;
+			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;
+				bit_clear(switches_bitmap[j], i);
+				switches_node_cnt[j]--;
+			}
+		}
+		if ((rem_nodes <= 0) && (rem_cpus <= 0))
+			goto fini;
+
+		/* Accumulate additional resources from leafs that
+		 * contain required nodes */
+		for (j=0; j<switch_record_cnt; j++) {
+			if ((switch_record_table[j].level != 0) ||
+			    (switches_node_cnt[j] == 0) ||
+			    (switches_required[j] == 0)) {
+				continue;
+			}
+			while ((max_nodes > 0) &&
+			       ((rem_nodes > 0) || (rem_cpus > 0))) {
+				i = bit_ffs(switches_bitmap[j]);
+				if (i == -1)
+					break;
+				bit_clear(switches_bitmap[j], i);
+				switches_node_cnt[j]--;
+				if (bit_test(bitmap, i)) {
+					/* node on multiple leaf switches
+					 * and already selected */
+					continue;
+				}
+				bit_set(bitmap, i);
+				bit_clear(avail_nodes_bitmap, i);
+				rem_nodes--;
+				max_nodes--;
+				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))
+			goto fini;
+
+		/* Update bitmaps and node counts for higher-level switches */
+		for (j=0; j<switch_record_cnt; j++) {
+			if (switches_node_cnt[j] == 0)
+				continue;
+			first = bit_ffs(switches_bitmap[j]);
+			if (first < 0)
+				continue;
+			last  = bit_fls(switches_bitmap[j]);
+			for (i=first; i<=last; i++) {
+				if (!bit_test(switches_bitmap[j], i))
+					continue;
+				if (!bit_test(avail_nodes_bitmap, i)) {
+					/* cleared from lower level */
+					bit_clear(switches_bitmap[j], i);
+					switches_node_cnt[j]--;
+				} else {
+					switches_cpu_cnt[j] += 
+						_get_cpu_cnt(job_ptr, i, 
+							     cpu_cnt, freq, 
+							     size);
+				}
+			}
+		}
+	} else {
+		/* No specific required nodes, calculate CPU counts */
+		for (j=0; j<switch_record_cnt; j++) {
+			first = bit_ffs(switches_bitmap[j]);
+			if (first < 0)
+				continue;
+			last  = bit_fls(switches_bitmap[j]);
+			for (i=first; i<=last; i++) {
+				if (!bit_test(switches_bitmap[j], i))
+					continue;
+				switches_cpu_cnt[j] += 
+					_get_cpu_cnt(job_ptr, i, cpu_cnt,
+						     freq, size);
+			}
+		}
+	}
+
+	/* Determine lowest level switch satifying request with best fit */
+	best_fit_inx = -1;
+	for (j=0; j<switch_record_cnt; j++) {
+		if ((switches_cpu_cnt[j]  < rem_cpus) ||
+		    (!_enough_nodes(switches_node_cnt[j], rem_nodes,
+				    min_nodes, req_nodes)))
+			continue;
+		if ((best_fit_inx == -1) ||
+		    (switch_record_table[j].level <
+		     switch_record_table[best_fit_inx].level) ||
+		    ((switch_record_table[j].level ==
+		      switch_record_table[best_fit_inx].level) &&
+		     (switches_node_cnt[j] < switches_node_cnt[best_fit_inx])))
+			best_fit_inx = j;
+	}
+	if (best_fit_inx == -1) {
+		error("job %u: best_fit topology failure", job_ptr->job_id);
+		rc = SLURM_ERROR;
+		goto fini;
+	}
+	bit_and(avail_nodes_bitmap, switches_bitmap[best_fit_inx]);
+
+	/* Identify usable leafs (within higher switch having best fit) */
+	for (j=0; j<switch_record_cnt; j++) {
+		if ((switch_record_table[j].level != 0) ||
+		    (!bit_super_set(switches_bitmap[j], 
+				    switches_bitmap[best_fit_inx]))) {
+			switches_node_cnt[j] = 0;
+		}
+	}
+
+	/* Select resources from these leafs on a best-fit basis */
+	while ((max_nodes > 0) && ((rem_nodes > 0) || (rem_cpus > 0))) {
+		best_fit_cpus = best_fit_nodes = best_fit_sufficient = 0;
+		for (j=0; j<switch_record_cnt; j++) {
+			if (switches_node_cnt[j] == 0)
+				continue;
+			sufficient = (switches_cpu_cnt[j] >= rem_cpus) &&
+				     _enough_nodes(switches_node_cnt[j], 
+						   rem_nodes, min_nodes, 
+						   req_nodes);
+			/* If first possibility OR */
+			/* first set large enough for request OR */
+			/* tightest fit (less resource waste) OR */
+			/* nothing yet large enough, but this is biggest */
+			if ((best_fit_nodes == 0) ||	
+			    (sufficient && (best_fit_sufficient == 0)) ||
+			    (sufficient && 
+			     (switches_cpu_cnt[j] < best_fit_cpus)) ||
+			    ((sufficient == 0) && 
+			     (switches_cpu_cnt[j] > best_fit_cpus))) {
+				best_fit_cpus =  switches_cpu_cnt[j];
+				best_fit_nodes = switches_node_cnt[j];
+				best_fit_location = j;
+				best_fit_sufficient = sufficient;
+			}
+		}
+		if (best_fit_nodes == 0)
+			break;
+
+		/* Use select nodes from this leaf */
+		first = bit_ffs(switches_bitmap[best_fit_location]);
+		last  = bit_fls(switches_bitmap[best_fit_location]);
+		for (i=first; ((i<=last) && (first>=0)); i++) {
+			if (!bit_test(switches_bitmap[best_fit_location], i))
+				continue;
+
+			bit_clear(switches_bitmap[best_fit_location], i);
+			switches_node_cnt[best_fit_location]--;
+			avail_cpus = _get_cpu_cnt(job_ptr, i, cpu_cnt,
+						  freq, size);
+			switches_cpu_cnt[best_fit_location] -= avail_cpus;
+
+			if (bit_test(bitmap, i)) {
+				/* node on multiple leaf switches
+				 * and already selected */
+				continue;
+			}
+
+			bit_set(bitmap, i);
+			rem_nodes--;
+			max_nodes--;
+			rem_cpus   -= avail_cpus;
+			alloc_cpus += avail_cpus;
+			if ((max_nodes <= 0) || 
+			    ((rem_nodes <= 0) && (rem_cpus <= 0)))
+				break;
+		}
+		switches_node_cnt[best_fit_location] = 0;
+	}
+	if ((rem_cpus <= 0) && 
+	    _enough_nodes(0, rem_nodes, min_nodes, req_nodes)) {
+		rc = SLURM_SUCCESS;
+	} 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);
+	FREE_NULL_BITMAP(req_nodes_bitmap);
+	for (i=0; i<switch_record_cnt; i++)
+		bit_free(switches_bitmap[i]);
+	xfree(switches_bitmap);
+	xfree(switches_cpu_cnt);
+	xfree(switches_node_cnt);
+	xfree(switches_required);
+
+	return rc;
+}
+
+/* this is an intermediary step between _select_nodes and _eval_nodes
+ * to tackle the knapsack problem. This code incrementally removes nodes
+ * with low cpu counts for the job and re-evaluates each result */
+static int _choose_nodes(struct job_record *job_ptr, bitstr_t *node_map,
+			 uint32_t min_nodes, uint32_t max_nodes, 
+			 uint32_t req_nodes, uint32_t cr_node_cnt,
+			 uint16_t *cpu_cnt, uint32_t *freq, uint32_t size)
+{
+	int i, b, node_boundary, count, ec, most_cpus = 0;
+	bitstr_t *origmap, *reqmap = NULL;
+
+	if (job_ptr->details->req_node_bitmap)
+		reqmap = job_ptr->details->req_node_bitmap;
+
+	/* clear nodes from the bitmap that don't have available resources */
+	for (i = 0, b = 0; i < size; i++) {
+		for (count = 0; count < freq[i]; count++, b++) {
+			if (bit_test(node_map, b) && cpu_cnt[i] < 1) {
+				if (reqmap && bit_test(reqmap, b)) {
+					/* can't clear a required node! */
+					return SLURM_ERROR;
+				}
+				bit_clear(node_map, b); 
+			}
+		}
+	}
+
+	/* NOTE: num_procs is 1 by default, 
+	 * Only reset max_nodes if user explicitly sets a proc count */
+	if ((job_ptr->num_procs > 1) && (max_nodes > job_ptr->num_procs))
+		max_nodes = job_ptr->num_procs;
+
+	origmap = bit_copy(node_map);
+	if (origmap == NULL)
+		fatal("bit_copy malloc failure");
+
+	ec = _eval_nodes(job_ptr, node_map, min_nodes, max_nodes,
+			 req_nodes, cr_node_cnt, cpu_cnt, freq, size);
+
+	if (ec == SLURM_SUCCESS) {
+		FREE_NULL_BITMAP(origmap);
+		return ec;
+	}
+
+	/* This nodeset didn't work. To avoid a possible knapsack problem, 
+	 * incrementally remove nodes with low cpu counts and retry */
+
+	/* find the higest number of cpus per node */
+	for (i = 0; i < size; i++) {
+		if (cpu_cnt[i] > most_cpus)
+			most_cpus = cpu_cnt[i];
+	}
+
+	for (count = 1; count < most_cpus; count++) {
+		int nochange = 1;
+		bit_or(node_map, origmap);
+		for (i = 0, node_boundary = 0; i < size; i++) {
+			if (cpu_cnt[i] > 0 && cpu_cnt[i] <= count) {
+				int j, n = node_boundary;
+				for (j = 0; j < freq[i]; j++, n++) {
+					if (!bit_test(node_map, n))
+						continue;
+					if (reqmap && bit_test(reqmap, n)) {
+						continue;
+					}
+					nochange = 0;
+					bit_clear(node_map, n);
+					bit_clear(origmap, n);
+				}
+			}
+			node_boundary += freq[i];
+		}
+		if (nochange)
+			continue;
+		ec = _eval_nodes(job_ptr, node_map, min_nodes, max_nodes,
+				 req_nodes, cr_node_cnt, cpu_cnt, freq, size);
+		if (ec == SLURM_SUCCESS) {
+			FREE_NULL_BITMAP(origmap);
+			return ec;
+		}
+	}
+	FREE_NULL_BITMAP(origmap);
+	return ec;
+}
+
+
+/* Select the best set of resources for the given job
+ * IN: job_ptr      - pointer to the job requesting resources
+ * IN: min_nodes    - minimum number of nodes required
+ * IN: max_nodes    - maximum number of nodes requested
+ * IN: req_nodes    - number of requested nodes
+ * IN/OUT: node_map - bitmap of available nodes / bitmap of selected nodes
+ * IN: cr_node_cnt  - total number of nodes in the cluster
+ * IN/OUT: core_map - bitmap of available cores / bitmap of selected cores
+ * IN: cr_type      - resource type
+ * IN: test_only    - ignore allocated memory check
+ * OUT:             return SLURM_SUCCESS if an allocation was found
+ */
+static uint16_t *_select_nodes(struct job_record *job_ptr, uint32_t min_nodes,
+				uint32_t max_nodes, uint32_t req_nodes,
+				bitstr_t *node_map, uint32_t cr_node_cnt,
+				bitstr_t *core_map,
+				struct node_use_record *node_usage,
+				select_type_plugin_info_t cr_type,
+				bool test_only)
+{
+	int rc;
+	uint16_t *cpu_cnt, *cpus = NULL;
+	uint32_t start, n, a, i, f, size, *freq;
+	bitstr_t *req_map = job_ptr->details->req_node_bitmap;
+	
+	if (bit_set_count(node_map) < min_nodes)
+		return NULL;
+
+	/* get resource usage for this job from each available node */
+	size = _get_res_usage(job_ptr, node_map, core_map, cr_node_cnt,
+			      node_usage, cr_type, &cpu_cnt, &freq,
+			      test_only);
+
+	/* clear all nodes that do not have any
+	 * usable resources for this job */
+	i = f = 0;
+	for (n = 0; n < cr_node_cnt; n++) {
+		if (bit_test(node_map, n) && cpu_cnt[i] == 0) {
+			/* no resources are available for this node */
+			if (req_map && bit_test(req_map, n)) {
+				/* cannot clear a required node! */
+				xfree(cpu_cnt);
+				xfree(freq);
+				return NULL;
+			}
+			bit_clear(node_map, n);
+		}
+		f++;
+		if (f >= freq[i]) {
+			f = 0;
+			i++;
+		}
+	}
+	if (bit_set_count(node_map) < min_nodes) {
+		xfree(cpu_cnt);
+		xfree(freq);
+		return NULL;
+	}
+
+	/* choose the best nodes for the job */
+	rc = _choose_nodes(job_ptr, node_map, min_nodes, max_nodes, req_nodes,
+			   cr_node_cnt, cpu_cnt, freq, size);
+	
+	/* if successful, sync up the core_map with the node_map, and
+	 * create a cpus array */
+	if (rc == SLURM_SUCCESS) {
+		cpus = xmalloc(bit_set_count(node_map) * sizeof(uint16_t));
+		start = 0;
+		a = i = f = 0;
+		for (n = 0; n < cr_node_cnt; n++) {
+			if (bit_test(node_map, n)) {
+				cpus[a++] = cpu_cnt[i];
+				if (cr_get_coremap_offset(n) != start) {
+					bit_nclear(core_map, start, 
+						(cr_get_coremap_offset(n))-1);
+				}
+				start = cr_get_coremap_offset(n+1);
+			}
+			f++;
+			if (f >= freq[i]) {
+				f = 0;
+				i++;
+			}
+		}
+		if (cr_get_coremap_offset(n) != start) {
+			bit_nclear(core_map, start,
+						(cr_get_coremap_offset(n))-1);
+		}
+	}
+
+	xfree(cpu_cnt);
+	xfree(freq);
+	return cpus;
+}
+
+
+/* cr_job_test - does most of the real work for select_p_job_test(), which 
+ *	includes contiguous selection, load-leveling and max_share logic
+ *
+ * PROCEDURE:
+ *
+ * Step 1: compare nodes in "avail" bitmap with current node state data
+ *         to find available nodes that match the job request
+ *
+ * Step 2: check resources in "avail" bitmap with allocated resources from
+ *         higher priority partitions (busy resources are UNavailable)
+ *
+ * Step 3: select resource usage on remaining resources in "avail" bitmap
+ *         for this job, with the placement influenced by existing
+ *         allocations
+ */
+extern int cr_job_test(struct job_record *job_ptr, bitstr_t *bitmap,
+			uint32_t min_nodes, uint32_t max_nodes, 
+			uint32_t req_nodes, int mode,
+			select_type_plugin_info_t cr_type,
+			enum node_cr_state job_node_req, uint32_t cr_node_cnt,
+			struct part_res_record *cr_part_ptr,
+			struct node_use_record *node_usage)
+{
+	int error_code = SLURM_SUCCESS, ll; /* ll = layout array index */
+	uint16_t *layout_ptr = NULL;
+	bitstr_t *orig_map, *avail_cores, *free_cores;
+	bitstr_t *tmpcore = NULL, *reqmap = NULL;
+	bool test_only;
+	uint32_t c, i, n, csize, total_cpus, save_mem = 0;
+	int32_t build_cnt;
+	select_job_res_t job_res;
+	struct part_res_record *p_ptr, *jp_ptr;
+	uint16_t *cpu_count;
+
+	layout_ptr = job_ptr->details->req_node_layout;
+	reqmap = job_ptr->details->req_node_bitmap;
+	
+	free_select_job_res(&job_ptr->select_job);
+
+	if (mode == SELECT_MODE_TEST_ONLY)
+		test_only = true;
+	else	/* SELECT_MODE_RUN_NOW || SELECT_MODE_WILL_RUN  */ 
+		test_only = false;
+
+	/* check node_state and update the node bitmap as necessary */
+	if (!test_only) {
+		error_code = _verify_node_state(cr_part_ptr, job_ptr, 
+						bitmap, cr_type, node_usage,
+						job_node_req);
+		if (error_code != SLURM_SUCCESS) {
+			return error_code;
+		}
+	}
+
+	/* This is the case if -O/--overcommit  is true */ 
+	if (job_ptr->num_procs == job_ptr->details->min_nodes) {
+		struct multi_core_data *mc_ptr = job_ptr->details->mc_ptr;
+		job_ptr->num_procs *= MAX(1, mc_ptr->min_threads);
+		job_ptr->num_procs *= MAX(1, mc_ptr->min_cores);
+		job_ptr->num_procs *= MAX(1, mc_ptr->min_sockets);
+	}
+
+	debug3("cons_res: cr_job_test: evaluating job %u on %u nodes",
+		job_ptr->job_id, bit_set_count(bitmap));
+
+	orig_map = bit_copy(bitmap);
+	avail_cores = _make_core_bitmap(bitmap);
+
+	/* test to make sure that this job can succeed with all avail_cores
+	 * if 'no' then return FAIL
+	 * if 'yes' then we will seek the optimal placement for this job
+	 *          within avail_cores
+	 */
+	free_cores = bit_copy(avail_cores);
+	cpu_count = _select_nodes(job_ptr, min_nodes, max_nodes, req_nodes,
+				   bitmap, cr_node_cnt, free_cores,
+				   node_usage, cr_type, test_only);
+	if (cpu_count == NULL) {
+		/* job cannot fit */
+		FREE_NULL_BITMAP(orig_map);
+		FREE_NULL_BITMAP(free_cores);
+		FREE_NULL_BITMAP(avail_cores);
+		debug3("cons_res: cr_job_test: test 0 fail: "
+		       "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 */
+		FREE_NULL_BITMAP(orig_map);
+		FREE_NULL_BITMAP(free_cores);
+		FREE_NULL_BITMAP(avail_cores);
+		xfree(cpu_count);
+		debug3("cons_res: cr_job_test: test 0 pass: test_only"); 
+		return SLURM_SUCCESS;
+	}
+	if (cr_type == CR_MEMORY) {
+		/* CR_MEMORY does not care about existing CPU allocations,
+		 * so we can jump right to job allocation from here */
+		goto alloc_job;
+	}
+	xfree(cpu_count);
+	debug3("cons_res: cr_job_test: test 0 pass - "
+	       "job fits on given resources");
+
+	/* now that we know that this job can run with the given resources,
+	 * let's factor in the existing allocations and seek the optimal set
+	 * 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:
+	 *
+	 * Step 2: Remove resources that are in use by higher-pri partitions,
+	 *         and test that job can still succeed. If not then exit.
+	 *
+	 * Step 3: Seek idle nodes among the partitions with the same
+	 *         priority as the job's partition. If successful then
+	 *         goto Step 6. If not then continue:
+	 *
+	 * Step 4: Seek placement within the job's partition. Search
+	 *         row-by-row. If no placement if found, then exit. If a row
+	 *         is found, then continue:
+	 *
+	 * Step 5: Place job and exit. FIXME! Here is where we need a
+	 *         placement algorithm that recognizes existing job
+	 *         boundaries and tries to "overlap jobs" as efficiently
+	 *         as possible.
+	 *
+	 * Step 6: Place job and exit. FIXME! here is we use a placement
+	 *         algorithm similar to Step 5 on jobs from lower-priority
+	 *         partitions.
+	 */
+
+
+	/*** Step 1 ***/
+	bit_copybits(bitmap, orig_map);
+	bit_copybits(free_cores, avail_cores);
+
+	/* remove all existing allocations from free_cores */
+	tmpcore = bit_copy(free_cores);
+	for(p_ptr = cr_part_ptr; p_ptr; p_ptr = p_ptr->next) {
+		if (!p_ptr->row)
+			continue;
+		for (i = 0; i < p_ptr->num_rows; i++) {
+			if (!p_ptr->row[i].row_bitmap)
+				continue;
+			bit_copybits(tmpcore, p_ptr->row[i].row_bitmap);
+			bit_not(tmpcore); /* set bits now "free" resources */
+			bit_and(free_cores, tmpcore);
+		}
+	}
+	cpu_count = _select_nodes(job_ptr, min_nodes, max_nodes, req_nodes,
+				  bitmap, cr_node_cnt, free_cores,
+				  node_usage, cr_type, test_only);
+	if (cpu_count) {
+		/* job fits! We're done. */
+		debug3("cons_res: cr_job_test: test 1 pass - "
+		       "idle resources found");
+		goto alloc_job;
+	}
+	debug3("cons_res: cr_job_test: test 1 fail - "
+	       "not enough idle resources");
+
+	/*** Step 2 ***/
+	bit_copybits(bitmap, orig_map);
+	bit_copybits(free_cores, avail_cores);
+	
+	for (jp_ptr = cr_part_ptr; jp_ptr; jp_ptr = jp_ptr->next) {
+		if (strcmp(jp_ptr->name, job_ptr->part_ptr->name) == 0)
+			break;
+	}
+	if (!jp_ptr)
+		fatal("cons_res error: could not find partition for job %u",
+			job_ptr->job_id);
+
+	/* remove hi-pri existing allocations from avail_cores */
+	for(p_ptr = cr_part_ptr; p_ptr; p_ptr = p_ptr->next) {
+		if (p_ptr->priority <= jp_ptr->priority)
+			continue;
+		if (!p_ptr->row)
+			continue;
+		for (i = 0; i < p_ptr->num_rows; i++) {
+			if (!p_ptr->row[i].row_bitmap)
+				continue;
+			bit_copybits(tmpcore, p_ptr->row[i].row_bitmap);
+			bit_not(tmpcore); /* set bits now "free" resources */
+			bit_and(free_cores, tmpcore);
+		}
+	}
+	/* make these changes permanent */
+	bit_copybits(avail_cores, free_cores);
+	cpu_count = _select_nodes(job_ptr, min_nodes, max_nodes, req_nodes,
+				  bitmap, cr_node_cnt, free_cores,
+				  node_usage, cr_type, test_only);
+	if (!cpu_count) {
+		/* job needs resources that are currently in use by
+		 * higher-priority jobs, so fail for now */
+		debug3("cons_res: cr_job_test: test 2 fail - "
+			"resources busy with higher priority jobs");
+		goto alloc_job;
+	}
+	xfree(cpu_count);
+	debug3("cons_res: cr_job_test: test 2 pass - "
+	       "available resources for this priority");
+
+	/*** Step 3 ***/
+	bit_copybits(bitmap, orig_map);
+	bit_copybits(free_cores, avail_cores);
+	
+	/* remove same-priority existing allocations from free_cores */
+	for(p_ptr = cr_part_ptr; p_ptr; p_ptr = p_ptr->next) {
+		if (p_ptr->priority != jp_ptr->priority)
+			continue;
+		if (!p_ptr->row)
+			continue;
+		for (i = 0; i < p_ptr->num_rows; i++) {
+			if (!p_ptr->row[i].row_bitmap)
+				continue;
+			bit_copybits(tmpcore, p_ptr->row[i].row_bitmap);
+			bit_not(tmpcore); /* set bits now "free" resources */
+			bit_and(free_cores, tmpcore);
+		}
+	}
+	cpu_count = _select_nodes(job_ptr, min_nodes, max_nodes, req_nodes,
+				   bitmap, cr_node_cnt, free_cores,
+				   node_usage, cr_type, test_only);
+	if (cpu_count) {
+		/* lo-pri jobs are the only thing left in our way.
+		 * for now we'll ignore them, but FIXME: we need
+		 * a good placement algorithm here that optimizes
+		 * "job overlap" between this job (in these idle
+		 * nodes) and the lo-pri jobs */
+		debug3("cons_res: cr_job_test: test 3 pass - found resources");
+		goto alloc_job;
+	}
+	debug3("cons_res: cr_job_test: test 3 fail - "
+	       "not enough idle resources in same priority");
+	
+	
+	/*** Step 4 ***/	
+	/* try to fit the job into an existing row */
+	/*
+	 * tmpcore = worker core_bitmap
+	 * free_cores = core_bitmap to be built
+	 * avail_cores = static core_bitmap of all available cores
+	 */
+	
+	if (jp_ptr->row == NULL) {
+		/* there's no existing jobs in this partition, so place
+		 * the job in avail_cores. FIXME: still need a good
+		 * placement algorithm here that optimizes "job overlap"
+		 * between this job (in these idle nodes) and existing
+		 * jobs in the other partitions with <= priority to
+		 * this partition */
+		bit_copybits(bitmap, orig_map);
+		bit_copybits(free_cores, avail_cores);
+		cpu_count = _select_nodes(job_ptr, min_nodes, max_nodes,
+					  req_nodes, bitmap, cr_node_cnt,
+					  free_cores, node_usage, cr_type, 
+					  test_only);
+		debug3("cons_res: cr_job_test: test 4 pass - first row found");
+		goto alloc_job;
+	}
+
+	cr_sort_part_rows(jp_ptr);
+	c = jp_ptr->num_rows;
+	if (job_node_req != NODE_CR_AVAILABLE)
+		c = 1;
+	for (i = 0; i < c; i++) {
+		if (!jp_ptr->row[i].row_bitmap)
+			break;
+		bit_copybits(bitmap, orig_map);
+		bit_copybits(free_cores, avail_cores);
+		bit_copybits(tmpcore, jp_ptr->row[i].row_bitmap);
+		bit_not(tmpcore);
+		bit_and(free_cores, tmpcore);
+		cpu_count = _select_nodes(job_ptr, min_nodes, max_nodes,
+					  req_nodes, bitmap, cr_node_cnt,
+					  free_cores, node_usage, cr_type,
+					  test_only);
+		if (cpu_count) {
+			debug3("cons_res: cr_job_test: test 4 pass - row %i",i);
+			break;
+		}
+		debug3("cons_res: cr_job_test: test 4 fail - row %i", i);
+	}
+
+	if (i < c && !jp_ptr->row[i].row_bitmap) {
+		/* we've found an empty row, so use it */
+		bit_copybits(bitmap, orig_map);
+		bit_copybits(free_cores, avail_cores);
+		debug3("cons_res: cr_job_test: test 4 trying empty row %i",i);
+		cpu_count = _select_nodes(job_ptr, min_nodes, max_nodes,
+					  req_nodes, bitmap, cr_node_cnt,
+					  free_cores, node_usage, cr_type,
+					  test_only);
+	}
+
+	if (!cpu_count) {
+		/* job can't fit into any row, so exit */
+		debug3("cons_res: cr_job_test: test 4 fail - busy partition");
+		goto alloc_job;
+		
+	}
+
+	/*** CONSTRUCTION ZONE FOR STEPs 5 AND 6 ***
+	 *  Note that while the job may have fit into a row, it should
+	 *  still be run through a good placement algorithm here that
+	 * optimizes "job overlap" between this job (in these idle nodes)
+	 * and existing jobs in the other partitions with <= priority to
+	 * this partition */
+
+alloc_job:
+	/* at this point we've found a good set of
+	 * bits to allocate to this job:
+	 * - bitmap is the set of nodes to allocate
+	 * - free_cores is the set of allocated cores
+	 * - cpu_count is the number of cpus per allocated node
+	 *
+	 * Next steps are to cleanup the worker variables,
+	 * create the select_job_res struct,
+	 * distribute the job on the bits, and exit
+	 */
+	FREE_NULL_BITMAP(orig_map);
+	FREE_NULL_BITMAP(avail_cores);
+	FREE_NULL_BITMAP(tmpcore);
+	if (!cpu_count) {
+		/* we were sent here to cleanup and exit */
+		FREE_NULL_BITMAP(free_cores);
+		debug3("cons_res: exiting cr_job_test with no allocation");
+		return SLURM_ERROR;
+	}
+
+	/* At this point we have:
+	 * - a bitmap of selected nodes
+	 * - a free_cores bitmap of usable cores on each selected node
+	 * - a per-alloc-node cpu_count array
+	 */
+
+	if ((mode != SELECT_MODE_WILL_RUN) && (job_ptr->part_ptr == NULL))
+		error_code = EINVAL;
+	if ((error_code != SLURM_SUCCESS) || (mode != SELECT_MODE_RUN_NOW)) {
+		FREE_NULL_BITMAP(free_cores);
+		xfree(cpu_count);
+		return error_code;
+	}
+
+	debug3("cons_res: cr_job_test: distributing job %u", job_ptr->job_id);
+	/** create the struct_job_res  **/
+	job_res                   = create_select_job_res();
+	job_res->node_bitmap      = bit_copy(bitmap);
+	if (job_res->node_bitmap == NULL)
+		fatal("bit_copy malloc failure");
+	job_res->nhosts           = bit_set_count(bitmap);
+	job_res->nprocs           = job_res->nhosts;
+	if (job_ptr->details->ntasks_per_node)
+		job_res->nprocs  *= job_ptr->details->ntasks_per_node;
+	job_res->nprocs           = MAX(job_res->nprocs, job_ptr->num_procs);
+	job_res->node_req         = job_node_req;
+	job_res->cpus             = cpu_count;
+	job_res->cpus_used        = xmalloc(job_res->nhosts * sizeof(uint16_t));
+	job_res->memory_allocated = xmalloc(job_res->nhosts * sizeof(uint32_t));
+	job_res->memory_used      = xmalloc(job_res->nhosts * sizeof(uint32_t));
+
+	/* store the hardware data for the selected nodes */
+	error_code = build_select_job_res(job_res, node_record_table_ptr,
+					  select_fast_schedule);
+	if (error_code != SLURM_SUCCESS) {
+		free_select_job_res(&job_res);		
+		FREE_NULL_BITMAP(free_cores);
+		return error_code;
+	}
+
+	/* sync up cpus with layout_ptr, total up
+	 * all cpus, and load the core_bitmap */
+	ll = -1;
+	total_cpus = 0;
+	c = 0;
+	csize = bit_size(job_res->core_bitmap);
+	for (i = 0, n = 0; n < cr_node_cnt; n++) {
+		uint32_t j;
+		if (layout_ptr && reqmap && bit_test(reqmap,n))
+			ll++;
+		if (bit_test(bitmap, n) == 0)
+			continue;
+		j = cr_get_coremap_offset(n);
+		for (; j < cr_get_coremap_offset(n+1); j++, c++) {
+			if (bit_test(free_cores, j)) {
+				if (c >= csize)	{
+					fatal("cons_res: cr_job_test "
+					      "core_bitmap index error");
+				}
+				bit_set(job_res->core_bitmap, c);
+			}
+		}
+		
+		if (layout_ptr && reqmap && bit_test(reqmap, n)) {
+			job_res->cpus[i] = MIN(job_res->cpus[i],layout_ptr[ll]);
+		} else if (layout_ptr) {
+			job_res->cpus[i] = 0;
+		}
+		total_cpus += job_res->cpus[i];
+		i++;
+	}
+
+	/* When 'srun --overcommit' is used, nprocs is set to a minimum value
+	 * in order to allocate the appropriate number of nodes based on the
+	 * job request.
+	 * For cons_res, all available logical processors will be allocated on
+	 * each allocated node in order to accommodate the overcommit request.
+	 */
+	if (job_ptr->details->overcommit && job_ptr->details->num_tasks)
+		job_res->nprocs = MIN(total_cpus, job_ptr->details->num_tasks);
+
+	debug3("cons_res: cr_job_test: job %u nprocs %u cbits %u/%u nbits %u",
+		job_ptr->job_id, job_res->nprocs, bit_set_count(free_cores),
+		bit_set_count(job_res->core_bitmap), job_res->nhosts);
+	FREE_NULL_BITMAP(free_cores);
+
+	/* distribute the tasks and clear any unused cores */
+	job_ptr->select_job = job_res;
+	error_code = cr_dist(job_ptr, cr_type);
+	if (error_code != SLURM_SUCCESS) {
+		free_select_job_res(&job_ptr->select_job);
+		return error_code;
+	}
+
+	/* translate job_res->cpus array into format with rep count */
+	build_cnt = build_select_job_res_cpu_array(job_res);
+	if (build_cnt >= 0)
+		job_ptr->total_procs = build_cnt;
+	else
+		job_ptr->total_procs = total_cpus;	/* best guess */
+
+	if ((cr_type != CR_CPU_MEMORY) && (cr_type != CR_CORE_MEMORY) &&
+	    (cr_type != CR_SOCKET_MEMORY) && (cr_type != CR_MEMORY))
+		return error_code;
+
+	/* load memory allocated array */
+	save_mem =job_ptr->details->job_min_memory;
+	if (save_mem & MEM_PER_CPU) {
+		/* memory is per-cpu */
+		save_mem &= (~MEM_PER_CPU);
+		for (i = 0; i < job_res->nhosts; i++) {
+			job_res->memory_allocated[i] = job_res->cpus[i] *
+						       save_mem;
+		}
+	} else {
+		/* memory is per-node */
+		for (i = 0; i < job_res->nhosts; i++) {
+			job_res->memory_allocated[i] = save_mem;
+		}
+	}
+	return error_code;
+}
diff --git a/src/plugins/select/cons_res/job_test.h b/src/plugins/select/cons_res/job_test.h
new file mode 100644
index 000000000..ae39c7191
--- /dev/null
+++ b/src/plugins/select/cons_res/job_test.h
@@ -0,0 +1,70 @@
+/*****************************************************************************\
+ *  select_cons_res.h 
+ *
+ *  $Id: select_cons_res.h,v 1.3 2006/10/31 20:01:38 palermo Exp $
+ *****************************************************************************
+ *  Copyright (C) 2006 Hewlett-Packard Development Company, L.P.
+ *  Written by Susanne M. Balle, <susanne.balle@hp.com>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *  
+ *  In addition, as a special exception, the copyright holders give permission
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and
+ *  distribute linked combinations including the two. You must obey the GNU
+ *  General Public License in all respects for all of the code used other than
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this
+ *  exception to your version of the file(s), but you are not obligated to do
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in
+ *  the program, then also delete it here.
+ *
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _CR_JOB_TEST_H
+#define _CR_JOB_TEST_H
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <slurm/slurm.h>
+#include <slurm/slurm_errno.h>
+
+#include "src/common/list.h"
+#include "src/common/log.h"
+#include "src/common/node_select.h"
+#include "src/common/pack.h"
+#include "src/common/slurm_protocol_api.h"
+#include "src/common/xassert.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
+#include "src/common/slurm_resource_info.h"
+#include "src/slurmctld/slurmctld.h"
+
+
+/* _job_test - does most of the real work for select_p_job_test(), which 
+ *	pretty much just handles load-leveling and max_share logic */
+int cr_job_test(struct job_record *job_ptr, bitstr_t *bitmap,
+		uint32_t min_nodes, uint32_t max_nodes, uint32_t req_nodes,
+		int mode, select_type_plugin_info_t cr_type,
+		enum node_cr_state job_node_req, uint32_t cr_node_cnt,
+		struct part_res_record *cr_part_ptr,
+		struct node_use_record *node_usage);
+
+#endif /* !_CR_JOB_TEST_H */
diff --git a/src/plugins/select/cons_res/select_cons_res.c b/src/plugins/select/cons_res/select_cons_res.c
index 7c6d07b26..cebb6c078 100644
--- a/src/plugins/select/cons_res/select_cons_res.c
+++ b/src/plugins/select/cons_res/select_cons_res.c
@@ -1,8 +1,6 @@
 /*****************************************************************************\
  *  select_cons_res.c - node selection plugin supporting consumable 
  *  resources policies.
- *
- *  $Id: select_cons_res.c 17022 2009-03-25 18:42:18Z jette $
  *****************************************************************************\
  *
  *  The following example below illustrates how four jobs are allocated
@@ -59,12 +57,13 @@
  * the job throughput can increase dramatically.
  *
  *****************************************************************************
- *  Copyright (C) 2005-2006 Hewlett-Packard Development Company, L.P.
+ *  Copyright (C) 2005-2008 Hewlett-Packard Development Company, L.P.
  *  Written by Susanne M. Balle <susanne.balle@hp.com>, who borrowed heavily
  *  from select/linear 
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -104,6 +103,7 @@
 
 #include "select_cons_res.h"
 #include "dist_tasks.h"
+#include "job_test.h"
 
 #if(0)
 #define CR_DEBUG 1
@@ -139,995 +139,868 @@
  */
 const char plugin_name[] = "Consumable Resources (CR) Node Selection plugin";
 const char plugin_type[] = "select/cons_res";
-const uint32_t plugin_version = 90;
-const uint32_t pstate_version = 6;	/* version control on saved state */
-
-#define CR_JOB_ALLOCATED_CPUS  0x1
-#define CR_JOB_ALLOCATED_MEM   0x2
+const uint32_t plugin_version = 91;
+const uint32_t pstate_version = 7;	/* version control on saved state */
 
 select_type_plugin_info_t cr_type = CR_CPU; /* cr_type is overwritten in init() */
 
-/* Array of node_cr_record. One entry for each node in the cluster */
-struct node_cr_record *select_node_ptr = NULL;
 uint16_t select_fast_schedule;
+
+uint16_t *cr_node_num_cores = NULL;
+uint32_t *cr_num_core_count = NULL;
+struct part_res_record *select_part_record = NULL;
+struct node_res_record *select_node_record = NULL;
+struct node_use_record *select_node_usage  = NULL;
 static int select_node_cnt = 0;
-static time_t last_cr_update_time;
-static pthread_mutex_t cr_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-List select_cr_job_list = NULL; /* List of select_cr_job(s) that are still active */
-static uint32_t last_verified_job_id = 0;
-/* verify the job list after every CR_VERIFY_JOB_CYCLE jobs have finished */
-#define CR_VERIFY_JOB_CYCLE 2000
-
-static void	_cr_job_list_del(void *x);
-static int	_cr_job_list_sort(void *x, void *y);
-static struct node_cr_record *_dup_node_cr(struct node_cr_record *node_cr_ptr,
-					   int node_cr_cnt);
-static int	_job_test(struct job_record *job_ptr, bitstr_t *bitmap,
-			uint32_t min_nodes, uint32_t max_nodes, 
-			uint32_t req_nodes, int mode, 
-			enum node_cr_state job_node_req,
-			struct node_cr_record *select_node_ptr);
-static int 	_will_run_test(struct job_record *job_ptr, bitstr_t *bitmap,
+static bool cr_priority_test      = false;
+static bool cr_priority_selection = false;
+
+/* Procedure Declarations */
+static int _will_run_test(struct job_record *job_ptr, bitstr_t *bitmap,
 			uint32_t min_nodes, uint32_t max_nodes, 
-			uint32_t req_nodes, enum node_cr_state job_node_req);
+			uint32_t req_nodes, uint16_t job_node_req);
 
-#ifdef CR_DEBUG
-static void _dump_state(struct node_cr_record *select_node_ptr)
-{
-	int i, j, cores;
-	struct part_cr_record *parts;
-	ListIterator job_iterator;
-	struct select_cr_job *job;
+#if (CR_DEBUG)
+
+static void _dump_job_res(select_job_res_t job) {
+	char str[64];
 
+	if (job->core_bitmap)
+		bit_fmt(str, 63, job->core_bitmap);
+	else
+		sprintf(str, "[no core_bitmap]");
+	info("DEBUG: Dump select_job_res: nhosts %u cb %s", job->nhosts, str);
+}
+ 
+static void _dump_nodes()
+{
+	int i;
+	
 	for (i=0; i<select_node_cnt; i++) {
-		info("node:%s sockets:%u alloc_memory:%u state:%d",
-			select_node_ptr[i].node_ptr->name,
-			select_node_ptr[i].sockets,
-			select_node_ptr[i].alloc_memory,
-			select_node_ptr[i].node_state);
-		parts = select_node_ptr[i].parts;
-		while (parts) {
-			info("  part:%s rows:%u",
-				parts->part_ptr->name,
-				parts->num_rows);
-			cores = select_node_ptr[i].sockets * 
-				parts->num_rows;
-			for (j=0; j<cores; j++) {
-				info("    alloc_cores[%d]:%u",
-					j, parts->alloc_cores[j]);
-			}
-			parts = parts->next;
-		}
+		info("node:%s cpus:%u c:%u s:%u t:%u mem:%u a_mem:%u state:%d",
+			select_node_record[i].node_ptr->name,
+			select_node_record[i].cpus,
+			select_node_record[i].cores,
+			select_node_record[i].sockets,
+			select_node_record[i].vpus,
+			select_node_record[i].real_memory,
+			select_node_usage[i].alloc_memory,
+			select_node_usage[i].node_state);	
 	}
+}
+
+static void _dump_part(struct part_res_record *p_ptr)
+{
+	uint16_t i;
+	info("part:%s rows:%u pri:%u ", p_ptr->name, p_ptr->num_rows,
+		p_ptr->priority);
+	if (!p_ptr->row)
+		return;
 
-	if (select_cr_job_list == NULL)
-	    	return;
-	job_iterator = list_iterator_create(select_cr_job_list);
-	while ((job = (struct select_cr_job *) list_next(job_iterator))) {
-		info("job:%u nprocs:%u nhosts:%u",
-			job->job_id, job->nprocs, job->nhosts);
-		if (job->job_ptr == NULL)
-			error("  job_ptr is NULL");
-		else if (job->job_ptr->job_id != job->job_id)
-			error("  job_ptr is bad");
-		for (i=0; ((i<job->nhosts)&&(i<2)); i++) {
-			info("  cpus:%u alloc_cpus:%u ",
-				job->cpus[i], job->alloc_cpus[i]);
-			info("  node_offset:%u",
-				job->node_offset[i]);
+	for (i = 0; i < p_ptr->num_rows; i++) {
+		char str[64]; /* print first 64 bits of bitmaps */
+		if (p_ptr->row[i].row_bitmap) {
+			bit_fmt(str, 63, p_ptr->row[i].row_bitmap);
+		} else {
+			sprintf(str, "[no row_bitmap]");
 		}
+		info("  row%u: num_jobs %u: bitmap: %s", i,
+			p_ptr->row[i].num_jobs, str);
+	}
+}
+
+static void _dump_state(struct part_res_record *p_ptr)
+{
+	_dump_nodes();
+
+	/* dump partition data */
+	for (; p_ptr; p_ptr = p_ptr->next) {
+		_dump_part(p_ptr);
 	}
-	list_iterator_destroy(job_iterator);
 	return;
 }
 #endif
 
-/* Create a duplicate part_cr_record structure */
-static struct part_cr_record *_dup_part_cr(struct node_cr_record *node_cr_ptr)
+/*  */
+extern bool cr_priority_selection_enabled()
 {
-	int i, j, part_cnt;
-	struct part_cr_record *part_cr_ptr, *new_part_cr_ptr;
-
-	part_cnt = node_cr_ptr->node_ptr->part_cnt;
-	new_part_cr_ptr = xmalloc(sizeof(struct part_cr_record) * part_cnt);
-	part_cr_ptr = node_cr_ptr->parts;
-	for (i=0; i<part_cnt; i++) {
-		if (!part_cr_ptr)
-			break;
-		new_part_cr_ptr[i].part_ptr = part_cr_ptr->part_ptr;
-		new_part_cr_ptr[i].num_rows = part_cr_ptr->num_rows;
-		j = sizeof(uint16_t) * part_cr_ptr->num_rows *
-		    select_node_ptr->sockets;
-		new_part_cr_ptr[i].alloc_cores = xmalloc(j);
-		memcpy(new_part_cr_ptr[i].alloc_cores,
-		       part_cr_ptr->alloc_cores, j);
-		if (i > 0)
-			new_part_cr_ptr[i-1].next = &new_part_cr_ptr[i];
-		part_cr_ptr = part_cr_ptr->next;
+	if (!cr_priority_test) {
+		char *sched_type = slurm_get_sched_type();
+		if (strcmp(sched_type, "sched/gang") == 0)
+			cr_priority_selection = true;
+		xfree(sched_type);
+		cr_priority_test = true;
 	}
-	return new_part_cr_ptr;
+	return cr_priority_selection;
+	
 }
 
-/* Create a duplicate node_cr_records structure */
-static struct node_cr_record *_dup_node_cr(struct node_cr_record *node_cr_ptr,
-					   int node_cr_cnt)
+#define CR_NUM_CORE_ARRAY_INCREMENT 8
+
+/* (re)set cr_node_num_cores and cr_num_core_count arrays */
+static void _init_global_core_data(struct node_record *node_ptr, int node_cnt)
 {
-	int i;
-	struct node_cr_record *new_node_cr_ptr;
+	uint32_t i, n, array_size = CR_NUM_CORE_ARRAY_INCREMENT;
 
-	if (node_cr_ptr == NULL)
-		return NULL;
+	xfree(cr_num_core_count);
+	xfree(cr_node_num_cores);
+	cr_node_num_cores = xmalloc(array_size * sizeof(uint16_t));
+	cr_num_core_count = xmalloc(array_size * sizeof(uint32_t));
 
-	new_node_cr_ptr = xmalloc(sizeof(struct node_cr_record) *
-				  node_cr_cnt);
-
-	for (i=0; i<node_cr_cnt; i++) {
-		new_node_cr_ptr[i].node_ptr     = node_cr_ptr[i].node_ptr;
-		new_node_cr_ptr[i].cpus         = node_cr_ptr[i].cpus;
-		new_node_cr_ptr[i].sockets      = node_cr_ptr[i].sockets;
-		new_node_cr_ptr[i].cores        = node_cr_ptr[i].cores;
-		new_node_cr_ptr[i].threads      = node_cr_ptr[i].threads;
-		new_node_cr_ptr[i].real_memory  = node_cr_ptr[i].real_memory;
-		new_node_cr_ptr[i].alloc_memory = node_cr_ptr[i].alloc_memory;
-		new_node_cr_ptr[i].node_state   = node_cr_ptr[i].node_state;
-		new_node_cr_ptr[i].parts        = _dup_part_cr(&node_cr_ptr[i]);
+	for (i = 0, n = 0; n < node_cnt; n++) {
+		uint16_t cores;
+		if (select_fast_schedule) {
+			cores  = node_ptr[n].config_ptr->cores;
+			cores *= node_ptr[n].config_ptr->sockets;
+		} else {
+			cores  = node_ptr[n].cores;
+			cores *= node_ptr[n].sockets;
+		}
+		if (cr_node_num_cores[i] == cores) {
+			cr_num_core_count[i]++;
+			continue;
+		}
+		if (cr_num_core_count[i] > 0) {
+			i++;
+			if (i > array_size) {
+				array_size += CR_NUM_CORE_ARRAY_INCREMENT;
+				xrealloc(cr_node_num_cores,
+					array_size * sizeof(uint16_t));
+				xrealloc(cr_node_num_cores,
+					array_size * sizeof(uint16_t));
+			}
+		}
+		cr_node_num_cores[i] = cores;
+		cr_num_core_count[i] = 1;
+	}
+	/* make sure we have '0'-terminate fields at the end */
+	i++;
+	if (i > array_size) {
+		array_size += CR_NUM_CORE_ARRAY_INCREMENT;
+		xrealloc(cr_node_num_cores, array_size * sizeof(uint16_t));
+		xrealloc(cr_node_num_cores, array_size * sizeof(uint16_t));
 	}
-	return new_node_cr_ptr;
 }
 
-static void _destroy_node_part_array(struct node_cr_record *this_cr_node)
+
+/* return the coremap index to the first core of the given node */
+extern uint32_t cr_get_coremap_offset(uint32_t node_index)
 {
-	struct part_cr_record *p_ptr;
+	uint32_t i;
+	uint32_t cindex = 0;
+	uint32_t n = cr_num_core_count[0];
+	for (i = 0; cr_num_core_count[i] && node_index > n; i++) {
+		cindex += cr_node_num_cores[i] * cr_num_core_count[i];
+		n += cr_num_core_count[i+1];
+	}
+	if (!cr_num_core_count[i])
+		return cindex;
+	n -= cr_num_core_count[i];
 
-	if (!this_cr_node)
-		return;
-	for (p_ptr = this_cr_node->parts; p_ptr; p_ptr = p_ptr->next)
-		xfree(p_ptr->alloc_cores);
-	xfree(this_cr_node->parts);
+	cindex += cr_node_num_cores[i] * (node_index-n);	
+	return cindex;
 }
 
-static void _cr_job_list_del(void *x)
+
+/* return the total number of cores in a given node */
+extern uint32_t cr_get_node_num_cores(uint32_t node_index)
 {
-	xfree(x);
+	uint32_t i = 0;
+	uint32_t pos = cr_num_core_count[i++];
+	while (node_index >= pos) {
+		pos += cr_num_core_count[i++];
+	}
+	return cr_node_num_cores[i-1];
 }
-static int  _cr_job_list_sort(void *x, void *y)
+
+
+/* Helper function for _dup_part_data: create a duplicate part_row_data array */
+static struct part_row_data *_dup_row_data(struct part_row_data *orig_row,
+					   uint16_t num_rows)
 {
-	struct job_record **job1_pptr = (struct job_record **) x;
-	struct job_record **job2_pptr = (struct job_record **) y;
-	return (int) difftime(job1_pptr[0]->end_time, job2_pptr[0]->end_time);
+	struct part_row_data *new_row;
+	int i, j;
+
+	if (num_rows == 0 || !orig_row)
+		return NULL;
+	
+	new_row = xmalloc(num_rows * sizeof(struct part_row_data));
+	for (i = 0; i < num_rows; i++) {
+		new_row[i].num_jobs = orig_row[i].num_jobs;
+		new_row[i].job_list_size = orig_row[i].job_list_size;
+		if (orig_row[i].row_bitmap) 
+			new_row[i].row_bitmap= bit_copy(orig_row[i].row_bitmap);
+		if (new_row[i].job_list_size == 0)
+			continue;
+		/* copy the job list */
+		new_row[i].job_list = xmalloc(new_row[i].job_list_size *
+							sizeof(bitstr_t *));
+		for (j = 0; j < new_row[i].num_jobs; j++) {
+			new_row[i].job_list[j] = orig_row[i].job_list[j];
+		}
+	}
+	return new_row;
 }
 
-static void _create_node_part_array(struct node_cr_record *this_cr_node)
+
+/* Create a duplicate part_res_record list */
+static struct part_res_record *_dup_part_data(struct part_res_record *orig_ptr)
 {
-	struct node_record *node_ptr;
-	struct part_cr_record *p_ptr;
-	int i;
+	struct part_res_record *new_part_ptr, *new_ptr;
 
-	if (!this_cr_node)
-		return;
-	node_ptr = this_cr_node->node_ptr;
+	if (orig_ptr == NULL)
+		return NULL;
 
-	if (this_cr_node->parts)
-		_destroy_node_part_array(this_cr_node);
+	new_part_ptr = xmalloc(sizeof(struct part_res_record));
+	new_ptr = new_part_ptr;
 
-	if (node_ptr->part_cnt < 1)
-		return;
-	this_cr_node->parts = xmalloc(sizeof(struct part_cr_record) *
-	        		      node_ptr->part_cnt);
-	for (i = 0; i < node_ptr->part_cnt; i++) {
-		p_ptr		 = &(this_cr_node->parts[i]);
-		p_ptr->part_ptr  = node_ptr->part_pptr[i];
-		p_ptr->num_rows  = node_ptr->part_pptr[i]->max_share;
-		if (p_ptr->num_rows & SHARED_FORCE)
-			p_ptr->num_rows &= (~SHARED_FORCE);
-		/* SHARED=EXCLUSIVE sets max_share = 0 */
-		if (p_ptr->num_rows < 1)
-			p_ptr->num_rows = 1;
-#if (CR_DEBUG)
-		info("cons_res: _create_node_part_array: part %s  num_rows %d",
-		     p_ptr->part_ptr->name, p_ptr->num_rows);
-#endif
-		p_ptr->alloc_cores = xmalloc(sizeof(uint16_t) *
-		        		     this_cr_node->sockets *
-					     p_ptr->num_rows);
-		if (i+1 < node_ptr->part_cnt)
-			p_ptr->next = &(this_cr_node->parts[i+1]);
-		else
-			p_ptr->next = NULL;
+	while (orig_ptr) {
+		new_ptr->name = xstrdup(orig_ptr->name);
+		new_ptr->priority = orig_ptr->priority;
+		new_ptr->num_rows = orig_ptr->num_rows;
+		new_ptr->row = _dup_row_data(orig_ptr->row, orig_ptr->num_rows);
+		if (orig_ptr->next) {
+			new_ptr->next = xmalloc(sizeof(struct part_res_record));
+			new_ptr = new_ptr->next;
+		}
+		orig_ptr = orig_ptr->next;
 	}
-
+	return new_part_ptr;
 }
 
-static int _find_job_by_id(void *x, void *key)
-{
-	struct select_cr_job *cr_job_ptr = (struct select_cr_job *) x;
-	uint32_t *job_id = (uint32_t *) key;
-
-	if (cr_job_ptr->job_id == *job_id)
-		return 1;
-	return 0;
-}
 
-/* Find a partition record based upon pointer to slurmctld record */
-extern struct part_cr_record *get_cr_part_ptr(struct node_cr_record *this_node,
-					      struct part_record *part_ptr)
+/* Create a duplicate part_res_record list */
+static struct node_use_record *_dup_node_usage(struct node_use_record *orig_ptr)
 {
-	struct part_cr_record *p_ptr;
+	struct node_use_record *new_use_ptr, *new_ptr;
+	uint32_t i;
 
-	if (part_ptr == NULL)
+	if (orig_ptr == NULL)
 		return NULL;
 
-	if (!this_node->parts)
-		_create_node_part_array(this_node);
+	new_use_ptr = xmalloc(select_node_cnt * sizeof(struct node_use_record));
+	new_ptr = new_use_ptr;
 
-	for (p_ptr = this_node->parts; p_ptr; p_ptr = p_ptr->next) {
-		if (p_ptr->part_ptr == part_ptr)
-			return p_ptr;
+	for (i = 0; i < select_node_cnt; i++) {
+		new_ptr[i].node_state   = orig_ptr[i].node_state;
+		new_ptr[i].alloc_memory = orig_ptr[i].alloc_memory;
 	}
-	error("cons_res: could not find partition %s", part_ptr->name);
-
-	return NULL;
+	return new_use_ptr;
 }
 
-/* This just resizes alloc_cores based on a potential change to
- * the number of sockets on this node (if fast_schedule = 0 and the
- * node checks in with a different node count after initialization).
- * Any changes to the number of partition rows will be caught
- * and adjusted in select_p_reconfigure() */
-static void _chk_resize_node(struct node_cr_record *node)
-{
-	struct part_cr_record *p_ptr;
-
-	if ((select_fast_schedule > 0) ||
-	    (node->cpus >= node->node_ptr->cpus))
-		return;
-
-	verbose("cons_res: increasing node %s cpus from %u to %u",
-		node->node_ptr->name, node->cpus, node->node_ptr->cpus);
-	node->cpus        = node->node_ptr->cpus;
-	node->sockets     = node->node_ptr->sockets;
-	node->cores       = node->node_ptr->cores;
-	node->threads     = node->node_ptr->threads;
-	node->real_memory = node->node_ptr->real_memory;
-	for (p_ptr = node->parts; p_ptr; p_ptr = p_ptr->next) {
-		xrealloc(p_ptr->alloc_cores, (sizeof(uint16_t) *
-			 node->sockets * p_ptr->num_rows));
-		/* NOTE: xrealloc zero fills added memory */
+/* delete the given row data */
+static void _destroy_row_data(struct part_row_data *row, uint16_t num_rows) {
+	uint16_t i;
+	for (i = 0; i < num_rows; i++) {
+		FREE_NULL_BITMAP(row[i].row_bitmap);
+		if (row[i].job_list) {
+			uint32_t j;
+			for (j = 0; j < row[i].num_jobs; j++)
+				row[i].job_list[j] = NULL;
+			xfree(row[i].job_list);
+		}
 	}
+	xfree(row);
 }
 
-static void _chk_resize_job(struct select_cr_job *job, uint16_t node_id, 
-			    uint16_t sockets)
+/* delete the given list of partition data */
+static void _destroy_part_data(struct part_res_record *this_ptr)
 {
-	if ((job->alloc_cores[node_id] == NULL) ||
-	    		(sockets > job->num_sockets[node_id])) {
-		debug3("cons_res: increasing job %u node %u "
-			"num_sockets from %u to %u",
-			job->job_id, node_id, 
-			job->num_sockets[node_id], sockets);
-	    	xrealloc(job->alloc_cores[node_id], sockets * sizeof(uint16_t));
-		/* NOTE: xrealloc zero fills added memory */
-		job->num_sockets[node_id] = sockets;
+	while (this_ptr) {
+		struct part_res_record *tmp = this_ptr;
+		this_ptr = this_ptr->next;
+		xfree(tmp->name);
+		tmp->name = NULL;
+		if (tmp->row) {
+			_destroy_row_data(tmp->row, tmp->num_rows);
+			tmp->row = NULL;
+		}
+		xfree(tmp);
 	}
 }
 
-extern void get_resources_this_node(uint16_t *cpus, uint16_t *sockets, 
-				    uint16_t *cores, uint16_t *threads, 
-				    struct node_cr_record *this_cr_node,
-				    uint32_t jobid)
+
+/* (re)create the global select_part_record array */
+static void _create_part_data()
 {
-	_chk_resize_node(this_cr_node);
+	ListIterator part_iterator;
+	struct part_record *p_ptr;
+	struct part_res_record *this_ptr;
+	int num_parts;
 
-	*cpus    = this_cr_node->cpus;
-	*sockets = this_cr_node->sockets;
-	*cores   = this_cr_node->cores;
-	*threads = this_cr_node->threads;
+	_destroy_part_data(select_part_record);
+	select_part_record = NULL;
 
-	debug3("cons_res %u _get_resources host %s HW_ "
-	       "cpus %u sockets %u cores %u threads %u ", 
-	       jobid, this_cr_node->node_ptr->name,
-	       *cpus, *sockets, *cores, *threads);
-}
+	num_parts = list_count(part_list);
+	if (!num_parts)
+		return;
+	info("cons_res: preparing for %d partitions", num_parts);
 
-/* _get_cpu_data
- * determine the number of available free cores/cpus/sockets
- * IN - p_ptr:       pointer to a node's part_cr_record for a specific partition
- * IN - num_sockets: number of sockets on this node
- * IN - max_cpus:    the total number of cores/cpus/sockets on this node
- * OUT- row_index:   the row index from which the returned value was obtained
- *                   (if -1 then nothing is allocated in this partition)
- * OUT- free_row:    the row index of an unallocated row (if -1 then all rows
- *                   contain allocated cores)
- * RETURN - the maximum number of free cores/cpus/sockets found in the given
- *          row_index (if 0 then node is full; if 'max_cpus' then node is free)
- */
-static uint16_t _get_cpu_data (struct part_cr_record *p_ptr, int num_sockets,
-			       uint16_t max_cpus, int *row_index, int *free_row)
-{
-	int i, j, index;
-	uint16_t alloc_count = 0;
-	bool counting_sockets = 0;
-	if ((cr_type == CR_SOCKET) || (cr_type == CR_SOCKET_MEMORY))
-		counting_sockets = 1;
- 
- 	*free_row = -1;
-	*row_index = -1;
-
-	for (i = 0, index = 0; i < p_ptr->num_rows; i++) {
-		uint16_t cpu_count = 0;
-		uint16_t socket_count = 0;
-		for (j = 0; j < num_sockets; j++, index++) {
-			if (p_ptr->alloc_cores[index]) {
-				socket_count++;
-				cpu_count += p_ptr->alloc_cores[index];
-			}
-		}
-		if (socket_count > 0) {
-			if (counting_sockets) {
-				if ((alloc_count == 0) ||
-				    (socket_count < alloc_count)) {
-					alloc_count = socket_count;
-					*row_index = i;
-				}
-			} else {
-				if ((alloc_count == 0) ||
-				    (cpu_count < alloc_count)) {
-					alloc_count = cpu_count;
-					*row_index = i;
-				}
-			}
-		} 
-		else if (*free_row < 0) {
-			*free_row = i;
+	select_part_record = xmalloc(sizeof(struct part_res_record));
+	this_ptr = select_part_record;
+
+	part_iterator = list_iterator_create(part_list);
+	if (part_iterator == NULL)
+		fatal ("memory allocation failure");
+
+	while ((p_ptr = (struct part_record *) list_next(part_iterator))) {
+		this_ptr->name = xstrdup(p_ptr->name);
+		this_ptr->num_rows = p_ptr->max_share;
+		if (this_ptr->num_rows & SHARED_FORCE)
+			this_ptr->num_rows &= (~SHARED_FORCE);
+		/* SHARED=EXCLUSIVE sets max_share = 0 */
+		if (this_ptr->num_rows < 1)
+			this_ptr->num_rows = 1;
+		/* we'll leave the 'row' array blank for now */
+		this_ptr->row = NULL;
+		this_ptr->priority = p_ptr->priority;
+		num_parts--;
+		if (num_parts) {
+			this_ptr->next =xmalloc(sizeof(struct part_res_record));
+			this_ptr = this_ptr->next;
 		}
 	}
-	return max_cpus - alloc_count;
+	/* should we sort the select_part_record list by priority here? */
 }
 
-/*
- * _get_task_count - Given the job requirements, compute the number of tasks
- *                   this node can run
- *
- * IN job_ptr - pointer to job being scheduled
- * IN index - index of node's configuration information in select_node_ptr
- */
-static uint16_t _get_task_count(struct node_cr_record *select_node_ptr,
-				struct job_record *job_ptr, const int index, 
-				const bool all_available, bool try_partial_idle,
-				enum node_cr_state job_node_req)
-{
-	uint16_t numtasks, cpus_per_task = 0;
-	uint16_t max_sockets = 0, max_cores = 0, max_threads = 0;
-	uint16_t min_sockets = 0, min_cores = 0, min_threads = 0;
-	uint16_t ntasks_per_node = 0, ntasks_per_socket = 0, ntasks_per_core = 0;
-	uint16_t i, cpus, sockets, cores, threads, *alloc_cores = NULL;
-	struct node_cr_record *this_node;
-	struct part_cr_record *p_ptr;
-	struct multi_core_data *mc_ptr = NULL;
-
-	cpus_per_task   = job_ptr->details->cpus_per_task;
-	ntasks_per_node = job_ptr->details->ntasks_per_node;
-
-	mc_ptr      = job_ptr->details->mc_ptr;
-	min_sockets = mc_ptr->min_sockets;
-	max_sockets = mc_ptr->max_sockets;
-	min_cores   = mc_ptr->min_cores;
-	max_cores   = mc_ptr->max_cores;
-	min_threads = mc_ptr->min_threads;
-	max_threads = mc_ptr->max_threads;
-	ntasks_per_socket = mc_ptr->ntasks_per_socket;
-	ntasks_per_core   = mc_ptr->ntasks_per_core;
-
-	this_node = &(select_node_ptr[index]);
-	get_resources_this_node(&cpus, &sockets, &cores, &threads, 
-				this_node, job_ptr->job_id);
-
-	alloc_cores = xmalloc(sockets * sizeof(uint16_t));
-	/* array is zero filled by xmalloc() */
-
-	if (!all_available) {
-		p_ptr = get_cr_part_ptr(this_node, job_ptr->part_ptr);
-		if (!p_ptr) {
-			error("cons_res: _get_task_count: could not find part %s",
-			      job_ptr->part_ptr->name);
-		} else {
-			if (job_node_req == NODE_CR_ONE_ROW) {
-				/* need to scan over all partitions with
-				 * num_rows = 1 */
-				for (p_ptr = this_node->parts; p_ptr;
-				     p_ptr = p_ptr->next) {
-					if (p_ptr->num_rows > 1)
-						continue;
-					for (i = 0; i < sockets; i++) {
-					    if ((cr_type == CR_SOCKET) ||
-						(cr_type == CR_SOCKET_MEMORY)) {
-						if (p_ptr->alloc_cores[i])
-							alloc_cores[i] += cores;
-					    } else {
-						alloc_cores[i] +=
-							p_ptr->alloc_cores[i];
-					    }
-					}
-				}
-			} else {
-				/* job_node_req == EXCLUSIVE | AVAILABLE
-				 * if EXCLUSIVE, then node *should* be free and
-				 * this code should fall through with
-				 * alloc_cores all set to zero.
-				 * if AVAILABLE then scan partition rows based
-				 * on 'try_partial_idle' setting. Note that
-				 * if 'try_partial_idle' is FALSE then this
-				 * code should use a 'free' row and this is
-				 * where a new row will first be evaluated.
-				 */
-				uint16_t count, max_cpus;
-				int alloc_row, free_row;
-
-				max_cpus = cpus;
-				if ((cr_type == CR_SOCKET) ||
-				    (cr_type == CR_SOCKET_MEMORY))
-					max_cpus = sockets;
-				if ((cr_type == CR_CORE) ||
-				    (cr_type == CR_CORE_MEMORY))
-					max_cpus = cores * sockets;
-
-				count = _get_cpu_data(p_ptr, sockets, max_cpus,
-						      &alloc_row, &free_row);
-				if ((count == 0) && (free_row == -1)) {
-					/* node is completely allocated */
-					xfree(alloc_cores);
-					return 0;
-				}
-				if ((free_row == -1) && (!try_partial_idle)) {
-					/* no free rows, so partial idle is
-					 * all that is left! */
-					try_partial_idle = 1;
-				}
-				if (try_partial_idle && (alloc_row > -1)) {
-					alloc_row *= sockets;
-					for (i = 0; i < sockets; i++) {
-						alloc_cores[i] += p_ptr->
-							alloc_cores[alloc_row+i];
-					}
-				}
-			}
-		}
-	}
-#if (CR_DEBUG)
-	for (i = 0; i < sockets; i+=2) {
-		info("cons_res: _get_task_count: %s alloc_cores[%d]=%d, [%d]=%d",
-		     this_node->node_ptr->name, i, alloc_cores[i],
-		     i+1, alloc_cores[i+1]);
-	}
-#endif
 
-	numtasks = slurm_get_avail_procs(max_sockets, max_cores, max_threads,
-					 min_sockets, min_cores,
-					 cpus_per_task,
-					 ntasks_per_node,
-					 ntasks_per_socket,
-					 ntasks_per_core,
-					 &cpus, &sockets, &cores,
-					 &threads, alloc_cores, 
-					 cr_type, job_ptr->job_id,
-					 this_node->node_ptr->name);
-
-	if (job_ptr->details->job_min_memory & MEM_PER_CPU) {
-		uint32_t free_mem, mem_per_cpu;
-		int max_cpus;
-		mem_per_cpu = job_ptr->details->job_min_memory & (~MEM_PER_CPU);
-		free_mem = this_node->real_memory - this_node->alloc_memory;
-		max_cpus = free_mem / mem_per_cpu;
-		/* info("cpus avail:%d  mem for %d", numtasks, max_cpus); */
-		numtasks = MIN(numtasks, max_cpus);
-	}
+/* List sort function: sort by the job's expected end time */
+static int _cr_job_list_sort(void *x, void *y)
+{
+	struct job_record **job1_pptr = (struct job_record **) x;
+	struct job_record **job2_pptr = (struct job_record **) y;
+	return (int) difftime(job1_pptr[0]->end_time, job2_pptr[0]->end_time);
+}
 
-#if (CR_DEBUG)
-	info("cons_res: _get_task_count computed a_tasks %d s %d c %d "
-		"t %d on %s for job %d",
-		numtasks, sockets, cores, 
-		threads, this_node->node_ptr->name, job_ptr->job_id);
-#endif
-	xfree(alloc_cores);
-	return(numtasks);
-}		
 
-/* xfree an array of node_cr_record */
-static void _xfree_select_nodes(struct node_cr_record *ptr, int count)
+/* delete the given select_node_record and select_node_usage arrays */
+static void _destroy_node_data(struct node_use_record *node_usage,
+				struct node_res_record *node_data)
 {
-	int i;
-	
-	if (ptr == NULL)
-		return;
-
-	for (i = 0; i < count; i++)
-		_destroy_node_part_array(&(ptr[i]));
-	xfree(ptr);
+	xfree(node_data);
+	xfree(node_usage);
 }
 
-/* xfree a select_cr_job job */
-static void _xfree_select_cr_job(struct select_cr_job *job)
+
+static void _add_job_to_row(struct select_job_res *job,
+			    struct part_row_data *r_ptr)
 {
-	int i;
+	/* add the job to the row_bitmap */
+	if (r_ptr->row_bitmap && r_ptr->num_jobs == 0) {
+		/* if no jobs, clear the existing row_bitmap first */
+		uint32_t size = bit_size(r_ptr->row_bitmap);
+		bit_nclear(r_ptr->row_bitmap, 0, size-1);
+	}
+	add_select_job_to_row(job, &(r_ptr->row_bitmap), cr_node_num_cores,
+				cr_num_core_count);
 	
-	if (job == NULL)
-		return;
-
-	xfree(job->cpus);
-	xfree(job->alloc_cpus);	
-	xfree(job->node_offset);	
-	xfree(job->alloc_memory);
-	if ((cr_type == CR_CORE)   || (cr_type == CR_CORE_MEMORY) ||
-	    (cr_type == CR_SOCKET) || (cr_type == CR_SOCKET_MEMORY)) {
-		for (i = 0; i < job->nhosts; i++)
-			xfree(job->alloc_cores[i]);
-		xfree(job->alloc_cores);
-		xfree(job->num_sockets);
+	/*  add the job to the job_list */
+	if (r_ptr->num_jobs >= r_ptr->job_list_size) {
+		r_ptr->job_list_size += 8;
+		xrealloc(r_ptr->job_list, r_ptr->job_list_size *
+					sizeof(struct select_job_res *));
 	}
-	FREE_NULL_BITMAP(job->node_bitmap);
-	xfree(job);
+	r_ptr->job_list[r_ptr->num_jobs++] = job;
 }
 
-/* Free the select_cr_job_list list and the individual objects before
- * existing the plug-in.
- */
-static void _clear_job_list(void)
+
+/* test for conflicting core_bitmap bits */
+static int _can_job_fit_in_row(struct select_job_res *job,
+				struct part_row_data *r_ptr)
 {
-	ListIterator job_iterator;
-	struct select_cr_job *job;
+	if (r_ptr->num_jobs == 0 || !r_ptr->row_bitmap)
+		return 1;
+	return can_select_job_cores_fit(job, r_ptr->row_bitmap,
+					cr_node_num_cores, cr_num_core_count);
+}
 
-	if (select_cr_job_list == NULL)
-	    	return;
 
-	slurm_mutex_lock(&cr_mutex);
-	job_iterator = list_iterator_create(select_cr_job_list);
-	while ((job = (struct select_cr_job *) list_next(job_iterator))) {
-		list_remove(job_iterator);
-		_xfree_select_cr_job(job);
-	}
-	list_iterator_destroy(job_iterator);
-	slurm_mutex_unlock(&cr_mutex);
+/* helper script for cr_sort_part_rows() */
+static void _swap_rows(struct part_row_data *a, struct part_row_data *b)
+{
+	struct part_row_data tmprow;
+
+	tmprow.row_bitmap    = a->row_bitmap;
+	tmprow.num_jobs      = a->num_jobs;
+	tmprow.job_list      = a->job_list;
+	tmprow.job_list_size = a->job_list_size;
+	
+	a->row_bitmap    = b->row_bitmap;
+	a->num_jobs      = b->num_jobs;
+	a->job_list      = b->job_list;
+	a->job_list_size = b->job_list_size;
+	
+	b->row_bitmap    = tmprow.row_bitmap;
+	b->num_jobs      = tmprow.num_jobs;
+	b->job_list      = tmprow.job_list;
+	b->job_list_size = tmprow.job_list_size;
+	
+	return;
 }
 
-static void _verify_select_job_list(uint32_t job_id)
+
+/* sort the rows of a partition from "most allocated" to "least allocated" */
+extern void cr_sort_part_rows(struct part_res_record *p_ptr)
 {
-	ListIterator job_iterator;
-	struct select_cr_job *job;
+	uint32_t i, j, a, b;
 
-	if (list_count(select_cr_job_list) < 1) {
-		last_verified_job_id = job_id;
-		return;
-	}
-	if ((job_id > last_verified_job_id) &&
-	    (job_id < (last_verified_job_id + CR_VERIFY_JOB_CYCLE))) {
+	if (!p_ptr->row)
 		return;
-	}
-
-	last_verified_job_id = job_id;
-	slurm_mutex_lock(&cr_mutex);
-	job_iterator = list_iterator_create(select_cr_job_list);
-	while ((job = (struct select_cr_job *) list_next(job_iterator))) {
-		if (find_job_record(job->job_id) == NULL) {
-			list_remove(job_iterator);
-			debug2("cons_res: _verify_job_list: removing "
-				"nonexistent job %u", job->job_id);
-			_xfree_select_cr_job(job);
+		
+	for (i = 0; i < p_ptr->num_rows; i++) {
+		if (p_ptr->row[i].row_bitmap)
+			a = bit_set_count(p_ptr->row[i].row_bitmap);
+		else
+			a = 0;
+		for (j = i+1; j < p_ptr->num_rows; j++) {
+			if (!p_ptr->row[j].row_bitmap)
+				continue;
+			b = bit_set_count(p_ptr->row[j].row_bitmap);
+			if (b > a) {
+				_swap_rows(&(p_ptr->row[i]), &(p_ptr->row[j]));
+			}
 		}
 	}
-	list_iterator_destroy(job_iterator);
-	slurm_mutex_unlock(&cr_mutex);	
-	last_cr_update_time = time(NULL);
+	return;
 }
 
-/* Append a specific select_cr_job to select_cr_job_list. If the
- * select_job already exists then it is deleted and re-added otherwise
- * it is just added to the list.
+
+/*
+ * _build_row_bitmaps: A job has been removed from the given partition,
+ *                     so the row_bitmap(s) need to be reconstructed.
+ *                     Optimize the jobs into the least number of rows,
+ *                     and make the lower rows as dense as possible.
+ * 
+ * IN/OUT: p_ptr   - the partition that has jobs to be optimized
  */
-static void _append_to_job_list(struct select_cr_job *new_job)
+static void _build_row_bitmaps(struct part_res_record *p_ptr)
 {
-	int job_id = new_job->job_id;
-	struct select_cr_job *old_job = NULL;
-	ListIterator iterator = list_iterator_create(select_cr_job_list);
+	uint32_t i, j, num_jobs, size;
+	int x, *jstart;
+	struct part_row_data *this_row, *orig_row;
+	struct select_job_res **tmpjobs, *job;
+	
+	if (!p_ptr->row)
+		return;
 
-	slurm_mutex_lock(&cr_mutex);
-	while ((old_job = (struct select_cr_job *) list_next(iterator))) {
-		if (old_job->job_id != job_id)
-			continue;
-		list_remove(iterator);	/* Delete record for JobId job_id */
-		_xfree_select_cr_job(old_job);	/* xfree job structure */
-		break;
+	if (p_ptr->num_rows == 1) {
+		this_row = &(p_ptr->row[0]);
+		if (this_row->num_jobs == 0) {
+			if (this_row->row_bitmap) {
+				size = bit_size(this_row->row_bitmap);
+				bit_nclear(this_row->row_bitmap, 0, size-1);
+			}
+			return;
+		}
+		
+		/* rebuild the row bitmap */
+		num_jobs = this_row->num_jobs;
+		tmpjobs = xmalloc(num_jobs * sizeof(struct select_job_res *));	
+		for (i = 0; i < num_jobs; i++) {
+			tmpjobs[i] = this_row->job_list[i];
+			this_row->job_list[i] = NULL;
+		}
+		this_row->num_jobs = 0; /* this resets the row_bitmap */
+		for (i = 0; i < num_jobs; i++) {
+			_add_job_to_row(tmpjobs[i], this_row);
+		}
+		xfree(tmpjobs);
+		return;
 	}
-	list_iterator_destroy(iterator);
-	list_append(select_cr_job_list, new_job);
-	slurm_mutex_unlock(&cr_mutex);
-	debug3 ("cons_res: _append_to_job_list job_id %u to list. "
-		"list_count %d ", job_id, list_count(select_cr_job_list));
-}
 
-/* find the maximum number of idle cpus from all partitions */
-static uint16_t _count_idle_cpus(struct node_cr_record *this_node)
-{
-	struct part_cr_record *p_ptr;
-	int i, j, index, idlecpus;
-	uint16_t cpus, sockets, cores, threads;
+	/* gather data */
+	num_jobs = 0;
+	for (i = 0; i < p_ptr->num_rows; i++) {
+		if (p_ptr->row[i].num_jobs) {
+			num_jobs += p_ptr->row[i].num_jobs;
+		}
+	}
+	if (num_jobs == 0) {
+		size = bit_size(p_ptr->row[0].row_bitmap);
+		for (i = 0; i < p_ptr->num_rows; i++) {
+			if (p_ptr->row[i].row_bitmap) {
+				bit_nclear(p_ptr->row[i].row_bitmap, 0, size-1);
+			}
+		}
+		return;
+	}
 
-	if (this_node->node_state == NODE_CR_RESERVED)
-		return (uint16_t) 0;
+#if (CR_DEBUG)
+	info("DEBUG: _build_row_bitmaps (before):");
+	_dump_part(p_ptr);
+#endif
+	debug3("cons_res: build_row_bitmaps reshuffling %u jobs", num_jobs);
 
-	get_resources_this_node(&cpus, &sockets, &cores, &threads, 
-				this_node, 0);
+	/* make a copy, in case we cannot do better than this */
+	orig_row = _dup_row_data(p_ptr->row, p_ptr->num_rows);
+	if (orig_row == NULL)
+		return;
+	
+	/* get row_bitmap size from first row (we can safely assume that the
+	 * first row_bitmap exists because there exists at least one job. */
+	size = bit_size(p_ptr->row[0].row_bitmap);
+	
+	/* create a master job list and clear out ALL row data */
+	tmpjobs = xmalloc(num_jobs * sizeof(struct select_job_res *));	
+	jstart  = xmalloc(num_jobs * sizeof(int));
+	x = 0;
+	for (i = 0; i < p_ptr->num_rows; i++) {
+		for (j = 0; j < p_ptr->row[i].num_jobs; j++) {
+			tmpjobs[x] = p_ptr->row[i].job_list[j];
+			p_ptr->row[i].job_list[j] = NULL;
+			jstart[x] = bit_ffs(tmpjobs[x]->node_bitmap);
+			jstart[x] = cr_get_coremap_offset(jstart[x]);
+			jstart[x] += bit_ffs(tmpjobs[x]->core_bitmap);
+			x++;
+		}
+		p_ptr->row[i].num_jobs = 0;
+		if (p_ptr->row[i].row_bitmap) {
+			bit_nclear(p_ptr->row[i].row_bitmap, 0, size-1);
+		}
+	}
+	
+	/* VERY difficult: Optimal placement of jobs in the matrix
+	 * - how to order jobs to be added to the matrix?
+	 *   - "by size" does not guarantee optimal placement
+	 *
+	 *   - for now, try sorting jobs by first bit set
+	 *     - if job allocations stay "in blocks", then this should work OK
+	 *     - may still get scenarios where jobs should switch rows
+	 *     - fixme: JOB SHUFFLING BETWEEN ROWS NEEDS TESTING
+	 */
+	for (i = 0; i < num_jobs; i++) {
+		for (j = i+1; j < num_jobs; j++) {
+			if (jstart[j] < jstart[i] || (jstart[j] == jstart[i] &&
+			    tmpjobs[j]->nprocs > tmpjobs[i]->nprocs)) {
+				x = jstart[i];
+				jstart[i] = jstart[j];
+				jstart[j] = x;
+				job = tmpjobs[i];
+				tmpjobs[i] = tmpjobs[j];
+				tmpjobs[j] = job;
+			}
+		}
+	}
 
-	if (!this_node->parts)
-		return cpus;
+#if (CR_DEBUG)
+	for (i = 0; i < num_jobs; i++) {
+		char cstr[64], nstr[64];
+		if (tmpjobs[i]->core_bitmap)
+			bit_fmt(cstr, (sizeof(cstr)-1) , tmpjobs[i]->core_bitmap);
+		else
+			sprintf(cstr, "[no core_bitmap]");
+		if (tmpjobs[i]->node_bitmap)
+			bit_fmt(nstr, (sizeof(nstr)-1), tmpjobs[i]->node_bitmap);
+		else
+			sprintf(nstr, "[no node_bitmap]");
+		info ("DEBUG:  jstart %d job nb %s cb %s", jstart[i], nstr,
+			cstr);
+	}
+#endif
 
-	idlecpus = cpus;
-	if (this_node->node_state == NODE_CR_ONE_ROW) {
-		/* check single-row partitions for idle CPUs */
-		for (p_ptr = this_node->parts; p_ptr; p_ptr = p_ptr->next) {
-			if (p_ptr->num_rows > 1)
-				continue;
-			for (i = 0; i < this_node->sockets; i++) {
-				if ((cr_type == CR_SOCKET) ||
-				    (cr_type == CR_SOCKET_MEMORY)) {
-				 	if (p_ptr->alloc_cores[i])
-						idlecpus -= cores;
-				} else {
-					idlecpus -= p_ptr->alloc_cores[i];
-				}
+	/* add jobs to the rows */
+	for (j = 0; j < num_jobs; j++) {
+		for (i = 0; i < p_ptr->num_rows; i++) {
+			if (_can_job_fit_in_row(tmpjobs[j], &(p_ptr->row[i]))) {
+				/* job fits in row, so add it */
+				_add_job_to_row(tmpjobs[j], &(p_ptr->row[i]));
+				tmpjobs[j] = NULL;
+				break;
 			}
-			if (idlecpus < 1)
-				return (uint16_t) 0;
 		}
-		return (uint16_t) idlecpus;
+		/* job should have been added, so shuffle the rows */
+		cr_sort_part_rows(p_ptr);
 	}
-
-	if (this_node->node_state == NODE_CR_AVAILABLE) {
-		/* check all partitions for idle CPUs */
-		int tmpcpus, max_idle = 0;
-		for (p_ptr = this_node->parts; p_ptr; p_ptr = p_ptr->next) {
-			for (i = 0, index = 0; i < p_ptr->num_rows; i++) {
-				tmpcpus = idlecpus;
-				for (j = 0; j < this_node->sockets;
-				     j++, index++) {
-				 	if ((cr_type == CR_SOCKET) ||
-				 	    (cr_type == CR_SOCKET_MEMORY)) {
-						if (p_ptr->alloc_cores[index])
-							tmpcpus -= cores;
-					} else {
-						tmpcpus -= p_ptr->
-							   alloc_cores[index];
-					}
-				}
-				if (tmpcpus > max_idle) {
-					max_idle = tmpcpus;
-					if (max_idle == idlecpus)
-						break;
-				}
+	
+	/* test for dangling jobs */
+	for (j = 0; j < num_jobs; j++) {
+		if (tmpjobs[j])
+			break;
+	}
+	if (j < num_jobs) {
+		/* we found a dangling job, which means our packing
+		 * algorithm couldn't improve apon the existing layout.
+		 * Thus, we'll restore the original layout here */
+		debug3("cons_res: build_row_bitmap: dangling job found");
+#if (CR_DEBUG)
+		info("DEBUG: _build_row_bitmaps (post-algorithm):");
+		_dump_part(p_ptr);
+#endif
+		_destroy_row_data(p_ptr->row, p_ptr->num_rows);
+		p_ptr->row = orig_row;
+		orig_row = NULL;
+		
+		/* still need to rebuild row_bitmaps */
+		for (i = 0; i < p_ptr->num_rows; i++) {
+			if (p_ptr->row[i].row_bitmap)
+				bit_nclear(p_ptr->row[i].row_bitmap, 0, size-1);
+			if (p_ptr->row[i].num_jobs == 0)
+				continue;
+			for (j = 0; j < p_ptr->row[i].num_jobs; j++) {
+				add_select_job_to_row(p_ptr->row[i].job_list[j],
+						    &(p_ptr->row[i].row_bitmap),
+						      cr_node_num_cores,
+						      cr_num_core_count);
 			}
-			if (max_idle == idlecpus)
-				break;
 		}
-		if (this_node->parts)
-			idlecpus = max_idle;
 	}
-	return (uint16_t) idlecpus;
-}
-
-static int _synchronize_bitmaps(bitstr_t ** partially_idle_bitmap)
-{
-	int size, i, idlecpus = bit_set_count(avail_node_bitmap);
-	size = bit_size(avail_node_bitmap);
-	bitstr_t *bitmap = bit_alloc(size);
-
-	*partially_idle_bitmap = bitmap;
-	if (bitmap == NULL)
-		return SLURM_ERROR;
 
-	debug3("cons_res: synch_bm: size avail %d (%d set) size idle %d ",
-	       size, idlecpus, bit_size(idle_node_bitmap));
+#if (CR_DEBUG)
+	info("DEBUG: _build_row_bitmaps (after):");
+	_dump_part(p_ptr);
+#endif
 
-	for (i = 0; i < select_node_cnt; i++) {
-		if (bit_test(avail_node_bitmap, i) != 1)
-			continue;
+	if (orig_row)
+		_destroy_row_data(orig_row, p_ptr->num_rows);
+	xfree(tmpjobs);
+	xfree(jstart);
+	return;
 
-		if (bit_test(idle_node_bitmap, i) == 1) {
-			bit_set(bitmap, i);
-			continue;
-		}
-		
-		idlecpus = _count_idle_cpus(&(select_node_ptr[i]));
-		if (idlecpus)
-			bit_set(bitmap, i);
-	}
-	idlecpus = bit_set_count(bitmap);
-	debug3("cons_res: synch found %d partially idle nodes", idlecpus);
+	/* LEFTOVER DESIGN THOUGHTS, PRESERVED HERE */
+	
+	/* 1. sort jobs by size
+	 * 2. only load core bitmaps with largest jobs that conflict
+	 * 3. sort rows by set count 
+	 * 4. add remaining jobs, starting with fullest rows
+	 * 5. compute  set count: if disparity between rows got closer, then
+	 *    switch non-conflicting jobs that were added
+	 */
 
-	return SLURM_SUCCESS;
+	/* 
+	 *  Step 1: remove empty rows between non-empty rows
+	 *  Step 2: try to collapse rows
+	 *  Step 3: sort rows by size
+	 *  Step 4: try to swap jobs from different rows to pack rows
+	 */
+	
+	/* WORK IN PROGRESS - more optimization should go here, such as:
+	 *
+	 * - try collapsing jobs from higher rows to lower rows
+	 *
+	 * - produce a load array to identify cores with less load. Test
+	 * to see if those cores are in the lower row. If not, try to swap
+	 * those jobs with jobs in the lower row. If the job can be swapped
+	 * AND the lower row set_count increases, then SUCCESS! else swap
+	 * back. The goal is to pack the lower rows and "bubble up" clear
+	 * bits to the higher rows.
+	 */
 }
 
+
 /* allocate resources to the given job
+ * - add 'struct select_job_res' resources to 'struct part_res_record'
+ * - add job's memory requirements to 'struct node_res_record'
  *
- * if suspend = 0 then fully add job
- * if suspend = 1 then only add memory
+ * if action = 0 then add cores and memory
+ * if action = 1 then only add memory (job is suspended)
+ * if action = 2 then only add cores (job is resumed)
  */
-static int _add_job_to_nodes(struct select_cr_job *job, char *pre_err,
-			     int suspend)
+static int _add_job_to_res(struct job_record *job_ptr, int action)
 {
-	int host_index, i, j, rc = SLURM_SUCCESS;
-	uint16_t add_memory = 0;
-	uint16_t memset = job->state & CR_JOB_ALLOCATED_MEM;
-	uint16_t cpuset = job->state & CR_JOB_ALLOCATED_CPUS;
+	struct select_job_res *job = job_ptr->select_job;
+	struct part_res_record *p_ptr;
+	int i, n;
 
-	if (memset && cpuset)
-		return rc;
-	if (job->node_bitmap == NULL) {	/* likely still starting up */
-		error("job %u has no node_bitmap", job->job_id);
-		return rc;
-	}
-	if (!memset &&
-	    ((cr_type == CR_CORE_MEMORY) || (cr_type == CR_CPU_MEMORY) ||
-	     (cr_type == CR_MEMORY) || (cr_type == CR_SOCKET_MEMORY))) {
-		job->state |= CR_JOB_ALLOCATED_MEM;
-		add_memory = 1;
+	if (!job || !job->core_bitmap) {
+		error("job %u has no select data", job_ptr->job_id);
+		return SLURM_ERROR;
 	}
-	if (!cpuset && !suspend)
-		job->state |= CR_JOB_ALLOCATED_CPUS;
-
-	i = -1;
-	for (host_index = 0; host_index < select_node_cnt; host_index++) {
-		struct node_cr_record *this_node;
-		struct part_cr_record *p_ptr;
-		uint16_t offset = 0;
-
-		if (bit_test(job->node_bitmap, host_index) == 0)
-			continue;
 	
-		this_node = &select_node_ptr[host_index];
-		i++;
-
-		/* Update this node's allocated resources, starting with
-		 * memory (if applicable) */
-		
-		if (add_memory)
-			this_node->alloc_memory += job->alloc_memory[i];
+	debug3("cons_res: _add_job_to_res: job %u act %d ", job_ptr->job_id,
+		action);
 
-		if (cpuset || suspend)
-			continue;
+#if (CR_DEBUG)
+	_dump_job_res(job);
+#endif
 
-		this_node->node_state = job->node_req;
-		
-		p_ptr = get_cr_part_ptr(this_node, job->job_ptr->part_ptr);
-		if (p_ptr == NULL) {
-			error("%s: could not find part %s", pre_err,
-			      job->job_ptr->partition);
-			continue;
+	/* add memory */
+	if (action != 2) {
+		for (i = 0, n = 0; i < select_node_cnt; i++) {
+			if (!bit_test(job->node_bitmap, i))
+				continue;
+			select_node_usage[i].alloc_memory +=
+						job->memory_allocated[n];
+			if (select_node_usage[i].alloc_memory >
+			    select_node_record[i].real_memory) {
+				error("error: node %s mem is overallocated "
+				      "(%u) for job %u",
+				      select_node_record[i].node_ptr->name,
+				      select_node_usage[i].alloc_memory,
+				      job_ptr->job_id);
+				
+			}
+			n++;
 		}
+	}
+	
+	/* add cores */
+	if (action != 1) {
 
-		/* The offset could be invalid if the sysadmin reduced the
-		 * number of shared rows after this job was allocated. In
-		 * this case, we *should* attempt to place this job in
-		 * other rows. However, this may be futile if they are all
-		 * currently full.
-		 * For now, we're going to be lazy and simply NOT "allocate"
-		 * this job on the node(s) (hey - you get what you pay for). ;-)
-		 * This just means that we will not be accounting for this
-		 * job when determining available space for future jobs,
-		 * which is relatively harmless (hey, there was space when
-		 * this job was first scheduled - if the sysadmin doesn't
-		 * like it, then (s)he can terminate the job). ;-)
-		 * Note that we are still "allocating" memory for this job
-		 * (if requested). 
-		 */
-		offset = job->node_offset[i];
-		if (offset > (this_node->sockets * (p_ptr->num_rows - 1))) {
-			rc = SLURM_ERROR;
-			continue;
+		for (p_ptr = select_part_record; p_ptr; p_ptr = p_ptr->next) {
+			if (strcmp(p_ptr->name, job_ptr->part_ptr->name) == 0)
+				break;
 		}
-
-		switch (cr_type) {
-		case CR_SOCKET_MEMORY:
-		case CR_SOCKET:
-		case CR_CORE_MEMORY:
-		case CR_CORE:
-			_chk_resize_job(job, i, this_node->sockets);
-			for (j = 0; j < this_node->sockets; j++) {
-				p_ptr->alloc_cores[offset+j] +=
-							job->alloc_cores[i][j];
-				if (p_ptr->alloc_cores[offset+j] >
-						this_node->cores)
-					error("%s: Job %u Host %s offset %u "
-					      "too many allocated "
-					      "cores %u for socket %d",
-					      pre_err, job->job_id,
-					      this_node->node_ptr->name, offset,
-					      p_ptr->alloc_cores[offset+j], j);
-			}
-			break;
-		case CR_CPU_MEMORY:
-		case CR_CPU:
-			/* "CPU" count is stored in the first "core" */
-			p_ptr->alloc_cores[offset] += job->alloc_cpus[i];
-			break;
-		default:
+		if (!p_ptr) {
+			error("cons_res: could not find cr partition %s",
+				job_ptr->part_ptr->name);
+			return SLURM_ERROR;
+		}
+		if (!p_ptr->row) {
+			p_ptr->row = xmalloc(p_ptr->num_rows *
+						sizeof(struct part_row_data));
+		}
+		
+		/* find a row to add this job */
+		for (i = 0; i < p_ptr->num_rows; i++) {
+			if (!_can_job_fit_in_row(job, &(p_ptr->row[i])))
+				continue;
+			debug3("cons_res: adding job %u to part %s row %u",
+			job_ptr->job_id, p_ptr->name, i);
+			_add_job_to_row(job, &(p_ptr->row[i]));
 			break;
 		}
-
-		/* Remove debug only */
-		debug3("cons_res: %s: Job %u (+) node %s alloc_mem %u state %d",
-			pre_err, job->job_id, 
-			node_record_table_ptr[host_index].name,
-			this_node->alloc_memory, this_node->node_state);
-		debug3("cons_res: %s: Job %u (+) alloc_ cpus %u offset %u mem %u",
-			pre_err, job->job_id, job->alloc_cpus[i],
-			job->node_offset[i], job->alloc_memory[i]);
-		for (j = 0; j < this_node->sockets; j++)
-			debug3("cons_res: %s: Job %u (+) node %s alloc_cores[%d] %u",
-				pre_err, job->job_id, 
-				node_record_table_ptr[host_index].name, 
-				j, p_ptr->alloc_cores[offset+j]);
+		if (i >= p_ptr->num_rows) {
+			/* ERROR: could not find a row for this job */
+			error("cons_res: ERROR: job overflow: "
+			      "could not find row for job");
+			/* just add the job to the last row for now */
+			_add_job_to_row(job, &(p_ptr->row[p_ptr->num_rows-1]));
+		}
+		/* update the node state */
+		for (i = 0; i < select_node_cnt; i++) {
+			if (bit_test(job->node_bitmap, i))
+				select_node_usage[i].node_state +=job->node_req;
+		}
+#if (CR_DEBUG)
+		info("DEBUG: _add_job_to_res (after):");
+		_dump_part(p_ptr);
+#endif
 	}
-	last_cr_update_time = time(NULL);
-	return rc;
+
+	return SLURM_SUCCESS;
 }
 
-/* deallocate resources that were assigned to this job 
+
+/* deallocate resources to the given job
+ * - subtract 'struct select_job_res' resources from 'struct part_res_record'
+ * - subtract job's memory requirements from 'struct node_res_record'
+ *
+ * if action = 0 then subtract cores and memory
+ * if action = 1 then only subtract memory (suspended job was terminated)
+ * if action = 2 then only subtract cores (job is suspended)
  *
- * if remove_all = 1: deallocate all resources
- * if remove_all = 0: the job has been suspended, so just deallocate CPUs
  */
-static int _rm_job_from_nodes(struct node_cr_record *select_node_ptr,
-			      struct select_cr_job *job, char *pre_err,
-			      int remove_all)
+static int _rm_job_from_res(struct part_res_record *part_record_ptr,
+			    struct node_use_record *node_usage,
+			    struct job_record *job_ptr, int action)
 {
-	int host_index, i, j, k, rc = SLURM_SUCCESS;
+	struct select_job_res *job = job_ptr->select_job;
+	int i, n;
 
-	uint16_t memset = job->state & CR_JOB_ALLOCATED_MEM;
-	uint16_t cpuset = job->state & CR_JOB_ALLOCATED_CPUS;
-	uint16_t remove_memory = 0;
-
-	if (!memset && !cpuset)
-		return rc;
-	if (!cpuset && !remove_all)
-		return rc;
-	if (memset && remove_all &&
-	    ((cr_type == CR_CORE_MEMORY) || (cr_type == CR_CPU_MEMORY) ||
-	     (cr_type == CR_MEMORY) || (cr_type == CR_SOCKET_MEMORY))) {
-	 	remove_memory = 1;
-		job->state &= ~CR_JOB_ALLOCATED_MEM;
+	if (!job || !job->core_bitmap) {
+		error("job %u has no select data", job_ptr->job_id);
+		return SLURM_ERROR;
 	}
-	if (cpuset)
-	 	job->state &= ~CR_JOB_ALLOCATED_CPUS;
-
-	i = -1;
-	for (host_index = 0; host_index < select_node_cnt; host_index++) {
-		struct node_cr_record *this_node;
-		struct part_cr_record *p_ptr;
-		uint16_t offset;
-		
-		if (bit_test(job->node_bitmap, host_index) == 0)
-			continue;
-
-		this_node = &select_node_ptr[host_index];
-		i++;
-
-		/* Update this nodes allocated resources, beginning with
-		 * memory (if applicable) */
-		if (remove_memory) {
-			if (this_node->alloc_memory >= job->alloc_memory[i])
-				this_node->alloc_memory -= job->alloc_memory[i];
-			else {
-				error("%s: alloc_memory underflow on %s",
-				      pre_err, this_node->node_ptr->name);
-				this_node->alloc_memory = 0;
-				rc = SLURM_ERROR;  
+	
+	debug3("cons_res: _rm_job_from_res: job %u act %d", job_ptr->job_id,
+		action);
+#if (CR_DEBUG)
+	_dump_job_res(job);
+#endif
+	
+	/* subtract memory */
+	if (action != 2) {
+		for (i = 0, n = 0; i < select_node_cnt; i++) {
+			if (!bit_test(job->node_bitmap, i))
+				continue;
+			if (node_usage[i].alloc_memory <
+			    job->memory_allocated[n]) {
+				error("error: node %s mem is underallocated "
+				      "(%u-%u) for job %u",
+				      select_node_record[i].node_ptr->name,
+				      node_usage[i].alloc_memory,
+				      job->memory_allocated[n], 
+				      job_ptr->job_id);
+				node_usage[i].alloc_memory = 0;
+			} else {
+				node_usage[i].alloc_memory -=
+						job->memory_allocated[n];
 			}
+			n++;
 		}
+	}
+	
+	/* subtract cores */
+	if (action != 1) {
+		/* reconstruct rows with remaining jobs */
+		struct part_res_record *p_ptr;
 		
-		if (!cpuset)
-			continue;
-		
-		p_ptr = get_cr_part_ptr(this_node, job->job_ptr->part_ptr);
-		if (p_ptr == NULL) {
-			error("%s: could not find part %s", pre_err,
-			      job->job_ptr->partition);
-			continue;
+		for (p_ptr = part_record_ptr; p_ptr; p_ptr = p_ptr->next) {
+			if (strcmp(p_ptr->name, job_ptr->part_ptr->name) == 0)
+				break;
 		}
-
-		/* If the offset is no longer valid, then the job was never
-		 * "allocated" on these cores (see add_job_to_nodes).
-		 * Therefore just continue. */
-		offset = job->node_offset[i];
-		if (offset > (this_node->sockets * (p_ptr->num_rows - 1))) {
-			rc = SLURM_ERROR;
-			continue;
+		if (!p_ptr) {
+			error("error: 'rm' could not find part %s",
+				job_ptr->part_ptr->name);
+			return SLURM_ERROR;
 		}
 		
-		switch(cr_type) {
-		case CR_SOCKET_MEMORY:
-		case CR_SOCKET:
-		case CR_CORE_MEMORY:
-		case CR_CORE:
-			_chk_resize_job(job, i, this_node->sockets);
-			for (j = 0; j < this_node->sockets; j++) {
-				if (p_ptr->alloc_cores[offset+j] >= 
-						job->alloc_cores[i][j])
-					p_ptr->alloc_cores[offset+j] -= 
-							job->alloc_cores[i][j];
-				else {
-					error("%s: alloc_cores underflow on %s",
-					      pre_err, 
-					      node_record_table_ptr[host_index].name);
-					p_ptr->alloc_cores[offset+j] = 0;
-					rc = SLURM_ERROR;
+		if (!p_ptr->row) {
+			return SLURM_SUCCESS;
+		}
+		
+		/* remove the job from the job_list */
+		n = 0;
+		for (i = 0; i < p_ptr->num_rows; i++) {
+			uint32_t j;
+			for (j = 0; j < p_ptr->row[i].num_jobs; j++) {
+				if (p_ptr->row[i].job_list[j] != job)
+					continue;
+				debug3("cons_res: removing job %u from "
+				       "part %s row %u",
+				       job_ptr->job_id, p_ptr->name, i);
+				for (; j < p_ptr->row[i].num_jobs-1; j++) {
+					p_ptr->row[i].job_list[j] =
+						p_ptr->row[i].job_list[j+1];
 				}
+				p_ptr->row[i].job_list[j] = NULL;
+				p_ptr->row[i].num_jobs -= 1;
+				/* found job - we're done */
+				n = 1;
+				i = p_ptr->num_rows;
+				break;
 			}
-			break;
-		case CR_CPU_MEMORY:
-		case CR_CPU:
-			/* CPU count is stored in the first "core" */
-			if (p_ptr->alloc_cores[offset] >= job->alloc_cpus[i])
-				p_ptr->alloc_cores[offset] -=
-							job->alloc_cpus[i];
-			else {
-				error("%s: CPU underflow (%u - %u) on %s",
-				      pre_err, p_ptr->alloc_cores[offset],
-				      job->alloc_cpus[i], 
-				      node_record_table_ptr[host_index].name);
-				p_ptr->alloc_cores[offset] = 0;
-				rc = SLURM_ERROR;  
-			}
-			break;
-		default:
-			break;
 		}
-
-		/* if all cores are available, set NODE_CR_AVAILABLE */
-		if (this_node->node_state != NODE_CR_AVAILABLE) {
-			/* need to scan all partitions */
-			struct part_cr_record *pptr;
-			int count = 0;
-			for (pptr = this_node->parts; pptr; pptr = pptr->next) {
-				/* just need to check single row partitions */
-				if (pptr->num_rows > 1)
+		
+		if (n) {
+			/* job was found and removed, so refresh the bitmaps */
+			_build_row_bitmaps(p_ptr);
+
+			/* Adjust the node_state of all nodes affected by
+			 * the removal of this job. If all cores are now
+			 * available, set node_state = NODE_CR_AVAILABLE
+			 */
+			for (n = 0; n < select_node_cnt; n++) {
+				if (bit_test(job->node_bitmap, n) == 0)
 					continue;
-				k = pptr->num_rows * this_node->sockets;
-				for (j = 0; j < k; j++) {
-					count += p_ptr->alloc_cores[j];
+				if (node_usage[n].node_state >=
+				    job->node_req) {
+					node_usage[n].node_state -=
+								job->node_req;
+				} else {
+					error("cons_res:_rm_job_from_res: "
+						"node_state mis-count");
+					node_usage[n].node_state =
+							NODE_CR_AVAILABLE;
 				}
-				if (count)
-					break;
 			}
-			if (count == 0)
-				this_node->node_state = NODE_CR_AVAILABLE;
 		}
-
-		debug3("%s: Job %u (-) node %s alloc_mem %u offset %d",
-			pre_err, job->job_id, this_node->node_ptr->name,
-			this_node->alloc_memory, offset);
-		for (j = 0; j < this_node->sockets; j++)
-			debug3("cons_res: %s: Job %u (-) node %s alloc_cores[%d] %u",
-				pre_err, job->job_id, 
-				node_record_table_ptr[host_index].name, 
-				j, p_ptr->alloc_cores[offset+j]);
 	}
-	last_cr_update_time = time(NULL);
-	return rc;
-}
 
-static bool _enough_nodes(int avail_nodes, int rem_nodes, 
-			  uint32_t min_nodes, uint32_t req_nodes)
-{
-	int needed_nodes;
-
-	if (req_nodes > min_nodes)
-		needed_nodes = rem_nodes + min_nodes - req_nodes;
-	else
-		needed_nodes = rem_nodes;
-
-	return (avail_nodes >= needed_nodes);
+	return SLURM_SUCCESS;
 }
 
+
 /*
  * init() is called when the plugin is loaded, before any other functions
  * are called.  Put global initialization here.
@@ -1151,15 +1024,15 @@ extern int init(void)
 
 extern int fini(void)
 {
-	_clear_job_list();
-	if (select_cr_job_list) {
-		list_destroy(select_cr_job_list);
-		select_cr_job_list = NULL;
-	}
-
-	_xfree_select_nodes(select_node_ptr, select_node_cnt);
-	select_node_ptr = NULL;
-	select_node_cnt = 0;
+	_destroy_node_data(select_node_usage, select_node_record);
+	select_node_record = NULL;
+	select_node_usage = NULL;
+	_destroy_part_data(select_part_record);
+	select_part_record = NULL;
+	xfree(cr_node_num_cores);
+	xfree(cr_num_core_count);
+	cr_node_num_cores = NULL;
+	cr_num_core_count = NULL;
 
 	verbose("%s shutting down ...", plugin_name);
 	return SLURM_SUCCESS;
@@ -1170,905 +1043,114 @@ extern int fini(void)
  * node selection API.
  */
 
-static int _cr_write_state_buffer(int fd, Buf buffer)
-{
-	int error_code = SLURM_SUCCESS;
-	char *buf  = get_buf_data(buffer);
-	size_t len = get_buf_offset(buffer);
-	while(1) {
-		int wrote = write (fd, buf, len);
-		if ((wrote < 0) && (errno == EINTR))
-			continue;
-		if (wrote == 0)
-			break;
-		if (wrote < 0) {
-			error ("Can't save select/cons_res state: %m");
-			error_code = SLURM_ERROR;
-			break;   
-		}
-		buf += wrote;
-		len -= wrote;
-		if (len == 0) {
-			break;
-		}
-		if (len <= 0) {
-			error ("Can't save select/cons_res state: %m");
-			error_code = SLURM_ERROR;
-			break;   
-		}
-	}
-	return error_code;
-}
-
-static int _cr_read_state_buffer(int fd, char **data_p, int *data_size_p)
-{
-	int error_code = SLURM_SUCCESS;
-        int data_allocated = 0, data_read = 0, data_size = 0;
-	char *data = NULL;
-	int buffer_size = 1024;
-
-        if (fd < 0) {
-	    	error_code = SLURM_ERROR; 
-                error("No fd for select/cons_res state recovery");
-	}
-
-	data_allocated = buffer_size;
-	data = xmalloc(data_allocated);
-	*data_p      = data;
-	*data_size_p = data_size;
-	while (1) {
-		data_read = read (fd, &data[data_size],
-				  buffer_size);
-		if ((data_read < 0) && (errno == EINTR)) {
-			continue;
-		}
-		if (data_read < 0) {
-			error ("Read error recovering select/cons_res state");
-			error_code = SLURM_ERROR;
-			break;
-		} else if (data_read == 0) {
-			break;
-		}
-		data_size      += data_read;
-		data_allocated += data_read;
-		xrealloc(data, data_allocated);
-		*data_p      = data;
-		*data_size_p = data_size;
-	}
-
-	return error_code;
-}
-
-static int _cr_pack_job(struct select_cr_job *job, Buf buffer)
-{
-    	int i;
-	uint32_t nhosts = job->nhosts;
-
-	/* Do not write job->state since we re-establish
-	 * the job's state on the nodes at restart time.
-	 * Likewise for job_ptr and node_bitmap. */
-	pack32(job->job_id, buffer);
-	pack32(job->nprocs, buffer);
-	pack32(job->nhosts, buffer);
-	pack16(job->node_req, buffer);
-
-	pack16_array(job->cpus, nhosts, buffer);
-	pack16_array(job->alloc_cpus, nhosts, buffer);
-	pack16_array(job->node_offset, nhosts, buffer);
-
-	if (job->alloc_cores) {
-		pack16((uint16_t) 1, buffer);
-		for (i = 0; i < nhosts; i++) {
-			uint16_t nsockets = job->num_sockets[i];
-			pack16(nsockets, buffer);
-			pack16_array(job->alloc_cores[i], nsockets, buffer);
-		}
-	} else {
-		pack16((uint16_t) 0, buffer);
-	}
-	pack32_array(job->alloc_memory, nhosts, buffer);
-
-	return 0;
-}
-
-static int _cr_unpack_job(struct select_cr_job *job, Buf buffer)
-{
-    	int i;
-    	uint16_t have_alloc_cores;
-    	uint32_t len32;
-	uint32_t nhosts = 0;
-	uint16_t bit_cnt;
-
-	safe_unpack32(&job->job_id, buffer);
-	safe_unpack32(&job->nprocs, buffer);
-	safe_unpack32(&job->nhosts, buffer);
-	safe_unpack16(&bit_cnt, buffer);
-	nhosts = job->nhosts;
-	job->node_req = bit_cnt;
-
-	safe_unpack16_array(&job->cpus, &len32, buffer);
-	safe_unpack16_array(&job->alloc_cpus, &len32, buffer);
-	safe_unpack16_array(&job->node_offset, &len32, buffer);
-
-	safe_unpack16(&have_alloc_cores, buffer);
-	if (have_alloc_cores) {
-		job->num_sockets = (uint16_t *) xmalloc(job->nhosts * 
-				sizeof(uint16_t));
-		job->alloc_cores = (uint16_t **) xmalloc(job->nhosts * 
-				sizeof(uint16_t *));
-		for (i = 0; i < nhosts; i++) {
-			safe_unpack16(&job->num_sockets[i], buffer);
-			safe_unpack16_array(&job->alloc_cores[i], &len32, buffer);
-			if (len32 != job->num_sockets[i])
-				goto unpack_error;
-		}
-	}
-	safe_unpack32_array((uint32_t**)&job->alloc_memory, &len32, buffer);
-	if (len32 != nhosts)
-		 goto unpack_error;
-
-	return 0;
-
-unpack_error:
-	_xfree_select_cr_job(job);
-	return -1;
-}
-
-extern int select_p_state_save(char *dir_name)
-{
-	int error_code = SLURM_SUCCESS;
-	ListIterator job_iterator;
-	struct select_cr_job *job = NULL;
-	Buf buffer = NULL;
-	int state_fd;
-	uint16_t job_cnt;
-	char *file_name = NULL;
-	static time_t last_save_time;
-
-	if (last_save_time > last_cr_update_time)
-		return SLURM_SUCCESS;
-
-	debug3("cons_res: select_p_state_save");
-
-	/*** create the state file ***/
-        file_name = xstrdup(dir_name);
-        xstrcat(file_name, "/cons_res_state");
-        (void) unlink(file_name);
-        state_fd = creat (file_name, 0600);
-        if (state_fd < 0) {
-                error("Can't save state, error creating file %s", file_name);
-		xfree(file_name);
-                return SLURM_ERROR;
-	}
-
-	buffer = init_buf(1024);
-
-	/*** record the plugin type ***/
-	packstr((char*)plugin_type, buffer);
-	pack32(plugin_version, buffer);
-	pack16(cr_type,        buffer);
-	pack32(pstate_version, buffer);
-
-	slurm_mutex_lock(&cr_mutex);
-	/*** pack the select_cr_job array ***/
-	if (select_cr_job_list) {
-		job_cnt = list_count(select_cr_job_list);
-		pack16(job_cnt, buffer);
-		job_iterator = list_iterator_create(select_cr_job_list);
-		while ((job = (struct select_cr_job *) list_next(job_iterator))) {
-			_cr_pack_job(job, buffer);
-		}
-		list_iterator_destroy(job_iterator);
-	} else
-		pack16((uint16_t) 0, buffer);	/* job count */
-	slurm_mutex_unlock(&cr_mutex);
-
-	/*** close the state file ***/
-	error_code = _cr_write_state_buffer(state_fd, buffer);
-	if (error_code == SLURM_SUCCESS)
-		last_save_time = time(NULL);
-	close (state_fd);
-	xfree(file_name);
-	if (buffer)
-		free_buf(buffer);
-
-	return error_code;
-}
-
-
-/* This is Part 2 of a 4-part procedure which can be found in
- * src/slurmctld/read_config.c. See select_p_node_init for the
- * whole story.
- */
-extern int select_p_state_restore(char *dir_name)
-{
-	int error_code = SLURM_SUCCESS;
-	int state_fd, i;
-	char *file_name = NULL;
-	struct select_cr_job *job;
-	Buf buffer = NULL;
-	uint32_t len32;
-	char *data = NULL;
-	int data_size = 0;
-	char *restore_plugin_type = NULL;
-	uint32_t restore_plugin_version = 0;
-	uint16_t restore_plugin_crtype  = 0;
-	uint32_t restore_pstate_version = 0;
-	uint16_t job_cnt;
-
-	info("cons_res: select_p_state_restore");
-
-	if (select_cr_job_list)		/* preserve current job info */
-		return SLURM_SUCCESS;
-
-	if (!dir_name) {
-		info("Starting cons_res with clean slate");
-		return SLURM_SUCCESS;
-	}
-	file_name = xstrdup(dir_name);
-	xstrcat(file_name, "/cons_res_state");
-	state_fd = open (file_name, O_RDONLY);
-	if (state_fd < 0) {
-		error ("Can't restore state, error opening file %s",
-			file_name);
-		error ("Starting cons_res with clean slate");
-		xfree(file_name);
-		return SLURM_SUCCESS;
-	}
-
-	error_code = _cr_read_state_buffer(state_fd, &data, &data_size);
-
-	if (error_code != SLURM_SUCCESS) {
-		error ("Can't restore state, error reading file %s",
-			file_name);
-		error ("Starting cons_res with clean slate");
-		xfree(data);
-		xfree(file_name);
-		return SLURM_SUCCESS;
-	}
-
-	buffer = create_buf (data, data_size);
-	data = NULL;    /* now in buffer, don't xfree() */
-
-	/*** retrieve the plugin type ***/
-	safe_unpackstr_xmalloc(&restore_plugin_type, &len32, buffer);
-	safe_unpack32(&restore_plugin_version, buffer);
-	safe_unpack16(&restore_plugin_crtype,  buffer);
-	safe_unpack32(&restore_pstate_version, buffer);
-
-	if (restore_plugin_type == NULL)
-		goto unpack_error;
-	if ((strcmp(restore_plugin_type, plugin_type) != 0) ||
-	    (restore_plugin_version != plugin_version) ||
-	    (restore_plugin_crtype  != cr_type) ||
-	    (restore_pstate_version != pstate_version)) { 
-		error ("Can't restore state, state version mismatch: "
-			"saw %s/%u/%u/%u, expected %s/%u/%u/%u",
-			restore_plugin_type,
-			restore_plugin_version,
-			restore_plugin_crtype,
-			restore_pstate_version,
-			plugin_type,
-			plugin_version,
-			cr_type,
-			pstate_version);
-		error ("Starting cons_res with clean slate");
-		xfree(restore_plugin_type);
-		if (buffer)
-			free_buf(buffer);
-		xfree(file_name);
-		return SLURM_SUCCESS;
-	}
-
-	/*** unpack the select_cr_job array ***/
-	_clear_job_list();
-	if (select_cr_job_list) {
-		list_destroy(select_cr_job_list);
-		select_cr_job_list = NULL;
-	}
-	select_cr_job_list = list_create(NULL);
-
-	safe_unpack16(&job_cnt, buffer);
-	for (i=0; i<job_cnt; i++) {
-		job = xmalloc(sizeof(struct select_cr_job));
-		if (_cr_unpack_job(job, buffer) != 0)
-			goto unpack_error;
-		job->job_ptr = find_job_record(job->job_id);
-		if (job->job_ptr == NULL) {
-			error("cons_res: recovered non-existent job %u",
-				job->job_id);
-			_xfree_select_cr_job(job);
-		} else {
-			/* NOTE: Nodes can be added or removed from the
-			 * system on a restart */
-			list_append(select_cr_job_list, job);
-			debug2("recovered cons_res job data for job %u", 
-				job->job_id);
-		}
-	}
-
-	/*** cleanup after restore ***/
-        if (buffer)
-                free_buf(buffer);
-        xfree(restore_plugin_type);
-	xfree(file_name);
-
-	return SLURM_SUCCESS;
-
-unpack_error:
-        if (buffer)
-                free_buf(buffer);
-        xfree(restore_plugin_type);
-
-	error ("Can't restore state, error unpacking file %s", file_name);
-	error ("Starting cons_res with clean slate");
-	return SLURM_SUCCESS;
-}
-
-/* This is Part 3 of a 4-part procedure which can be found in
- * src/slurmctld/read_config.c. See select_p_node_init for the
- * whole story.
- */
-extern int select_p_job_init(List job_list)
-{
-	struct select_cr_job *job = NULL;
-	ListIterator iterator;
-	int suspend;
-
-	info("cons_res: select_p_job_init");
-
-	/* Note: select_cr_job_list restored in select_p_state_restore
-	 * except on a cold-start */
-	if (!select_cr_job_list) {
-		select_cr_job_list = list_create(NULL);
-		return SLURM_SUCCESS;
-	}
-
-	/* Now synchronize the node information to the active jobs */
-	if (list_count(select_cr_job_list) == 0)
-		return SLURM_SUCCESS;
-
-	iterator = list_iterator_create(select_cr_job_list);
-	while ((job = (struct select_cr_job *) list_next(iterator))) {
-		job->job_ptr = find_job_record(job->job_id);
-		if (job->job_ptr == NULL) {
-			error("select_p_job_init: could not find job %u",
-			      job->job_id);
-			list_remove(iterator);
-			continue;
-		}
-		if (job->job_ptr->job_state == JOB_SUSPENDED)
-			suspend = 1;
-		else
-			suspend = 0;
-		FREE_NULL_BITMAP(job->node_bitmap);
-		node_name2bitmap(job->job_ptr->nodes, true,
-				 &job->node_bitmap);
-		_add_job_to_nodes(job, "select_p_job_init", suspend);
-	}
-	list_iterator_destroy(iterator);
-	last_cr_update_time = time(NULL);
-
-	return SLURM_SUCCESS;
-}
-
 /* This is Part 1 of a 4-part procedure which can be found in
  * src/slurmctld/read_config.c. The whole story goes like this:
  *
- * Step 1: select_g_node_init       : initializes 'select_node_ptr' global array
- *                                    sets node_ptr, node_name, and num_sockets
- * Step 2: select_g_state_restore   : IFF a cons_res state file exists:
- *                                    loads global 'select_cr_job_list' with
- *                                    saved job data
- * Step 3: select_g_job_init        : creates global 'select_cr_job_list' if
- *                                    nothing was recovered from state file.
- *                                    Rebuilds select_node_ptr global array.
- * Step 4: select_g_update_nodeinfo : called from reset_job_bitmaps() with each
- *                                    valid recovered job_ptr AND from
+ * Step 1: select_g_node_init       : initializes the global node arrays
+ * Step 2: select_g_state_restore   : NO-OP - nothing to restore
+ * Step 3: select_g_job_init        : NO-OP - nothing to initialize
+ * Step 4: select_g_update_nodeinfo : called from reset_job_bitmaps() with
+ *                                    each valid recovered job_ptr AND from
  *                                    select_nodes(), this procedure adds job
- *                                    data to the 'select_node_ptr' global array
+ *                                    data to the 'select_part_record' global
+ *                                    array
  */
 extern int select_p_node_init(struct node_record *node_ptr, int node_cnt)
 {
 	int i;
 
 	info("cons_res: select_p_node_init");
-
 	if (node_ptr == NULL) {
 		error("select_g_node_init: node_ptr == NULL");
 		return SLURM_ERROR;
 	}
-
 	if (node_cnt < 0) {
 		error("select_g_node_init: node_cnt < 0");
 		return SLURM_ERROR;
 	}
 
-	/* completely rebuild node data */
-	_xfree_select_nodes(select_node_ptr, select_node_cnt);
-	select_node_cnt = node_cnt;
-	select_node_ptr = xmalloc(sizeof(struct node_cr_record) *
-							select_node_cnt);
+	/* initial global core data structures */
 	select_fast_schedule = slurm_get_fast_schedule();
+	_init_global_core_data(node_ptr, node_cnt);
+	
+	_destroy_node_data(select_node_usage, select_node_record);
+	select_node_cnt  = node_cnt;
+	select_node_record = xmalloc(node_cnt * sizeof(struct node_res_record));
+	select_node_usage  = xmalloc(node_cnt * sizeof(struct node_use_record));
 
 	for (i = 0; i < select_node_cnt; i++) {
-		select_node_ptr[i].node_ptr = &node_ptr[i];
+		select_node_record[i].node_ptr = &node_ptr[i];
 		if (select_fast_schedule) {
 			struct config_record *config_ptr;
 			config_ptr = node_ptr[i].config_ptr;
-			select_node_ptr[i].cpus        = config_ptr->cpus;
-			select_node_ptr[i].sockets     = config_ptr->sockets;
-			select_node_ptr[i].cores       = config_ptr->cores;
-			select_node_ptr[i].threads     = config_ptr->threads;
-			select_node_ptr[i].real_memory = config_ptr->real_memory;
+			select_node_record[i].cpus    = config_ptr->cpus;
+			select_node_record[i].sockets = config_ptr->sockets;
+			select_node_record[i].cores   = config_ptr->cores;
+			select_node_record[i].vpus    = config_ptr->threads;
+			select_node_record[i].real_memory =
+							config_ptr->real_memory;
 		} else {
-			select_node_ptr[i].cpus        = node_ptr[i].cpus;
-			select_node_ptr[i].sockets     = node_ptr[i].sockets;
-			select_node_ptr[i].cores       = node_ptr[i].cores;
-			select_node_ptr[i].threads     = node_ptr[i].threads;
-			select_node_ptr[i].real_memory = node_ptr[i].real_memory;
+			select_node_record[i].cpus    = node_ptr[i].cpus;
+			select_node_record[i].sockets = node_ptr[i].sockets;
+			select_node_record[i].cores   = node_ptr[i].cores;
+			select_node_record[i].vpus    = node_ptr[i].threads;
+			select_node_record[i].real_memory =
+							node_ptr[i].real_memory;
 		}
-		select_node_ptr[i].node_state = NODE_CR_AVAILABLE;
-		/* xmalloc initialized everything to zero, 
-		 * including alloc_memory and parts */
-		_create_node_part_array(&(select_node_ptr[i]));
+		select_node_usage[i].node_state = NODE_CR_AVAILABLE;
 	}
+	_create_part_data();
 
 	return SLURM_SUCCESS;
 }
 
-extern int select_p_block_init(List part_list)
+extern int select_p_state_save(char *dir_name)
 {
+	/* nothing to save */
 	return SLURM_SUCCESS;
 }
 
-/* return the number of tasks that the given
- * job can run on the indexed node */
-static int _get_task_cnt(struct job_record *job_ptr, const int node_index,
-			 int *task_cnt, int *freq, int size)
-{
-	int i, pos, tasks;
-	uint16_t * layout_ptr = NULL;
-
-	layout_ptr = job_ptr->details->req_node_layout;
-
-	pos = 0;
-	for (i = 0; i < size; i++) {
-		if (pos+freq[i] > node_index)
-			break;
-		pos += freq[i];
-	}
-	tasks = task_cnt[i];
-	if (layout_ptr && bit_test(job_ptr->details->req_node_bitmap, i)) {
-		pos = bit_get_pos_num(job_ptr->details->req_node_bitmap, i);
-		tasks = MIN(tasks, layout_ptr[pos]);
-	} else if (layout_ptr) {
-		tasks = 0; /* should not happen? */
-	}
-	return tasks;
-}
-
-static int _eval_nodes(struct job_record *job_ptr, bitstr_t * bitmap,
-		       uint32_t min_nodes, uint32_t max_nodes,
-		       uint32_t req_nodes, int *task_cnt, int *freq, 
-		       int array_size)
+/* This is Part 2 of a 4-part procedure which can be found in
+ * src/slurmctld/read_config.c. See select_p_node_init for the
+ * whole story.
+ */
+extern int select_p_state_restore(char *dir_name)
 {
-	int i, f, index, error_code = SLURM_ERROR;
-	int *consec_nodes;	/* how many nodes we can add from this 
-				 * consecutive set of nodes */
-	int *consec_cpus;	/* how many nodes we can add from this 
-				 * consecutive set of nodes */
-	int *consec_start;	/* where this consecutive set starts (index) */
-	int *consec_end;	/* where this consecutive set ends (index) */
-	int *consec_req;	/* are nodes from this set required 
-				 * (in req_bitmap) */
-	int consec_index, consec_size, sufficient;
-	int rem_cpus, rem_nodes;	/* remaining resources desired */
-	int best_fit_nodes, best_fit_cpus, best_fit_req;
-	int best_fit_sufficient, best_fit_index = 0;
-	int avail_cpus, ll;	/* ll = layout array index */
-	struct multi_core_data *mc_ptr = NULL;
-	uint16_t * layout_ptr = NULL;
-	bool required_node;
-
-	xassert(bitmap);
-	
-	if (bit_set_count(bitmap) < min_nodes)
-		return error_code;
-
-	layout_ptr = job_ptr->details->req_node_layout;
-	mc_ptr = job_ptr->details->mc_ptr;
-
-	consec_size = 50;	/* start allocation for 50 sets of 
-				 * consecutive nodes */
-	consec_cpus  = xmalloc(sizeof(int) * consec_size);
-	consec_nodes = xmalloc(sizeof(int) * consec_size);
-	consec_start = xmalloc(sizeof(int) * consec_size);
-	consec_end   = xmalloc(sizeof(int) * consec_size);
-	consec_req   = xmalloc(sizeof(int) * consec_size);
-
-	/* Build table with information about sets of consecutive nodes */
-	consec_index = 0;
-	consec_cpus[consec_index] = consec_nodes[consec_index] = 0;
-	consec_req[consec_index] = -1;	/* no required nodes here by default */
-
-	rem_cpus = job_ptr->num_procs;
-	if (req_nodes > min_nodes)
-		rem_nodes = req_nodes;
-	else
-		rem_nodes = min_nodes;
-
-	i = 0;
-	f = 0;
-	for (index = 0, ll = -1; index < select_node_cnt; index++, f++) {
-		if (f >= freq[i]) {
-			f = 0;
-			i++;
-		}
-		if (job_ptr->details->req_node_bitmap) {
-			required_node =
-				bit_test(job_ptr->details->req_node_bitmap,
-					 index);
-		} else
-			required_node = false;
-		if (layout_ptr && required_node)
-			ll++;
-		if (bit_test(bitmap, index)) {
-			if (consec_nodes[consec_index] == 0)
-				consec_start[consec_index] = index;
-			avail_cpus = task_cnt[i];
-			if (layout_ptr && required_node){
-				avail_cpus = MIN(avail_cpus, layout_ptr[ll]);
-			} else if (layout_ptr) {
-				avail_cpus = 0; /* should not happen? */
-			}
-			if ((max_nodes > 0) && required_node) {
-				if (consec_req[consec_index] == -1) {
-					/* first required node in set */
-					consec_req[consec_index] = index;
-				}
-				rem_cpus -= avail_cpus;
-				rem_nodes--;
-				/* leaving bitmap set, decrement max limit */
-				max_nodes--;
-			} else {	/* node not selected (yet) */
-				bit_clear(bitmap, index);
-				consec_cpus[consec_index] += avail_cpus;
-				consec_nodes[consec_index]++;
-			}
-		} else if (consec_nodes[consec_index] == 0) {
-			consec_req[consec_index] = -1;
-			/* already picked up any required nodes */
-			/* re-use this record */
-		} else {
-			consec_end[consec_index] = index - 1;
-			if (++consec_index >= consec_size) {
-				consec_size *= 2;
-				xrealloc(consec_cpus, sizeof(int)*consec_size);
-				xrealloc(consec_nodes, sizeof(int)*consec_size);
-				xrealloc(consec_start, sizeof(int)*consec_size);
-				xrealloc(consec_end, sizeof(int)*consec_size);
-				xrealloc(consec_req, sizeof(int)*consec_size);
-			}
-			consec_cpus[consec_index] = 0;
-			consec_nodes[consec_index] = 0;
-			consec_req[consec_index] = -1;
-		}
-	}
-	if (consec_nodes[consec_index] != 0)
-		consec_end[consec_index++] = index - 1;
-	
-	for (i = 0; i < consec_index; i++) {
-		debug3("cons_res: eval_nodes: %d consec c=%d n=%d b=%d e=%d r=%d",
-			i, consec_cpus[i], consec_nodes[i], consec_start[i],
-			consec_end[i], consec_req[i]);
-	}
-	
-	/* accumulate nodes from these sets of consecutive nodes until */
-	/*   sufficient resources have been accumulated */
-	while (consec_index && (max_nodes > 0)) {
-		best_fit_cpus = best_fit_nodes = best_fit_sufficient = 0;
-		best_fit_req = -1;	/* first required node, -1 if none */
-		for (i = 0; i < consec_index; i++) {
-			if (consec_nodes[i] == 0)
-				continue;
-			sufficient =  (consec_cpus[i] >= rem_cpus)
-				&& _enough_nodes(consec_nodes[i], rem_nodes,
-						 min_nodes, req_nodes);
-			
-			/* if first possibility OR */
-			/* contains required nodes OR */
-			/* first set large enough for request OR */
-			/* tightest fit (less resource waste) OR */
-			/* nothing yet large enough, but this is biggest */
-			if ((best_fit_nodes == 0) ||
-			    ((best_fit_req == -1) && (consec_req[i] != -1)) ||
-			    (sufficient && (best_fit_sufficient == 0)) ||
-			    (sufficient && (consec_cpus[i] < best_fit_cpus)) ||
-			    (!sufficient && (consec_cpus[i] > best_fit_cpus))) {
-				best_fit_cpus = consec_cpus[i];
-				best_fit_nodes = consec_nodes[i];
-				best_fit_index = i;
-				best_fit_req = consec_req[i];
-				best_fit_sufficient = sufficient;
-			}
-		}
-		if (best_fit_nodes == 0)
-			break;
-		if (job_ptr->details->contiguous &&
-		    ((best_fit_cpus < rem_cpus) ||
-		     (!_enough_nodes(best_fit_nodes, rem_nodes,
-				     min_nodes, req_nodes))))
-			break;	/* no hole large enough */
-		if (best_fit_req != -1) {
-			/* This collection of nodes includes required ones
-			 * select nodes from this set, first working up
-			 * then down from the required nodes */
-			for (i = best_fit_req;
-			     i <= consec_end[best_fit_index]; i++) {
-				if ((max_nodes <= 0)
-				    ||  ((rem_nodes <= 0) && (rem_cpus <= 0)))
-					break;
-				if (bit_test(bitmap, i))
-					continue;
-				bit_set(bitmap, i);
-				rem_nodes--;
-				max_nodes--;
-				avail_cpus = _get_task_cnt(job_ptr, i,
-							   task_cnt, freq,
-							   array_size);
-				rem_cpus -= avail_cpus;
-			}
-			for (i = (best_fit_req - 1);
-			     i >= consec_start[best_fit_index]; i--) {
-				if ((max_nodes <= 0)
-				    ||  ((rem_nodes <= 0) && (rem_cpus <= 0)))
-					break;
-				if (bit_test(bitmap, i)) 
-					continue;
-				avail_cpus = _get_task_cnt(job_ptr, i,
-							   task_cnt, freq,
-							   array_size);
-				if (avail_cpus <= 0)
-					continue;
-				rem_cpus -= avail_cpus;
-				bit_set(bitmap, i);
-				rem_nodes--;
-				max_nodes--;
-			}
-		} else {
-			for (i = consec_start[best_fit_index];
-			     i <= consec_end[best_fit_index]; i++) {
-				if ((max_nodes <= 0)
-				    || ((rem_nodes <= 0) && (rem_cpus <= 0)))
-					break;
-				if (bit_test(bitmap, i))
-					continue;
-				avail_cpus = _get_task_cnt(job_ptr, i,
-							   task_cnt, freq,
-							   array_size);
-				if (avail_cpus <= 0)
-					continue;
-				if ((max_nodes == 1) && 
-				    (avail_cpus < rem_cpus)) {
-					/* Job can only take one more node and
-					 * this one has insufficient CPU */
-					continue;
-				}
-				rem_cpus -= avail_cpus;
-				bit_set(bitmap, i);
-				rem_nodes--;
-				max_nodes--;
-			}
-		}
-
-		if (job_ptr->details->contiguous ||
-		    ((rem_nodes <= 0) && (rem_cpus <= 0))) {
-			error_code = SLURM_SUCCESS;
-			break;
-		}
-		consec_cpus[best_fit_index] = 0;
-		consec_nodes[best_fit_index] = 0;
-	}
-	
-	if (error_code && (rem_cpus <= 0)
-	    && _enough_nodes(0, rem_nodes, min_nodes, req_nodes))
-		error_code = SLURM_SUCCESS;
-
-	xfree(consec_cpus);
-	xfree(consec_nodes);
-	xfree(consec_start);
-	xfree(consec_end);
-	xfree(consec_req);
-	return error_code;
+	/* nothing to restore */
+	return SLURM_SUCCESS;
 }
 
-/* this is an intermediary step between select_p_job_test and _eval_nodes
- * to tackle the knapsack problem. This code incrementally removes nodes
- * with low task counts for the job and re-evaluates each result */
-static int _select_nodes(struct job_record *job_ptr, bitstr_t * bitmap,
-			 uint32_t min_nodes, uint32_t max_nodes, 
-			 uint32_t req_nodes, int *task_cnt, int *freq, 
-			 int array_size)
+/* This is Part 3 of a 4-part procedure which can be found in
+ * src/slurmctld/read_config.c. See select_p_node_init for the
+ * whole story.
+ */
+extern int select_p_job_init(List job_list)
 {
-	int i, b, count, ec, most_tasks = 0;
-	bitstr_t *origmap, *reqmap = NULL;
-
-	if (job_ptr->details->req_node_bitmap)
-		reqmap = job_ptr->details->req_node_bitmap;
-
-	/* clear nodes from the bitmap that don't have available resources */
-	for (i = 0, b = 0; i < array_size; i++) {
-		for (count = 0; count < freq[i]; count++, b++) {
-			if (bit_test(bitmap, b) && task_cnt[i] < 1) {
-				if (reqmap && bit_test(reqmap, b)) {
-					/* can't clear a required node! */
-					return SLURM_ERROR;
-				}
-				bit_clear(bitmap, b); 
-			}
-		}
-	}
-
-	/* NOTE: num_procs is 1 by default.
-	 * Only reset max_nodes if user explicitly sets a process count */
-	if ((job_ptr->num_procs > 1) && (max_nodes > job_ptr->num_procs))
-		max_nodes = job_ptr->num_procs;
-
-	origmap = bit_copy(bitmap);
-	if (origmap == NULL)
-		fatal("bit_copy malloc failure");
-
-	ec = _eval_nodes(job_ptr, bitmap, min_nodes, max_nodes,
-			 req_nodes, task_cnt, freq, array_size);
-
-	if (ec == SLURM_SUCCESS) {
-		bit_free(origmap);
-		return ec;
-	}
-
-	/* This nodeset didn't work. To avoid a possible knapsack problem, 
-	 * incrementally remove nodes with low task counts and retry */
-
-	for (i = 0; i < array_size; i++) {
-		if (task_cnt[i] > most_tasks)
-			most_tasks = task_cnt[i];
-	}
-
-	for (count = 0; count < most_tasks; count++) {
-		int nochange = 1;
-		bit_or(bitmap, origmap);
-		for (i = 0, b = 0; i < array_size; i++) {
-			if (task_cnt[i] != -1 && task_cnt[i] <= count) {
-				int j = 0, x = b;
-				for (; j < freq[i]; j++, x++) {
-					if (!bit_test(bitmap, x))
-						continue;
-					if (reqmap && bit_test(reqmap, x)) {
-						bit_free(origmap);
-						return SLURM_ERROR;
-					}
-					nochange = 0;
-					bit_clear(bitmap, x);
-					bit_clear(origmap, x);
-				}
-			}
-			b += freq[i];
-		}
-		if (nochange)
-			continue;
-		ec = _eval_nodes(job_ptr, bitmap, min_nodes, max_nodes,
-				 req_nodes, task_cnt, freq, array_size);
-		if (ec == SLURM_SUCCESS) {
-			bit_free(origmap);
-			return ec;
-		}
-	}
-	bit_free(origmap);
-	return ec;
+	/* nothing to initialize for jobs */
+	return SLURM_SUCCESS;
 }
 
-/* test to see if any shared partitions are running jobs */
-static int _is_node_sharing(struct node_cr_record *this_node)
+extern int select_p_block_init(List part_list)
 {
-	int i, size;
-	struct part_cr_record *p_ptr = this_node->parts;
-	for (; p_ptr; p_ptr = p_ptr->next) {
-		if (p_ptr->num_rows < 2)
-			continue;
-		size = p_ptr->num_rows * this_node->sockets;
-		for (i = 0; i < size; i++) {
-			if (p_ptr->alloc_cores[i])
-				return 1;
-		}
-	}
-	return 0;
-
+	return SLURM_SUCCESS;
 }
 
-/* test to see if the given node has any jobs running on it */
-static int _is_node_busy(struct node_cr_record *this_node)
-{
-	int i, size;
-	struct part_cr_record *p_ptr = this_node->parts;
-	for (; p_ptr; p_ptr = p_ptr->next) {
-		size = p_ptr->num_rows * this_node->sockets;
-		for (i = 0; i < size; i++) {
-			if (p_ptr->alloc_cores[i])
-				return 1;
-		}
-	}
-	return 0;
-}
 
-/*
- * Determine which of these nodes are usable by this job
- *
- * Remove nodes from the bitmap that don't have enough memory to
- * support the job. Return SLURM_ERROR if a required node doesn't
- * have enough memory.
- *
- * if node_state = NODE_CR_RESERVED, clear bitmap (if node is required
- *                                   then should we return NODE_BUSY!?!)
- *
- * if node_state = NODE_CR_ONE_ROW, then this node can only be used by
- *                                  another NODE_CR_ONE_ROW job
- *
- * if node_state = NODE_CR_AVAILABLE AND:
- *  - job_node_req = NODE_CR_RESERVED, then we need idle nodes
- *  - job_node_req = NODE_CR_ONE_ROW, then we need idle or non-sharing nodes
- */
-static int _verify_node_state(struct node_cr_record *select_node_ptr,
-			      struct job_record *job_ptr, bitstr_t * bitmap,
-			      enum node_cr_state job_node_req)
+static struct multi_core_data * _create_default_mc(void)
 {
-	int i;
-	uint32_t free_mem, min_mem;
-
-	min_mem = job_ptr->details->job_min_memory & (~MEM_PER_CPU);
-	for (i = 0; i < select_node_cnt; i++) {
-		if (!bit_test(bitmap, i))
-			continue;
-
-		if ((job_ptr->details->job_min_memory) &&
-		    ((cr_type == CR_CORE_MEMORY) || (cr_type == CR_CPU_MEMORY) || 
-		     (cr_type == CR_MEMORY) || (cr_type == CR_SOCKET_MEMORY))) {
-			free_mem = select_node_ptr[i].real_memory;
-			free_mem -= select_node_ptr[i].alloc_memory;
-			if (free_mem < min_mem)
-				goto clear_bit;
-		}
-
-		if (select_node_ptr[i].node_state == NODE_CR_RESERVED) {
-			goto clear_bit;
-		} else if (select_node_ptr[i].node_state == NODE_CR_ONE_ROW) {
-			if ((job_node_req == NODE_CR_RESERVED) ||
-			    (job_node_req == NODE_CR_AVAILABLE))
-				goto clear_bit;
-			/* cannot use this node if it is running jobs
-			 * in sharing partitions */
-			if ( _is_node_sharing(&(select_node_ptr[i])) )
-				goto clear_bit;
-		} else {	/* node_state = NODE_CR_AVAILABLE */
-			if (job_node_req == NODE_CR_RESERVED) {
-				if ( _is_node_busy(&(select_node_ptr[i])) )
-					goto clear_bit;
-			} else if (job_node_req == NODE_CR_ONE_ROW) {
-				if ( _is_node_sharing(&(select_node_ptr[i])) )
-					goto clear_bit;
-			}
-		}
-		continue;	/* node is usable, test next node */
-
-		/* This node is not usable by this job */
- clear_bit:	bit_clear(bitmap, i);
-		if (job_ptr->details->req_node_bitmap &&
-		    bit_test(job_ptr->details->req_node_bitmap, i))
-			return SLURM_ERROR;
-
-	}
-
-	return SLURM_SUCCESS;
+	struct multi_core_data *mc_ptr;
+	mc_ptr = xmalloc(sizeof(struct multi_core_data));
+	mc_ptr->min_sockets = 1;
+	mc_ptr->max_sockets = 0xffff;
+	mc_ptr->min_cores   = 1;
+	mc_ptr->max_cores   = 0xffff;
+	mc_ptr->min_threads = 1;
+	mc_ptr->max_threads = 0xffff;
+/*	mc_ptr is initialized to zero by xmalloc*/
+/*	mc_ptr->ntasks_per_socket = 0; */
+/*	mc_ptr->ntasks_per_core   = 0; */
+/*	mc_ptr->plane_size        = 0; */
+	return mc_ptr;
 }
 
 /* Determine the node requirements for the job:
@@ -2076,7 +1158,7 @@ static int _verify_node_state(struct node_cr_record *select_node_ptr,
  * - can the job run on shared nodes?   (NODE_CR_ONE_ROW)
  * - can the job run on overcommitted resources? (NODE_CR_AVAILABLE)
  */
-static enum node_cr_state _get_job_node_req(struct job_record *job_ptr)
+static uint16_t _get_job_node_req(struct job_record *job_ptr)
 {
 	int max_share = job_ptr->part_ptr->max_share;
 	
@@ -2097,128 +1179,6 @@ static enum node_cr_state _get_job_node_req(struct job_record *job_ptr)
 	return NODE_CR_ONE_ROW;
 }
 
-/* for a given node and partition return the count of rows (time slices)
- * that have resources allocated */
-static int _get_allocated_rows(struct node_cr_record *select_node_ptr,
-			       struct job_record *job_ptr, int n,
-			       enum node_cr_state job_node_req)
-{
-	struct part_cr_record *p_ptr;
-	int i, j, rows = 0;
-	
-	p_ptr = get_cr_part_ptr(&(select_node_ptr[n]), job_ptr->part_ptr);
-	if (p_ptr == NULL)
-		return rows;
-
-	for (i = 0; i < p_ptr->num_rows; i++) {
-		int offset = i * select_node_ptr[n].sockets;
-		for (j = 0; j < select_node_ptr[n].sockets; j++){
-			if (p_ptr->alloc_cores[offset+j]) {
-				rows++;
-				break;
-			}
-		}
-	}
-	return rows;
-}
-
-static int _load_arrays(struct node_cr_record *select_node_ptr,
-			struct job_record *job_ptr, bitstr_t *bitmap, 
-			int **a_rows, int **s_tasks, int **a_tasks, 
-			int **freq, bool test_only,
-			enum node_cr_state job_node_req)
-{
-	int i, index = 0, size = 32;
-	int *busy_rows, *shr_tasks, *all_tasks, *num_nodes;
-	
-	busy_rows = xmalloc (sizeof(int)*size); /* allocated rows */
-	shr_tasks = xmalloc (sizeof(int)*size); /* max free cpus */
-	all_tasks = xmalloc (sizeof(int)*size); /* all cpus */
-	num_nodes = xmalloc (sizeof(int)*size); /* number of nodes */
-	/* above arrays are all zero filled by xmalloc() */
-
-	for (i = 0; i < select_node_cnt; i++) {
-		if (bit_test(bitmap, i)) {
-			int rows;
-			uint16_t atasks, ptasks;
-			rows = _get_allocated_rows(select_node_ptr, job_ptr, 
-						   i, job_node_req);
-			/* false = use free rows (if available) */
-			atasks = _get_task_count(select_node_ptr, job_ptr, i, 
-						 test_only, false,
-						 job_node_req);
-			if (test_only) {
-				ptasks = atasks;
-			} else {
-				/* true = try using an already allocated row */
-				ptasks = _get_task_count(select_node_ptr, 
-							 job_ptr, i, test_only,
-							 true, job_node_req);
-			}
-			if (rows   != busy_rows[index] ||
-			    ptasks != shr_tasks[index] ||
-			    atasks != all_tasks[index]) {
-				if (num_nodes[index]) {
-					index++;
-					if (index >= size) {
-						size *= 2;
-						xrealloc(busy_rows,
-							 sizeof(int)*size);
-						xrealloc(shr_tasks,
-							 sizeof(int)*size);
-						xrealloc(all_tasks,
-							 sizeof(int)*size);
-						xrealloc(num_nodes,
-							 sizeof(int)*size);
-					}
-					num_nodes[index] = 0;
-				}
-				busy_rows[index] = rows;
-				shr_tasks[index] = ptasks;
-				all_tasks[index] = atasks;
-			}
-		} else {
-			if (busy_rows[index] != -1) {
-				if (num_nodes[index] > 0) {
-					index++;
-					if (index >= size) {
-						size *= 2;
-						xrealloc(busy_rows,
-							 sizeof(int)*size);
-						xrealloc(shr_tasks,
-							 sizeof(int)*size);
-						xrealloc(all_tasks,
-							 sizeof(int)*size);
-						xrealloc(num_nodes,
-							 sizeof(int)*size);
-					}
-					num_nodes[index] = 0;
-				}
-				busy_rows[index] = -1;
-				shr_tasks[index]  = -1;
-				all_tasks[index]  = -1;
-			}
-		}
-		num_nodes[index]++;
-	}
-	/* array_index becomes "array size" */
-	index++;
-
-#if (CR_DEBUG)
-	for (i = 0; i < index; i++) {
-		info("cons_res: i %d row %d ptasks %d atasks %d freq %d",
-		     i, busy_rows[i], shr_tasks[i], all_tasks[i], num_nodes[i]);
-	}
-#endif
-
-	*a_rows  = busy_rows;
-	*s_tasks = shr_tasks;
-	*a_tasks = all_tasks;
-	*freq    = num_nodes;
-
-	return index;
-}
-
 /*
  * select_p_job_test - Given a specification of scheduling requirements, 
  *	identify the nodes which "best" satisfy the request.
@@ -2249,32 +1209,55 @@ extern int select_p_job_test(struct job_record *job_ptr, bitstr_t * bitmap,
 			     uint32_t min_nodes, uint32_t max_nodes, 
 			     uint32_t req_nodes, int mode)
 {
-	enum node_cr_state job_node_req;
+	int rc;
+	uint16_t job_node_req;
+	bool debug_cpu_bind = false, debug_check = false;
 
 	xassert(bitmap);
 
+	if (!debug_check) {
+		debug_check = true;
+		if (slurm_get_debug_flags() & DEBUG_FLAG_CPU_BIND)
+			debug_cpu_bind = true;
+	}
+
 	if (!job_ptr->details)
 		return EINVAL;
 
 	if (!job_ptr->details->mc_ptr)
-		job_ptr->details->mc_ptr = create_default_mc();
+		job_ptr->details->mc_ptr = _create_default_mc();
 	job_node_req = _get_job_node_req(job_ptr);
 
-	debug3("cons_res: select_p_job_test: job %d node_req %d, mode %d",
+	debug3("cons_res: select_p_job_test: job %u node_req %u, mode %d",
 	       job_ptr->job_id, job_node_req, mode);
-	debug3("cons_res: select_p_job_test: min_n %u max_n %u req_n %u",
-	       min_nodes, max_nodes, req_nodes);
+	debug3("cons_res: select_p_job_test: min_n %u max_n %u req_n %u nb %u",
+	       min_nodes, max_nodes, req_nodes, bit_set_count(bitmap));
 
 #if (CR_DEBUG)
-	_dump_state(select_node_ptr);
+	_dump_state(select_part_record);
 #endif
 	if (mode == SELECT_MODE_WILL_RUN) {
-		return _will_run_test(job_ptr, bitmap, min_nodes, max_nodes,
-				      req_nodes, job_node_req);
+		rc = _will_run_test(job_ptr, bitmap, min_nodes, max_nodes,
+				    req_nodes, job_node_req);
+	} else {
+		rc = cr_job_test(job_ptr, bitmap, min_nodes, max_nodes,
+				 req_nodes, mode, cr_type, job_node_req,
+				 select_node_cnt, select_part_record,
+				 select_node_usage);
 	}
 
-	return _job_test(job_ptr, bitmap, min_nodes, max_nodes, req_nodes, 
-			 mode, job_node_req, select_node_ptr);
+#if (CR_DEBUG)
+	if (job_ptr->select_job)
+		log_select_job_res(job_ptr->job_id, job_ptr->select_job);
+	else
+		info("no select_job_res info for job %u", 
+		     job_ptr->job_id);
+#else
+	if (debug_cpu_bind && job_ptr->select_job)
+		log_select_job_res(job_ptr->job_id, job_ptr->select_job);
+#endif
+
+	return rc;
 }
 
 /*
@@ -2301,23 +1284,24 @@ extern int select_p_job_list_test(List req_list)
  *	each one. */
 static int _will_run_test(struct job_record *job_ptr, bitstr_t *bitmap,
 			uint32_t min_nodes, uint32_t max_nodes, 
-			uint32_t req_nodes, enum node_cr_state job_node_req)
+			uint32_t req_nodes, uint16_t job_node_req)
 {
-	struct node_cr_record *exp_node_cr;
+	struct part_res_record *future_part;
+	struct node_use_record *future_usage;
 	struct job_record *tmp_job_ptr, **tmp_job_pptr;
-	struct select_cr_job *job;
 	List cr_job_list;
 	ListIterator job_iterator;
 	bitstr_t *orig_map;
 	int rc = SLURM_ERROR;
-	uint16_t saved_state;
 	time_t now = time(NULL);
 
 	orig_map = bit_copy(bitmap);
 
 	/* Try to run with currently available nodes */
-	rc = _job_test(job_ptr, bitmap, min_nodes, max_nodes, req_nodes, 
-		       SELECT_MODE_WILL_RUN, job_node_req, select_node_ptr);
+	rc = cr_job_test(job_ptr, bitmap, min_nodes, max_nodes, req_nodes, 
+			 SELECT_MODE_WILL_RUN, cr_type, job_node_req,
+			 select_node_cnt, select_part_record, 
+			 select_node_usage);
 	if (rc == SLURM_SUCCESS) {
 		bit_free(orig_map);
 		job_ptr->start_time = time(NULL);
@@ -2326,14 +1310,21 @@ static int _will_run_test(struct job_record *job_ptr, bitstr_t *bitmap,
 
 	/* Job is still pending. Simulate termination of jobs one at a time 
 	 * to determine when and where the job can start. */
-	exp_node_cr = _dup_node_cr(select_node_ptr, select_node_cnt);
-	if (exp_node_cr == NULL) {
+
+	future_part = _dup_part_data(select_part_record);
+	if (future_part == NULL) {
+		bit_free(orig_map);
+		return SLURM_ERROR;
+	}
+	future_usage = _dup_node_usage(select_node_usage);
+	if (future_usage == NULL) {
+		_destroy_part_data(future_part);
 		bit_free(orig_map);
 		return SLURM_ERROR;
 	}
 
 	/* Build list of running jobs */
-	cr_job_list = list_create(_cr_job_list_del);
+	cr_job_list = list_create(NULL);
 	job_iterator = list_iterator_create(job_list);
 	while ((tmp_job_ptr = (struct job_record *) list_next(job_iterator))) {
 		if (tmp_job_ptr->job_state != JOB_RUNNING)
@@ -2354,23 +1345,15 @@ static int _will_run_test(struct job_record *job_ptr, bitstr_t *bitmap,
 	job_iterator = list_iterator_create(cr_job_list);
 	while ((tmp_job_pptr = (struct job_record **) list_next(job_iterator))) {
 		tmp_job_ptr = *tmp_job_pptr;
-		job = list_find_first(select_cr_job_list, _find_job_by_id,
-				      &tmp_job_ptr->job_id);
-		if (!job) {
-			error("cons_res: could not find job %u", 
-			      tmp_job_ptr->job_id);
-			continue;
-		}
-		saved_state = job->state;
-		_rm_job_from_nodes(exp_node_cr, job, "_will_run_test", 1);
-		job->state = saved_state;
+		_rm_job_from_res(future_part, future_usage, tmp_job_ptr, 0);
 		bit_or(bitmap, orig_map);
-		rc = _job_test(job_ptr, bitmap, min_nodes, max_nodes, 
-			       req_nodes, SELECT_MODE_WILL_RUN, job_node_req,
-			       exp_node_cr);
+		rc = cr_job_test(job_ptr, bitmap, min_nodes, max_nodes, 
+				 req_nodes, SELECT_MODE_WILL_RUN, cr_type,
+				 job_node_req, select_node_cnt, future_part,
+				 future_usage);
 		if (rc == SLURM_SUCCESS) {
 			if (tmp_job_ptr->end_time <= now)
-				 job_ptr->start_time = now + 1;
+				job_ptr->start_time = now + 1;
 			else
 				job_ptr->start_time = tmp_job_ptr->end_time;
 			break;
@@ -2378,339 +1361,12 @@ static int _will_run_test(struct job_record *job_ptr, bitstr_t *bitmap,
 	}
 	list_iterator_destroy(job_iterator);
 	list_destroy(cr_job_list);
-	_xfree_select_nodes(exp_node_cr, select_node_cnt); 
+	_destroy_part_data(future_part);
+	_destroy_node_data(future_usage, NULL);
 	bit_free(orig_map);
 	return rc;
 }
 
-/* _job_test - does most of the real work for select_p_job_test(), which 
- *	pretty much just handles load-leveling and max_share logic */
-static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
-			uint32_t min_nodes, uint32_t max_nodes, 
-			uint32_t req_nodes, int mode, 
-			enum node_cr_state job_node_req,
-			struct node_cr_record *select_node_ptr)
-{
-	int a, f, i, j, k, error_code, ll; /* ll = layout array index */
-	struct multi_core_data *mc_ptr = NULL;
-	static struct select_cr_job *job;
-	uint16_t * layout_ptr = NULL;
-	int  array_size;
-	int *busy_rows, *sh_tasks, *al_tasks, *freq;
-	bitstr_t *origmap, *reqmap = NULL;
-	int row, rows, try;
-	bool test_only;
-	uint32_t save_mem = 0;
-
-	layout_ptr = job_ptr->details->req_node_layout;
-	mc_ptr = job_ptr->details->mc_ptr;
-	reqmap = job_ptr->details->req_node_bitmap;
-
-	/* check node_state and update bitmap as necessary */
-	if (mode == SELECT_MODE_TEST_ONLY) {
-		test_only = true;
-		save_mem = job_ptr->details->job_min_memory;
-		job_ptr->details->job_min_memory = 0;
-	} else	/* SELECT_MODE_RUN_NOW || SELECT_MODE_WILL_RUN  */ 
-		test_only = false;
-
-	if (!test_only) {
-		error_code = _verify_node_state(select_node_ptr, job_ptr, 
-						bitmap, job_node_req);
-		if (error_code != SLURM_SUCCESS)
-			return error_code;
-	}
-
-	/* This is the case if -O/--overcommit  is true */ 
-	if (job_ptr->num_procs == job_ptr->details->min_nodes) {
-		job_ptr->num_procs *= MAX(1, mc_ptr->min_threads);
-		job_ptr->num_procs *= MAX(1, mc_ptr->min_cores);
-		job_ptr->num_procs *= MAX(1, mc_ptr->min_sockets);
-	}
-
-	/* compute condensed arrays of node allocation data */
-	array_size = _load_arrays(select_node_ptr, job_ptr, bitmap, &busy_rows,
-				  &sh_tasks, &al_tasks, &freq, test_only, 
-				  job_node_req);
-
-	if (test_only) {
-        	/* try with all nodes and all possible cpus */
-		error_code = _select_nodes(job_ptr, bitmap, min_nodes,
-					   max_nodes, req_nodes, al_tasks, freq,
-					   array_size);
-		xfree(busy_rows);
-		xfree(sh_tasks);
-		xfree(al_tasks);
-		xfree(freq);
-		if (save_mem)
-			job_ptr->details->job_min_memory = save_mem;
-		return error_code;
-	}
-
-	origmap = bit_copy(bitmap);
-	if (origmap == NULL)
-		fatal("bit_copy malloc failure");
-
-	error_code = SLURM_ERROR;
-	rows = job_ptr->part_ptr->max_share & ~SHARED_FORCE;
-	rows = MAX(1, rows);	/* max_share == 0 for EXCLUSIVE */
-	for (row = 1; row <= rows; row++) {
-
-		/*
-		 * first try : try "as is"
-		 * second try: only add a row to nodes with no free cpus
-		 * third try : add a row to nodes with some alloc cpus
-		 */
-		for (try = 0; try < 3; try++) {
-			bit_or(bitmap, origmap);
-
-			debug3("cons_res: cur row = %d, try = %d", row, try);
-
-			for (i = 0, f = 0; i < array_size; i++) {
-
-				/* Step 1:
-				 * remove nodes from bitmap (unless required)
-				 * who's busy_rows value is bigger than 'row'.
-				 * Why? to enforce "least-loaded" over
-				 *      "contiguous" */
-				if ((busy_rows[i] > row) ||
-				    (busy_rows[i] == row && sh_tasks[i] == 0)) {
-					for (j = f; j < f+freq[i]; j++) {
-						if (reqmap &&
-						    bit_test(reqmap, j))
-							continue;
-						bit_clear(bitmap, j);
-					}
-				}
-				f += freq[i];
-
-				if (try == 0)
-					continue;
-				/* Step 2:
-				 * set sh_tasks = al_tasks for nodes who's
-				 *      busy_rows value is < 'row'.
-				 * Why? to select a new row for these
-				 *      nodes when appropriate */
-				if ((busy_rows[i] == -1) || 
-				    (busy_rows[i] >= row))
-					continue;
-				if (sh_tasks[i] == al_tasks[i])
-					continue;
-				if ((try == 1) && (sh_tasks[i] != 0))
-					continue;
-				sh_tasks[i] = al_tasks[i];
-			}
-			if (bit_set_count(bitmap) < min_nodes)
-				break;
-
-#if (CR_DEBUG)
-			for (i = 0; i < array_size; i++) {
-				info("cons_res: try:%d i:%d busy_rows:%d "
-				     "sh_tasks:%d al_tasks:%d freq:%d",
-				     try, i, busy_rows[i], sh_tasks[i],
-				     al_tasks[i], freq[i]);
-			}
-#endif
-
-			if (row > 1) {
-				/* We need to share resources. 
-				 * Try to find suitable job to share nodes with. */
-
-				/* FIXME: To be added. There is some simple logic 
-				 * to do this in select/linear.c:_find_job_mate(), 
-				 * but the data structures here are very different */
-			}
-
-			error_code = _select_nodes(job_ptr, bitmap, min_nodes,
-						   max_nodes, req_nodes,
-						   sh_tasks, freq, array_size);
-			if (error_code == SLURM_SUCCESS)
-				break;
-		}
-		if (error_code == SLURM_SUCCESS)
-			break;
-	}
-
-	bit_free(origmap);
-
-	if ((mode != SELECT_MODE_WILL_RUN) && (job_ptr->part_ptr == NULL))
-		error_code = EINVAL;
-	if ((error_code == SLURM_SUCCESS) && (mode == SELECT_MODE_WILL_RUN)) {
-		if (job_ptr->details->shared == 0) {
-			uint16_t procs;
-			job_ptr->total_procs = 0;
-			for (i = 0; i < select_node_cnt; i++) {
-				if (!bit_test(bitmap, i))
-					continue;
-				procs = select_node_ptr[i].cpus;
-				job_ptr->total_procs += procs;
-			}
-		} else {
-			job_ptr->total_procs = job_ptr->num_procs;
-			if (job_ptr->details->cpus_per_task &&
-			    (job_ptr->details->cpus_per_task != 
-			     (uint16_t) NO_VAL)) {
-				job_ptr->total_procs *= job_ptr->details->
-							cpus_per_task;
-			}
-		}
-	}
-	if ((error_code != SLURM_SUCCESS) || (mode != SELECT_MODE_RUN_NOW)) {
-		xfree(busy_rows);
-		xfree(sh_tasks);
-		xfree(al_tasks);
-		xfree(freq);
-		return error_code;
-	}
-	
-	/* allocate the job and distribute the tasks appropriately */
-	job = xmalloc(sizeof(struct select_cr_job));
-	job->job_ptr = job_ptr;
-	job->job_id = job_ptr->job_id;
-	job->nhosts = bit_set_count(bitmap);
-	job->nprocs = MAX(job_ptr->num_procs, job->nhosts);
-	job->node_req  = job_node_req;
-
-	job->node_bitmap = bit_copy(bitmap);
-	if (job->node_bitmap == NULL)
-		fatal("bit_copy malloc failure");
-
-	job->cpus          = (uint16_t *) xmalloc(job->nhosts * sizeof(uint16_t));
-	job->alloc_cpus    = (uint16_t *) xmalloc(job->nhosts * sizeof(uint16_t));
-	job->node_offset   = (uint16_t *) xmalloc(job->nhosts * sizeof(uint16_t));
-	job->alloc_memory  = (uint32_t *) xmalloc(job->nhosts * sizeof(uint32_t));
-
-	if ((cr_type == CR_CORE)   || (cr_type == CR_CORE_MEMORY) ||
-	    (cr_type == CR_SOCKET) || (cr_type == CR_SOCKET_MEMORY)) {
-		job->num_sockets   = (uint16_t *)  xmalloc(job->nhosts * 
-							   sizeof(uint16_t));
-		job->alloc_cores   = (uint16_t **) xmalloc(job->nhosts * 
-							   sizeof(uint16_t *));
-		j = 0;
-		for (i = 0; i < select_node_cnt; i++) {
-			if (!bit_test(job->node_bitmap, i))
-				continue;
-			job->num_sockets[j] = select_node_ptr[i].sockets;
-			job->alloc_cores[j] = (uint16_t *) xmalloc(
-				job->num_sockets[j] * sizeof(uint16_t));
-			j++;
-		}
-	}
-
-	j = 0;
-	a = 0;
-	f = 0;
-	row = 0; /* total up all available cpus for --overcommit scenarios */
-	for (i = 0, ll = -1; i < node_record_count; i++, f++) {
-		if (f >= freq[a]) {
-			f = 0;
-			a++;
-		}
-		if (layout_ptr
-		    && bit_test(job_ptr->details->req_node_bitmap, i)) {
-			ll++;
-		}
-		if (bit_test(bitmap, i) == 0)
-			continue;
-		if (j >= job->nhosts) {
-			error("select_cons_res: job nhosts too small\n");
-			break;
-		}
-		job->cpus[j] = sh_tasks[a];
-		row += sh_tasks[a];
-		if (layout_ptr
-		    && bit_test(job_ptr->details->req_node_bitmap, i)) {
-			job->cpus[j] = MIN(job->cpus[j], layout_ptr[ll]);
-		} else if (layout_ptr) {
-			job->cpus[j] = 0;
-		}
-		job->alloc_cpus[j] = 0;
-		if ((cr_type == CR_CORE) || (cr_type == CR_CORE_MEMORY)||
-		    (cr_type == CR_SOCKET) || (cr_type == CR_SOCKET_MEMORY)) {
-			_chk_resize_job(job, j, job->num_sockets[j]);
-			for (k = 0; k < job->num_sockets[j]; k++)
-				job->alloc_cores[j][k] = 0;
-		}
-		j++;
-	}
-
-	xfree(busy_rows);
-	xfree(sh_tasks);
-	xfree(al_tasks);
-	xfree(freq);
-
-	/* When 'srun --overcommit' is used, nprocs is set to a minimum value
-	 * in order to allocate the appropriate number of nodes based on the
-	 * job request.
-	 * For cons_res, all available logical processors will be allocated on
-	 * each allocated node in order to accommodate the overcommit request.
-	 */
-	if (job_ptr->details->overcommit)
-		job->nprocs = MIN(row, job_ptr->details->num_tasks);
-
-	if (job_ptr->details->shared == 0) {
-		/* Nodes need to be allocated in dedicated
-		   mode. User has specified the --exclusive switch */
-		error_code = cr_exclusive_dist(job, cr_type);
-	} else {
-		/* Determine the number of logical processors
-		 * per node needed for this job.
-		 * Make sure below matches the layouts in
-		 * lllp_distribution in
-		 * plugins/task/affinity/dist_task.c */
-		switch(job_ptr->details->task_dist) {
-		case SLURM_DIST_BLOCK_BLOCK:
-		case SLURM_DIST_CYCLIC_BLOCK:
-			error_code = cr_dist(job, 0, cr_type); 
-			break;
-		case SLURM_DIST_ARBITRARY:
-		case SLURM_DIST_BLOCK:
-		case SLURM_DIST_CYCLIC:				
-		case SLURM_DIST_BLOCK_CYCLIC:
-		case SLURM_DIST_CYCLIC_CYCLIC:
-		case SLURM_DIST_UNKNOWN:
-			error_code = cr_dist(job, 1, cr_type); 
-			break;
-		case SLURM_DIST_PLANE:
-			error_code = cr_plane_dist(job, mc_ptr->plane_size, cr_type); 
-			break;
-		default:
-			error("select/cons_res: invalid dist_type");
-			error_code = SLURM_ERROR;
-			break;
-		}
-	}
-	if (error_code != SLURM_SUCCESS) {
-		_xfree_select_cr_job(job);
-		return error_code;
-	}
-
-	if (job_ptr->details->job_min_memory &&
-	    ((cr_type == CR_CORE_MEMORY) || (cr_type == CR_CPU_MEMORY) ||
-	     (cr_type == CR_MEMORY) || (cr_type == CR_SOCKET_MEMORY))) {
-		j = 0;
-		for (i = 0; i < node_record_count; i++) {
-			if (bit_test(bitmap, i) == 0)
-				continue;
-			if (job_ptr->details->job_min_memory & MEM_PER_CPU) {
-				job->alloc_memory[j] = job_ptr->details->
-						       job_min_memory &
-						       (~MEM_PER_CPU);
-				job->alloc_memory[j] *= job->alloc_cpus[j];
-			} else {
-				job->alloc_memory[j] = job_ptr->details->
-						       job_min_memory;
-			}
-			j++;
-		}
-	}
-
-	_append_to_job_list(job);
-	last_cr_update_time = time(NULL);
-
-	return error_code;
-}
-
 extern int select_p_job_begin(struct job_record *job_ptr)
 {
 	return SLURM_SUCCESS;
@@ -2723,40 +1379,10 @@ extern int select_p_job_ready(struct job_record *job_ptr)
 
 extern int select_p_job_fini(struct job_record *job_ptr)
 {
-	struct select_cr_job *job = NULL;
-	ListIterator iterator;
-
 	xassert(job_ptr);
 	xassert(job_ptr->magic == JOB_MAGIC);
-
-	if (list_count(select_cr_job_list) == 0)
-		return SLURM_SUCCESS;
-
-	iterator = list_iterator_create(select_cr_job_list);
-	while ((job = (struct select_cr_job *) list_next(iterator))) {
-		if (job->job_id == job_ptr->job_id)
-			break;
-	}
-	if (!job) {
-		error("select_p_job_fini: could not find data for job %d",
-			job_ptr->job_id);
-		list_iterator_destroy(iterator);
-		return SLURM_ERROR;
-	}
 	
-	_rm_job_from_nodes(select_node_ptr, job, "select_p_job_fini", 1);
-
-	slurm_mutex_lock(&cr_mutex);
-	list_remove(iterator);
-	slurm_mutex_unlock(&cr_mutex);
-	_xfree_select_cr_job(job);
-	list_iterator_destroy(iterator);
-
-	debug3("cons_res: select_p_job_fini Job_id %u: list_count: %d",
-		job_ptr->job_id, list_count(select_cr_job_list));
-
-	_verify_select_job_list(job_ptr->job_id);
-	last_cr_update_time = time(NULL);
+	_rm_job_from_res(select_part_record, select_node_usage, job_ptr, 0);
 
 	return SLURM_SUCCESS;
 }
@@ -2766,61 +1392,20 @@ extern int select_p_job_fini(struct job_record *job_ptr)
  * This sum is compared with the partition's Shared parameter */
 extern int select_p_job_suspend(struct job_record *job_ptr)
 {
-	struct select_cr_job *job;
-	int rc;
- 
 	xassert(job_ptr);
-	xassert(select_cr_job_list);
 
-	job = list_find_first(select_cr_job_list, _find_job_by_id,
-			      &job_ptr->job_id);
-	if (!job)
-		return ESLURM_INVALID_JOB_ID;
-
-	rc = _rm_job_from_nodes(select_node_ptr, job, 
-				"select_p_job_suspend", 0);
-	return SLURM_SUCCESS;
+	return _rm_job_from_res(select_part_record, select_node_usage,
+				job_ptr, 2);
 }
 
 /* See NOTE with select_p_job_suspend above */
 extern int select_p_job_resume(struct job_record *job_ptr)
 {
-	struct select_cr_job *job;
-	int rc;
-
 	xassert(job_ptr);
-	xassert(select_cr_job_list);
-
-	job = list_find_first(select_cr_job_list, _find_job_by_id,
-			      &job_ptr->job_id);
-	if (!job)
-		return ESLURM_INVALID_JOB_ID;
 	
-	rc = _add_job_to_nodes(job, "select_p_job_resume", 0);
-	return SLURM_SUCCESS;
+	return _add_job_to_res(job_ptr, 2);
 }
 
-extern uint16_t select_p_get_job_cores(uint32_t job_id, int alloc_index, int s)
-{
-	struct select_cr_job *job = list_find_first(select_cr_job_list,
-						    _find_job_by_id, &job_id);
-	if (!job || alloc_index >= job->nhosts)
-		return 0;
-	if (cr_type == CR_CORE   || cr_type == CR_CORE_MEMORY ||
-	    cr_type == CR_SOCKET || cr_type == CR_SOCKET_MEMORY) {
-		if (job->num_sockets == NULL || job->alloc_cores == NULL)
-			return 0;
-		if (s >= job->num_sockets[alloc_index]) 
-			return 0;
-
-		return job->alloc_cores[alloc_index][s];
-	}
-	/* else return the total cpu count for the given node */
-	if (job->alloc_cpus == NULL)
-		return 0;
-
-	return job->alloc_cpus[alloc_index];
-}
 
 extern int select_p_pack_node_info(time_t last_query_time,
 				   Buf * buffer_ptr)
@@ -2829,100 +1414,46 @@ extern int select_p_pack_node_info(time_t last_query_time,
 	return SLURM_ERROR;
 }
 
-extern int select_p_get_extra_jobinfo(struct node_record *node_ptr,
-				      struct job_record *job_ptr,
-				      enum select_data_info cr_info,
-				      void *data)
-{
-	int rc = SLURM_SUCCESS, i, index, node_offset, node_inx;
-	struct select_cr_job *job;
-	struct node_cr_record *this_cr_node;
-	uint16_t *tmp_16 = (uint16_t *) data;
-
-	xassert(job_ptr);
-	xassert(job_ptr->magic == JOB_MAGIC);
-	xassert(node_ptr);
-
-	switch (cr_info) {
-	case SELECT_AVAIL_CPUS:
-		*tmp_16 = 0;
-		job = list_find_first(select_cr_job_list, _find_job_by_id, 
-				      &job_ptr->job_id);
-		if (job == NULL) {
-			error("cons_res: job %u not active", job_ptr->job_id);
-			break;
-		}
-
-		node_offset = -1;
-		node_inx = node_ptr - node_record_table_ptr;
-		for (i = 0; i < node_record_count; i++) {
-			if (bit_test(job->node_bitmap, i) == 0)
-				continue;
-			node_offset++;
-			if (i != node_inx)
-				continue;
-			/* Usable and "allocated" resources for this 
-			 * given job for a specific node --> based 
-			 * on the output from _cr_dist */
-			switch(cr_type) {
-			case CR_MEMORY:
-				index = node_ptr - node_record_table_ptr;
-				this_cr_node = select_node_ptr + index;
-				*tmp_16 = this_cr_node->cpus;
-				break;
-			case CR_SOCKET:
-			case CR_SOCKET_MEMORY:
-			case CR_CORE: 
-			case CR_CORE_MEMORY: 
-			case CR_CPU:
-			case CR_CPU_MEMORY:
-			default:
-				*tmp_16 = job->alloc_cpus[node_offset];
-				break;
-			}
-			break;
-		}
-		if (i >= node_record_count) {
-			error("cons_res could not find %s", node_ptr->name); 
-			rc = SLURM_ERROR;
-		}
-		break;
-	default:
-		error("select_g_get_extra_jobinfo cr_info %d invalid", cr_info);
-		rc = SLURM_ERROR;
-		break;
-	}
-	
-	return rc;
-}
 
 extern int select_p_get_select_nodeinfo(struct node_record *node_ptr,
 					enum select_data_info dinfo,
 					void *data)
 {
-	int index, i, j, rc = SLURM_SUCCESS;
-	struct node_cr_record *this_cr_node;
-	struct part_cr_record *p_ptr;
-	uint16_t *tmp_16;
+	uint32_t n, i, c, start, end;
+	struct part_res_record *p_ptr;
+	uint16_t tmp, *tmp_16;
 
 	xassert(node_ptr);
 
 	switch (dinfo) {
-	case SELECT_ALLOC_CPUS: 
+	case SELECT_ALLOC_CPUS:
 		tmp_16 = (uint16_t *) data;
 		*tmp_16 = 0;
-		index = node_ptr - node_record_table_ptr;
-	        this_cr_node = select_node_ptr + index;
 
 		/* determine the highest number of allocated cores from */
 		/* all rows of all partitions */
-		for (p_ptr = this_cr_node->parts; p_ptr; p_ptr = p_ptr->next) {
-			i = 0;
-			for (j = 0; j < p_ptr->num_rows; j++) {
-				uint16_t tmp = 0;
-				for (; i < this_cr_node->sockets; i++)
-					tmp += p_ptr->alloc_cores[i] *
-					       this_cr_node->threads;
+		for (n = 0; n < node_record_count; n++) {
+			if (&(node_record_table_ptr[n]) == node_ptr)
+				break;
+		}
+		if (n >= node_record_count) {
+			/* did not find the node */
+			return SLURM_ERROR;
+		}
+		start = cr_get_coremap_offset(n);
+		end = cr_get_coremap_offset(n+1);
+		for (p_ptr = select_part_record; p_ptr; p_ptr = p_ptr->next) {
+			if (!p_ptr->row)
+				continue;
+			for (i = 0; i < p_ptr->num_rows; i++) {
+				if (!p_ptr->row[i].row_bitmap)
+					continue;
+				tmp = 0;
+				for (c = start; c < end; c++) {
+					if (bit_test(p_ptr->row[i].row_bitmap,
+						     c))
+						tmp++;
+				}
 				if (tmp > *tmp_16)
 					*tmp_16 = tmp;
 			}
@@ -2930,31 +1461,23 @@ extern int select_p_get_select_nodeinfo(struct node_record *node_ptr,
 		break;
 	default:
 		error("select_g_get_select_nodeinfo info %d invalid", dinfo);
-		rc = SLURM_ERROR;
+		return SLURM_ERROR;
 		break;
 	}
-	return rc;
+	return SLURM_SUCCESS;
 }
 
+
 extern int select_p_update_nodeinfo(struct job_record *job_ptr)
 {
-	int rc = SLURM_SUCCESS;
-	struct select_cr_job *job;
-
 	xassert(job_ptr);
 	xassert(job_ptr->magic == JOB_MAGIC);
 
 	if ((job_ptr->job_state != JOB_RUNNING)
 	&&  (job_ptr->job_state != JOB_SUSPENDED))
 		return SLURM_SUCCESS;
-
-	job = list_find_first(select_cr_job_list, _find_job_by_id,
-			      &job_ptr->job_id);
-	if (!job)
-		return SLURM_SUCCESS;
 	
-	rc = _add_job_to_nodes(job, "select_p_update_nodeinfo", 0);
-	return rc;
+	return _add_job_to_res(job_ptr, 0);
 }
 
 extern int select_p_update_block (update_part_msg_t *part_desc_ptr)
@@ -2967,8 +1490,119 @@ extern int select_p_update_sub_node (update_part_msg_t *part_desc_ptr)
 	return SLURM_SUCCESS;
 }
 
+
+/* Helper function for _synchronize_bitmap().  Check
+ * if the given node has at least one available CPU */
+static uint16_t _is_node_avail(struct part_res_record *p_ptr, uint32_t node_i)
+{
+	uint32_t i, r, cpu_begin, cpu_end;
+
+	cpu_begin = cr_get_coremap_offset(node_i);
+	cpu_end   = cr_get_coremap_offset(node_i+1);
+	
+	if (select_node_usage[node_i].node_state >= NODE_CR_RESERVED) {
+		if (!cr_priority_selection_enabled())
+			return (uint16_t) 0;
+		/* cr_priority_selection has been enabled:
+		 * check to see if the existing job that reserved
+		 * this node is in a partition with a priority that
+		 * is equal-to or greater-than this partition. If it
+		 * is, then this node is NOT available. Otherwise
+		 * this node is available.
+		 */
+		struct part_res_record *s_ptr;
+		for (s_ptr = select_part_record; s_ptr; s_ptr = s_ptr->next) {
+			if (s_ptr->priority < p_ptr->priority)
+				continue;
+			if (!s_ptr->row || !s_ptr->row[0].row_bitmap)
+				continue;
+			for (i = cpu_begin; i < cpu_end; i++) {
+				if (bit_test(s_ptr->row[0].row_bitmap, i))
+					return (uint16_t) 0;
+			}
+		}
+		return (uint16_t) 1;
+	}
+	if (select_node_usage[node_i].node_state >= NODE_CR_ONE_ROW) {
+		/* An existing job has requested that it's CPUs
+		 * NOT be shared, but any other CPUs on the same
+		 * node can be used by other jobs with the same
+		 * CPU restriction.
+		 * Check whether or not there are free CPUs on this
+		 * node in the given partition.
+		 */
+		if (!p_ptr->row || !p_ptr->row[0].row_bitmap)
+			return (uint16_t) 1;
+		for (i = cpu_begin; i < cpu_end; i++) {
+			if (!bit_test(p_ptr->row[0].row_bitmap, i))
+				return (uint16_t) 1;
+		}
+	} else {
+		/* check the core_bitmap in all rows */
+		if (!p_ptr->row)
+			return (uint16_t) 1;
+		for (r = 0; r < p_ptr->num_rows; r++) {
+			if (!p_ptr->row[r].row_bitmap)
+				return (uint16_t) 1;
+			for (i = cpu_begin; i < cpu_end; i++) {
+				if (!bit_test(p_ptr->row[r].row_bitmap, i))
+					return (uint16_t) 1;
+			}
+		}
+	}
+	return (uint16_t) 0;
+}
+
+
+/* Worker function for select_p_get_info_from_plugin() */
+static int _synchronize_bitmaps(struct job_record *job_ptr,
+				bitstr_t ** partially_idle_bitmap)
+{
+	int size, i, idlecpus = bit_set_count(avail_node_bitmap);
+	struct part_res_record *p_ptr;
+	size = bit_size(avail_node_bitmap);
+	bitstr_t *bitmap = bit_alloc(size);
+	if (bitmap == NULL)
+		return SLURM_ERROR;
+
+	debug3("cons_res: synch_bm: avail %d of %d set, idle %d of %d set",
+	       idlecpus, size, bit_set_count(idle_node_bitmap), size);
+
+	if (!job_ptr)
+		fatal("cons_res: error: don't know what job I'm sync'ing");
+		
+	for (p_ptr = select_part_record; p_ptr; p_ptr = p_ptr->next) {
+		if (job_ptr && strcmp(p_ptr->name,job_ptr->part_ptr->name) == 0)
+			break;
+	}
+
+	for (i = 0; i < select_node_cnt; i++) {
+		if (bit_test(avail_node_bitmap, i) == 0)
+			continue;
+
+		if (bit_test(idle_node_bitmap, i) == 1) {
+			bit_set(bitmap, i);
+			continue;
+		}
+		
+		if(!p_ptr || _is_node_avail(p_ptr, i))
+			bit_set(bitmap, i);
+	}
+	idlecpus = bit_set_count(bitmap);
+	if (p_ptr)
+		debug3("cons_res: found %d partially idle nodes in part %s",
+			idlecpus, p_ptr->name);
+	else
+		debug3("cons_res: found %d partially idle nodes",
+			idlecpus);
+
+	*partially_idle_bitmap = bitmap;
+	return SLURM_SUCCESS;
+}
+
+
 extern int select_p_get_info_from_plugin(enum select_data_info info,
-					 void *data)
+					 struct job_record *job_ptr, void *data)
 {
 	int rc = SLURM_SUCCESS;
 
@@ -2978,7 +1612,7 @@ extern int select_p_get_info_from_plugin(enum select_data_info info,
 		bitstr_t **bitmap = (bitstr_t **) data;
 		bitstr_t *tmp_bitmap = NULL;
 		
-		rc = _synchronize_bitmaps(&tmp_bitmap);
+		rc = _synchronize_bitmaps(job_ptr, &tmp_bitmap);
 		if (rc != SLURM_SUCCESS) {
 			FREE_NULL_BITMAP(tmp_bitmap);
 			return rc;
@@ -3017,203 +1651,33 @@ extern int select_p_alter_node_cnt(enum select_node_cnt type, void *data)
 extern int select_p_reconfigure(void)
 {
 	ListIterator job_iterator;
-	struct select_cr_job *job;
 	struct job_record *job_ptr;
-	int rc, suspend;
+	int rc = SLURM_SUCCESS;
 
 	info("cons_res: select_p_reconfigure");
-	select_fast_schedule = slurm_get_fast_schedule();
 
-	/* Refresh the select_node_ptr global array in case nodes
-	 * have been added or removed. This procedure will clear all
-	 * partition information and all allocated resource usage.
-	 */
+	/* Rebuild the global data structures */
 	rc = select_p_node_init(node_record_table_ptr, node_record_count);
-
-	/* reload all of the allocated resource usage from job data */
-	if (select_cr_job_list == NULL)
-	    	return SLURM_SUCCESS;
-
-	slurm_mutex_lock(&cr_mutex);
-	job_iterator = list_iterator_create(select_cr_job_list);
-	while ((job = (struct select_cr_job *) list_next(job_iterator))) {
-		suspend = 0;
-		job_ptr = find_job_record(job->job_id);
-		if ((job_ptr == NULL) ||
-		    (job_ptr->part_ptr == NULL) ||
-		    ((job_ptr->job_state != JOB_RUNNING) &&
-		     (job_ptr->job_state != JOB_SUSPENDED))) {
-			list_remove(job_iterator);
-			error("cons_res: select_p_reconfigure: removing "
-				"nonexistent/invalid job %u", job->job_id);
-			_xfree_select_cr_job(job);
-			continue;
-		}
-
-		if (job_ptr->job_state == JOB_SUSPENDED)
-			suspend = 1;
-		if ((job->state & CR_JOB_ALLOCATED_MEM) ||
-		    (job->state & CR_JOB_ALLOCATED_CPUS)) {
-			job->state = 0;
-			_add_job_to_nodes(job, "select_p_reconfigure", suspend);
-			/* ignore any errors. partition and/or node config 
-			 * may have changed while jobs remain running */
+	if (rc != SLURM_SUCCESS)
+		return rc;
+	
+	/* reload job data */
+	job_iterator = list_iterator_create(job_list);
+	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
+		if (job_ptr->job_state == JOB_RUNNING) {
+			/* add the job */
+			_add_job_to_res(job_ptr, 0);
+		} else if (job_ptr->job_state == JOB_SUSPENDED) {
+			/* add the job in a suspended state */
+			_add_job_to_res(job_ptr, 2);
 		}
 	}
 	list_iterator_destroy(job_iterator);
-	slurm_mutex_unlock(&cr_mutex);
-	last_cr_update_time = time(NULL);
-
-	return SLURM_SUCCESS;
-}
-
-extern struct multi_core_data * create_default_mc(void)
-{
-	struct multi_core_data *mc_ptr;
-	mc_ptr = xmalloc(sizeof(struct multi_core_data));
-	mc_ptr->min_sockets = 1;
-	mc_ptr->max_sockets = 0xffff;
-	mc_ptr->min_cores   = 1;
-	mc_ptr->max_cores   = 0xffff;
-	mc_ptr->min_threads = 1;
-	mc_ptr->max_threads = 0xffff;
-/*	mc_ptr is initialized to zero by xmalloc*/
-/*	mc_ptr->ntasks_per_socket = 0; */
-/*	mc_ptr->ntasks_per_core   = 0; */
-/*	mc_ptr->plane_size        = 0; */
-	return mc_ptr;
-}
-
-extern int select_p_step_begin(struct step_record *step_ptr)
-{
-	slurm_step_layout_t *step_layout = step_ptr->step_layout;
-	struct select_cr_job *job;
-	struct node_cr_record *this_node;
-	int job_node_inx, step_node_inx, host_index;
-	uint32_t avail_mem, step_mem;
- 
-	xassert(select_cr_job_list);
-	xassert(step_ptr->job_ptr);
-	xassert(step_ptr->job_ptr->details);
-	xassert(step_ptr->step_node_bitmap);
-
-	if (step_layout == NULL)
-		return SLURM_SUCCESS;	/* batch script */
-	if (step_ptr->job_ptr->details->job_min_memory)
-		return SLURM_SUCCESS;
-	if ((cr_type != CR_CORE_MEMORY) && (cr_type != CR_CPU_MEMORY) &&
-	    (cr_type != CR_MEMORY) && (cr_type != CR_SOCKET_MEMORY))
-		return SLURM_SUCCESS;
-
-	job = list_find_first(select_cr_job_list, _find_job_by_id,
-			      &step_ptr->job_ptr->job_id);
-	if (!job) {
-		error("select_p_step_begin: could not find step %u.%u",
-		      step_ptr->job_ptr->job_id, step_ptr->step_id);
-		return ESLURM_INVALID_JOB_ID;
-	}
-
-	/* test if there is sufficient memory */
-	step_node_inx = -1;
-	for (host_index = 0; host_index < select_node_cnt; host_index++) {
-		if (bit_test(step_ptr->step_node_bitmap, host_index) == 0)
-			continue;
-		step_node_inx++;
-
-		this_node = &select_node_ptr[host_index];
-		step_mem = step_layout->tasks[step_node_inx] * 
-			   step_ptr->mem_per_task;
-		avail_mem = select_node_ptr[host_index].real_memory;
-		if ((this_node->alloc_memory + step_mem) > avail_mem)
-			return SLURM_ERROR;	/* no room */
-	}
-
-	/* reserve the memory */
-	job_node_inx = -1;
-	step_node_inx = -1;
-	for (host_index = 0; host_index < select_node_cnt; host_index++) {
-		if (bit_test(job->node_bitmap, host_index) == 0)
-			continue;
-		job_node_inx++;
-		if (bit_test(step_ptr->step_node_bitmap, host_index) == 0)
-			continue;
-		step_node_inx++;
 
-		this_node = &select_node_ptr[host_index];
-		step_mem = step_layout->tasks[step_node_inx] * 
-			   step_ptr->mem_per_task;
-		job->alloc_memory[job_node_inx] += step_mem;
-		this_node->alloc_memory += step_mem;
-	}
-	last_cr_update_time = time(NULL);
 	return SLURM_SUCCESS;
 }
 
-extern int select_p_step_fini(struct step_record *step_ptr)
+extern List select_p_get_config(void)
 {
-	slurm_step_layout_t *step_layout = step_ptr->step_layout;
-	struct select_cr_job *job;
-	struct node_cr_record *this_node;
-	int job_node_inx, step_node_inx, host_index, rc = SLURM_SUCCESS;
-	uint32_t step_mem;
- 
-	xassert(select_cr_job_list);
-	xassert(step_ptr->job_ptr);
-	xassert(step_ptr->job_ptr->details);
-	xassert(step_ptr->step_node_bitmap);
-
-	if (step_layout == NULL)
-		return SLURM_SUCCESS;	/* batch script */
-	if (step_ptr->job_ptr->details->job_min_memory)
-		return SLURM_SUCCESS;
-	if ((cr_type != CR_CORE_MEMORY) && (cr_type != CR_CPU_MEMORY) &&
-	    (cr_type != CR_MEMORY) && (cr_type != CR_SOCKET_MEMORY))
-		return SLURM_SUCCESS;
-
-	job = list_find_first(select_cr_job_list, _find_job_by_id,
-			      &step_ptr->job_ptr->job_id);
-	if (!job) {
-		error("select_p_step_fini: could not find step %u.%u",
-		      step_ptr->job_ptr->job_id, step_ptr->step_id);
-		return ESLURM_INVALID_JOB_ID;
-	}
-
-	job_node_inx = -1;
-	step_node_inx = -1;
-	for (host_index = 0; host_index < select_node_cnt; host_index++) {
-		if (bit_test(job->node_bitmap, host_index) == 0)
-			continue;
-		job_node_inx++;
-		if (bit_test(step_ptr->step_node_bitmap, host_index) == 0)
-			continue;
-		step_node_inx++;
-
-		this_node = &select_node_ptr[host_index];
-		step_mem = step_layout->tasks[step_node_inx] * 
-			   step_ptr->mem_per_task;
-		if (job->alloc_memory[job_node_inx] >= step_mem)
-			job->alloc_memory[job_node_inx] -= step_mem;
-		else {
-			if (rc == SLURM_SUCCESS) {
-				error("select_p_step_fini: job alloc_memory "
-				      "underflow on %s",
-				      this_node->node_ptr->name);
-				rc = SLURM_ERROR;  
-			}
-			job->alloc_memory[host_index] = 0;
-		}
-		if (this_node->alloc_memory >= step_mem)
-			this_node->alloc_memory -= step_mem;
-		else {
-			if (rc == SLURM_SUCCESS) {
-				error("select_p_step_fini: node alloc_memory "
-				      "underflow on %s",
-				      this_node->node_ptr->name);
-				rc = SLURM_ERROR;  
-			}
-			this_node->alloc_memory = 0;
-		}
-	}
-	last_cr_update_time = time(NULL);
-	return rc;
+	return NULL;
 }
diff --git a/src/plugins/select/cons_res/select_cons_res.h b/src/plugins/select/cons_res/select_cons_res.h
index 63f50c6d6..3acfd3c16 100644
--- a/src/plugins/select/cons_res/select_cons_res.h
+++ b/src/plugins/select/cons_res/select_cons_res.h
@@ -5,10 +5,11 @@
  *****************************************************************************
  *  Copyright (C) 2006 Hewlett-Packard Development Company, L.P.
  *  Written by Susanne M. Balle, <susanne.balle@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -45,6 +46,7 @@
 #include <slurm/slurm.h>
 #include <slurm/slurm_errno.h>
 
+#include "src/common/bitstring.h"
 #include "src/common/list.h"
 #include "src/common/log.h"
 #include "src/common/node_select.h"
@@ -58,107 +60,70 @@
 
 #include "src/slurmd/slurmd/slurmd.h"
 
-/* part_cr_record keeps track of the allocated cores of a node that
- * has been assigned to a partition. SLURM allows a node to be
- * assigned to more than one partition. One or more partitions
- * may be configured to share the cores with more than one job.
- */
-struct part_cr_record {
-	struct part_record *part_ptr;	/* ptr to slurmctld partition record */
-	uint16_t *alloc_cores;		/* core count per socket reserved by
-					 * already scheduled jobs */
-	uint16_t num_rows;		/* number of rows in alloc_cores. The
-					 * length of alloc_cores is
-					 * num_sockets * num_rows. */
-	struct part_cr_record *next;	/* ptr to next part_cr_record */
-};
-
 /*
- * node_cr_record.node_state assists with the unique state of each node.
+ * node_res_record.node_state assists with the unique state of each node.
+ * When a job is allocated, these flags provide protection for nodes in a
+ * Shared=NO or Shared=EXCLUSIVE partition from other jobs.
+ *
  * NOTES:
  * - If node is in use by Shared=NO part, some CPUs/memory may be available
- * - Caution with NODE_CR_AVAILABLE: a Sharing partition could be full!!
+ * - Caution with NODE_CR_AVAILABLE: a Sharing partition could be full.
+ *
+ * - these values are staggered so that they can be incremented as multiple
+ * jobs are allocated to each node. This is needed to be able to support
+ * preemption, which can override these protections.
  */
 enum node_cr_state {
-	NODE_CR_RESERVED, /* node is NOT available for use by any other jobs */
-	NODE_CR_ONE_ROW,  /* node is in use by Shared=NO part */
-	NODE_CR_AVAILABLE /* The node may be IDLE or IN USE by Sharing part(s)*/
+	NODE_CR_AVAILABLE = 0,  /* The node may be IDLE or IN USE (shared) */
+	NODE_CR_ONE_ROW = 1,    /* node is in use by Shared=NO part */
+	NODE_CR_RESERVED = 100, /* node is in use by Shared=EXCLUSIVE part */
 };
 
-/* node_cr_record keeps track of the resources within a node which 
- * have been reserved by already scheduled jobs. 
- *
- * NOTE: The locations of these entries are synchronized with the 
- * job records in slurmctld (entry X in both tables are the same).
- */
-struct node_cr_record {
+/* a partition's per-row CPU allocation data */
+struct part_row_data {
+	bitstr_t *row_bitmap;		/* contains all jobs for this row */
+	uint32_t num_jobs;		/* Number of jobs in this row */
+	struct select_job_res **job_list;/* List of jobs in this row */
+	uint32_t job_list_size;		/* Size of job_list array */
+};
+
+/* partition CPU allocation data */
+struct part_res_record {
+	char *name;			/* name of the partition */
+	uint16_t priority;		/* Partition priority */
+	uint16_t num_rows;		/* Number of row_bitmaps */
+	struct part_row_data *row;	/* array of rows containing jobs */
+	struct part_res_record *next;	/* Ptr to next part_res_record */
+};
+
+/* per-node resource data */
+struct node_res_record {
 	struct node_record *node_ptr;	/* ptr to the actual node */
 	uint16_t cpus;			/* count of processors configured */
 	uint16_t sockets;		/* count of sockets configured */
 	uint16_t cores;			/* count of cores configured */
-	uint16_t threads;		/* count of threads configured */
+	uint16_t vpus;			/* count of virtual cpus (hyperthreads)
+					 * configured per core */
 	uint32_t real_memory;		/* MB of real memory configured */
-	enum node_cr_state node_state;	/* see node_cr_state comments */
-	struct part_cr_record *parts;	/* ptr to singly-linked part_cr_record
-					 * list that contains alloc_core info */
-	uint32_t alloc_memory;		/* real memory reserved by already
-					 * scheduled jobs */
 };
-extern struct node_cr_record *select_node_ptr;
-extern uint16_t select_fast_schedule;
 
-/*** NOTE: If any changes are made here, the following data structure has
- ***       persistent state which is maintained by select_cons_res.c:
- ***		select_p_state_save
- ***		select_p_state_restore
- *** 
- *** as well as tracked by version control
- ***		select_cons_res.c:pstate_version
- *** which should be incremented if any changes are made.
- **/
-struct select_cr_job {
-	/* Information preserved across reboots */
-	uint32_t job_id;	/* job ID, default set by SLURM        */
-	enum node_cr_state node_req;    /* see node_cr_state comments */
-	uint32_t nprocs;	/* --nprocs=n,      -n n               */
-	uint32_t nhosts;	/* number of hosts allocated to job    */
-	uint16_t *cpus;		/* number of processors on each host,
-				 * if using Moab scheduler (sched/wiki2)
-				 * then this will be initialized to the
-				 * number of CPUs desired on the node	*/
-	uint16_t *alloc_cpus;	/* number of allocated threads/cpus on
-				 * each host */
-	uint16_t *num_sockets;	/* number of sockets in alloc_cores[node] */
-	uint16_t **alloc_cores;	/* number of allocated cores on each
-				 * host */
-	uint32_t *alloc_memory;	/* number of allocated MB of real
-				 * memory on each host */
-	uint16_t *node_offset;	/* the node_cr_record->alloc_cores row to
-				 * which this job was assigned */
-
-	/* Information re-established after reboot */
-	struct job_record *job_ptr;	/* pointer to slurmctld job record */
-	uint16_t state;		/* job state information               */
-	bitstr_t *node_bitmap;	/* bitmap of nodes allocated to job, 
-				 * NOTE: The node_bitmap in slurmctld's job
-				 * structure clears bits as on completion.
-				 * This bitmap is persistent through lifetime
-				 * of the job. */
+/* per-node resource usage record */
+struct node_use_record {
+	uint16_t node_state;		/* see node_cr_state comments */
+	uint32_t alloc_memory;		/* real memory reserved by already
+					 * scheduled jobs */
 };
 
-struct node_cr_record * find_cr_node_record (const char *name);
 
-/* Find a partition record based upon pointer to slurmctld record */
-struct part_cr_record *get_cr_part_ptr(struct node_cr_record *this_node,
-				      struct part_record *part_ptr);
+extern uint16_t select_fast_schedule;
 
-void get_resources_this_node(uint16_t *cpus, 
-			     uint16_t *sockets, 
-			     uint16_t *cores,
-			     uint16_t *threads, 
-			     struct node_cr_record *this_cr_node,
-			     uint32_t jobid);
+extern struct part_res_record *select_part_record;
+extern struct node_res_record *select_node_record;
+extern struct node_use_record *select_node_usage;
 
-extern struct multi_core_data * create_default_mc(void);
+extern void cr_sort_part_rows(struct part_res_record *p_ptr);
+extern uint32_t cr_get_coremap_offset(uint32_t node_index);
+extern uint32_t cr_get_node_num_cores(uint32_t node_index);
+extern bool cr_priority_selection_enabled();
 
 #endif /* !_CONS_RES_H */
diff --git a/src/plugins/select/linear/Makefile.in b/src/plugins/select/linear/Makefile.in
index c31c64bab..09ae7ac33 100644
--- a/src/plugins/select/linear/Makefile.in
+++ b/src/plugins/select/linear/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/select/linear/select_linear.c b/src/plugins/select/linear/select_linear.c
index 7791bd222..2e6bcb7c8 100644
--- a/src/plugins/select/linear/select_linear.c
+++ b/src/plugins/select/linear/select_linear.c
@@ -4,13 +4,14 @@
  *  of sets of consecutive nodes using a best-fit algorithm.
  *****************************************************************************
  *  Copyright (C) 2004-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>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -59,6 +60,7 @@
 #include "src/common/log.h"
 #include "src/common/node_select.h"
 #include "src/common/parse_time.h"
+#include "src/common/select_job_res.h"
 #include "src/common/slurm_protocol_api.h"
 #include "src/common/slurm_resource_info.h"
 #include "src/common/xassert.h"
@@ -74,17 +76,17 @@
 static int  _add_job_to_nodes(struct node_cr_record *node_cr_ptr,
 			      struct job_record *job_ptr, char *pre_err, 
 			      int suspended);
-static int  _add_step(struct step_record *step_ptr);
+static void _build_select_struct(struct job_record *job_ptr, bitstr_t *bitmap);
 static void _cr_job_list_del(void *x);
 static int  _cr_job_list_sort(void *x, void *y);
-static void _del_list_step(void *x);
 static void _dump_node_cr(struct node_cr_record *node_cr_ptr);
 static struct node_cr_record *_dup_node_cr(struct node_cr_record *node_cr_ptr);
 static int  _find_job_mate(struct job_record *job_ptr, bitstr_t *bitmap,
 			   uint32_t min_nodes, uint32_t max_nodes,
 			   uint32_t req_nodes);
-static int  _find_step(struct step_record *step_ptr);
 static void _free_node_cr(struct node_cr_record *node_cr_ptr);
+static uint16_t _get_avail_cpus(struct job_record *job_ptr, int index);
+static uint16_t _get_total_cpus(int index);
 static void _init_node_cr(void);
 static int _job_count_bitmap(struct node_cr_record *node_cr_ptr,
 			     struct job_record *job_ptr, 
@@ -93,7 +95,9 @@ static int _job_count_bitmap(struct node_cr_record *node_cr_ptr,
 static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 		     uint32_t min_nodes, uint32_t max_nodes, 
 		     uint32_t req_nodes);
-static int _remove_step(struct step_record *step_ptr);
+static int _job_test_topo(struct job_record *job_ptr, bitstr_t *bitmap,
+			  uint32_t min_nodes, uint32_t max_nodes, 
+			  uint32_t req_nodes);
 static int _rm_job_from_nodes(struct node_cr_record *node_cr_ptr,
 			      struct job_record *job_ptr, char *pre_err, 
 			      int remove_all);
@@ -137,6 +141,8 @@ static struct node_record *select_node_ptr = NULL;
 static int select_node_cnt = 0;
 static uint16_t select_fast_schedule;
 static uint16_t cr_type;
+static bool cr_priority_test      = false;
+static bool cr_priority_selection = false;
 
 static struct node_cr_record *node_cr_ptr = NULL;
 static pthread_mutex_t cr_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -204,8 +210,7 @@ static int _init_status_pthread(void)
 
 	slurm_mutex_lock( &thread_flag_mutex );
 	if ( xcpu_thread ) {
-		debug2("XCPU thread already running, not starting "
-			"another");
+		debug2("XCPU thread already running, not starting another");
 		slurm_mutex_unlock( &thread_flag_mutex );
 		return SLURM_ERROR;
 	}
@@ -227,11 +232,11 @@ static int _fini_status_pthread(void)
 	if ( xcpu_thread ) {
 		agent_fini = 1;
 		for (i=0; i<4; i++) {
+			sleep(1);
 			if (pthread_kill(xcpu_thread, 0)) {
 				xcpu_thread = 0;
 				break;
 			}
-			sleep(1);
 		}
 		if ( xcpu_thread ) {
 			error("could not kill XCPU agent thread");
@@ -243,6 +248,19 @@ static int _fini_status_pthread(void)
 }
 #endif
 
+static inline bool _cr_priority_selection_enabled(void)
+{
+	if (!cr_priority_test) {
+		char *sched_type = slurm_get_sched_type();
+		if (strcmp(sched_type, "sched/gang") == 0)
+			cr_priority_selection = true;
+		xfree(sched_type);
+		cr_priority_test = true;
+	}
+	return cr_priority_selection;
+	
+}
+
 static bool _enough_nodes(int avail_nodes, int rem_nodes, 
 		uint32_t min_nodes, uint32_t req_nodes)
 {
@@ -417,6 +435,107 @@ static uint16_t _get_avail_cpus(struct job_record *job_ptr, int index)
 	return(avail_cpus);
 }
 
+/*
+ * _get_total_cpus - Get the total number of cpus on a node
+ *	Note that the value of cpus is the lowest-level logical 
+ *	processor (LLLP).
+ * IN index - index of node's configuration information in select_node_ptr
+ */
+static uint16_t _get_total_cpus(int index)
+{
+	struct node_record *node_ptr = &(select_node_ptr[index]);
+	if (select_fast_schedule)
+		return node_ptr->config_ptr->cpus;
+	else
+		return node_ptr->cpus;
+}
+
+/* Build the full select_job_res_t structure for a job based upon the nodes
+ *	allocated to it (the bitmap) and the job's memory requirement */
+static void _build_select_struct(struct job_record *job_ptr, bitstr_t *bitmap)
+{
+	int i, j, k;
+	int first_bit, last_bit;
+	uint32_t node_cpus, total_cpus = 0, node_cnt;
+	struct node_record *node_ptr;
+	uint32_t job_memory_cpu = 0, job_memory_node = 0;
+	bool memory_info = false;
+	select_job_res_t select_ptr;
+
+	if (job_ptr->details->job_min_memory  && (cr_type == CR_MEMORY)) {
+		if (job_ptr->details->job_min_memory & MEM_PER_CPU) {
+			job_memory_cpu = job_ptr->details->job_min_memory &
+					 (~MEM_PER_CPU);
+			memory_info = true;
+		} else {
+			job_memory_node = job_ptr->details->job_min_memory;
+			memory_info = true;
+		}
+	}
+
+	if (job_ptr->select_job) {
+		/* Due to job requeue */
+		free_select_job_res(&job_ptr->select_job);
+	}
+
+	node_cnt = bit_set_count(bitmap);
+	job_ptr->select_job = select_ptr = create_select_job_res();
+	select_ptr->cpu_array_reps = xmalloc(sizeof(uint32_t) * node_cnt);
+	select_ptr->cpu_array_value = xmalloc(sizeof(uint16_t) * node_cnt);
+	select_ptr->cpus = xmalloc(sizeof(uint16_t) * node_cnt);
+	select_ptr->cpus_used = xmalloc(sizeof(uint16_t) * node_cnt);
+	select_ptr->memory_allocated = xmalloc(sizeof(uint32_t) * node_cnt);
+	select_ptr->memory_used = xmalloc(sizeof(uint32_t) * node_cnt);
+	select_ptr->nhosts = node_cnt;
+	select_ptr->node_bitmap = bit_copy(bitmap);
+	if (select_ptr->node_bitmap == NULL)
+		fatal("bit_copy malloc failure");
+	select_ptr->nprocs = job_ptr->total_procs;
+	if (build_select_job_res(select_ptr, (void *)select_node_ptr,
+				 select_fast_schedule))
+		error("_build_select_struct: build_select_job_res: %m");
+
+	first_bit = bit_ffs(bitmap);
+	last_bit  = bit_fls(bitmap);
+	for (i=first_bit, j=0, k=-1; ((i<=last_bit) && (first_bit>=0)); i++) {
+		if (!bit_test(bitmap, i))
+			continue;
+		node_ptr = &(select_node_ptr[i]);
+		if (select_fast_schedule)
+			node_cpus = node_ptr->config_ptr->cpus;
+		else
+			node_cpus = node_ptr->cpus;
+		select_ptr->cpus[j] = node_cpus;
+		if ((k == -1) || 
+		    (select_ptr->cpu_array_value[k] != node_cpus)) {
+			select_ptr->cpu_array_cnt++;
+			select_ptr->cpu_array_reps[++k] = 1;
+			select_ptr->cpu_array_value[k] = node_cpus;
+		} else
+			select_ptr->cpu_array_reps[k]++;
+		total_cpus += node_cpus;
+
+		if (!memory_info)
+			;
+		else if (job_memory_node)
+			select_ptr->memory_allocated[j] = job_memory_node;
+		else if (job_memory_cpu) {
+			select_ptr->memory_allocated[j] = 
+					job_memory_cpu * node_cpus;
+		}
+
+		if (set_select_job_res_node(select_ptr, j)) {
+			error("_build_select_struct: set_select_job_res_node: "
+			      "%m");
+		}
+		j++;
+	}
+	if (select_ptr->nprocs != total_cpus) {
+		error("_build_select_struct: nprocs mismatch %u != %u",
+		      select_ptr->nprocs, total_cpus);
+	}
+}
+
 /*
  * select_p_job_test - Given a specification of scheduling requirements, 
  *	identify the nodes which "best" satisfy the request.
@@ -429,7 +548,7 @@ static uint16_t _get_avail_cpus(struct job_record *job_ptr, int index)
  *	satisfy the request are cleared, other left set
  * IN min_nodes - minimum count of nodes
  * IN req_nodes - requested (or desired) count of nodes
- * IN max_nodes - maximum count of nodes (0==don't care)
+ * IN max_nodes - maximum count of nodes
  * IN mode - SELECT_MODE_RUN_NOW: try to schedule job now
  *           SELECT_MODE_TEST_ONLY: test if job can ever run
  *           SELECT_MODE_WILL_RUN: determine when and where job can run
@@ -473,7 +592,7 @@ extern int select_p_job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 	}
 
 	if (mode != SELECT_MODE_TEST_ONLY) {
-		if (job_ptr->details->shared == 1) {
+		if (job_ptr->details->shared) {
 			max_share = job_ptr->part_ptr->max_share & 
 					~SHARED_FORCE;
 		} else	/* ((shared == 0) || (shared == (uint16_t) NO_VAL)) */
@@ -492,6 +611,8 @@ extern int select_p_job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 		job_ptr->details->job_min_memory = 0;
 	}
 
+	debug3("select/linear: job_test: job %u max_share %d avail nodes %u",
+		job_ptr->job_id, max_share, bit_set_count(bitmap));
 	orig_map = bit_copy(bitmap);
 	for (max_run_job=min_share; max_run_job<max_share; max_run_job++) {
 		bool last_iteration = (max_run_job == (max_share -1));
@@ -503,12 +624,14 @@ extern int select_p_job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 					      orig_map, bitmap, 
 					      max_run_job, 
 					      max_run_job + sus_jobs);
+			debug3("select/linear: job_test: found %d nodes for %u",
+				j, job_ptr->job_id);
 			if ((j == prev_cnt) || (j < min_nodes))
 				continue;
 			prev_cnt = j;
 			if ((mode == SELECT_MODE_RUN_NOW) && (max_run_job > 0)) {
-				/* We need to share. 
-				 * Try to find suitable job to share nodes with */
+				/* We need to share. Try to find 
+				 * suitable job to share nodes with */
 				rc = _find_job_mate(job_ptr, bitmap, min_nodes, 
 						    max_nodes, req_nodes);
 				if (rc == SLURM_SUCCESS)
@@ -523,6 +646,8 @@ extern int select_p_job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 	}
 	bit_free(orig_map);
 	slurm_mutex_unlock(&cr_mutex);
+	if ((rc == SLURM_SUCCESS) && (mode == SELECT_MODE_RUN_NOW))
+		_build_select_struct(job_ptr, bitmap);
 	if (save_mem)
 		job_ptr->details->job_min_memory = save_mem;
 	return rc;
@@ -612,12 +737,62 @@ static int _job_count_bitmap(struct node_cr_record *node_cr_ptr,
 		}
 
 		if ((run_job_cnt != NO_SHARE_LIMIT) &&
+		    (!_cr_priority_selection_enabled()) &&
 		    (node_cr_ptr[i].exclusive_jobid != 0)) {
 			/* already reserved by some exclusive job */
 			bit_clear(jobmap, i);
 			continue;
 		}
 
+		if (_cr_priority_selection_enabled()) {
+			/* clear this node if any higher-priority
+			 * partitions have existing allocations */
+			total_jobs = 0;
+			part_cr_ptr = node_cr_ptr[i].parts;
+			for( ;part_cr_ptr; part_cr_ptr = part_cr_ptr->next) {
+				if (part_cr_ptr->part_ptr->priority <=
+				    job_ptr->part_ptr->priority)
+					continue;
+				total_jobs += part_cr_ptr->tot_job_cnt;
+			}
+			if ((run_job_cnt != NO_SHARE_LIMIT) &&
+			    (total_jobs > 0)) {
+				bit_clear(jobmap, i);
+				continue;
+			}
+			/* if not sharing, then check with other partitions
+			 * of equal priority. Otherwise, load-balance within
+			 * the local partition */
+			total_jobs = 0;
+			total_run_jobs = 0;
+			part_cr_ptr = node_cr_ptr[i].parts;
+			for( ; part_cr_ptr; part_cr_ptr = part_cr_ptr->next) {
+				if (part_cr_ptr->part_ptr->priority !=
+				    job_ptr->part_ptr->priority)
+					continue;
+				if (!job_ptr->details->shared) {
+					total_run_jobs +=
+						      part_cr_ptr->run_job_cnt;
+					total_jobs += part_cr_ptr->tot_job_cnt;
+					continue;
+				}
+				if (part_cr_ptr->part_ptr == job_ptr->part_ptr){
+					total_run_jobs +=
+						      part_cr_ptr->run_job_cnt;
+					total_jobs += part_cr_ptr->tot_job_cnt;
+					break;
+				}
+			}
+			if ((total_run_jobs <= run_job_cnt) &&
+			    (total_jobs     <= tot_job_cnt)) {
+				bit_set(jobmap, i);
+				count++;
+			} else {
+				bit_clear(jobmap, i);
+			}
+			continue;
+		}
+
 		total_jobs = 0;
 		total_run_jobs = 0;
 		part_cr_ptr = node_cr_ptr[i].parts;
@@ -665,12 +840,15 @@ static int _find_job_mate(struct job_record *job_ptr, bitstr_t *bitmap,
 
 	job_iterator = list_iterator_create(job_list);
 	while ((job_scan_ptr = (struct job_record *) list_next(job_iterator))) {
-		if ((job_scan_ptr->part_ptr  != job_ptr->part_ptr) ||
-		    (job_scan_ptr->job_state != JOB_RUNNING) ||
-		    (job_scan_ptr->node_cnt  != req_nodes) ||
-		    (job_scan_ptr->total_procs < job_ptr->num_procs) ||
+		if ((job_scan_ptr->job_state  != JOB_RUNNING)		||
+		    (job_scan_ptr->node_cnt   != req_nodes)		||
+		    (job_scan_ptr->total_procs < job_ptr->num_procs)	||
 		    (!bit_super_set(job_scan_ptr->node_bitmap, bitmap)))
 			continue;
+		if (job_scan_ptr->details && job_ptr->details &&
+		    (job_scan_ptr->details->contiguous != 
+		     job_ptr->details->contiguous))
+			continue;
 
 		if (job_ptr->details->req_node_bitmap &&
 		    (!bit_super_set(job_ptr->details->req_node_bitmap,
@@ -694,8 +872,8 @@ static int _find_job_mate(struct job_record *job_ptr, bitstr_t *bitmap,
 /* _job_test - does most of the real work for select_p_job_test(), which 
  *	pretty much just handles load-leveling and max_share logic */
 static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
-			uint32_t min_nodes, uint32_t max_nodes, 
-			uint32_t req_nodes)
+		     uint32_t min_nodes, uint32_t max_nodes, 
+		     uint32_t req_nodes)
 {
 	int i, index, error_code = EINVAL, sufficient;
 	int *consec_nodes;	/* how many nodes we can add from this 
@@ -710,12 +888,21 @@ static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 	int rem_cpus, rem_nodes;	/* remaining resources desired */
 	int best_fit_nodes, best_fit_cpus, best_fit_req;
 	int best_fit_location = 0, best_fit_sufficient;
-	int avail_cpus, alloc_cpus = 0;
+	int avail_cpus, alloc_cpus = 0, total_cpus = 0;
+
+	if (bit_set_count(bitmap) < min_nodes)
+		return error_code;
 
 	if ((job_ptr->details->req_node_bitmap) &&
 	    (!bit_super_set(job_ptr->details->req_node_bitmap, bitmap)))
 		return error_code;
 
+	if (switch_record_cnt && switch_record_table) {
+		/* Perform optimized resource selection based upon topology */
+		return _job_test_topo(job_ptr, bitmap, 
+				      min_nodes, max_nodes, req_nodes);
+	}
+
 	consec_index = 0;
 	consec_size  = 50;	/* start allocation for 50 sets of 
 				 * consecutive nodes */
@@ -749,10 +936,11 @@ static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 					/* first required node in set */
 					consec_req[consec_index] = index;
 				}
-				rem_cpus   -= avail_cpus;
-				alloc_cpus += avail_cpus;
 				rem_nodes--;
 				max_nodes--;
+				rem_cpus   -= avail_cpus;
+				alloc_cpus += avail_cpus;
+				total_cpus += _get_total_cpus(index);
 			} else {	 /* node not required (yet) */
 				bit_clear(bitmap, index); 
 				consec_cpus[consec_index] += avail_cpus;
@@ -786,7 +974,7 @@ static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 		consec_end[consec_index++] = index - 1;
 
 #if SELECT_DEBUG
-	/* don't compile this, slows things down too much */
+	/* don't compile this, it slows things down too much */
 	debug3("rem_cpus=%d, rem_nodes=%d", rem_cpus, rem_nodes);
 	for (i = 0; i < consec_index; i++) {
 		if (consec_req[i] != -1)
@@ -811,10 +999,16 @@ static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 		best_fit_req = -1;	/* first required node, -1 if none */
 		for (i = 0; i < consec_index; i++) {
 			if (consec_nodes[i] == 0)
-				continue;
-			sufficient = (consec_cpus[i] >= rem_cpus)
-			&& _enough_nodes(consec_nodes[i], rem_nodes,
-					 min_nodes, req_nodes);
+				continue;	/* no usable nodes here */
+
+			if (job_ptr->details->contiguous &&
+			    job_ptr->details->req_node_bitmap &&
+			    (consec_req[i] == -1))
+				continue;	/* no required nodes here */
+
+			sufficient = (consec_cpus[i] >= rem_cpus) &&
+				     _enough_nodes(consec_nodes[i], rem_nodes,
+						   min_nodes, req_nodes);
 
 			/* if first possibility OR */
 			/* contains required nodes OR */
@@ -833,6 +1027,23 @@ static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 				best_fit_req = consec_req[i];
 				best_fit_sufficient = sufficient;
 			}
+
+			if (job_ptr->details->contiguous &&
+			    job_ptr->details->req_node_bitmap) {
+				/* Must wait for all required nodes to be 
+				 * in a single consecutive block */
+				int j, other_blocks = 0;
+				for (j = (i+1); j < consec_index; j++) {
+					if (consec_req[j] != -1) {
+						other_blocks = 1;
+						break;
+					}
+				}
+				if (other_blocks) {
+					best_fit_nodes = 0;
+					break;
+				}
+			}
 		}
 		if (best_fit_nodes == 0)
 			break;
@@ -858,6 +1069,7 @@ static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 				avail_cpus = _get_avail_cpus(job_ptr, i);
 				rem_cpus   -= avail_cpus;
 				alloc_cpus += avail_cpus;
+				total_cpus += _get_total_cpus(i);
 			}
 			for (i = (best_fit_req - 1);
 			     i >= consec_start[best_fit_location]; i--) {
@@ -872,6 +1084,7 @@ static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 				avail_cpus = _get_avail_cpus(job_ptr, i);
 				rem_cpus   -= avail_cpus;
 				alloc_cpus += avail_cpus;
+				total_cpus += _get_total_cpus(i);
 			}
 		} else {
 			for (i = consec_start[best_fit_location];
@@ -887,6 +1100,7 @@ static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 				avail_cpus = _get_avail_cpus(job_ptr, i);
 				rem_cpus   -= avail_cpus;
 				alloc_cpus += avail_cpus;
+				total_cpus += _get_total_cpus(i);
 			}
 		}
 		if (job_ptr->details->contiguous || 
@@ -904,7 +1118,7 @@ static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 	}
 	if (error_code == SLURM_SUCCESS) {
 		/* job's total_procs is needed for SELECT_MODE_WILL_RUN */
-		job_ptr->total_procs = alloc_cpus;
+		job_ptr->total_procs = total_cpus;
 	}
 
 	xfree(consec_cpus);
@@ -915,6 +1129,302 @@ static int _job_test(struct job_record *job_ptr, bitstr_t *bitmap,
 	return error_code;
 }
 
+/*
+ * _job_test_topo - A topology aware version of _job_test()
+ * NOTE: The logic here is almost identical to that of _eval_nodes_topo() in
+ *       select/cons_res/job_test.c. Any bug found here is probably also there.
+ */
+static int _job_test_topo(struct job_record *job_ptr, bitstr_t *bitmap,
+			  uint32_t min_nodes, uint32_t max_nodes, 
+			  uint32_t req_nodes)
+{
+	bitstr_t **switches_bitmap;		/* nodes on this switch */
+	int       *switches_cpu_cnt;		/* total CPUs on switch */
+	int       *switches_node_cnt;		/* total nodes on switch */
+	int       *switches_required;		/* set if has required node */
+
+	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, total_cpus = 0;
+	int i, j, rc = SLURM_SUCCESS;
+	int best_fit_inx, first, last;
+	int best_fit_nodes, best_fit_cpus;
+	int best_fit_location = 0, best_fit_sufficient;
+	bool sufficient;
+
+	rem_cpus = job_ptr->num_procs;
+	if (req_nodes > min_nodes)
+		rem_nodes = req_nodes;
+	else
+		rem_nodes = min_nodes;
+
+	if (job_ptr->details->req_node_bitmap) {
+		req_nodes_bitmap = bit_copy(job_ptr->details->req_node_bitmap);
+		i = bit_set_count(req_nodes_bitmap);
+		if (i > max_nodes) {
+			info("job %u requires more nodes than currently "
+			     "available (%u>%u)",
+			     job_ptr->job_id, i, max_nodes);
+			rc = EINVAL;
+			goto fini;
+		}
+	}
+
+	/* Construct a set of switch array entries, 
+	 * use the same indexes as switch_record_table in slurmctld */
+	switches_bitmap   = xmalloc(sizeof(bitstr_t *) * switch_record_cnt);
+	switches_cpu_cnt  = xmalloc(sizeof(int)        * switch_record_cnt);
+	switches_node_cnt = xmalloc(sizeof(int)        * switch_record_cnt);
+	switches_required = xmalloc(sizeof(int)        * switch_record_cnt);
+	avail_nodes_bitmap = bit_alloc(node_record_count);
+	for (i=0; i<switch_record_cnt; i++) {
+		switches_bitmap[i] = bit_copy(switch_record_table[i].
+					      node_bitmap);
+		bit_and(switches_bitmap[i], bitmap);
+		bit_or(avail_nodes_bitmap, switches_bitmap[i]);
+		switches_node_cnt[i] = bit_set_count(switches_bitmap[i]);
+		if (req_nodes_bitmap &&
+		    bit_overlap(req_nodes_bitmap, switches_bitmap[i])) {
+			switches_required[i] = 1;
+		}
+	}
+	bit_nclear(bitmap, 0, node_record_count - 1);
+
+#if SELECT_DEBUG
+	/* Don't compile this, it slows things down too much */
+	for (i=0; i<switch_record_cnt; i++) {
+		char *node_names = NULL;
+		if (switches_node_cnt[i])
+			node_names = bitmap2node_name(switches_bitmap[i]);
+		debug("switch=%s nodes=%u:%s required:%u speed=%u",
+		      switch_record_table[i].name,
+		      switches_node_cnt[i], node_names,
+		      switches_required[i],
+		      switch_record_table[i].link_speed);
+		xfree(node_names);
+	}
+#endif
+
+	if (req_nodes_bitmap &&
+	    (!bit_super_set(req_nodes_bitmap, avail_nodes_bitmap))) {
+		info("job %u requires nodes not available on any switch",
+		     job_ptr->job_id);
+		rc = EINVAL;
+		goto fini;
+	}
+
+	if (req_nodes_bitmap) {
+		/* Accumulate specific required resources, if any */
+		first = bit_ffs(req_nodes_bitmap);
+		last  = bit_fls(req_nodes_bitmap);
+		for (i=first; ((i<=last) && (first>=0)); i++) {
+			if (!bit_test(req_nodes_bitmap, i))
+				continue;
+			if (max_nodes <= 0) {
+				info("job %u requires nodes than allowed",
+				     job_ptr->job_id);
+				rc = EINVAL;
+				goto fini;
+			}
+			bit_set(bitmap, i);
+			bit_clear(avail_nodes_bitmap, i);
+			rem_nodes--;
+			max_nodes--;
+			avail_cpus = _get_avail_cpus(job_ptr, i);
+			rem_cpus   -= avail_cpus;
+			alloc_cpus += avail_cpus;
+			total_cpus += _get_total_cpus(i);
+			for (j=0; j<switch_record_cnt; j++) {
+				if (!bit_test(switches_bitmap[j], i))
+					continue;
+				bit_clear(switches_bitmap[j], i);
+				switches_node_cnt[j]--;
+			}
+		}
+		if ((rem_nodes <= 0) && (rem_cpus <= 0))
+			goto fini;
+
+		/* Accumulate additional resources from leafs that
+		 * contain required nodes */
+		for (j=0; j<switch_record_cnt; j++) {
+			if ((switch_record_table[j].level != 0) ||
+			    (switches_node_cnt[j] == 0) ||
+			    (switches_required[j] == 0)) {
+				continue;
+			}
+			while ((max_nodes > 0) &&
+			       ((rem_nodes > 0) || (rem_cpus > 0))) {
+				i = bit_ffs(switches_bitmap[j]);
+				if (i == -1)
+					break;
+				bit_clear(switches_bitmap[j], i);
+				switches_node_cnt[j]--;
+				if (bit_test(bitmap, i)) {
+					/* node on multiple leaf switches
+					 * and already selected */
+					continue;
+				}
+				bit_set(bitmap, i);
+				bit_clear(avail_nodes_bitmap, i);
+				rem_nodes--;
+				max_nodes--;
+				avail_cpus = _get_avail_cpus(job_ptr, i);
+				rem_cpus   -= avail_cpus;
+				alloc_cpus += avail_cpus;
+				total_cpus += _get_total_cpus(i);
+			}
+		}
+		if ((rem_nodes <= 0) && (rem_cpus <= 0))
+			goto fini;
+
+		/* Update bitmaps and node counts for higher-level switches */
+		for (j=0; j<switch_record_cnt; j++) {
+			if (switches_node_cnt[j] == 0)
+				continue;
+			first = bit_ffs(switches_bitmap[j]);
+			if (first < 0)
+				continue;
+			last  = bit_fls(switches_bitmap[j]);
+			for (i=first; i<=last; i++) {
+				if (!bit_test(switches_bitmap[j], i))
+					continue;
+				if (!bit_test(avail_nodes_bitmap, i)) {
+					/* cleared from lower level */
+					bit_clear(switches_bitmap[j], i);
+					switches_node_cnt[j]--;
+				} else {
+					switches_cpu_cnt[j] += 
+						_get_avail_cpus(job_ptr, i);
+				}
+			}
+		}
+	} else {
+		/* No specific required nodes, calculate CPU counts */
+		for (j=0; j<switch_record_cnt; j++) {
+			first = bit_ffs(switches_bitmap[j]);
+			if (first < 0)
+				continue;
+			last  = bit_fls(switches_bitmap[j]);
+			for (i=first; i<=last; i++) {
+				if (!bit_test(switches_bitmap[j], i))
+					continue;
+				switches_cpu_cnt[j] += 
+					_get_avail_cpus(job_ptr, i);
+			}
+		}
+	}
+
+	/* Determine lowest level switch satifying request with best fit */
+	best_fit_inx = -1;
+	for (j=0; j<switch_record_cnt; j++) {
+		if ((switches_cpu_cnt[j]  < rem_cpus) ||
+		    (!_enough_nodes(switches_node_cnt[j], rem_nodes,
+				    min_nodes, req_nodes)))
+			continue;
+		if ((best_fit_inx == -1) ||
+		    (switch_record_table[j].level <
+		     switch_record_table[best_fit_inx].level) ||
+		    ((switch_record_table[j].level ==
+		      switch_record_table[best_fit_inx].level) &&
+		     (switches_node_cnt[j] < switches_node_cnt[best_fit_inx])))
+			best_fit_inx = j;
+	}
+	if (best_fit_inx == -1) {
+		error("job %u: best_fit topology failure", job_ptr->job_id);
+		rc = EINVAL;
+		goto fini;
+	}
+	bit_and(avail_nodes_bitmap, switches_bitmap[best_fit_inx]);
+
+	/* Identify usable leafs (within higher switch having best fit) */
+	for (j=0; j<switch_record_cnt; j++) {
+		if ((switch_record_table[j].level != 0) ||
+		    (!bit_super_set(switches_bitmap[j], 
+				    switches_bitmap[best_fit_inx]))) {
+			switches_node_cnt[j] = 0;
+		}
+	}
+
+	/* Select resources from these leafs on a best-fit basis */
+	while ((max_nodes > 0) && ((rem_nodes > 0) || (rem_cpus > 0))) {
+		best_fit_cpus = best_fit_nodes = best_fit_sufficient = 0;
+		for (j=0; j<switch_record_cnt; j++) {
+			if (switches_node_cnt[j] == 0)
+				continue;
+			sufficient = (switches_cpu_cnt[j] >= rem_cpus) &&
+				     _enough_nodes(switches_node_cnt[j], 
+						   rem_nodes, min_nodes, 
+						   req_nodes);
+			/* If first possibility OR */
+			/* first set large enough for request OR */
+			/* tightest fit (less resource waste) OR */
+			/* nothing yet large enough, but this is biggest */
+			if ((best_fit_nodes == 0) ||	
+			    (sufficient && (best_fit_sufficient == 0)) ||
+			    (sufficient && 
+			     (switches_cpu_cnt[j] < best_fit_cpus)) ||
+			    ((sufficient == 0) && 
+			     (switches_cpu_cnt[j] > best_fit_cpus))) {
+				best_fit_cpus =  switches_cpu_cnt[j];
+				best_fit_nodes = switches_node_cnt[j];
+				best_fit_location = j;
+				best_fit_sufficient = sufficient;
+			}
+		}
+		if (best_fit_nodes == 0)
+			break;
+		/* Use select nodes from this leaf */
+		first = bit_ffs(switches_bitmap[best_fit_location]);
+		last  = bit_fls(switches_bitmap[best_fit_location]);
+		for (i=first; ((i<=last) && (first>=0)); i++) {
+			if (!bit_test(switches_bitmap[best_fit_location], i))
+				continue;
+
+			bit_clear(switches_bitmap[best_fit_location], i);
+			switches_node_cnt[best_fit_location]--;
+			avail_cpus = _get_avail_cpus(job_ptr, i);
+			switches_cpu_cnt[best_fit_location] -= avail_cpus;
+
+			if (bit_test(bitmap, i)) {
+				/* node on multiple leaf switches
+				 * and already selected */
+				continue;
+			}
+
+			bit_set(bitmap, i);
+			rem_nodes--;
+			max_nodes--;
+			rem_cpus   -= avail_cpus;
+			alloc_cpus += avail_cpus;
+			total_cpus += _get_total_cpus(i);
+			if ((max_nodes <= 0) || 
+			    ((rem_nodes <= 0) && (rem_cpus <= 0)))
+				break;
+		}
+		switches_node_cnt[best_fit_location] = 0;
+	}
+	if ((rem_cpus <= 0) && 
+	    _enough_nodes(0, rem_nodes, min_nodes, req_nodes)) {
+		rc = SLURM_SUCCESS;
+	} else
+		rc = EINVAL;
+
+ fini:	if (rc == SLURM_SUCCESS) {
+		/* Job's total_procs is needed for SELECT_MODE_WILL_RUN */
+		job_ptr->total_procs = total_cpus;
+	}
+	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]);
+	xfree(switches_bitmap);
+	xfree(switches_cpu_cnt);
+	xfree(switches_node_cnt);
+	xfree(switches_required);
+
+	return rc;
+}
 extern int select_p_job_begin(struct job_record *job_ptr)
 {
 	int rc = SLURM_SUCCESS;
@@ -998,11 +1508,6 @@ extern int select_p_job_resume(struct job_record *job_ptr)
 	return SLURM_SUCCESS;
 }
 
-extern int select_p_get_job_cores(uint32_t job_id, int alloc_index, int s)
-{
-	return 0;
-}
-
 extern int select_p_job_ready(struct job_record *job_ptr)
 {
 	if (job_ptr->job_state != JOB_RUNNING)
@@ -1026,11 +1531,6 @@ extern int select_p_get_select_nodeinfo (struct node_record *node_ptr,
 
 extern int select_p_update_nodeinfo (struct job_record *job_ptr)
 {
-	int i, node_inx;
-	ListIterator step_iterator;
-	struct step_record *step_ptr;
-	uint32_t step_mem;
-
 	xassert(job_ptr);
 
 	slurm_mutex_lock(&cr_mutex);
@@ -1038,39 +1538,6 @@ extern int select_p_update_nodeinfo (struct job_record *job_ptr)
 		_init_node_cr();
 	slurm_mutex_unlock(&cr_mutex);
 
-	if ((job_ptr->job_state != JOB_RUNNING)
-	&&  (job_ptr->job_state != JOB_SUSPENDED))
-		return SLURM_SUCCESS;
-	if ((cr_type != CR_MEMORY) || (job_ptr->details == NULL) || 
-	    (job_ptr->details->shared == 0) || job_ptr->details->job_min_memory)
-		return SLURM_SUCCESS;
-
-	slurm_mutex_lock(&cr_mutex);
-	step_iterator = list_iterator_create (job_ptr->step_list);
-	while ((step_ptr = (struct step_record *) list_next (step_iterator))) {
-		if ((step_ptr->step_node_bitmap == NULL) ||
-		    (step_ptr->step_layout == NULL) ||
-		    (step_ptr->mem_per_task == 0) ||
-		    (_find_step(step_ptr)))	/* already added */
-			continue;
-#if SELECT_DEBUG
-		info("select_p_update_nodeinfo: %u.%u mem:%u", 
-		     step_ptr->job_ptr->job_id, step_ptr->step_id, 
-		     step_ptr->mem_per_task);
-#endif
-		node_inx = -1;
-		for (i = 0; i < select_node_cnt; i++) {
-			if (bit_test(step_ptr->step_node_bitmap, i) == 0)
-				continue;
-			node_inx++;
-			step_mem = step_ptr->step_layout->tasks[node_inx] * 
-				   step_ptr->mem_per_task;
-			node_cr_ptr[i].alloc_memory += step_mem;
-		}
-		_add_step(step_ptr);
-	}
-	list_iterator_destroy (step_iterator);
-	slurm_mutex_unlock(&cr_mutex);
 	return SLURM_SUCCESS;
 }
 
@@ -1083,44 +1550,9 @@ extern int select_p_update_sub_node (update_part_msg_t *part_desc_ptr)
 {
 	return SLURM_SUCCESS;
 }
-extern int select_p_get_extra_jobinfo (struct node_record *node_ptr, 
-                                       struct job_record *job_ptr, 
-                                       enum select_data_info info,
-                                       void *data)
-{
-	int rc = SLURM_SUCCESS;
-	uint16_t *tmp_16;
-
-	xassert(job_ptr);
-	xassert(job_ptr->magic == JOB_MAGIC);
-
-	switch (info) {
-	case SELECT_AVAIL_CPUS:
-		tmp_16 = (uint16_t *) data;
-
-		if (job_ptr->details &&
-		    ((job_ptr->details->cpus_per_task > 1) ||
-		     (job_ptr->details->mc_ptr))) {
-			int index = (node_ptr - node_record_table_ptr);
-			*tmp_16 = _get_avail_cpus(job_ptr, index);
-		} else {
-			if (slurmctld_conf.fast_schedule) {
-				*tmp_16 = node_ptr->config_ptr->cpus;
-			} else {
-				*tmp_16 = node_ptr->cpus;
-			}
-		}
-		break;
-	default:
-		error("select_g_get_extra_jobinfo info %d invalid", info);
-		rc = SLURM_ERROR;
-		break;
-	}
-	
-	return rc;
-}
 
 extern int select_p_get_info_from_plugin (enum select_data_info info,
+					  struct job_record *job_ptr,
 					  void *data)
 {
 	return SLURM_SUCCESS;
@@ -1150,6 +1582,11 @@ extern int select_p_reconfigure(void)
 	return SLURM_SUCCESS;
 }
 
+extern List select_p_get_config(void)
+{
+	return NULL;
+}
+
 /*
  * deallocate resources that were assigned to this job 
  *
@@ -1160,8 +1597,9 @@ static int _rm_job_from_nodes(struct node_cr_record *node_cr_ptr,
 			      struct job_record *job_ptr, char *pre_err, 
 			      int remove_all)
 {
-	int i, rc = SLURM_SUCCESS;
+	int i, i_first, i_last, rc = SLURM_SUCCESS;
 	struct part_cr_record *part_cr_ptr;
+	select_job_res_t select_ptr;
 	uint32_t job_memory, job_memory_cpu = 0, job_memory_node = 0;
 
 	if (node_cr_ptr == NULL) {
@@ -1178,8 +1616,20 @@ static int _rm_job_from_nodes(struct node_cr_record *node_cr_ptr,
 			job_memory_node = job_ptr->details->job_min_memory;
 	}
 
-	for (i = 0; i < select_node_cnt; i++) {
-		if (bit_test(job_ptr->node_bitmap, i) == 0)
+	if ((select_ptr = job_ptr->select_job) == NULL) {
+		error("job %u lacks a select_job_res struct",
+		      job_ptr->job_id);
+		return SLURM_ERROR;
+	}
+	i_first = bit_ffs(select_ptr->node_bitmap);
+	i_last  = bit_fls(select_ptr->node_bitmap);
+	if (i_first < 0) {
+		error("job %u allocated nodes which have been removed "
+		      "from slurm.conf", job_ptr->job_id);
+		return SLURM_ERROR;
+	}
+	for (i = i_first; i <= i_last; i++) {
+		if (bit_test(select_ptr->node_bitmap, i) == 0)
 			continue;
 		if (job_memory_cpu == 0)
 			job_memory = job_memory_node;
@@ -1231,9 +1681,17 @@ static int _rm_job_from_nodes(struct node_cr_record *node_cr_ptr,
 			break;
 		}
 		if (part_cr_ptr == NULL) {
-			error("%s: could not find partition %s for node %s",
-				pre_err, job_ptr->part_ptr->name,
-				node_record_table_ptr[i].name);
+			if(job_ptr->part_ptr)
+				error("%s: could not find partition "
+				      "%s for node %s",
+				      pre_err, job_ptr->part_ptr->name,
+				      node_record_table_ptr[i].name);
+			else
+				error("%s: no partition ptr given for "
+				      "job %u and node %s",
+				      pre_err, job_ptr->job_id,
+				      node_record_table_ptr[i].name);
+				
 			rc = SLURM_ERROR;
 		}
 	}
@@ -1251,8 +1709,9 @@ static int _add_job_to_nodes(struct node_cr_record *node_cr_ptr,
 			     struct job_record *job_ptr, char *pre_err, 
 			     int alloc_all)
 {
-	int i, rc = SLURM_SUCCESS, exclusive = 0;
+	int i, i_first, i_last, rc = SLURM_SUCCESS, exclusive = 0;
 	struct part_cr_record *part_cr_ptr;
+	select_job_res_t select_ptr;
 	uint32_t job_memory_cpu = 0, job_memory_node = 0;
 
 	if (node_cr_ptr == NULL) {
@@ -1272,8 +1731,15 @@ static int _add_job_to_nodes(struct node_cr_record *node_cr_ptr,
 	if (job_ptr->details->shared == 0)
 		exclusive = 1;
 
-	for (i = 0; i < select_node_cnt; i++) {
-		if (bit_test(job_ptr->node_bitmap, i) == 0)
+	if ((select_ptr = job_ptr->select_job) == NULL) {
+		error("job %u lacks a select_job_res struct",
+		      job_ptr->job_id);
+		return SLURM_ERROR;
+	}
+	i_first = bit_ffs(select_ptr->node_bitmap);
+	i_last  = bit_fls(select_ptr->node_bitmap);
+	for (i=i_first; ((i<=i_last) && (i_first>=0)); i++) {
+		if (bit_test(select_ptr->node_bitmap, i) == 0)
 			continue;
 		if (job_memory_cpu == 0)
 			node_cr_ptr[i].alloc_memory += job_memory_node;
@@ -1400,13 +1866,12 @@ static void _init_node_cr(void)
 {
 	struct part_record *part_ptr;
 	struct part_cr_record *part_cr_ptr;
+	select_job_res_t select_ptr;
 	ListIterator part_iterator;
 	struct job_record *job_ptr;
 	ListIterator job_iterator;
-	uint32_t job_memory_cpu, job_memory_node, step_mem = 0;
-	int exclusive, i, node_inx;
-	ListIterator step_iterator;
-	struct step_record *step_ptr;
+	uint32_t job_memory_cpu, job_memory_node;
+	int exclusive, i, i_first, i_last;
 
 	if (node_cr_ptr)
 		return;
@@ -1436,16 +1901,23 @@ static void _init_node_cr(void)
 		if ((job_ptr->job_state != JOB_RUNNING) &&
 		    (job_ptr->job_state != JOB_SUSPENDED))
 			continue;
+		if ((select_ptr = job_ptr->select_job) == NULL) {
+			error("job %u lacks a select_job_res struct",
+			      job_ptr->job_id);
+			continue;
+		}
 
 		job_memory_cpu  = 0;
 		job_memory_node = 0;
 		if (job_ptr->details && 
 		    job_ptr->details->job_min_memory && (cr_type == CR_MEMORY)) {
 			if (job_ptr->details->job_min_memory & MEM_PER_CPU) {
-				job_memory_cpu = job_ptr->details->job_min_memory &
+				job_memory_cpu = job_ptr->details->
+						 job_min_memory &
 						 (~MEM_PER_CPU);
 			} else {
-				job_memory_node = job_ptr->details->job_min_memory;
+				job_memory_node = job_ptr->details->
+						  job_min_memory;
 			}
 		}
 		if (job_ptr->details->shared == 0)
@@ -1453,10 +1925,14 @@ static void _init_node_cr(void)
 		else
 			exclusive = 0;
 
-		for (i = 0; i < select_node_cnt; i++) {
-			if (job_ptr->node_bitmap == NULL)
-				break;
-			if (!bit_test(job_ptr->node_bitmap, i))
+		/* Use select_ptr->node_bitmap rather than job_ptr->node_bitmap
+		 * which can have DOWN nodes cleared from the bitmap */
+		if (select_ptr->node_bitmap == NULL)
+			continue;
+		i_first = bit_ffs(select_ptr->node_bitmap);
+		i_last  = bit_fls(select_ptr->node_bitmap);
+		for (i=i_first; ((i<=i_last) && (i_first>=0)); i++) {
+			if (!bit_test(select_ptr->node_bitmap, i))
 				continue;
 			if (exclusive) {
 				if (node_cr_ptr[i].exclusive_jobid) {
@@ -1498,40 +1974,6 @@ static void _init_node_cr(void)
 					node_record_table_ptr[i].name);
 			}
 		}
-
-		if (job_ptr->details->job_min_memory || 
-		    (job_ptr->details->shared == 0) || (cr_type != CR_MEMORY))
-			continue;
-
-		step_iterator = list_iterator_create (job_ptr->step_list);
-		while ((step_ptr = (struct step_record *) list_next (step_iterator))) {
-			if ((step_ptr->step_node_bitmap == NULL) ||
-			    (step_ptr->step_layout == NULL))
-				continue;
-
-			if (_find_step(step_ptr)) {
-				slurm_mutex_unlock(&cr_mutex);
-				error("_init_node_cr: duplicate for step %u.%u",
-				      job_ptr->job_id, step_ptr->step_id);
-				continue;
-			}
-
-			node_inx = -1;
-			for (i = 0; i < select_node_cnt; i++) {
-				if (bit_test(step_ptr->step_node_bitmap, i) == 0)
-					continue;
-				node_inx++;
-				step_mem = step_ptr->step_layout->tasks[node_inx] * 
-					   step_ptr->mem_per_task;
-				node_cr_ptr[i].alloc_memory += step_mem;
-			}
-#if SELECT_DEBUG
-			info("_init_node_cr: added %u.%u mem:%u", 
-			     job_ptr->job_id, step_ptr->step_id, step_mem);
-#endif
-			_add_step(step_ptr);
-		}
-		list_iterator_destroy (step_iterator);
 	}
 	list_iterator_destroy(job_iterator);
 	_dump_node_cr(node_cr_ptr);
@@ -1628,195 +2070,10 @@ static void _cr_job_list_del(void *x)
 {
 	xfree(x);
 }
+
 static int  _cr_job_list_sort(void *x, void *y)
 {
 	struct job_record **job1_pptr = (struct job_record **) x;
 	struct job_record **job2_pptr = (struct job_record **) y;
 	return (int) difftime(job1_pptr[0]->end_time, job2_pptr[0]->end_time);
 }
-
-extern int select_p_step_begin(struct step_record *step_ptr)
-{
-	slurm_step_layout_t *step_layout = step_ptr->step_layout;
-	int i, node_inx = -1;
-	uint32_t avail_mem, step_mem;
-
-	xassert(step_ptr->job_ptr);
-	xassert(step_ptr->job_ptr->details);
-	xassert(step_ptr->step_node_bitmap);
-
-#if SELECT_DEBUG
-	info("select_p_step_begin: mem:%u", step_ptr->mem_per_task);
-#endif
-	if (step_layout == NULL)
-		return SLURM_SUCCESS;	/* batch script */
-	/* Don't track step memory use if job has reserved memory OR
-	 * job has whole node OR we don't track memory usage */
-	if (step_ptr->job_ptr->details->job_min_memory || 
-	    (step_ptr->job_ptr->details->shared == 0) ||
-	    (cr_type != CR_MEMORY))
-		return SLURM_SUCCESS;
-
-	/* test if there is sufficient memory */
-	slurm_mutex_lock(&cr_mutex);
-	if (node_cr_ptr == NULL)
-		_init_node_cr();
-	if (_find_step(step_ptr)) {
-		slurm_mutex_unlock(&cr_mutex);
-		error("select_p_step_begin: duplicate for step %u.%u",
-		      step_ptr->job_ptr->job_id, step_ptr->step_id);
-		return SLURM_SUCCESS;
-	}
-	for (i = 0; i < select_node_cnt; i++) {
-		if (bit_test(step_ptr->step_node_bitmap, i) == 0)
-			continue;
-		node_inx++;
-		step_mem = step_layout->tasks[node_inx] * step_ptr->mem_per_task;
-		if (select_fast_schedule)
-			avail_mem = node_record_table_ptr[i].
-				    config_ptr->real_memory;
-		else
-			avail_mem = node_record_table_ptr[i].real_memory;
-#if SELECT_DEBUG
-		info("alloc %u need %u avail %u", 
-		     node_cr_ptr[i].alloc_memory, step_mem, avail_mem);
-#endif
-		if ((node_cr_ptr[i].alloc_memory + step_mem) > avail_mem) {
-			slurm_mutex_unlock(&cr_mutex);
-			return SLURM_ERROR;	/* no room */
-		}
-	}
-
-	/* reserve the memory */
-	node_inx = -1;
-	for (i = 0; i < select_node_cnt; i++) {
-		if (bit_test(step_ptr->step_node_bitmap, i) == 0)
-			continue;
-		node_inx++;
-		step_mem = step_layout->tasks[node_inx] * step_ptr->mem_per_task;
-		node_cr_ptr[i].alloc_memory += step_mem;
-	}
-	_add_step(step_ptr);
-	slurm_mutex_unlock(&cr_mutex);
-	return SLURM_SUCCESS;
-}
-
-extern int select_p_step_fini(struct step_record *step_ptr)
-{
-	slurm_step_layout_t *step_layout = step_ptr->step_layout;
-	int i, node_inx = -1;
-	uint32_t step_mem;
-
-	xassert(step_ptr->job_ptr);
-	xassert(step_ptr->job_ptr->details);
-	xassert(step_ptr->step_node_bitmap);
-
-#if SELECT_DEBUG
-	info("select_p_step_fini: mem:%u", step_ptr->mem_per_task);
-#endif
-	if (step_layout == NULL)
-		return SLURM_SUCCESS;	/* batch script */
-	/* Don't track step memory use if job has reserved memory OR
-	 * job has whole node OR we don't track memory usage */
-	if (step_ptr->job_ptr->details->job_min_memory || 
-	    (step_ptr->job_ptr->details->shared == 0) ||
-	    (cr_type != CR_MEMORY))
-		return SLURM_SUCCESS;
-
-	/* release the memory */
-	slurm_mutex_lock(&cr_mutex);
-	if (node_cr_ptr == NULL)
-		_init_node_cr();
-	if (!_find_step(step_ptr)) {
-		slurm_mutex_unlock(&cr_mutex);
-		error("select_p_step_fini: could not find step %u.%u",
-		      step_ptr->job_ptr->job_id, step_ptr->step_id);
-		return SLURM_ERROR;
-	}
-	for (i = 0; i < select_node_cnt; i++) {
-		if (bit_test(step_ptr->step_node_bitmap, i) == 0)
-			continue;
-		node_inx++;
-		step_mem = step_layout->tasks[node_inx] * step_ptr->mem_per_task;
-		if (node_cr_ptr[i].alloc_memory >= step_mem)
-			node_cr_ptr[i].alloc_memory -= step_mem;
-		else {
-			node_cr_ptr[i].alloc_memory = 0;
-			error("select_p_step_fini: alloc_memory underflow on %s",
-				node_record_table_ptr[i].name);
-		}
-	}
-	_remove_step(step_ptr);
-	slurm_mutex_unlock(&cr_mutex);
-	return SLURM_SUCCESS;
-}
-
-/* return 1 if found, 0 otherwise */
-static int _find_step(struct step_record *step_ptr)
-{
-	ListIterator step_iterator;
-	struct step_cr_record *step;
-	int found = 0;
-
-	if (!step_cr_list)
-		return found;
-	step_iterator = list_iterator_create(step_cr_list);
-	if (step_iterator == NULL) {
-		fatal("list_iterator_create: memory allocation failure");
-		return found;
-	}
-	while ((step = list_next(step_iterator))) {
-		if ((step->job_id  == step_ptr->job_ptr->job_id) &&
-		    (step->step_id == step_ptr->step_id)) {
-			found = 1;
-			break;
-		}
-	}
-	list_iterator_destroy(step_iterator);
-	return found;
-}
-static int _add_step(struct step_record *step_ptr)
-{
-	struct step_cr_record *step = xmalloc(sizeof(struct step_cr_record));
-
-	step->job_id  = step_ptr->job_ptr->job_id;
-	step->step_id = step_ptr->step_id;
-	if (!step_cr_list) {
-		step_cr_list = list_create(_del_list_step);
-		if (!step_cr_list)
-			fatal("list_create: memory allocation failure");
-	}
-	if (list_append(step_cr_list, step) == NULL) {
-		fatal("list_append: memory allocation failure");
-		return SLURM_ERROR;
-	}
-	return SLURM_SUCCESS;
-}
-static int _remove_step(struct step_record *step_ptr)
-{
-	ListIterator step_iterator;
-	struct step_cr_record *step;
-	int found = 0;
-
-	if (!step_cr_list)
-		return found;
-	step_iterator = list_iterator_create(step_cr_list);
-	if (step_iterator == NULL) {
-		fatal("list_iterator_create: memory allocation failure");
-		return found;
-	}
-	while ((step = list_next(step_iterator))) {
-		if ((step->job_id  == step_ptr->job_ptr->job_id) &&
-		    (step->step_id == step_ptr->step_id)) {
-			found = 1;
-			list_delete_item(step_iterator);
-			break;
-		}
-	}
-	list_iterator_destroy(step_iterator);
-	return found;
-}
-static void _del_list_step(void *x)
-{
-	xfree(x);
-}
diff --git a/src/plugins/select/linear/select_linear.h b/src/plugins/select/linear/select_linear.h
index cd40a7fd9..bcb0b010b 100644
--- a/src/plugins/select/linear/select_linear.h
+++ b/src/plugins/select/linear/select_linear.h
@@ -1,12 +1,13 @@
 /*****************************************************************************\
  *  select_linear.h 
  *****************************************************************************
- *  Copyright (C) 2006 Hewlett-Packard Development Company, L.P.
+ *  Copyright (C) 2006-2007 Hewlett-Packard Development Company, L.P.
  *  Written by Susanne M. Balle, <susanne.balle@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -69,13 +70,4 @@ struct node_cr_record {
 					 * otherwise value is zero */
 };
 
-/*
- * step_cr_record keeps track of the steps which have been allocated memory
- * independently of the job (ie. the job itself has no reserved memory
- */
-struct step_cr_record {
-	uint32_t job_id;
-	uint32_t step_id;
-};
-
 #endif /* !_SELECT_LINEAR_H */
diff --git a/src/plugins/switch/Makefile.in b/src/plugins/switch/Makefile.in
index b9c9f4a36..468c34273 100644
--- a/src/plugins/switch/Makefile.in
+++ b/src/plugins/switch/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/switch/elan/Makefile.in b/src/plugins/switch/elan/Makefile.in
index f918beffc..cd3269677 100644
--- a/src/plugins/switch/elan/Makefile.in
+++ b/src/plugins/switch/elan/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -115,6 +119,10 @@ 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@
diff --git a/src/plugins/switch/elan/qsw.c b/src/plugins/switch/elan/qsw.c
index 98d317af6..a3548a731 100644
--- a/src/plugins/switch/elan/qsw.c
+++ b/src/plugins/switch/elan/qsw.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  qsw.c - Library routines for initiating jobs on QsNet. 
- *  $Id: qsw.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: qsw.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jim Garlick <garlick@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/switch/elan/qsw.h b/src/plugins/switch/elan/qsw.h
index d82345791..d82bd6391 100644
--- a/src/plugins/switch/elan/qsw.h
+++ b/src/plugins/switch/elan/qsw.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jim Garlick <garlick@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/switch/elan/switch_elan.c b/src/plugins/switch/elan/switch_elan.c
index 2e89fec60..62d19629b 100644
--- a/src/plugins/switch/elan/switch_elan.c
+++ b/src/plugins/switch/elan/switch_elan.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  switch_elan.c - Library routines for initiating jobs on QsNet. 
- *  $Id: switch_elan.c 13672 2008-03-19 23:10:58Z jette $
  *****************************************************************************
- *  Copyright (C) 2003-2006 The Regents of the University of California.
+ *  Copyright (C) 2003-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Kevin Tew <tew1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -309,12 +310,6 @@ int switch_p_libstate_clear ( void )
 	return qsw_clear();
 }
 
-
-bool switch_p_no_frag ( void )
-{
-	return true;
-}
-
 /*
  * switch functions for job step specific credential
  */
diff --git a/src/plugins/switch/federation/Makefile.in b/src/plugins/switch/federation/Makefile.in
index af6555c5f..4d4bd36da 100644
--- a/src/plugins/switch/federation/Makefile.in
+++ b/src/plugins/switch/federation/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -118,6 +122,10 @@ 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@
diff --git a/src/plugins/switch/federation/federation.c b/src/plugins/switch/federation/federation.c
index 6e20a93f1..0f6c62977 100644
--- a/src/plugins/switch/federation/federation.c
+++ b/src/plugins/switch/federation/federation.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
- **  federation.c - Library routines for initiating jobs on IBM Federation
- **  $Id: federation.c 14365 2008-06-26 19:17:00Z jette $
+ *  federation.c - Library routines for initiating jobs on IBM Federation
  *****************************************************************************
- *  Copyright (C) 2004 The Regents of the University of California.
+ *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jason King <jking@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/switch/federation/federation.h b/src/plugins/switch/federation/federation.h
index 7b321609c..86ca383a9 100644
--- a/src/plugins/switch/federation/federation.h
+++ b/src/plugins/switch/federation/federation.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  **  federation.h - Library routines for initiating jobs on IBM Federation
- **  $Id: federation.h 13672 2008-03-19 23:10:58Z jette $
+ **  $Id: federation.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jason King <jking@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/switch/federation/federation_keys.h b/src/plugins/switch/federation/federation_keys.h
index 9f785dcda..3154adc2f 100644
--- a/src/plugins/switch/federation/federation_keys.h
+++ b/src/plugins/switch/federation/federation_keys.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  **  federation_keys.h - Key definitions used by the get_jobinfo functions
- **  $Id: federation_keys.h 13672 2008-03-19 23:10:58Z jette $
+ **  $Id: federation_keys.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jason King <jking@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/plugins/switch/federation/switch_federation.c b/src/plugins/switch/federation/switch_federation.c
index 1e8bd41c2..928922084 100644
--- a/src/plugins/switch/federation/switch_federation.c
+++ b/src/plugins/switch/federation/switch_federation.c
@@ -1,15 +1,16 @@
 /***************************************************************************** \
- **  switch_federation.c - Library routines for initiating jobs on IBM 
- **	Federation
- **  $Id: switch_federation.c 13672 2008-03-19 23:10:58Z jette $
+ *  switch_federation.c - Library routines for initiating jobs on IBM 
+ *	Federation
  *****************************************************************************
- *  Copyright (C) 2004-2006 The Regents of the University of California.
+ *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jason King <jking@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -607,10 +608,6 @@ int switch_p_job_attach(switch_jobinfo_t jobinfo, char ***env,
 /*
  * switch functions for other purposes
  */
-bool switch_p_no_frag(void)
-{
-	return false;
-}
 
 /* 
  * Linear search through table of errno values and strings,
diff --git a/src/plugins/switch/none/Makefile.in b/src/plugins/switch/none/Makefile.in
index cedf45a31..96d5e4a4d 100644
--- a/src/plugins/switch/none/Makefile.in
+++ b/src/plugins/switch/none/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/switch/none/switch_none.c b/src/plugins/switch/none/switch_none.c
index 7d0b614f5..d22f1a83c 100644
--- a/src/plugins/switch/none/switch_none.c
+++ b/src/plugins/switch/none/switch_none.c
@@ -1,13 +1,15 @@
 /*****************************************************************************\
  *  switch_none.c - Library for managing a switch with no special handling.
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -221,11 +223,6 @@ extern int switch_p_get_jobinfo(switch_jobinfo_t switch_job,
 /*
  * switch functions for other purposes
  */
-bool switch_p_no_frag ( void )
-{
-	return false;
-}
-
 extern int switch_p_get_errno(void)
 {
 	return SLURM_SUCCESS;
diff --git a/src/plugins/task/Makefile.in b/src/plugins/task/Makefile.in
index ec2e57c5b..72b37a588 100644
--- a/src/plugins/task/Makefile.in
+++ b/src/plugins/task/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -91,6 +95,10 @@ 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@
diff --git a/src/plugins/task/affinity/Makefile.in b/src/plugins/task/affinity/Makefile.in
index 21cb51f77..5beb293e8 100644
--- a/src/plugins/task/affinity/Makefile.in
+++ b/src/plugins/task/affinity/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -121,6 +125,10 @@ 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@
diff --git a/src/plugins/task/affinity/affinity.c b/src/plugins/task/affinity/affinity.c
index f6fb34144..e330f5abc 100644
--- a/src/plugins/task/affinity/affinity.c
+++ b/src/plugins/task/affinity/affinity.c
@@ -5,7 +5,8 @@
  *  Copyright (C) 2005-2006 Hewlett-Packard Development Company, L.P.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -67,6 +68,8 @@ void slurm_chkaffinity(cpu_set_t *mask, slurmd_job_t *job, int statval)
 			units = "_cores";
 		else if (job->cpu_bind_type & CPU_BIND_TO_SOCKETS)
 			units = "_sockets";
+		else if (job->cpu_bind_type & CPU_BIND_TO_LDOMS)
+			units = "_ldoms";
 		else
 			units = "";
 		if (job->cpu_bind_type & CPU_BIND_RANK) {
@@ -75,6 +78,12 @@ void slurm_chkaffinity(cpu_set_t *mask, slurmd_job_t *job, int statval)
 			bind_type = "MAP ";
 		} else if (job->cpu_bind_type & CPU_BIND_MASK) {
 			bind_type = "MASK";
+		} else if (job->cpu_bind_type & CPU_BIND_LDRANK) {
+			bind_type = "LDRANK";
+		} else if (job->cpu_bind_type & CPU_BIND_LDMAP) {
+			bind_type = "LDMAP ";
+		} else if (job->cpu_bind_type & CPU_BIND_LDMASK) {
+			bind_type = "LDMASK";
 		} else if (job->cpu_bind_type & (~CPU_BIND_VERBOSE)) {
 			bind_type = "UNK ";
 		} else {
@@ -95,12 +104,42 @@ void slurm_chkaffinity(cpu_set_t *mask, slurmd_job_t *job, int statval)
 			status);
 }
 
+/* If HAVE_NUMA, create mask for given ldom.
+ * Otherwise create mask for given socket
+ */
+static int _bind_ldom(uint32_t ldom, cpu_set_t *mask)
+{
+#ifdef HAVE_NUMA
+	int c, maxcpus, nnid = 0;
+	int nmax = numa_max_node();
+	if (nmax > 0)
+		nnid = ldom % (nmax+1);
+	debug3("task/affinity: binding to NUMA node %d", nnid);
+	maxcpus = conf->sockets * conf->cores * conf->threads;
+	for (c = 0; c < maxcpus; c++) {
+		if (slurm_get_numa_node(c) == nnid)
+			CPU_SET(c, mask);
+	}
+	return true;
+#else
+	uint16_t s, sid  = ldom % conf->sockets;
+	uint16_t i, cpus = conf->cores * conf->threads;
+	if (!conf->block_map)
+		return false;
+	for (s = sid * cpus; s < (sid+1) * cpus; s++) {
+		i = s % conf->block_map_size;
+		CPU_SET(conf->block_map[i], mask);
+	}
+	return true;
+#endif
+}
+
 int get_cpuset(cpu_set_t *mask, slurmd_job_t *job)
 {
-	int nummasks, maskid, i;
+	int nummasks, maskid, i, threads;
 	char *curstr, *selstr;
 	char mstr[1 + CPU_SETSIZE / 4];
-	int local_id = job->envtp->localid;
+	uint32_t local_id = job->envtp->localid;
 	char buftype[1024];
 
 	slurm_sprint_cpu_bind_type(buftype, job->cpu_bind_type);
@@ -113,9 +152,17 @@ int get_cpuset(cpu_set_t *mask, slurmd_job_t *job)
 	}
 
 	if (job->cpu_bind_type & CPU_BIND_RANK) {
-		CPU_SET(job->envtp->localid % job->cpus, mask);
+		threads = MAX(conf->threads, 1);
+		CPU_SET(job->envtp->localid % (job->cpus*threads), mask);
 		return true;
 	}
+	
+	if (job->cpu_bind_type & CPU_BIND_LDRANK) {
+		/* if HAVE_NUMA then bind this task ID to it's corresponding
+		 * locality domain ID. Otherwise, bind this task ID to it's
+		 * corresponding socket ID */
+		return _bind_ldom(local_id, mask);
+	}
 
 	if (!job->cpu_bind)
 		return false;
@@ -180,6 +227,50 @@ int get_cpuset(cpu_set_t *mask, slurmd_job_t *job)
 		CPU_SET(mycpu, mask);
 		return true;
 	}
+	
+	if (job->cpu_bind_type & CPU_BIND_LDMASK) {
+		/* if HAVE_NUMA bind this task to the locality domains
+		 * identified in mstr. Otherwise bind this task to the
+		 * sockets identified in mstr */
+		int len = strlen(mstr);
+		char *ptr = mstr + len - 1;
+		uint32_t base = 0;
+
+		curstr = mstr;
+		/* skip 0x, it's all hex anyway */
+		if (len > 1 && !memcmp(mstr, "0x", 2L))
+			curstr += 2;
+		while (ptr >= curstr) {
+			char val = char_to_val(*ptr);
+			if (val == (char) -1)
+				return false;
+			if (val & 1)
+				_bind_ldom(base, mask);
+			if (val & 2)
+				_bind_ldom(base + 1, mask);
+			if (val & 4)
+				_bind_ldom(base + 2, mask);
+			if (val & 8)
+				_bind_ldom(base + 3, mask);
+			len--;
+			ptr--;
+			base += 4;
+		}
+		return true;
+	}
+	
+	if (job->cpu_bind_type & CPU_BIND_LDMAP) {
+		/* if HAVE_NUMA bind this task to the given locality
+		 * domain. Otherwise bind this task to the given
+		 * socket */
+		uint32_t myldom = 0;
+		if (strncmp(mstr, "0x", 2) == 0) {
+			myldom = strtoul (&(mstr[2]), NULL, 16);
+		} else {
+			myldom = strtoul (mstr, NULL, 10);
+		}
+		return _bind_ldom(myldom, mask);
+	}
 
 	return false;
 }
@@ -198,9 +289,10 @@ int slurm_setaffinity(pid_t pid, size_t size, const cpu_set_t *mask)
 	rval = sched_setaffinity(pid, mask);
 #  endif
 #endif
-	if (rval)
-		verbose("sched_setaffinity(%d,%d,0x%s) failed with status %d",
-				pid, size, cpuset_to_str(mask, mstr), rval);
+	if (rval) {
+		verbose("sched_setaffinity(%d,%d,0x%s) failed: %m",
+			pid, size, cpuset_to_str(mask, mstr));
+	}
 	return (rval);
 }
 
@@ -219,10 +311,12 @@ int slurm_getaffinity(pid_t pid, size_t size, cpu_set_t *mask)
 	rval = sched_getaffinity(pid, mask);
 #  endif
 #endif
-	if (rval)
+	if (rval) {
 		verbose("sched_getaffinity(%d,%d,0x%s) failed with status %d",
 				pid, size, cpuset_to_str(mask, mstr), rval);
-
-	debug3("sched_getaffinity(%d) = 0x%s", pid, cpuset_to_str(mask, mstr));
+	} else {
+		debug3("sched_getaffinity(%d) = 0x%s",
+		       pid, cpuset_to_str(mask, mstr));
+	}
 	return (rval);
 }
diff --git a/src/plugins/task/affinity/affinity.h b/src/plugins/task/affinity/affinity.h
index 4ee3d27db..29081489e 100644
--- a/src/plugins/task/affinity/affinity.h
+++ b/src/plugins/task/affinity/affinity.h
@@ -5,7 +5,8 @@
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -92,7 +93,9 @@
 #include "src/common/util-net.h"
 #include "src/common/slurm_resource_info.h"
 
+#ifndef CPUSET_DIR
 #define CPUSET_DIR "/dev/cpuset"
+#endif
 
 /*** from affinity.c ***/
 void	slurm_chkaffinity(cpu_set_t *mask, slurmd_job_t *job, int statval);
@@ -112,8 +115,9 @@ int	slurm_set_cpuset(char *base, char *path, pid_t pid, size_t size,
 
 /*** from numa.c ***/
 #ifdef HAVE_NUMA
-int	get_memset(nodemask_t *mask, slurmd_job_t *job);
-void	slurm_chk_memset(nodemask_t *mask, slurmd_job_t *job);
+int	 get_memset(nodemask_t *mask, slurmd_job_t *job);
+void	 slurm_chk_memset(nodemask_t *mask, slurmd_job_t *job);
+uint16_t slurm_get_numa_node(uint16_t cpuid);
 #endif
 
 /*** from schedutils.c ***/
diff --git a/src/plugins/task/affinity/cpuset.c b/src/plugins/task/affinity/cpuset.c
index dfd0a632f..4c1e67466 100644
--- a/src/plugins/task/affinity/cpuset.c
+++ b/src/plugins/task/affinity/cpuset.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2007 The Regents of the University of California.
  *  Written by Don Albert <Don.Albert@Bull.com> and 
  *             Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -99,21 +100,25 @@ int	slurm_build_cpuset(char *base, char *path, uid_t uid, gid_t gid)
 	fd = open(file_path, O_RDONLY);
 	if (fd < 0) {
 		error("open(%s): %m", file_path);
-	} else {
-		rc = read(fd, mstr, sizeof(mstr));
-		close(fd);
-		if (rc < 1)
-			error("read(%s): %m", file_path);
-		snprintf(file_path, sizeof(file_path), "%s/mems", path);
-		fd = open(file_path, O_CREAT | O_WRONLY, 0700);
-		if (fd < 0) {
-			error("open(%s): %m", file_path);
-			return -1;
-		}
-		rc = write(fd, mstr, rc);
-		close(fd);
-		if (rc < 1)
-			error("write(%s): %m", file_path);
+		return -1;
+	}
+	rc = read(fd, mstr, sizeof(mstr));
+	close(fd);
+	if (rc < 1) {
+		error("read(%s): %m", file_path);
+		return -1;
+	}
+	snprintf(file_path, sizeof(file_path), "%s/mems", path);
+	fd = open(file_path, O_CREAT | O_WRONLY, 0700);
+	if (fd < 0) {
+		error("open(%s): %m", file_path);
+		return -1;
+	}
+	rc = write(fd, mstr, rc);
+	close(fd);
+	if (rc < 1) {
+		error("write(%s): %m", file_path);
+		return -1;
 	}
 
 	/* Delete cpuset once its tasks complete.
@@ -126,6 +131,10 @@ int	slurm_build_cpuset(char *base, char *path, uid_t uid, gid_t gid)
 	}
 	rc = write(fd, "1", 2);
 	close(fd);
+	if (rc < 1) {
+		error("write(%s): %m", file_path);
+		return -1;
+	}
 
 	/* Only now can we add tasks.
 	 * We can't add self, so add tasks after exec. */
@@ -134,7 +143,7 @@ int	slurm_build_cpuset(char *base, char *path, uid_t uid, gid_t gid)
 }
 
 int	slurm_set_cpuset(char *base, char *path, pid_t pid, size_t size, 
-		const cpu_set_t *mask)
+			 const cpu_set_t *mask)
 {
 	int fd, rc;
 	char file_path[PATH_MAX];
@@ -169,8 +178,10 @@ int	slurm_set_cpuset(char *base, char *path, pid_t pid, size_t size,
 	} else {
 		rc = read(fd, mstr, sizeof(mstr));
 		close(fd);
-		if (rc < 1)
+		if (rc < 1) {
 			error("read(%s): %m", file_path);
+			return -1;
+		}
 		snprintf(file_path, sizeof(file_path), "%s/mems", path);
 		fd = open(file_path, O_CREAT | O_WRONLY, 0700);
 		if (fd < 0) {
@@ -179,8 +190,10 @@ int	slurm_set_cpuset(char *base, char *path, pid_t pid, size_t size,
 		}
 		rc = write(fd, mstr, rc);
 		close(fd);
-		if (rc < 1)
+		if (rc < 1) {
 			error("write(%s): %m", file_path);
+			return -1;
+		}
 	}
 
 	/* Delete cpuset once its tasks complete.
@@ -267,8 +280,8 @@ int	slurm_set_memset(char *path, nodemask_t *new_mask)
 	int fd, i, max_node;
 	ssize_t rc;
 
-	snprintf(file_path, sizeof(file_path), "%s/mems", CPUSET_DIR);
-	fd = open(file_path, O_CREAT | O_RDONLY, 0700);
+	snprintf(file_path, sizeof(file_path), "%s/mems", path);
+	fd = open(file_path, O_CREAT | O_RDWR, 0700);
 	if (fd < 0) {
 		error("open(%s): %m", file_path);
 		return -1;
diff --git a/src/plugins/task/affinity/dist_tasks.c b/src/plugins/task/affinity/dist_tasks.c
index 357fbc5e0..c0c48c284 100644
--- a/src/plugins/task/affinity/dist_tasks.c
+++ b/src/plugins/task/affinity/dist_tasks.c
@@ -1,10 +1,12 @@
 /*****************************************************************************\
- *  Copyright (C) 2006 Hewlett-Packard Development Company, L.P.
+ *  Copyright (C) 2006-2009 Hewlett-Packard Development Company, L.P.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Written by Susanne M. Balle, <susanne.balle@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -32,83 +34,218 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
 \*****************************************************************************/
 
-#include <limits.h>       /* INT_MAX */
-#include "src/plugins/task/affinity/dist_tasks.h"
-
-static slurm_lllp_ctx_t *lllp_ctx = NULL;	/* binding context */
-static struct node_gids *lllp_tasks = NULL;	/* Keep track of the task count
-						 * for logical processors
-						 * socket/core/thread. */
-static uint32_t lllp_reserved_size = 0;		/* lllp reserved array size */
-static uint32_t *lllp_reserved = NULL;   	/* count of Reserved lllps 
-						 * (socket, core, threads) */
-
-
-static void _task_layout_display_masks(launch_tasks_request_msg_t *req,
-				       const uint32_t *gtid,
-				       const uint32_t maxtasks,
-				       bitstr_t **masks);
-static int _init_lllp(void);
-static int _cleanup_lllp(void);
-static void _print_tasks_per_lllp(void);
+#include "affinity.h"
+#include "dist_tasks.h"
+#include "src/common/bitstring.h"
+#include "src/common/log.h"
+#include "src/common/slurm_cred.h"
+#include "src/common/slurm_protocol_api.h"
+#include "src/common/slurm_resource_info.h"
+#include "src/common/xmalloc.h"
+#include "src/slurmd/slurmd/slurmd.h"
+
+#ifdef HAVE_NUMA
+#include <numa.h>
+#endif
+
+static char *_alloc_mask(launch_tasks_request_msg_t *req,
+			 int *whole_node_cnt, int *whole_socket_cnt, 
+			 int *whole_core_cnt, int *whole_thread_cnt,		 				 int *part_socket_cnt, int *part_core_cnt);
+static bitstr_t *_get_avail_map(launch_tasks_request_msg_t *req,
+				uint16_t *hw_sockets, uint16_t *hw_cores,
+				uint16_t *hw_threads);
+static int _get_local_node_info(slurm_cred_arg_t *arg, uint32_t job_node_id,
+				uint16_t *sockets, uint16_t *cores);
+
 static int _task_layout_lllp_block(launch_tasks_request_msg_t *req,
-				   const uint32_t *gtid,
-				   const uint32_t maxtasks,
-				   bitstr_t ***masks_p);
+				   uint32_t node_id, bitstr_t ***masks_p);
 static int _task_layout_lllp_cyclic(launch_tasks_request_msg_t *req,
-				    const uint32_t *gtid,
-				    const uint32_t maxtasks,
-				    bitstr_t ***masks_p);
-static int _task_layout_lllp_plane(launch_tasks_request_msg_t *req,
-				   const uint32_t *gtid,
-				   const uint32_t maxtasks,
-				   bitstr_t ***masks_p);
-static void _lllp_enlarge_masks(launch_tasks_request_msg_t *req,
-				const uint32_t maxtasks,
-				bitstr_t **masks);
-static void _lllp_use_available(launch_tasks_request_msg_t *req,
-				const uint32_t maxtasks,
-				bitstr_t **masks);
-static bitstr_t *_lllp_map_abstract_mask (bitstr_t *bitmask);
+				    uint32_t node_id, bitstr_t ***masks_p);
+static int _task_layout_lllp_multi(launch_tasks_request_msg_t *req, 
+				    uint32_t node_id, bitstr_t ***masks_p);
+
 static void _lllp_map_abstract_masks(const uint32_t maxtasks,
 				     bitstr_t **masks);
 static void _lllp_generate_cpu_bind(launch_tasks_request_msg_t *req,
 				    const uint32_t maxtasks,
 				    bitstr_t **masks);
-static void _lllp_free_masks(launch_tasks_request_msg_t *req,
-			     const uint32_t maxtasks,
-			     bitstr_t **masks);
-static void _single_mask(const uint16_t nsockets, 
-			 const uint16_t ncores, 
-			 const uint16_t nthreads, 
-			 const uint16_t socket_id,
-			 const uint16_t core_id, 
-			 const uint16_t thread_id,
-			 const bool bind_to_exact_socket,
-			 const bool bind_to_exact_core,
-			 const bool bind_to_exact_thread,
-			 bitstr_t ** single_mask);
-static void _get_resources_this_node(uint16_t *cpus,
-				     uint16_t *sockets,
-				     uint16_t *cores,
-				     uint16_t *threads,
-				     uint16_t *alloc_cores,
-				     uint32_t jobid);
-static void _cr_update_reservation(int reserve, uint32_t *reserved, 
-				   bitstr_t *mask);
-
-/* Convenience macros: 
- *     SCT_TO_LLLP   sockets cores threads to abstract block LLLP index
- */
-#define SCT_TO_LLLP(s,c,t,ncores,nthreads)			\
-	(s)*((ncores)*(nthreads)) + (c)*(nthreads) + (t)
+
 /*     BLOCK_MAP     physical machine LLLP index to abstract block LLLP index
  *     BLOCK_MAP_INV physical abstract block LLLP index to machine LLLP index
  */
 #define BLOCK_MAP(index)	_block_map(index, conf->block_map)
 #define BLOCK_MAP_INV(index)	_block_map(index, conf->block_map_inv)
 
-static uint16_t _block_map(uint16_t index, uint16_t *map);
+
+/* _block_map
+ *
+ * safely returns a mapped index using a provided block map
+ *
+ * IN - index to map
+ * IN - map to use
+ */
+static uint16_t _block_map(uint16_t index, uint16_t *map)
+{
+	if (map == NULL) {
+	    	return index;
+	}
+	/* make sure bit falls in map */
+	if (index >= conf->block_map_size) {
+		debug3("wrapping index %u into block_map_size of %u",
+		       index, conf->block_map_size);
+		index = index % conf->block_map_size;
+	}
+	index = map[index];
+	return(index);
+}
+
+static void _task_layout_display_masks(launch_tasks_request_msg_t *req, 
+					const uint32_t *gtid,
+					const uint32_t maxtasks,
+					bitstr_t **masks)
+{
+	int i;
+	char *str = NULL;
+	for(i = 0; i < maxtasks; i++) {
+		str = (char *)bit_fmt_hexmask(masks[i]);
+		debug3("_task_layout_display_masks jobid [%u:%d] %s",
+		       req->job_id, gtid[i], str);
+		xfree(str);
+	}
+}
+
+static void _lllp_free_masks(const uint32_t maxtasks, bitstr_t **masks)
+{
+    	int i;
+	bitstr_t *bitmask;
+	for (i = 0; i < maxtasks; i++) { 
+		bitmask = masks[i];
+	    	if (bitmask) {
+			bit_free(bitmask);
+		}
+	}
+	xfree(masks);
+}
+
+#ifdef HAVE_NUMA
+/* _match_mask_to_ldom
+ *
+ * expand each mask to encompass the whole locality domain
+ * within which it currently exists
+ * NOTE: this assumes that the masks are already in logical
+ * (and not abstract) CPU order.
+ */
+static void _match_masks_to_ldom(const uint32_t maxtasks, bitstr_t **masks)
+{
+	uint32_t i, b, size;
+
+	if (!masks || !masks[0])
+		return;
+	size = bit_size(masks[0]);
+	for(i = 0; i < maxtasks; i++) {
+		for (b = 0; b < size; b++) {
+			if (bit_test(masks[i], b)) {
+				/* get the NUMA node for this CPU, and then
+				 * set all CPUs in the mask that exist in
+				 * the same CPU */
+				int c;
+				uint16_t nnid = slurm_get_numa_node(b);
+				for (c = 0; c < size; c++) {
+					if (slurm_get_numa_node(c) == nnid)
+						bit_set(masks[i], c);
+				}
+			}
+		}
+	}
+}
+#endif
+
+/* 
+ * batch_bind - Set the batch request message so as to bind the shell to the 
+ *	proper resources
+ */
+void batch_bind(batch_job_launch_msg_t *req)
+{
+	bitstr_t *req_map, *hw_map;
+	slurm_cred_arg_t arg;
+	uint16_t sockets=0, cores=0, num_procs;
+	int hw_size, start, p, t, task_cnt=0;
+	char *str;
+
+	if (slurm_cred_get_args(req->cred, &arg) != SLURM_SUCCESS) {
+		error("task/affinity: job lacks a credential");
+		return;
+	}
+	start = _get_local_node_info(&arg, 0, &sockets, &cores);
+	if (start != 0) {
+		error("task/affinity: missing node 0 in job credential");
+		slurm_cred_free_args(&arg);
+		return;
+	}
+
+	hw_size    = conf->sockets * conf->cores * conf->threads;
+	num_procs  = MIN((sockets * cores),
+			 (conf->sockets * conf->cores));
+	req_map = (bitstr_t *) bit_alloc(num_procs);
+	hw_map  = (bitstr_t *) bit_alloc(hw_size);
+	if (!req_map || !hw_map) {
+		error("task/affinity: malloc error");
+		bit_free(req_map);
+		bit_free(hw_map);
+		slurm_cred_free_args(&arg);
+	}
+
+	/* Transfer core_bitmap data to local req_map.
+	 * The MOD function handles the case where fewer processes
+	 * physically exist than are configured (slurmd is out of 
+	 * sync with the slurmctld daemon). */
+	for (p = 0; p < (sockets * cores); p++) {
+		if (bit_test(arg.core_bitmap, p))
+			bit_set(req_map, (p % num_procs));
+	}
+	str = (char *)bit_fmt_hexmask(req_map);
+	debug3("task/affinity: job %u CPU mask from slurmctld: %s",
+		req->job_id, str);
+	xfree(str);
+
+	for (p = 0; p < num_procs; p++) {
+		if (bit_test(req_map, p) == 0)
+			continue;
+		/* core_bitmap does not include threads, so we
+		 * add them here but limit them to what the job
+		 * requested */
+		for (t = 0; t < conf->threads; t++) {
+			uint16_t bit = p * conf->threads + t;
+			bit_set(hw_map, bit);
+			task_cnt++;
+		}
+	}
+	if (task_cnt) {
+		req->cpu_bind_type = CPU_BIND_MASK;
+		if (conf->task_plugin_param & CPU_BIND_VERBOSE)
+			req->cpu_bind_type |= CPU_BIND_VERBOSE;
+		req->cpu_bind = (char *)bit_fmt_hexmask(hw_map);
+		info("task/affinity: job %u CPU input mask for node: %s",
+		     req->job_id, req->cpu_bind);
+		/* translate abstract masks to actual hardware layout */
+		_lllp_map_abstract_masks(1, &hw_map);
+#ifdef HAVE_NUMA
+		if (req->cpu_bind_type & CPU_BIND_TO_LDOMS) {
+			_match_masks_to_ldom(1, &hw_map);
+		}
+#endif
+		xfree(req->cpu_bind);
+		req->cpu_bind = (char *)bit_fmt_hexmask(hw_map);
+		info("task/affinity: job %u CPU final HW mask for node: %s",
+		     req->job_id, req->cpu_bind);
+	} else {
+		error("task/affinity: job %u allocated no CPUs", 
+		      req->job_id);
+	}
+	bit_free(hw_map);
+	bit_free(req_map);
+	slurm_cred_free_args(&arg);
+}
 
 /* 
  * lllp_distribution
@@ -118,9 +255,10 @@ static uint16_t _block_map(uint16_t index, uint16_t *map);
  * When automatic binding is enabled:
  *      - no binding flags set >= CPU_BIND_NONE, and
  *      - a auto binding level selected CPU_BIND_TO_{SOCKETS,CORES,THREADS}
+ * Otherwise limit job step to the allocated CPUs
  *
  * generate the appropriate cpu_bind type and string which results in
- * the sepcified lllp distribution.
+ * the specified lllp distribution.
  *
  * IN/OUT- job launch request (cpu_bind_type and cpu_bind updated)
  * IN- global task id array
@@ -131,576 +269,537 @@ void lllp_distribution(launch_tasks_request_msg_t *req, uint32_t node_id)
 	bitstr_t **masks = NULL;
 	char buf_type[100];
 	int maxtasks = req->tasks_to_launch[(int)node_id];
+	int whole_nodes, whole_sockets, whole_cores, whole_threads;
+	int part_sockets, part_cores;
         const uint32_t *gtid = req->global_task_ids[(int)node_id];
-	
-	slurm_sprint_cpu_bind_type(buf_type, req->cpu_bind_type);
-	if(req->cpu_bind_type >= CPU_BIND_NONE) {
+	static uint16_t bind_entity = CPU_BIND_TO_THREADS | CPU_BIND_TO_CORES |
+				      CPU_BIND_TO_SOCKETS | CPU_BIND_TO_LDOMS;
+	static uint16_t bind_mode = CPU_BIND_NONE   | CPU_BIND_MASK   |
+				    CPU_BIND_RANK   | CPU_BIND_MAP    |
+				    CPU_BIND_LDMASK | CPU_BIND_LDRANK | 
+				    CPU_BIND_LDMAP;
+
+	if (req->cpu_bind_type & bind_mode) {
+		/* Explicit step binding specified by user */
+		char *avail_mask = _alloc_mask(req,
+					       &whole_nodes,  &whole_sockets, 
+					       &whole_cores,  &whole_threads,
+					       &part_sockets, &part_cores);
+		if ((whole_nodes == 0) && avail_mask) {
+			/* Step does NOT have access to whole node, 
+			 * bind to full mask of available processors */
+			xfree(req->cpu_bind);
+			req->cpu_bind = avail_mask;
+			req->cpu_bind_type &= (~bind_mode);
+			req->cpu_bind_type |= CPU_BIND_MASK;
+		} else {
+			/* Step does have access to whole node, 
+			 * bind to whatever step wants */
+			xfree(avail_mask);
+		}
+		slurm_sprint_cpu_bind_type(buf_type, req->cpu_bind_type);
 		info("lllp_distribution jobid [%u] manual binding: %s",
 		     req->job_id, buf_type);
 		return;
 	}
-	if (!((req->cpu_bind_type & CPU_BIND_TO_THREADS) ||
-	      (req->cpu_bind_type & CPU_BIND_TO_CORES) ||
-	      (req->cpu_bind_type & CPU_BIND_TO_SOCKETS))) {
+
+	if (!(req->cpu_bind_type & bind_entity)) {
+		/* No bind unit (sockets, cores) specified by user,
+		 * pick something reasonable */
+		int max_tasks = req->tasks_to_launch[(int)node_id];
+		char *avail_mask = _alloc_mask(req,
+					       &whole_nodes,  &whole_sockets, 
+					       &whole_cores,  &whole_threads,
+					       &part_sockets, &part_cores);
+		debug("binding tasks:%d to "
+		      "nodes:%d sockets:%d:%d cores:%d:%d threads:%d",
+		      max_tasks, whole_nodes, whole_sockets ,part_sockets,
+		      whole_cores, part_cores, whole_threads);
+		if ((max_tasks == whole_sockets) && (part_sockets == 0)) {
+			req->cpu_bind_type |= CPU_BIND_TO_SOCKETS;
+			goto make_auto;
+		}
+		if ((max_tasks == whole_cores) && (part_cores == 0)) {
+			req->cpu_bind_type |= CPU_BIND_TO_CORES;
+			goto make_auto;
+		}
+		if (max_tasks == whole_threads) {
+			req->cpu_bind_type |= CPU_BIND_TO_THREADS;
+			goto make_auto;
+		}
+		if (avail_mask) {
+			xfree(req->cpu_bind);
+			req->cpu_bind = avail_mask;
+			req->cpu_bind_type |= CPU_BIND_MASK;
+		}
+		slurm_sprint_cpu_bind_type(buf_type, req->cpu_bind_type);
 		info("lllp_distribution jobid [%u] auto binding off: %s",
 		     req->job_id, buf_type);
 		return;
-	}
 
-	/* We are still thinking about this. Does this make sense?
-	if (req->task_dist == SLURM_DIST_ARBITRARY) {
-		req->cpu_bind_type >= CPU_BIND_NONE;
-		info("lllp_distribution jobid [%u] -m hostfile - auto binding off ",
-		     req->job_id);
-		return;
+  make_auto:	xfree(avail_mask);
+		slurm_sprint_cpu_bind_type(buf_type, req->cpu_bind_type);
+		info("lllp_distribution jobid [%u] implicit auto binding: "
+		     "%s, dist %d", req->job_id, buf_type, req->task_dist);
+	} else {
+		/* Explicit bind unit (sockets, cores) specified by user */
+		slurm_sprint_cpu_bind_type(buf_type, req->cpu_bind_type);
+		info("lllp_distribution jobid [%u] binding: %s, dist %d",
+		     req->job_id, buf_type, req->task_dist);
 	}
-	*/
-
-	info("lllp_distribution jobid [%u] auto binding: %s, dist %d",
-	     req->job_id, buf_type, req->task_dist);
 
 	switch (req->task_dist) {
 	case SLURM_DIST_BLOCK_BLOCK:
 	case SLURM_DIST_CYCLIC_BLOCK:
-		rc = _task_layout_lllp_block(req, gtid, maxtasks, &masks);
+	case SLURM_DIST_PLANE:
+		/* tasks are distributed in blocks within a plane */
+		rc = _task_layout_lllp_block(req, node_id, &masks);
 		break;
 	case SLURM_DIST_CYCLIC:
 	case SLURM_DIST_BLOCK:
 	case SLURM_DIST_CYCLIC_CYCLIC:
 	case SLURM_DIST_BLOCK_CYCLIC:
-		rc = _task_layout_lllp_cyclic(req, gtid, maxtasks, &masks); 
-		break;
-	case SLURM_DIST_PLANE:
-		rc = _task_layout_lllp_plane(req, gtid, maxtasks, &masks); 
+		rc = _task_layout_lllp_cyclic(req, node_id, &masks); 
 		break;
 	default:
-		rc = _task_layout_lllp_cyclic(req, gtid, maxtasks, &masks); 
+		if (req->cpus_per_task > 1)
+			rc = _task_layout_lllp_multi(req, node_id, &masks);
+		else
+			rc = _task_layout_lllp_cyclic(req, node_id, &masks);
 		req->task_dist = SLURM_DIST_BLOCK_CYCLIC;
 		break;
 	}
 
+	/* FIXME: I'm worried about core_bitmap with CPU_BIND_TO_SOCKETS &
+	 * max_cores - does select/cons_res plugin allocate whole
+	 * socket??? Maybe not. Check srun man page.
+	 */
+
 	if (rc == SLURM_SUCCESS) {
 		_task_layout_display_masks(req, gtid, maxtasks, masks); 
-		if (req->cpus_per_task > 1) {
-			_lllp_enlarge_masks(req, maxtasks, masks);
-		}
-		_task_layout_display_masks(req, gtid, maxtasks, masks); 
-	    	_lllp_use_available(req, maxtasks, masks);
-		_task_layout_display_masks(req, gtid, maxtasks, masks); 
-	    	_lllp_map_abstract_masks(maxtasks, masks);
+	    	/* translate abstract masks to actual hardware layout */
+		_lllp_map_abstract_masks(maxtasks, masks);
 		_task_layout_display_masks(req, gtid, maxtasks, masks); 
-	    	_lllp_generate_cpu_bind(req, maxtasks, masks);
+#ifdef HAVE_NUMA
+		if (req->cpu_bind_type & CPU_BIND_TO_LDOMS) {
+			_match_masks_to_ldom(maxtasks, masks);
+			_task_layout_display_masks(req, gtid, maxtasks, masks);
+		}
+#endif
+	    	 /* convert masks into cpu_bind mask string */
+		 _lllp_generate_cpu_bind(req, maxtasks, masks);
+	} else {
+		char *avail_mask = _alloc_mask(req,
+					       &whole_nodes,  &whole_sockets,
+					       &whole_cores,  &whole_threads,
+					       &part_sockets, &part_cores);
+		if (avail_mask) {
+			xfree(req->cpu_bind);
+			req->cpu_bind = avail_mask;
+			req->cpu_bind_type &= (~bind_mode);
+			req->cpu_bind_type |= CPU_BIND_MASK;
+		}
+		slurm_sprint_cpu_bind_type(buf_type, req->cpu_bind_type);
+		error("lllp_distribution jobid [%u] overriding binding: %s",
+		      req->job_id, buf_type);
+		error("Verify socket/core/thread counts in configuration");
 	}
-	_lllp_free_masks(req, maxtasks, masks);
+	_lllp_free_masks(maxtasks, masks);
 }
 
-static
-void _task_layout_display_masks(launch_tasks_request_msg_t *req, 
-				const uint32_t *gtid,
-				const uint32_t maxtasks,
-				bitstr_t **masks)
-{
-	int i;
-	for(i=0; i<maxtasks;i++) {
-		char *str = bit_fmt_hexmask(masks[i]);
-		debug3("_task_layout_display_masks jobid [%u:%d] %s",
-		       req->job_id, gtid[i], str);
-		xfree(str);
-	}
-}
 
 /*
- * _compute_min_overlap
- *
- * Given a mask and a set of current reservations, return the
- * minimum overlap between the mask and the reservations and the
- * rotation required to obtain it
- *
- * IN-  bitmask - bitmask to rotate
- * IN-  resv - current reservations
- * IN-  rotmask_size - size of mask to use during rotation
- * IN-  rotval - starting rotation value
- * IN-  rot_incr - rotation increment
- * OUT- p_min_overlap- minimum overlap
- * OUT- p_min_rotval- rotation to obtain minimum overlap
+ * _get_local_node_info - get job allocation details for this node
+ * IN: req         - launch request structure
+ * IN: job_node_id - index of the local node in the job allocation
+ * IN/OUT: sockets - pointer to socket count variable
+ * IN/OUT: cores   - pointer to cores_per_socket count variable
+ * OUT:  returns the core_bitmap index of the first core for this node
  */
-static void
-_compute_min_overlap(bitstr_t *bitmask, uint32_t *resv,
-			int rotmask_size, int rotval, int rot_incr, 
-			int *p_min_overlap, int *p_min_rotval)
+static int _get_local_node_info(slurm_cred_arg_t *arg, uint32_t job_node_id,
+				uint16_t *sockets, uint16_t *cores)
 {
-	int min_overlap = INT_MAX;
-	int min_rotval  = 0;
-	int rot_cnt;
-	int j;
-	if (rot_incr <= 0) {
-		rot_incr = 1;
-	}
-	rot_cnt = rotmask_size / rot_incr;
-	debug3("  rotval:%d rot_incr:%d rot_cnt:%d",
-					rotval, rot_incr, rot_cnt);
-	for (j = 0; j < rot_cnt; j++) {
-		int overlap;		       
-		bitstr_t *newmask = bit_rotate_copy(bitmask, rotval,
-						    rotmask_size);
-		bitstr_t *physmask = _lllp_map_abstract_mask(newmask);
-		overlap = int_and_set_count((int *)resv,
-					    lllp_reserved_size,
-					    physmask);
-		bit_free(newmask);
-		bit_free(physmask);
-		debug3("  rotation #%d %d => overlap:%d", j, rotval, overlap);
-		if (overlap < min_overlap) {
-			min_overlap = overlap;
-			min_rotval  = rotval;
+	int bit_start = 0, bit_finish = 0;
+	int i, index = -1, cur_node_id = -1;
+
+	do {
+		index++;
+		for (i = 0; i < arg->sock_core_rep_count[index] &&
+			    cur_node_id < job_node_id; i++) {
+			bit_start = bit_finish;
+			bit_finish += arg->sockets_per_node[index] *
+					arg->cores_per_socket[index];
+			cur_node_id++;
 		}
-		if (overlap == 0) {	/* no overlap, stop rotating */
-			debug3("  --- found zero overlap, stopping search");
-			break;
-		}
-		rotval += rot_incr;
-	}
-	debug3("  min_overlap:%d min_rotval:%d",
-					min_overlap, min_rotval);
-	*p_min_overlap = min_overlap;
-	*p_min_rotval  = min_rotval;
+		
+	} while (cur_node_id < job_node_id);
+
+	*sockets = arg->sockets_per_node[index];
+	*cores   = arg->cores_per_socket[index];
+	return bit_start;
 }
 
-/*
- * _lllp_enlarge_masks
- *
- * Given an array of masks, update the masks to honor the number
- * of cpus requested per task in req->cpus_per_task.  Note: not
- * concerned with mask overlap between tasks as _lllp_use_available
- * will take care of that.
- *
- * IN- job launch request
- * IN- maximum number of tasks
- * IN/OUT- array of masks
- */
-static void _lllp_enlarge_masks (launch_tasks_request_msg_t *req,
-				const uint32_t maxtasks,
-				bitstr_t **masks)
+/* enforce max_sockets, max_cores */
+static void _enforce_limits(launch_tasks_request_msg_t *req, bitstr_t *mask,
+			    uint16_t hw_sockets, uint16_t hw_cores,
+			    uint16_t hw_threads)
 {
-	int i, j, k, l;
-	int cpus_per_task = req->cpus_per_task;
-
-	debug3("_lllp_enlarge_masks");
+	uint16_t i, j, size, count = 0;
+	int prev = -1;
 
-	/* enlarge each mask */
-	for (i = 0; i < maxtasks; i++) {
-		bitstr_t *bitmask = masks[i];
-		bitstr_t *addmask;
-		int bitmask_size = bit_size(bitmask);
-		int num_added = 0;
-
-		/* get current number of set bits in bitmask */
-		int num_set = bit_set_count(bitmask);
-		if (num_set >= cpus_per_task) {
+	size = bit_size(mask);
+	/* enforce max_sockets */
+	for (i = 0; i < size; i++) {
+		if (bit_test(mask, i) == 0)
 			continue;
+		/* j = first bit in socket; i = last bit in socket */
+		j = i/(hw_cores * hw_threads) * (hw_cores * hw_threads);
+		i = j+(hw_cores * hw_threads)-1;
+		if (++count > req->max_sockets) {
+			bit_nclear(mask, j, i);
+			count--;
 		}
+	}
 
-		/* add bits by selecting disjoint cores first, then threads */
-		for (j = conf->threads; j > 0; j--) {
-			/* rotate current bitmask to find new candidate bits */
-		        for (k = 1; k < bitmask_size / j; k++) {
-				addmask = bit_rotate_copy(bitmask, k*j,
-								bitmask_size);
-
-			    	/* check candidate bits to add into to bitmask */
-				for (l = 0; l < bitmask_size; l++) {
-					if (bit_test(addmask,l) &&
-					    !bit_test(bitmask,l)) {
-						bit_set(bitmask,l);
-						num_set++;
-						num_added++;
-					}
-					if (num_set >= cpus_per_task) {
-						break;
-					}
-				}
+	/* enforce max_cores */
+	for (i = 0; i < size; i++) {
+		if (bit_test(mask, i) == 0)
+			continue;
+		/* j = first bit in socket */
+		j = i/(hw_cores * hw_threads) * (hw_cores * hw_threads);
+		if (j != prev) {
+			/* we're in a new socket, so reset the count */
+			count = 0;
+			prev = j;
+		}
+		/* j = first bit in core; i = last bit in core */
+		j = i/hw_threads * hw_threads;
+		i = j+hw_threads-1;
+		if (++count > req->max_cores) {
+			bit_nclear(mask, j, i);
+			count--;
+		}
+	}
+}
 
-				/* done with candidate mask */
-				bit_free(addmask);
-				if (num_set >= cpus_per_task) {
-					break;
-				}
+/* Determine which CPUs a job step can use. 
+ * OUT whole_<entity>_count - returns count of whole <entities> in this 
+ *                            allocation for this node
+ * OUT part__<entity>_count - returns count of partial <entities> in this 
+ *                            allocation for this node
+ * RET - a string representation of the available mask or NULL on error
+ * NOTE: Caller must xfree() the return value. */
+static char *_alloc_mask(launch_tasks_request_msg_t *req,
+			 int *whole_node_cnt,  int *whole_socket_cnt, 
+			 int *whole_core_cnt,  int *whole_thread_cnt,
+			 int *part_socket_cnt, int *part_core_cnt)
+{
+	uint16_t sockets, cores, threads;
+	int c, s, t, i, mask;
+	int c_miss, s_miss, t_miss, c_hit, t_hit;
+	bitstr_t *alloc_bitmap;
+	char *str_mask;
+
+	*whole_node_cnt   = 0;
+	*whole_socket_cnt = 0;
+	*whole_core_cnt   = 0;
+	*whole_thread_cnt = 0;
+	*part_socket_cnt  = 0;
+	*part_core_cnt    = 0;
+
+	alloc_bitmap = _get_avail_map(req, &sockets, &cores, &threads);
+	if (!alloc_bitmap)
+		return NULL;
+
+	i = mask = 0;
+	for (s=0, s_miss=false; s<sockets; s++) {
+		for (c=0, c_hit=c_miss=false; c<cores; c++) {
+			for (t=0, t_hit=t_miss=false; t<threads; t++) {
+				if (bit_test(alloc_bitmap, i)) {
+					mask |= (1 << i);
+					(*whole_thread_cnt)++;
+					t_hit = true;
+					c_hit = true;
+				} else
+					t_miss = true;
+				i++;
 			}
-			if (num_set >= cpus_per_task) {
-				break;
+			if (!t_miss)
+				(*whole_core_cnt)++;
+			else {
+				if (t_hit)
+					(*part_core_cnt)++;
+				c_miss = true;
 			}
 		}
-		debug3("  mask %d => added %d bits", i, num_added);
+		if (!c_miss)
+			(*whole_socket_cnt)++;
+		else {
+			if (c_hit)
+				(*part_socket_cnt)++;
+			s_miss = true;
+		}
 	}
+	if (!s_miss)
+		(*whole_node_cnt)++;
+	bit_free(alloc_bitmap);
+
+	str_mask = xmalloc(16);
+	snprintf(str_mask, 16, "%x", mask);
+	return str_mask;
 }
 
 /*
- * _lllp_use_available
- *
- * Given an array of masks, update the masks to make best use of
- * available resources based on the current state of reservations
- * recorded in conf->lllp_reserved.
- *
- * IN- job launch request
- * IN- maximum number of tasks
- * IN/OUT- array of masks
+ * Given a job step request, return an equivalent local bitmap for this node
+ * IN req          - The job step launch request
+ * OUT hw_sockets  - number of actual sockets on this node
+ * OUT hw_cores    - number of actual cores per socket on this node
+ * OUT hw_threads  - number of actual threads per core on this node
+ * RET: bitmap of processors available to this job step on this node
+ *      OR NULL on error
  */
-static void _lllp_use_available (launch_tasks_request_msg_t *req,
-				const uint32_t maxtasks,
-				bitstr_t **masks)
+static bitstr_t *_get_avail_map(launch_tasks_request_msg_t *req,
+				uint16_t *hw_sockets, uint16_t *hw_cores,
+				uint16_t *hw_threads)
 {
-	int resv_incr, i;
-	uint32_t *resv;
-	int rotval, prev_rotval;
-
-	/* select the unit of reservation rotation increment based on CR type */
-	if ((conf->cr_type == CR_SOCKET) 
-	    || (conf->cr_type == CR_SOCKET_MEMORY)) {
-		resv_incr = conf->cores * conf->threads; /* socket contents */
-	} else if ((conf->cr_type == CR_CORE) 
-		   || (conf->cr_type == CR_CORE_MEMORY)) {
-		resv_incr = conf->threads;		 /* core contents */
-	} else {
-		resv_incr = conf->threads;		 /* core contents */
-	}
-	if (resv_incr < 1) {		/* make sure increment is non-zero */ 
-		debug3("_lllp_use_available changed resv_incr %d to 1", resv_incr);
-		resv_incr = 1;
+	bitstr_t *req_map, *hw_map;
+	slurm_cred_arg_t arg;
+	uint16_t p, t, num_procs, num_threads, sockets, cores, hw_size;
+	uint32_t job_node_id;
+	int start;
+	char *str;
+
+	*hw_sockets = conf->sockets;
+	*hw_cores   = conf->cores;
+	*hw_threads = conf->threads;
+	hw_size    = (*hw_sockets) * (*hw_cores) * (*hw_threads);
+
+	if (slurm_cred_get_args(req->cred, &arg) != SLURM_SUCCESS) {
+		error("task/affinity: job lacks a credential");
+		return NULL;
 	}
 
-	debug3("_lllp_use_available resv_incr = %d", resv_incr);
+	/* we need this node's ID in relation to the whole
+	 * job allocation, not just this jobstep */
+	job_node_id = nodelist_find(arg.job_hostlist, conf->node_name);
+	start = _get_local_node_info(&arg, job_node_id, &sockets, &cores);
+	if (start < 0) {
+		error("task/affinity: missing node %u in job credential",
+		      job_node_id);
+		slurm_cred_free_args(&arg);
+		return NULL;
+	}
+	debug3("task/affinity: slurmctld s %u c %u; hw s %u c %u t %u",
+		sockets, cores, *hw_sockets, *hw_cores, *hw_threads);
+
+	num_procs   = MIN((sockets * cores),
+			  ((*hw_sockets)*(*hw_cores)));
+	req_map = (bitstr_t *) bit_alloc(num_procs);
+	hw_map  = (bitstr_t *) bit_alloc(hw_size);
+	if (!req_map || !hw_map) {
+		error("task/affinity: malloc error");
+		bit_free(req_map);
+		bit_free(hw_map);
+		slurm_cred_free_args(&arg);
+		return NULL;
+	}
+	/* Transfer core_bitmap data to local req_map.
+	 * The MOD function handles the case where fewer processes
+	 * physically exist than are configured (slurmd is out of 
+	 * sync with the slurmctld daemon). */
+	for (p = 0; p < (sockets * cores); p++) {
+		if (bit_test(arg.core_bitmap, start+p))
+			bit_set(req_map, (p % num_procs));
+	}
 
-	/* get a copy of the current reservations */
-	resv = xmalloc(lllp_reserved_size * sizeof(uint32_t));
-        memcpy(resv, lllp_reserved, lllp_reserved_size * sizeof(uint32_t));
+	str = (char *)bit_fmt_hexmask(req_map);
+	debug3("task/affinity: job %u.%u CPU mask from slurmctld: %s",
+		req->job_id, req->job_step_id, str);
+	xfree(str);
 
-	/* check each mask against current reservations */
-	rotval      = 0;
-	prev_rotval = 0;
-	for (i = 0; i < maxtasks; i++) {
-		bitstr_t *bitmask = masks[i];
-		bitstr_t *physmask = NULL;
-		int min_overlap, min_rotval;
+	if (req->max_threads == 0) {
+		error("task/affinity: job %u.%u has max_threads=0",
+		      req->job_id, req->job_step_id);
+		req->max_threads = 1;
+	}
+	if (req->max_cores == 0) {
+		error("task/affinity: job %u.%u has max_coress=0",
+		      req->job_id, req->job_step_id);
+		req->max_cores = 1;
+	}
+	if (req->max_sockets == 0) {
+		error("task/affinity: job %u.%u has max_sockets=0",
+		      req->job_id, req->job_step_id);
+		req->max_sockets = 1;
+	}
+	num_threads = MIN(req->max_threads, (*hw_threads));
+	for (p = 0; p < num_procs; p++) {
+		if (bit_test(req_map, p) == 0)
+			continue;
+		/* core_bitmap does not include threads, so we
+		 * add them here but limit them to what the job
+		 * requested */
+		for (t = 0; t < num_threads; t++) {
+			uint16_t bit = p * (*hw_threads) + t;
+			bit_set(hw_map, bit);
+		}
+	}
 
-		/* create masks that are at least as large as the reservation */
-		int bitmask_size = bit_size(bitmask);
-		int rotmask_size = MAX(bitmask_size, lllp_reserved_size);
+	/* enforce max_sockets and max_cores limits */
+	_enforce_limits(req, hw_map, *hw_sockets, *hw_cores, *hw_threads);
+	
+	str = (char *)bit_fmt_hexmask(hw_map);
+	debug3("task/affinity: job %u.%u CPU final mask for local node: %s",
+		req->job_id, req->job_step_id, str);
+	xfree(str);
 
-		/* get maximum number of contiguous bits in bitmask */
-		int contig_bits = bit_nset_max_count(bitmask);
+	bit_free(req_map);
+	slurm_cred_free_args(&arg);
+	return hw_map;
+}
 
-		/* make sure the reservation increment is larger than the number
-		 * of contiguous bits in the mask to maintain any properties
-		 * present in the mask (e.g. use both cores on one socket)
-		 */
-		int this_resv_incr = resv_incr;
-		while (this_resv_incr < contig_bits) {
-			this_resv_incr += resv_incr;
-		}
+/* helper function for _expand_masks() */
+static void _blot_mask(bitstr_t *mask, uint16_t blot)
+{
+	uint16_t i, size = 0;
+	int prev = -1;
 
-		/* rotate mask to find the minimum reservation overlap starting
-		 * with the previous rotation value
-		 */
-		rotval  = prev_rotval;
-		debug3("mask %d compute_min_overlap contig:%d", i, contig_bits);
-		_compute_min_overlap(bitmask, resv,
-					rotmask_size, rotval, this_resv_incr,
-					&min_overlap, &min_rotval);
-
-		/* if we didn't find a zero overlap, recheck at a thread
-		 * granularity
-		 */
-		if (min_overlap != 0) {
-		        int prev_resv_incr = this_resv_incr;
-			this_resv_incr = 1;
-			if (this_resv_incr != prev_resv_incr) {
-				int this_min_overlap, this_min_rotval;
-				_compute_min_overlap(bitmask, resv,
-					rotmask_size, rotval, this_resv_incr,
-					&this_min_overlap, &this_min_rotval);
-				if (this_min_overlap < min_overlap) {
-					min_overlap = this_min_overlap;
-					min_rotval  = this_min_rotval;
-				}
+	if (!mask)
+		return;
+	size = bit_size(mask);
+	for (i = 0; i < size; i++) {
+		if (bit_test(mask, i)) {
+			/* fill in this blot */
+			uint16_t start = (i / blot) * blot;
+			if (start != prev) {
+				bit_nset(mask, start, start+blot-1);
+				prev = start;
 			}
 		}
-
-		rotval = min_rotval;	/* readjust for the minimum overlap */
-		if (rotval != 0) {
-			bitstr_t *newmask = bit_rotate_copy(bitmask, rotval,
-							    rotmask_size);
-			bit_free(masks[i]);
-			masks[i] = newmask;
-		}
-
-		debug3("  mask %d => rotval %d", i, rotval);
-		/* accepted current mask, add to copy of the reservations */
-		physmask = _lllp_map_abstract_mask(masks[i]);
-		_cr_update_reservation(1, resv, physmask);
-		bit_free(physmask);
-		prev_rotval = rotval;
 	}
-	xfree(resv);
 }
 
-/*
- * _lllp_map_abstract_mask
- *
- * Map one abstract block mask to a physical machine mask
- *
- * IN - mask to map
- * OUT - mapped mask (storage allocated in this routine)
- */
-static bitstr_t *_lllp_map_abstract_mask (bitstr_t *bitmask)
+/* foreach mask, expand the mask around the set bits to include the
+ * complete resource to which the set bits are to be bound */
+static void _expand_masks(uint16_t cpu_bind_type, const uint32_t maxtasks,
+			  bitstr_t **masks, uint16_t hw_sockets,
+			  uint16_t hw_cores, uint16_t hw_threads)
 {
-    	int i, bit;
-	int num_bits = bit_size(bitmask);
-	bitstr_t *newmask = bit_alloc(num_bits);
+	uint32_t i;
 
-	/* remap to physical machine */
-	for (i = 0; i < num_bits; i++) {
-		if (bit_test(bitmask,i)) {
-			bit = BLOCK_MAP(i);
-			bit_set(newmask, bit);
+	if (cpu_bind_type & CPU_BIND_TO_THREADS)
+		return;
+	if (cpu_bind_type & CPU_BIND_TO_CORES) {
+		if (hw_threads < 2)
+			return;
+		for (i = 0; i < maxtasks; i++) {
+			_blot_mask(masks[i], hw_threads);
+		}
+		return;
+	}
+	if (cpu_bind_type & CPU_BIND_TO_SOCKETS) {
+		if (hw_threads*hw_cores < 2)
+			return;
+		for (i = 0; i < maxtasks; i++) {
+			_blot_mask(masks[i], hw_threads*hw_cores);
 		}
+		return;
 	}
-	return newmask;
 }
 
-/*
- * _lllp_map_abstract_masks
+/* 
+ * _task_layout_lllp_multi
  *
- * Map an array of abstract block masks to physical machine masks
+ * A variant of _task_layout_lllp_cyclic for use with allocations having 
+ * more than one CPU per task, put the tasks as close as possible (fill 
+ * core rather than going next socket for the extra task)
  *
- * IN- maximum number of tasks
- * IN/OUT- array of masks
  */
-static void _lllp_map_abstract_masks(const uint32_t maxtasks,
-				     bitstr_t **masks)
+static int _task_layout_lllp_multi(launch_tasks_request_msg_t *req, 
+				    uint32_t node_id, bitstr_t ***masks_p)
 {
-    	int i;
-	debug3("_lllp_map_abstract_masks");
+	int last_taskcount = -1, taskcount = 0;
+	uint16_t c, i, s, t, hw_sockets = 0, hw_cores = 0, hw_threads = 0;
+	uint16_t num_threads, num_cores, num_sockets;
+	int size, max_tasks = req->tasks_to_launch[(int)node_id];
+	int max_cpus = max_tasks * req->cpus_per_task;
+	bitstr_t *avail_map;
+	bitstr_t **masks = NULL;
 	
-	for (i = 0; i < maxtasks; i++) { 
-		bitstr_t *bitmask = masks[i];
-	    	if (bitmask) {
-			bitstr_t *newmask = _lllp_map_abstract_mask(bitmask);
-			bit_free(bitmask);
-			masks[i] = newmask;
+	info ("_task_layout_lllp_multi ");
+
+	avail_map = _get_avail_map(req, &hw_sockets, &hw_cores, &hw_threads);
+	if (!avail_map)
+		return SLURM_ERROR;
+	
+	*masks_p = xmalloc(max_tasks * sizeof(bitstr_t*));
+	masks = *masks_p;
+	
+	size = bit_set_count(avail_map);
+	if (size < max_tasks) {
+		error("task/affinity: only %d bits in avail_map for %d tasks!",
+		      size, max_tasks);
+		bit_free(avail_map);
+		return SLURM_ERROR;
+	}
+	if (size < max_cpus) {
+		/* Possible result of overcommit */
+		i = size / max_tasks;
+		info("task/affinity: reset cpus_per_task from %d to %d",
+		     req->cpus_per_task, i);
+		req->cpus_per_task = i;
+	}
+	
+	size = bit_size(avail_map);
+	num_sockets = MIN(req->max_sockets, hw_sockets);
+	num_cores   = MIN(req->max_cores, hw_cores);
+	num_threads = MIN(req->max_threads, hw_threads);
+	i = 0;
+	while (taskcount < max_tasks) {
+		if (taskcount == last_taskcount)
+			fatal("_task_layout_lllp_multi failure");
+		last_taskcount = taskcount; 
+		for (s = 0; s < hw_sockets; s++) {
+			for (c = 0; c < hw_cores; c++) {
+				for (t = 0; t < num_threads; t++) {
+					uint16_t bit = s*(hw_cores*hw_threads) +
+							c*(hw_threads) + t;
+					if (bit_test(avail_map, bit) == 0)
+						continue;
+					if (masks[taskcount] == NULL)
+						masks[taskcount] =
+						    (bitstr_t *)bit_alloc(size);
+					bit_set(masks[taskcount], bit);
+					if (++i < req->cpus_per_task)
+						continue;
+					i = 0;
+					if (++taskcount >= max_tasks)
+						break;
+				}
+				if (taskcount >= max_tasks)
+					break;
+			}
+			if (taskcount >= max_tasks)
+				break;
 		}
 	}
+	bit_free(avail_map);
+	
+	/* last step: expand the masks to bind each task
+	 * to the requested resource */
+	_expand_masks(req->cpu_bind_type, max_tasks, masks,
+			hw_sockets, hw_cores, hw_threads);
+
+	return SLURM_SUCCESS;
 }
 
 /* 
- * _lllp_generate_cpu_bind
+ * _task_layout_lllp_cyclic
  *
- * Generate the cpu_bind type and string given an array of bitstr_t masks
- *
- * IN/OUT- job launch request (cpu_bind_type and cpu_bind updated)
- * IN- maximum number of tasks
- * IN- array of masks
- */
-static void _lllp_generate_cpu_bind(launch_tasks_request_msg_t *req,
-				    const uint32_t maxtasks,
-				    bitstr_t **masks)
-{
-    	int i, num_bits=0, masks_len;
-	bitstr_t *bitmask;
-	bitoff_t charsize;
-	char *masks_str = NULL;
-	char buf_type[100];
-
-	for (i = 0; i < maxtasks; i++) { 
-		bitmask = masks[i];
-	    	if (bitmask) {
-			num_bits = bit_size(bitmask);
-			break;
-		}
-	}
-	charsize = (num_bits + 3) / 4;		/* ASCII hex digits */
-	charsize += 3;				/* "0x" and trailing "," */
-	masks_len = maxtasks * charsize + 1;	/* number of masks + null */
-
-	debug3("_lllp_generate_cpu_bind %d %d %d", maxtasks, charsize, masks_len);
-
-	masks_str = xmalloc(masks_len);
-	masks_len = 0;
-	for (i = 0; i < maxtasks; i++) {
-	    	char *str;
-		int curlen;
-		bitmask = masks[i];
-	    	if (bitmask == NULL) {
-			continue;
-		}
-		str = bit_fmt_hexmask(bitmask);
-		curlen = strlen(str) + 1;
-
-		if (masks_len > 0) masks_str[masks_len-1]=',';
-		strncpy(&masks_str[masks_len], str, curlen);
-		masks_len += curlen;
-		xassert(masks_str[masks_len] == '\0');
-		xfree(str);
-	}
-
-	if (req->cpu_bind) {
-	    	xfree(req->cpu_bind);
-	}
-	if (masks_str[0] != '\0') {
-		req->cpu_bind = masks_str;
-		req->cpu_bind_type |= CPU_BIND_MASK; 
-	} else {
-		req->cpu_bind = NULL;
-		req->cpu_bind_type &= ~CPU_BIND_VERBOSE;
-	}
-
-	/* clear mask generation bits */
-	req->cpu_bind_type &= ~CPU_BIND_TO_THREADS;
-	req->cpu_bind_type &= ~CPU_BIND_TO_CORES;
-	req->cpu_bind_type &= ~CPU_BIND_TO_SOCKETS;
-
-	slurm_sprint_cpu_bind_type(buf_type, req->cpu_bind_type);
-	info("_lllp_generate_cpu_bind jobid [%u]: %s, %s",
-	     req->job_id, buf_type, masks_str);
-}
-
-
-static void _lllp_free_masks (launch_tasks_request_msg_t *req,
-			      const uint32_t maxtasks,
-			      bitstr_t **masks)
-{
-    	int i;
-	bitstr_t *bitmask;
-	for (i = 0; i < maxtasks; i++) { 
-		bitmask = masks[i];
-	    	if (bitmask) {
-			bit_free(bitmask);
-		}
-	}
-}
-
-/* 
- * _task_layout_lllp_init performs common initialization required by:
- *	_task_layout_lllp_cyclic
- *	_task_layout_lllp_block
- *	_task_layout_lllp_plane
- */
-static int _task_layout_lllp_init(launch_tasks_request_msg_t *req, 
-				  const uint32_t maxtasks,
-				  bitstr_t ***masks_p,
-				  bool *bind_to_exact_socket,
-				  bool *bind_to_exact_core,
-				  bool *bind_to_exact_thread,
-				  uint16_t *usable_cpus,
-				  uint16_t *usable_sockets, 
-				  uint16_t *usable_cores,
-				  uint16_t *usable_threads,
-				  uint16_t *hw_sockets, 
-				  uint16_t *hw_cores,
-				  uint16_t *hw_threads,
-				  uint16_t *avail_cpus)
-{
-	int min_sockets = 1, min_cores = 1;
-	uint16_t alloc_cores[conf->sockets];
-
-	if (req->cpu_bind_type & CPU_BIND_TO_THREADS) {
-		/* Default: in here in case we decide to change the
-		 * default */
-		info ("task_layout cpu_bind_type CPU_BIND_TO_THREADS ");
-	} else if (req->cpu_bind_type & CPU_BIND_TO_CORES) {
-		*bind_to_exact_thread = false;
-		info ("task_layout cpu_bind_type CPU_BIND_TO_CORES ");
-	} else if (req->cpu_bind_type & CPU_BIND_TO_SOCKETS) {
-		*bind_to_exact_thread = false;
-		*bind_to_exact_core   = false;
-		info ("task_layout cpu_bind_type CPU_BIND_TO_SOCKETS");
-	}
-
-	_get_resources_this_node(usable_cpus, usable_sockets, usable_cores,
-				 usable_threads, alloc_cores, req->job_id);
-
-	*hw_sockets = *usable_sockets;
-	*hw_cores   = *usable_cores;
-	*hw_threads = *usable_threads;
-
-	*avail_cpus = slurm_get_avail_procs(req->max_sockets, 
-					    req->max_cores, 
-					    req->max_threads, 
-					    min_sockets,
-					    min_cores,
-					    req->cpus_per_task,
-					    req->ntasks_per_node,
-					    req->ntasks_per_socket,
-					    req->ntasks_per_core,
-					    usable_cpus, usable_sockets,
-					    usable_cores, usable_threads,
-					    alloc_cores, conf->cr_type,
-					    req->job_id, conf->hostname);
-	/* Allocate masks array */
-	*masks_p = xmalloc(maxtasks * sizeof(bitstr_t*));
-	return SLURM_SUCCESS;
-}
-
-/* _get_resources_this_node determines counts for already allocated
- * resources (currently sockets and lps) for this node.  
- *
- * Only used when cons_res (Consumable Resources) is enabled with
- * CR_Socket, CR_Cores, or CR_CPU.
- *
- * OUT- Number of allocated sockets on this node
- * OUT- Number of allocated logical processors on this node 
- * 
- */
-static void _get_resources_this_node(uint16_t *cpus,
-				     uint16_t *sockets,
-				     uint16_t *cores,
-				     uint16_t *threads,
-				     uint16_t *alloc_cores,
-	                             uint32_t jobid)
-{
-	int bit_index = 0;
-	int i, j, k;
-
-	/* FIX for heterogeneous socket/core/thread count per system
-	 * in future releases */
-	*cpus    = conf->cpus;
-	*sockets = conf->sockets;
-	*cores   = conf->cores;
-	*threads = conf->threads;
-
-	for(i = 0; i < *sockets; i++)
-		alloc_cores[i] = 0;
-
-	for(i = 0; i < *sockets; i++) {
-		for(j = 0; j < *cores; j++) {
-			for(k = 0; k < *threads; k++) {
-				info("jobid %u lllp_reserved[%d]=%d", jobid, 
-				     bit_index, lllp_reserved[bit_index]);
-				if(lllp_reserved[bit_index] > 0) {
-					if (k == 0) {
-						alloc_cores[i]++;
-					}
-				}
-				bit_index++;
-			}
-		}
-	}
-		
-	xassert(bit_index == (*sockets * *cores * *threads));
-
-#if(0)
-	for (i = 0; i < *sockets; i++)
-		info("_get_resources jobid:%u hostname:%s socket id:%d cores:%u", 
-		     jobid, conf->hostname, i, alloc_cores[i]);
-#endif
-}
-	
-/* 
- * _task_layout_lllp_cyclic
- *
- * task_layout_lllp_cyclic creates a cyclic distribution at the
- * lowest level of logical processor which is either socket, core or
- * thread depending on the system architecture. The Cyclic algorithm
- * is the same as the the Cyclic distribution performed in srun.
+ * task_layout_lllp_cyclic creates a cyclic distribution at the
+ * lowest level of logical processor which is either socket, core or
+ * thread depending on the system architecture. The Cyclic algorithm
+ * is the same as the the Cyclic distribution performed in srun.
  *
  *  Distribution at the lllp: 
  *  -m hostfile|plane|block|cyclic:block|cyclic 
@@ -717,70 +816,81 @@ static void _get_resources_this_node(uint16_t *cpus,
  *
  */
 static int _task_layout_lllp_cyclic(launch_tasks_request_msg_t *req, 
-				    const uint32_t *gtid,
-				    const uint32_t maxtasks,
-				    bitstr_t ***masks_p)
+				    uint32_t node_id, bitstr_t ***masks_p)
 {
-	int retval, i, last_taskcount = -1, taskcount = 0, taskid = 0;
-	uint16_t socket_index = 0, core_index = 0, thread_index = 0;
-	uint16_t hw_sockets = 0, hw_cores = 0, hw_threads = 0;
-	uint16_t usable_cpus = 0, avail_cpus = 0;
-	uint16_t usable_sockets = 0, usable_cores = 0, usable_threads = 0;
-	
+	int last_taskcount = -1, taskcount = 0;
+	uint16_t c, i, s, t, hw_sockets = 0, hw_cores = 0, hw_threads = 0;
+	uint16_t num_threads, num_cores, num_sockets;
+	int size, max_tasks = req->tasks_to_launch[(int)node_id];
+	int max_cpus = max_tasks * req->cpus_per_task;
+	bitstr_t *avail_map;
 	bitstr_t **masks = NULL;
-	bool bind_to_exact_socket = true;
-	bool bind_to_exact_core   = true;
-	bool bind_to_exact_thread = true;
 	
 	info ("_task_layout_lllp_cyclic ");
 
-	retval = _task_layout_lllp_init(req, maxtasks, masks_p,
-					&bind_to_exact_socket, 
-					&bind_to_exact_core, 
-					&bind_to_exact_thread,
-					&usable_cpus, 
-					&usable_sockets, 
-					&usable_cores, 
-					&usable_threads,
-					&hw_sockets, 
-					&hw_cores, 
-					&hw_threads, 
-					&avail_cpus);
-	if (retval != SLURM_SUCCESS)
-		return retval;
+	avail_map = _get_avail_map(req, &hw_sockets, &hw_cores, &hw_threads);
+	if (!avail_map)
+		return SLURM_ERROR;
+	
+	*masks_p = xmalloc(max_tasks * sizeof(bitstr_t*));
 	masks = *masks_p;
+	
+	size = bit_set_count(avail_map);
+	if (size < max_tasks) {
+		error("task/affinity: only %d bits in avail_map for %d tasks!",
+		      size, max_tasks);
+		bit_free(avail_map);
+		return SLURM_ERROR;
+	}
+	if (size < max_cpus) {
+		/* Possible result of overcommit */
+		i = size / max_tasks;
+		info("task/affinity: reset cpus_per_task from %d to %d",
+		     req->cpus_per_task, i);
+		req->cpus_per_task = i;
+	}
 
-	for (i=0; taskcount<maxtasks; i++) {
-		if (taskcount == last_taskcount) {
-			error("_task_layout_lllp_cyclic failure");
-			return SLURM_ERROR;
-		}
+	size = bit_size(avail_map);
+	num_sockets = MIN(req->max_sockets, hw_sockets);
+	num_cores   = MIN(req->max_cores, hw_cores);
+	num_threads = MIN(req->max_threads, hw_threads);
+	i = 0;
+	while (taskcount < max_tasks) {
+		if (taskcount == last_taskcount)
+			fatal("_task_layout_lllp_cyclic failure");
 		last_taskcount = taskcount; 
-		for (thread_index=0; thread_index<usable_threads; thread_index++) {
-			for (core_index=0; core_index<usable_cores; core_index++) {
-				for (socket_index=0; socket_index<usable_sockets; 
-						     socket_index++) {
-					bitstr_t *bitmask = NULL;
-					taskid = gtid[taskcount];
-					_single_mask(hw_sockets, 
-						     hw_cores, 
-						     hw_threads,
-						     socket_index, 
-						     core_index, 
-						     thread_index, 
-						     bind_to_exact_socket, 
-						     bind_to_exact_core,
-						     bind_to_exact_thread, 
-						     &bitmask);
-					xassert(masks[taskcount] == NULL);
-					masks[taskcount] = bitmask;
-					if (++taskcount >= maxtasks)
-						goto fini;
+		for (t = 0; t < num_threads; t++) {
+			for (c = 0; c < hw_cores; c++) {
+				for (s = 0; s < hw_sockets; s++) {
+					uint16_t bit = s*(hw_cores*hw_threads) +
+							c*(hw_threads) + t;
+					if (bit_test(avail_map, bit) == 0)
+						continue;
+					if (masks[taskcount] == NULL)
+						masks[taskcount] =
+						    (bitstr_t *)bit_alloc(size);
+					bit_set(masks[taskcount], bit);
+					if (++i < req->cpus_per_task)
+						continue;
+					i = 0;
+					if (++taskcount >= max_tasks)
+						break;
 				}
+				if (taskcount >= max_tasks)
+					break;
 			}
+			if (taskcount >= max_tasks)
+				break;
 		}
 	}
- fini:	return SLURM_SUCCESS;
+	bit_free(avail_map);
+	
+	/* last step: expand the masks to bind each task
+	 * to the requested resource */
+	_expand_masks(req->cpu_bind_type, max_tasks, masks,
+			hw_sockets, hw_cores, hw_threads);
+
+	return SLURM_SUCCESS;
 }
 
 /* 
@@ -806,845 +916,249 @@ static int _task_layout_lllp_cyclic(launch_tasks_request_msg_t *req,
  *
  */
 static int _task_layout_lllp_block(launch_tasks_request_msg_t *req, 
-				   const uint32_t *gtid,
-				   const uint32_t maxtasks,
-				   bitstr_t ***masks_p)
+				   uint32_t node_id, bitstr_t ***masks_p)
 {
-	int retval, j, k, l, m, last_taskcount = -1, taskcount = 0, taskid = 0;
-	int over_subscribe  = 0, space_remaining = 0;
-	uint16_t core_index = 0, thread_index = 0;
+	int c, i, j, t, size, last_taskcount = -1, taskcount = 0;
 	uint16_t hw_sockets = 0, hw_cores = 0, hw_threads = 0;
-	uint16_t usable_cpus = 0, avail_cpus = 0;
-	uint16_t usable_sockets = 0, usable_cores = 0, usable_threads = 0;
-
+	uint16_t num_sockets, num_cores, num_threads;
+	int max_tasks = req->tasks_to_launch[(int)node_id];
+	int max_cpus = max_tasks * req->cpus_per_task;
+	int *task_array;
+	bitstr_t *avail_map;
 	bitstr_t **masks = NULL;
-	bool bind_to_exact_socket = true;
-	bool bind_to_exact_core   = true;
-	bool bind_to_exact_thread = true;
 
 	info("_task_layout_lllp_block ");
 
-	retval = _task_layout_lllp_init(req, maxtasks, masks_p,
-					&bind_to_exact_socket, 
-					&bind_to_exact_core, 
-					&bind_to_exact_thread,
-					&usable_cpus, 
-					&usable_sockets, 
-					&usable_cores, 
-					&usable_threads,
-					&hw_sockets, 
-					&hw_cores, 
-					&hw_threads, 
-					&avail_cpus);
-	if (retval != SLURM_SUCCESS) {
-		return retval;
+	avail_map = _get_avail_map(req, &hw_sockets, &hw_cores, &hw_threads);
+	if (!avail_map) {
+		return SLURM_ERROR;
 	}
+
+	size = bit_set_count(avail_map);
+	if (size < max_tasks) {
+		error("task/affinity: only %d bits in avail_map for %d tasks!",
+		      size, max_tasks);
+		bit_free(avail_map);
+		return SLURM_ERROR;
+	}
+	if (size < max_cpus) {
+		/* Possible result of overcommit */
+		i = size / max_tasks;
+		info("task/affinity: reset cpus_per_task from %d to %d",
+		     req->cpus_per_task, i);
+		req->cpus_per_task = i;
+	}
+	size = bit_size(avail_map);
+
+	*masks_p = xmalloc(max_tasks * sizeof(bitstr_t*));
 	masks = *masks_p;
 
-	if (_init_lllp() != SLURM_SUCCESS) {
-		error("In lllp_block: _init_lllp() != SLURM_SUCCESS");
+	task_array = xmalloc(size * sizeof(int));
+	if (!task_array) {
+		error("In lllp_block: task_array memory error");
+		bit_free(avail_map);
 		return SLURM_ERROR;
 	}
 	
-	while(taskcount < maxtasks) {
+	/* block distribution with oversubsciption */
+	num_sockets = MIN(req->max_sockets, hw_sockets);
+	num_cores   = MIN(req->max_cores, hw_cores);
+	num_threads = MIN(req->max_threads, hw_threads);
+	c = 0;
+	while(taskcount < max_tasks) {
 		if (taskcount == last_taskcount) {
-			error("_task_layout_lllp_block failure");
-			return SLURM_ERROR;
+			fatal("_task_layout_lllp_block infinite loop");
 		}
 		last_taskcount = taskcount;
-		for (j=0; j<usable_sockets; j++) {
-			for(core_index=0; core_index < usable_cores; core_index++) {
-				if((core_index < usable_cores) || (over_subscribe)) {
-					for(thread_index=0; thread_index<usable_threads; thread_index++) {
-						if((thread_index < usable_threads) || (over_subscribe)) {
-							lllp_tasks->sockets[j].cores[core_index]
-								.threads[thread_index].tasks++;
-							taskcount++;
-							if((thread_index+1) < usable_threads)
-								space_remaining = 1;
-							if(maxtasks <= taskcount) break;
-						}
-						if(maxtasks <= taskcount) break;
-						if (!space_remaining) {
-							over_subscribe = 1;
-						} else {
-							space_remaining = 0;
-						}
-					}
-				}
-				if(maxtasks <= taskcount) break;
-				if((core_index+1) < usable_cores)
-					space_remaining = 1;
-				if (!space_remaining) {
-					over_subscribe = 1;
-				} else {
-					space_remaining = 0;
-				}
-			}
-			if(maxtasks <= taskcount) break;
-			if (!space_remaining) {
-				over_subscribe = 1;
-			} else {
-				space_remaining = 0;
-			}
+		/* the abstract map is already laid out in block order,
+		 * so just iterate over it
+		 */
+		for (i = 0; i < size; i++) {
+			/* skip unrequested threads */
+			if (i%hw_threads >= num_threads)
+				continue;
+			/* skip unavailable resources */
+			if (bit_test(avail_map, i) == 0)
+				continue;
+			/* if multiple CPUs per task, only
+			 * count the task on the first CPU */
+			if (c == 0)
+				task_array[i] += 1;
+			if (++c < req->cpus_per_task)
+				continue;
+			c = 0;
+			if (++taskcount >= max_tasks)
+				break;
 		}
 	}
-	
-	/* Distribute the tasks and create masks for the task
-	 * affinity plug-in */
-	taskid = 0;
+	/* Distribute the tasks and create per-task masks that only
+	 * contain the first CPU. Note that unused resources
+	 * (task_array[i] == 0) will get skipped */
 	taskcount = 0;
-	for (j=0; j<usable_sockets; j++) {
-		for (k=0; k<usable_cores; k++) {
-			for (m=0; m<usable_threads; m++) {
-				for (l=0; l<lllp_tasks->sockets[j]
-					     .cores[k].threads[m].tasks; l++) {
-					bitstr_t *bitmask = NULL;
-					taskid = gtid[taskcount];
-					_single_mask(hw_sockets, 
-						     hw_cores, 
-						     hw_threads,
-						     j, k, m, 
-						     bind_to_exact_socket, 
-						     bind_to_exact_core, 
-						     bind_to_exact_thread,
-						     &bitmask);
-					xassert(masks[taskcount] == NULL);
-					xassert(taskcount < maxtasks);
-					masks[taskcount] = bitmask;
-					taskcount++;
-				}
-			}
+	for (i = 0; i < size; i++) {
+		for (t = 0; t < task_array[i]; t++) {
+			if (masks[taskcount] == NULL)
+				masks[taskcount] = (bitstr_t *)bit_alloc(size);
+			bit_set(masks[taskcount++], i);
 		}
 	}
-	
-	_print_tasks_per_lllp ();
-	_cleanup_lllp();
-
-	return SLURM_SUCCESS;
-}
-
-/* 
- * _task_layout_lllp_plane
- *
- * task_layout_lllp_plane will create a block cyclic distribution at
- * the lowest level of logical processor which is either socket, core or
- * thread depending on the system architecture. The Block algorithm is
- * different from the Block distribution performed at the node level
- * in that this algorithm does not load-balance the tasks across the
- * resources but uses the block size (i.e. plane size) specified by
- * the user.
- *
- *  Distribution at the lllp: 
- *  -m hostfile|plane|block|cyclic:block|cyclic 
- * 
- * The first distribution "hostfile|plane|block|cyclic" is computed
- * in srun. The second distribution "plane|block|cyclic" is computed
- * locally by each slurmd.
- *  
- * The input to the lllp distribution algorithms is the gids
- * (tasksids) generated for the local node.
- *  
- * The output is a mapping of the gids onto logical processors
- * (thread/core/socket)  with is expressed in cpu_bind masks.
- *
- */
-static int _task_layout_lllp_plane(launch_tasks_request_msg_t *req, 
-				   const uint32_t *gtid,
-				   const uint32_t maxtasks,
-				   bitstr_t ***masks_p)
-{
-	int retval, j, k, l, m, taskid = 0, last_taskcount = -1, next = 0;
-	uint16_t core_index = 0, thread_index = 0;
-	uint16_t hw_sockets = 0, hw_cores = 0, hw_threads = 0;
-	uint16_t usable_cpus = 0, avail_cpus = 0;
-	uint16_t usable_sockets = 0, usable_cores = 0, usable_threads = 0;
-	uint16_t plane_size = req->plane_size;
-	int max_plane_size = 0;
-
-	bitstr_t **masks = NULL; 
-	bool bind_to_exact_socket = true;
-	bool bind_to_exact_core   = true;
-	bool bind_to_exact_thread = true;
-
-	info("_task_layout_lllp_plane %d ", req->plane_size);
-
-	retval = _task_layout_lllp_init(req, maxtasks, masks_p,
-					&bind_to_exact_socket, 
-					&bind_to_exact_core, 
-					&bind_to_exact_thread,
-					&usable_cpus, 
-					&usable_sockets, 
-					&usable_cores, 
-					&usable_threads,
-					&hw_sockets, 
-					&hw_cores, 
-					&hw_threads, 
-					&avail_cpus);
-	if (retval != SLURM_SUCCESS) {
-		return retval;
-	}
-	masks = *masks_p;
-
-	max_plane_size = (plane_size > usable_cores) ? plane_size : usable_cores;
-	next = 0;
-
-	for (j=0; next<maxtasks; j++) {
-		if (next == last_taskcount) {
-			error("_task_layout_lllp_plan failure");
-			return SLURM_ERROR;
-		}
-		last_taskcount = next;
-		for (k=0; k<usable_sockets; k++) {
-			max_plane_size = (plane_size > usable_cores) ? plane_size : usable_cores;
-			for (m=0; m<max_plane_size; m++) {
-				if(next>=maxtasks)
-					break;
-				core_index = m%usable_cores;				
-				if(m<usable_cores) {
-					for(l=0; l<usable_threads;l++) {
-						if(next>=maxtasks)
-							break;
-						thread_index = l%usable_threads;
-						
-						if(thread_index<usable_threads) {
-							bitstr_t *bitmask = NULL;
-							taskid = gtid[next];
-							_single_mask(hw_sockets,
-								     hw_cores, 
-								     hw_threads,
-								     k, 
-								     core_index, 
-								     thread_index, 
-								     bind_to_exact_socket, 
-								     bind_to_exact_core,
-								     bind_to_exact_thread, 
-								     &bitmask);
-							xassert(masks[next] == NULL);
-							xassert(next < maxtasks);
-							masks[next] = bitmask;
-							next++;
-						}
-					}
+	/* now set additional CPUs for cpus_per_task > 1 */
+	for (t=0; t<max_tasks && req->cpus_per_task>1; t++) {
+		if (!masks[t])
+			continue;
+		for (i = 0; i < size; i++) {
+			if (bit_test(masks[t], i) == 0)
+				continue;
+			for (j=i+1,c=1; j<size && c<req->cpus_per_task;j++) {
+				if (bit_test(avail_map, j) == 0)
+					continue;
+				bit_set(masks[t], j);
+				c++;
+			}
+			if (c < req->cpus_per_task) {
+				/* we haven't found all of the CPUs for this
+				 * task, so we'll wrap the search to cover the
+				 * whole node */
+				for (j=0; j<i && c<req->cpus_per_task; j++) {
+					if (bit_test(avail_map, j) == 0)
+						continue;
+					bit_set(masks[t], j);
+					c++;
 				}
 			}
 		}
 	}
-	
-	return SLURM_SUCCESS;
-}
-
-/*
- * slurm job state information
- * tracks jobids for which all future credentials have been revoked
- *  
- */
-typedef struct {
-	uint32_t jobid;
-	uint32_t jobstepid;
-	uint32_t numtasks;
-	cpu_bind_type_t cpu_bind_type;
-	char *cpu_bind;
-} lllp_job_state_t;
-
-static lllp_job_state_t *
-_lllp_job_state_create(uint32_t job_id, uint32_t job_step_id,
-		       cpu_bind_type_t cpu_bind_type, char *cpu_bind,
-		       uint32_t numtasks)
-{
-	lllp_job_state_t *j;
-	debug3("creating job [%u.%u] lllp state", job_id, job_step_id);
-
-	j = xmalloc(sizeof(lllp_job_state_t));
-
-	j->jobid	 = job_id;
-	j->jobstepid	 = job_step_id;
-	j->numtasks	 = numtasks;
-	j->cpu_bind_type = cpu_bind_type;
-	j->cpu_bind	 = NULL;
-	if (cpu_bind) {
-		j->cpu_bind = xmalloc(strlen(cpu_bind) + 1);
-		strcpy(j->cpu_bind, cpu_bind);
-	}
-	return j;
-}
-
-static void
-_lllp_job_state_destroy(lllp_job_state_t *j)
-{
-	debug3("destroying job [%u.%u] lllp state", j->jobid, j->jobstepid);
-        if (j) {
-		if (j->cpu_bind)
-			xfree(j->cpu_bind);
-	    	xfree(j);
-	}
-}
-
-#if 0
-/* Note: now inline in cr_release_lllp to support multiple job steps */
-static lllp_job_state_t *
-_find_lllp_job_state(uint32_t jobid)
-{
-        ListIterator  i = NULL;
-        lllp_job_state_t  *j = NULL;
-
-        i = list_iterator_create(lllp_ctx->job_list);
-        while ((j = list_next(i)) && (j->jobid != jobid)) {;}
-        list_iterator_destroy(i);
-        return j;
-}
-
-static void
-_remove_lllp_job_state(uint32_t jobid)
-{
-        ListIterator  i = NULL;
-        lllp_job_state_t  *j = NULL;
-
-        i = list_iterator_create(lllp_ctx->job_list);
-        while ((j = list_next(i)) && (j->jobid != jobid)) {;}
-	if (j) {
-	    	list_delete_item(i);
-	}
-        list_iterator_destroy(i);
-}
-#endif
-
-void
-_append_lllp_job_state(lllp_job_state_t *j)
-{
-        list_append(lllp_ctx->job_list, j);
-}
-
-void
-lllp_ctx_destroy(void)
-{
-	xfree(lllp_reserved);
 
-    	if (lllp_ctx == NULL)
-		return;
-
-        xassert(lllp_ctx->magic == LLLP_CTX_MAGIC);
-
-        slurm_mutex_lock(&lllp_ctx->mutex);
-	list_destroy(lllp_ctx->job_list);
-
-        xassert(lllp_ctx->magic = ~LLLP_CTX_MAGIC);
-
-        slurm_mutex_unlock(&lllp_ctx->mutex);
-        slurm_mutex_destroy(&lllp_ctx->mutex);
-
-    	xfree(lllp_ctx);
-}
-
-void
-lllp_ctx_alloc(void)
-{
-	uint32_t num_lllp;
+	xfree(task_array);
+	bit_free(avail_map);
 
-	debug3("alloc LLLP");
+	/* last step: expand the masks to bind each task
+	 * to the requested resource */
+	_expand_masks(req->cpu_bind_type, max_tasks, masks,
+			hw_sockets, hw_cores, hw_threads);
 
-	xfree(lllp_reserved);
-	num_lllp = conf->sockets * conf->cores * conf->threads;
-	if (conf->cpus > num_lllp) {
-	    	num_lllp = conf->cpus;
-	}
-	lllp_reserved_size = num_lllp;
-	lllp_reserved = xmalloc(num_lllp * sizeof(uint32_t));
-
-	if (lllp_ctx) {
-		lllp_ctx_destroy();
-	}
-
-        lllp_ctx = xmalloc(sizeof(*lllp_ctx));
-
-        slurm_mutex_init(&lllp_ctx->mutex);
-        slurm_mutex_lock(&lllp_ctx->mutex);
-        
-        lllp_ctx->job_list = NULL;
-	lllp_ctx->job_list = list_create((ListDelF) _lllp_job_state_destroy);
-
-        xassert(lllp_ctx->magic = LLLP_CTX_MAGIC);
-        
-        slurm_mutex_unlock(&lllp_ctx->mutex);
-}
-
-static int _init_lllp(void)
-{
-	int j = 0, k = 0;
-	int usable_sockets, usable_threads, usable_cores;
-
-	debug3("init LLLP");
-
-  	/* FIX for heterogeneous socket/core/thread count per system
-	 * in future releases */
-	usable_sockets = conf->sockets;
-	usable_threads = conf->threads;
-	usable_cores   = conf->cores;
-
-        lllp_tasks = xmalloc(sizeof(struct node_gids));
-	lllp_tasks->sockets =  xmalloc(sizeof(struct socket_gids) * usable_sockets);
-	for (j=0; j<usable_sockets; j++) {
-		lllp_tasks->sockets[j].cores =  xmalloc(sizeof(struct core_gids) * usable_cores);
-		for (k=0; k<usable_cores; k++) {
-			lllp_tasks->sockets[j].cores[k].threads = 
-					xmalloc(sizeof(struct thread_gids) * usable_threads);
-		}
-	}
 	return SLURM_SUCCESS;
 }
 
-int _cleanup_lllp(void)
-{
-	int i=0, j=0;
-  	/* FIX for heterogeneous socket/core/thread count per system in future releases */
-	int usable_sockets = conf->sockets;
-	int usable_cores   = conf->cores;
-
-	for (i=0; i<usable_sockets; i++) { 
-		for (j=0; j<usable_cores; j++) {
-			xfree(lllp_tasks->sockets[i].cores[j].threads);
-		}
-		xfree(lllp_tasks->sockets[i].cores);
-	}
-	xfree(lllp_tasks->sockets);
-	xfree(lllp_tasks);
-	return SLURM_SUCCESS;
-}
-
-void _print_tasks_per_lllp (void)
-{
-	int j=0, k=0, l=0;
-  	/* FIX for heterogeneous socket/core/thread count per system
-	 * in future releases */
-	int usable_sockets = conf->sockets;
-	int usable_cores   = conf->cores;  
-	int usable_threads = conf->threads;
-  
-	info("_print_tasks_per_lllp ");
-  
-	for(j=0; j < usable_sockets; j++) {
-		for(k=0; k < usable_cores; k++) {
-			for(l=0; l < usable_threads; l++) {
-				info("socket %d core %d thread %d tasks %d ", j, k, l, 
-				     lllp_tasks->sockets[j].cores[k].threads[l].tasks);
-			}
-		}
-	}
-}
-
-/* _block_map
+/*
+ * _lllp_map_abstract_mask
  *
- * safely returns a mapped index using a provided block map
+ * Map one abstract block mask to a physical machine mask
  *
- * IN - index to map
- * IN - map to use
+ * IN - mask to map
+ * OUT - mapped mask (storage allocated in this routine)
  */
-static uint16_t _block_map(uint16_t index, uint16_t *map)
+static bitstr_t *_lllp_map_abstract_mask(bitstr_t *bitmask)
 {
-	if (map == NULL) {
-	    	return index;
-	}
-	/* make sure bit falls in map */
-	if (index >= conf->block_map_size) {
-		debug3("wrapping index %u into block_map_size of %u",
-		       index, conf->block_map_size);
-		index = index % conf->block_map_size;
-	}
-	index = map[index];
-	return(index);
-}
-
+    	int i, bit;
+	int num_bits = bit_size(bitmask);
+	bitstr_t *newmask = NULL;
+	newmask = (bitstr_t *) bit_alloc(num_bits);
 
-/*
- * _single_mask
- *
- * This function allocates and returns a abstract (unmapped) bitmask given the
- * machine architecture, the index for the task, and the desired binding type
- */
-static void _single_mask(const uint16_t nsockets, 
-			 const uint16_t ncores, 
-			 const uint16_t nthreads, 
-			 const uint16_t socket_id,
-			 const uint16_t core_id, 
-			 const uint16_t thread_id,
-			 const bool bind_to_exact_socket,
-			 const bool bind_to_exact_core,
-			 const bool bind_to_exact_thread,
-			 bitstr_t **single_mask ) 
-{
-	int socket, core, thread;
-	int nsockets_left, ncores_left, nthreads_left;
-	bitoff_t bit;
-	bitoff_t num_bits = nsockets * ncores * nthreads;
-	bitstr_t * bitmask = bit_alloc(num_bits);
-
-	if (bind_to_exact_socket) {
-		nsockets_left = 1;
-		socket = socket_id;
-	} else {
-		nsockets_left = nsockets;
-		socket = 0;
-	}	
-	while (nsockets_left-- > 0) {
-		if (bind_to_exact_core) {
-			ncores_left = 1;
-			core = core_id;
-		} else {
-			ncores_left = ncores;
-			core = 0;
-		}
-		while (ncores_left-- > 0) {
-			if (bind_to_exact_thread) { 
-				nthreads_left = 1; 
-				thread = thread_id;
-			} else { 
-				nthreads_left = nthreads; 
-				thread = 0; 
-			}
-			while (nthreads_left-- > 0) {
-				bit = SCT_TO_LLLP(socket, core, thread,
-						  ncores, nthreads);
-				if (bit < num_bits)
-					bit_set(bitmask, bit);
-				else
-					info("Invalid job cpu_bind mask");
-				thread++;
-			}
-			core++;
+	/* remap to physical machine */
+	for (i = 0; i < num_bits; i++) {
+		if (bit_test(bitmask,i)) {
+			bit = BLOCK_MAP(i);
+			bit_set(newmask, bit);
 		}
-		socket++;
 	}
-	
-	*single_mask = bitmask;
-
-#if(0)
-	char *str = bit_fmt_hexmask(bitmask);
-	info("_single_mask(Real: %d.%d.%d\t Use:%d.%d.%d\t = %s )",
-	     nsockets, ncores, nthreads,
-	     socket_id, core_id, thread_id, *str);
-	xfree(str);
-#endif
+	return newmask;
 }
 
-
 /*
- * cr_reserve_unit
+ * _lllp_map_abstract_masks
+ *
+ * Map an array of abstract block masks to physical machine masks
  *
- * Given a bitstr_t, expand any set bits to cover the:
- * - entire socket if cr_type == CR_SOCKET or CR_SOCKET_MEMORY to 
- *   create a reservation for the entire socket.
- *     or
- * - entire core if cr_type == CR_CORE or CR_CORE_MEMORY to 
- *   create a reservation for the entire core.
+ * IN- maximum number of tasks
+ * IN/OUT- array of masks
  */
-static void _cr_reserve_unit(bitstr_t *bitmask, int cr_type)
+static void _lllp_map_abstract_masks(const uint32_t maxtasks, bitstr_t **masks)
 {
-	uint32_t nsockets = conf->sockets;
-	uint32_t ncores   = conf->cores;
-	uint32_t nthreads = conf->threads;
-	bitoff_t bit;
-	int socket, core, thread;
-	int nsockets_left, ncores_left, nthreads_left;
-	int num_bits;
-	bool reserve_this_socket = false;
-	bool reserve_this_core   = false;
-
-	if (!bitmask) {
-	    	return;
-	}
-	if ((cr_type != CR_SOCKET) &&
-	    (cr_type != CR_SOCKET_MEMORY) &&
-	    (cr_type != CR_CORE) &&
-	    (cr_type != CR_CORE_MEMORY)) {
-		return;
-	}
-
-	num_bits = bit_size(bitmask);
-	nsockets_left = nsockets;
-	socket = 0;
-	while (nsockets_left-- > 0) {
-		reserve_this_socket = false;
-		ncores_left = ncores;
-		core = 0;
-		while (ncores_left-- > 0) { /* check socket for set bits */
-			reserve_this_core = false;
-			nthreads_left = nthreads; 
-			thread = 0; 
-			while (nthreads_left-- > 0) {
-				bit = SCT_TO_LLLP(socket, core, thread,
-						  ncores, nthreads);
-				/* map abstract to machine */
-				bit = BLOCK_MAP(bit);
-				if (bit < num_bits) {
-					if (bit_test(bitmask,bit)) {
-						reserve_this_socket = true;
-						reserve_this_core   = true;
-						nthreads_left = 0;
-					}
-				} else
-					info("Invalid job cpu_bind mask");
-				thread++;
-			}
-			/* mark entire core */
-			if (((cr_type == CR_CORE) ||
-			     (cr_type == CR_CORE_MEMORY)) &&
-			    reserve_this_core) {
-				nthreads_left = nthreads; 
-				thread = 0; 
-				while (nthreads_left-- > 0) {
-					bit = SCT_TO_LLLP(socket, core, thread,
-							  ncores, nthreads);
-					/* map abstract to machine */
-					bit = BLOCK_MAP(bit);
-					if (bit < num_bits)
-						bit_set(bitmask, bit);
-					else
-						info("Invalid job cpu_bind mask");
-					thread++;
-				}
-			}
-			core++;
-		}
-		/* mark entire socket */
-		if (((cr_type == CR_SOCKET) ||
-		     (cr_type == CR_SOCKET_MEMORY)) &&
-		    reserve_this_socket) {
-			ncores_left = ncores;
-			core = 0;
-			while (ncores_left-- > 0) {
-				nthreads_left = nthreads; 
-				thread = 0; 
-				while (nthreads_left-- > 0) {
-					bit = SCT_TO_LLLP(socket, core, thread,
-							  ncores, nthreads);
-					/* map abstract to machine */
-					bit = BLOCK_MAP(bit);
-					if (bit < num_bits)
-						bit_set(bitmask, bit);
-					else
-						info("Invalid job cpu_bind mask");
-					thread++;
-				}
-				core++;
-			}
+    	int i;
+	debug3("_lllp_map_abstract_masks");
+	
+	for (i = 0; i < maxtasks; i++) { 
+		bitstr_t *bitmask = masks[i];
+	    	if (bitmask) {
+			bitstr_t *newmask = _lllp_map_abstract_mask(bitmask);
+			bit_free(bitmask);
+			masks[i] = newmask;
 		}
-		socket++;
 	}
-	
 }
 
-
-static int _get_bitmap_from_cpu_bind(bitstr_t *bitmap_test,
-				     cpu_bind_type_t cpu_bind_type, 
-				     char *cpu_bind, uint32_t numtasks)
+/* 
+ * _lllp_generate_cpu_bind
+ *
+ * Generate the cpu_bind type and string given an array of bitstr_t masks
+ *
+ * IN/OUT- job launch request (cpu_bind_type and cpu_bind updated)
+ * IN- maximum number of tasks
+ * IN- array of masks
+ */
+static void _lllp_generate_cpu_bind(launch_tasks_request_msg_t *req,
+				    const uint32_t maxtasks, bitstr_t **masks)
 {
-	char opt_dist[10];
-	char *dist_str = NULL;
-	char *dist_str_next = NULL;
-	int bitmap_size = bit_size(bitmap_test);
-	int rc = SLURM_SUCCESS;
-	unsigned int i;
-	dist_str = cpu_bind;
-	
-	if (cpu_bind_type & CPU_BIND_RANK) {
-		for (i=0; i<numtasks; i++) {
-			if (i < bitmap_size)
-				bit_set(bitmap_test, i);
-			else {
-				info("Invalid job cpu_bind mask");
-				return SLURM_ERROR;
-			}
-		}
-		return rc;
-	}
-
-	i = 0;
-	while (dist_str != NULL) {
-		if (i >= numtasks) {	/* no more tasks need masks */
-		    	break;
-		}
-		if (*dist_str == ',') {	/* get next mask from cpu_bind */
-			dist_str++;
-		}
-		dist_str_next = strchr(dist_str, ',');
-
-		if (dist_str_next != NULL) {
-			strncpy(opt_dist, dist_str, dist_str_next-dist_str);
-			opt_dist[dist_str_next-dist_str] = '\0';
-		} else {
-			strcpy(opt_dist, dist_str);
-		}
+    	int i, num_bits=0, masks_len;
+	bitstr_t *bitmask;
+	bitoff_t charsize;
+	char *masks_str = NULL;
+	char buf_type[100];
 
-		/* add opt_dist to bitmap_test */
-		if (cpu_bind_type & CPU_BIND_MASK) {
-			bit_unfmt_hexmask(bitmap_test, opt_dist);
-		} else if (cpu_bind_type & CPU_BIND_MAP) {
-			unsigned int mycpu = 0;
-			if (strncmp(opt_dist, "0x", 2) == 0) {
-				mycpu = strtoul(&(opt_dist[2]), NULL, 16);
-			} else {
-				mycpu = strtoul(opt_dist, NULL, 10);
-			}
-			if (mycpu < bitmap_size)
-				bit_set(bitmap_test, mycpu);
-			else {
-				info("Invalid job cpu_bind mask");
-				rc = SLURM_ERROR;
-				/* continue and try to map remaining tasks */
-			}
+	for (i = 0; i < maxtasks; i++) { 
+		bitmask = masks[i];
+	    	if (bitmask) {
+			num_bits = bit_size(bitmask);
+			break;
 		}
-
-		dist_str = dist_str_next;
-		dist_str_next = NULL;
-	    	i++;
 	}
-	return rc;
-}
+	charsize = (num_bits + 3) / 4;		/* ASCII hex digits */
+	charsize += 3;				/* "0x" and trailing "," */
+	masks_len = maxtasks * charsize + 1;	/* number of masks + null */
 
+	debug3("_lllp_generate_cpu_bind %d %d %d", maxtasks, charsize,
+		masks_len);
 
-static void _cr_update_reservation(int reserve, uint32_t *reserved, 
-				   bitstr_t *mask)
-{
-	int i;
-	int num_bits = bit_size(mask);
-
-	for(i=0; i < num_bits; i++) {
-		if (bit_test(mask,i)) {
-			if (reserve) {
-				/* reserve LLLP */
-				reserved[i]++;
-			} else {
-				/* release LLLP only if non-zero */
-				if (reserved[i] > 0) {
-					reserved[i]--;
-				}
-			}
+	masks_str = xmalloc(masks_len);
+	masks_len = 0;
+	for (i = 0; i < maxtasks; i++) {
+	    	char *str;
+		int curlen;
+		bitmask = masks[i];
+	    	if (bitmask == NULL) {
+			continue;
 		}
-	}
-}
-
-static void _cr_update_lllp(int reserve, uint32_t job_id, uint32_t job_step_id,
-			    cpu_bind_type_t cpu_bind_type, char *cpu_bind,
-			    uint32_t numtasks)
-{
-	int buf_len = 1024;
-	char buffer[buf_len], buftmp[128], buf_action[20];	/* for info */
-
-	if (lllp_reserved == NULL) {
-	    	/* fixme: lllp_reserved not allocated */
-	    	return;
-	}
+		str = (char *)bit_fmt_hexmask(bitmask);
+		curlen = strlen(str) + 1;
 
-	if ((cpu_bind_type & CPU_BIND_RANK) ||
-	    (cpu_bind_type & CPU_BIND_MASK) ||
-	    (cpu_bind_type & CPU_BIND_MAP)) {
-		int i = 0;
-		bitoff_t num_bits = 
-			conf->sockets * conf->cores * conf->threads;
-		bitstr_t * bitmap_test = bit_alloc(num_bits);
-		_get_bitmap_from_cpu_bind(bitmap_test,
-					  cpu_bind_type, cpu_bind, numtasks);
-
-		_cr_reserve_unit(bitmap_test, conf->cr_type);
-
-		_cr_update_reservation(reserve, lllp_reserved, bitmap_test);
-
-		bit_free(bitmap_test);	/* not currently stored with job_id */
-
-		/*** display the updated lllp_reserved counts ***/
-		buffer[0] = '\0';
-		for (i=num_bits-1; i >=0; i--) {
-			sprintf(buftmp, "%d", lllp_reserved[i]);
-			if (strlen(buftmp) + strlen(buffer) + 1 < buf_len) {
-			        if (i < (num_bits-1)) strcat(buffer,",");
-				strcat(buffer,buftmp);
-			} else {/* out of space...indicate incomplete string */
-				buffer[strlen(buffer)-1] = '*';
-				buffer[strlen(buffer)] = '\0';
-				break;
-			}
-		}
-		if (reserve) {
-			strcpy(buf_action, "reserve");
-		} else {
-			strcpy(buf_action, "release");
-		}
-		info("LLLP update %s [%u.%u]: %s (CPU IDs: %d...0)",
-			buf_action, job_id, job_step_id, buffer, num_bits-1);
+		if (masks_len > 0)
+			masks_str[masks_len-1]=',';
+		strncpy(&masks_str[masks_len], str, curlen);
+		masks_len += curlen;
+		xassert(masks_str[masks_len] == '\0');
+		xfree(str);
 	}
-}
-
-
-void cr_reserve_lllp(uint32_t job_id,
-			launch_tasks_request_msg_t *req, uint32_t node_id)
-{
-	lllp_job_state_t *j;
-	cpu_bind_type_t cpu_bind_type = req->cpu_bind_type;
-	char *cpu_bind = req->cpu_bind;
-	uint32_t numtasks = 0;
-	char buf_type[100];
-
-	debug3("reserve LLLP job [%u.%u]\n", job_id, req->job_step_id);
 
-	if (req->tasks_to_launch) {
-		numtasks = req->tasks_to_launch[(int)node_id];
+	if (req->cpu_bind) {
+	    	xfree(req->cpu_bind);
 	}
-
-	slurm_sprint_cpu_bind_type(buf_type, cpu_bind_type);
-	debug3("reserve lllp job [%u.%u]: %d tasks; %s[%d], %s",
-	       job_id, req->job_step_id, numtasks,
-	       buf_type, cpu_bind_type, cpu_bind);
-	if (cpu_bind_type == 0)
-		return;
-
-
-    	/* store job_id, cpu_bind_type, cpu_bind */
-	slurm_mutex_lock(&lllp_ctx->mutex);
-
-	j = _lllp_job_state_create(job_id, req->job_step_id,
-					cpu_bind_type, cpu_bind, numtasks);
-
-	if (j) {
-		_append_lllp_job_state(j);
-		_cr_update_lllp(1, job_id, req->job_step_id,
-				cpu_bind_type, cpu_bind, numtasks);
+	if (masks_str[0] != '\0') {
+		req->cpu_bind = masks_str;
+		req->cpu_bind_type |= CPU_BIND_MASK; 
+	} else {
+		req->cpu_bind = NULL;
+		req->cpu_bind_type &= ~CPU_BIND_VERBOSE;
 	}
-	slurm_mutex_unlock(&lllp_ctx->mutex);
-}
 
-void cr_release_lllp(uint32_t job_id)
-{
-	ListIterator  i = NULL;
-	lllp_job_state_t *j;
-	cpu_bind_type_t cpu_bind_type = 0;
-	char *cpu_bind = NULL;
-	uint32_t numtasks = 0;
-	char buf_type[100];
+	/* clear mask generation bits */
+	req->cpu_bind_type &= ~CPU_BIND_TO_THREADS;
+	req->cpu_bind_type &= ~CPU_BIND_TO_CORES;
+	req->cpu_bind_type &= ~CPU_BIND_TO_SOCKETS;
+	req->cpu_bind_type &= ~CPU_BIND_TO_LDOMS;
 
-	debug3("release LLLP job [%u.*]", job_id);
-
-    	/* retrieve cpu_bind_type, cpu_bind from job_id */
-	slurm_mutex_lock(&lllp_ctx->mutex);
-	i = list_iterator_create(lllp_ctx->job_list);
-	while ((j = list_next(i))) {
-		if (j->jobid == job_id) {
-			cpu_bind_type = j->cpu_bind_type;
-			cpu_bind      = j->cpu_bind;
-			numtasks      = j->numtasks;
-			slurm_sprint_cpu_bind_type(buf_type, cpu_bind_type);
-			debug3("release search lllp job %u: %d tasks; %s[%d], %s",
-			       j->jobid, numtasks,
-			       buf_type, cpu_bind_type, cpu_bind);
-
-			_cr_update_lllp(0, job_id, j->jobstepid,
-					cpu_bind_type, cpu_bind, numtasks);
-
-			/* done with saved state, remove entry */
-			list_delete_item(i);
-		}
-	}
-	list_iterator_destroy(i);
-	slurm_mutex_unlock(&lllp_ctx->mutex);
+	slurm_sprint_cpu_bind_type(buf_type, req->cpu_bind_type);
+	info("_lllp_generate_cpu_bind jobid [%u]: %s, %s",
+	     req->job_id, buf_type, masks_str);
 }
 
-
diff --git a/src/plugins/task/affinity/dist_tasks.h b/src/plugins/task/affinity/dist_tasks.h
index 92b82a91f..b009224c4 100644
--- a/src/plugins/task/affinity/dist_tasks.h
+++ b/src/plugins/task/affinity/dist_tasks.h
@@ -1,10 +1,11 @@
 /*****************************************************************************\
  *  Copyright (C) 2006 Hewlett-Packard Development Company, L.P.
  *  Written by Susanne M. Balle, <susanne.balle@hp.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -35,73 +36,10 @@
 #ifndef _SLURMSTEPD_DIST_TASKS_H
 #define _SLURMSTEPD_DIST_TASKS_H
 
-#if HAVE_CONFIG_H
-#  include "config.h"
-#endif
+#include <stdint.h>
+#include "src/common/slurm_protocol_defs.h"
 
-#if HAVE_STRING_H
-#  include <string.h>
-#endif
-
-#include <signal.h>
-#include <sys/types.h>
-#include <grp.h>
-#include <stdlib.h>
-
-#include "src/common/xmalloc.h"
-#include "src/common/xassert.h"
-#include "src/common/xstring.h"
-#include "src/common/fd.h"
-#include "src/common/log.h"
-#include "src/common/eio.h"
-#include "src/common/slurm_protocol_api.h"
-#include "src/common/slurm_resource_info.h"
-
-#include "src/common/bitstring.h"
-
-#include "src/slurmd/slurmd/slurmd.h"
-
-/* Structures to create an object oriented version of a 4-D 
-   infrastructure --> task id mapping [node][cpu][core][taskid] = tid
-*/
-struct thread_gids {
-  int *gids;  /* Taskids for a specific thread */
-  int tasks;  /* Number of tasks for a specific thread */
-};
-
-struct core_gids {
-  struct thread_gids *threads; /* Taskids for a specific thread */
-};
-
-struct socket_gids {
-  struct core_gids *cores; /* Taskids for a specific core */
-};
-
-struct node_gids {
-  struct socket_gids *sockets; /* Taskids for a specific CPU */
-};
-
-struct slurm_lllp_context {
-#ifndef NDEBUG
-#  define LLLP_CTX_MAGIC 0x0d0d0d
-        int magic;
-#endif
-#if WITH_PTHREADS  
-        pthread_mutex_t mutex;
-#endif
-        List           job_list;   /* List of job bindings */
-};
-typedef struct slurm_lllp_context slurm_lllp_ctx_t;
-
-void cr_reserve_lllp(uint32_t job_id,
-			launch_tasks_request_msg_t *req, uint32_t node_id);
-void cr_release_lllp(uint32_t job_id);
+void batch_bind(batch_job_launch_msg_t *req);
 void lllp_distribution(launch_tasks_request_msg_t *req, uint32_t node_id);
-void lllp_ctx_destroy(void);
-void lllp_ctx_alloc(void);
-void get_bitmap_from_cpu_bind(bitstr_t *bitmap_test,
-			      cpu_bind_type_t cpu_bind_type, 
-			      char *cpu_bind, uint32_t numtasks);
 
 #endif /* !_SLURMSTEPD_DIST_TASKS_H */
-
diff --git a/src/plugins/task/affinity/numa.c b/src/plugins/task/affinity/numa.c
index a3d7f57b1..3ba7265c0 100644
--- a/src/plugins/task/affinity/numa.c
+++ b/src/plugins/task/affinity/numa.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2006 The Regents of the University of California and
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -150,7 +151,7 @@ void slurm_chk_memset(nodemask_t *mask, slurmd_job_t *job)
 
 int get_memset(nodemask_t *mask, slurmd_job_t *job)
 {
-	int nummasks, maskid, i;
+	int nummasks, maskid, i, threads;
 	char *curstr, *selstr;
 	char mstr[1 + NUMA_NUM_NODES / 4];
 	int local_id = job->envtp->localid;
@@ -167,7 +168,8 @@ int get_memset(nodemask_t *mask, slurmd_job_t *job)
 	}
 
 	if (job->mem_bind_type & MEM_BIND_RANK) {
-		nodemask_set(mask, job->envtp->localid % job->cpus);
+		threads = MAX(conf->threads, 1);
+		nodemask_set(mask, job->envtp->localid % (job->cpus*threads));
 		return true;
 	}
 
@@ -238,4 +240,81 @@ int get_memset(nodemask_t *mask, slurmd_job_t *job)
 	return false;
 }
 
+
+static uint16_t *numa_array = NULL;
+
+/* helper function */
+static void _add_numa_mask_to_array(unsigned long *cpu_mask, int size,
+					uint16_t maxcpus, uint16_t nnode_id)
+{
+	unsigned long count = 1;
+	int i, j, x = sizeof(unsigned long) * 8;
+	for (i = 0; i < size; i++) {
+		/* iterate over each bit of this unsigned long */
+		for (j = 0, count = 1; j < x; j++, count *= 2) {
+			if (count & cpu_mask[i]) {
+				/* this bit in the cpu_mask is set */
+				int cpu = i * sizeof(unsigned long) + j;
+				if (cpu < maxcpus) {
+					numa_array[cpu] = nnode_id;
+				}
+			}
+		}
+	}
+}
+
+/* return the numa node for the given cpuid */
+extern uint16_t slurm_get_numa_node(uint16_t cpuid)
+{
+	uint16_t maxcpus = 0, nnid = 0;
+	int size, retry, max_node;
+	unsigned long *cpu_mask;
+	
+	maxcpus = conf->sockets * conf->cores * conf->threads;
+	if (cpuid >= maxcpus)
+		return 0;
+		
+	if (numa_array) {
+		return numa_array[cpuid];
+	}
+	
+	/* need to load the numa_array */
+	max_node = numa_max_node();
+
+	/* The required size of the mask buffer for numa_node_to_cpus()
+	 * is goofed up. The third argument is supposed to be the size
+	 * of the mask, which is an array of unsigned longs. The *unit*
+	 * of the third argument is unclear - should it be in bytes or
+	 * in unsigned longs??? Since I don't know, I'm using this retry
+	 * loop to try and determine an acceptable size. If anyone can
+	 * fix this interaction, please do!!
+	 */
+	size = 8;
+	cpu_mask = xmalloc(sizeof(unsigned long) * size);
+	retry = 0;
+	while (retry++ < 8 && numa_node_to_cpus(nnid, cpu_mask, size) < 0) {
+		size *= 2;
+		xrealloc(cpu_mask, sizeof(unsigned long) * size);
+	}
+	if (retry >= 8) {
+		xfree(cpu_mask);
+		error("NUMA problem with numa_node_to_cpus arguments");
+		return 0;
+	}
+	numa_array = xmalloc(sizeof(uint16_t) * maxcpus);
+	_add_numa_mask_to_array(cpu_mask, size, maxcpus, nnid);
+	while (nnid++ < max_node) {
+		if (numa_node_to_cpus(nnid, cpu_mask, size) < 0) {
+			error("NUMA problem - numa_node_to_cpus 2nd call fail");
+			xfree(cpu_mask);
+			xfree(numa_array);
+			numa_array = NULL;
+			return 0;
+		}
+		_add_numa_mask_to_array(cpu_mask, size, maxcpus, nnid);
+	}
+	xfree(cpu_mask);
+	return numa_array[cpuid];
+}
+
 #endif	/* HAVE_NUMA */
diff --git a/src/plugins/task/affinity/schedutils.c b/src/plugins/task/affinity/schedutils.c
index d5a371606..18bc2b325 100644
--- a/src/plugins/task/affinity/schedutils.c
+++ b/src/plugins/task/affinity/schedutils.c
@@ -6,7 +6,8 @@
  *  Copyright (C) 2004 Robert Love
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -122,7 +123,7 @@ char * cpuset_to_str(const cpu_set_t *mask, char *str)
 {
 	int base;
 	char *ptr = str;
-	char *ret = 0;
+	char *ret = NULL;
 
 	for (base = CPU_SETSIZE - 4; base >= 0; base -= 4) {
 		char val = 0;
@@ -138,7 +139,7 @@ char * cpuset_to_str(const cpu_set_t *mask, char *str)
 			ret = ptr;
 		*ptr++ = val_to_char(val);
 	}
-	*ptr = 0;
+	*ptr = '\0';
 	return ret ? ret : ptr - 1;
 }
 
diff --git a/src/plugins/task/affinity/task_affinity.c b/src/plugins/task/affinity/task_affinity.c
index 466622d18..5b6596bcc 100644
--- a/src/plugins/task/affinity/task_affinity.c
+++ b/src/plugins/task/affinity/task_affinity.c
@@ -5,12 +5,13 @@
  *  Copyright (C) 2005-2008 Hewlett-Packard Development Company, L.P.
  *  Modified by Hewlett-Packard for task affinity support using task_none.c
  *  Copyright (C) 2005-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).
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -43,12 +44,15 @@
 #endif
 
 #include <ctype.h>
+#include <dirent.h>
 #include <signal.h>
 #include <sys/types.h>
 
 #include "affinity.h"
 #include "dist_tasks.h"
 
+#define PURGE_CPUSET_DIRS 0
+
 /*
  * These variables are required by the generic plugin interface.  If they
  * are not found in the plugin, the plugin loader will ignore it.
@@ -86,7 +90,6 @@ const uint32_t plugin_version   = 100;
  */
 extern int init (void)
 {
-	lllp_ctx_alloc();
 	verbose("%s loaded", plugin_name);
 	return SLURM_SUCCESS;
 }
@@ -97,99 +100,75 @@ extern int init (void)
  */
 extern int fini (void)
 {
-	lllp_ctx_destroy();
 	verbose("%s unloaded", plugin_name);
 	return SLURM_SUCCESS;
 }
 
-/*
- * _isvalue_task
- * returns 1 is the argument appears to be a value, 0 otherwise
- * this should be identical to _isvalue in src/srun/opt.c
- */
-static int _isvalue_task(char *arg)
+/* cpu bind enforcement, update binding type based upon the
+ *	TaskPluginParam configuration parameter */
+static void _update_bind_type(launch_tasks_request_msg_t *req)
 {
-    	if (isdigit(*arg)) {		/* decimal values and 0x.. hex values */
-	    	return 1;
+	bool set_bind = false;
+
+	if (conf->task_plugin_param & CPU_BIND_NONE) {
+		req->cpu_bind_type |= CPU_BIND_NONE;
+		req->cpu_bind_type &= (~CPU_BIND_TO_SOCKETS);
+		req->cpu_bind_type &= (~CPU_BIND_TO_CORES);
+		req->cpu_bind_type &= (~CPU_BIND_TO_THREADS);
+		req->cpu_bind_type &= (~CPU_BIND_TO_LDOMS);
+		set_bind = true;
+	} else if (conf->task_plugin_param & CPU_BIND_TO_SOCKETS) {
+		req->cpu_bind_type &= (~CPU_BIND_NONE);
+		req->cpu_bind_type |= CPU_BIND_TO_SOCKETS;
+		req->cpu_bind_type &= (~CPU_BIND_TO_CORES);
+		req->cpu_bind_type &= (~CPU_BIND_TO_THREADS);
+		req->cpu_bind_type &= (~CPU_BIND_TO_LDOMS);
+		set_bind = true;
+	} else if (conf->task_plugin_param & CPU_BIND_TO_CORES) {
+		req->cpu_bind_type &= (~CPU_BIND_NONE);
+		req->cpu_bind_type &= (~CPU_BIND_TO_SOCKETS);
+		req->cpu_bind_type |= CPU_BIND_TO_CORES;
+		req->cpu_bind_type &= (~CPU_BIND_TO_THREADS);
+		req->cpu_bind_type &= (~CPU_BIND_TO_LDOMS);
+		set_bind = true;
+	} else if (conf->task_plugin_param & CPU_BIND_TO_THREADS) {
+		req->cpu_bind_type &= (~CPU_BIND_NONE);
+		req->cpu_bind_type &= (~CPU_BIND_TO_SOCKETS);
+		req->cpu_bind_type &= (~CPU_BIND_TO_CORES);
+		req->cpu_bind_type |= CPU_BIND_TO_THREADS;
+		req->cpu_bind_type &= (~CPU_BIND_TO_LDOMS);
+		set_bind = true;
+	} else if (conf->task_plugin_param & CPU_BIND_TO_LDOMS) {
+		req->cpu_bind_type &= (~CPU_BIND_NONE);
+		req->cpu_bind_type &= (~CPU_BIND_TO_SOCKETS);
+		req->cpu_bind_type &= (~CPU_BIND_TO_CORES);
+		req->cpu_bind_type &= (~CPU_BIND_TO_THREADS);
+		req->cpu_bind_type &= CPU_BIND_TO_LDOMS;
+		set_bind = true;
 	}
 
-	while (isxdigit(*arg)) {	/* hex values not preceded by 0x */
-		arg++;
+	if (conf->task_plugin_param & CPU_BIND_VERBOSE) {
+		req->cpu_bind_type |= CPU_BIND_VERBOSE;
+		set_bind = true;
 	}
 
-	if ((*arg == ',') || (*arg == '\0')) { /* end of field or string */
-	    	return 1;
+	if (set_bind) {
+		char bind_str[128];
+		slurm_sprint_cpu_bind_type(bind_str, req->cpu_bind_type);
+		info("task affinity : enforcing '%s' cpu bind method", 
+		     bind_str);
 	}
-
-	return 0;			/* not a value */
 }
 
-/* cpu bind enforcement, update binding type based upon SLURM_ENFORCED_CPU_BIND
- * environment variable */
-static void _update_bind_type(launch_tasks_request_msg_t *req)
+/*
+ * task_slurmd_batch_request()
+ */
+extern int task_slurmd_batch_request (uint32_t job_id, 
+				      batch_job_launch_msg_t *req)
 {
-	char *buf, *p, *tok;
-	char buf_type[100];
-	cpu_bind_type_t cpu_bind_type;
-	int cpu_bind_type_is_valid = 0;
-	char* cpu_bind_type_str = getenv("SLURM_ENFORCED_CPU_BIND");
-
-	if (cpu_bind_type_str == NULL)
-		return;
-
-	buf = xstrdup(cpu_bind_type_str);
-	p = buf;
-
-	/* change all ',' delimiters not followed by a digit to ';'  */
-	/* simplifies parsing tokens while keeping map/mask together */
-	while (p[0] != '\0') {
-		if ((p[0] == ',') && (!_isvalue_task(&(p[1]))))
-			p[0] = ';';
-		p++;
-	}
-
-	p = buf;
-	cpu_bind_type = 0;
-	while ((tok = strsep(&p, ";")) && !cpu_bind_type_is_valid) {
-		if ((strcasecmp(tok, "q") == 0) ||
-		    (strcasecmp(tok, "quiet") == 0)) {
-			cpu_bind_type &= ~CPU_BIND_VERBOSE;
-		} else if ((strcasecmp(tok, "v") == 0) ||
-			   (strcasecmp(tok, "verbose") == 0)) {
-			cpu_bind_type |= CPU_BIND_VERBOSE;
-		} else if ((strcasecmp(tok, "no") == 0) ||
-			   (strcasecmp(tok, "none") == 0)) {
-			cpu_bind_type |= CPU_BIND_NONE;
-			cpu_bind_type_is_valid = 1;
-		} else if ((strcasecmp(tok, "socket") == 0) ||
-			   (strcasecmp(tok, "sockets") == 0)) {
-			cpu_bind_type |= CPU_BIND_TO_SOCKETS;
-			cpu_bind_type_is_valid = 1;
-		} else if ((strcasecmp(tok, "core") == 0) ||
-			   (strcasecmp(tok, "cores") == 0)) {
-			cpu_bind_type |= CPU_BIND_TO_CORES;
-			cpu_bind_type_is_valid = 1;
-		} else if ((strcasecmp(tok, "thread") == 0) ||
-			   (strcasecmp(tok, "threads") == 0)) {
-			cpu_bind_type |= CPU_BIND_TO_THREADS;
-			cpu_bind_type_is_valid = 1;
-		} else {
-			error("task affinity : invalid enforced cpu bind "
-			      "method '%s': none or an auto binding "
-			      "(cores,sockets,threads) is required",
-			      cpu_bind_type_str);
-			cpu_bind_type_is_valid = 0;
-			break;
-		}
-	}
-	xfree(buf);
-
-	if (cpu_bind_type_is_valid) {
-		req->cpu_bind_type = cpu_bind_type;
-		slurm_sprint_cpu_bind_type(buf_type, req->cpu_bind_type);
-		info("task affinity : enforcing '%s' cpu bind method", 
-		     cpu_bind_type_str);
-	}
+	info("task_slurmd_batch_request: %u", job_id);
+	batch_bind(req);
+	return SLURM_SUCCESS;
 }
 
 /*
@@ -221,9 +200,6 @@ extern int task_slurmd_launch_request (uint32_t job_id,
 		info("task affinity : after lllp distribution cpu bind "
 		     "method is '%s' (%s)", buf_type, req->cpu_bind);
 	}
-		
-	/* Remove the slurm msg timeout needs to be investigated some more */
-	/* req->cpu_bind_type = CPU_BIND_NONE; */ 
 	
 	return SLURM_SUCCESS;
 }
@@ -236,7 +212,6 @@ extern int task_slurmd_reserve_resources (uint32_t job_id,
 					  uint32_t node_id)
 {
 	debug("task_slurmd_reserve_resources: %u", job_id);
-	cr_reserve_lllp(job_id, req, node_id);
 	return SLURM_SUCCESS;
 }
 
@@ -264,7 +239,48 @@ extern int task_slurmd_resume_job (uint32_t job_id)
 extern int task_slurmd_release_resources (uint32_t job_id)
 {
 	debug("task_slurmd_release_resources: %u", job_id);
-	cr_release_lllp(job_id);
+
+#if PURGE_CPUSET_DIRS
+	/* NOTE: The notify_on_release flag set in cpuset.c
+	 * should remove the directory, but that is not
+	 * happening reliably. */
+	if (conf->task_plugin_param & CPU_BIND_CPUSETS) {
+		char base[PATH_MAX], path[PATH_MAX];
+		if (snprintf(base, PATH_MAX, "%s/slurm%u",
+				CPUSET_DIR, job_id) > PATH_MAX) {
+			error("cpuset path too long");
+			return SLURM_ERROR;
+		}
+		if (rmdir(base) && (errno == ENOTEMPTY)) {
+			DIR *dirp;
+			struct dirent entry;
+			struct dirent *result;
+			int rc;
+			if ((dirp = opendir(base)) == NULL) {
+				error("could not open dir %s: %m", base);
+				return SLURM_ERROR;
+			}
+			while (1) {
+				rc = readdir_r(dirp, &entry, &result);
+				if (rc && (errno == EAGAIN))
+					continue;
+				if (rc || (result == NULL))
+					break;
+				if (strncmp(entry.d_name, "slurm", 5))
+					continue;
+				if (snprintf(path, PATH_MAX, "%s/%s",
+					     base, entry.d_name) > PATH_MAX) {
+					error("cpuset path too long");
+					break;
+				}
+				rmdir(path);
+			}
+			closedir(dirp);
+			rmdir(base);
+		}
+	}
+#endif
+
 	return SLURM_SUCCESS;
 }
 
@@ -277,7 +293,7 @@ extern int task_pre_setuid (slurmd_job_t *job)
 {
 	char path[PATH_MAX];
 
-	if (!conf->use_cpusets)
+	if (!(conf->task_plugin_param & CPU_BIND_CPUSETS))
 		return SLURM_SUCCESS;
 
 	if (snprintf(path, PATH_MAX, "%s/slurm%u",
@@ -285,8 +301,7 @@ extern int task_pre_setuid (slurmd_job_t *job)
 		error("cpuset path too long");
 		return SLURM_ERROR;
 	}
-	slurm_build_cpuset(CPUSET_DIR, path, job->uid, job->gid);
-	return SLURM_SUCCESS;
+	return slurm_build_cpuset(CPUSET_DIR, path, job->uid, job->gid);
 }
 
 /*
@@ -297,11 +312,13 @@ extern int task_pre_setuid (slurmd_job_t *job)
 extern int task_pre_launch (slurmd_job_t *job)
 {
 	char base[PATH_MAX], path[PATH_MAX];
+	int rc = SLURM_SUCCESS;
 
-	debug("affinity task_pre_launch: %u.%u, task %d", 
-		job->jobid, job->stepid, job->envtp->procid);
+	debug("affinity task_pre_launch:%u.%u, task:%u bind:%u", 
+	      job->jobid, job->stepid, job->envtp->procid,
+	      job->cpu_bind_type);
 
-	if (conf->use_cpusets) {
+	if (conf->task_plugin_param & CPU_BIND_CPUSETS) {
 		info("Using cpuset affinity for tasks");
 		if (snprintf(base, PATH_MAX, "%s/slurm%u",
 				CPUSET_DIR, job->jobid) > PATH_MAX) {
@@ -322,39 +339,51 @@ extern int task_pre_launch (slurmd_job_t *job)
 		cpu_set_t new_mask, cur_mask;
 		pid_t mypid  = job->envtp->task_pid;
 
-		int setval = 0;
 		slurm_getaffinity(mypid, sizeof(cur_mask), &cur_mask);
 
-		if (get_cpuset(&new_mask, job)
-		&&  (!(job->cpu_bind_type & CPU_BIND_NONE))) {
-			if (conf->use_cpusets) {
-				setval = slurm_set_cpuset(base, path, mypid,
+		if (get_cpuset(&new_mask, job) &&
+		    (!(job->cpu_bind_type & CPU_BIND_NONE))) {
+			if (conf->task_plugin_param & CPU_BIND_CPUSETS) {
+				rc = slurm_set_cpuset(base, path, mypid,
 						sizeof(new_mask), 
 						&new_mask);
 				slurm_get_cpuset(path, mypid,
-						sizeof(cur_mask), 
-						&cur_mask);
+						 sizeof(cur_mask), 
+						 &cur_mask);
 			} else {
-				setval = slurm_setaffinity(mypid,
-						sizeof(new_mask), 
-						&new_mask);
+				rc = slurm_setaffinity(mypid,
+						       sizeof(new_mask), 
+						       &new_mask);
 				slurm_getaffinity(mypid,
-						sizeof(cur_mask), 
-						&cur_mask);
+						  sizeof(cur_mask), 
+						  &cur_mask);
 			}
 		}
-		slurm_chkaffinity(setval ? &new_mask : &cur_mask, 
-					job, setval);
+		slurm_chkaffinity(rc ? &cur_mask : &new_mask, 
+				  job, rc);
+	} else if (job->mem_bind_type &&
+		   (conf->task_plugin_param & CPU_BIND_CPUSETS)) {
+		cpu_set_t cur_mask;
+		pid_t mypid  = job->envtp->task_pid;
+
+		/* Establish cpuset just for the memory binding */
+		slurm_getaffinity(mypid, sizeof(cur_mask), &cur_mask);
+		rc = slurm_set_cpuset(base, path, 
+				      (pid_t) job->envtp->task_pid, 
+				      sizeof(cur_mask), &cur_mask);
 	}
 
 #ifdef HAVE_NUMA
-	if (conf->use_cpusets && (slurm_memset_available() >= 0)) {
+	if ((conf->task_plugin_param & CPU_BIND_CPUSETS) && 
+	    (slurm_memset_available() >= 0)) {
 		nodemask_t new_mask, cur_mask;
 
 		cur_mask = numa_get_membind();
-		if (get_memset(&new_mask, job)
-		&&  (!(job->mem_bind_type & MEM_BIND_NONE))) {
+		if (get_memset(&new_mask, job) &&
+		    (!(job->mem_bind_type & MEM_BIND_NONE))) {
 			slurm_set_memset(path, &new_mask);
+			if (numa_available() >= 0)
+				numa_set_membind(&new_mask);
 			cur_mask = new_mask;
 		}
 		slurm_chk_memset(&cur_mask, job);
@@ -370,7 +399,7 @@ extern int task_pre_launch (slurmd_job_t *job)
 		slurm_chk_memset(&cur_mask, job);
 	}
 #endif
-	return SLURM_SUCCESS;
+	return rc;
 }
 
 /*
@@ -381,7 +410,28 @@ extern int task_pre_launch (slurmd_job_t *job)
 extern int task_post_term (slurmd_job_t *job)
 {
 	debug("affinity task_post_term: %u.%u, task %d",
-		job->jobid, job->stepid, job->envtp->procid);
+	      job->jobid, job->stepid, job->envtp->procid);
+
+#if PURGE_CPUSET_DIRS
+	/* NOTE: The notify_on_release flag set in cpuset.c
+	 * should remove the directory, but that is not
+	 * happening reliably. */
+	if (conf->task_plugin_param & CPU_BIND_CPUSETS) {
+		char base[PATH_MAX], path[PATH_MAX];
+		if (snprintf(base, PATH_MAX, "%s/slurm%u",
+				CPUSET_DIR, job->jobid) > PATH_MAX) {
+			error("cpuset path too long");
+			return SLURM_ERROR;
+		}
+		if (snprintf(path, PATH_MAX, "%s/slurm%u.%u_%d",
+				base, job->jobid, job->stepid,
+				job->envtp->localid) > PATH_MAX) {
+			error("cpuset path too long");
+			return SLURM_ERROR;
+		}
+		rmdir(path);
+	}
+#endif
 
 	return SLURM_SUCCESS;
 }
diff --git a/src/plugins/task/none/Makefile.in b/src/plugins/task/none/Makefile.in
index 975878622..b31ea8917 100644
--- a/src/plugins/task/none/Makefile.in
+++ b/src/plugins/task/none/Makefile.in
@@ -43,14 +43,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/plugins/task/none/task_none.c b/src/plugins/task/none/task_none.c
index 5e852eab6..a06a7e8b3 100644
--- a/src/plugins/task/none/task_none.c
+++ b/src/plugins/task/none/task_none.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -98,6 +99,16 @@ extern int fini (void)
 	return SLURM_SUCCESS;
 }
 
+/*
+ * task_slurmd_batch_request()
+ */
+extern int task_slurmd_batch_request (uint32_t job_id, 
+				      batch_job_launch_msg_t *req)
+{
+	debug("task_slurmd_batch_request: %u", job_id);
+	return SLURM_SUCCESS;
+}
+
 /*
  * task_slurmd_launch_request()
  */
diff --git a/src/plugins/topology/3d_torus/Makefile.am b/src/plugins/topology/3d_torus/Makefile.am
new file mode 100644
index 000000000..4763af1d8
--- /dev/null
+++ b/src/plugins/topology/3d_torus/Makefile.am
@@ -0,0 +1,17 @@
+# Makefile for topology/3d_torus plugin
+
+AUTOMAKE_OPTIONS = foreign
+
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+
+pkglib_LTLIBRARIES = topology_3d_torus.la
+
+# 3d_torus topology plugin.
+topology_3d_torus_la_SOURCES =	\
+	hilbert.c		\
+	hilbert.h		\
+	hilbert_slurm.c		\
+	topology_3d_torus.c
+topology_3d_torus_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
diff --git a/src/plugins/topology/3d_torus/Makefile.in b/src/plugins/topology/3d_torus/Makefile.in
new file mode 100644
index 000000000..8bb62ba70
--- /dev/null
+++ b/src/plugins/topology/3d_torus/Makefile.in
@@ -0,0 +1,574 @@
+# Makefile.in generated by automake 1.10.1 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@
+
+# Makefile for topology/3d_torus plugin
+
+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 = src/plugins/topology/3d_torus
+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/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 =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+pkglibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+topology_3d_torus_la_LIBADD =
+am_topology_3d_torus_la_OBJECTS = hilbert.lo hilbert_slurm.lo \
+	topology_3d_torus.lo
+topology_3d_torus_la_OBJECTS = $(am_topology_3d_torus_la_OBJECTS)
+topology_3d_torus_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(topology_3d_torus_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
+depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(topology_3d_torus_la_SOURCES)
+DIST_SOURCES = $(topology_3d_torus_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+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@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELAN_LIBS = @ELAN_LIBS@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
+FFLAGS = @FFLAGS@
+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@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_LDFLAGS = @LIB_LDFLAGS@
+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@
+NMEDIT = @NMEDIT@
+NUMA_LIBS = @NUMA_LIBS@
+OBJEXT = @OBJEXT@
+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_F77 = @ac_ct_F77@
+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@
+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_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+pkglib_LTLIBRARIES = topology_3d_torus.la
+
+# 3d_torus topology plugin.
+topology_3d_torus_la_SOURCES = \
+	hilbert.c		\
+	hilbert.h		\
+	hilbert_slurm.c		\
+	topology_3d_torus.c
+
+topology_3d_torus_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/plugins/topology/3d_torus/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/plugins/topology/3d_torus/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
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    f=$(am__strip_dir) \
+	    echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	    $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  p=$(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$p'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$p"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+topology_3d_torus.la: $(topology_3d_torus_la_OBJECTS) $(topology_3d_torus_la_DEPENDENCIES) 
+	$(topology_3d_torus_la_LINK) -rpath $(pkglibdir) $(topology_3d_torus_la_OBJECTS) $(topology_3d_torus_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hilbert.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hilbert_slurm.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topology_3d_torus.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+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; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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:  $(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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+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 clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+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-pkglibLTLIBRARIES
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-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-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+# 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/src/slurmctld/hilbert.c b/src/plugins/topology/3d_torus/hilbert.c
similarity index 98%
rename from src/slurmctld/hilbert.c
rename to src/plugins/topology/3d_torus/hilbert.c
index 6322fe0df..3b09f7982 100644
--- a/src/slurmctld/hilbert.c
+++ b/src/plugins/topology/3d_torus/hilbert.c
@@ -31,7 +31,7 @@
 #include "license.txt"
 */
 
-#include "src/slurmctld/hilbert.h"
+#include "src/plugins/topology/3d_torus/hilbert.h"
 
 extern void TransposetoAxes(
 coord_t* X,            // I O  position   [n]
diff --git a/src/slurmctld/hilbert.h b/src/plugins/topology/3d_torus/hilbert.h
similarity index 100%
rename from src/slurmctld/hilbert.h
rename to src/plugins/topology/3d_torus/hilbert.h
diff --git a/src/slurmctld/hilbert_slurm.c b/src/plugins/topology/3d_torus/hilbert_slurm.c
similarity index 87%
rename from src/slurmctld/hilbert_slurm.c
rename to src/plugins/topology/3d_torus/hilbert_slurm.c
index ad044fc53..466aa9601 100644
--- a/src/slurmctld/hilbert_slurm.c
+++ b/src/plugins/topology/3d_torus/hilbert_slurm.c
@@ -3,13 +3,14 @@
  *	on a Hilbert curve so that the resource allocation problem in 
  *	N-dimensions can be reduced to a 1-dimension problem
  *****************************************************************************
- *  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>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -41,7 +42,7 @@
 #  include "config.h"
 #endif
 
-#include "src/slurmctld/hilbert.h"
+#include "src/plugins/topology/3d_torus/hilbert.h"
 #include "src/slurmctld/slurmctld.h"
 
 static int _coord(char coord)
@@ -103,13 +104,20 @@ extern void nodes_to_hilbert_curve(void)
 		AxestoTranspose(hilbert, 5, dims);
 #ifdef HAVE_3D
 		node_ptr->hilbert_integer = 
-			((hilbert[0]>>4 & 1) << 14) + ((hilbert[1]>>4 & 1) << 13) +
-			((hilbert[2]>>4 & 1) << 12) + ((hilbert[0]>>3 & 1) << 11) +
-			((hilbert[1]>>3 & 1) << 10) + ((hilbert[2]>>3 & 1) <<  9) +
-			((hilbert[0]>>2 & 1) <<  8) + ((hilbert[1]>>2 & 1) <<  7) +
-			((hilbert[2]>>2 & 1) <<  6) + ((hilbert[0]>>1 & 1) <<  5) +
-			((hilbert[1]>>1 & 1) <<  4) + ((hilbert[2]>>1 & 1) <<  3) +
-			((hilbert[0]>>0 & 1) <<  2) + ((hilbert[1]>>0 & 1) <<  1) +
+			((hilbert[0]>>4 & 1) << 14) + 
+			((hilbert[1]>>4 & 1) << 13) +
+			((hilbert[2]>>4 & 1) << 12) + 
+			((hilbert[0]>>3 & 1) << 11) +
+			((hilbert[1]>>3 & 1) << 10) + 
+			((hilbert[2]>>3 & 1) <<  9) +
+			((hilbert[0]>>2 & 1) <<  8) + 
+			((hilbert[1]>>2 & 1) <<  7) +
+			((hilbert[2]>>2 & 1) <<  6) + 
+			((hilbert[0]>>1 & 1) <<  5) +
+			((hilbert[1]>>1 & 1) <<  4) + 
+			((hilbert[2]>>1 & 1) <<  3) +
+			((hilbert[0]>>0 & 1) <<  2) + 
+			((hilbert[1]>>0 & 1) <<  1) +
 			((hilbert[2]>>0 & 1) <<  0);
 #else
 		/* A variation on the above calculation would be required here
diff --git a/src/plugins/topology/3d_torus/topology_3d_torus.c b/src/plugins/topology/3d_torus/topology_3d_torus.c
new file mode 100644
index 000000000..e685a1bfb
--- /dev/null
+++ b/src/plugins/topology/3d_torus/topology_3d_torus.c
@@ -0,0 +1,113 @@
+/*****************************************************************************\
+ *  topology_3d_torus.c - Support for 3-Dimension torus interconnect
+ *	topology, default for Cray XT and Sun Constellation systems
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#if     HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <signal.h>
+#include <sys/types.h>
+
+#include <slurm/slurm_errno.h>
+#include "src/common/slurm_xlator.h"
+
+/*
+ * These variables are required by the generic plugin interface.  If they
+ * are not found in the plugin, the plugin loader will ignore it.
+ *
+ * plugin_name - a string giving a human-readable description of the
+ * plugin.  There is no maximum length, but the symbol must refer to
+ * a valid string.
+ *
+ * plugin_type - a string suggesting the type of the plugin or its
+ * applicability to a particular form of data or method of data handling.
+ * If the low-level plugin API is used, the contents of this string are
+ * unimportant and may be anything.  SLURM uses the higher-level plugin
+ * interface which requires this string to be of the form
+ *
+ *      <application>/<method>
+ *
+ * where <application> is a description of the intended application of
+ * the plugin (e.g., "task" for task control) and <method> is a description 
+ * of how this plugin satisfies that application.  SLURM will only load
+ * a task plugin if the plugin_type string has a prefix of "task/".
+ *
+ * plugin_version - an unsigned 32-bit integer giving the version number
+ * of the plugin.  If major and minor revisions are desired, the major
+ * version number may be multiplied by a suitable magnitude constant such
+ * as 100 or 1000.  Various SLURM versions will likely require a certain
+ * minimum versions for their plugins as this API matures.
+ */
+const char plugin_name[]        = "topology 3d_torus plugin";
+const char plugin_type[]        = "topology/3d_torus";
+const uint32_t plugin_version   = 100;
+
+extern void nodes_to_hilbert_curve(void);
+
+/*
+ * init() is called when the plugin is loaded, before any other functions
+ *	are called.  Put global initialization here.
+ */
+extern int init(void)
+{
+	verbose("%s loaded", plugin_name);
+	return SLURM_SUCCESS;
+}
+
+/*
+ * fini() is called when the plugin is removed. Clear any allocated 
+ *	storage here.
+ */
+extern int fini(void)
+{
+	return SLURM_SUCCESS;
+}
+
+/*
+ * topo_build_config - build or rebuild system topology information
+ *	after a system startup or reconfiguration.
+ */
+extern int topo_build_config(void)
+{
+#ifndef HAVE_BG
+	nodes_to_hilbert_curve();
+#endif
+	return SLURM_SUCCESS;
+}
+
diff --git a/src/plugins/topology/Makefile.am b/src/plugins/topology/Makefile.am
new file mode 100644
index 000000000..9d076b3e4
--- /dev/null
+++ b/src/plugins/topology/Makefile.am
@@ -0,0 +1,3 @@
+# Makefile for topology plugins
+
+SUBDIRS = 3d_torus none tree
diff --git a/src/plugins/topology/Makefile.in b/src/plugins/topology/Makefile.in
new file mode 100644
index 000000000..7b98f6181
--- /dev/null
+++ b/src/plugins/topology/Makefile.in
@@ -0,0 +1,576 @@
+# Makefile.in generated by automake 1.10.1 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@
+
+# Makefile for topology plugins
+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 = src/plugins/topology
+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/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@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELAN_LIBS = @ELAN_LIBS@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
+FFLAGS = @FFLAGS@
+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@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_LDFLAGS = @LIB_LDFLAGS@
+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@
+NMEDIT = @NMEDIT@
+NUMA_LIBS = @NUMA_LIBS@
+OBJEXT = @OBJEXT@
+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_F77 = @ac_ct_F77@
+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@
+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_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = 3d_torus none tree
+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 \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/plugins/topology/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  src/plugins/topology/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; nonemtpy = 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/src/plugins/topology/none/Makefile.am b/src/plugins/topology/none/Makefile.am
new file mode 100644
index 000000000..58d8f0ed4
--- /dev/null
+++ b/src/plugins/topology/none/Makefile.am
@@ -0,0 +1,13 @@
+# Makefile for topology/none plugin
+
+AUTOMAKE_OPTIONS = foreign
+
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+
+pkglib_LTLIBRARIES = topology_none.la
+
+# Null topology plugin.
+topology_none_la_SOURCES = topology_none.c
+topology_none_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
diff --git a/src/plugins/topology/none/Makefile.in b/src/plugins/topology/none/Makefile.in
new file mode 100644
index 000000000..4356e14f6
--- /dev/null
+++ b/src/plugins/topology/none/Makefile.in
@@ -0,0 +1,566 @@
+# Makefile.in generated by automake 1.10.1 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@
+
+# Makefile for topology/none plugin
+
+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 = src/plugins/topology/none
+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/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 =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+pkglibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+topology_none_la_LIBADD =
+am_topology_none_la_OBJECTS = topology_none.lo
+topology_none_la_OBJECTS = $(am_topology_none_la_OBJECTS)
+topology_none_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(topology_none_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
+depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(topology_none_la_SOURCES)
+DIST_SOURCES = $(topology_none_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+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@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELAN_LIBS = @ELAN_LIBS@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
+FFLAGS = @FFLAGS@
+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@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_LDFLAGS = @LIB_LDFLAGS@
+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@
+NMEDIT = @NMEDIT@
+NUMA_LIBS = @NUMA_LIBS@
+OBJEXT = @OBJEXT@
+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_F77 = @ac_ct_F77@
+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@
+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_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+pkglib_LTLIBRARIES = topology_none.la
+
+# Null topology plugin.
+topology_none_la_SOURCES = topology_none.c
+topology_none_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/plugins/topology/none/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/plugins/topology/none/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
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    f=$(am__strip_dir) \
+	    echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	    $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  p=$(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$p'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$p"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+topology_none.la: $(topology_none_la_OBJECTS) $(topology_none_la_DEPENDENCIES) 
+	$(topology_none_la_LINK) -rpath $(pkglibdir) $(topology_none_la_OBJECTS) $(topology_none_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topology_none.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+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; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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:  $(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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+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 clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+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-pkglibLTLIBRARIES
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-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-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+# 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/src/plugins/topology/none/topology_none.c b/src/plugins/topology/none/topology_none.c
new file mode 100644
index 000000000..723201216
--- /dev/null
+++ b/src/plugins/topology/none/topology_none.c
@@ -0,0 +1,107 @@
+/*****************************************************************************\
+ *  topology_none.c - Default for system topology
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#if     HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <signal.h>
+#include <sys/types.h>
+
+#include <slurm/slurm_errno.h>
+#include "src/common/slurm_xlator.h"
+
+/*
+ * These variables are required by the generic plugin interface.  If they
+ * are not found in the plugin, the plugin loader will ignore it.
+ *
+ * plugin_name - a string giving a human-readable description of the
+ * plugin.  There is no maximum length, but the symbol must refer to
+ * a valid string.
+ *
+ * plugin_type - a string suggesting the type of the plugin or its
+ * applicability to a particular form of data or method of data handling.
+ * If the low-level plugin API is used, the contents of this string are
+ * unimportant and may be anything.  SLURM uses the higher-level plugin
+ * interface which requires this string to be of the form
+ *
+ *      <application>/<method>
+ *
+ * where <application> is a description of the intended application of
+ * the plugin (e.g., "task" for task control) and <method> is a description 
+ * of how this plugin satisfies that application.  SLURM will only load
+ * a task plugin if the plugin_type string has a prefix of "task/".
+ *
+ * plugin_version - an unsigned 32-bit integer giving the version number
+ * of the plugin.  If major and minor revisions are desired, the major
+ * version number may be multiplied by a suitable magnitude constant such
+ * as 100 or 1000.  Various SLURM versions will likely require a certain
+ * minimum versions for their plugins as this API matures.
+ */
+const char plugin_name[]        = "topology NONE plugin";
+const char plugin_type[]        = "topology/none";
+const uint32_t plugin_version   = 100;
+
+/*
+ * init() is called when the plugin is loaded, before any other functions
+ *	are called.  Put global initialization here.
+ */
+extern int init(void)
+{
+	verbose("%s loaded", plugin_name);
+	return SLURM_SUCCESS;
+}
+
+/*
+ * fini() is called when the plugin is removed. Clear any allocated 
+ *	storage here.
+ */
+extern int fini(void)
+{
+	return SLURM_SUCCESS;
+}
+
+/*
+ * topo_build_config - build or rebuild system topology information
+ *	after a system startup or reconfiguration.
+ */
+extern int topo_build_config(void)
+{
+	return SLURM_SUCCESS;
+}
+
diff --git a/src/plugins/topology/tree/Makefile.am b/src/plugins/topology/tree/Makefile.am
new file mode 100644
index 000000000..5fd70e747
--- /dev/null
+++ b/src/plugins/topology/tree/Makefile.am
@@ -0,0 +1,14 @@
+# Makefile for topology/tree plugin
+
+CPPFLAGS =  -DTOPOLOGY_CONFIG_FILE=\"$(sysconfdir)/topology.conf\"
+AUTOMAKE_OPTIONS = foreign
+
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+
+pkglib_LTLIBRARIES = topology_tree.la
+
+# Null topology plugin.
+topology_tree_la_SOURCES = topology_tree.c
+topology_tree_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
diff --git a/src/plugins/topology/tree/Makefile.in b/src/plugins/topology/tree/Makefile.in
new file mode 100644
index 000000000..1c413519f
--- /dev/null
+++ b/src/plugins/topology/tree/Makefile.in
@@ -0,0 +1,566 @@
+# Makefile.in generated by automake 1.10.1 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@
+
+# Makefile for topology/tree plugin
+
+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 = src/plugins/topology/tree
+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/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 =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkglibdir)"
+pkglibLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+topology_tree_la_LIBADD =
+am_topology_tree_la_OBJECTS = topology_tree.lo
+topology_tree_la_OBJECTS = $(am_topology_tree_la_OBJECTS)
+topology_tree_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(topology_tree_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
+depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(topology_tree_la_SOURCES)
+DIST_SOURCES = $(topology_tree_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+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 = -DTOPOLOGY_CONFIG_FILE=\"$(sysconfdir)/topology.conf\"
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELAN_LIBS = @ELAN_LIBS@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
+FFLAGS = @FFLAGS@
+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@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_LDFLAGS = @LIB_LDFLAGS@
+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@
+NMEDIT = @NMEDIT@
+NUMA_LIBS = @NUMA_LIBS@
+OBJEXT = @OBJEXT@
+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_F77 = @ac_ct_F77@
+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@
+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_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+PLUGIN_FLAGS = -module -avoid-version --export-dynamic 
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/common
+pkglib_LTLIBRARIES = topology_tree.la
+
+# Null topology plugin.
+topology_tree_la_SOURCES = topology_tree.c
+topology_tree_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/plugins/topology/tree/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/plugins/topology/tree/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
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    f=$(am__strip_dir) \
+	    echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	    $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkglibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  p=$(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$p'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$p"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+topology_tree.la: $(topology_tree_la_OBJECTS) $(topology_tree_la_DEPENDENCIES) 
+	$(topology_tree_la_LINK) -rpath $(pkglibdir) $(topology_tree_la_OBJECTS) $(topology_tree_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topology_tree.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+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; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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:  $(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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+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 clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+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-pkglibLTLIBRARIES
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-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-pkglibLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pkglibLTLIBRARIES
+
+# 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/src/plugins/topology/tree/topology_tree.c b/src/plugins/topology/tree/topology_tree.c
new file mode 100644
index 000000000..bff65785c
--- /dev/null
+++ b/src/plugins/topology/tree/topology_tree.c
@@ -0,0 +1,423 @@
+/*****************************************************************************\
+ *  topology_tree.c - Build configuration information for hierarchical
+ *	switch topology
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#if     HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <signal.h>
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include <slurm/slurm_errno.h>
+#include "src/common/slurm_xlator.h"
+#include "src/slurmctld/slurmctld.h"
+
+/*
+ * These variables are required by the generic plugin interface.  If they
+ * are not found in the plugin, the plugin loader will ignore it.
+ *
+ * plugin_name - a string giving a human-readable description of the
+ * plugin.  There is no maximum length, but the symbol must refer to
+ * a valid string.
+ *
+ * plugin_type - a string suggesting the type of the plugin or its
+ * applicability to a particular form of data or method of data handling.
+ * If the low-level plugin API is used, the contents of this string are
+ * unimportant and may be anything.  SLURM uses the higher-level plugin
+ * interface which requires this string to be of the form
+ *
+ *      <application>/<method>
+ *
+ * where <application> is a description of the intended application of
+ * the plugin (e.g., "task" for task control) and <method> is a description 
+ * of how this plugin satisfies that application.  SLURM will only load
+ * a task plugin if the plugin_type string has a prefix of "task/".
+ *
+ * plugin_version - an unsigned 32-bit integer giving the version number
+ * of the plugin.  If major and minor revisions are desired, the major
+ * version number may be multiplied by a suitable magnitude constant such
+ * as 100 or 1000.  Various SLURM versions will likely require a certain
+ * minimum versions for their plugins as this API matures.
+ */
+const char plugin_name[]        = "topology tree plugin";
+const char plugin_type[]        = "topology/tree";
+const uint32_t plugin_version   = 100;
+
+typedef struct slurm_conf_switches {
+	uint32_t link_speed;	/* link speed, arbitrary units */
+	char *nodes;		/* names of nodes directly connect to
+				 * this switch, if any */
+	char *switch_name;	/* name of this switch */
+	char *switches;		/* names if child switches directly
+				 * connected to this switch, if any */
+} slurm_conf_switches_t;
+static s_p_hashtbl_t *conf_hashtbl = NULL;
+static char* topo_conf = NULL;
+
+static void _destroy_switches(void *ptr);
+static void _free_switch_record_table(void);
+static int  _get_switch_inx(const char *name);
+static char *_get_topo_conf(void);
+static void _log_switches(void);
+static int  _parse_switches(void **dest, slurm_parser_enum_t type,
+			    const char *key, const char *value,
+			    const char *line, char **leftover);
+extern int  _read_topo_file(slurm_conf_switches_t **ptr_array[]);
+static void _validate_switches(void);
+
+
+/*
+ * init() is called when the plugin is loaded, before any other functions
+ *	are called.  Put global initialization here.
+ */
+extern int init(void)
+{
+	verbose("%s loaded", plugin_name);
+	return SLURM_SUCCESS;
+}
+
+/*
+ * fini() is called when the plugin is removed. Clear any allocated 
+ *	storage here.
+ */
+extern int fini(void)
+{
+	_free_switch_record_table();
+	xfree(topo_conf);
+	return SLURM_SUCCESS;
+}
+
+/*
+ * topo_build_config - build or rebuild system topology information
+ *	after a system startup or reconfiguration.
+ */
+extern int topo_build_config(void)
+{
+	_validate_switches();
+	return SLURM_SUCCESS;
+}
+
+static void _validate_switches(void)
+{
+	slurm_conf_switches_t *ptr, **ptr_array;
+	int depth, i, j;
+	struct switch_record *switch_ptr;
+	hostlist_t hl;
+	char *child;
+	bitstr_t *multi_homed_bitmap = NULL;	/* nodes on >1 leaf switch */
+	bitstr_t *switches_bitmap = NULL;	/* nodes on any leaf switch */
+	bitstr_t *tmp_bitmap = NULL;
+
+	_free_switch_record_table();
+
+	switch_record_cnt = _read_topo_file(&ptr_array);
+	if (switch_record_cnt == 0) {
+		error("No switches configured");
+		s_p_hashtbl_destroy(conf_hashtbl);
+		return;
+	}
+
+	switch_record_table = xmalloc(sizeof(struct switch_record) * 
+				      switch_record_cnt);
+	multi_homed_bitmap = bit_alloc(node_record_count);
+	switch_ptr = switch_record_table;
+	for (i=0; i<switch_record_cnt; i++, switch_ptr++) {
+		ptr = ptr_array[i];
+		switch_ptr->name = xstrdup(ptr->switch_name);
+		switch_ptr->link_speed = ptr->link_speed;
+		if (ptr->nodes) {
+			switch_ptr->level = 0;	/* leaf switch */
+			switch_ptr->nodes = xstrdup(ptr->nodes);
+			if (node_name2bitmap(ptr->nodes, true, 
+					     &switch_ptr->node_bitmap)) {
+				fatal("Invalid node name (%s) in switch "
+				      "config (%s)", 
+				      ptr->nodes, ptr->switch_name);
+			}
+			if (switches_bitmap) {
+				tmp_bitmap = bit_copy(switch_ptr->node_bitmap);
+				bit_and(tmp_bitmap, switches_bitmap);
+				bit_or(multi_homed_bitmap, tmp_bitmap);
+				bit_free(tmp_bitmap);
+				bit_or(switches_bitmap, 
+				       switch_ptr->node_bitmap);
+			} else {
+				switches_bitmap = bit_copy(switch_ptr->
+							   node_bitmap);
+			}
+		} else if (ptr->switches) {
+			switch_ptr->level = -1;	/* determine later */
+			switch_ptr->switches = xstrdup(ptr->switches);
+		} else {
+			fatal("Switch configuration (%s) lacks children",
+			      ptr->switch_name);
+		}
+	}
+
+	for (depth=1; ; depth++) {
+		bool resolved = true;
+		switch_ptr = switch_record_table;
+		for (i=0; i<switch_record_cnt; i++, switch_ptr++) {
+			if (switch_ptr->level != -1)
+				continue;
+			hl = hostlist_create(switch_ptr->switches);
+			if (!hl)
+				fatal("hostlist_create: malloc failure");
+			while ((child = hostlist_pop(hl))) {
+				j = _get_switch_inx(child);
+				if ((j < 0) || (j == i)) {
+					fatal("Switch configuration %s has "
+					      "invalid child (%s)",
+					      switch_ptr->name, child);
+				}
+				if (switch_record_table[j].level == -1) {
+					/* Children not resolved */
+					resolved = false;
+					switch_ptr->level = -1;
+					FREE_NULL_BITMAP(switch_ptr->
+							 node_bitmap);
+					free(child);
+					break;
+				}
+				if (switch_ptr->level == -1) {
+					switch_ptr->level = 1 +
+						switch_record_table[j].level;
+					switch_ptr->node_bitmap = 
+						bit_copy(switch_record_table[j].
+							 node_bitmap);
+				} else {
+					switch_ptr->level = 
+						MAX(switch_ptr->level,
+						     (switch_record_table[j].
+						      level + 1));
+					bit_or(switch_ptr->node_bitmap,
+					       switch_record_table[j].
+					       node_bitmap);
+				}
+				free(child);
+			}
+			hostlist_destroy(hl);
+		}
+		if (resolved)
+			break;
+	}
+
+	switch_ptr = switch_record_table;
+	for (i=0; i<switch_record_cnt; i++, switch_ptr++) {
+		if (switch_ptr->node_bitmap == NULL)
+			error("switch %s has no nodes", switch_ptr->name);
+	}
+	if (switches_bitmap) {
+		bit_not(switches_bitmap);
+		i = bit_set_count(switches_bitmap);
+		if (i > 0) {
+			child = bitmap2node_name(switches_bitmap);
+			error("WARNING: switches lack access to %d nodes: %s", 
+			      i, child);
+			xfree(child);
+		}
+		bit_free(switches_bitmap);
+	} else
+		fatal("switches contain no nodes");
+
+	/* Report nodes on multiple leaf switches, 
+	 * possibly due to bad configuration file */
+	i = bit_set_count(multi_homed_bitmap);
+	if (i > 0) {
+		child = bitmap2node_name(multi_homed_bitmap);
+		error("WARNING: Multiple leaf switches contain nodes: %s", 
+		      child);
+		xfree(child);
+	}
+	bit_free(multi_homed_bitmap);
+
+	s_p_hashtbl_destroy(conf_hashtbl);
+	_log_switches();
+}
+
+static void _log_switches(void)
+{
+	int i;
+	struct switch_record *switch_ptr;
+
+	switch_ptr = switch_record_table;
+	for (i=0; i<switch_record_cnt; i++, switch_ptr++) {
+		if (!switch_ptr->nodes) {
+			switch_ptr->nodes = bitmap2node_name(switch_ptr->
+							     node_bitmap);
+		}
+		debug("Switch level:%d name:%s nodes:%s switches:%s",
+		      switch_ptr->level, switch_ptr->name,
+		      switch_ptr->nodes, switch_ptr->switches);
+	}
+}
+
+/* Return the index of a given switch name or -1 if not found */
+static int _get_switch_inx(const char *name)
+{
+	int i;
+	struct switch_record *switch_ptr;
+
+	switch_ptr = switch_record_table;
+	for (i=0; i<switch_record_cnt; i++, switch_ptr++) {
+		if (strcmp(switch_ptr->name, name) == 0)
+			return i;
+	}
+
+	return -1;
+}
+
+/* Free all memory associated with switch_record_table structure */
+static void _free_switch_record_table(void)
+{
+	int i;
+
+	if (switch_record_table) {
+		for (i=0; i<switch_record_cnt; i++) {
+			xfree(switch_record_table[i].name);
+			xfree(switch_record_table[i].nodes);
+			xfree(switch_record_table[i].switches);
+			FREE_NULL_BITMAP(switch_record_table[i].node_bitmap);
+		}
+		xfree(switch_record_table);
+		switch_record_cnt = 0;
+	}
+}
+
+static char *_get_topo_conf(void)
+{
+	char *val = getenv("SLURM_CONF");
+	char *rc;
+	int i;
+
+	if (!val)
+		return xstrdup(TOPOLOGY_CONFIG_FILE);
+
+	/* Replace file name on end of path */
+	i = strlen(val) - strlen("slurm.conf") + strlen("topology.conf") + 1;
+	rc = xmalloc(i);
+	strcpy(rc, val);
+	val = strrchr(rc, (int)'/');
+	if (val)	/* absolute path */
+		val++;
+	else		/* not absolute path */
+		val = rc;
+	strcpy(val, "topology.conf");
+	return rc;
+}
+
+/* Return count of switch configuration entries read */
+extern int  _read_topo_file(slurm_conf_switches_t **ptr_array[])
+{
+	static s_p_options_t switch_options[] = {
+		{"SwitchName", S_P_ARRAY, _parse_switches, _destroy_switches},
+		{NULL}
+	};
+	int count;
+	slurm_conf_switches_t **ptr;
+
+	debug("Reading the topology.conf file");
+	if (!topo_conf)
+		topo_conf = _get_topo_conf();
+
+	conf_hashtbl = s_p_hashtbl_create(switch_options);
+	if(s_p_parse_file(conf_hashtbl, topo_conf) == SLURM_ERROR)
+		fatal("something wrong with opening/reading %s: %m", topo_conf);
+
+	if (s_p_get_array((void ***)&ptr, &count, "SwitchName", conf_hashtbl)) {
+		*ptr_array = ptr;
+	} else {
+		*ptr_array = NULL;
+		count = 0;
+	}
+	return count;
+}
+
+static int  _parse_switches(void **dest, slurm_parser_enum_t type,
+			    const char *key, const char *value,
+			    const char *line, char **leftover)
+{
+	s_p_hashtbl_t *tbl;
+	slurm_conf_switches_t *s;
+	static s_p_options_t _switch_options[] = {
+		{"LinkSpeed", S_P_UINT32},
+		{"Nodes", S_P_STRING},
+		{"Switches", S_P_STRING},
+		{NULL}
+	};
+
+	tbl = s_p_hashtbl_create(_switch_options);
+	s_p_parse_line(tbl, *leftover, leftover);
+
+	s = xmalloc(sizeof(slurm_conf_switches_t));
+	s->switch_name = xstrdup(value);
+	if (!s_p_get_uint32(&s->link_speed, "LinkSpeed", tbl))
+		s->link_speed = 1;
+	s_p_get_string(&s->nodes, "Nodes", tbl);
+	s_p_get_string(&s->switches, "Switches", tbl);
+	s_p_hashtbl_destroy(tbl);
+
+	if (s->nodes && s->switches) {
+		error("switch %s has both child switches and nodes",
+		      s->switch_name);
+		_destroy_switches(s);
+		return -1;
+	}
+	if (!s->nodes && !s->switches) {
+		error("switch %s has neither child switches nor nodes",
+		      s->switch_name);
+		_destroy_switches(s);
+		return -1;
+	}
+
+	*dest = (void *)s;
+
+	return 1;
+}
+
+static void _destroy_switches(void *ptr)
+{
+	slurm_conf_switches_t *s = (slurm_conf_switches_t *)ptr;
+	xfree(s->nodes);
+	xfree(s->switch_name);
+	xfree(s->switches);
+	xfree(ptr);
+}
+
diff --git a/src/sacct/Makefile.am b/src/sacct/Makefile.am
index c51d73435..46a22ae5c 100644
--- a/src/sacct/Makefile.am
+++ b/src/sacct/Makefile.am
@@ -12,7 +12,7 @@ sacct_LDADD = 	$(top_builddir)/src/api/libslurm.o -ldl
 sacct_LDFLAGS = -export-dynamic $(CMD_LDFLAGS)
 
 noinst_HEADERS = sacct.c 
-sacct_SOURCES = sacct.c process.c print.c options.c sacct_stat.c
+sacct_SOURCES = sacct.c process.c print.c options.c
 
 force:
 $(sacct_LDADD) : force
diff --git a/src/sacct/Makefile.in b/src/sacct/Makefile.in
index c187cf5bd..56d88609f 100644
--- a/src/sacct/Makefile.in
+++ b/src/sacct/Makefile.in
@@ -46,14 +46,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -74,7 +78,7 @@ am__installdirs = "$(DESTDIR)$(bindir)"
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
 am_sacct_OBJECTS = sacct.$(OBJEXT) process.$(OBJEXT) print.$(OBJEXT) \
-	options.$(OBJEXT) sacct_stat.$(OBJEXT)
+	options.$(OBJEXT)
 sacct_OBJECTS = $(am_sacct_OBJECTS)
 sacct_DEPENDENCIES = $(top_builddir)/src/api/libslurm.o
 sacct_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -108,6 +112,10 @@ 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@
@@ -273,7 +281,7 @@ INCLUDES = -I$(top_srcdir)
 sacct_LDADD = $(top_builddir)/src/api/libslurm.o -ldl
 sacct_LDFLAGS = -export-dynamic $(CMD_LDFLAGS)
 noinst_HEADERS = sacct.c 
-sacct_SOURCES = sacct.c process.c print.c options.c sacct_stat.c
+sacct_SOURCES = sacct.c process.c print.c options.c
 all: all-am
 
 .SUFFIXES:
@@ -349,7 +357,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sacct.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sacct_stat.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
diff --git a/src/sacct/options.c b/src/sacct/options.c
index 841834678..00cde2f07 100644
--- a/src/sacct/options.c
+++ b/src/sacct/options.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -51,15 +52,10 @@ List selected_parts = NULL;
 List selected_steps = NULL;
 void *acct_db_conn = NULL;
 
-void _show_rec(char *f[])
-{
-	int 	i;
-	fprintf(stderr, "rec>");
-	for (i=0; f[i]; i++)
-		fprintf(stderr, " %s", f[i]);
-	fprintf(stderr, "\n");
-	return;
-}
+List print_fields_list = NULL;
+ListIterator print_fields_itr = NULL;
+int field_count = 0;
+List qos_list = NULL;
 
 void _help_fields_msg(void)
 {
@@ -67,10 +63,10 @@ void _help_fields_msg(void)
 
 	for (i = 0; fields[i].name; i++) {
 		if (i & 3)
-			printf("  ");
-		else
+			printf(" ");
+		else if(i)
 			printf("\n");
-		printf("%-10s", fields[i].name);
+		printf("%-13s", fields[i].name);
 	}
 	printf("\n");
 	return;
@@ -385,153 +381,122 @@ static int _addto_step_list(List step_list, char *names)
 
 void _help_msg(void)
 {
-	slurm_ctl_conf_t *conf = slurm_conf_lock();
-	printf("\n"
-	       "By default, sacct displays accounting data for all jobs and job\n"
-	       "steps that are present in the log.\n"
-	       "\n"
-	       "Notes:\n"
-	       "\n"
-	       "    * If --dump is specified,\n"
-	       "          * The field selection options (--brief, --fields, ...)\n"
-	       "	    have no effect\n"
-	       "	  * Elapsed time fields are presented as 2 fields, integral\n"
-	       "	    seconds and integral microseconds\n"
-	       "    * If --dump is not specified, elapsed time fields are presented\n"
-	       "      as [[days-]hours:]minutes:seconds.hundredths\n"
-	       "    * The default input file is the file named in the \"jobacct_logfile\"\n"
-	       "      parameter in %s.\n"
-	       "\n"
-	       "Options:\n"
-	       "\n"
-	       "-a, --all\n"
-	       "    Display job accounting data for all users. By default, only\n"
-	       "    data for the current user is displayed for users other than\n"
-	       "    root.\n"
-	       "-A, --accounts\n"
-	       "    Only send data about these accounts.  Default is all.\n"
-	       "-b, --brief\n"
-	       "    Equivalent to \"--fields=jobstep,state,error\". This option\n"
-	       "    has no effect if --dump is specified.\n"
-	       "-c, --completion\n"
-	       "    Use job completion instead of accounting data.\n"
-	       "-C, --clusters\n"
-	       "    Only send data about these clusters.  -1 for all clusters.\n"
-	       "-d, --dump\n"
-	       "    Dump the raw data records\n"
-	       "--duplicates\n"
-	       "    If SLURM job ids are reset, but the job accounting log file\n"
-	       "    isn't reset at the same time (with -e, for example), some\n"
-	       "    job numbers will probably appear more than once in the\n"
-	       "    accounting log file to refer to different jobs; such jobs\n"
-	       "    can be distinguished by the \"submit\" time stamp in the\n"
-	       "    data records.\n"
-	       "      When data for specific jobs are requested with\n"
-	       "    the --jobs option, we assume that the user\n"
-	       "    wants to see only the most recent job with that number. This\n"
-	       "    behavior can be overridden by specifying --duplicates, in\n"
-	       "    which case all records that match the selection criteria\n"
-	       "    will be returned.\n"
-	       "      When --jobs is not specified, we report\n"
-	       "    data for all jobs that match the selection criteria, even if\n"
-	       "    some of the job numbers are reused. Specify that you only\n"
-	       "    want the most recent job for each selected job number with\n"
-	       "    the --noduplicates option.\n"
-	       "-e <timespec>, --expire=<timespec>\n"
-	       "    Remove jobs from SLURM's current accounting log file (or the\n"
-	       "    file specified with --file) that completed more than <timespec>\n"
-	       "    ago.  If <timespec> is an integer, it is interpreted as\n" 
-	       "    minutes. If <timespec> is an integer followed by \"h\", it is\n"
-	       "    interpreted as a number of hours. If <timespec> is an integer\n"
-	       "    followed by \"d\", it is interpreted as number of days. For\n"
-	       "    example, \"--expire=14d\" means that you wish to purge the job\n"
-	       "    accounting log of all jobs that completed more than 14 days ago.\n" 
-	       "--endtime:                                                   \n"
-               "    Select jobs eligible before this time.                   \n"
-	       "-F <format-list>, --format=<format-list>\n"
-	       "    Display the specified data (use \"--helpformat\" for a\n"
-	       "    list of available fields). If no format option is specified,\n"
-	       "    we use \"--format=jobstep,jobname,partition,alloc_cpus,state,error\".\n"
-	       "-f<file>, --file=<file>\n"
-	       "    Read data from the specified file, rather than SLURM's current\n"
-	       "    accounting log file.\n"
-	       "-l, --long\n"
-	       "    Equivalent to specifying\n"
-	       "    \"--fields=jobstep,usercpu,systemcpu,minflt,majflt,nprocs,\n"
-	       "    alloc_cpus,elapsed,state,exitcode\"\n"
-	       "-O, --formatted_dump\n"
-	       "    Dump accounting records in an easy-to-read format, primarily\n"
-	       "    for debugging.\n"
-	       "-g <gid>, --gid <gid>\n"
-	       "    Select only jobs submitted from the <gid> group.\n"
-	       "-h, --help\n"
-	       "    Print a general help message.\n"
-	       "--help-fields\n"
-	       "    Print a list of fields that can be specified with the\n"
-	       "    \"--fields\" option\n"
-	       "-j <job(.step)>, --jobs=<job(.step)>\n"
-	       "    Display information about this job or comma-separated\n"
-	       "    list of jobs. The default is all jobs. Adding .step will\n"
-	       "    display the specfic job step of that job.\n"
-	       "--noduplicates\n"
-	       "    See the discussion under --duplicates.\n"
-	       "--noheader\n"
-	       "    Print (or don't print) a header. The default is to print a\n"
-	       "    header; the option has no effect if --dump is specified\n"
-	       "-p <part_list>, --partition=<part_list>\n"
-	       "    Display or purge information about jobs and job steps in the\n"
-	       "    <part_list> partition(s). The default is all partitions.\n"
-	       "-P --purge\n"
-	       "    Used in conjunction with --expire to remove invalid data\n"
-	       "    from the job accounting log.\n"
-	       "-s <state-list>, --state=<state-list>\n"
-	       "    Select jobs based on their current state: running (r),\n"
-	       "    completed (cd), failed (f), timeout (to), and node_fail (nf).\n"
-	       "-S, --stat\n"
-	       "    Get real time state of a jobstep supplied by the -j\n"
-	       "    option\n" 
-	       "--starttime:                                                 \n"
-               "    Select jobs eligible after this time.                    \n"
-	       "-t, --total\n"
-	       "    Only show cumulative statistics for each job, not the\n"
-	       "    intermediate steps\n"
-	       "-u <uid>, --uid <uid>\n"
-	       "    Select only jobs submitted by the user with uid <uid>.  Only\n"
-	       "    root users are allowed to specify a uid other than their own -1 for all users.\n"
-	       "--usage\n"
-	       "    Pointer to this message.\n"
-	       "-v, --verbose\n"
-	       "    Primarily for debugging purposes, report the state of various\n"
-	       "    variables during processing.\n"
-	       "-W, --wckeys\n"
-	       "    Only send data about these wckeys.  Default is all.\n"
-	       "\n"
-	       "Note, valid start/end time formats are...\n"
-	       "    HH:MM[:SS] [AM|PM]\n"
-	       "    MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]\n"
-	       "    MM/DD[/YY]-HH:MM[:SS]\n"
-	       , conf->slurm_conf);
-
-	slurm_conf_unlock();
+	printf("\
+sacct [<OPTION>]                                                            \n\
+    Valid <OPTION> values are:                                              \n\
+     -a, --allusers:                                                        \n\
+	           Display jobs for all users. By default, only the         \n\
+                   current user's jobs are displayed.  If ran by user root  \n\
+                   this is the default.                                     \n\
+     -A, --accounts:                                                        \n\
+	           Use this comma seperated list of accounts to select jobs \n\
+                   to display.  By default, all accounts are selected.      \n\
+     -b, --brief:                                                           \n\
+	           Equivalent to '--format=jobstep,state,error'. This option\n\
+	           has no effect if --dump is specified.                    \n\
+     -c, --completion: Use job completion instead of accounting data.       \n\
+     -C, --clusters:                                                        \n\
+                   Only send data about these clusters. -1 for all clusters.\n\
+     -d, --dump:   Dump the raw data records                                \n\
+     -D, --duplicates:                                                      \n\
+	           If SLURM job ids are reset, some job numbers will        \n\
+	           probably appear more than once refering to different jobs.\n\
+	           Without this option only the most recent jobs will be    \n\
+                   displayed.                                               \n\
+     -e, --helpformat:                                                      \n\
+	           Print a list of fields that can be specified with the    \n\
+	           '--format' option                                        \n\
+     -E, --endtime:                                                         \n\
+                   Select jobs started before this time.                    \n\
+     -f, --file=file:                                                       \n\
+	           Read data from the specified file, rather than SLURM's   \n\
+                   current accounting log file. (Only appliciable when      \n\
+                   running the filetxt plugin.)                             \n\
+     -g, --gid, --group:                                                    \n\
+	           Use this comma seperated list of gids or group names     \n\
+                   to select jobs to display.  By default, all groups are   \n\
+                   selected.                                                \n\
+     -h, --help:   Print this description of use.                           \n\
+     -j, --jobs:                                                            \n\
+	           Format is <job(.step)>. Display information about this   \n\
+                   job or comma-separated list of jobs. The default is all  \n\
+                   jobs. Adding .step will display the specfic job step of  \n\
+                   that job.                                                \n\
+     -l, --long:                                                            \n\
+	           Equivalent to specifying                                 \n\
+	           '--fields=jobid,jobname,partition,maxvsize,maxvsizenode, \n\
+                             maxvsizetask,avevsize,maxrss,maxrssnode,       \n\
+                             maxrsstask,averss,maxpages,maxpagesnode,       \n\
+                             maxpagestask,avepages,mincpu,mincpunode,       \n\
+                             mincputask,avecpu,ntasks,alloccpus,elapsed,    \n\
+	                     state,exitcode'                                \n\
+     -L, --allclusters:                                                     \n\
+	           Display jobs ran on all clusters. By default, only jobs  \n\
+                   ran on the cluster from where sacct is called are        \n\
+                   displayed.                                               \n\
+     -n, --noheader:                                                        \n\
+	           No header will be added to the beginning of output.      \n\
+                   The default is to print a header; the option has no effect\n\
+                   if --dump is specified                                   \n\
+     -N, --nodes:                                                           \n\
+                   A comma separated list of nodes where jobs ran           \n\
+     -o, --format:                                                          \n\
+	           Comma seperated list of fields. (use \"--helpformat\"    \n\
+                   for a list of available fields).                         \n\
+     -O, --formatted_dump:                                                  \n\
+	           Dump accounting records in an easy-to-read format,       \n\
+                   primarily for debugging.                                 \n\
+     -p, --parsable: output will be '|' delimited with a '|' at the end     \n\
+     -P, --parsable2: output will be '|' delimited without a '|' at the end \n\
+     -r, --partition:                                                       \n\
+	           Comma seperated list of partitions to select jobs and    \n\
+                   job steps from. The default is all partitions.           \n\
+     -s, --state:                                                           \n\
+	           Select jobs based on their current state: running (r),   \n\
+	           completed (cd), failed (f), timeout (to), and            \n\
+                   node_fail (nf).                                          \n\
+     -S, --starttime:                                                       \n\
+                   Select jobs eligible after this time.  Default is        \n\
+                   midnight of current day.                                 \n\
+     -T, --truncate:                                                        \n\
+                   Truncate time.  So if a job started before --starttime   \n\
+                   the start time would be truncated to --starttime.        \n\
+                   The same for end time and --endtime.                     \n\
+     -u, --uid, --user:                                                     \n\
+	           Use this comma seperated list of uids or user names      \n\
+                   to select jobs to display.  By default, the running      \n\
+                   user's uid is used.                                      \n\
+     --usage:      Display brief usage message.                             \n\
+     -v, --verbose:                                                         \n\
+	           Primarily for debugging purposes, report the state of    \n\
+                   various variables during processing.                     \n\
+     -V, --version: Print version.                                          \n\
+     -W, --wckeys:                                                          \n\
+                   Only send data about these wckeys.  Default is all.      \n\
+     -X, --allocations:                                                     \n\
+	           Only show cumulative statistics for each job, not the    \n\
+	           intermediate steps.                                      \n\
+	                                                                    \n\
+     Note, valid start/end time formats are...                              \n\
+	           HH:MM[:SS] [AM|PM]                                       \n\
+	           MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]                     \n\
+	           MM/DD[/YY]-HH:MM[:SS]                                    \n\
+	           YYYY-MM-DD[THH[:MM[:SS]]]                                \n\
+\n");
 
 	return;
 }
 
 void _usage(void)
 {
-	printf("\nUsage: sacct [options]\n\tUse --help for help\n");
+	printf("Usage: sacct [options]\n\tUse --help for help\n");
 }
 
 void _init_params()
 {
 	memset(&params, 0, sizeof(sacct_parameters_t));
-	params.arch_cond = xmalloc(sizeof(acct_archive_cond_t));
-	params.arch_cond->archive_jobs = (uint16_t)NO_VAL;
-	params.arch_cond->archive_steps = (uint16_t)NO_VAL;
-	params.arch_cond->job_purge = (uint16_t)NO_VAL;
-	params.arch_cond->step_purge = (uint16_t)NO_VAL;
-
-	params.arch_cond->job_cond = xmalloc(sizeof(acct_job_cond_t));
+	params.job_cond = xmalloc(sizeof(acct_job_cond_t));
+	params.job_cond->without_usage_truncation = 1;
 }
 
 int decode_state_char(char *state)
@@ -563,7 +528,7 @@ int get_data(void)
 
 	ListIterator itr = NULL;
 	ListIterator itr_step = NULL;
-	acct_job_cond_t *job_cond = params.arch_cond->job_cond;
+	acct_job_cond_t *job_cond = params.job_cond;
 	
 	if(params.opt_completion) {
 		jobs = g_slurm_jobcomp_get_jobs(job_cond);
@@ -630,41 +595,40 @@ void parse_command_line(int argc, char **argv)
 	bool brief_output = FALSE, long_output = FALSE;
 	bool all_users = 0;
 	bool all_clusters = 0;
-	acct_archive_cond_t *arch_cond = params.arch_cond;
-	acct_job_cond_t *job_cond = arch_cond->job_cond;
+	acct_job_cond_t *job_cond = params.job_cond;
+	log_options_t opts = LOG_OPTS_STDERR_ONLY ;
+	int verbosity;		/* count of -v options */
 
 	static struct option long_options[] = {
-		{"all", 0,0, 'a'},
+		{"allusers", 0,0, 'a'},
 		{"accounts", 1, 0, 'A'},
-		{"begin", 1, 0, 'B'},
+		{"allocations", 0, &params.opt_allocs,  1},
 		{"brief", 0, 0, 'b'},
-		{"clusters", 1, 0, 'C'},
 		{"completion", 0, &params.opt_completion, 'c'},
-		{"duplicates", 0, &params.opt_dup, 1},
+		{"clusters", 1, 0, 'C'},
 		{"dump", 0, 0, 'd'},
-		{"end", 1, 0, 'E'},
+		{"duplicates", 0, &params.opt_dup, 1},
+		{"helpformat", 0, 0, 'e'},
+		{"help-fields", 0, 0, 'e'},
 		{"endtime", 1, 0, 'E'},
-		{"expire", 1, 0, 'e'},
-		{"fields", 1, 0, 'F'},
-		{"format", 1, 0, 'F'},
 		{"file", 1, 0, 'f'},
-		{"formatted_dump", 0, 0, 'O'},
 		{"gid", 1, 0, 'g'},
 		{"group", 1, 0, 'g'},
-		{"help", 0, &params.opt_help, 1},
-		{"help-fields", 0, &params.opt_help, 2},
+		{"help", 0, 0, 'h'},
 		{"helpformat", 0, &params.opt_help, 2},
 		{"jobs", 1, 0, 'j'},
 		{"long", 0, 0, 'l'},
-		{"big_logfile", 0, &params.opt_lowmem, 1},
-		{"noduplicates", 0, &params.opt_dup, 0},
-		{"noheader", 0, &params.opt_noheader, 1},
-		{"partition", 1, 0, 'p'},
-		{"purge", 0, 0, 'P'},
+		{"nodes", 1, 0, 'N'},
+		{"noheader", 0, 0, 'n'},
+		{"fields", 1, 0, 'o'},
+		{"format", 1, 0, 'o'},
+		{"formatted_dump", 0, 0, 'O'},
+		{"parsable", 0, 0, 'p'},
+		{"parsable2", 0, 0, 'P'},
+		{"partition", 1, 0, 'r'},
 		{"state", 1, 0, 's'},
-		{"stat", 0, 0, 'S'},
-		{"starttime", 1, 0, 'B'},
-		{"total", 0, 0,  't'},
+		{"starttime", 1, 0, 'S'},
+		{"truncate", 0, 0, 'T'},
 		{"uid", 1, 0, 'u'},
 		{"usage", 0, &params.opt_help, 3},
 		{"user", 1, 0, 'u'},
@@ -676,11 +640,13 @@ void parse_command_line(int argc, char **argv)
 	params.opt_uid = getuid();
 	params.opt_gid = getgid();
 
+	verbosity         = 0;
+	log_init("sacct", opts, SYSLOG_FACILITY_DAEMON, NULL);
 	opterr = 1;		/* Let getopt report problems to the user */
 
 	while (1) {		/* now cycle through the command line */
 		c = getopt_long(argc, argv,
-				"aA:bB:cC:deE:F:f:g:hj:lOP:p:s:StUu:VvW:",
+				"aA:bcC:deE:f:g:hj:lnN:o:OpPr:s:S:tu:vVW:X",
 				long_options, &optionIndex);
 		if (c == -1)
 			break;
@@ -697,9 +663,6 @@ void parse_command_line(int argc, char **argv)
 		case 'b':
 			brief_output = true;
 			break;
-		case 'B':
-			job_cond->usage_start = parse_time(optarg, 1);
-			break;
 		case 'c':
 			params.opt_completion = 1;
 			break;
@@ -717,35 +680,28 @@ void parse_command_line(int argc, char **argv)
 		case 'd':
 			params.opt_dump = 1;
 			break;	
+		case 'D':
+			params.opt_dup = 1;
+			break;
 		case 'e':
-			params.opt_expire = 1;
+			params.opt_help = 2;
 			break;
 		case 'E':
 			job_cond->usage_end = parse_time(optarg, 1);
 			break;
-		case 'F':
-			if(params.opt_stat)
-				xfree(params.opt_field_list);
-			
-			xstrfmtcat(params.opt_field_list, "%s,", optarg);
-			break;
-
 		case 'f':
-			xfree(arch_cond->archive_dir);
-			arch_cond->archive_dir = xstrdup(optarg);
+			xfree(params.opt_filein);
+			params.opt_filein = xstrdup(optarg);
 			break;
-
 		case 'g':
 			if(!job_cond->groupid_list)
 				job_cond->groupid_list = 
 					list_create(slurm_destroy_char);
 			_addto_id_char_list(job_cond->groupid_list, optarg, 1);
 			break;
-
 		case 'h':
 			params.opt_help = 1;
 			break;
-
 		case 'j':
 			if ((strspn(optarg, "0123456789, ") < strlen(optarg))
 			    && (strspn(optarg, ".0123456789, ") 
@@ -760,23 +716,38 @@ void parse_command_line(int argc, char **argv)
 					destroy_jobacct_selected_step);
 			_addto_step_list(job_cond->step_list, optarg);
 			break;
-
+		case 'L':
+			all_clusters = 1;
+			break;
 		case 'l':
 			long_output = true;
 			break;
-
+		case 'o':
+			xstrfmtcat(params.opt_field_list, "%s,", optarg);
+			break;
 		case 'O':
 			params.opt_fdump = 1;
 			break;
-
-		case 'P':
-			
-			arch_cond->step_purge = 
-				arch_cond->job_purge = atoi(optarg);
-			
+		case 'n':
+			print_fields_have_header = 0;
+			break;
+		case 'N':
+			if(job_cond->used_nodes) {
+				error("Aleady asked for nodes '%s'",
+				      job_cond->used_nodes);
+				break;
+			}
+			job_cond->used_nodes = xstrdup(optarg);
 			break;
-
 		case 'p':
+			print_fields_parsable_print = 
+				PRINT_FIELDS_PARSABLE_ENDING;
+			break;
+		case 'P':
+			print_fields_parsable_print = 
+				PRINT_FIELDS_PARSABLE_NO_ENDING;
+			break;
+		case 'r':
 			if(!job_cond->partition_list)
 				job_cond->partition_list =
 					list_create(slurm_destroy_char);
@@ -792,21 +763,14 @@ void parse_command_line(int argc, char **argv)
 			_addto_state_char_list(job_cond->state_list, optarg);
 			break;
 		case 'S':
-			if(!params.opt_field_list) {
-				xstrfmtcat(params.opt_field_list, "%s,",
-					   STAT_FIELDS);
-			}
-			params.opt_stat = 1;
+			job_cond->usage_start = parse_time(optarg, 1);
 			break;
-
-		case 't':
-			params.opt_total = 1;
+		case 'T':
+			job_cond->without_usage_truncation = 0;
 			break;
-
 		case 'U':
 			params.opt_help = 3;
 			break;
-
 		case 'u':
 			if(!strcmp(optarg, "-1")) {
 				all_users = 1;
@@ -818,17 +782,11 @@ void parse_command_line(int argc, char **argv)
 					list_create(slurm_destroy_char);
 			_addto_id_char_list(job_cond->userid_list, optarg, 0);
 			break;
-
 		case 'v':
 			/* Handle -vvv thusly...
-			 * 0 - report only normal messages and errors
-			 * 1 - report options selected and major operations
-			 * 2 - report data anomalies probably not errors
-			 * 3 - blather on and on
 			 */
-			params.opt_verbose++;
+			verbosity++;
 			break;
-
 		case 'W':
 			if(!job_cond->wckey_list) 
 				job_cond->wckey_list =
@@ -838,13 +796,23 @@ void parse_command_line(int argc, char **argv)
 		case 'V':
 			printf("%s %s\n", PACKAGE, SLURM_VERSION);
 			exit(0);
-
+		case 't':
+		case 'X':
+			params.opt_allocs = 1;
+			break;
 		case ':':
 		case '?':	/* getopt() has explained it */
 			exit(1); 
 		}
 	}
 
+	if (verbosity) {
+		opts.stderr_level += verbosity;
+		opts.prefix_level = 1;
+		log_alter(opts, 0, NULL);
+	}
+
+
 	/* Now set params.opt_dup, unless they've already done so */
 	if (params.opt_dup < 0)	/* not already set explicitly */
 		params.opt_dup = 0;
@@ -854,62 +822,73 @@ void parse_command_line(int argc, char **argv)
 
 	job_cond->duplicates = params.opt_dup;
 
+	if(!job_cond->usage_start) {
+		job_cond->usage_start = time(NULL);
+		struct tm start_tm;
+
+		if(!localtime_r(&job_cond->usage_start, &start_tm)) {
+			error("Couldn't get localtime from %d", 
+			      job_cond->usage_start);
+			return;
+		}
+		start_tm.tm_sec = 0;
+		start_tm.tm_min = 0;
+		start_tm.tm_hour = 0;
+		start_tm.tm_isdst = -1;
+		job_cond->usage_start = mktime(&start_tm);
+	}
+	
+	if(verbosity > 0) {
+		char *start_char =NULL, *end_char = NULL;
+		
+		start_char = xstrdup(ctime(&job_cond->usage_start));
+		/* remove the new line */
+		start_char[strlen(start_char)-1] = '\0';
+		if(job_cond->usage_end) {
+			end_char = xstrdup(ctime(&job_cond->usage_end));
+			/* remove the new line */
+			end_char[strlen(end_char)-1] = '\0';
+		} else
+			end_char = xstrdup("Now");
+		info("Jobs eligible from %s - %s\n", start_char, end_char);
+		xfree(start_char);
+		xfree(end_char);
+	}
+
 	debug("Options selected:\n"
-	      "\topt_archive_jobs=%d\n"
-	      "\topt_archve_steps=%d\n"
 	      "\topt_completion=%d\n"
 	      "\topt_dump=%d\n"
 	      "\topt_dup=%d\n"
-	      "\topt_expire=%d\n"
 	      "\topt_fdump=%d\n"
-	      "\topt_stat=%d\n"
 	      "\topt_field_list=%s\n"
-	      "\topt_filein=%s\n"
-	      "\topt_noheader=%d\n"
 	      "\topt_help=%d\n"
-	      "\topt_long=%d\n"
-	      "\topt_lowmem=%d\n"
-	      "\topt_job_purge=%d\n"
-	      "\topt_step_purge=%d\n"
-	      "\topt_total=%d\n"
-	      "\topt_verbose=%d\n",
-	      arch_cond->archive_jobs,
-	      arch_cond->archive_steps,
+	      "\topt_allocs=%d\n",
 	      params.opt_completion,
 	      params.opt_dump,
 	      params.opt_dup,
-	      params.opt_expire,
 	      params.opt_fdump,
-	      params.opt_stat,
 	      params.opt_field_list,
-	      arch_cond->archive_dir,
-	      params.opt_noheader,
 	      params.opt_help,
-	      params.opt_long,
-	      params.opt_lowmem,
-	      arch_cond->job_purge,
-	      arch_cond->step_purge,
-	      params.opt_total,
-	      params.opt_verbose);
+	      params.opt_allocs);
 
 
 	if(params.opt_completion) {
-		g_slurm_jobcomp_init(arch_cond->archive_dir);
+		g_slurm_jobcomp_init(params.opt_filein);
 
 		acct_type = slurm_get_jobcomp_type();
 		if ((strcmp(acct_type, "jobcomp/none") == 0)
-		    &&  (stat(arch_cond->archive_dir, &stat_buf) != 0)) {
+		    &&  (stat(params.opt_filein, &stat_buf) != 0)) {
 			fprintf(stderr, "SLURM job completion is disabled\n");
 			exit(1);
 		}
 		xfree(acct_type);
 	} else {
-		slurm_acct_storage_init(arch_cond->archive_dir);
+		slurm_acct_storage_init(params.opt_filein);
 		acct_db_conn = acct_storage_g_get_connection(false, 0, false);
 		
 		acct_type = slurm_get_accounting_storage_type();
 		if ((strcmp(acct_type, "accounting_storage/none") == 0)
-		    &&  (stat(arch_cond->archive_dir, &stat_buf) != 0)) {
+		    &&  (stat(params.opt_filein, &stat_buf) != 0)) {
 			fprintf(stderr,
 				"SLURM accounting storage is disabled\n");
 			exit(1);
@@ -924,116 +903,102 @@ void parse_command_line(int argc, char **argv)
 			list_destroy(job_cond->cluster_list);
 			job_cond->cluster_list = NULL;
 		}
-		if(params.opt_verbose)
-			fprintf(stderr, "Clusters requested:\n\t: all\n");
-	} else if (params.opt_verbose && job_cond->cluster_list 
-	    && list_count(job_cond->cluster_list)) {
-		fprintf(stderr, "Clusters requested:\n");
+		debug2("Clusters requested:\tall\n");
+	} else if (job_cond->cluster_list 
+		   && list_count(job_cond->cluster_list)) {
+		debug2( "Clusters requested:\n");
 		itr = list_iterator_create(job_cond->cluster_list);
 		while((start = list_next(itr))) 
-			fprintf(stderr, "\t: %s\n", start);
+			debug2("\t: %s\n", start);
 		list_iterator_destroy(itr);
 	} else if(!job_cond->cluster_list 
 		  || !list_count(job_cond->cluster_list)) {
 		if(!job_cond->cluster_list)
 			job_cond->cluster_list =
 				list_create(slurm_destroy_char);
-		if((start = slurm_get_cluster_name()))
+		if((start = slurm_get_cluster_name())) {
 			list_append(job_cond->cluster_list, start);
-		if(params.opt_verbose) {
-			fprintf(stderr, "Clusters requested:\n");
-			fprintf(stderr, "\t: %s\n", start);
+			debug2("Clusters requested:\t%s", start);
 		}
 	}
 
-	/* if any jobs are specified set to look for all users if none
+	/* if any jobs or nodes are specified set to look for all users if none
 	   are set */
-	if((job_cond->step_list && list_count(job_cond->step_list))
-	   && (!job_cond->userid_list || !list_count(job_cond->userid_list)))
-		all_users=1;
+	if(!job_cond->userid_list || !list_count(job_cond->userid_list)) 
+		if((job_cond->step_list && list_count(job_cond->step_list)) 
+		   || job_cond->used_nodes)
+			all_users=1;      
 
 	if(all_users) {
-		if(job_cond->userid_list 
-		   && list_count(job_cond->userid_list)) {
+		if(job_cond->userid_list && list_count(job_cond->userid_list)) {
 			list_destroy(job_cond->userid_list);
 			job_cond->userid_list = NULL;
 		}
-		if(params.opt_verbose)
-			fprintf(stderr, "Userids requested:\n\t: all\n");
-	} else if (params.opt_verbose && job_cond->userid_list 
-	    && list_count(job_cond->userid_list)) {
-		fprintf(stderr, "Userids requested:\n");
+		debug2("Userids requested:\tall\n");
+	} else if (job_cond->userid_list && list_count(job_cond->userid_list)) {
+		debug2("Userids requested:");
 		itr = list_iterator_create(job_cond->userid_list);
 		while((start = list_next(itr))) 
-			fprintf(stderr, "\t: %s\n", start);
+			debug2("\t: %s", start);
 		list_iterator_destroy(itr);
 	} else if(!job_cond->userid_list 
-		      || !list_count(job_cond->userid_list)) {
+		  || !list_count(job_cond->userid_list)) {
 		if(!job_cond->userid_list)
-			job_cond->userid_list =
-				list_create(slurm_destroy_char);
+			job_cond->userid_list = list_create(slurm_destroy_char);
 		start = xstrdup_printf("%u", params.opt_uid);
 		list_append(job_cond->userid_list, start);
-		if(params.opt_verbose) {
-			fprintf(stderr, "Userids requested:\n");
-			fprintf(stderr, "\t: %s\n", start);
-		}
+		debug2("Userid requested\t: %s", start);
 	}
 
-	if (params.opt_verbose && job_cond->groupid_list 
-	    && list_count(job_cond->groupid_list)) {
-		fprintf(stderr, "Groupids requested:\n");
+	if (job_cond->groupid_list && list_count(job_cond->groupid_list)) {
+		debug2("Groupids requested:\n");
 		itr = list_iterator_create(job_cond->groupid_list);
 		while((start = list_next(itr))) 
-			fprintf(stderr, "\t: %s\n", start);
+			debug2("\t: %s\n", start);
 		list_iterator_destroy(itr);
 	} 
 
 	/* specific partitions requested? */
-	if (params.opt_verbose && job_cond->partition_list 
-	    && list_count(job_cond->partition_list)) {
-		fprintf(stderr, "Partitions requested:\n");
+	if (job_cond->partition_list && list_count(job_cond->partition_list)) {
+		debug2("Partitions requested:");
 		itr = list_iterator_create(job_cond->partition_list);
 		while((start = list_next(itr))) 
-			fprintf(stderr, "\t: %s\n", start);
+			debug2("\t: %s\n", start);
 		list_iterator_destroy(itr);
 	}
 
 	/* specific jobs requested? */
-	if (params.opt_verbose && job_cond->step_list
-	    && list_count(job_cond->step_list)) { 
-		fprintf(stderr, "Jobs requested:\n");
+	if (job_cond->step_list && list_count(job_cond->step_list)) { 
+		debug2("Jobs requested:");
 		itr = list_iterator_create(job_cond->step_list);
 		while((selected_step = list_next(itr))) {
 			if(selected_step->stepid != NO_VAL) 
-				fprintf(stderr, "\t: %d.%d\n",
+				debug2("\t: %d.%d",
 					selected_step->jobid,
 					selected_step->stepid);
 			else	
-				fprintf(stderr, "\t: %d\n", 
+				debug2("\t: %d", 
 					selected_step->jobid);
 		}
 		list_iterator_destroy(itr);
 	}
 
 	/* specific states (completion state) requested? */
-	if (params.opt_verbose && job_cond->state_list
-	    && list_count(job_cond->state_list)) {
-		fprintf(stderr, "States requested:\n");
+	if (job_cond->state_list && list_count(job_cond->state_list)) {
+		debug2("States requested:");
 		itr = list_iterator_create(job_cond->state_list);
 		while((start = list_next(itr))) {
-			fprintf(stderr, "\t: %s\n", 
+			debug2("\t: %s", 
 				job_state_string(atoi(start)));
 		}
 		list_iterator_destroy(itr);
 	}
 
-	if (params.opt_verbose && job_cond->wckey_list 
-	    && list_count(job_cond->wckey_list)) {
-		fprintf(stderr, "Wckeys requested:\n");
+	if (job_cond->wckey_list && list_count(job_cond->wckey_list)) {
+		debug2("Wckeys requested:");
 		itr = list_iterator_create(job_cond->wckey_list);
 		while((start = list_next(itr))) 
-			fprintf(stderr, "\t: %s\n", start);
+			debug2("\t: %s\n", start);
 		list_iterator_destroy(itr);
 	} 
 
@@ -1057,7 +1022,7 @@ void parse_command_line(int argc, char **argv)
 	} 
 	
 	if (params.opt_field_list==NULL) {
-		if (params.opt_dump || params.opt_expire)
+		if (params.opt_dump)
 			goto endopt;
 		if(params.opt_completion)
 			dot = DEFAULT_COMP_FIELDS;
@@ -1078,29 +1043,19 @@ void parse_command_line(int argc, char **argv)
 			if (!strcasecmp(fields[i].name, start))
 				goto foundfield;
 		}
-		fprintf(stderr,
-			"Invalid field requested: \"%s\"\n",
-			start);
+		error("Invalid field requested: \"%s\"", start);
 		exit(1);
 	foundfield:
-		printfields[nprintfields++] = i;
+		list_append(print_fields_list, &fields[i]);
 		start = end + 1;
 	}
-	if (params.opt_verbose) {
-		fprintf(stderr, "%d field%s selected:\n",
-			nprintfields,
-			(nprintfields==1? "" : "s"));
-		for (i = 0; i < nprintfields; i++)
-			fprintf(stderr,
-				"\t%s\n",
-				fields[printfields[i]].name);
-	} 
+	field_count = list_count(print_fields_list);
 endopt:
 	if (optind < argc) {
-		fprintf(stderr, "Error: Unknown arguments:");
+		debug2("Error: Unknown arguments:");
 		for (i=optind; i<argc; i++)
-			fprintf(stderr, " %s", argv[i]);
-		fprintf(stderr, "\n");
+			debug2(" %s", argv[i]);
+		debug2("\n");
 		exit(1);
 	}
 	return;
@@ -1312,18 +1267,6 @@ void do_dump_completion(void)
 	list_iterator_destroy(itr);
 }
 
-/* do_expire() -- purge expired data from the accounting log file
- */
-
-void do_expire()
-{
-	if(params.opt_completion) 
-		g_slurm_jobcomp_archive(params.arch_cond);
-	else {
-		jobacct_storage_g_archive(acct_db_conn, params.arch_cond);
-	}
-}
-
 void do_help(void)
 {
 	switch (params.opt_help) {
@@ -1337,7 +1280,7 @@ void do_help(void)
 		_usage();
 		break;
 	default:
-		fprintf(stderr, "sacct bug: params.opt_help=%d\n", 
+		debug2("sacct bug: params.opt_help=%d\n", 
 			params.opt_help);
 	}
 }
@@ -1352,8 +1295,6 @@ void do_help(void)
  */
 void do_list(void)
 {
-	int do_jobsteps = 1;
-	
 	ListIterator itr = NULL;
 	ListIterator itr_step = NULL;
 	jobacct_job_rec_t *job = NULL;
@@ -1362,8 +1303,6 @@ void do_list(void)
 	if(!jobs)
 		return;
 
-	if (params.opt_total)
-		do_jobsteps = 0;
 	itr = list_iterator_create(jobs);
 	while((job = list_next(itr))) {
 		if(job->sacct.min_cpu == NO_VAL)
@@ -1376,18 +1315,15 @@ void do_list(void)
 			job->sacct.ave_pages /= list_count(job->steps);
 		}
 
-		if (job->show_full) {
+		if (job->show_full) 
 			print_fields(JOB, job);
-		}
 		
-		if (do_jobsteps && (job->track_steps || !job->show_full)) {
+		if (!params.opt_allocs
+		    && (job->track_steps || !job->show_full)) {
 			itr_step = list_iterator_create(job->steps);
 			while((step = list_next(itr_step))) {
 				if(step->end == 0)
 					step->end = job->end;
-				step->associd = job->associd;
-				step->cluster = job->cluster;
-				step->account = job->account;
 				print_fields(JOBSTEP, step);
 			} 
 			list_iterator_destroy(itr_step);
@@ -1419,44 +1355,31 @@ void do_list_completion(void)
 	list_iterator_destroy(itr);
 }
 
-void do_stat()
-{
-	ListIterator itr = NULL;
-	uint32_t stepid = 0;
-	jobacct_selected_step_t *selected_step = NULL;
-	acct_job_cond_t *job_cond = params.arch_cond->job_cond;
-
-	if(!job_cond->step_list || !list_count(job_cond->step_list)) {
-		fprintf(stderr, "No job list given to stat.\n");
-		return;
-	}
-
-	itr = list_iterator_create(job_cond->step_list);
-	while((selected_step = list_next(itr))) {
-		if(selected_step->stepid != NO_VAL)
-			stepid = selected_step->stepid;
-		else
-			stepid = 0;
-		sacct_stat(selected_step->jobid, stepid);
-	}
-	list_iterator_destroy(itr);
-}
-
 void sacct_init()
 {
 	_init_params();
+	print_fields_list = list_create(NULL);
+	print_fields_itr = list_iterator_create(print_fields_list);
 }
 
 void sacct_fini()
 {
+	if(print_fields_itr)
+		list_iterator_destroy(print_fields_itr);
+	if(print_fields_list)
+		list_destroy(print_fields_list);
 	if(jobs)
 		list_destroy(jobs);
+	if(qos_list)
+		list_destroy(qos_list);
+
 	if(params.opt_completion)
 		g_slurm_jobcomp_fini();
 	else {
 		acct_storage_g_close_connection(&acct_db_conn);
 		slurm_acct_storage_fini();
 	}
-
-	destroy_acct_archive_cond(params.arch_cond);
+	xfree(params.opt_field_list);
+	xfree(params.opt_filein);
+	destroy_acct_job_cond(params.job_cond);
 }
diff --git a/src/sacct/print.c b/src/sacct/print.c
index 700701329..b3ff938bc 100644
--- a/src/sacct/print.c
+++ b/src/sacct/print.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -39,21 +40,19 @@
 
 #include "sacct.h"
 #include "src/common/parse_time.h"
-#include "src/common/hostlist.h"
 #include "slurm.h"
-#define FORMAT_STRING_SIZE 34
 
-void _elapsed_time(long secs, long usecs, char *str);
+char *_elapsed_time(long secs, long usecs);
 
-void _elapsed_time(long secs, long usecs, char *str)
+char *_elapsed_time(long secs, long usecs)
 {
 	long	days, hours, minutes, seconds;
 	long    subsec = 0;
+	char *str = NULL;
+
+	if(secs < 0 || secs == NO_VAL)
+		return NULL;
 	
-	if(secs < 0) {
-		snprintf(str, FORMAT_STRING_SIZE, "'N/A'");
-		return;
-	}
 	
 	while (usecs >= 1E6) {
 		secs++;
@@ -69,1306 +68,1233 @@ void _elapsed_time(long secs, long usecs, char *str)
 	days    =  secs / 86400;
 
 	if (days) 
-		snprintf(str, FORMAT_STRING_SIZE,
-			 "%2.2ld-%2.2ld:%2.2ld:%2.2ld",
-		         days, hours, minutes, seconds);
+		str = xstrdup_printf("%ld-%2.2ld:%2.2ld:%2.2ld",
+				     days, hours, minutes, seconds);
 	else if (hours)
-		snprintf(str, FORMAT_STRING_SIZE,
-			 "%2.2ld:%2.2ld:%2.2ld",
-		         hours, minutes, seconds);
+		str = xstrdup_printf("%2.2ld:%2.2ld:%2.2ld",
+				     hours, minutes, seconds);
 	else if(subsec)
-		snprintf(str, FORMAT_STRING_SIZE,
-			 "%2.2ld:%2.2ld.%3.3ld",
-		         minutes, seconds, subsec);
+		str = xstrdup_printf("%2.2ld:%2.2ld.%3.3ld",
+				     minutes, seconds, subsec);
 	else
-		snprintf(str, FORMAT_STRING_SIZE,
-			 "00:%2.2ld:%2.2ld",
-		         minutes, seconds);
-}
-
-void print_fields(type_t type, void *object)
-{
-	int f, pf;
-	for (f=0; f<nprintfields; f++) {
-		pf = printfields[f];
-		if (f)
-			printf(" ");
-		(fields[pf].print_routine)(type, object);
-	}
-	printf("\n");
-}
-
-/* Field-specific print routines */
-
-void print_cpu(type_t type, void *object)
-{
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char str[FORMAT_STRING_SIZE];
-	
-	switch(type) {
-	case HEADLINE:
-		printf("%-15s", "Cpu");
-		break;
-	case UNDERSCORE:
-		printf("%-15s", "---------------");
-		break;
-	case JOB:
-		_elapsed_time(job->tot_cpu_sec, job->tot_cpu_usec, str);
-		printf("%-15s", str);
-		break;
-	case JOBSTEP:
-		_elapsed_time(step->tot_cpu_sec, step->tot_cpu_usec, str);
-		printf("%-15s", str);
-		break;
-	default:
-		printf("%-15s", "n/a");
-		break;
-	} 
-}
-
-void print_elapsed(type_t type, void *object)
-{
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char str[FORMAT_STRING_SIZE];
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-15s", "Elapsed");
-		break;
-	case UNDERSCORE:
-		printf("%-15.15s", "---------------");
-		break;
-	case JOB:
-		_elapsed_time(job->elapsed, 0, str);
-		printf("%-15s", str);
-		break;
-	case JOBSTEP:
-		_elapsed_time(step->elapsed, 0, str);
-		printf("%-15s", str);
-		break;
-	default:
-		printf("%-15s", "n/a");
-		break;
-	} 
+		str = xstrdup_printf("00:%2.2ld:%2.2ld",
+				     minutes, seconds);
+	return str;
 }
 
-void print_exitcode(type_t type, void *object)
+static char *_find_qos_name_from_list(
+	List qos_list, int qosid)
 {
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char tmp[9];
-	uint16_t term_sig = 0;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-8s", "ExitCode");
-		break;
-	case UNDERSCORE:
-		printf("%-8s", "--------");
-		break;
-	case JOB:
-		if (WIFSIGNALED(job->exitcode))
-			term_sig = WTERMSIG(job->exitcode);
+	ListIterator itr = NULL;
+	acct_qos_rec_t *qos = NULL;
 	
-		snprintf(tmp, sizeof(tmp), "%u:%u",
-			 WEXITSTATUS(job->exitcode), term_sig);
-		printf("%-8s", tmp);
-		break;
-	case JOBSTEP:
-		if (WIFSIGNALED(step->exitcode))
-			term_sig = WTERMSIG(step->exitcode);
+	if(!qos_list || qosid == NO_VAL)
+		return NULL;
 	
-		snprintf(tmp, sizeof(tmp), "%u:%u",
-			 WEXITSTATUS(step->exitcode), term_sig);
-		printf("%-8s", tmp);
-		break;
-	default:
-		printf("%-8s", "n/a");
-		break;
-	} 
-}
-
-void print_gid(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	int32_t gid = -1;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-5s", "Gid");
-		break;
-	case UNDERSCORE:
-		printf("%-5s", "-----");
-		break;
-	case JOB:
-		gid = job->gid;
-		break;
-	case JOBCOMP:
-		printf("%-5u", jobcomp->gid);
-		break;
-	case JOBSTEP:
-		printf("%-5s", " ");
-		break;
-	default:
-		printf("%-5s", "n/a");
-		break;
-	} 
-
-	if(gid != -1) 
-		printf("%-5d", gid);
-}
-
-void print_group(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	int gid = -1;
-	char	*tmp="(unknown)";
-	struct	group *gr = NULL;
-			
-	switch(type) {
-	case HEADLINE:
-		printf("%-9s", "Group");
-		break;
-	case UNDERSCORE:
-		printf("%-9s", "---------");
-		break;
-	case JOB:
-		gid = job->gid;
-		break;
-	case JOBCOMP:
-		printf("%-9s", jobcomp->gid_name);
-		break;
-	case JOBSTEP:
-		printf("%-9s", " ");
-		break;
-	default:
-		printf("%-9s", "n/a");
-		break;
+	itr = list_iterator_create(qos_list);
+	while((qos = list_next(itr))) {
+		if(qosid == qos->id)
+			break;
 	}
-	if(gid != -1) {
-		if ((gr=getgrgid(gid)))
-			tmp=gr->gr_name;
-		printf("%-9s", tmp);
-	} 
-}
-
-void print_job(type_t type, void *object)
-{
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
+	list_iterator_destroy(itr);
 
-	switch(type) {
-	case HEADLINE:
-		printf("%-12s", "Job");
-		break;
-	case UNDERSCORE:
-		printf("%-12s", "------------");
-		break;
-	case JOB:
-		printf("%-12u", job->jobid);
-		break;
-	case JOBSTEP:
-		printf("%-12s", " ");
-		break;
-	default:
-		printf("%-12s", "n/a");
-		break;
-	} 
+	if(qos)
+		return qos->name;
+	else
+		return "Unknown";
 }
 
-void print_name(type_t type, void *object)
-{
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
 
-	switch(type) {
-	case HEADLINE:
-		printf("%-18s", "Jobname");
-		break;
-	case UNDERSCORE:
-		printf("%-18s", "------------------");
-		break;
-	case JOB:
-		if(!job->jobname)
-			printf("%-18s", "unknown");			     
-		else if(strlen(job->jobname)<19)
-			printf("%-18s", job->jobname);
-		else
-			printf("%-15.15s...", job->jobname);
-			
-		break;
-	case JOBCOMP:
-		if(!jobcomp->jobname)
-			printf("%-18s", "unknown");			     
-		else if(strlen(jobcomp->jobname)<19)
-			printf("%-18s", jobcomp->jobname);
-		else
-			printf("%-15.15s...", jobcomp->jobname);
-			
-		break;
-	case JOBSTEP:
-		if(!step->stepname)
-			printf("%-18s", "unknown");			     
-		else if(strlen(step->stepname)<19)
-			printf("%-18s", step->stepname);
-		else
-			printf("%-15.15s...", step->stepname);
-		break;
-	default:
-		printf("%-18s", "n/a");
-		break;
-	} 
-}
 
-void print_jobid(type_t type, void *object)
+void print_fields(type_t type, void *object)
 {
 	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char outbuf[10];
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-10s", "JobID");
-		break;
-	case UNDERSCORE:
-		printf("%-10s", "----------");
-		break;
-	case JOB:
-		printf("%-10u", job->jobid);
-		break;
-	case JOBCOMP:
-		printf("%-10u", jobcomp->jobid);
-		break;
-	case JOBSTEP:
-		snprintf(outbuf, sizeof(outbuf), "%u.%u",
-			 step->jobid,
-			 step->stepid);
-		printf("%-10s", outbuf);
-		break;
-	default:
-		printf("%-10s", "n/a");
-		break;
-	} 
-
-}
-
-void print_ncpus(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-7s", "Ncpus");
-		break;
-	case UNDERSCORE:
-		printf("%-7s", "-------");
-		break;
-	case JOB:
-		printf("%-7u", job->alloc_cpus);
-		break;
-	case JOBSTEP:
-		printf("%-7u", step->ncpus);
-		break;
-	default:
-		printf("%-7s", "n/a");
-		break;
-	} 
-}
-
-void print_nodes(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
 	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
+	jobcomp_job_rec_t *job_comp = (jobcomp_job_rec_t *)object;
+	print_field_t *field = NULL;
+	int curr_inx = 1;
+	struct passwd *pw = NULL;
+	struct	group *gr = NULL;
+	char outbuf[FORMAT_STRING_SIZE];
 	
 	switch(type) {
-	case HEADLINE:
-		printf("%-30s", "Nodes");
-		break;
-	case UNDERSCORE:
-		printf("%-30s", "------------------------------");
-		break;
-	case JOB:
-		printf("%-30s", job->nodes);
-		break;
-	case JOBCOMP:
-		printf("%-30s", jobcomp->nodelist);
-		break;
-	case JOBSTEP:
-		printf("%-30s", step->nodes);
-		break;
-	default:
-		printf("%-30s", "n/a");
-		break;
-	} 
-}
-
-void print_nnodes(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char *tmp_char = NULL;
-	int tmp_int = NO_VAL;
-	hostlist_t hl = NULL;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-8s", "Node Cnt");
-		tmp_int = INFINITE;
-		break;
-	case UNDERSCORE:
-		printf("%-8s", "--------");
-		tmp_int = INFINITE;
-		break;
-	case JOB:
-		tmp_char = job->nodes;
-		break;
-	case JOBSTEP:
-		tmp_char = step->nodes;
-		break;
-	case JOBCOMP:
-		tmp_int = jobcomp->node_cnt;
-		break;
-	default:
-		break;
-	}
-	if(tmp_char) {
-		hl = hostlist_create(tmp_char);
-		tmp_int = hostlist_count(hl);
-		hostlist_destroy(hl);
-	}
-
-	if(tmp_int == INFINITE)
-		return;
-	else if(tmp_int == NO_VAL) 
-		printf("%-8s", "n/a");
-	else {
-		char outbuf[FORMAT_STRING_SIZE];
-		convert_num_unit((float)tmp_int, 
-				 outbuf, sizeof(outbuf), UNIT_NONE);
-		printf("%-8s", outbuf);
-	}
-}
-
-void print_ntasks(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-7s", "Ntasks");
-		break;
-	case UNDERSCORE:
-		printf("%-7s", "-------");
-		break;
-	case JOB:
-		printf("%-7u", job->alloc_cpus);
-		break;
-	case JOBSTEP:
-		printf("%-7u", step->ncpus);
-		break;
-	default:
-		printf("%-7s", "n/a");
-		break;
-	} 
-}
-
-void print_partition(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-10s", "Partition");
-		break;
-	case UNDERSCORE:
-		printf("%-10s", "----------");
-		break;
 	case JOB:
-		if(!job->partition)
-			printf("%-10s", "unknown");			     
-		else if(strlen(job->partition)<11)
-			printf("%-10s", job->partition);
-		else
-			printf("%-7.7s...", job->partition);
-		
-		break;
-	case JOBCOMP:
-		if(!jobcomp->partition)
-			printf("%-10s", "unknown");			     
-		else if(strlen(jobcomp->partition)<11)
-			printf("%-10s", jobcomp->partition);
-		else
-			printf("%-7.7s...", jobcomp->partition);
+		step = NULL;
+		if(!job->track_steps) 
+			step = (jobacct_step_rec_t *)job->first_step_ptr;
+		/* set this to avoid printing out info for things that
+		   don't mean anything.  Like an allocation that never
+		   ran anything.
+		*/
+		if(!step) 
+			job->track_steps = 1;		
 		
-		break;
-	case JOBSTEP:
-		printf("%-10s", " ");
 		break;
 	default:
-		printf("%-10s", "n/a");
 		break;
-	} 
-}
-
-void print_blockid(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
+	}
 
-	switch(type) {
-	case HEADLINE:
-		printf("%-16s", "BlockID");
-		break;
-	case UNDERSCORE:
-		printf("%-16s", "----------------");
-		break;
-	case JOB:
-		if(!job->blockid)
-			printf("%-16s", "unknown");			     
-		else if(strlen(job->blockid)<17)
-			printf("%-16s", job->blockid);
-		else
-			printf("%-13.13s...", job->blockid);
-		
-		break;
-	case JOBCOMP:
-		if(!jobcomp->blockid)
-			printf("%-16s", "unknown");			     
-		else if(strlen(jobcomp->blockid)<17)
-			printf("%-16s", jobcomp->blockid);
-		else
-			printf("%-13.13s...", jobcomp->blockid);
+	list_iterator_reset(print_fields_itr);
+	while((field = list_next(print_fields_itr))) {
+		char *tmp_char = NULL;
+		int tmp_int = NO_VAL, tmp_int2 = NO_VAL;
+
+		switch(field->type) {
+		case PRINT_ALLOC_CPUS:
+			switch(type) {
+			case JOB:
+				tmp_int = job->alloc_cpus;
+				// we want to use the step info
+				if(!step) 
+					break;
+			case JOBSTEP:
+				tmp_int = step->ncpus;
+				break;
+			case JOBCOMP:
+			default:
+				tmp_int = NO_VAL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_ACCOUNT:
+			switch(type) {
+			case JOB:
+				tmp_char = job->account;
+				break;
+			case JOBSTEP:
+				tmp_char = step->job_ptr->account;
+				break;
+			case JOBCOMP:
+			default:
+				tmp_char = "n/a";
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_ASSOCID:
+			switch(type) {
+			case JOB:
+				tmp_int = job->associd;
+				break;
+			case JOBSTEP:
+				tmp_int = step->job_ptr->associd;
+				break;
+			case JOBCOMP:
+			default:
+				tmp_int = NO_VAL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_AVECPU:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps) 
+					tmp_int = job->sacct.ave_cpu;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.ave_cpu;
+				break;
+			case JOBCOMP:
+			default:
+				break;
+			}
+			tmp_char = _elapsed_time((int)tmp_int, 0);
+			
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_AVEPAGES:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_int = job->sacct.ave_pages;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.ave_pages;
+				break;
+			case JOBCOMP:
+			default:
+				break;
+			}
+			if(tmp_int != NO_VAL)
+				convert_num_unit((float)tmp_int,
+						 outbuf, sizeof(outbuf),
+						 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_AVERSS:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_int = job->sacct.ave_rss;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.ave_rss;
+				break;
+			case JOBCOMP:
+			default:
+				break;
+			}
+			if(tmp_int != NO_VAL)
+				convert_num_unit((float)tmp_int,
+						 outbuf, sizeof(outbuf),
+						 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_AVEVSIZE:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_int = job->sacct.ave_vsize;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.ave_vsize;
+				break;
+			case JOBCOMP:
+			default:
+				break;
+			}
+			if(tmp_int != NO_VAL)
+				convert_num_unit((float)tmp_int,
+						 outbuf, sizeof(outbuf),
+						 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_BLOCKID:
+			switch(type) {
+			case JOB:
+				tmp_char = job->blockid;
+				break;
+			case JOBSTEP:
+				break;
+			case JOBCOMP:
+				tmp_char = job_comp->blockid;
+				break;
+			default:
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_CLUSTER:
+			switch(type) {
+			case JOB:
+				tmp_char = job->cluster;
+				break;
+			case JOBSTEP:
+				tmp_char = step->job_ptr->cluster;
+				break;
+			case JOBCOMP:
+			default:
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_CPU_TIME:
+			switch(type) {
+			case JOB:
+				tmp_int = job->elapsed * job->alloc_cpus;
+				break;
+			case JOBSTEP:
+				tmp_int = step->elapsed * step->ncpus;
+				break;
+			case JOBCOMP:
+				break;
+			default:
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_CPU_TIME_RAW:
+			switch(type) {
+			case JOB:
+				tmp_int = job->elapsed * job->alloc_cpus;
+				break;
+			case JOBSTEP:
+				tmp_int = step->elapsed * step->ncpus;
+				break;
+			case JOBCOMP:
+				break;
+			default:
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_ELAPSED:
+			switch(type) {
+			case JOB:
+				tmp_int = job->elapsed;
+				break;
+			case JOBSTEP:
+				tmp_int = step->elapsed;
+				break;
+			case JOBCOMP:
+				tmp_int = job_comp->end_time 
+					- job_comp->start_time;
+				break;
+			default:
+				tmp_int = NO_VAL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_ELIGIBLE:
+			switch(type) {
+			case JOB:
+				tmp_int = job->eligible;
+				break;
+			case JOBSTEP:
+				tmp_int = step->start;
+				break;
+			case JOBCOMP:
+				break;
+			default:
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_END:
+			switch(type) {
+			case JOB:
+				tmp_int = job->end;
+				break;
+			case JOBSTEP:
+				tmp_int = step->end;
+				break;
+			case JOBCOMP:
+				tmp_int = parse_time(job_comp->end_time, 1);
+				break;
+			default:
+				tmp_int = NO_VAL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_EXITCODE:
+			tmp_int = 0;
+			tmp_int2 = 0;
+			switch(type) {
+			case JOB:
+				tmp_int = job->exitcode;
+				break;
+			case JOBSTEP:
+				tmp_int = step->exitcode;
+				break;
+			case JOBCOMP:
+			default:
+				break;
+			}
+			if (WIFSIGNALED(tmp_int))
+				tmp_int2 = WTERMSIG(tmp_int);
+			
+			snprintf(outbuf, sizeof(outbuf), "%d:%d",
+				 WEXITSTATUS(tmp_int), tmp_int2);
+
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_GID:
+			switch(type) {
+			case JOB:
+				tmp_int = job->gid;
+				break;
+			case JOBSTEP:
+				tmp_int = NO_VAL;
+				break;
+			case JOBCOMP:
+				tmp_int = job_comp->gid;
+				break;
+			default:
+				tmp_int = NO_VAL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_GROUP:
+			switch(type) {
+			case JOB:
+				tmp_int = job->gid;
+				break;
+			case JOBSTEP:
+				tmp_int = NO_VAL;
+				break;
+			case JOBCOMP:
+				tmp_int = job_comp->gid;
+				break;
+			default:
+				tmp_int = NO_VAL;
+				break;
+			}
+			tmp_char = NULL;
+			if ((gr=getgrgid(tmp_int)))
+				tmp_char=gr->gr_name;
+
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_JOBID:
+			switch(type) {
+			case JOB:
+				tmp_char = xstrdup_printf("%u", job->jobid);
+				break;
+			case JOBSTEP:
+				tmp_char = xstrdup_printf("%u.%u",
+							  step->job_ptr->jobid,
+							  step->stepid);
+				break;
+			case JOBCOMP:
+				tmp_char = xstrdup_printf("%u",
+							  job_comp->jobid);
+				break;
+			default:
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_JOBNAME:
+			switch(type) {
+			case JOB:
+				tmp_char = job->jobname;
+				break;
+			case JOBSTEP:
+				tmp_char = step->stepname;
+				break;
+			case JOBCOMP:
+				tmp_char = job_comp->jobname;
+				break;
+			default:
+				tmp_char = NULL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_LAYOUT:
+			switch(type) {
+			case JOB:
+				/* below really should be step.  It is
+				   not a typo */
+				if(!job->track_steps) 
+					tmp_char = slurm_step_layout_type_name(
+						step->task_dist);
+				break;
+			case JOBSTEP:
+				tmp_char = slurm_step_layout_type_name(
+					step->task_dist);
+				break;
+			case JOBCOMP:
+				break;
+			default:
+				tmp_char = NULL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXPAGES:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_int = job->sacct.max_pages;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.max_pages;
+				break;
+			case JOBCOMP:
+			default:
+				break;
+			}
+			if(tmp_int != NO_VAL)
+				convert_num_unit((float)tmp_int,
+						 outbuf, sizeof(outbuf),
+						 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXPAGESNODE:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_char = find_hostname(
+						job->sacct.max_pages_id.nodeid,
+						job->nodes);
+				break;
+			case JOBSTEP:
+				tmp_char = find_hostname(
+					step->sacct.max_pages_id.nodeid,
+					step->nodes);
+				break;
+			case JOBCOMP:
+			default:
+				tmp_char = NULL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_MAXPAGESTASK:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_int = 
+						job->sacct.max_pages_id.taskid;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.max_pages_id.taskid;
+				break;
+			case JOBCOMP:
+			default:
+				tmp_int = NO_VAL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXRSS:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_int = job->sacct.max_rss;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.max_rss;
+				break;
+			case JOBCOMP:
+			default:
+				break;
+			}
+			if(tmp_int != NO_VAL)
+				convert_num_unit((float)tmp_int,
+						 outbuf, sizeof(outbuf),
+						 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXRSSNODE:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_char = find_hostname(
+						job->sacct.max_rss_id.nodeid,
+						job->nodes);
+				break;
+			case JOBSTEP:
+				tmp_char = find_hostname(
+					step->sacct.max_rss_id.nodeid,
+					step->nodes);
+				break;
+			case JOBCOMP:
+			default:
+				tmp_char = NULL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_MAXRSSTASK:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_int = job->sacct.max_rss_id.taskid;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.max_rss_id.taskid;
+				break;
+			case JOBCOMP:
+			default:
+				tmp_int = NO_VAL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXVSIZE:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_int = job->sacct.max_vsize;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.max_vsize;
+				break;
+			case JOBCOMP:
+			default:
+				tmp_int = NO_VAL;
+				break;
+			}
+			if(tmp_int != NO_VAL)
+				convert_num_unit((float)tmp_int,
+						 outbuf, sizeof(outbuf),
+						 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXVSIZENODE:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_char = find_hostname(
+						job->sacct.max_vsize_id.nodeid,
+						job->nodes);
+				break;
+			case JOBSTEP:
+				tmp_char = find_hostname(
+					step->sacct.max_vsize_id.nodeid,
+					step->nodes);
+				break;
+			case JOBCOMP:
+			default:
+				tmp_char = NULL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_MAXVSIZETASK:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_int =
+						job->sacct.max_vsize_id.taskid;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.max_vsize_id.taskid;
+				break;
+			case JOBCOMP:
+			default:
+				tmp_int = NO_VAL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MINCPU:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_int = job->sacct.min_cpu;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.min_cpu;
+				break;
+			case JOBCOMP:
+			default:
+				break;
+			}
+			tmp_char = _elapsed_time((int)tmp_int, 0);
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_MINCPUNODE:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_char = find_hostname(
+						job->sacct.min_cpu_id.nodeid,
+						job->nodes);
+				break;
+			case JOBSTEP:
+				tmp_char = find_hostname(
+					step->sacct.min_cpu_id.nodeid,
+					step->nodes);
+				break;
+			case JOBCOMP:
+			default:
+				tmp_char = NULL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_MINCPUTASK:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps)
+					tmp_int = job->sacct.min_cpu_id.taskid;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sacct.min_cpu_id.taskid;
+				break;
+			case JOBCOMP:
+			default:
+				tmp_int = NO_VAL;
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_NODELIST:
+			switch(type) {
+			case JOB:
+				tmp_char = job->nodes;
+				break;
+			case JOBSTEP:
+				tmp_char = step->nodes;
+				break;
+			case JOBCOMP:
+				tmp_char = job_comp->nodelist;
+				break;
+			default:
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_NNODES:
+			switch(type) {
+			case JOB:
+				tmp_int = job->alloc_nodes;
+				tmp_char = job->nodes;
+				break;
+			case JOBSTEP:
+				tmp_int = step->nnodes;
+				tmp_char = step->nodes;
+				break;
+			case JOBCOMP:
+				tmp_int = job_comp->node_cnt;
+				tmp_char = job_comp->nodelist;
+				break;
+			default:
+				break;
+			}
+			
+			if(!tmp_int) {
+				hostlist_t hl = hostlist_create(tmp_char);
+				tmp_int = hostlist_count(hl);
+				hostlist_destroy(hl);
+			}
+			convert_num_unit((float)tmp_int, 
+					 outbuf, sizeof(outbuf), UNIT_NONE);
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_NTASKS:
+			switch(type) {
+			case JOB:
+				if(!job->track_steps && !step)
+					tmp_int = job->alloc_cpus;
+				// we want to use the step info
+				if(!step) 
+					break;
+			case JOBSTEP:
+				tmp_int = step->ntasks;
+				break;
+			case JOBCOMP:
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_PRIO:
+			switch(type) {
+			case JOB:
+				tmp_int = job->priority;
+				break;
+			case JOBSTEP:
+
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_PARTITION:
+			switch(type) {
+			case JOB:
+				tmp_char = job->partition;
+				break;
+			case JOBSTEP:
+
+				break;
+			case JOBCOMP:
+				tmp_char = job_comp->partition;
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_QOS:
+			switch(type) {
+			case JOB:
+				tmp_int = job->qos;
+				break;
+			case JOBSTEP:
+
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			if(!qos_list) 
+				qos_list = acct_storage_g_get_qos(
+					acct_db_conn, getuid(), NULL);
 		
-		break;
-	case JOBSTEP:
-		printf("%-16s", " ");
-		break;
-	default:
-		printf("%-16s", "n/a");
-		break;
-	} 
-}
-
-void print_pages(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char outbuf[FORMAT_STRING_SIZE];
-	char buf1[FORMAT_STRING_SIZE];
-	char buf2[FORMAT_STRING_SIZE];
-	char buf3[FORMAT_STRING_SIZE];
-	sacct_t sacct;
-	char *nodes = NULL;
-	uint32_t pos;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-34s", "MaxPages/Node:Task - Ave");
-		break;
-	case UNDERSCORE:
-		printf("%-34s", "----------------------------------");
-		break;
-	case JOB:
-		sacct = job->sacct;
-		nodes = job->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		convert_num_unit((float)sacct.max_pages, 
-				 buf1, sizeof(buf1), UNIT_NONE);
-
-		if(job->track_steps)
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/- - -", buf1);
-		else {
-			convert_num_unit((float)sacct.ave_pages,
-					 buf2, sizeof(buf2), UNIT_NONE);
-			find_hostname(pos, nodes, buf3);
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-				 buf1,
-				 buf3,
-				 sacct.max_pages_id.taskid, 
-				 buf2);
-		}
-		printf("%-34s", outbuf);
-		break;
-	case JOBSTEP:
-		sacct = step->sacct;
-		nodes = step->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		convert_num_unit((float)sacct.max_pages, buf1, sizeof(buf1),
-				 UNIT_NONE);
-		convert_num_unit((float)sacct.ave_pages, buf2, sizeof(buf2),
-				 UNIT_NONE);
-		find_hostname(pos, nodes, buf3);
-		snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-			 buf1,
-			 buf3,
-			 sacct.max_pages_id.taskid, 
-			 buf2);
-		printf("%-34s", outbuf);
-		break;
-	default:
-		printf("%-34s", "n/a");
-		break;
-	} 
-}
-
-void print_rss(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char outbuf[FORMAT_STRING_SIZE];
-	char buf1[FORMAT_STRING_SIZE];
-	char buf2[FORMAT_STRING_SIZE];
-	char buf3[FORMAT_STRING_SIZE];
-	sacct_t sacct;
-	char *nodes = NULL;
-	uint32_t pos;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-34s", "MaxRSS/Node:Task - Ave");
-		break;
-	case UNDERSCORE:
-		printf("%-34s", "----------------------------------");
-		break;
-	case JOB:
-		sacct = job->sacct;
-		nodes = job->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		convert_num_unit((float)sacct.max_rss, buf1, sizeof(buf1),
-				 UNIT_KILO);
-
-		if(job->track_steps)
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/- - -", buf1);
-		else {
-			convert_num_unit((float)sacct.ave_rss, 
-					 buf2, sizeof(buf2), UNIT_KILO);
-			find_hostname(pos, nodes, buf3);
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-				 buf1,
-				 buf3, 
-				 sacct.max_rss_id.taskid, 
-				 buf2);
+			tmp_char = _find_qos_name_from_list(qos_list,
+							    tmp_int);
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_QOSRAW:
+			switch(type) {
+			case JOB:
+				tmp_int = job->qos;
+				break;
+			case JOBSTEP:
+
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_REQ_CPUS:
+			switch(type) {
+			case JOB:
+				tmp_int = job->req_cpus;
+				break;
+			case JOBSTEP:
+				tmp_int = step->ncpus;
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_RESV:
+			switch(type) {
+			case JOB:
+				if(job->start)
+					tmp_int = job->start - job->eligible;
+				else
+					tmp_int = time(NULL) - job->eligible;
+				break;
+			case JOBSTEP:
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_RESV_CPU:
+			switch(type) {
+			case JOB:
+				if(job->start)
+					tmp_int = (job->start - job->eligible)
+						* job->req_cpus;
+				else
+					tmp_int = (time(NULL) - job->eligible)
+						* job->req_cpus;
+				break;
+			case JOBSTEP:
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_RESV_CPU_RAW:
+			switch(type) {
+			case JOB:
+				if(job->start)
+					tmp_int = (job->start - job->eligible)
+						* job->req_cpus;
+				else
+					tmp_int = (time(NULL) - job->eligible)
+						* job->req_cpus;
+				break;
+			case JOBSTEP:
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_START:
+			switch(type) {
+			case JOB:
+				tmp_int = job->start;
+				break;
+			case JOBSTEP:
+				tmp_int = step->start;
+				break;
+			case JOBCOMP:
+				tmp_int = parse_time(job_comp->start_time, 1);
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_STATE:
+			switch(type) {
+			case JOB:
+				tmp_int = job->state;
+				tmp_int2 = job->requid;
+				break;
+			case JOBSTEP:
+				tmp_int = step->state;
+				tmp_int2 = step->requid;
+				break;
+			case JOBCOMP:
+				tmp_char = job_comp->state;
+				break;
+			default:
+
+				break;
+			}
+			
+			if ((tmp_int == JOB_CANCELLED) && (tmp_int2 != NO_VAL)) 
+				snprintf(outbuf, FORMAT_STRING_SIZE,
+					 "%s by %d",
+					 job_state_string(tmp_int),
+					 tmp_int2);
+			else if(tmp_int != NO_VAL)
+				snprintf(outbuf, FORMAT_STRING_SIZE,
+					 "%s",
+					 job_state_string(tmp_int));
+			else if(tmp_char)
+				snprintf(outbuf, FORMAT_STRING_SIZE,
+					 "%s",
+					 tmp_char);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_SUBMIT:
+			switch(type) {
+			case JOB:
+				tmp_int = job->submit;
+				break;
+			case JOBSTEP:
+				tmp_int = step->start;
+				break;
+			case JOBCOMP:
+				tmp_int = parse_time(job_comp->start_time, 1);
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_SUSPENDED:
+			switch(type) {
+			case JOB:
+				tmp_int = job->suspended;
+				break;
+			case JOBSTEP:
+				tmp_int = step->suspended;
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_SYSTEMCPU:
+			switch(type) {
+			case JOB:
+				tmp_int = job->sys_cpu_sec;
+				tmp_int2 = job->sys_cpu_usec;
+				break;
+			case JOBSTEP:
+				tmp_int = step->sys_cpu_sec;
+				tmp_int2 = step->sys_cpu_usec;
+
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			tmp_char = _elapsed_time(tmp_int, tmp_int2);
+
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_TIMELIMIT:
+			switch(type) {
+			case JOB:
+				
+				break;
+			case JOBSTEP:
+
+				break;
+			case JOBCOMP:
+				tmp_char = job_comp->timelimit;
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_TOTALCPU:
+			switch(type) {
+			case JOB:
+				tmp_int = job->tot_cpu_sec;
+				tmp_int2 = job->tot_cpu_usec;
+				break;
+			case JOBSTEP:
+				tmp_int = step->tot_cpu_sec;
+				tmp_int2 = step->tot_cpu_usec;
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			tmp_char = _elapsed_time(tmp_int, tmp_int2);
+
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_UID:
+			switch(type) {
+			case JOB:
+				if(job->user) {
+					if ((pw=getpwnam(job->user)))
+						tmp_int = pw->pw_uid;
+				} else 
+					tmp_int = job->uid;
+				break;
+			case JOBSTEP:
+				break;
+			case JOBCOMP:
+				tmp_int = job_comp->uid;
+				break;
+			default:
+
+				break;
+			}
+			
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_USER:
+			switch(type) {
+			case JOB:
+				if(job->user)
+					tmp_char = job->user;
+				else if(job->uid != -1) {
+					if ((pw=getpwuid(job->uid)))
+						tmp_char = pw->pw_name;	
+				}				
+				break;
+			case JOBSTEP:
+
+				break;
+			case JOBCOMP:
+				tmp_char = job_comp->uid_name;
+				break;
+			default:
+
+				break;
+			}
+
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_USERCPU:
+			switch(type) {
+			case JOB:
+				tmp_int = job->user_cpu_sec;
+				tmp_int2 = job->tot_cpu_usec;
+				break;
+			case JOBSTEP:
+				tmp_int = step->user_cpu_sec;
+				tmp_int2 = step->user_cpu_usec;
+
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			tmp_char = _elapsed_time(tmp_int, tmp_int2);
+
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_WCKEY:
+			switch(type) {
+			case JOB:
+				tmp_char = job->wckey;
+				break;
+			case JOBSTEP:
+
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_WCKEYID:
+			switch(type) {
+			case JOB:
+				tmp_int = job->wckeyid;
+				break;
+			case JOBSTEP:
+
+				break;
+			case JOBCOMP:
+
+				break;
+			default:
+
+				break;
+			}
+			field->print_routine(field,
+					     tmp_int,
+					     (curr_inx == field_count));
+			break;
+		default:
+			break;
 		}
-		printf("%-34s", outbuf);
-		break;
-	case JOBSTEP:
-		sacct = step->sacct;
-		nodes = step->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		convert_num_unit((float)sacct.max_rss, buf1, sizeof(buf1),
-				 UNIT_KILO);
-		convert_num_unit((float)sacct.ave_rss, buf2, sizeof(buf2),
-				 UNIT_KILO);
-		find_hostname(pos, nodes, buf3);
-		snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-			 buf1,
-			 buf3, 
-			 sacct.max_rss_id.taskid, 
-			 buf2);
-		printf("%-34s", outbuf);
-		break;
-	default:
-		printf("%-34s", "n/a");
-		break;
-	} 
+		curr_inx++;
+	}
+	printf("\n");
 }
-
-void print_state(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-20s", "State");
-		break;
-	case UNDERSCORE:
-		printf("%-20s", "--------------------");
-		break;
-	case JOB:
-		if ( job->state == JOB_CANCELLED) {
-			printf ("%-10s by %6d",
-				job_state_string(job->state), job->requid);
-		}
-		else {
-			printf("%-20s", job_state_string(job->state));
-		}
-		break;
-	case JOBCOMP:
-		printf("%-20s", jobcomp->state);
-		break;
-	case JOBSTEP:
-		if ( step->state == JOB_CANCELLED) {
-			printf ("%-10s by %6d",
-				job_state_string(step->state), step->requid);
-		}
-		else {
-			printf("%-20s", job_state_string(step->state));
-		}
-		break;
-	default:
-		printf("%-20s", "n/a");
-		break;
-	} 
-}
-
-void print_submit(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char time_str[32];
-		
-	switch(type) {
-	case HEADLINE:
-		printf("%-14s", "Submit Time");
-		break;
-	case UNDERSCORE:
-		printf("%-14.14s", "--------------");
-		break;
-	case JOB:
-		slurm_make_time_str(&job->submit, 
-				    time_str, 
-				    sizeof(time_str));
-		printf("%-14s", time_str);
-		break;
-	case JOBSTEP:
-		slurm_make_time_str(&step->start, 
-				    time_str, 
-				    sizeof(time_str));
-		printf("%-14s", time_str);
-		break;
-	default:
-		printf("%-14s", "n/a");
-		break;
-	} 
-}
-
-void print_eligible(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char time_str[32];
-		
-	switch(type) {
-	case HEADLINE:
-		printf("%-14s", "Eligible Time");
-		break;
-	case UNDERSCORE:
-		printf("%-14.14s", "--------------");
-		break;
-	case JOB:
-		slurm_make_time_str(&job->eligible, 
-				    time_str, 
-				    sizeof(time_str));
-		printf("%-14s", time_str);
-		break;
-	case JOBSTEP:
-		slurm_make_time_str(&step->start, 
-				    time_str, 
-				    sizeof(time_str));
-		printf("%-14s", time_str);
-		break;
-	default:
-		printf("%-14s", "n/a");
-		break;
-	} 
-}
-
-void print_start(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char time_str[19];
-	
-	switch(type) {
-	case HEADLINE:
-		printf("%-14s", "Start Time");
-		break;
-	case UNDERSCORE:
-		printf("%-14.14s", "-------------------");
-		break;
-	case JOB:
-		slurm_make_time_str(&job->start, 
-				    time_str, 
-				    sizeof(time_str));
-		printf("%-14s", time_str);
-		break;
-	case JOBCOMP:
-		printf("%-14s", jobcomp->start_time);
-		break;
-	case JOBSTEP:
-		slurm_make_time_str(&step->start, 
-				    time_str, 
-				    sizeof(time_str));
-		printf("%-14s", time_str);
-		break;
-	default:
-		printf("%-14s", "n/a");
-		break;
-	} 
-}
-
-void print_timelimit(type_t type, void *object)
-{ 
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	
-	switch(type) {
-	case HEADLINE:
-		printf("%-10s", "Time Limit");
-		break;
-	case UNDERSCORE:
-		printf("%-10s", "----------");
-		break;
-	case JOBCOMP:
-		printf("%-10s", jobcomp->timelimit);
-		break;
-	default:
-		printf("%-10s", "n/a");
-		break;
-	} 
-}
-
-void print_end(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char time_str[32];
-	
-	switch(type) {
-	case HEADLINE:
-		printf("%-14s", "End Time");
-		break;
-	case UNDERSCORE:
-		printf("%-14.14s", "--------------------");
-		break;
-	case JOB:
-		slurm_make_time_str(&job->end, 
-				    time_str, 
-				    sizeof(time_str));
-		printf("%-14s", time_str);
-		break;
-	case JOBCOMP:
-		printf("%-14s", jobcomp->end_time);
-		break;
-	case JOBSTEP:
-		slurm_make_time_str(&step->end, 
-				    time_str, 
-				    sizeof(time_str));
-		printf("%-14s", time_str);
-		break;
-	default:
-		printf("%-14s", "n/a");
-		break;
-	} 
-}
-
-void print_systemcpu(type_t type, void *object)
-{
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char str[FORMAT_STRING_SIZE];
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-15s", "SystemCpu");
-		break;
-	case UNDERSCORE:
-		printf("%-15s", "---------------");
-		break;
-	case JOB:
-		_elapsed_time(job->sys_cpu_sec,
-			      job->sys_cpu_usec, str);
-		printf("%-15s", str);
-		break;
-	case JOBSTEP:
-		_elapsed_time(step->sys_cpu_sec,
-			      step->sys_cpu_usec, str);
-		printf("%-15s", str);
-		break;
-	default:
-		printf("%-15s", "n/a");
-		break;
-	} 
-}
-
-void print_uid(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	int32_t uid = -1;
-	struct passwd *pw = NULL;
-	
-	switch(type) {
-	case HEADLINE:
-		printf("%-5s", "Uid");
-		break;
-	case UNDERSCORE:
-		printf("%-5s", "-----");
-		break;
-	case JOB:
-		if(job->user) {
-			if ((pw=getpwnam(job->user)))
-				uid = pw->pw_uid;
-		} else 
-			uid = job->uid;
-		break;
-	case JOBCOMP:
-		printf("%-5u", jobcomp->uid);
-		break;
-	case JOBSTEP:
-		printf("%-5s", " ");
-		break;
-	} 
-
-	if(uid != -1) 
-		printf("%-5d", uid);
-}
-
-void print_user(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	int uid = -1;
-	char	*tmp="(unknown)";
-	struct	passwd *pw = NULL;		 
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-9s", "User");
-		break;
-	case UNDERSCORE:
-		printf("%-9s", "---------");
-		break;
-	case JOB:
-		if(job->user) 
-			printf("%-9s", job->user);
-		else
-			uid = job->uid;
-		break;
-	case JOBCOMP:
-		printf("%-9s", jobcomp->uid_name);
-		break;
-	case JOBSTEP:
-		printf("%-9s", " ");
-		break;
-	default:
-		printf("%-9s", "n/a");
-		break;
-	} 
-	if(uid != -1) {
-		if ((pw=getpwuid(uid)))
-			tmp=pw->pw_name;
-		printf("%-9s", tmp);
-	}
-}
-
-void print_usercpu(type_t type, void *object)
-{
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char str[FORMAT_STRING_SIZE];
-	
-	switch(type) {
-	case HEADLINE:
-		printf("%-15s", "UserCpu");
-		break;
-	case UNDERSCORE:
-		printf("%-15s", "---------------");
-		break;
-	case JOB:
-		_elapsed_time(job->user_cpu_sec,
-			      job->user_cpu_usec, str);
-		printf("%-15s", str);
-		break;
-	case JOBSTEP:
-		_elapsed_time(step->user_cpu_sec,
-			      step->user_cpu_usec, str);
-		printf("%-15s", str);
-		break;
-	default:
-		printf("%-15s", "n/a");
-		break;
-	} 
-
-}
-
-void print_vsize(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char outbuf[FORMAT_STRING_SIZE];
-	char buf1[FORMAT_STRING_SIZE];
-	char buf2[FORMAT_STRING_SIZE];
-	char buf3[FORMAT_STRING_SIZE];
-	sacct_t sacct;
-	char *nodes = NULL;
-	uint32_t pos;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-34s", "MaxVSIZE/Node:Task - Ave");
-		break;
-	case UNDERSCORE:
-		printf("%-34s", "----------------------------------");
-		break;
-	case JOB:
-		sacct = job->sacct;
-		nodes = job->nodes;
-		pos = sacct.min_cpu_id.nodeid;
-		convert_num_unit((float)sacct.max_vsize, 
-				 buf1, sizeof(buf1), UNIT_KILO);
-		if(job->track_steps)
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/- - -", buf1);
-		else {
-			convert_num_unit((float)sacct.ave_vsize,
-					 buf2, sizeof(buf2), UNIT_KILO);
-			find_hostname(pos, nodes, buf3);
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-				 buf1,
-				 buf3, 
-				 sacct.max_vsize_id.taskid, 
-				 buf2);
-		}
-		printf("%-34s", outbuf);
-		break;
-	case JOBSTEP:
-		sacct = step->sacct;
-		nodes = step->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		convert_num_unit((float)sacct.max_vsize, buf1, sizeof(buf1), 
-				 UNIT_KILO);
-		convert_num_unit((float)sacct.ave_vsize, buf2, sizeof(buf2),
-				 UNIT_KILO);
-		find_hostname(pos, nodes, buf3);
-		snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-			 buf1,
-			 buf3, 
-			 sacct.max_vsize_id.taskid, 
-			 buf2);
-		printf("%-34s", outbuf);
-		break;
-	default:
-		printf("%-34s", "n/a");
-		break;
-	} 
-}
-
-void print_cputime(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char outbuf[FORMAT_STRING_SIZE];
-	char buf1[FORMAT_STRING_SIZE];
-	char buf2[FORMAT_STRING_SIZE];
-	char buf3[FORMAT_STRING_SIZE];
-	sacct_t sacct;
-	char *nodes = NULL;
-	uint32_t pos;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-37s", "MinCPUtime/Node:Task - Ave");
-		break;
-	case UNDERSCORE:
-		printf("%-37s", "-------------------------------------");
-		break;
-	case JOB:
-		sacct = job->sacct;
-		nodes = job->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		_elapsed_time((int)sacct.min_cpu, 0, buf1);
-		if(job->track_steps)
-			snprintf(outbuf, FORMAT_STRING_SIZE, 
-				 "%s/- - -", buf1);
-		else {
-			_elapsed_time((int)sacct.ave_cpu, 0, buf2);
-			find_hostname(pos, nodes, buf3);
-			snprintf(outbuf, FORMAT_STRING_SIZE, 
-				 "%s/%s:%u - %s", 
-				 buf1,
-				 buf3, 
-				 sacct.min_cpu_id.taskid, 
-				 buf2);
-		}
-		printf("%-37s", outbuf);
-		break;
-	case JOBSTEP:
-		sacct = step->sacct;
-		nodes = step->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		_elapsed_time((int)sacct.min_cpu, 0, buf1);
-		_elapsed_time((int)sacct.ave_cpu, 0, buf2);
-		find_hostname(pos, nodes, buf3);
-		snprintf(outbuf, FORMAT_STRING_SIZE, 
-			 "%s/%s:%u - %s", 
-			 buf1,
-			 buf3, 
-			 sacct.min_cpu_id.taskid, 
-			 buf2);
-		printf("%-37s", outbuf);
-		break;
-	default:
-		printf("%-37s", "n/a");
-		break;
-	} 
-}
-
-void print_account(type_t type, void *object)
-{
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-16s", "Account");
-		break;
-	case UNDERSCORE:
-		printf("%-16s", "----------------");
-		break;
-	case JOB:
-		if(!job->account)
-			printf("%-16s", "unknown");
-		else if(strlen(job->account)<17)
-			printf("%-16s", job->account);
-		else
-			printf("%-13.13s...", job->account);
-		break;
-	case JOBSTEP:
-		if(!step->account)
-			printf("%-16s", "unknown");
-		else if(strlen(step->account)<17)
-			printf("%-16s", step->account);
-		else
-			printf("%-13.13s...", step->account);
-		break;
-	default:
-		printf("%-16s", "n/a");
-		break;
-		break;
-	}
-}
-
-void print_assoc(type_t type, void *object)
-{
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-16s", "AssociationID");
-		break;
-	case UNDERSCORE:
-		printf("%-16s", "----------------");
-		break;
-	case JOB:
-		if(!job->associd)
-			printf("%-16s", "unknown");
-		else 
-			printf("%-16u", job->associd);
-		break;
-	case JOBSTEP:
-		if(!step->associd)
-			printf("%-16s", "unknown");
-		else 
-			printf("%-16u", step->associd);
-		break;
-	default:
-		printf("%-16s", "n/a");
-		break;
-		break;
-	}
-}
-
-void print_cluster(type_t type, void *object)
-{
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-16s", "Cluster");
-		break;
-	case UNDERSCORE:
-		printf("%-16s", "----------------");
-		break;
-	case JOB:
-		if(!job->cluster)
-			printf("%-16s", "unknown");
-		else if(strlen(job->cluster)<17)
-			printf("%-16s", job->cluster);
-		else
-			printf("%-13.13s...", job->cluster);
-		break;
-	case JOBSTEP:
-		if(!step->cluster)
-			printf("%-16s", "unknown");
-		else if(strlen(step->cluster)<17)
-			printf("%-16s", step->cluster);
-		else
-			printf("%-13.13s...", step->cluster);
-		break;
-	default:
-		printf("%-16s", "n/a");
-		break;
-		break;
-	}
-}
-
-void print_connection(type_t type, void *object)
-{
-	jobcomp_job_rec_t *job = (jobcomp_job_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-10s", "Connection");
-		break;
-	case UNDERSCORE:
-		printf("%-10s", "----------");
-		break;
-	case JOBCOMP:
-		printf("%-10s", job->connection);
-		break;
-	default:
-		printf("%-10s", "n/a");
-		break;
-	}
-}
-void print_geo(type_t type, void *object)
-{
-	jobcomp_job_rec_t *job = (jobcomp_job_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-8s", "Geometry");
-		break;
-	case UNDERSCORE:
-		printf("%-8s", "--------");
-		break;
-	case JOBCOMP:
-		printf("%-8s", job->geo);
-		break;
-	default:
-		printf("%-8s", "n/a");
-		break;
-	}
-}
-void print_max_procs(type_t type, void *object)
-{
-	jobcomp_job_rec_t *job = (jobcomp_job_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-9s", "Max Procs");
-		break;
-	case UNDERSCORE:
-		printf("%-9s", "---------");
-		break;
-	case JOBCOMP:
-		printf("%-9d", job->max_procs);
-		break;
-	default:
-		printf("%-9s", "n/a");
-		break;
-	}
-}
-void print_reboot(type_t type, void *object)
-{
-	jobcomp_job_rec_t *job = (jobcomp_job_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-6s", "Reboot");
-		break;
-	case UNDERSCORE:
-		printf("%-6s", "------");
-		break;
-	case JOBCOMP:
-		printf("%-6s", job->reboot);
-		break;
-	default:
-		printf("%-6s", "n/a");
-		break;
-	}
-}
-void print_rotate(type_t type, void *object)
-{
-	jobcomp_job_rec_t *job = (jobcomp_job_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-6s", "Rotate");
-		break;
-	case UNDERSCORE:
-		printf("%-6s", "------");
-		break;
-	case JOBCOMP:
-		printf("%-6s", job->rotate);
-		break;
-	default:
-		printf("%-6s", "n/a");
-		break;
-	}
-}
-
-void print_bg_start_point(type_t type, void *object)
-{
-	jobcomp_job_rec_t *job = (jobcomp_job_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-14s", "BG Start Point");
-		break;
-	case UNDERSCORE:
-		printf("%-14s", "--------------");
-		break;
-	case JOBCOMP:
-		printf("%-14s", job->bg_start_point);
-		break;
-	default:
-		printf("%-14s", "n/a");
-		break;
-	}
-}
-
-void print_wckey(type_t type, void *object)
-{
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-16s", "WCKey");
-		break;
-	case UNDERSCORE:
-		printf("%-16s", "----------------");
-		break;
-	case JOB:
-		if(!job->wckey)
-			printf("%-16s", "");
-		else if(strlen(job->wckey)<17)
-			printf("%-16s", job->wckey);
-		else
-			printf("%-13.13s...", job->wckey);
-		break;
-	case JOBSTEP:
-		printf("%-16s", "");
-		break;
-	default:
-		printf("%-16s", "n/a");
-		break;
-		break;
-	}
-}
-
diff --git a/src/sacct/process.c b/src/sacct/process.c
index 52808e35e..701a62d61 100644
--- a/src/sacct/process.c
+++ b/src/sacct/process.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -40,25 +41,22 @@
 #include "sacct.h"
 
 
-void find_hostname(uint32_t pos, char *hosts, char *host)
+char *find_hostname(uint32_t pos, char *hosts)
 {
 	hostlist_t hostlist = NULL;
-	char *temp = NULL;
+	char *temp = NULL, *host = NULL;
 
-	if(pos == (uint32_t)NO_VAL) {
-		snprintf(host, 50, "'N/A'");
-		return;
-	}
+	if(!hosts || (pos == (uint32_t)NO_VAL))
+		return NULL;
+	
 	hostlist = hostlist_create(hosts);
 	temp = hostlist_nth(hostlist, pos);
 	if(temp) {
-		snprintf(host, 50, "%s", temp);
+		host = xstrdup(temp);
 		free(temp);
-	} else {
-		snprintf(host, 50, "'N/A'");
-	}
+	} 
 	hostlist_destroy(hostlist);
-	return;
+	return host;
 }
 
 void aggregate_sacct(sacct_t *dest, sacct_t *from)
diff --git a/src/sacct/sacct.c b/src/sacct/sacct.c
index 5f8a56062..6445cbd7c 100644
--- a/src/sacct/sacct.c
+++ b/src/sacct/sacct.c
@@ -2,10 +2,12 @@
  *  sacct.c - job accounting reports for SLURM's jobacct/log plugin
  *****************************************************************************
  *
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -33,182 +35,81 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
 \*****************************************************************************/
 
-/*
- * HISTORY
- * $Log$
- * Revision 1.8  2006/06/09   ciclouston
- * Added new account entry to begining of fields[].
- *
- * Revision 1.7  2005/06/29 20:41:23  da
- * New Tag HP's patch applied for mutex issue in jobacct.
- *
- * Revision 1.6  2005/06/24 01:19:52  jette
- * Additional documenation for job accounting. Some bug fixes too. All from
- * Andy Riebs/HP.
- *
- * Revision 1.5  2005/06/11 00:49:43  jette
- * Get all the latest accounting software patches.
- *
- * Revision 1.1  2005/06/01 17:26:11  jette
- * Extensive mods checked it for HP work, see NEWS for details.
- *
- * Revision 1.4  2005/05/31 20:28:20  riebs
- * Include "errors" in the default sacct display.
- *
- * Revision 1.3  2005/05/27 17:37:43  riebs
- * Don't discard JOB_START and JOB_END records when selecting on job
- * steps. ("sacct -J 246.1" would report "Error: No JOB_START record for
- * job 246"). This was not a problem when --dump was specified.
- *
- * Revision 1.2  2005/05/19 20:42:11  riebs
- * 1. Fix problem of double-flush of .expired records when scontrol is
- *    unavailable
- * 2. Handle "--expire=1d" as "expire everything through yesterday,"
- *    rather than "expire everything up to  exactly 24 hours ago."
- *
- * Revision 1.1  2005/05/13 20:11:14  riebs
- * Add the jobacct plugins and the sacct utility, and upgrade to
- * slurm-0.4.22-1.
- *
- * Revision 1.9  2005/05/03 12:38:35  riebs
- * Implement "sacct --expire" to facilitate logfile rotation.
- *
- * Revision 1.8  2005/04/15 23:01:39  riebs
- * Check in the changes for dynamic SLURM job accounting (that is, the
- * code to capture runtime data for psize and vsize).
- *
- * Revision 1.7  2005/04/11 21:05:44  riebs
- * Check in a work-around for a getopt_long() bug.
- *
- * Revision 1.6  2005/04/07 18:43:46  riebs
- * Fix a hand full of off-by-one problems, and add --version
- *
- * Revision 1.2  2005/04/07 18:41:42  riebs
- * updat the rev
- *
- * Revision 1.1  2005/04/07 18:33:08  riebs
- * Initial revision
- *
- * Revision 1.5  2005/04/06 19:37:40  riebs
- * Clean up sacct output.
- *
- * Revision 1.4  2005/04/05 15:28:01  riebs
- * - Implement --all
- * - Clean up output formatting for elapsed time
- * - Expand output field for jobname
- *
- * Revision 1.3  2005/04/02 19:46:44  riebs
- * Remove the setuid-related code, initialize job[].cstatus properly, fix
- * formatting of the JOB_STEP record, and fix printing of elapsed time.
- *
- * Revision 1.2  2005/04/01 17:10:43  riebs
- * Replace the Perl version of sacct with sacct.c
- *
- * Revision 1.1  2005/03/31 21:57:45  riebs
- * Initial revision
- *
- * Revision 1.1  2005/03/31 21:19:28  riebs
- * Add the .c version of sacct to CVS in anticipation of retiring the
- * .pl version.
- *
- * Revision 1.8  2005/03/31 19:25:19  riebs
- * Solid version of sacct with all functionality!
- *
- * Revision 1.7  2005/03/31 13:24:41  riebs
- * Good version of formatted_dump implemented.
- *
- * Revision 1.6  2005/03/31 00:33:45  riebs
- * Pretty good implementation of fdump now.
- *
- * Revision 1.5  2005/03/30 23:57:31  riebs
- * Version that handles all print fields.
- *
- * Revision 1.4  2005/03/30 20:51:13  riebs
- * A precautionary version before I radically change
- * the fields struct.
- *
- * Revision 1.3  2005/03/30 18:26:24  riebs
- * Pretty solid version of --dump
- *
- * Revision 1.2  2005/03/29 14:43:20  riebs
- * All data are aggregated; just need to print it now!
- *
- * Revision 1.1  2005/03/28 18:21:26  andy
- * Initial revision
- *
- * Revision 1.1  2005/03/28 16:18:38  riebs
- * Initial revision
- *
- *
- * $EndLog$
- */
-
 #include "sacct.h"
 
 void invalidSwitchCombo(char *good, char *bad);
-void _print_header(void);
 
 /*
  * Globals
  */
 sacct_parameters_t params;
-fields_t fields[] = {{"account", print_account},
-		     {"associd", print_assoc},
-		     {"cluster", print_cluster},
-		     {"cpu", print_cpu},
-		     {"cputime", print_cputime}, 
-		     {"elapsed", print_elapsed},
-		     {"eligible", print_eligible},
-		     {"end", print_end}, 
-		     {"exitcode", print_exitcode},
-		     {"finished", print_end},		/* Defunct name */ 
-		     {"gid", print_gid}, 
-		     {"group", print_group}, 
-		     {"job", print_job},
-		     {"jobid", print_jobid}, 
-		     {"jobname", print_name}, 
-		     {"ncpus", print_ncpus}, 
-		     {"nodes", print_nodes}, 
-		     {"nnodes", print_nnodes}, 
-		     {"nprocs", print_ntasks},
-		     {"ntasks", print_ntasks}, 
-		     {"pages", print_pages}, 
-		     {"partition", print_partition}, 
-		     {"rss", print_rss},
-		     {"start", print_start}, 
-		     {"state", print_state}, 
-		     {"status", print_state}, 
-		     {"submit", print_submit}, 
-		     {"timelimit", print_timelimit}, 
-		     {"submitted", print_submit},	/* Defunct name */
-		     {"systemcpu", print_systemcpu}, 
-		     {"uid", print_uid}, 
-		     {"user", print_user}, 
-		     {"usercpu", print_usercpu}, 
-		     {"vsize", print_vsize}, 
-		     {"blockid", print_blockid}, 
-		     {"connection", print_connection}, 
-		     {"geo", print_geo}, 
-		     {"max_procs", print_max_procs}, 
-		     {"reboot", print_reboot}, 
-		     {"rotate", print_rotate}, 
-		     {"bg_start_point", print_bg_start_point}, 		     
-		     {"wckey", print_wckey}, 		     
-		     {NULL, NULL}};
+print_field_t fields[] = {
+	{10, "AllocCPUS", print_fields_int, PRINT_ALLOC_CPUS},
+	{10, "Account", print_fields_str, PRINT_ACCOUNT},
+	{7, "AssocID", print_fields_int, PRINT_ASSOCID},
+	{10, "AveCPU", print_fields_str, PRINT_AVECPU}, 
+	{10, "AvePages", print_fields_str, PRINT_AVEPAGES}, 
+	{10, "AveRSS", print_fields_str, PRINT_AVERSS}, 
+	{10, "AveVMSize", print_fields_str, PRINT_AVEVSIZE}, 
+	{16, "BlockID", print_fields_str, PRINT_BLOCKID}, 
+	{10, "Cluster", print_fields_str, PRINT_CLUSTER},
+	{10, "CPUTime", print_fields_time_from_secs, PRINT_CPU_TIME},
+	{10, "CPUTimeRAW", print_fields_int, PRINT_CPU_TIME_RAW},
+	{10, "Elapsed", print_fields_time_from_secs, PRINT_ELAPSED},
+	{19, "Eligible", print_fields_date, PRINT_ELIGIBLE},
+	{19, "End", print_fields_date, PRINT_END},
+	{8, "ExitCode", print_fields_str, PRINT_EXITCODE},
+	{6, "GID", print_fields_int, PRINT_GID}, 
+	{9, "Group", print_fields_str, PRINT_GROUP}, 
+	{10, "JobID", print_fields_str, PRINT_JOBID}, 
+	{10, "JobName", print_fields_str, PRINT_JOBNAME},
+	{9,  "Layout", print_fields_str, PRINT_LAYOUT},
+	{8, "MaxPages", print_fields_str, PRINT_MAXPAGES}, 
+	{12, "MaxPagesNode", print_fields_str, PRINT_MAXPAGESNODE}, 
+	{14, "MaxPagesTask", print_fields_int, PRINT_MAXPAGESTASK}, 
+	{10, "MaxRSS", print_fields_str, PRINT_MAXRSS},
+	{10, "MaxRSSNode", print_fields_str, PRINT_MAXRSSNODE},
+	{10, "MaxRSSTask", print_fields_int, PRINT_MAXRSSTASK},
+	{10, "MaxVMSize", print_fields_str, PRINT_MAXVSIZE}, 
+	{14, "MaxVMSizeNode", print_fields_str, PRINT_MAXVSIZENODE}, 
+	{14, "MaxVMSizeTask", print_fields_int, PRINT_MAXVSIZETASK}, 
+	{10, "MinCPU", print_fields_str, PRINT_MINCPU}, 
+	{10, "MinCPUNode", print_fields_str, PRINT_MINCPUNODE}, 
+	{10, "MinCPUTask", print_fields_int, PRINT_MINCPUTASK}, 
+	{10, "NCPUS", print_fields_int, PRINT_ALLOC_CPUS},
+	{15, "NodeList", print_fields_str, PRINT_NODELIST}, 
+	{8, "NNodes", print_fields_str, PRINT_NNODES}, 
+	{8, "NTasks", print_fields_int, PRINT_NTASKS},
+	{10, "Priority", print_fields_int, PRINT_PRIO}, 
+	{10, "Partition", print_fields_str, PRINT_PARTITION}, 
+	{10, "QOS", print_fields_str, PRINT_QOS},
+	{6, "QOSRAW", print_fields_int, PRINT_QOSRAW},
+	{8, "ReqCPUS", print_fields_int, PRINT_REQ_CPUS},
+	{10, "Reserved", print_fields_time_from_secs, PRINT_RESV},
+	{10, "ResvCPU", print_fields_time_from_secs, PRINT_RESV_CPU},
+	{10, "ResvCPURAW", print_fields_int, PRINT_RESV_CPU},
+	{19, "Start", print_fields_date, PRINT_START}, 
+	{10, "State", print_fields_str, PRINT_STATE}, 
+	{19, "Submit", print_fields_date, PRINT_SUBMIT}, 
+	{10, "Suspended", print_fields_time_from_secs, PRINT_SUSPENDED}, 
+	{10, "SystemCPU", print_fields_str, PRINT_SYSTEMCPU}, 
+	{10, "Timelimit", print_fields_time_from_secs, PRINT_TIMELIMIT},
+	{10, "TotalCPU", print_fields_str, PRINT_TOTALCPU}, 
+	{6, "UID", print_fields_int, PRINT_UID}, 
+	{9, "User", print_fields_str, PRINT_USER}, 
+	{10, "UserCPU", print_fields_str, PRINT_USERCPU}, 
+	{10, "WCKey", print_fields_str, PRINT_WCKEY}, 		     
+	{10, "WCKeyID", print_fields_int, PRINT_WCKEYID}, 		     
+	{0, NULL, NULL, 0}};
 
 List jobs = NULL;
 
-int printfields[MAX_PRINTFIELDS],	/* Indexed into fields[] */
-	nprintfields = 0;
-
 int main(int argc, char **argv)
 {
 	enum {
 		SACCT_DUMP,
-		SACCT_EXPIRE,
 		SACCT_FDUMP,
 		SACCT_LIST,
-		SACCT_STAT,
 		SACCT_HELP,
 		SACCT_USAGE
 	} op;
@@ -225,54 +126,8 @@ int main(int argc, char **argv)
 		op = SACCT_HELP;
 	else if (params.opt_dump) {
 		op = SACCT_DUMP;
-		if (params.opt_long || params.opt_total 
-		    || params.opt_field_list || params.opt_expire) {
-			if (params.opt_verbose)
-				fprintf(stderr,
-					"Switch conflict,\n"
-					"\topt_long=%d\n"
-					"\topt_total=%d\n"
-					"\topt_field_list=%s\n",
-					params.opt_long, 
-					params.opt_total, 
-					params.opt_field_list);
-			invalidSwitchCombo("--dump",
-					   "--brief, --long, "
-					   "--fields, --total");
-			rc = 1;
-			goto finished;
-		}
 	} else if (params.opt_fdump) {
 		op = SACCT_FDUMP;
-	} else if (params.opt_stat) {
-		op = SACCT_STAT;
-	} else if (params.opt_expire) {
-		op = SACCT_EXPIRE;
-		if (params.opt_long || params.opt_total 
-		    || params.opt_field_list || 
-		    //(params.opt_gid != 0) || (params.opt_uid != 0) ||
-		    params.arch_cond->job_cond->step_list
-		    || params.arch_cond->job_cond->state_list ) {
-			if (params.opt_verbose)
-				fprintf(stderr,
-					"Switch conflict,\n"
-					"\topt_long=%d\n"
-					"\topt_total=%d\n"
-					"\topt_field_list=%s\n"
-					"\topt_gid=%d\n"
-					"\topt_uid=%d\n",
-					params.opt_long, 
-					params.opt_total, 
-					params.opt_field_list,
-					params.opt_gid, 
-					params.opt_uid);
-			invalidSwitchCombo("--expire",
-					   "--brief, --long, --fields, "
-					   "--total, --gid, --uid, --jobs, "
-					   "--state");
-			rc = 1;
-			goto finished;
-		}
 	} else
 		op = SACCT_LIST;
 
@@ -286,16 +141,12 @@ int main(int argc, char **argv)
 		else 
 			do_dump();
 		break;
-	case SACCT_EXPIRE:
-		do_expire();
-		break;
 	case SACCT_FDUMP:
 		if(get_data() == SLURM_ERROR)
 			exit(errno);
 		break;
 	case SACCT_LIST:
-		if (!params.opt_noheader)/* give them something to look */
-			_print_header();/* at while we think...        */
+		print_fields_header(print_fields_list);
 		if(get_data() == SLURM_ERROR)
 			exit(errno);
 		if(params.opt_completion) 
@@ -303,16 +154,6 @@ int main(int argc, char **argv)
 		else 
 			do_list();
 		break;
-	case SACCT_STAT:
-		fprintf(stderr,
-			"This functionality has been replaced with 'sstat' "
-			"in the future please make note this will "
-			"not be supported.\n");
-		
-		if (!params.opt_noheader)/* give them something to look */
-			_print_header();/* at while we think...        */
-		do_stat();
-		break;
 	case SACCT_HELP:
 		do_help();
 		break;
@@ -321,7 +162,7 @@ int main(int argc, char **argv)
 		sacct_fini();
 		exit(2);
 	}
-finished:
+
 	sacct_fini();
 	return (rc);
 }
@@ -332,22 +173,3 @@ void invalidSwitchCombo(char *good, char *bad)
 	fprintf(stderr, "\"%s\" may not be used with %s\n", good, bad);
 	return;
 }
-
-void _print_header(void)
-{
-	int	i,j;
-	for (i=0; i<nprintfields; i++) {
-		if (i)
-			printf(" ");
-		j=printfields[i];
-		(fields[j].print_routine)(HEADLINE, 0);
-	}
-	printf("\n");
-	for (i=0; i<nprintfields; i++) {
-		if (i)
-			printf(" ");
-		j=printfields[i];
-		(fields[j].print_routine)(UNDERSCORE, 0);
-	}
-	printf("\n");
-}
diff --git a/src/sacct/sacct.h b/src/sacct/sacct.h
index 27db34813..f9a4014e5 100644
--- a/src/sacct/sacct.h
+++ b/src/sacct/sacct.h
@@ -6,10 +6,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -60,26 +61,23 @@
 #include "src/common/slurm_jobacct_gather.h"
 #include "src/common/slurm_accounting_storage.h"
 #include "src/common/slurm_jobcomp.h"
+#include "src/common/print_fields.h"
 
 #define ERROR 2
 
 #define BRIEF_FIELDS "jobid,state,exitcode"
 #define BRIEF_COMP_FIELDS "jobid,uid,state"
-#define DEFAULT_FIELDS "jobid,jobname,partition,ncpus,state,exitcode"
+#define DEFAULT_FIELDS "jobid,jobname,partition,account,alloccpus,state,exitcode"
 #define DEFAULT_COMP_FIELDS "jobid,uid,jobname,partition,nnodes,nodes,state,end"
-#define STAT_FIELDS "jobid,vsize,rss,pages,cputime,ntasks,state"
-#define LONG_FIELDS "jobid,jobname,partition,vsize,rss,pages,cputime,ntasks,ncpus,elapsed,state,exitcode"
+#define LONG_FIELDS "jobid,jobname,partition,maxvmsize,maxvmsizenode,maxvmsizetask,avevmsize,maxrss,maxrssnode,maxrsstask,averss,maxpages,maxpagesnode,maxpagestask,avepages,mincpu,mincpunode,mincputask,avecpu,ntasks,alloccpus,elapsed,state,exitcode"
 
-#ifdef HAVE_BG
-#define LONG_COMP_FIELDS "jobid,uid,jobname,partition,blockid,nnodes,nodes,state,start,end,timelimit,connection,reboot,rotate,max_procs,geo,bg_start_point"
-#else
 #define LONG_COMP_FIELDS "jobid,uid,jobname,partition,nnodes,nodes,state,start,end,timelimit"
-#endif
 
 #define BUFFER_SIZE 4096
 #define STATE_COUNT 10
 
 #define MAX_PRINTFIELDS 100
+#define FORMAT_STRING_SIZE 34
 
 #define SECONDS_IN_MINUTE 60
 #define SECONDS_IN_HOUR (60*SECONDS_IN_MINUTE)
@@ -94,84 +92,95 @@ typedef enum {	HEADLINE,
 		JOBCOMP
 } type_t;
 
+typedef enum {
+		PRINT_ALLOC_CPUS,
+		PRINT_ACCOUNT,
+		PRINT_ASSOCID,
+		PRINT_AVECPU,
+		PRINT_AVEPAGES,
+		PRINT_AVERSS,
+		PRINT_AVEVSIZE,
+		PRINT_BLOCKID,
+		PRINT_CLUSTER,
+		PRINT_CPU_TIME,
+		PRINT_CPU_TIME_RAW,
+		PRINT_ELAPSED,
+		PRINT_ELIGIBLE,
+		PRINT_END,
+		PRINT_EXITCODE,
+		PRINT_GID,
+		PRINT_GROUP,
+		PRINT_JOBID,
+		PRINT_JOBNAME,
+		PRINT_LAYOUT,
+		PRINT_MAXPAGES,
+		PRINT_MAXPAGESNODE,
+		PRINT_MAXPAGESTASK,
+		PRINT_MAXRSS,
+		PRINT_MAXRSSNODE,
+		PRINT_MAXRSSTASK,
+		PRINT_MAXVSIZE,
+		PRINT_MAXVSIZENODE,
+		PRINT_MAXVSIZETASK,
+		PRINT_MINCPU,
+		PRINT_MINCPUNODE,
+		PRINT_MINCPUTASK,
+		PRINT_NODELIST,
+		PRINT_NNODES,
+		PRINT_NTASKS,
+		PRINT_PRIO,
+		PRINT_PARTITION,
+		PRINT_QOS,
+		PRINT_QOSRAW,
+		PRINT_REQ_CPUS,
+		PRINT_RESV,
+		PRINT_RESV_CPU,
+		PRINT_RESV_CPU_RAW,
+		PRINT_START,
+		PRINT_STATE,
+		PRINT_SUBMIT,
+		PRINT_SUSPENDED,
+		PRINT_SYSTEMCPU,
+		PRINT_TIMELIMIT,
+		PRINT_TOTALCPU,
+		PRINT_UID,
+		PRINT_USER,
+		PRINT_USERCPU,
+		PRINT_WCKEY,
+		PRINT_WCKEYID,
+} sacct_print_types_t;
+
 typedef struct {
-	acct_archive_cond_t *arch_cond;
+	acct_job_cond_t *job_cond;
 	int opt_completion;	/* --completion */
 	int opt_dump;		/* --dump */
 	int opt_dup;		/* --duplicates; +1 = explicitly set */
 	int opt_fdump;		/* --formattted_dump */
-	int opt_expire;		/* --expire */
 	char *opt_field_list;	/* --fields= */
 	int opt_gid;		/* running persons gid */
 	int opt_help;		/* --help */
-	int opt_long;		/* --long */
-	int opt_lowmem;		/* --low_memory */
+	char *opt_filein;
 	int opt_noheader;	/* can only be cleared */
-	int opt_raw;		/* --raw */
-	int opt_stat;		/* --stat */
-	int opt_total;		/* --total */
+	int opt_allocs;		/* --total */
 	int opt_uid;		/* running persons uid */
-	int opt_verbose;	/* --verbose */
 } sacct_parameters_t;
 
-typedef struct fields {
-	char *name;		/* Specified in --fields= */
-	void (*print_routine) ();	/* Who gets to print it? */
-} fields_t;
-
-extern fields_t fields[];
+extern print_field_t fields[];
 extern sacct_parameters_t params;
 
 extern List jobs;
 
-extern int printfields[MAX_PRINTFIELDS],	/* Indexed into fields[] */
-	nprintfields;
+extern List print_fields_list;
+extern ListIterator print_fields_itr;
+extern int field_count;
+extern List qos_list;
 
 /* process.c */
-void find_hostname(uint32_t pos, char *hosts, char *host);
+char *find_hostname(uint32_t pos, char *hosts);
 void aggregate_sacct(sacct_t *dest, sacct_t *from);
 
 /* print.c */
 void print_fields(type_t type, void *object);
-void print_cpu(type_t type, void *object);
-void print_elapsed(type_t type, void *object);
-void print_exitcode(type_t type, void *object);
-void print_gid(type_t type, void *object);
-void print_group(type_t type, void *object);
-void print_job(type_t type, void *object);
-void print_name(type_t type, void *object);
-void print_jobid(type_t type, void *object);
-void print_ncpus(type_t type, void *object);
-void print_nodes(type_t type, void *object);
-void print_nnodes(type_t type, void *object);
-void print_ntasks(type_t type, void *object);
-void print_partition(type_t type, void *object);
-void print_blockid(type_t type, void *object);
-void print_pages(type_t type, void *object);
-void print_rss(type_t type, void *object);
-void print_state(type_t type, void *object);
-void print_submit(type_t type, void *object);
-void print_eligible(type_t type, void *object);
-void print_start(type_t type, void *object);
-void print_end(type_t type, void *object);
-void print_systemcpu(type_t type, void *object);
-void print_timelimit(type_t type, void *object);
-void print_uid(type_t type, void *object);
-void print_user(type_t type, void *object);
-void print_usercpu(type_t type, void *object);
-void print_vsize(type_t type, void *object);
-void print_cputime(type_t type, void *object);
-void print_account(type_t type, void *object);
-void print_assoc(type_t type, void *object);
-void print_cluster(type_t type, void *object);
-
-void print_connection(type_t type, void *object);
-void print_geo(type_t type, void *object);
-void print_max_procs(type_t type, void *object);
-void print_reboot(type_t type, void *object);
-void print_rotate(type_t type, void *object);
-void print_bg_start_point(type_t type, void *object);
-void print_wckey(type_t type, void *object);
 
 /* options.c */
 int decode_state_char(char *state);
@@ -180,15 +189,10 @@ int get_data(void);
 void parse_command_line(int argc, char **argv);
 void do_dump(void);
 void do_dump_completion(void);
-void do_expire();
 void do_help(void);
 void do_list(void);
 void do_list_completion(void);
-void do_stat(void);
 void sacct_init();
 void sacct_fini();
 
-/* sacct_stat.c */
-extern int sacct_stat(uint32_t jobid, uint32_t stepid);
-
 #endif /* !_SACCT_H */
diff --git a/src/sacct/sacct_stat.c b/src/sacct/sacct_stat.c
deleted file mode 100644
index 0b8b67622..000000000
--- a/src/sacct/sacct_stat.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*****************************************************************************\
- *  sacct_stat.c - stat slurmd for percise job information
- *
- *  $Id: options.c 7541 2006-03-18 01:44:58Z da $
- *****************************************************************************
- *  Copyright (C) 2006 The Regents of the University of California.
- *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
- *  Written by Danny Auble <da@llnl.gov>.
- *  LLNL-CODE-402394.
- *  
- *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
- *  
- *  SLURM 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.
- *
- *  In addition, as a special exception, the copyright holders give permission 
- *  to link the code of portions of this program with the OpenSSL library under
- *  certain conditions as described in each individual source file, and 
- *  distribute linked combinations including the two. You must obey the GNU 
- *  General Public License in all respects for all of the code used other than 
- *  OpenSSL. If you modify file(s) with this exception, you may extend this 
- *  exception to your version of the file(s), but you are not obligated to do 
- *  so. If you do not wish to do so, delete this exception statement from your
- *  version.  If you delete this exception statement from all source files in 
- *  the program, then also delete it here.
- *  
- *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
- *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
-\*****************************************************************************/
-
-#include "sacct.h"
-#include <pthread.h>
-#include "src/common/forward.h"
-#include "src/common/slurm_auth.h"
-
-jobacct_step_rec_t step;
-	
-int thr_finished = 0;
-	
-void *_stat_thread(void *args);
-int _sacct_query(slurm_step_layout_t *step_layout, uint32_t job_id, 
-		 uint32_t step_id);
-int _process_results();
-
-
-int _sacct_query(slurm_step_layout_t *step_layout, uint32_t job_id,
-		 uint32_t step_id)
-{
-	slurm_msg_t msg;
-	stat_jobacct_msg_t r;
-	stat_jobacct_msg_t *jobacct_msg = NULL;
-	ListIterator itr;
-	List ret_list = NULL;
-	sacct_t temp_sacct;
-	ret_data_info_t *ret_data_info = NULL;
-	int rc = SLURM_SUCCESS;
-	int ntasks = 0;
-	int tot_tasks = 0;
-	debug("getting the stat of job %d on %d nodes", 
-	      job_id, step_layout->node_cnt);
-
-	memset(&temp_sacct, 0, sizeof(sacct_t));
-	temp_sacct.min_cpu = (float)NO_VAL;
-	memset(&step.sacct, 0, sizeof(sacct_t));
-	step.sacct.min_cpu = (float)NO_VAL;
-
-	step.stepid = step_id;
-	step.nodes = step_layout->node_list;
-	step.stepname = NULL;
-	step.state = JOB_RUNNING;
-	slurm_msg_t_init(&msg);
-	/* Common message contents */
-	r.job_id      = job_id;
-	r.step_id     = step_id;
-	r.jobacct     = jobacct_gather_g_create(NULL);
-	msg.msg_type        = MESSAGE_STAT_JOBACCT;
-	msg.data            = &r;
-	
-	
-	ret_list = slurm_send_recv_msgs(step_layout->node_list, &msg, 0, false);
-	if (!ret_list) {
-		error("got an error no list returned");
-		goto cleanup;
-	}
-	
-	itr = list_iterator_create(ret_list);		
-	while((ret_data_info = list_next(itr))) {
-		switch (ret_data_info->type) {
-		case MESSAGE_STAT_JOBACCT:
-			jobacct_msg = (stat_jobacct_msg_t *)
-				ret_data_info->data;
-			if(jobacct_msg) {
-				debug2("got it back for job %d", 
-				       jobacct_msg->job_id);
-				jobacct_gather_g_2_sacct(
-					&temp_sacct, 
-					jobacct_msg->jobacct);
-				ntasks += jobacct_msg->num_tasks;
-				aggregate_sacct(&step.sacct, &temp_sacct);
-			}
-			break;
-		case RESPONSE_SLURM_RC:
-			rc = slurm_get_return_code(ret_data_info->type, 
-						   ret_data_info->data);
-			error("there was an error with the request rc = %s", 
-			      slurm_strerror(rc));
-			break;
-		default:
-			rc = slurm_get_return_code(ret_data_info->type, 
-						   ret_data_info->data);
-			error("unknown return given %d rc = %s", 
-			      ret_data_info->type, slurm_strerror(rc));
-			break;
-		}
-	}
-	list_iterator_destroy(itr);
-	list_destroy(ret_list);
-
-	tot_tasks += ntasks;		
-cleanup:
-	
-	if(tot_tasks) {
-		step.sacct.ave_rss *= 1024;
-		step.sacct.max_rss *= 1024;
-		step.sacct.ave_vsize *= 1024;
-		step.sacct.max_vsize *= 1024;
-
-		step.sacct.ave_cpu /= tot_tasks;
-		step.sacct.ave_cpu /= 100;
-		step.sacct.min_cpu /= 100;
-		step.sacct.ave_rss /= tot_tasks;
-		step.sacct.ave_vsize /= tot_tasks;
-		step.sacct.ave_pages /= tot_tasks;
-	}
-	jobacct_gather_g_destroy(r.jobacct);	
-	return SLURM_SUCCESS;
-}
-
-int _process_results()
-{
-	print_fields(JOBSTEP, &step);
-	return SLURM_SUCCESS;
-}
-
-int sacct_stat(uint32_t jobid, uint32_t stepid)
-{
-	slurm_msg_t req_msg;
-	slurm_msg_t resp_msg;
-	job_step_id_msg_t req;
-	slurm_step_layout_t *step_layout = NULL;
-	int rc = SLURM_SUCCESS;
-
-	slurm_msg_t_init(&req_msg);
-	slurm_msg_t_init(&resp_msg);
-	debug("requesting info for job %u.%u", jobid, stepid);
-	req.job_id = jobid;
-	req.step_id = stepid;
-	req_msg.msg_type = REQUEST_STEP_LAYOUT;
-	req_msg.data     = &req;
-	
-	if (slurm_send_recv_controller_msg(&req_msg, &resp_msg) < 0) {
-		return SLURM_ERROR;
-	}
-		
-	switch (resp_msg.msg_type) {
-	case RESPONSE_STEP_LAYOUT:
-		step_layout = (slurm_step_layout_t *)resp_msg.data;
-		break;
-	case RESPONSE_SLURM_RC:
-		rc = ((return_code_msg_t *) resp_msg.data)->return_code;
-		slurm_free_return_code_msg(resp_msg.data);	
-		printf("problem getting job: %s\n", slurm_strerror(rc));
-		slurm_seterrno_ret(rc);
-		break;
-	default:
-		slurm_seterrno_ret(SLURM_UNEXPECTED_MSG_ERROR);
-		break;
-	}
-		
-	if(!step_layout) {
-		error("didn't get the job record rc = %s", slurm_strerror(rc));
-		return rc;
-	}
-
-	_sacct_query(step_layout, jobid, stepid);
-	
-	_process_results();
-	
-	slurm_step_layout_destroy(step_layout);	
-	
-	return rc;
-}
diff --git a/src/sacctmgr/Makefile.am b/src/sacctmgr/Makefile.am
index 2ae61cf8e..ef447494a 100644
--- a/src/sacctmgr/Makefile.am
+++ b/src/sacctmgr/Makefile.am
@@ -15,6 +15,7 @@ sacctmgr_SOURCES =	\
 	account_functions.c	\
 	archive_functions.c	\
 	association_functions.c	\
+	config_functions.c	\
 	cluster_functions.c	\
 	common.c                \
 	file_functions.c	\
diff --git a/src/sacctmgr/Makefile.in b/src/sacctmgr/Makefile.in
index 2a6e6c101..a83a12a89 100644
--- a/src/sacctmgr/Makefile.in
+++ b/src/sacctmgr/Makefile.in
@@ -44,14 +44,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -73,8 +77,8 @@ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
 am_sacctmgr_OBJECTS = account_functions.$(OBJEXT) \
 	archive_functions.$(OBJEXT) association_functions.$(OBJEXT) \
-	cluster_functions.$(OBJEXT) common.$(OBJEXT) \
-	file_functions.$(OBJEXT) sacctmgr.$(OBJEXT) \
+	config_functions.$(OBJEXT) cluster_functions.$(OBJEXT) \
+	common.$(OBJEXT) file_functions.$(OBJEXT) sacctmgr.$(OBJEXT) \
 	qos_functions.$(OBJEXT) txn_functions.$(OBJEXT) \
 	user_functions.$(OBJEXT) wckey_functions.$(OBJEXT)
 sacctmgr_OBJECTS = $(am_sacctmgr_OBJECTS)
@@ -111,6 +115,10 @@ 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@
@@ -281,6 +289,7 @@ sacctmgr_SOURCES = \
 	account_functions.c	\
 	archive_functions.c	\
 	association_functions.c	\
+	config_functions.c	\
 	cluster_functions.c	\
 	common.c                \
 	file_functions.c	\
@@ -367,6 +376,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/association_functions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cluster_functions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config_functions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_functions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qos_functions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sacctmgr.Po@am__quote@
diff --git a/src/sacctmgr/account_functions.c b/src/sacctmgr/account_functions.c
index 40fc5f711..427bf1e36 100644
--- a/src/sacctmgr/account_functions.c
+++ b/src/sacctmgr/account_functions.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002-2008 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -364,7 +365,7 @@ static int _set_rec(int *start, int argc, char *argv[],
 					 MAX(command_len, 1))) {
 			if(!assoc)
 				continue;
-			if (get_uint(argv[i]+end, &assoc->fairshare, 
+			if (get_uint(argv[i]+end, &assoc->shares_raw, 
 				     "FairShare") == SLURM_SUCCESS)
 				a_set = 1;
 		} else if (!strncasecmp (argv[i], "GrpCPUMins", 
@@ -575,10 +576,14 @@ extern int sacctmgr_add_account(int argc, char *argv[])
 	
 	init_acct_association_rec(start_assoc);
 
-	for (i=0; i<argc; i++) 
-		limit_set = _set_rec(&i, argc, argv, name_list, cluster_list,
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		limit_set += _set_rec(&i, argc, argv, name_list, cluster_list,
 				     start_acct, start_assoc);
-
+	}
 	if(exit_code) 
 		return SLURM_ERROR;
 
@@ -780,7 +785,7 @@ extern int sacctmgr_add_account(int argc, char *argv[])
 			assoc->acct = xstrdup(name);
 			assoc->cluster = xstrdup(cluster);
 			assoc->parent_acct = xstrdup(start_assoc->parent_acct);
-			assoc->fairshare = start_assoc->fairshare;
+			assoc->shares_raw = start_assoc->shares_raw;
 
 			assoc->grp_cpu_mins = start_assoc->grp_cpu_mins;
 			assoc->grp_cpus = start_assoc->grp_cpus;
@@ -949,7 +954,13 @@ extern int sacctmgr_list_account(int argc, char *argv[])
 
 	acct_cond->with_assocs = with_assoc_flag;
 
-	set = _set_cond(&i, argc, argv, acct_cond, format_list);
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		set += _set_cond(&i, argc, argv, acct_cond, format_list);
+	}
 
 	if(exit_code) {
 		destroy_acct_account_cond(acct_cond);
@@ -995,6 +1006,7 @@ extern int sacctmgr_list_account(int argc, char *argv[])
 
 		field = xmalloc(sizeof(print_field_t));
 		if(!strncasecmp("Account", object, MAX(command_len, 1))
+		   || !strncasecmp("Acct", object, MAX(command_len, 4))
 		   || !strncasecmp("Name", object, MAX(command_len, 2))) {
 			field->type = PRINT_ACCOUNT;
 			field->name = xstrdup("Account");
@@ -1149,7 +1161,7 @@ extern int sacctmgr_list_account(int argc, char *argv[])
 			continue;
 		}
 		
-		if(newlen > 0) 
+		if(newlen) 
 			field->len = newlen;
 		
 		list_append(print_fields_list, field);		
@@ -1216,7 +1228,7 @@ extern int sacctmgr_list_account(int argc, char *argv[])
 					case PRINT_FAIRSHARE:
 						field->print_routine(
 							field, 
-							assoc->fairshare,
+							assoc->shares_raw,
 							(curr_inx == 
 							 field_count));
 						break;
@@ -1480,13 +1492,13 @@ extern int sacctmgr_modify_account(int argc, char *argv[])
 		int command_len = strlen(argv[i]);
 		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) {
 			i++;
-			cond_set = _set_cond(&i, argc, argv, acct_cond, NULL);
+			cond_set += _set_cond(&i, argc, argv, acct_cond, NULL);
 		} else if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) {
 			i++;
-			rec_set = _set_rec(&i, argc, argv, NULL, NULL, 
+			rec_set += _set_rec(&i, argc, argv, NULL, NULL, 
 					   acct, assoc);
 		} else {
-			cond_set = _set_cond(&i, argc, argv, acct_cond, NULL);
+			cond_set += _set_cond(&i, argc, argv, acct_cond, NULL);
 		}
 	}
 
@@ -1610,7 +1622,15 @@ extern int sacctmgr_delete_account(int argc, char *argv[])
 	ListIterator itr = NULL;
 	int set = 0;
 	
-	if(!(set = _set_cond(&i, argc, argv, acct_cond, NULL))) {
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		set += _set_cond(&i, argc, argv, acct_cond, NULL);
+	}
+
+	if(!set) {
 		exit_code=1;
 		fprintf(stderr, 
 			" No conditions given to remove, not executing.\n");
diff --git a/src/sacctmgr/archive_functions.c b/src/sacctmgr/archive_functions.c
index b4aad5799..134cd96d1 100644
--- a/src/sacctmgr/archive_functions.c
+++ b/src/sacctmgr/archive_functions.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -38,6 +39,8 @@
 \*****************************************************************************/
 
 #include "src/sacctmgr/sacctmgr.h"
+#include <sys/param.h>		/* MAXPATHLEN */
+#include "src/common/proc_args.h"
 
 /* returns number of objects added to list */
 extern int _addto_uid_char_list(List char_list, char *names)
@@ -175,6 +178,10 @@ static int _set_cond(int *start, int argc, char *argv[],
 		if(!end && !strncasecmp(argv[i], "where",
 					MAX(command_len, 5))) {
 			continue;
+		} else if(!end && !strncasecmp(argv[i], "events",
+					  MAX(command_len, 1))) {
+			arch_cond->archive_events = 1;
+			set = 1;
 		} else if(!end && !strncasecmp(argv[i], "jobs",
 					  MAX(command_len, 1))) {
 			arch_cond->archive_jobs = 1;
@@ -183,6 +190,10 @@ static int _set_cond(int *start, int argc, char *argv[],
 					  MAX(command_len, 1))) {
 			arch_cond->archive_steps = 1;
 			set = 1;
+		} else if(!end && !strncasecmp(argv[i], "suspend",
+					  MAX(command_len, 1))) {
+			arch_cond->archive_suspend = 1;
+			set = 1;
 		} else if(!end 
 			  || !strncasecmp (argv[i], "Clusters",
 					   MAX(command_len, 1))) {
@@ -261,18 +272,34 @@ static int _set_cond(int *start, int argc, char *argv[],
 			slurm_addto_char_list(job_cond->partition_list,
 					      argv[i]+end);
 			set = 1;
-		} else if (!strncasecmp (argv[i], "PurgeJobsBefore",
+		} else if (!strncasecmp (argv[i], "PurgeEventMonths",
 					 MAX(command_len, 6))) {
-			if (get_uint16(argv[i]+end, &arch_cond->job_purge,
-				       "PurgeJobsBefore")
+			if (get_uint16(argv[i]+end, &arch_cond->purge_event,
+				       "PurgeEventMonths")
 			    != SLURM_SUCCESS) {
 				exit_code = 1;
 			} else
 				set = 1;
-		} else if (!strncasecmp (argv[i], "PurgeStepsBefore",
+		} else if (!strncasecmp (argv[i], "PurgeJobMonths",
 					 MAX(command_len, 6))) {
-			if (get_uint16(argv[i]+end, &arch_cond->step_purge,
-				       "PurgeStepsBefore")
+			if (get_uint16(argv[i]+end, &arch_cond->purge_job,
+				       "PurgeJobMonths")
+			    != SLURM_SUCCESS) {
+				exit_code = 1;
+			} else
+				set = 1;
+		} else if (!strncasecmp (argv[i], "PurgeStepMonths",
+					 MAX(command_len, 7))) {
+			if (get_uint16(argv[i]+end, &arch_cond->purge_step,
+				       "PurgeStepMonths")
+			    != SLURM_SUCCESS) {
+				exit_code = 1;
+			} else
+				set = 1;
+		} else if (!strncasecmp (argv[i], "PurgeSuspendMonths",
+					 MAX(command_len, 7))) {
+			if (get_uint16(argv[i]+end, &arch_cond->purge_suspend,
+				       "PurgeSuspendMonths")
 			    != SLURM_SUCCESS) {
 				exit_code = 1;
 			} else
@@ -309,15 +336,26 @@ extern int sacctmgr_archive_dump(int argc, char *argv[])
 {
 	int rc = SLURM_SUCCESS;
 	acct_archive_cond_t *arch_cond = xmalloc(sizeof(acct_archive_cond_t));
-	int i=0, set=0;
+	int i=0;
 	struct stat st;
 
+	arch_cond->archive_events = (uint16_t)NO_VAL;
 	arch_cond->archive_jobs = (uint16_t)NO_VAL;
 	arch_cond->archive_steps = (uint16_t)NO_VAL;
-	arch_cond->job_purge = (uint16_t)NO_VAL;
-	arch_cond->step_purge = (uint16_t)NO_VAL;
+	arch_cond->archive_suspend = (uint16_t)NO_VAL;
+	arch_cond->purge_event = (uint16_t)NO_VAL;
+	arch_cond->purge_job = (uint16_t)NO_VAL;
+	arch_cond->purge_step = (uint16_t)NO_VAL;
+	arch_cond->purge_suspend = (uint16_t)NO_VAL;
+
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		_set_cond(&i, argc, argv, arch_cond);
+	}
 
-	set = _set_cond(&i, argc, argv, arch_cond);
 	if(exit_code) {
 		destroy_acct_archive_cond(arch_cond);
 		return SLURM_ERROR;
@@ -426,20 +464,34 @@ extern int sacctmgr_archive_load(int argc, char *argv[])
 			fprintf(stderr, " Unknown option: %s\n", argv[i]);
 		}		
 	}
-
+	
 	if(exit_code) {
 		destroy_acct_archive_rec(arch_rec);
 		return SLURM_ERROR;
 	} 
+	
+	if (arch_rec->archive_file) {
+		char *fullpath;
+		char cwd[MAXPATHLEN + 1];
+		int  mode = R_OK;
 
-	if (arch_rec->archive_file 
-	    && (stat(arch_rec->archive_file, &st) < 0)) {
-		exit_code = errno;
-		fprintf(stderr, " load: Failed to stat %s: %m\n "
-			"Note: For archive load, the file must be on "
-			"the calling host.\n",
-			arch_rec->archive_file);
-		return SLURM_ERROR;
+		if ((getcwd(cwd, MAXPATHLEN)) == NULL) 
+			fatal("getcwd failed: %m");		
+		
+		if ((fullpath = search_path(cwd, arch_rec->archive_file,
+					    true, mode))) {
+			xfree(arch_rec->archive_file);
+			arch_rec->archive_file = fullpath;
+		} 
+		
+		if(stat(arch_rec->archive_file, &st) < 0) {
+			exit_code = errno;
+			fprintf(stderr, " load: Failed to stat %s: %m\n "
+				"Note: For archive load, the file must be on "
+				"the calling host.\n",
+				arch_rec->archive_file);
+			return SLURM_ERROR;
+		}
 	}
 
 	rc = jobacct_storage_g_archive_load(db_conn, arch_rec);
diff --git a/src/sacctmgr/association_functions.c b/src/sacctmgr/association_functions.c
index 9f6c0ba08..12d8c937e 100644
--- a/src/sacctmgr/association_functions.c
+++ b/src/sacctmgr/association_functions.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002-2008 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -349,7 +350,13 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 		PRINT_USER
 	};
 
-	_set_cond(&i, argc, argv, assoc_cond, format_list);
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		_set_cond(&i, argc, argv, assoc_cond, format_list);
+	}
 
 	if(exit_code) {
 		destroy_acct_association_cond(assoc_cond);
@@ -357,7 +364,8 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 		return SLURM_ERROR;
 	} else if(!list_count(format_list)) 
 		slurm_addto_char_list(format_list,
-				      "C,A,U,Part,F,GrpJ,GrpN,GrpS,"
+				      "C,A,U,Part,F,"
+				      "GrpCPUMins,GrpJ,GrpN,GrpS,GrpWall,"
 				      "MaxJ,MaxN,MaxS,MaxW,QOS");
 
 	print_fields_list = list_create(destroy_print_field);
@@ -382,7 +390,7 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 			field->type = PRINT_ACCOUNT;
 			field->name = xstrdup("Account");
 			if(tree_display)
-				field->len = 20;
+				field->len = -20;
 			else
 				field->len = 10;
 			field->print_routine = print_fields_str;
@@ -546,7 +554,7 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 			continue;
 		}
 
-		if(newlen > 0) 
+		if(newlen) 
 			field->len = newlen;
 		
 		list_append(print_fields_list, field);		
@@ -608,8 +616,7 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 					}
 					print_acct = get_tree_acct_name(
 						local_acct,
-						parent_acct,
-						assoc->cluster, tree_list);
+						parent_acct, tree_list);
 					xfree(local_acct);
 				} else {
 					print_acct = assoc->acct;
@@ -628,7 +635,7 @@ extern int sacctmgr_list_association(int argc, char *argv[])
 			case PRINT_FAIRSHARE:
 				field->print_routine(
 					field,
-					assoc->fairshare,
+					assoc->shares_raw,
 					(curr_inx == field_count));
 				break;
 			case PRINT_GRPCM:
diff --git a/src/sacctmgr/cluster_functions.c b/src/sacctmgr/cluster_functions.c
index 23a9d5a54..18c8c1d3e 100644
--- a/src/sacctmgr/cluster_functions.c
+++ b/src/sacctmgr/cluster_functions.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -42,7 +43,8 @@
 
 static int _set_cond(int *start, int argc, char *argv[],
 		     List cluster_list,
-		     List format_list)
+		     List format_list,
+		     uint16_t *classification)
 {
 	int i;
 	int set = 0;
@@ -71,12 +73,20 @@ static int _set_cond(int *start, int argc, char *argv[],
 		} else if(!end || !strncasecmp (argv[i], "Names",
 						MAX(command_len, 1))
 			  || !strncasecmp (argv[i], "Clusters",
-					   MAX(command_len, 1))) {
+					   MAX(command_len, 3))) {
 			if(cluster_list) {
 				if(slurm_addto_char_list(cluster_list,
 							 argv[i]+end))
 					set = 1;
 			}
+		} else if (!strncasecmp (argv[i], "Classification", 
+					 MAX(command_len, 3))) {
+			if(classification) {
+				*classification = 
+					str_2_classification(argv[i]+end);
+				if(*classification)
+					set = 1;
+			}
 		} else if (!strncasecmp (argv[i], "Format",
 					 MAX(command_len, 1))) {
 			if(format_list)
@@ -95,7 +105,8 @@ static int _set_cond(int *start, int argc, char *argv[],
 
 static int _set_rec(int *start, int argc, char *argv[],
 		    List name_list,
-		    acct_association_rec_t *assoc)
+		    acct_association_rec_t *assoc,
+		    uint16_t *classification)
 {
 	int i, mins;
 	int set = 0;
@@ -126,22 +137,31 @@ static int _set_rec(int *start, int argc, char *argv[],
 			  || !strncasecmp (argv[i], "Names",
 					   MAX(command_len, 1)) 
 			  || !strncasecmp (argv[i], "Clusters", 
-					   MAX(command_len, 1))) {
+					   MAX(command_len, 3))) {
 			if(name_list)
-				slurm_addto_char_list(name_list, argv[i]+end);
+				slurm_addto_char_list(name_list,
+						      argv[i]+end);
+		} else if (!strncasecmp (argv[i], "Classification", 
+					 MAX(command_len, 3))) {
+			if(classification) {
+				*classification = 
+					str_2_classification(argv[i]+end);
+				if(*classification)
+					set = 1;
+			}
 		} else if (!strncasecmp (argv[i], "FairShare", 
 					 MAX(command_len, 1))
 			   || !strncasecmp (argv[i], "Shares",
 					 MAX(command_len, 1))) {
-			if (get_uint(argv[i]+end, &assoc->fairshare, 
+			if (get_uint(argv[i]+end, &assoc->shares_raw, 
 			    "FairShare") == SLURM_SUCCESS)
 				set = 1;
 		} else if (!strncasecmp (argv[i], "GrpCPUMins",
 					 MAX(command_len, 7))) {
-			if (get_uint64(argv[i]+end, 
-				       &assoc->grp_cpu_mins, 
-				       "GrpCPUMins") == SLURM_SUCCESS)
-				set = 1;
+			exit_code=1;
+			fprintf(stderr, "GrpCPUMins is not a valid option "
+				"for the root association of a cluster.\n");
+			break;			
 		} else if (!strncasecmp (argv[i], "GrpCpus",
 					 MAX(command_len, 7))) {
 			if (get_uint(argv[i]+end, &assoc->grp_cpus,
@@ -164,16 +184,9 @@ static int _set_rec(int *start, int argc, char *argv[],
 				set = 1;
 		} else if (!strncasecmp (argv[i], "GrpWall",
 					 MAX(command_len, 4))) {
-			mins = time_str2mins(argv[i]+end);
-			if (mins != NO_VAL) {
-				assoc->grp_wall	= (uint32_t) mins;
-				set = 1;
-			} else {
-				exit_code=1;
-				fprintf(stderr, 
-					" Bad GrpWall time format: %s\n", 
-					argv[i]);
-			}
+			exit_code=1;
+			fprintf(stderr, "GrpWall is not a valid option "
+				"for the root association of a cluster.\n");
 		} else if (!strncasecmp (argv[i], "MaxCPUMinsPerJob",
 					 MAX(command_len, 7))) {
 			if (get_uint64(argv[i]+end, 
@@ -257,12 +270,18 @@ extern int sacctmgr_add_cluster(int argc, char *argv[])
 	int limit_set = 0;
 	ListIterator itr = NULL, itr_c = NULL;
 	char *name = NULL;
+	uint16_t class = 0;
 
 	init_acct_association_rec(&start_assoc);
 
-	for (i=0; i<argc; i++) 
-		limit_set = _set_rec(&i, argc, argv, name_list, &start_assoc);
-
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		limit_set += _set_rec(&i, argc, argv,
+				     name_list, &start_assoc, &class);
+	}
 	if(exit_code) {
 		list_destroy(name_list);
 		return SLURM_ERROR;
@@ -278,6 +297,7 @@ extern int sacctmgr_add_cluster(int argc, char *argv[])
 
 		memset(&cluster_cond, 0, sizeof(acct_cluster_cond_t));
 		cluster_cond.cluster_list = name_list;
+		cluster_cond.classification = class;
 
 		temp_list = acct_storage_g_get_clusters(db_conn, my_uid,
 							&cluster_cond);
@@ -322,19 +342,21 @@ extern int sacctmgr_add_cluster(int argc, char *argv[])
 		
 		list_append(cluster_list, cluster);
 		cluster->name = xstrdup(name);
+		cluster->classification = class;
 		cluster->root_assoc = xmalloc(sizeof(acct_association_rec_t));
 		init_acct_association_rec(cluster->root_assoc);
 		printf("  Name          = %s\n", cluster->name);
+		if(cluster->classification)
+			printf("  Classification= %s\n",
+			       get_classification_str(cluster->classification));
 
-		cluster->root_assoc->fairshare = start_assoc.fairshare;		
+		cluster->root_assoc->shares_raw = start_assoc.shares_raw;
 		
-		cluster->root_assoc->grp_cpu_mins = start_assoc.grp_cpu_mins;
 		cluster->root_assoc->grp_cpus = start_assoc.grp_cpus;
 		cluster->root_assoc->grp_jobs = start_assoc.grp_jobs;
 		cluster->root_assoc->grp_nodes = start_assoc.grp_nodes;
 		cluster->root_assoc->grp_submit_jobs =
 			start_assoc.grp_submit_jobs;
-		cluster->root_assoc->grp_wall = start_assoc.grp_wall;
 
 		cluster->root_assoc->max_cpu_mins_pj = 
 			start_assoc.max_cpu_mins_pj;
@@ -407,6 +429,8 @@ extern int sacctmgr_list_cluster(int argc, char *argv[])
 		PRINT_CLUSTER,
 		PRINT_CHOST,
 		PRINT_CPORT,
+		PRINT_CLASS,
+		PRINT_CPUS,
 		PRINT_FAIRSHARE,
 		PRINT_GRPCM,
 		PRINT_GRPC,
@@ -420,6 +444,8 @@ extern int sacctmgr_list_cluster(int argc, char *argv[])
 		PRINT_MAXN,
 		PRINT_MAXS,
 		PRINT_MAXW,
+		PRINT_NODECNT,
+		PRINT_NODES,
 		PRINT_QOS,
 		PRINT_QOS_RAW,
 		PRINT_RPC_VERSION		
@@ -427,7 +453,16 @@ extern int sacctmgr_list_cluster(int argc, char *argv[])
 
 
 	cluster_cond->cluster_list = list_create(slurm_destroy_char);
-	_set_cond(&i, argc, argv, cluster_cond->cluster_list, format_list);
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;
+		_set_cond(&i, argc, argv, cluster_cond->cluster_list, 
+			  format_list,
+			  &cluster_cond->classification);
+	}
+
 	if(exit_code) {
 		destroy_acct_cluster_cond(cluster_cond);
 		list_destroy(format_list);
@@ -465,27 +500,33 @@ extern int sacctmgr_list_cluster(int argc, char *argv[])
 		} else if(!strncasecmp("ControlHost", object,
 				       MAX(command_len, 8))) {
 			field->type = PRINT_CHOST;
-			field->name = xstrdup("Control Host");
+			field->name = xstrdup("ControlHost");
 			field->len = 15;
 			field->print_routine = print_fields_str;
 		} else if(!strncasecmp("ControlPort", object,
 				       MAX(command_len, 8))) {
 			field->type = PRINT_CPORT;
-			field->name = xstrdup("Control Port");
+			field->name = xstrdup("ControlPort");
 			field->len = 12;
 			field->print_routine = print_fields_uint;
+		} else if(!strncasecmp("Classification", object,
+				       MAX(command_len, 2))) {
+			field->type = PRINT_CPUS;
+			field->name = xstrdup("Class");
+			field->len = 9;
+			field->print_routine = print_fields_str;
+		} else if(!strncasecmp("CPUCount", object,
+				       MAX(command_len, 2))) {
+			field->type = PRINT_CPUS;
+			field->name = xstrdup("CPUCount");
+			field->len = 9;
+			field->print_routine = print_fields_str;
 		} else if(!strncasecmp("FairShare", object, 
 				       MAX(command_len, 1))) {
 			field->type = PRINT_FAIRSHARE;
 			field->name = xstrdup("FairShare");
 			field->len = 9;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("GrpCPUMins", object, 
-				       MAX(command_len, 8))) {
-			field->type = PRINT_GRPCM;
-			field->name = xstrdup("GrpCPUMins");
-			field->len = 11;
-			field->print_routine = print_fields_uint64;
 		} else if(!strncasecmp("GrpCPUs", object, 
 				       MAX(command_len, 8))) {
 			field->type = PRINT_GRPC;
@@ -510,12 +551,6 @@ extern int sacctmgr_list_cluster(int argc, char *argv[])
 			field->name = xstrdup("GrpSubmit");
 			field->len = 9;
 			field->print_routine = print_fields_uint;
-		} else if(!strncasecmp("GrpWall", object,
-				       MAX(command_len, 4))) {
-			field->type = PRINT_GRPW;
-			field->name = xstrdup("GrpWall");
-			field->len = 11;
-			field->print_routine = print_fields_time;
 		} else if(!strncasecmp("MaxCPUMinsPerJob", object,
 				       MAX(command_len, 7))) {
 			field->type = PRINT_MAXCM;
@@ -552,6 +587,18 @@ extern int sacctmgr_list_cluster(int argc, char *argv[])
 			field->name = xstrdup("MaxWall");
 			field->len = 11;
 			field->print_routine = print_fields_time;
+		} else if(!strncasecmp("NodeCount", object,
+				       MAX(command_len, 5))) {
+			field->type = PRINT_NODECNT;
+			field->name = xstrdup("NodeCount");
+			field->len = 9;
+			field->print_routine = print_fields_uint;
+		} else if(!strncasecmp("NodeNames", object,
+				       MAX(command_len, 5))) {
+			field->type = PRINT_NODES;
+			field->name = xstrdup("NodeNames");
+			field->len = 20;
+			field->print_routine = print_fields_str;
 		} else if(!strncasecmp("QOSRAWLevel", object, 
 				       MAX(command_len, 4))) {
 			field->type = PRINT_QOS_RAW;
@@ -582,7 +629,7 @@ extern int sacctmgr_list_cluster(int argc, char *argv[])
 			continue;
 		}
 		
-		if(newlen > 0) 
+		if(newlen) 
 			field->len = newlen;
 		
 		list_append(print_fields_list, field);		
@@ -633,16 +680,28 @@ extern int sacctmgr_list_cluster(int argc, char *argv[])
 						     cluster->control_port,
 						     (curr_inx == field_count));
 				break;
-			case PRINT_FAIRSHARE:
-				field->print_routine(
-					field,
-					cluster->root_assoc->fairshare,
-					(curr_inx == field_count));
+			case PRINT_CLASS:
+				field->print_routine(field,
+						     get_classification_str(
+							     cluster->
+							     classification),
+						     (curr_inx == field_count));
+				break;
+			case PRINT_CPUS:
+			{
+				char tmp_char[9];
+				convert_num_unit((float)cluster->cpu_count,
+						 tmp_char, sizeof(tmp_char),
+						 UNIT_NONE);
+				field->print_routine(field,
+						     tmp_char,
+						     (curr_inx == field_count));
 				break;
-			case PRINT_GRPCM:
+			}
+			case PRINT_FAIRSHARE:
 				field->print_routine(
 					field,
-					assoc->grp_cpu_mins,
+					assoc->shares_raw,
 					(curr_inx == field_count));
 				break;
 			case PRINT_GRPC:
@@ -665,12 +724,6 @@ extern int sacctmgr_list_cluster(int argc, char *argv[])
 						     assoc->grp_submit_jobs,
 						     (curr_inx == field_count));
 				break;
-			case PRINT_GRPW:
-				field->print_routine(
-					field,
-					assoc->grp_wall,
-					(curr_inx == field_count));
-				break;
 			case PRINT_MAXCM:
 				field->print_routine(
 					field,
@@ -703,6 +756,28 @@ extern int sacctmgr_list_cluster(int argc, char *argv[])
 					assoc->max_wall_pj,
 					(curr_inx == field_count));
 				break;
+				
+			case PRINT_NODECNT:
+			{
+				hostlist_t hl = hostlist_create(cluster->nodes);
+				int cnt = 0;
+				if(hl) {
+					cnt = hostlist_count(hl);
+					hostlist_destroy(hl);
+				}
+				field->print_routine(
+					field,
+					cnt,
+					(curr_inx == field_count));
+				break;
+			}				
+			case PRINT_NODES:
+				field->print_routine(
+					field,
+					cluster->nodes,
+					(curr_inx == field_count));
+				break;
+				
 			case PRINT_QOS:
 				if(!qos_list) 
 					qos_list = acct_storage_g_get_qos(
@@ -756,7 +831,7 @@ extern int sacctmgr_modify_cluster(int argc, char *argv[])
 		xmalloc(sizeof(acct_association_cond_t));
 	int cond_set = 0, rec_set = 0, set = 0;
 	List ret_list = NULL;
-
+	uint16_t class_cond = 0, class_rec = 0;
 
 	init_acct_association_rec(assoc);
 
@@ -768,15 +843,17 @@ extern int sacctmgr_modify_cluster(int argc, char *argv[])
 		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) {
 			i++;
 			if(_set_cond(&i, argc, argv,
-				     assoc_cond->cluster_list, NULL))
+				     assoc_cond->cluster_list,
+				     NULL, &class_cond))
 				cond_set = 1;
 		} else if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) {
 			i++;
-			if(_set_rec(&i, argc, argv, NULL, assoc))
+			if(_set_rec(&i, argc, argv, NULL, assoc, &class_rec))
 				rec_set = 1;
 		} else {
 			if(_set_cond(&i, argc, argv,
-				     assoc_cond->cluster_list, NULL))
+				     assoc_cond->cluster_list,
+				     NULL, &class_cond))
 				cond_set = 1;
 		}
 	}
@@ -800,11 +877,50 @@ extern int sacctmgr_modify_cluster(int argc, char *argv[])
 		destroy_acct_association_cond(assoc_cond);
 		return SLURM_ERROR;		
 	}
+	
+	if(class_cond) {
+		List temp_list = NULL;
+		acct_cluster_cond_t cluster_cond;
 
+		memset(&cluster_cond, 0, sizeof(acct_cluster_cond_t));
+		cluster_cond.cluster_list = assoc_cond->cluster_list;
+		cluster_cond.classification = class_cond;
+		
+		temp_list = acct_storage_g_get_clusters(db_conn, my_uid,
+							&cluster_cond);
+		if(!temp_list) {
+			exit_code=1;
+			fprintf(stderr,
+				" Problem getting clusters from database.  "
+				"Contact your admin.\n");
+			destroy_acct_association_rec(assoc);
+			destroy_acct_association_cond(assoc_cond);
+			return SLURM_ERROR;
+		} else if(!list_count(temp_list)) {
+			fprintf(stderr,
+				" The class you gave %s didn't "
+				"return any clusters.\n", 
+				get_classification_str(class_cond));
+			destroy_acct_association_rec(assoc);
+			destroy_acct_association_cond(assoc_cond);
+			list_destroy(temp_list);
+			return SLURM_ERROR;
+		}
+		/* we are only looking for the clusters returned from
+		   this query, so we free the cluster_list and replace
+		   it */
+		if(assoc_cond->cluster_list)
+			list_destroy(assoc_cond->cluster_list);
+		assoc_cond->cluster_list = temp_list;
+	}
+	
 	printf(" Setting\n");
 	if(rec_set) {
 		printf(" Default Limits =\n");
 		sacctmgr_print_assoc_limits(assoc);
+		if(class_rec) 
+			printf(" Cluster Classification = %s\n", 
+			       get_classification_str(class_rec));
 	}
 
 	list_append(assoc_cond->acct_list, "root");
@@ -831,6 +947,43 @@ extern int sacctmgr_modify_cluster(int argc, char *argv[])
 
 	if(ret_list)
 		list_destroy(ret_list);
+
+	if(class_rec) {
+		acct_cluster_cond_t cluster_cond;
+		acct_cluster_rec_t cluster_rec;
+		
+		memset(&cluster_cond, 0, sizeof(acct_cluster_cond_t));
+		memset(&cluster_rec, 0, sizeof(acct_cluster_rec_t));
+		/* the class has already returned these clusters so
+		   just go with it */
+		cluster_cond.cluster_list = assoc_cond->cluster_list;
+
+		cluster_rec.classification = class_rec;
+
+		ret_list = acct_storage_g_modify_clusters(
+			db_conn, my_uid, &cluster_cond, &cluster_rec);
+	
+		if(ret_list && list_count(ret_list)) {
+			char *object = NULL;
+			ListIterator itr = list_iterator_create(ret_list);
+			printf(" Modified cluster classifications...\n");
+			while((object = list_next(itr))) {
+				printf("  %s\n", object);
+			}
+			list_iterator_destroy(itr);
+			set = 1;
+		} else if(ret_list) {
+			printf(" Nothing modified\n");
+		} else {
+			exit_code=1;
+			fprintf(stderr, " Error with request\n");
+			rc = SLURM_ERROR;
+		}
+		
+		if(ret_list)
+			list_destroy(ret_list);
+	}
+
 	notice_thread_fini();
 
 	if(set) {
@@ -854,10 +1007,25 @@ extern int sacctmgr_delete_cluster(int argc, char *argv[])
 		xmalloc(sizeof(acct_cluster_cond_t));
 	int i=0;
 	List ret_list = NULL;
+	int cond_set = 0;
 
 	cluster_cond->cluster_list = list_create(slurm_destroy_char);
 	
-	if(!_set_cond(&i, argc, argv, cluster_cond->cluster_list, NULL)) {
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;
+		cond_set += _set_cond(&i, argc, argv,
+				      cluster_cond->cluster_list, 
+				      NULL,
+				      &cluster_cond->classification);
+	}
+
+	if(exit_code) {
+		destroy_acct_cluster_cond(cluster_cond);
+		return SLURM_ERROR;
+	} else if(!cond_set) {
 		exit_code=1;
 		fprintf(stderr, 
 			" No conditions given to remove, not executing.\n");
@@ -865,7 +1033,12 @@ extern int sacctmgr_delete_cluster(int argc, char *argv[])
 		return SLURM_ERROR;
 	}
 
-	if(!list_count(cluster_cond->cluster_list)) {
+	if(!list_count(cluster_cond->cluster_list) 
+	   && !cluster_cond->classification) {
+		exit_code=1;
+		fprintf(stderr, 
+			"problem with delete request.  "
+			"Nothing given to delete.\n");
 		destroy_acct_cluster_cond(cluster_cond);
 		return SLURM_SUCCESS;
 	}
@@ -921,6 +1094,7 @@ extern int sacctmgr_dump_cluster (int argc, char *argv[])
 	char *line = NULL;
 	int i, command_len = 0;
 	FILE *fd = NULL;
+	char *class_str = NULL;
 
 	for (i=0; i<argc; i++) {
 		int end = parse_option_end(argv[i]);
@@ -965,6 +1139,38 @@ extern int sacctmgr_dump_cluster (int argc, char *argv[])
 		exit_code=1;
 		fprintf(stderr, " We need a cluster to dump.\n");
 		return SLURM_ERROR;
+	} else {
+		List temp_list = NULL;
+		acct_cluster_cond_t cluster_cond;
+		acct_cluster_rec_t *cluster_rec = NULL;
+
+		memset(&cluster_cond, 0, sizeof(acct_cluster_cond_t));
+		cluster_cond.cluster_list = list_create(NULL);
+		list_push(cluster_cond.cluster_list, cluster_name);
+
+		temp_list = acct_storage_g_get_clusters(db_conn, my_uid,
+							&cluster_cond);
+		list_destroy(cluster_cond.cluster_list);
+		if(!temp_list) {
+			exit_code=1;
+			fprintf(stderr,
+				" Problem getting clusters from database.  "
+				"Contact your admin.\n");
+			xfree(cluster_name);
+			return SLURM_ERROR;
+		}
+
+		cluster_rec = list_peek(temp_list);
+		if(!cluster_rec) {
+			exit_code=1;
+			fprintf(stderr, " Cluster %s doesn't exist.\n",
+				cluster_name);
+			xfree(cluster_name);
+			list_destroy(temp_list);
+			return SLURM_ERROR;
+		}
+		class_str = get_classification_str(cluster_rec->classification);
+		list_destroy(temp_list);
 	}
 
 	if(!file_name) {
@@ -991,6 +1197,7 @@ extern int sacctmgr_dump_cluster (int argc, char *argv[])
 		exit_code=1;
 		fprintf(stderr, " Your uid (%u) is not in the "
 			"accounting system, can't dump cluster.\n", my_uid);
+		xfree(cluster_name);
 		xfree(user_name);
 		if(user_list)
 			list_destroy(user_list);
@@ -1003,6 +1210,7 @@ extern int sacctmgr_dump_cluster (int argc, char *argv[])
 			exit_code=1;
 			fprintf(stderr, " Your user does not have sufficient "
 				"privileges to dump clusters.\n");
+			xfree(cluster_name);
 			if(user_list)
 				list_destroy(user_list);
 			xfree(user_name);
@@ -1064,11 +1272,15 @@ extern int sacctmgr_dump_cluster (int argc, char *argv[])
 		   "MaxWallDurationPerJob=1\n") < 0) {
 		exit_code=1;
 		fprintf(stderr, "Can't write to file");
+		xfree(cluster_name);
 		return SLURM_ERROR;
 	}
 
 	line = xstrdup_printf("Cluster - %s", cluster_name);
 
+	if(class_str) 
+		xstrfmtcat(line, ":Classification=%s", class_str);
+
 	acct_hierarchical_rec = list_peek(acct_hierarchical_rec_list);
 	assoc = acct_hierarchical_rec->assoc;
 	if(strcmp(assoc->acct, "root")) 
diff --git a/src/sacctmgr/common.c b/src/sacctmgr/common.c
index c3d1f6f78..99819ca56 100644
--- a/src/sacctmgr/common.c
+++ b/src/sacctmgr/common.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -653,6 +654,30 @@ extern int get_uint64(char *in_value, uint64_t *out_value, char *type)
 	return SLURM_SUCCESS;
 }
 
+extern int get_double(char *in_value, double *out_value, char *type)
+{
+	char *ptr = NULL, *meat = NULL;
+	double num;
+	
+	if(!(meat = strip_quotes(in_value, NULL, 1))) {
+		error("Problem with strip_quotes");
+		return SLURM_ERROR;
+	}
+	num = strtod(meat, &ptr);
+	if ((num == 0) && ptr && ptr[0]) {
+		error("Invalid value for %s (%s)", type, meat);
+		xfree(meat);
+		return SLURM_ERROR;
+	}
+	xfree(meat);
+	
+	if (num < 0)
+		*out_value = (double) INFINITE;		/* flag to clear */
+	else
+		*out_value = (double) num;
+	return SLURM_SUCCESS;
+}
+
 extern int addto_qos_char_list(List char_list, List qos_list, char *names, 
 			       int option)
 {
@@ -970,6 +995,7 @@ extern List copy_char_list(List char_list)
 extern void sacctmgr_print_coord_list(
 	print_field_t *field, List value, int last)
 {
+	int abs_len = abs(field->len);
 	ListIterator itr = NULL;
 	char *print_this = NULL;
 	acct_coord_rec_t *object = NULL;
@@ -998,10 +1024,13 @@ extern void sacctmgr_print_coord_list(
 	else if(print_fields_parsable_print)
 		printf("%s|", print_this);
 	else {
-		if(strlen(print_this) > field->len) 
-			print_this[field->len-1] = '+';
+		if(strlen(print_this) > abs_len)
+			print_this[abs_len-1] = '+';
 		
-		printf("%-*.*s ", field->len, field->len, print_this);
+		if(field->len == abs_len)
+			printf("%*.*s ", abs_len, abs_len, print_this);
+		else
+			printf("%-*.*s ", abs_len, abs_len, print_this);
 	}
 	xfree(print_this);
 }
@@ -1009,6 +1038,7 @@ extern void sacctmgr_print_coord_list(
 extern void sacctmgr_print_qos_list(print_field_t *field, List qos_list,
 				    List value, int last)
 {
+	int abs_len = abs(field->len);
 	char *print_this = NULL;
 
 	print_this = get_qos_complete_str(qos_list, value);
@@ -1019,10 +1049,13 @@ extern void sacctmgr_print_qos_list(print_field_t *field, List qos_list,
 	else if(print_fields_parsable_print)
 		printf("%s|", print_this);
 	else {
-		if(strlen(print_this) > field->len) 
-			print_this[field->len-1] = '+';
+		if(strlen(print_this) > abs_len) 
+			print_this[abs_len-1] = '+';
 		
-		printf("%-*.*s ", field->len, field->len, print_this);
+		if(field->len == abs_len)
+			printf("%*.*s ", abs_len, abs_len, print_this);
+		else
+			printf("%-*.*s ", abs_len, abs_len, print_this);
 	}
 	xfree(print_this);
 }
@@ -1032,10 +1065,10 @@ extern void sacctmgr_print_assoc_limits(acct_association_rec_t *assoc)
 	if(!assoc)
 		return;
 
-	if(assoc->fairshare == INFINITE)
+	if(assoc->shares_raw == INFINITE)
 		printf("  Fairshare     = NONE\n");
-	else if(assoc->fairshare != NO_VAL) 
-		printf("  Fairshare     = %u\n", assoc->fairshare);
+	else if(assoc->shares_raw != NO_VAL) 
+		printf("  Fairshare     = %u\n", assoc->shares_raw);
 
 	if(assoc->grp_cpu_mins == INFINITE)
 		printf("  GrpCPUMins    = NONE\n");
diff --git a/src/sacctmgr/config_functions.c b/src/sacctmgr/config_functions.c
new file mode 100644
index 000000000..642d993a0
--- /dev/null
+++ b/src/sacctmgr/config_functions.c
@@ -0,0 +1,162 @@
+/*****************************************************************************\
+ *  config_functions.c - functions dealing with system configuration.
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include "src/common/list.h"
+#include "src/common/read_config.h"
+#include "src/common/slurmdbd_defs.h"
+#include "src/common/uid.h"
+#include "src/common/xstring.h"
+#include "src/sacctmgr/sacctmgr.h"
+
+static char    *acct_storage_backup_host = NULL;
+static char    *acct_storage_host = NULL;
+static char    *acct_storage_loc  = NULL;
+static char    *acct_storage_pass = NULL;
+static uint32_t acct_storage_port;
+static char    *acct_storage_type = NULL;
+static char    *acct_storage_user = NULL;
+static char    *auth_type = NULL;
+static uint16_t msg_timeout;
+static char    *plugin_dir = NULL;
+static uint16_t private_data;
+static uint32_t slurm_user_id;
+static uint16_t track_wckey;
+
+static List dbd_config_list = NULL;
+
+
+static void _load_dbd_config(void)
+{
+	dbd_config_list = acct_storage_g_get_config(db_conn);
+}
+
+static void _print_dbd_config(void)
+{
+	ListIterator iter = NULL;
+	config_key_pair_t *key_pair;
+
+	if (!dbd_config_list)
+		return;
+
+	printf("\nSlurmDBD configuration:\n");
+	iter = list_iterator_create(dbd_config_list);
+	while((key_pair = list_next(iter))) {
+		printf("%-22s = %s\n", key_pair->name, key_pair->value);
+	}
+	list_iterator_destroy(iter);
+}
+
+static void _free_dbd_config(void)
+{
+	if (!dbd_config_list)
+		return;
+
+	list_destroy(dbd_config_list);
+	dbd_config_list = NULL;
+}
+
+static void _load_slurm_config(void)
+{
+	acct_storage_backup_host = slurm_get_accounting_storage_backup_host();
+	acct_storage_host = slurm_get_accounting_storage_host();
+	acct_storage_loc  = slurm_get_accounting_storage_loc();
+	acct_storage_pass = slurm_get_accounting_storage_pass();
+	acct_storage_port = slurm_get_accounting_storage_port();
+	acct_storage_type = slurm_get_accounting_storage_type();
+	acct_storage_user = slurm_get_accounting_storage_user();
+	auth_type = slurm_get_auth_type();
+	msg_timeout = slurm_get_msg_timeout();
+	plugin_dir = slurm_get_plugin_dir();
+	private_data = slurm_get_private_data();
+	slurm_user_id = slurm_get_slurm_user_id();
+	track_wckey = slurm_get_track_wckey();
+}
+
+static void _free_slurm_config(void)
+{
+	xfree(acct_storage_backup_host);
+	xfree(acct_storage_host);
+	xfree(acct_storage_loc);
+	xfree(acct_storage_pass);
+	xfree(acct_storage_type);
+	xfree(acct_storage_user);
+	xfree(auth_type);
+	xfree(plugin_dir);
+}
+
+static void _print_slurm_config(void)
+{
+	time_t now = time(NULL);
+	char tmp_str[128], *user_name = NULL;
+
+	slurm_make_time_str(&now, tmp_str, sizeof(tmp_str));
+	printf("Configuration data as of %s\n", tmp_str);
+	printf("AccountingStorageBackupHost  = %s\n", acct_storage_backup_host);
+	printf("AccountingStorageHost  = %s\n", acct_storage_host);
+	printf("AccountingStorageLoc   = %s\n", acct_storage_loc);
+	printf("AccountingStoragePass  = %s\n", acct_storage_pass);
+	printf("AccountingStoragePort  = %u\n", acct_storage_port);
+	printf("AccountingStorageType  = %s\n", acct_storage_type);
+	printf("AccountingStorageUser  = %s\n", acct_storage_user);
+	printf("AuthType               = %s\n", auth_type);
+	printf("MessageTimeout         = %u sec\n", msg_timeout);
+	printf("PluginDir              = %s\n", plugin_dir);
+	private_data_string(private_data, tmp_str, sizeof(tmp_str));
+	printf("PrivateData            = %s\n", tmp_str);
+	user_name = uid_to_string(slurm_user_id);
+	printf("SlurmUserId            = %s(%u)\n", user_name, slurm_user_id);
+	xfree(user_name);
+	printf("SLURM_CONF             = %s\n", default_slurm_config_file);
+	printf("SLURM_VERSION          = %s\n", SLURM_VERSION);
+	printf("TrackWCKey             = %u\n", track_wckey);
+}
+
+extern int sacctmgr_list_config(bool have_db_conn)
+{
+	_load_slurm_config();
+	_print_slurm_config();
+	_free_slurm_config();
+
+	if (have_db_conn) {
+		_load_dbd_config();
+		_print_dbd_config();
+		_free_dbd_config();
+	}
+
+	return SLURM_SUCCESS;
+}
diff --git a/src/sacctmgr/file_functions.c b/src/sacctmgr/file_functions.c
index 61848f224..8499020fb 100644
--- a/src/sacctmgr/file_functions.c
+++ b/src/sacctmgr/file_functions.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -42,6 +43,7 @@
 
 typedef struct {
 	acct_admin_level_t admin;
+	uint16_t classification;
 	List coord_list; /* char *list */
 	char *def_acct;
 	char *def_wckey;
@@ -71,6 +73,7 @@ typedef struct {
 
 enum {
 	PRINT_ACCOUNT,
+	PRINT_CLASSIFICATION,
 	PRINT_ADMIN,
 	PRINT_CLUSTER,
 	PRINT_COORDS,
@@ -322,6 +325,10 @@ static sacctmgr_file_opts_t *_parse_options(char *options)
 				file_opts->coord_list =
 					list_create(slurm_destroy_char);
 			slurm_addto_char_list(file_opts->coord_list, option);
+		} else if (!strncasecmp (sub, "Classification",
+					 MAX(command_len, 2))) {
+			file_opts->classification =
+				str_2_classification(option);
 		} else if (!strncasecmp (sub, "DefaultAccount",
 					 MAX(command_len, 8))) {
 			file_opts->def_acct = xstrdup(option);
@@ -556,11 +563,17 @@ static List _set_up_print_fields(List format_list)
 			field->len = 9;
 			field->print_routine = print_fields_str;
 		} else if(!strncasecmp("Cluster", object,
-				       MAX(command_len, 2))) {
+				       MAX(command_len, 3))) {
 			field->type = PRINT_CLUSTER;
 			field->name = xstrdup("Cluster");
 			field->len = 10;
 			field->print_routine = print_fields_str;
+		} else if(!strncasecmp("Classification", object,
+				       MAX(command_len, 3))) {
+			field->type = PRINT_CLASSIFICATION;
+			field->name = xstrdup("Classif");
+			field->len = 10;
+			field->print_routine = print_fields_str;
 		} else if(!strncasecmp("Coordinators", object,
 				       MAX(command_len, 2))) {
 			field->type = PRINT_COORDS;
@@ -767,7 +780,7 @@ static int _print_out_assoc(List assoc_list, bool user, bool add)
 				break;
 			case PRINT_FAIRSHARE:
 				field->print_routine(field,
-						     assoc->fairshare);
+						     assoc->shares_raw);
 				break;
 			case PRINT_GRPCM:
 				field->print_routine(
@@ -859,497 +872,163 @@ static int _print_out_assoc(List assoc_list, bool user, bool add)
 	return rc;
 }
 
-static int _mod_acct(sacctmgr_file_opts_t *file_opts,
-		     acct_account_rec_t *acct, char *parent)
+static int _mod_assoc(sacctmgr_file_opts_t *file_opts,
+		      acct_association_rec_t *assoc,
+		      sacctmgr_mod_type_t mod_type,
+		      char *parent)
 {
 	int changed = 0;
-	char *desc = NULL, *org = NULL, *my_info = NULL;
-	acct_account_rec_t mod_acct;
-	acct_account_cond_t acct_cond;
+	acct_association_rec_t mod_assoc;
 	acct_association_cond_t assoc_cond;
-	
-	memset(&mod_acct, 0, sizeof(acct_account_rec_t));
-	memset(&acct_cond, 0, sizeof(acct_account_cond_t));
-	memset(&assoc_cond, 0, sizeof(acct_association_cond_t));
+	char *type = NULL;
+	char *name = NULL;
+	char *my_info = NULL;
 
-	if(file_opts->desc) 
-		desc = xstrdup(file_opts->desc);
+	switch(mod_type) {
+	case MOD_CLUSTER:
+		type = "Cluster";
+		name = assoc->cluster;
+		break;
+	case MOD_ACCT:
+		type = "Account";
+		name = assoc->acct;
+		break;
+	case MOD_USER:
+		type = "User";
+		name = assoc->user;
+		break;
+	default:
+		return 0;
+		break;
+	}
+	init_acct_association_rec(&mod_assoc);
+	memset(&assoc_cond, 0, sizeof(acct_association_cond_t));
 
-	if(desc && strcmp(desc, acct->description)) {
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8s -> %s\n",
-			   " Changed description", "Account",
-			   acct->name,
-			   acct->description,
-			   desc);
-		mod_acct.description = desc;
+	if((file_opts->fairshare != NO_VAL)
+	   && (assoc->shares_raw != file_opts->fairshare)) {
+		mod_assoc.shares_raw = file_opts->fairshare;
 		changed = 1;
-	} else 
-		xfree(desc);
-				
-	if(file_opts->org)
-		org = xstrdup(file_opts->org);
-
-	if(org && strcmp(org, acct->organization)) {
 		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8s -> %s\n",
-			   " Changed organization", "Account",
-			   acct->name,
-			   acct->organization,
-			   org);
-		mod_acct.organization = org;
-		changed = 1;
-	} else
-		xfree(org);
-									
-	if(changed) {
-		List ret_list = NULL;
-					
-		assoc_cond.acct_list = list_create(NULL);
-		list_append(assoc_cond.acct_list, acct->name);
-		acct_cond.assoc_cond = &assoc_cond;
-
-		notice_thread_init();
-		ret_list = acct_storage_g_modify_accounts(db_conn, my_uid,
-							  &acct_cond, 
-							  &mod_acct);
-		notice_thread_fini();
-	
-		list_destroy(assoc_cond.acct_list);
+			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
+			   " Changed fairshare",
+			   type, name,
+			   assoc->shares_raw,
+			   file_opts->fairshare);
+	}
 
-/* 		if(ret_list && list_count(ret_list)) { */
-/* 			char *object = NULL; */
-/* 			ListIterator itr = list_iterator_create(ret_list); */
-/* 			printf(" Modified account defaults for " */
-/* 			       "associations...\n"); */
-/* 			while((object = list_next(itr)))  */
-/* 				printf("  %s\n", object); */
-/* 			list_iterator_destroy(itr); */
-/* 		} */
- 
-		if(ret_list) {
-			printf("%s", my_info);
-			list_destroy(ret_list);
-		} else
-			changed = 0;
-		xfree(my_info);
+	if((file_opts->grp_cpu_mins != NO_VAL)
+	   && (assoc->grp_cpu_mins != file_opts->grp_cpu_mins)) {
+		mod_assoc.grp_cpu_mins = file_opts->grp_cpu_mins;
+		changed = 1;
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8llu -> %llu\n",
+			   " Changed GrpCPUMins",
+			   type, name,
+			   assoc->grp_cpu_mins,
+			   file_opts->grp_cpu_mins);
 	}
-	xfree(desc);
-	xfree(org);
-	return changed;
-}
 
-static int _mod_user(sacctmgr_file_opts_t *file_opts,
-		     acct_user_rec_t *user, char *cluster, char *parent)
-{
-	int rc;
-	int set = 0;
-	int changed = 0;
-	char *def_acct = NULL, *def_wckey = NULL, *my_info = NULL;
-	acct_user_rec_t mod_user;
-	acct_user_cond_t user_cond;
-	List ret_list = NULL;
-	acct_association_cond_t assoc_cond;
+	if((file_opts->grp_cpus != NO_VAL)
+	   && (assoc->grp_cpus != file_opts->grp_cpus)) {
+		mod_assoc.grp_cpus = file_opts->grp_cpus;
+		changed = 1;
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
+			   " Changed GrpCpus",
+			   type, name,
+			   assoc->grp_cpus, 
+			   file_opts->grp_cpus);
+	}
 
-	if(!user || !user->name) {
-		fatal(" We need a user name in _mod_user");
+	if((file_opts->grp_jobs != NO_VAL)
+	   && (assoc->grp_jobs != file_opts->grp_jobs)) {
+		mod_assoc.grp_jobs = file_opts->grp_jobs;
+		changed = 1;
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
+			   " Changed GrpJobs",
+			   type, name,
+			   assoc->grp_jobs,
+			   file_opts->grp_jobs);
 	}
 
-	memset(&mod_user, 0, sizeof(acct_user_rec_t));
-	memset(&user_cond, 0, sizeof(acct_user_cond_t));
-	memset(&assoc_cond, 0, sizeof(acct_association_cond_t));
-				
-	assoc_cond.user_list = list_create(NULL);
-	list_append(assoc_cond.user_list, user->name);
-	user_cond.assoc_cond = &assoc_cond;
+	if((file_opts->grp_nodes != NO_VAL)
+	   && (assoc->grp_nodes != file_opts->grp_nodes)) {
+		mod_assoc.grp_nodes = file_opts->grp_nodes;
+		changed = 1;
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
+			   " Changed GrpNodes",
+			   type, name,
+			   assoc->grp_nodes, 
+			   file_opts->grp_nodes);
+	}
 
-	if(file_opts->def_acct)
-		def_acct = xstrdup(file_opts->def_acct);
+	if((file_opts->grp_submit_jobs != NO_VAL)
+	   && (assoc->grp_submit_jobs != file_opts->grp_submit_jobs)) {
+		mod_assoc.grp_submit_jobs = file_opts->grp_submit_jobs;
+		changed = 1;
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
+			   " Changed GrpSubmitJobs",
+			   type, name,
+			   assoc->grp_submit_jobs,
+			   file_opts->grp_submit_jobs);
+	}
 
-	if(def_acct && 
-	   (!user->default_acct || strcmp(def_acct, user->default_acct))) {
+	if((file_opts->grp_wall != NO_VAL)
+	   && (assoc->grp_wall != file_opts->grp_wall)) {
+		mod_assoc.grp_wall = file_opts->grp_wall;
+		changed = 1;
 		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8s -> %s\n",
-			   " Changed Default Account", "User",
-			   user->name,
-			   user->default_acct,
-			   def_acct);
-		mod_user.default_acct = def_acct;
+			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
+			   " Changed GrpWallDuration",
+			   type, name,
+			   assoc->grp_wall,
+			   file_opts->grp_wall);
+	}
+	
+	if((file_opts->max_cpu_mins_pj != NO_VAL)
+	   && (assoc->max_cpu_mins_pj != file_opts->max_cpu_mins_pj)) {
+		mod_assoc.max_cpu_mins_pj =
+			file_opts->max_cpu_mins_pj;
 		changed = 1;
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8llu -> %llu\n",
+			   " Changed MaxCPUMinsPerJob",
+			   type, name,
+			   assoc->max_cpu_mins_pj,
+			   file_opts->max_cpu_mins_pj);
 	}
-									
-	if(file_opts->def_wckey)
-		def_wckey = xstrdup(file_opts->def_wckey);
 
-	if(def_wckey && 
-	   (!user->default_wckey || strcmp(def_wckey, user->default_wckey))) {
+	if((file_opts->max_cpus_pj != NO_VAL)
+	   && (assoc->max_cpus_pj != file_opts->max_cpus_pj)) {
+		mod_assoc.max_cpus_pj = file_opts->max_cpus_pj;
+		changed = 1;
 		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8s -> %s\n",
-			   " Changed Default WCKey", "User",
-			   user->name,
-			   user->default_wckey,
-			   def_wckey);
-		mod_user.default_wckey = def_wckey;
+			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
+			   " Changed MaxCpusPerJob",
+			   type, name,
+			   assoc->max_cpus_pj, 
+			   file_opts->max_cpus_pj);
+	}
+
+	if((file_opts->max_jobs != NO_VAL)
+	   && (assoc->max_jobs != file_opts->max_jobs)) {
+		mod_assoc.max_jobs = file_opts->max_jobs;
 		changed = 1;
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
+			   " Changed MaxJobs",
+			   type, name,
+			   assoc->max_jobs,
+			   file_opts->max_jobs);
 	}
-								
-	if(user->admin_level != ACCT_ADMIN_NOTSET
-	   && file_opts->admin != ACCT_ADMIN_NOTSET
-	   && user->admin_level != file_opts->admin) {
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8s -> %s\n",
-			   " Changed Admin Level", "User",
-			   user->name,
-			   acct_admin_level_str(
-				   user->admin_level),
-			   acct_admin_level_str(
-				   file_opts->admin));
-		mod_user.admin_level = file_opts->admin;
-		changed = 1;
-	}
-									
-	if(changed) {
-		notice_thread_init();
-		ret_list = acct_storage_g_modify_users(
-			db_conn, my_uid,
-			&user_cond, 
-			&mod_user);
-		notice_thread_fini();
-					
-/* 		if(ret_list && list_count(ret_list)) { */
-/* 			char *object = NULL; */
-/* 			ListIterator itr = list_iterator_create(ret_list); */
-/* 			printf(" Modified user defaults for " */
-/* 			       "associations...\n"); */
-/* 			while((object = list_next(itr)))  */
-/* 				printf("  %s\n", object); */
-/* 			list_iterator_destroy(itr); */
-/* 		} */
- 
-		if(ret_list) {
-			printf("%s", my_info);
-			list_destroy(ret_list);
-			set = 1;
-		} 
-		xfree(my_info);
-	}
-	xfree(def_acct);
-	xfree(def_wckey);
-
-	if((!user->coord_accts || !list_count(user->coord_accts))
-		  && (file_opts->coord_list 
-		      && list_count(file_opts->coord_list))) {
-		ListIterator coord_itr = NULL;
-		char *temp_char = NULL;
-		acct_coord_rec_t *coord = NULL;
-		int first = 1;
-		notice_thread_init();
-		rc = acct_storage_g_add_coord(db_conn, my_uid, 
-					      file_opts->coord_list,
-					      &user_cond);
-		notice_thread_fini();
-
-		user->coord_accts = list_create(destroy_acct_coord_rec);
-		coord_itr = list_iterator_create(file_opts->coord_list);
-		printf(" Making User '%s' coordinator for account(s)",
-		       user->name);
-		while((temp_char = list_next(coord_itr))) {
-			coord = xmalloc(sizeof(acct_coord_rec_t));
-			coord->name = xstrdup(temp_char);
-			coord->direct = 1;
-			list_push(user->coord_accts, coord);
-
-			if(first) {
-				printf(" %s", temp_char);
-				first = 0;
-			} else
-				printf(", %s", temp_char);
-		}
-		list_iterator_destroy(coord_itr);
-		printf("\n");
-		set = 1;
-	} else if((user->coord_accts && list_count(user->coord_accts))
-		  && (file_opts->coord_list 
-		      && list_count(file_opts->coord_list))) {
-		ListIterator coord_itr = NULL;
-		ListIterator char_itr = NULL;
-		char *temp_char = NULL;
-		acct_coord_rec_t *coord = NULL;
-		List add_list = list_create(NULL);
-
-		coord_itr = list_iterator_create(user->coord_accts);
-		char_itr = list_iterator_create(file_opts->coord_list);
-
-		while((temp_char = list_next(char_itr))) {
-			while((coord = list_next(coord_itr))) {
-				if(!coord->direct)
-					continue;
-				if(!strcmp(coord->name, temp_char)) {
-					break;
-				}
-			}
-			if(!coord) {
-				printf(" Making User '%s' coordinator of "
-				       "account '%s'\n",
-				       user->name,
-				       temp_char);
-					
-				list_append(add_list, temp_char);
-			}
-			list_iterator_reset(coord_itr);
-		}
-
-		list_iterator_destroy(char_itr);
-		list_iterator_destroy(coord_itr);
-
-		if(list_count(add_list)) {
-			notice_thread_init();
-			rc = acct_storage_g_add_coord(db_conn, my_uid, 
-						      add_list,
-						      &user_cond);
-			notice_thread_fini();
-			set = 1;
-		}
-		list_destroy(add_list);
-	}
-
-	if((!user->wckey_list || !list_count(user->wckey_list))
-		  && (file_opts->wckey_list 
-		      && list_count(file_opts->wckey_list))) {
-		ListIterator wckey_itr = NULL;
-		char *temp_char = NULL;
-		acct_wckey_rec_t *wckey = NULL;
-		int first = 1;
-
-		user->wckey_list = list_create(destroy_acct_wckey_rec);
-		wckey_itr = list_iterator_create(file_opts->wckey_list);
-		printf(" Adding WCKey(s) ");
-		while((temp_char = list_next(wckey_itr))) {
-			wckey = xmalloc(sizeof(acct_wckey_rec_t));
-			wckey->name = xstrdup(temp_char);
-			wckey->cluster = xstrdup(cluster);
-			wckey->user = xstrdup(user->name);
-			list_push(user->wckey_list, wckey);
-
-			if(first) {
-				printf("'%s'", temp_char);
-				first = 0;
-			} else
-				printf(", '%s'", temp_char);
-		}
-		list_iterator_destroy(wckey_itr);
-		printf(" for user '%s'\n", user->name);
-		set = 1;
-		notice_thread_init();
-		rc = acct_storage_g_add_wckeys(db_conn, my_uid, 
-					       user->wckey_list);
-		notice_thread_fini();
-	} else if((user->wckey_list && list_count(user->wckey_list))
-		  && (file_opts->wckey_list 
-		      && list_count(file_opts->wckey_list))) {
-		ListIterator wckey_itr = NULL;
-		ListIterator char_itr = NULL;
-		char *temp_char = NULL;
-		acct_wckey_rec_t *wckey = NULL;
-		List add_list = list_create(destroy_acct_wckey_rec);
-
-		wckey_itr = list_iterator_create(user->wckey_list);
-		char_itr = list_iterator_create(file_opts->wckey_list);
-
-		while((temp_char = list_next(char_itr))) {
-			while((wckey = list_next(wckey_itr))) {
-				if(!strcmp(wckey->name, temp_char)) 
-					break;
-			}
-			if(!wckey) {
-				printf(" Adding WCKey '%s' to User '%s'\n",
-				       temp_char, user->name);
-				wckey = xmalloc(sizeof(acct_wckey_rec_t));
-				wckey->name = xstrdup(temp_char);
-				wckey->cluster = xstrdup(cluster);
-				wckey->user = xstrdup(user->name);
-					
-				list_append(add_list, wckey);
-			}
-			list_iterator_reset(wckey_itr);
-		}
-
-		list_iterator_destroy(char_itr);
-		list_iterator_destroy(wckey_itr);
-
-		if(list_count(add_list)) {
-			notice_thread_init();
-			rc = acct_storage_g_add_wckeys(db_conn, my_uid, 
-						       add_list);
-			notice_thread_fini();
-			set = 1;
-		}
-		list_transfer(user->wckey_list, add_list);
-		list_destroy(add_list);
-	}
-
-	list_destroy(assoc_cond.user_list);
-
-	return set;
-}
-
-static int _mod_assoc(sacctmgr_file_opts_t *file_opts,
-		      acct_association_rec_t *assoc,
-		      sacctmgr_mod_type_t mod_type,
-		      char *parent)
-{
-	int changed = 0;
-	acct_association_rec_t mod_assoc;
-	acct_association_cond_t assoc_cond;
-	char *type = NULL;
-	char *name = NULL;
-	char *my_info = NULL;
-
-	switch(mod_type) {
-	case MOD_CLUSTER:
-		type = "Cluster";
-		name = assoc->cluster;
-		break;
-	case MOD_ACCT:
-		type = "Account";
-		name = assoc->acct;
-		break;
-	case MOD_USER:
-		type = "User";
-		name = assoc->user;
-		break;
-	default:
-		return 0;
-		break;
-	}
-	init_acct_association_rec(&mod_assoc);
-	memset(&assoc_cond, 0, sizeof(acct_association_cond_t));
-
-	if((file_opts->fairshare != NO_VAL)
-	   && (assoc->fairshare != file_opts->fairshare)) {
-		mod_assoc.fairshare = file_opts->fairshare;
-		changed = 1;
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
-			   " Changed fairshare",
-			   type, name,
-			   assoc->fairshare,
-			   file_opts->fairshare);
-	}
-
-	if((file_opts->grp_cpu_mins != NO_VAL)
-	   && (assoc->grp_cpu_mins != file_opts->grp_cpu_mins)) {
-		mod_assoc.grp_cpu_mins = file_opts->grp_cpu_mins;
-		changed = 1;
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8llu -> %llu\n",
-			   " Changed GrpCPUMins",
-			   type, name,
-			   assoc->grp_cpu_mins,
-			   file_opts->grp_cpu_mins);
-	}
-
-	if((file_opts->grp_cpus != NO_VAL)
-	   && (assoc->grp_cpus != file_opts->grp_cpus)) {
-		mod_assoc.grp_cpus = file_opts->grp_cpus;
-		changed = 1;
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
-			   " Changed GrpCpus",
-			   type, name,
-			   assoc->grp_cpus, 
-			   file_opts->grp_cpus);
-	}
-
-	if((file_opts->grp_jobs != NO_VAL)
-	   && (assoc->grp_jobs != file_opts->grp_jobs)) {
-		mod_assoc.grp_jobs = file_opts->grp_jobs;
-		changed = 1;
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
-			   " Changed GrpJobs",
-			   type, name,
-			   assoc->grp_jobs,
-			   file_opts->grp_jobs);
-	}
-
-	if((file_opts->grp_nodes != NO_VAL)
-	   && (assoc->grp_nodes != file_opts->grp_nodes)) {
-		mod_assoc.grp_nodes = file_opts->grp_nodes;
-		changed = 1;
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
-			   " Changed GrpNodes",
-			   type, name,
-			   assoc->grp_nodes, 
-			   file_opts->grp_nodes);
-	}
-
-	if((file_opts->grp_submit_jobs != NO_VAL)
-	   && (assoc->grp_submit_jobs != file_opts->grp_submit_jobs)) {
-		mod_assoc.grp_submit_jobs = file_opts->grp_submit_jobs;
-		changed = 1;
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
-			   " Changed GrpSubmitJobs",
-			   type, name,
-			   assoc->grp_submit_jobs,
-			   file_opts->grp_submit_jobs);
-	}
-
-	if((file_opts->grp_wall != NO_VAL)
-	   && (assoc->grp_wall != file_opts->grp_wall)) {
-		mod_assoc.grp_wall = file_opts->grp_wall;
-		changed = 1;
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
-			   " Changed GrpWallDuration",
-			   type, name,
-			   assoc->grp_wall,
-			   file_opts->grp_wall);
-	}
-	
-	if((file_opts->max_cpu_mins_pj != NO_VAL)
-	   && (assoc->max_cpu_mins_pj != file_opts->max_cpu_mins_pj)) {
-		mod_assoc.max_cpu_mins_pj =
-			file_opts->max_cpu_mins_pj;
-		changed = 1;
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8llu -> %llu\n",
-			   " Changed MaxCPUMinsPerJob",
-			   type, name,
-			   assoc->max_cpu_mins_pj,
-			   file_opts->max_cpu_mins_pj);
-	}
-
-	if((file_opts->max_cpus_pj != NO_VAL)
-	   && (assoc->max_cpus_pj != file_opts->max_cpus_pj)) {
-		mod_assoc.max_cpus_pj = file_opts->max_cpus_pj;
-		changed = 1;
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
-			   " Changed MaxCpusPerJob",
-			   type, name,
-			   assoc->max_cpus_pj, 
-			   file_opts->max_cpus_pj);
-	}
-
-	if((file_opts->max_jobs != NO_VAL)
-	   && (assoc->max_jobs != file_opts->max_jobs)) {
-		mod_assoc.max_jobs = file_opts->max_jobs;
-		changed = 1;
-		xstrfmtcat(my_info, 
-			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
-			   " Changed MaxJobs",
-			   type, name,
-			   assoc->max_jobs,
-			   file_opts->max_jobs);
-	}
-
-	if((file_opts->max_nodes_pj != NO_VAL)
-	   && (assoc->max_nodes_pj != file_opts->max_nodes_pj)) {
-		mod_assoc.max_nodes_pj = file_opts->max_nodes_pj;
-		changed = 1;
+
+	if((file_opts->max_nodes_pj != NO_VAL)
+	   && (assoc->max_nodes_pj != file_opts->max_nodes_pj)) {
+		mod_assoc.max_nodes_pj = file_opts->max_nodes_pj;
+		changed = 1;
 		xstrfmtcat(my_info, 
 			   "%-30.30s for %-7.7s %-10.10s %8d -> %d\n",
 			   " Changed MaxNodesPerJob",
@@ -1445,46 +1124,285 @@ static int _mod_assoc(sacctmgr_file_opts_t *file_opts,
 		}
 	}
 
-	if(changed) {
-		List ret_list = NULL;
-					
-		assoc_cond.cluster_list = list_create(NULL); 
-		list_push(assoc_cond.cluster_list, assoc->cluster);
+	if(changed) {
+		List ret_list = NULL;
+					
+		assoc_cond.cluster_list = list_create(NULL); 
+		list_push(assoc_cond.cluster_list, assoc->cluster);
+
+		assoc_cond.acct_list = list_create(NULL); 
+		list_push(assoc_cond.acct_list, assoc->acct);
+		
+		if(mod_type == MOD_USER) {
+			assoc_cond.user_list = list_create(NULL); 
+			list_push(assoc_cond.user_list, assoc->user);
+			if(assoc->partition) {
+				assoc_cond.partition_list = list_create(NULL); 
+				list_push(assoc_cond.partition_list,
+					  assoc->partition);
+			}
+		}
+			
+		notice_thread_init();
+		ret_list = acct_storage_g_modify_associations(
+			db_conn, my_uid,
+			&assoc_cond, 
+			&mod_assoc);
+		notice_thread_fini();
+					
+		if(mod_assoc.qos_list)
+			list_destroy(mod_assoc.qos_list);
+
+		list_destroy(assoc_cond.cluster_list);
+		list_destroy(assoc_cond.acct_list);
+		if(assoc_cond.user_list)
+			list_destroy(assoc_cond.user_list);
+		if(assoc_cond.partition_list)
+			list_destroy(assoc_cond.partition_list);
+
+/* 		if(ret_list && list_count(ret_list)) { */
+/* 			char *object = NULL; */
+/* 			ListIterator itr = list_iterator_create(ret_list); */
+/* 			printf(" Modified account defaults for " */
+/* 			       "associations...\n"); */
+/* 			while((object = list_next(itr)))  */
+/* 				printf("  %s\n", object); */
+/* 			list_iterator_destroy(itr); */
+/* 		} */
+ 
+		if(ret_list) {
+			printf("%s", my_info);
+			list_destroy(ret_list);
+		} else
+			changed = 0;
+		xfree(my_info);
+	}
+
+	return changed;
+}
+
+static int _mod_cluster(sacctmgr_file_opts_t *file_opts,
+			acct_cluster_rec_t *cluster, char *parent)
+{
+	int changed = 0;
+	char *my_info = NULL;
+	acct_cluster_rec_t mod_cluster;
+	acct_cluster_cond_t cluster_cond;
+	
+	memset(&mod_cluster, 0, sizeof(acct_cluster_rec_t));
+	memset(&cluster_cond, 0, sizeof(acct_cluster_cond_t));
+
+	if(file_opts->classification 
+	   && (file_opts->classification != cluster->classification)) {
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8s -> %s\n",
+			   " Changed Classification", "Cluster",
+			   cluster->name,
+			   get_classification_str(cluster->classification),
+			   get_classification_str(file_opts->classification));
+		mod_cluster.classification = file_opts->classification;
+		changed = 1;
+	}
+
+	if(changed) {
+		List ret_list = NULL;
+					
+		cluster_cond.cluster_list = list_create(NULL);
+		list_append(cluster_cond.cluster_list, cluster->name);
+
+		notice_thread_init();
+		ret_list = acct_storage_g_modify_clusters(db_conn, my_uid,
+							  &cluster_cond, 
+							  &mod_cluster);
+		notice_thread_fini();
+	
+		list_destroy(cluster_cond.cluster_list);
+
+/* 		if(ret_list && list_count(ret_list)) { */
+/* 			char *object = NULL; */
+/* 			ListIterator itr = list_iterator_create(ret_list); */
+/* 			printf(" Modified account defaults for " */
+/* 			       "associations...\n"); */
+/* 			while((object = list_next(itr)))  */
+/* 				printf("  %s\n", object); */
+/* 			list_iterator_destroy(itr); */
+/* 		} */
+ 
+		if(ret_list) {
+			printf("%s", my_info);
+			list_destroy(ret_list);
+		} else
+			changed = 0;
+		xfree(my_info);
+	}
+
+	changed += _mod_assoc(file_opts, cluster->root_assoc,
+			      MOD_CLUSTER, parent);
+
+	return changed;
+}
+
+static int _mod_acct(sacctmgr_file_opts_t *file_opts,
+		     acct_account_rec_t *acct, char *parent)
+{
+	int changed = 0;
+	char *desc = NULL, *org = NULL, *my_info = NULL;
+	acct_account_rec_t mod_acct;
+	acct_account_cond_t acct_cond;
+	acct_association_cond_t assoc_cond;
+	
+	memset(&mod_acct, 0, sizeof(acct_account_rec_t));
+	memset(&acct_cond, 0, sizeof(acct_account_cond_t));
+	memset(&assoc_cond, 0, sizeof(acct_association_cond_t));
+
+	if(file_opts->desc) 
+		desc = xstrdup(file_opts->desc);
+
+	if(desc && strcmp(desc, acct->description)) {
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8s -> %s\n",
+			   " Changed description", "Account",
+			   acct->name,
+			   acct->description,
+			   desc);
+		mod_acct.description = desc;
+		changed = 1;
+	} else 
+		xfree(desc);
+				
+	if(file_opts->org)
+		org = xstrdup(file_opts->org);
+
+	if(org && strcmp(org, acct->organization)) {
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8s -> %s\n",
+			   " Changed organization", "Account",
+			   acct->name,
+			   acct->organization,
+			   org);
+		mod_acct.organization = org;
+		changed = 1;
+	} else
+		xfree(org);
+									
+	if(changed) {
+		List ret_list = NULL;
+					
+		assoc_cond.acct_list = list_create(NULL);
+		list_append(assoc_cond.acct_list, acct->name);
+		acct_cond.assoc_cond = &assoc_cond;
+
+		notice_thread_init();
+		ret_list = acct_storage_g_modify_accounts(db_conn, my_uid,
+							  &acct_cond, 
+							  &mod_acct);
+		notice_thread_fini();
+	
+		list_destroy(assoc_cond.acct_list);
+
+/* 		if(ret_list && list_count(ret_list)) { */
+/* 			char *object = NULL; */
+/* 			ListIterator itr = list_iterator_create(ret_list); */
+/* 			printf(" Modified account defaults for " */
+/* 			       "associations...\n"); */
+/* 			while((object = list_next(itr)))  */
+/* 				printf("  %s\n", object); */
+/* 			list_iterator_destroy(itr); */
+/* 		} */
+ 
+		if(ret_list) {
+			printf("%s", my_info);
+			list_destroy(ret_list);
+		} else
+			changed = 0;
+		xfree(my_info);
+	}
+	xfree(desc);
+	xfree(org);
+	return changed;
+}
+
+static int _mod_user(sacctmgr_file_opts_t *file_opts,
+		     acct_user_rec_t *user, char *cluster, char *parent)
+{
+	int rc;
+	int set = 0;
+	int changed = 0;
+	char *def_acct = NULL, *def_wckey = NULL, *my_info = NULL;
+	acct_user_rec_t mod_user;
+	acct_user_cond_t user_cond;
+	List ret_list = NULL;
+	acct_association_cond_t assoc_cond;
+
+	if(!user || !user->name) {
+		fatal(" We need a user name in _mod_user");
+	}
+
+	memset(&mod_user, 0, sizeof(acct_user_rec_t));
+	memset(&user_cond, 0, sizeof(acct_user_cond_t));
+	memset(&assoc_cond, 0, sizeof(acct_association_cond_t));
+				
+	assoc_cond.user_list = list_create(NULL);
+	list_append(assoc_cond.user_list, user->name);
+	user_cond.assoc_cond = &assoc_cond;
 
-		assoc_cond.acct_list = list_create(NULL); 
-		list_push(assoc_cond.acct_list, assoc->acct);
-		
-		if(mod_type == MOD_USER) {
-			assoc_cond.user_list = list_create(NULL); 
-			list_push(assoc_cond.user_list, assoc->user);
-			if(assoc->partition) {
-				assoc_cond.partition_list = list_create(NULL); 
-				list_push(assoc_cond.partition_list,
-					  assoc->partition);
-			}
-		}
-			
+	if(file_opts->def_acct)
+		def_acct = xstrdup(file_opts->def_acct);
+
+	if(def_acct && 
+	   (!user->default_acct || strcmp(def_acct, user->default_acct))) {
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8s -> %s\n",
+			   " Changed Default Account", "User",
+			   user->name,
+			   user->default_acct,
+			   def_acct);
+		mod_user.default_acct = def_acct;
+		changed = 1;
+	}
+									
+	if(file_opts->def_wckey)
+		def_wckey = xstrdup(file_opts->def_wckey);
+
+	if(def_wckey && 
+	   (!user->default_wckey || strcmp(def_wckey, user->default_wckey))) {
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8s -> %s\n",
+			   " Changed Default WCKey", "User",
+			   user->name,
+			   user->default_wckey,
+			   def_wckey);
+		mod_user.default_wckey = def_wckey;
+		changed = 1;
+	}
+								
+	if(user->admin_level != ACCT_ADMIN_NOTSET
+	   && file_opts->admin != ACCT_ADMIN_NOTSET
+	   && user->admin_level != file_opts->admin) {
+		xstrfmtcat(my_info, 
+			   "%-30.30s for %-7.7s %-10.10s %8s -> %s\n",
+			   " Changed Admin Level", "User",
+			   user->name,
+			   acct_admin_level_str(
+				   user->admin_level),
+			   acct_admin_level_str(
+				   file_opts->admin));
+		mod_user.admin_level = file_opts->admin;
+		changed = 1;
+	}
+									
+	if(changed) {
 		notice_thread_init();
-		ret_list = acct_storage_g_modify_associations(
+		ret_list = acct_storage_g_modify_users(
 			db_conn, my_uid,
-			&assoc_cond, 
-			&mod_assoc);
+			&user_cond, 
+			&mod_user);
 		notice_thread_fini();
 					
-		if(mod_assoc.qos_list)
-			list_destroy(mod_assoc.qos_list);
-
-		list_destroy(assoc_cond.cluster_list);
-		list_destroy(assoc_cond.acct_list);
-		if(assoc_cond.user_list)
-			list_destroy(assoc_cond.user_list);
-		if(assoc_cond.partition_list)
-			list_destroy(assoc_cond.partition_list);
-
 /* 		if(ret_list && list_count(ret_list)) { */
 /* 			char *object = NULL; */
 /* 			ListIterator itr = list_iterator_create(ret_list); */
-/* 			printf(" Modified account defaults for " */
+/* 			printf(" Modified user defaults for " */
 /* 			       "associations...\n"); */
 /* 			while((object = list_next(itr)))  */
 /* 				printf("  %s\n", object); */
@@ -1494,12 +1412,168 @@ static int _mod_assoc(sacctmgr_file_opts_t *file_opts,
 		if(ret_list) {
 			printf("%s", my_info);
 			list_destroy(ret_list);
-		} else
-			changed = 0;
+			set = 1;
+		} 
 		xfree(my_info);
 	}
+	xfree(def_acct);
+	xfree(def_wckey);
 
-	return changed;
+	if((!user->coord_accts || !list_count(user->coord_accts))
+		  && (file_opts->coord_list 
+		      && list_count(file_opts->coord_list))) {
+		ListIterator coord_itr = NULL;
+		char *temp_char = NULL;
+		acct_coord_rec_t *coord = NULL;
+		int first = 1;
+		notice_thread_init();
+		rc = acct_storage_g_add_coord(db_conn, my_uid, 
+					      file_opts->coord_list,
+					      &user_cond);
+		notice_thread_fini();
+
+		user->coord_accts = list_create(destroy_acct_coord_rec);
+		coord_itr = list_iterator_create(file_opts->coord_list);
+		printf(" Making User '%s' coordinator for account(s)",
+		       user->name);
+		while((temp_char = list_next(coord_itr))) {
+			coord = xmalloc(sizeof(acct_coord_rec_t));
+			coord->name = xstrdup(temp_char);
+			coord->direct = 1;
+			list_push(user->coord_accts, coord);
+
+			if(first) {
+				printf(" %s", temp_char);
+				first = 0;
+			} else
+				printf(", %s", temp_char);
+		}
+		list_iterator_destroy(coord_itr);
+		printf("\n");
+		set = 1;
+	} else if((user->coord_accts && list_count(user->coord_accts))
+		  && (file_opts->coord_list 
+		      && list_count(file_opts->coord_list))) {
+		ListIterator coord_itr = NULL;
+		ListIterator char_itr = NULL;
+		char *temp_char = NULL;
+		acct_coord_rec_t *coord = NULL;
+		List add_list = list_create(NULL);
+
+		coord_itr = list_iterator_create(user->coord_accts);
+		char_itr = list_iterator_create(file_opts->coord_list);
+
+		while((temp_char = list_next(char_itr))) {
+			while((coord = list_next(coord_itr))) {
+				if(!coord->direct)
+					continue;
+				if(!strcmp(coord->name, temp_char)) {
+					break;
+				}
+			}
+			if(!coord) {
+				printf(" Making User '%s' coordinator of "
+				       "account '%s'\n",
+				       user->name,
+				       temp_char);
+					
+				list_append(add_list, temp_char);
+			}
+			list_iterator_reset(coord_itr);
+		}
+
+		list_iterator_destroy(char_itr);
+		list_iterator_destroy(coord_itr);
+
+		if(list_count(add_list)) {
+			notice_thread_init();
+			rc = acct_storage_g_add_coord(db_conn, my_uid, 
+						      add_list,
+						      &user_cond);
+			notice_thread_fini();
+			set = 1;
+		}
+		list_destroy(add_list);
+	}
+
+	if((!user->wckey_list || !list_count(user->wckey_list))
+		  && (file_opts->wckey_list 
+		      && list_count(file_opts->wckey_list))) {
+		ListIterator wckey_itr = NULL;
+		char *temp_char = NULL;
+		acct_wckey_rec_t *wckey = NULL;
+		int first = 1;
+
+		user->wckey_list = list_create(destroy_acct_wckey_rec);
+		wckey_itr = list_iterator_create(file_opts->wckey_list);
+		printf(" Adding WCKey(s) ");
+		while((temp_char = list_next(wckey_itr))) {
+			wckey = xmalloc(sizeof(acct_wckey_rec_t));
+			wckey->name = xstrdup(temp_char);
+			wckey->cluster = xstrdup(cluster);
+			wckey->user = xstrdup(user->name);
+			list_push(user->wckey_list, wckey);
+
+			if(first) {
+				printf("'%s'", temp_char);
+				first = 0;
+			} else
+				printf(", '%s'", temp_char);
+		}
+		list_iterator_destroy(wckey_itr);
+		printf(" for user '%s'\n", user->name);
+		set = 1;
+		notice_thread_init();
+		rc = acct_storage_g_add_wckeys(db_conn, my_uid, 
+					       user->wckey_list);
+		notice_thread_fini();
+	} else if((user->wckey_list && list_count(user->wckey_list))
+		  && (file_opts->wckey_list 
+		      && list_count(file_opts->wckey_list))) {
+		ListIterator wckey_itr = NULL;
+		ListIterator char_itr = NULL;
+		char *temp_char = NULL;
+		acct_wckey_rec_t *wckey = NULL;
+		List add_list = list_create(destroy_acct_wckey_rec);
+
+		wckey_itr = list_iterator_create(user->wckey_list);
+		char_itr = list_iterator_create(file_opts->wckey_list);
+
+		while((temp_char = list_next(char_itr))) {
+			while((wckey = list_next(wckey_itr))) {
+				if(!strcmp(wckey->name, temp_char)) 
+					break;
+			}
+			if(!wckey) {
+				printf(" Adding WCKey '%s' to User '%s'\n",
+				       temp_char, user->name);
+				wckey = xmalloc(sizeof(acct_wckey_rec_t));
+				wckey->name = xstrdup(temp_char);
+				wckey->cluster = xstrdup(cluster);
+				wckey->user = xstrdup(user->name);
+					
+				list_append(add_list, wckey);
+			}
+			list_iterator_reset(wckey_itr);
+		}
+
+		list_iterator_destroy(char_itr);
+		list_iterator_destroy(wckey_itr);
+
+		if(list_count(add_list)) {
+			notice_thread_init();
+			rc = acct_storage_g_add_wckeys(db_conn, my_uid, 
+						       add_list);
+			notice_thread_fini();
+			set = 1;
+		}
+		list_transfer(user->wckey_list, add_list);
+		list_destroy(add_list);
+	}
+
+	list_destroy(assoc_cond.user_list);
+
+	return set;
 }
 
 static acct_user_rec_t *_set_user_up(sacctmgr_file_opts_t *file_opts,
@@ -1641,7 +1715,7 @@ static acct_association_rec_t *_set_assoc_up(sacctmgr_file_opts_t *file_opts,
 	}
 
 	
-	assoc->fairshare = file_opts->fairshare;
+	assoc->shares_raw = file_opts->fairshare;
 	
 	assoc->grp_cpu_mins = file_opts->grp_cpu_mins;
 	assoc->grp_cpus = file_opts->grp_cpus;
@@ -1801,8 +1875,8 @@ extern int print_file_add_limits_to_line(char **line,
 	if(!assoc)
 		return SLURM_ERROR;
 
-	if(assoc->fairshare != INFINITE)
-		xstrfmtcat(*line, ":Fairshare=%u", assoc->fairshare);
+	if(assoc->shares_raw != INFINITE)
+		xstrfmtcat(*line, ":Fairshare=%u", assoc->shares_raw);
 		
 	if(assoc->grp_cpu_mins != INFINITE)
 		xstrfmtcat(*line, ":GrpCPUMins=%llu", assoc->grp_cpu_mins);
@@ -2169,7 +2243,7 @@ extern void load_sacctmgr_cfg_file (int argc, char *argv[])
 				db_conn, my_uid, NULL);
 
 			if(cluster_name) 
-				info("For cluster %s", cluster_name);
+				printf("For cluster %s\n", cluster_name);
 			
 			if(!(cluster = sacctmgr_find_cluster_from_list(
 				     curr_cluster_list, cluster_name))) {
@@ -2180,6 +2254,15 @@ extern void load_sacctmgr_cfg_file (int argc, char *argv[])
 				cluster = xmalloc(sizeof(acct_cluster_rec_t));
 				list_append(cluster_list, cluster);
 				cluster->name = xstrdup(cluster_name);
+				if(file_opts->classification) {
+					cluster->classification =
+						file_opts->classification;
+					printf("Classification: %s\n", 
+					       get_classification_str(
+						       cluster->
+						       classification));
+				}
+
 				cluster->root_assoc = _set_assoc_up(
 					file_opts, MOD_CLUSTER,
 					cluster_name, "root");
@@ -2205,8 +2288,8 @@ extern void load_sacctmgr_cfg_file (int argc, char *argv[])
 				}
 				set = 1;
 			} else {
-				set = _mod_assoc(file_opts, cluster->root_assoc,
-						 MOD_CLUSTER, parent);
+				set = _mod_cluster(file_opts,
+						   cluster, parent);
 			}
 				     
 			_destroy_sacctmgr_file_opts(file_opts);
diff --git a/src/sacctmgr/qos_functions.c b/src/sacctmgr/qos_functions.c
index e1c36fec2..a936b2dbf 100644
--- a/src/sacctmgr/qos_functions.c
+++ b/src/sacctmgr/qos_functions.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002-2008 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -324,6 +325,14 @@ static int _set_rec(int *start, int argc, char *argv[],
 			if (get_uint(argv[i]+end, &qos->priority,
 			    "Priority") == SLURM_SUCCESS)
 				set = 1;
+		} else if (!strncasecmp (argv[i], "UsageFactor", 
+					 MAX(command_len, 3))) {
+			if(!qos)
+				continue;
+			
+			if (get_double(argv[i]+end, &qos->usage_factor,
+			    "UsageFactor") == SLURM_SUCCESS)
+				set = 1;
 		} else {
 			printf(" Unknown option: %s\n"
 			       " Use keyword 'where' to modify condition\n",
@@ -352,8 +361,14 @@ extern int sacctmgr_add_qos(int argc, char *argv[])
 
 	init_acct_qos_rec(start_qos);
 
-	for (i=0; i<argc; i++) 
-		limit_set = _set_rec(&i, argc, argv, name_list, start_qos);
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+
+		limit_set += _set_rec(&i, argc, argv, name_list, start_qos);
+	}
 
 	if(exit_code) {
 		list_destroy(name_list);
@@ -412,6 +427,8 @@ extern int sacctmgr_add_qos(int argc, char *argv[])
 
 			qos->priority = start_qos->priority;
 
+			qos->usage_factor = start_qos->usage_factor;
+
 			xstrfmtcat(qos_str, "  %s\n", name);
 			list_append(qos_list, qos);
 		}
@@ -501,9 +518,16 @@ extern int sacctmgr_list_qos(int argc, char *argv[])
 		PRINT_MAXN,
 		PRINT_MAXS,
 		PRINT_MAXW,
+		PRINT_UF,
 	};
 
-	_set_cond(&i, argc, argv, qos_cond, format_list);
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		_set_cond(&i, argc, argv, qos_cond, format_list);
+	}
 
 	if(exit_code) {
 		destroy_acct_qos_cond(qos_cond);
@@ -614,7 +638,7 @@ extern int sacctmgr_list_qos(int argc, char *argv[])
 			field->print_routine = print_fields_time;
 		} else if(!strncasecmp("Name", object, MAX(command_len, 1))) {
 			field->type = PRINT_NAME;
-			field->name = xstrdup("NAME");
+			field->name = xstrdup("Name");
 			field->len = 10;
 			field->print_routine = print_fields_str;
 		} else if(!strncasecmp("Priority", object,
@@ -623,6 +647,12 @@ extern int sacctmgr_list_qos(int argc, char *argv[])
 			field->name = xstrdup("Priority");
 			field->len = 10;
 			field->print_routine = print_fields_int;
+		} else if(!strncasecmp("UsageFactor", object,
+				       MAX(command_len, 1))) {
+			field->type = PRINT_UF;
+			field->name = xstrdup("UsageFactor");
+			field->len = 11;
+			field->print_routine = print_fields_double;
 		} else {
 			exit_code=1;
 			fprintf(stderr, "Unknown field '%s'\n", object);
@@ -630,7 +660,7 @@ extern int sacctmgr_list_qos(int argc, char *argv[])
 			continue;
 		}
 
-		if(newlen > 0) 
+		if(newlen) 
 			field->len = newlen;
 		
 		list_append(print_fields_list, field);		
@@ -750,6 +780,11 @@ extern int sacctmgr_list_qos(int argc, char *argv[])
 					field, qos->priority,
 					(curr_inx == field_count));
 				break;
+			case PRINT_UF:
+				field->print_routine(
+					field, qos->usage_factor,
+					(curr_inx == field_count));
+				break;
 			default:
 				field->print_routine(
 					field, NULL,
@@ -784,13 +819,13 @@ extern int sacctmgr_modify_qos(int argc, char *argv[])
 		int command_len = strlen(argv[i]);
 		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) {
 			i++;
-			cond_set = _set_cond(&i, argc, argv, qos_cond, NULL);
+			cond_set += _set_cond(&i, argc, argv, qos_cond, NULL);
 			      
 		} else if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) {
 			i++;
-			rec_set = _set_rec(&i, argc, argv, NULL, qos);
+			rec_set += _set_rec(&i, argc, argv, NULL, qos);
 		} else {
-			cond_set = _set_cond(&i, argc, argv, qos_cond, NULL);
+			cond_set += _set_cond(&i, argc, argv, qos_cond, NULL);
 		}
 	}
 
@@ -863,7 +898,15 @@ extern int sacctmgr_delete_qos(int argc, char *argv[])
 	List ret_list = NULL;
 	int set = 0;
 	
-	if(!(set = _set_cond(&i, argc, argv, qos_cond, NULL))) {
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		set += _set_cond(&i, argc, argv, qos_cond, NULL);
+	}
+
+	if(!set) {
 		exit_code=1;
 		fprintf(stderr, 
 			" No conditions given to remove, not executing.\n");
diff --git a/src/sacctmgr/sacctmgr.c b/src/sacctmgr/sacctmgr.c
index 45187b98f..1e456d293 100644
--- a/src/sacctmgr/sacctmgr.c
+++ b/src/sacctmgr/sacctmgr.c
@@ -3,14 +3,15 @@
  *	         provides interface to read, write, update, and configure
  *               accounting.
  *****************************************************************************
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -77,15 +78,15 @@ main (int argc, char *argv[])
 	int option_index;
 	static struct option long_options[] = {
 		{"help",     0, 0, 'h'},
+		{"usage",    0, 0, 'h'},
 		{"immediate",0, 0, 'i'},
+		{"noheader",0, 0, 'n'},
 		{"oneliner", 0, 0, 'o'},
-		{"no_header", 0, 0, 'n'},
 		{"parsable", 0, 0, 'p'},
 		{"parsable2", 0, 0, 'P'},
 		{"quiet",    0, 0, 'q'},
 		{"readonly", 0, 0, 'r'},
 		{"associations", 0, 0, 's'},
-		{"usage",    0, 0, 'h'},
 		{"verbose",  0, 0, 'v'},
 		{"version",  0, 0, 'V'},
 		{NULL,       0, 0, 0}
@@ -185,13 +186,18 @@ main (int argc, char *argv[])
 		exit(1);
 	}
 	xfree(temp);
+
 	/* always do a rollback.  If you don't then if there is an
 	 * error you can not rollback ;)
 	 */
 	errno = 0;
 	db_conn = acct_storage_g_get_connection(false, 0, 1);
 	if(errno != SLURM_SUCCESS) {
-		error("sacctmgr: %m");
+		if((input_field_count == 2) &&
+		   (!strncasecmp(argv[2], "Configuration", strlen(argv[1]))) &&
+		   ((!strncasecmp(argv[1], "list", strlen(argv[0]))) || 
+		    (!strncasecmp(argv[1], "show", strlen(argv[0])))))
+			sacctmgr_list_config(false);
 		exit(1);
 	}
 	my_uid = getuid();
@@ -405,7 +411,8 @@ _process_command (int argc, char *argv[])
 	} else if ((strncasecmp (argv[0], "show", MAX(command_len, 3)) == 0) ||
 		   (strncasecmp (argv[0], "list", MAX(command_len, 3)) == 0)) {
 		_show_it((argc - 1), &argv[1]);
-	} else if (strncasecmp (argv[0], "modify", MAX(command_len, 1)) == 0) {
+	} else if (!strncasecmp (argv[0], "modify", MAX(command_len, 1))
+		   || !strncasecmp (argv[0], "update", MAX(command_len, 1))) {
 		_modify_it((argc - 1), &argv[1]);
 	} else if ((strncasecmp (argv[0], "delete",
 				 MAX(command_len, 3)) == 0) ||
@@ -430,8 +437,10 @@ _process_command (int argc, char *argv[])
 		}		
 		readonly_flag = 1;
 	} else if (strncasecmp (argv[0], "rollup", MAX(command_len, 2)) == 0) {
-		time_t my_time = 0;
-		if (argc > 2) {
+		time_t my_start = 0;
+		time_t my_end = 0;
+		uint16_t archive_data = 0;
+		if (argc > 4) {
 			exit_code = 1;
 			fprintf (stderr,
 				 "too many arguments for %s keyword\n",
@@ -439,8 +448,13 @@ _process_command (int argc, char *argv[])
 		}
 
 		if(argc > 1)
-			my_time = parse_time(argv[1], 1);
-		if(acct_storage_g_roll_usage(db_conn, my_time)
+			my_start = parse_time(argv[1], 1);
+		if(argc > 2)
+			my_end = parse_time(argv[2], 1);
+		if(argc > 3)
+			archive_data = atoi(argv[3]);
+		if(acct_storage_g_roll_usage(db_conn, my_start, 
+					     my_end, archive_data)
 		   == SLURM_SUCCESS) {
 			if(commit_check("Would you like to commit rollup?")) {
 				acct_storage_g_commit(db_conn, 1);
@@ -586,6 +600,9 @@ static void _show_it (int argc, char *argv[])
 	} else if (strncasecmp (argv[0], "Clusters", 
 				MAX(command_len, 1)) == 0) {
 		error_code = sacctmgr_list_cluster((argc - 1), &argv[1]);
+	} else if (strncasecmp (argv[0], "Configuration", 
+				MAX(command_len, 1)) == 0) {
+		error_code = sacctmgr_list_config(true);
 	} else if (strncasecmp (argv[0], "QOS", MAX(command_len, 1)) == 0) {
 		error_code = sacctmgr_list_qos((argc - 1), &argv[1]);
 	} else if (strncasecmp (argv[0], "Transactions", 
@@ -714,7 +731,7 @@ sacctmgr [<OPTION>] [<COMMAND>]                                            \n\
     Valid <OPTION> values are:                                             \n\
      -h or --help: equivalent to \"help\" command                          \n\
      -i or --immediate: commit changes immediately                         \n\
-     -n or --no_header: no header will be added to the beginning of output \n\
+     -n or --noheader: no header will be added to the beginning of output  \n\
      -o or --oneliner: equivalent to \"oneliner\" command                  \n\
      -p or --parsable: output will be '|' delimited with a '|' at the end  \n\
      -P or --parsable2: output will be '|' delimited without a '|' at the end\n\
@@ -758,17 +775,17 @@ sacctmgr [<OPTION>] [<COMMAND>]                                            \n\
      oneliner                 report output one record per line.           \n\
      parsable                 output will be | delimited with an ending '|'\n\
      parsable2                output will be | delimited without an ending '|'\n\
-     readonly                 makes it so no modification can happen.      \n\
      quiet                    print no messages other than error messages. \n\
      quit                     terminate this command.                      \n\
+     readonly                 makes it so no modification can happen.      \n\
      show                     same as list                                 \n\
      verbose                  enable detailed logging.                     \n\
      version                  display tool version number.                 \n\
      !!                       Repeat the last command entered.             \n\
                                                                            \n\
   <ENTITY> may be \"account\", \"association\", \"cluster\",               \n\
-                  \"coordinator\", \"qos\", \"transaction\", \"user\",     \n\
-                  or \"wckey\"                                             \n\
+                  \"configuration\", \"coordinator\", \"qos\",             \n\
+                  \"transaction\", \"user\",or \"wckey\"                   \n\
                                                                            \n\
   <SPECS> are different for each command entity pair.                      \n\
        list account       - Clusters=, Descriptions=, Format=, Names=,     \n\
@@ -789,19 +806,18 @@ sacctmgr [<OPTION>] [<COMMAND>]                                            \n\
        delete account     - Clusters=, Descriptions=, Names=,              \n\
                             Organizations=, and Parents=                   \n\
                                                                            \n\
-       list associations  - Accounts=, Clusters=, Format=, IDs=,            \n\
+       list associations  - Accounts=, Clusters=, Format=, IDs=,           \n\
                             Partitions=, Parent=, Tree, Users=,            \n\
                             WithSubAccounts, WithDeleted, WOPInfo,         \n\
                             and WOPLimits                                  \n\
                                                                            \n\
        list cluster       - Format=, Names=                                \n\
-       add cluster        - Fairshare=, GrpCPUMins=, GrpCPUs=, GrpJobs=,   \n\
-                            GrpNodes=, GrpSubmitJob=, GrpWall=, MaxCPUMins=\n\
+       add cluster        - Fairshare=, GrpCPUs=, GrpJobs=,                \n\
+                            GrpNodes=, GrpSubmitJob=, MaxCPUMins=          \n\
                             MaxJobs=, MaxNodes=, MaxWall=, and Name=       \n\
-       modify cluster     - (set options) Fairshare=, GrpCPUMins=,         \n\
+       modify cluster     - (set options) Fairshare=,                      \n\
                             GrpCPUs=, GrpJobs=, GrpNodes=, GrpSubmitJob=,  \n\
-                            GrpWall=, MaxCPUMins=, MaxJobs=, MaxNodes=,    \n\
-                            and MaxWall=                                   \n\
+                            MaxCPUMins=, MaxJobs=, MaxNodes=, and MaxWall= \n\
                             (where options) Names=                         \n\
        delete cluster     - Names=                                         \n\
                                                                            \n\
@@ -841,8 +857,9 @@ sacctmgr [<OPTION>] [<COMMAND>]                                            \n\
        list wckey         - Clusters=, End=, Format=, IDs=, Names=,        \n\
                             Start=, User=, and WCKeys=                     \n\
                                                                            \n\
-       archive dump       - Directory=, Jobs, PurgeJobsBefore=,            \n\
-                            PurgeStepsBefore=, Script=, and Steps          \n\
+       archive dump       - Directory=, Events, Jobs, PurgeEventMonths=,   \n\
+                            PurgeJobMonths=, PurgeStepMonths=,             \n\
+                            PurgeSuspendMonths=, Script=, Steps and Suspend\n\
                                                                            \n\
        archive load       - File=, or Insert=                              \n\
                                                                            \n\
@@ -858,10 +875,11 @@ sacctmgr [<OPTION>] [<COMMAND>]                                            \n\
                             ParentID, ParentName, Partition, RawQOS, RGT,  \n\
                             User                                           \n\
                                                                            \n\
-       Cluster            - Cluster, ControlHost, ControlPort, Fairshare   \n\
-                            GrpCPUMins, GrpCPUs, GrpJobs, GrpNodes,        \n\
-                            GrpSubmitJob, GrpWall, MaxCPUs, MaxCPUMins,    \n\
-                            MaxJobs, MaxNodes, MaxSubmitJobs, MaxWall      \n\
+       Cluster            - Cluster, ControlHost, ControlPort, CpuCount,   \n\
+                            Fairshare, GrpCPUs, GrpJobs,                   \n\
+                            GrpNodes, GrpSubmitJob, MaxCPUs,               \n\
+                            MaxCPUMins, MaxJobs, MaxNodes, MaxSubmitJobs,  \n\
+                            MaxWall, NodeCount, NodeNames                  \n\
                                                                            \n\
        QOS                - Description, ID, Name                          \n\
                                                                            \n\
diff --git a/src/sacctmgr/sacctmgr.h b/src/sacctmgr/sacctmgr.h
index 74b84f116..b88cb7008 100644
--- a/src/sacctmgr/sacctmgr.h
+++ b/src/sacctmgr/sacctmgr.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  sacctmgr.h - definitions for all sacctmgr modules.
  *****************************************************************************
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -109,6 +110,7 @@ extern int sacctmgr_list_association(int argc, char *argv[]);
 extern int sacctmgr_list_user(int argc, char *argv[]);
 extern int sacctmgr_list_account(int argc, char *argv[]);
 extern int sacctmgr_list_cluster(int argc, char *argv[]);
+extern int sacctmgr_list_config(bool have_db_conn);
 extern int sacctmgr_list_qos(int argc, char *argv[]);
 extern int sacctmgr_list_wckey(int argc, char *argv[]);
 
@@ -138,6 +140,7 @@ extern int commit_check(char *warning);
 extern int get_uint(char *in_value, uint32_t *out_value, char *type);
 extern int get_uint16(char *in_value, uint16_t *out_value, char *type);
 extern int get_uint64(char *in_value, uint64_t *out_value, char *type);
+extern int get_double(char *in_value, double *out_value, char *type);
 extern int addto_qos_char_list(List char_list, List qos_list, char *names, 
 			       int option);
 extern int addto_action_char_list(List char_list, char *names);
diff --git a/src/sacctmgr/txn_functions.c b/src/sacctmgr/txn_functions.c
index bc978aac0..b92c8526d 100644
--- a/src/sacctmgr/txn_functions.c
+++ b/src/sacctmgr/txn_functions.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -190,7 +191,13 @@ extern int sacctmgr_list_txn(int argc, char *argv[])
 		PRINT_WHERE
 	};
 
-	_set_cond(&i, argc, argv, txn_cond, format_list);
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		_set_cond(&i, argc, argv, txn_cond, format_list);
+	}
 
 	if(exit_code) {
 		destroy_acct_txn_cond(txn_cond);
@@ -264,7 +271,7 @@ extern int sacctmgr_list_txn(int argc, char *argv[])
 				       MAX(command_len, 1))) {
 			field->type = PRINT_TS;
 			field->name = xstrdup("Time");
-			field->len = 15;
+			field->len = 19;
 			field->print_routine = print_fields_date;
 		} else if(!strncasecmp("Users", object, MAX(command_len, 4))) {
 			field->type = PRINT_USER;
@@ -283,7 +290,7 @@ extern int sacctmgr_list_txn(int argc, char *argv[])
 			continue;
 		}
 
-		if(newlen > 0) 
+		if(newlen) 
 			field->len = newlen;
 		
 		list_append(print_fields_list, field);		
diff --git a/src/sacctmgr/user_functions.c b/src/sacctmgr/user_functions.c
index 3b3835180..48dbf57ac 100644
--- a/src/sacctmgr/user_functions.c
+++ b/src/sacctmgr/user_functions.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -379,7 +380,7 @@ static int _set_rec(int *start, int argc, char *argv[],
 					 MAX(command_len, 1))) {
 			if(!assoc)
 				continue;
-			if (get_uint(argv[i]+end, &assoc->fairshare, 
+			if (get_uint(argv[i]+end, &assoc->shares_raw, 
 				     "FairShare") == SLURM_SUCCESS)
 				a_set = 1;
 		} else if (!strncasecmp (argv[i], "GrpCPUMins",
@@ -530,8 +531,9 @@ static int _set_rec(int *start, int argc, char *argv[],
 static int _check_coord_request(acct_user_cond_t *user_cond, bool check)
 {
 	ListIterator itr = NULL, itr2 = NULL;
-	char *name = NULL, *name2 = NULL;
-
+	char *name = NULL;
+	acct_user_rec_t *user_rec = NULL;
+	acct_account_rec_t *acct_rec = NULL;
 	acct_account_cond_t account_cond;
 	List local_acct_list = NULL;
 	List local_user_list = NULL;
@@ -568,20 +570,20 @@ static int _check_coord_request(acct_user_cond_t *user_cond, bool check)
 		return SLURM_ERROR;
 	}
 
-	if(user_cond->assoc_cond->acct_list && 
-	   (list_count(local_acct_list) != 
+	if(user_cond->assoc_cond->acct_list &&
+	   (list_count(local_acct_list) !=
 	    list_count(user_cond->assoc_cond->acct_list))) {
 		
 		itr = list_iterator_create(user_cond->assoc_cond->acct_list);
 		itr2 = list_iterator_create(local_acct_list);
 		
 		while((name = list_next(itr))) {
-			while((name2 = list_next(itr2))) {
-				if(!strcmp(name, name2)) 
+			while((acct_rec = list_next(itr2))) {
+				if(!strcmp(name, acct_rec->name)) 
 					break;
 			}
 			list_iterator_reset(itr2);
-			if(!name2) {
+			if(!acct_rec) {
 				fprintf(stderr, 
 					" You specified a non-existant "
 					"account '%s'.\n", name); 
@@ -604,19 +606,19 @@ static int _check_coord_request(acct_user_cond_t *user_cond, bool check)
 	}
 
 	if(user_cond->assoc_cond->user_list &&
-	   (list_count(local_user_list) != 
+	   (list_count(local_user_list) !=
 	    list_count(user_cond->assoc_cond->user_list))) {
 		
 		itr = list_iterator_create(user_cond->assoc_cond->user_list);
 		itr2 = list_iterator_create(local_user_list);
 		
 		while((name = list_next(itr))) {
-			while((name2 = list_next(itr2))) {
-				if(!strcmp(name, name2)) 
+			while((user_rec = list_next(itr2))) {
+				if(!strcmp(name, user_rec->name)) 
 					break;
 			}
 			list_iterator_reset(itr2);
-			if(!name2) {
+			if(!user_rec) {
 				fprintf(stderr, 
 					" You specified a non-existant "
 					"user '%s'.\n", name); 
@@ -750,7 +752,7 @@ extern int sacctmgr_add_user(int argc, char *argv[])
 					 MAX(command_len, 1))
 			   || !strncasecmp (argv[i], "Shares",
 					 MAX(command_len, 1))) {
-			if (get_uint(argv[i]+end, &start_assoc.fairshare, 
+			if (get_uint(argv[i]+end, &start_assoc.shares_raw, 
 			    "FairShare") == SLURM_SUCCESS)
 				limit_set = 1;
 		} else if (!strncasecmp (argv[i], "GrpCPUMins",
@@ -1149,8 +1151,8 @@ extern int sacctmgr_add_user(int argc, char *argv[])
 					assoc->cluster = xstrdup(cluster);
 					assoc->partition = xstrdup(partition);
 					
-					assoc->fairshare = 
-						start_assoc.fairshare;
+					assoc->shares_raw = 
+						start_assoc.shares_raw;
 
 					assoc->grp_cpu_mins = 
 						start_assoc.grp_cpu_mins;
@@ -1207,7 +1209,7 @@ extern int sacctmgr_add_user(int argc, char *argv[])
 				assoc->acct = xstrdup(account);
 				assoc->cluster = xstrdup(cluster);
 
-				assoc->fairshare = start_assoc.fairshare;
+				assoc->shares_raw = start_assoc.shares_raw;
 
 				assoc->grp_cpu_mins = 
 					start_assoc.grp_cpu_mins;
@@ -1391,7 +1393,11 @@ extern int sacctmgr_add_coord(int argc, char *argv[])
 	ListIterator itr = NULL;
 
 	for (i=0; i<argc; i++) {
-		cond_set = _set_cond(&i, argc, argv, user_cond, NULL);
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		cond_set += _set_cond(&i, argc, argv, user_cond, NULL);
 	}
 
 	if(exit_code) {
@@ -1499,7 +1505,13 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 
 	user_cond->with_assocs = with_assoc_flag;
 
-	set = _set_cond(&i, argc, argv, user_cond, format_list);
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		set += _set_cond(&i, argc, argv, user_cond, format_list);
+	}
 
 	if(exit_code) {
 		destroy_acct_user_cond(user_cond);
@@ -1711,7 +1723,7 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 			continue;
 		}
 
-		if(newlen > 0) 
+		if(newlen) 
 			field->len = newlen;
 		
 		list_append(print_fields_list, field);		
@@ -1801,7 +1813,7 @@ extern int sacctmgr_list_user(int argc, char *argv[])
 					case PRINT_FAIRSHARE:
 						field->print_routine(
 							field,
-							assoc->fairshare,
+							assoc->shares_raw,
 							(curr_inx == 
 							 field_count));
 						break;
@@ -2066,13 +2078,13 @@ extern int sacctmgr_modify_user(int argc, char *argv[])
 		int command_len = strlen(argv[i]);
 		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) {
 			i++;
-			cond_set = _set_cond(&i, argc, argv, user_cond, NULL);
+			cond_set += _set_cond(&i, argc, argv, user_cond, NULL);
 			      
 		} else if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) {
 			i++;
-			rec_set = _set_rec(&i, argc, argv, user, assoc);
+			rec_set += _set_rec(&i, argc, argv, user, assoc);
 		} else {
-			cond_set = _set_cond(&i, argc, argv, user_cond, NULL);
+			cond_set += _set_cond(&i, argc, argv, user_cond, NULL);
 		}
 	}
 
@@ -2212,7 +2224,15 @@ extern int sacctmgr_delete_user(int argc, char *argv[])
 	List ret_list = NULL;
 	int set = 0;
 
-	if(!(set = _set_cond(&i, argc, argv, user_cond, NULL))) {
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		set += _set_cond(&i, argc, argv, user_cond, NULL);
+	}
+
+	if(!set) {
 		exit_code=1;
 		fprintf(stderr, 
 			" No conditions given to remove, not executing.\n");
@@ -2284,7 +2304,11 @@ extern int sacctmgr_delete_coord(int argc, char *argv[])
 
 
 	for (i=0; i<argc; i++) {
-		cond_set = _set_cond(&i, argc, argv, user_cond, NULL);
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		cond_set += _set_cond(&i, argc, argv, user_cond, NULL);
 	}
 
 	if(exit_code) {
diff --git a/src/sacctmgr/wckey_functions.c b/src/sacctmgr/wckey_functions.c
index 40e9901b1..b3403ef8c 100644
--- a/src/sacctmgr/wckey_functions.c
+++ b/src/sacctmgr/wckey_functions.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -151,7 +152,7 @@ extern int sacctmgr_list_wckey(int argc, char *argv[])
 	int rc = SLURM_SUCCESS;
 	acct_wckey_cond_t *wckey_cond = xmalloc(sizeof(acct_wckey_cond_t));
 	List wckey_list = NULL;
-	int i=0, set=0;
+	int i=0;
 	ListIterator itr = NULL;
 	ListIterator itr2 = NULL;
 	acct_wckey_rec_t *wckey = NULL;
@@ -170,7 +171,13 @@ extern int sacctmgr_list_wckey(int argc, char *argv[])
 		PRINT_USER
 	};
 
-	set = _set_cond(&i, argc, argv, wckey_cond, format_list);
+	for (i=0; i<argc; i++) {
+		int command_len = strlen(argv[i]);
+		if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))
+		    || !strncasecmp (argv[i], "Set", MAX(command_len, 3))) 
+			i++;		
+		_set_cond(&i, argc, argv, wckey_cond, format_list);
+	}
 
 	if(exit_code) {
 		destroy_acct_wckey_cond(wckey_cond);
@@ -228,7 +235,7 @@ extern int sacctmgr_list_wckey(int argc, char *argv[])
 			continue;
 		}
 
-		if(newlen > 0) 
+		if(newlen) 
 			field->len = newlen;
 		
 		list_append(print_fields_list, field);		
diff --git a/src/salloc/Makefile.in b/src/salloc/Makefile.in
index a89476413..e0d34e142 100644
--- a/src/salloc/Makefile.in
+++ b/src/salloc/Makefile.in
@@ -44,14 +44,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -105,6 +109,10 @@ 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@
diff --git a/src/salloc/opt.c b/src/salloc/opt.c
index 14ea9975b..fca9cffee 100644
--- a/src/salloc/opt.c
+++ b/src/salloc/opt.c
@@ -2,13 +2,14 @@
  *  opt.c - options processing for salloc
  *****************************************************************************
  *  Copyright (C) 2002-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 Mark Grondona <grondona1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -61,13 +62,15 @@
 #include "src/common/list.h"
 #include "src/common/log.h"
 #include "src/common/parse_time.h"
+#include "src/common/plugstack.h"
 #include "src/common/proc_args.h"
+#include "src/common/read_config.h" /* contains getnodename() */
 #include "src/common/slurm_protocol_api.h"
+#include "src/common/slurm_resource_info.h"
+#include "src/common/slurm_rlimits_info.h"
 #include "src/common/uid.h"
 #include "src/common/xmalloc.h"
 #include "src/common/xstring.h"
-#include "src/common/slurm_rlimits_info.h"
-#include "src/common/read_config.h" /* contains getnodename() */
 
 #include "src/salloc/salloc.h"
 #include "src/salloc/opt.h"
@@ -77,21 +80,25 @@
 #define OPT_INT         0x01
 #define OPT_STRING      0x02
 #define OPT_DEBUG       0x03
-#define OPT_NODES       0x05
-#define OPT_BOOL        0x06
-#define OPT_CORE        0x07
-#define OPT_CONN_TYPE	0x08
-#define OPT_NO_ROTATE	0x0a
-#define OPT_GEOMETRY	0x0b
-#define OPT_BELL        0x0f
-#define OPT_NO_BELL     0x10
-#define OPT_JOBID       0x11
-#define OPT_EXCLUSIVE   0x12
-#define OPT_OVERCOMMIT  0x13
-#define OPT_ACCTG_FREQ  0x14
+#define OPT_NODES       0x04
+#define OPT_BOOL        0x05
+#define OPT_CORE        0x06
+#define OPT_CONN_TYPE	0x07
+#define OPT_NO_ROTATE	0x08
+#define OPT_GEOMETRY	0x09
+#define OPT_BELL        0x0a
+#define OPT_NO_BELL     0x0b
+#define OPT_JOBID       0x0c
+#define OPT_EXCLUSIVE   0x0d
+#define OPT_OVERCOMMIT  0x0e
+#define OPT_ACCTG_FREQ  0x0f
+#define OPT_CPU_BIND    0x10
+#define OPT_MEM_BIND    0x11
 #define OPT_WCKEY       0x15
 
 /* generic getopt_long flags, integers and *not* valid characters */
+#define LONG_OPT_CPU_BIND    0x101
+#define LONG_OPT_MEM_BIND    0x102
 #define LONG_OPT_JOBID       0x105
 #define LONG_OPT_TMP         0x106
 #define LONG_OPT_MEM         0x107
@@ -130,6 +137,7 @@
 #define LONG_OPT_HINT            0x13b
 #define LONG_OPT_ACCTG_FREQ      0x13c
 #define LONG_OPT_WCKEY           0x13d
+#define LONG_OPT_RESERVATION     0x13e
 
 /*---- global variables, defined in opt.h ----*/
 opt_t opt;
@@ -238,7 +246,10 @@ static void _opt_default()
 	opt.ntasks_per_node      = NO_VAL; /* ntask max limits */
 	opt.ntasks_per_socket    = NO_VAL;
 	opt.ntasks_per_core      = NO_VAL;
-	opt.cpu_bind_type = 0;		/* local dummy variable for now */
+	opt.cpu_bind_type = 0;
+	opt.cpu_bind = NULL;
+	opt.mem_bind_type = 0;
+	opt.mem_bind = NULL;
 	opt.time_limit = NO_VAL;
 	opt.time_limit_str = NULL;
 	opt.partition = NULL;
@@ -293,7 +304,8 @@ static void _opt_default()
 	opt.no_shell	    = false;
 	opt.get_user_env_time = -1;
 	opt.get_user_env_mode = -1;
-	opt.wckey = NULL;
+	opt.reservation     = NULL;
+	opt.wckey           = NULL;
 }
 
 /*---[ env var processing ]-----------------------------------------------*/
@@ -316,21 +328,23 @@ struct env_vars {
 
 env_vars_t env_vars[] = {
   {"SALLOC_ACCOUNT",       OPT_STRING,     &opt.account,       NULL           },
+  {"SALLOC_ACCTG_FREQ",    OPT_INT,        &opt.acctg_freq,    NULL           },
+  {"SALLOC_BELL",          OPT_BELL,       NULL,               NULL           },
   {"SALLOC_CONN_TYPE",     OPT_CONN_TYPE,  NULL,               NULL           },
+  {"SALLOC_CPU_BIND",      OPT_CPU_BIND,   NULL,               NULL           },
   {"SALLOC_DEBUG",         OPT_DEBUG,      NULL,               NULL           },
+  {"SALLOC_EXCLUSIVE",     OPT_EXCLUSIVE,  NULL,               NULL           },
   {"SALLOC_GEOMETRY",      OPT_GEOMETRY,   NULL,               NULL           },
   {"SALLOC_IMMEDIATE",     OPT_BOOL,       &opt.immediate,     NULL           },
   {"SALLOC_JOBID",         OPT_JOBID,      NULL,               NULL           },
+  {"SALLOC_MEM_BIND",      OPT_MEM_BIND,   NULL,               NULL           },
+  {"SALLOC_NETWORK",       OPT_STRING    , &opt.network,       NULL           },
+  {"SALLOC_NO_BELL",       OPT_NO_BELL,    NULL,               NULL           },
   {"SALLOC_NO_ROTATE",     OPT_NO_ROTATE,  NULL,               NULL           },
+  {"SALLOC_OVERCOMMIT",    OPT_OVERCOMMIT, NULL,               NULL           },
   {"SALLOC_PARTITION",     OPT_STRING,     &opt.partition,     NULL           },
   {"SALLOC_TIMELIMIT",     OPT_STRING,     &opt.time_limit_str,NULL           },
   {"SALLOC_WAIT",          OPT_INT,        &opt.max_wait,      NULL           },
-  {"SALLOC_BELL",          OPT_BELL,       NULL,               NULL           },
-  {"SALLOC_NO_BELL",       OPT_NO_BELL,    NULL,               NULL           },
-  {"SALLOC_EXCLUSIVE",     OPT_EXCLUSIVE,  NULL,               NULL           },
-  {"SALLOC_OVERCOMMIT",    OPT_OVERCOMMIT, NULL,               NULL           },
-  {"SALLOC_ACCTG_FREQ",    OPT_INT,        &opt.acctg_freq,    NULL           },
-  {"SALLOC_NETWORK",       OPT_STRING,     &opt.network,       NULL           },
   {"SALLOC_WCKEY",         OPT_STRING,     &opt.wckey,         NULL           },
   {NULL, 0, NULL, NULL}
 };
@@ -443,6 +457,16 @@ _process_env_var(env_vars_t *e, const char *val)
 	case OPT_OVERCOMMIT:
 		opt.overcommit = true;
 		break;
+	case OPT_CPU_BIND:
+		if (slurm_verify_cpu_bind(val, &opt.cpu_bind,
+					  &opt.cpu_bind_type))
+			exit(1);
+		break;
+	case OPT_MEM_BIND:
+		if (slurm_verify_mem_bind(val, &opt.mem_bind,
+					  &opt.mem_bind_type))
+			exit(1);
+		break;
 	case OPT_WCKEY:
 		xfree(opt.wckey);
 		opt.wckey = xstrdup(optarg);
@@ -502,7 +526,7 @@ void set_options(const int argc, char **argv)
 		{"overcommit",    no_argument,       0, 'O'},
 		{"partition",     required_argument, 0, 'p'},
 		{"dependency",    required_argument, 0, 'P'},
-		{"quiet",         no_argument,       0, 'q'},
+		{"quiet",         no_argument,       0, 'Q'},
 		{"no-rotate",     no_argument,       0, 'R'},
 		{"share",         no_argument,       0, 's'},
 		{"time",          required_argument, 0, 't'},
@@ -520,8 +544,6 @@ void set_options(const int argc, char **argv)
 		{"mincores",      required_argument, 0, LONG_OPT_MINCORES},
 		{"minthreads",    required_argument, 0, LONG_OPT_MINTHREADS},
 		{"mem",           required_argument, 0, LONG_OPT_MEM},
-		{"job-mem",       required_argument, 0, LONG_OPT_MEM_PER_CPU},
-		{"task-mem",      required_argument, 0, LONG_OPT_MEM_PER_CPU},
 		{"mem-per-cpu",   required_argument, 0, LONG_OPT_MEM_PER_CPU},
 		{"hint",          required_argument, 0, LONG_OPT_HINT},
 		{"sockets-per-node", required_argument, 0, LONG_OPT_SOCKETSPERNODE},
@@ -554,15 +576,23 @@ void set_options(const int argc, char **argv)
 		{"no-shell",      no_argument,       0, LONG_OPT_NOSHELL},
 		{"get-user-env",  optional_argument, 0, LONG_OPT_GET_USER_ENV},
 		{"network",       required_argument, 0, LONG_OPT_NETWORK},
+		{"cpu_bind",      required_argument, 0, LONG_OPT_CPU_BIND},
+		{"mem_bind",      required_argument, 0, LONG_OPT_MEM_BIND},
 		{"wckey",         required_argument, 0, LONG_OPT_WCKEY},
+		{"reservation",   required_argument, 0, LONG_OPT_RESERVATION},
 		{NULL,            0,                 0, 0}
 	};
-	char *opt_string = "+a:B:c:C:d:D:F:g:hHIJ:kK:L:m:n:N:Op:P:qR:st:uU:vVw:W:x:";
+	char *opt_string = "+B:c:C:d:D:F:g:hHIJ:kK::L:m:n:N:Op:P:QRst:uU:vVw:W:x:";
+
+	struct option *optz = spank_option_table_create(long_options);
+
+	if (!optz)
+		fatal("Unable to create options table");
 
 	opt.progname = xbasename(argv[0]);
 	optind = 0;		
 	while((opt_char = getopt_long(argc, argv, opt_string,
-				      long_options, &option_index)) != -1) {
+				      optz, &option_index)) != -1) {
 		switch (opt_char) {
 			
 		case '?':
@@ -680,7 +710,7 @@ void set_options(const int argc, char **argv)
 			xfree(opt.dependency);
 			opt.dependency = xstrdup(optarg);
 			break;
-		case 'q':
+		case 'Q':
 			opt.quiet++;
 			break;
 		case 'R':
@@ -931,15 +961,32 @@ void set_options(const int argc, char **argv)
 			xfree(opt.network);
 			opt.network = xstrdup(optarg);
 			break;
+		case LONG_OPT_CPU_BIND:
+			if (slurm_verify_cpu_bind(optarg, &opt.cpu_bind,
+						  &opt.cpu_bind_type))
+				exit(1);
+			break;
+		case LONG_OPT_MEM_BIND:
+			if (slurm_verify_mem_bind(optarg, &opt.mem_bind,
+						  &opt.mem_bind_type))
+				exit(1);
+			break;
 		case LONG_OPT_WCKEY:
 			xfree(opt.wckey);
 			opt.wckey = xstrdup(optarg);
 			break;
+		case LONG_OPT_RESERVATION:
+			xfree(opt.reservation);
+			opt.reservation = xstrdup(optarg);
+			break;
 		default:
-			fatal("Unrecognized command line parameter %c",
-			      opt_char);
+			if (spank_process_option(opt_char, optarg) < 0)
+			    fatal("Unrecognized command line parameter %c",
+				    opt_char);
 		}
 	}
+
+	spank_option_table_destroy(optz);
 }
 
 static void _proc_get_user_env(char *optarg)
@@ -1035,7 +1082,7 @@ static bool _opt_verify(void)
 	bool verified = true;
 
 	if (opt.quiet && opt.verbose) {
-		error ("don't specify both --verbose (-v) and --quiet (-q)");
+		error ("don't specify both --verbose (-v) and --quiet (-Q)");
 		verified = false;
 	}
 
@@ -1056,21 +1103,51 @@ static bool _opt_verify(void)
 
 	/* check for realistic arguments */
 	if (opt.nprocs <= 0) {
-		error("%s: invalid number of processes (-n %d)",
-		      opt.progname, opt.nprocs);
+		error("invalid number of processes (-n %d)",
+		      opt.nprocs);
 		verified = false;
 	}
 
 	if (opt.cpus_per_task <= 0) {
-		error("%s: invalid number of cpus per task (-c %d)\n",
-		      opt.progname, opt.cpus_per_task);
+		error("invalid number of cpus per task (-c %d)\n",
+		      opt.cpus_per_task);
 		verified = false;
 	}
 
 	if ((opt.min_nodes < 0) || (opt.max_nodes < 0) || 
 	    (opt.max_nodes && (opt.min_nodes > opt.max_nodes))) {
-		error("%s: invalid number of nodes (-N %d-%d)\n",
-		      opt.progname, opt.min_nodes, opt.max_nodes);
+		error("invalid number of nodes (-N %d-%d)\n",
+		      opt.min_nodes, opt.max_nodes);
+		verified = false;
+	}
+
+#ifdef HAVE_BGL
+	if (opt.blrtsimage && strchr(opt.blrtsimage, ' ')) {
+		error("invalid BlrtsImage given '%s'", opt.blrtsimage);
+		verified = false;
+	}
+#endif
+
+	if (opt.linuximage && strchr(opt.linuximage, ' ')) {
+#ifdef HAVE_BGL
+		error("invalid LinuxImage given '%s'", opt.linuximage);
+#else
+		error("invalid CnloadImage given '%s'", opt.linuximage);
+#endif
+		verified = false;
+	}
+
+	if (opt.mloaderimage && strchr(opt.mloaderimage, ' ')) {
+		error("invalid MloaderImage given '%s'", opt.mloaderimage);
+		verified = false;
+	}
+
+	if (opt.ramdiskimage && strchr(opt.ramdiskimage, ' ')) {
+#ifdef HAVE_BGL
+		error("invalid RamDiskImage given '%s'", opt.ramdiskimage);
+#else
+		error("invalid IoloadImage given '%s'", opt.ramdiskimage);
+#endif
 		verified = false;
 	}
 
@@ -1197,6 +1274,35 @@ static bool _opt_verify(void)
 		opt.network = "us,sn_all,bulk_xfer";
 #endif
 
+	if (slurm_verify_cpu_bind(NULL, &opt.cpu_bind,
+				  &opt.cpu_bind_type))
+		exit(1);
+	if (opt.cpu_bind_type && (getenv("SLURM_CPU_BIND") == NULL)) {
+		char tmp[64];
+		slurm_sprint_cpu_bind_type(tmp, opt.cpu_bind_type);
+		if (opt.cpu_bind) {
+			setenvf(NULL, "SLURM_CPU_BIND", "%s:%s", 
+				tmp, opt.cpu_bind);
+		} else {
+			setenvf(NULL, "SLURM_CPU_BIND", "%s", tmp);
+		}
+	}
+	if (opt.mem_bind_type && (getenv("SLURM_MEM_BIND") == NULL)) {
+		char tmp[64];
+		slurm_sprint_mem_bind_type(tmp, opt.mem_bind_type);
+		if (opt.mem_bind) {
+			setenvf(NULL, "SLURM_MEM_BIND", "%s:%s", 
+				tmp, opt.mem_bind);
+		} else {
+			setenvf(NULL, "SLURM_MEM_BIND", "%s", tmp);
+		}
+	}
+	if ((opt.ntasks_per_node != NO_VAL) && 
+	    (getenv("SLURM_NTASKS_PER_NODE") == NULL)) {
+		setenvf(NULL, "SLURM_NTASKS_PER_NODE", "%d", 
+			opt.ntasks_per_node);
+	}
+
 	return verified;
 }
 
@@ -1324,6 +1430,7 @@ static void _opt_list()
 	info("partition      : %s",
 		opt.partition == NULL ? "default" : opt.partition);
 	info("job name       : `%s'", opt.job_name);
+	info("reservation    : `%s'", opt.reservation);
 	info("wckey          : `%s'", opt.wckey);
 	if (opt.jobid != NO_VAL)
 		info("jobid          : %u", opt.jobid);
@@ -1390,6 +1497,10 @@ static void _opt_list()
 	info("ntasks-per-socket : %d", opt.ntasks_per_socket);
 	info("ntasks-per-core   : %d", opt.ntasks_per_core);
 	info("plane_size        : %u", opt.plane_size);
+	info("cpu_bind          : %s", 
+	     opt.cpu_bind == NULL ? "default" : opt.cpu_bind);
+	info("mem_bind          : %s",
+	     opt.mem_bind == NULL ? "default" : opt.mem_bind);
 	str = print_commandline(command_argc, command_argv);
 	info("user command   : `%s'", str);
 	xfree(str);
@@ -1421,6 +1532,7 @@ static void _usage(void)
 "              [--bell] [--no-bell] [--kill-command[=signal]]\n"
 "              [--nodefile=file] [--nodelist=hosts] [--exclude=hosts]\n"
 "              [--network=type] [--mem-per-cpu=MB]\n"
+"              [--cpu_bind=...] [--mem_bind=...] [--reservation=name]\n"
 "              [executable [args...]]\n");
 }
 
@@ -1432,51 +1544,53 @@ static void _help(void)
 "Usage: salloc [OPTIONS...] [executable [args...]]\n"
 "\n"
 "Parallel run options:\n"
-"  -N, --nodes=N               number of nodes on which to run (N = min[-max])\n"
-"  -n, --tasks=N               number of processors required\n"
+"      --begin=time            defer job until HH:MM DD/MM/YY\n"
+"      --bell                  ring the terminal bell when the job is allocated\n"
 "  -c, --cpus-per-task=ncpus   number of cpus required per task\n"
-"      --ntasks-per-node=n     number of tasks to invoke on each node\n"
-"  -p, --partition=partition   partition requested\n"
-"  -H, --hold                  submit job in held state\n"
-"  -t, --time=minutes          time limit\n"
+"      --comment=name          arbitrary comment\n"
 "  -D, --chdir=path            change working directory\n"
+"      --get-user-env          used by Moab.  See srun man page.\n"
+"      --gid=group_id          group ID to run job as (user root only)\n"
+"  -H, --hold                  submit job in held state\n"
 "  -I, --immediate             exit if resources are not immediately available\n"
+"      --jobid=id              specify jobid to use\n"
+"  -J, --job-name=jobname      name of job\n"
 "  -k, --no-kill               do not kill job on node failure\n"
 "  -K, --kill-command[=signal] signal to send terminating job\n"
-"  -O, --overcommit            overcommit resources\n"
-"  -s, --share                 share nodes with other jobs\n"
+"  -L, --licenses=names        required license, comma separated\n"
 "  -m, --distribution=type     distribution method for processes to nodes\n"
 "                              (type = block|cyclic|arbitrary)\n"
-"  -J, --job-name=jobname      name of job\n"
-"      --jobid=id              specify jobid to use\n"
-"  -W, --wait=sec              seconds to wait for allocation if not\n"
-"                              immediately available\n"
-"  -v, --verbose               verbose mode (multiple -v's increase verbosity)\n"
-"  -q, --quiet                 quiet mode (suppress informational messages)\n"
-"  -P, --dependency=type:jobid defer job until condition on jobid is satisfied\n"
-"      --nice[=value]          decrease secheduling priority by value\n"
-"  -U, --account=name          charge job to specified account\n"
-"      --begin=time            defer job until HH:MM DD/MM/YY\n"
-"      --comment=name          arbitrary comment\n"
-"  -L, --licenses=names        required license, comma separated\n"
 "      --mail-type=type        notify on state change: BEGIN, END, FAIL or ALL\n"
-"      --mail-user=user        who to send email notification for job state changes\n"
-"      --bell                  ring the terminal bell when the job is allocated\n"
+"      --mail-user=user        who to send email notification for job state\n"
+"                              changes\n"
+"  -n, --tasks=N               number of processors required\n"
+"      --nice[=value]          decrease secheduling priority by value\n"
 "      --no-bell               do NOT ring the terminal bell\n"
-"      --gid=group_id          group ID to run job as (user root only)\n"
+"      --ntasks-per-node=n     number of tasks to invoke on each node\n"
+"  -N, --nodes=N               number of nodes on which to run (N = min[-max])\n"
+"  -O, --overcommit            overcommit resources\n"
+"  -Q, --quiet                 quiet mode (suppress informational messages)\n"
+"  -p, --partition=partition   partition requested\n"
+"  -P, --dependency=type:jobid defer job until condition on jobid is satisfied\n"
+"  -s, --share                 share nodes with other jobs\n"
+"  -t, --time=minutes          time limit\n"
+"  -U, --account=name          charge job to specified account\n"
 "      --uid=user_id           user ID to run job as (user root only)\n"
-"      --get-user-env          used by Moab.  See srun man page.\n"
+"  -v, --verbose               verbose mode (multiple -v's increase verbosity)\n"
+"  -W, --wait=sec              seconds to wait for allocation if not\n"
+"                              immediately available\n"
 "\n"
 "Constraint options:\n"
+"      --contiguous            demand a contiguous range of nodes\n"
+"  -C, --constraint=list       specify a list of constraints\n"
+"  -F, --nodefile=filename     request a specific list of hosts\n"
+"      --mem=MB                minimum amount of real memory\n"
 "      --mincpus=n             minimum number of cpus per node\n"
 "      --minsockets=n          minimum number of sockets per node\n"
 "      --mincores=n            minimum number of cores per cpu\n"
 "      --minthreads=n          minimum number of threads per core\n"
-"      --mem=MB                minimum amount of real memory\n"
+"      --reservation=name      allocate resources from named reservation\n"
 "      --tmp=MB                minimum amount of temporary disk\n"
-"      --contiguous            demand a contiguous range of nodes\n"
-"  -C, --constraint=list       specify a list of constraints\n"
-"  -F, --nodefile=filename     request a specific list of hosts\n"
 "  -w, --nodelist=hosts...     request a specific list of hosts\n"
 "  -x, --exclude=hosts...      exclude a specific list of hosts\n"
 "\n"
@@ -1485,27 +1599,33 @@ static void _help(void)
 "                              cpu consumable resource is enabled\n"
 "      --mem-per-cpu=MB        maximum amount of real memory per allocated\n"
 "                              cpu required by the job.\n" 
-"                              --mem >= --job-mem if --mem is specified.\n" 
+"                              --mem >= --mem-per-cpu if --mem is specified.\n" 
 "\n"
 "Affinity/Multi-core options: (when the task/affinity plugin is enabled)\n" 
-"  -B --extra-node-info=S[:C[:T]]            Expands to:\n"
-"      --sockets-per-node=S    number of sockets per node to allocate\n"
-"      --cores-per-socket=C    number of cores per socket to allocate\n"
-"      --threads-per-core=T    number of threads per core to allocate\n"
+"  -B  --extra-node-info=S[:C[:T]]            Expands to:\n"
+"       --sockets-per-node=S   number of sockets per node to allocate\n"
+"       --cores-per-socket=C   number of cores per socket to allocate\n"
+"       --threads-per-core=T   number of threads per core to allocate\n"
 "                              each field can be 'min[-max]' or wildcard '*'\n"
 "                              total cpus requested = (N x S x C x T)\n"
 "\n"
-"      --ntasks-per-socket=n   number of tasks to invoke on each socket\n"
-"      --ntasks-per-core=n     number of tasks to invoke on each core\n");
+"      --ntasks-per-core=n     number of tasks to invoke on each core\n"
+"      --ntasks-per-socket=n   number of tasks to invoke on each socket\n");
 	conf = slurm_conf_lock();
 	if (conf->task_plugin != NULL
 	    && strcasecmp(conf->task_plugin, "task/affinity") == 0) {
 		printf(
+"      --cpu_bind=             Bind tasks to CPUs\n"
+"                              (see \"--cpu_bind=help\" for options)\n"
 "      --hint=                 Bind tasks according to application hints\n"
-"                              (see \"--hint=help\" for options)\n");
+"                              (see \"--hint=help\" for options)\n"
+"      --mem_bind=             Bind memory to locality domains (ldom)\n"
+"                              (see \"--mem_bind=help\" for options)\n");
 	}
 	slurm_conf_unlock();
 
+	spank_print_options(stdout, 6, 30);
+
         printf("\n"
 #ifdef HAVE_AIX				/* AIX/Federation specific options */
 "AIX related options:\n"
@@ -1529,10 +1649,14 @@ static void _help(void)
 "      --mloader-image=path    path to mloader image for bluegene block.  Default if not set\n"
 "      --ioload-image=path     path to ioload image for bluegene block.  Default if not set\n"
 #else
-"      --blrts-image=path      path to blrts image for bluegene block.  Default if not set\n"
-"      --linux-image=path      path to linux image for bluegene block.  Default if not set\n"
-"      --mloader-image=path    path to mloader image for bluegene block.  Default if not set\n"
-"      --ramdisk-image=path    path to ramdisk image for bluegene block.  Default if not set\n"
+"      --blrts-image=path      path to blrts image for bluegene block.\n"
+"                              Default if not set\n"
+"      --linux-image=path      path to linux image for bluegene block.  Default\n"
+"                              if not set\n"
+"      --mloader-image=path    path to mloader image for bluegene block.\n"
+"                              Default if not set\n"
+"      --ramdisk-image=path    path to ramdisk image for bluegene block.\n"
+"                              Default if not set\n"
 #endif
 #endif
 "\n"
diff --git a/src/salloc/opt.h b/src/salloc/opt.h
index 632239176..f413c0d80 100644
--- a/src/salloc/opt.h
+++ b/src/salloc/opt.h
@@ -2,14 +2,15 @@
  *  opt.h - definitions for salloc option processing
  *****************************************************************************
  *  Copyright (C) 2002-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 Mark Grondona <grondona1@llnl.gov>,
  *    Christopher J. Morrone <morrone2@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -72,6 +73,9 @@ typedef struct salloc_options {
 	int ntasks_per_socket; /* --ntasks-per-socket=n     */
 	int ntasks_per_core;   /* --ntasks-per-core=n	    */
 	cpu_bind_type_t cpu_bind_type; /* --cpu_bind=           */
+	char *cpu_bind;		/* binding map for map/mask_cpu */
+	mem_bind_type_t mem_bind_type; /* --mem_bind=		*/
+	char *mem_bind;		/* binding map for map/mask_mem	*/
 	bool extra_set;		/* true if extra node info explicitly set */
 	int  time_limit;	/* --time,   -t	(int minutes)	*/
 	char *time_limit_str;	/* --time,   -t (string)	*/
@@ -135,6 +139,7 @@ typedef struct salloc_options {
 	int get_user_env_time;	/* --get-user-env[=secs]	*/
 	int get_user_env_mode; 	/* --get-user-env=[S|L]		*/
 	char *cwd;		/* current working directory	*/
+	char *reservation;	/* --reservation		*/
 	char *wckey;            /* --wckey workload characterization key */
 } opt_t;
 
diff --git a/src/salloc/salloc.c b/src/salloc/salloc.c
index 4eb596af4..58a8e09e4 100644
--- a/src/salloc/salloc.c
+++ b/src/salloc/salloc.c
@@ -3,13 +3,14 @@
  *             launch a user-specified command.
  *****************************************************************************
  *  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 Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -41,12 +42,14 @@
 
 #include <slurm/slurm.h>
 
+#include "src/common/basil_resv_conf.h"
 #include "src/common/env.h"
 #include "src/common/read_config.h"
 #include "src/common/slurm_rlimits_info.h"
 #include "src/common/xmalloc.h"
 #include "src/common/xsignal.h"
 #include "src/common/xstring.h"
+#include "src/common/plugstack.h"
 
 #include "src/salloc/salloc.h"
 #include "src/salloc/opt.h"
@@ -59,6 +62,10 @@
 #include "src/plugins/select/bluegene/wrap_rm_api.h"
 #endif
 
+#ifdef HAVE_CRAY_XT
+#include "src/common/node_select.h"
+#endif
+
 #define MAX_RETRIES 3
 
 char **command_argv;
@@ -72,9 +79,9 @@ static bool allocation_interrupted = false;
 static uint32_t pending_job_id = 0;
 static time_t last_timeout = 0;
 
-static int fill_job_desc_from_opts(job_desc_msg_t *desc);
-static void ring_terminal_bell(void);
-static int fork_command(char **command);
+static int  _fill_job_desc_from_opts(job_desc_msg_t *desc);
+static void _ring_terminal_bell(void);
+static int  _fork_command(char **command);
 static void _pending_callback(uint32_t job_id);
 static void _ignore_signal(int signo);
 static void _exit_on_signal(int signo);
@@ -87,14 +94,15 @@ static void _ping_handler(srun_ping_msg_t *msg);
 static void _node_fail_handler(srun_node_fail_msg_t *msg);
 
 #ifdef HAVE_BG
-
 #define POLL_SLEEP 3			/* retry interval in seconds  */
-
 static int _wait_bluegene_block_ready(
-	resource_allocation_response_msg_t *alloc);
+			resource_allocation_response_msg_t *alloc);
 static int _blocks_dealloc();
 #endif
 
+#ifdef HAVE_CRAY_XT
+static int  _claim_reservation(resource_allocation_response_msg_t *alloc);
+#endif
 
 int main(int argc, char *argv[])
 {
@@ -114,6 +122,16 @@ int main(int argc, char *argv[])
 	slurm_allocation_callbacks_t callbacks;
 
 	log_init(xbasename(argv[0]), logopt, 0, NULL);
+
+	if (spank_init_allocator() < 0)
+		fatal("Failed to initialize plugin stack");
+
+	/* Be sure to call spank_fini when salloc exits
+	 */
+	if (atexit((void (*) (void)) spank_fini) < 0)
+		error("Failed to register atexit handler for plugins: %m");
+
+
 	if (initialize_and_process_args(argc, argv) < 0) {
 		fatal("salloc parameter parsing");
 	}
@@ -125,6 +143,9 @@ int main(int argc, char *argv[])
 		log_alter(logopt, 0, NULL);
 	}
 
+	if (spank_init_post_opt() < 0)
+		fatal("Plugin stack post-option processing failed");
+
 	if (opt.cwd && chdir(opt.cwd)) {
 		error("chdir(%s): %m", opt.cwd);
 		exit(1);
@@ -149,7 +170,7 @@ int main(int argc, char *argv[])
 	 * Request a job allocation
 	 */
 	slurm_init_job_desc_msg(&desc);
-	if (fill_job_desc_from_opts(&desc) == -1) {
+	if (_fill_job_desc_from_opts(&desc) == -1) {
 		exit(1);
 	}
 	if (opt.gid != (gid_t) -1) {
@@ -176,7 +197,7 @@ int main(int argc, char *argv[])
 	xsignal(SIGTERM, _signal_while_allocating);
 	xsignal(SIGUSR1, _signal_while_allocating);
 	xsignal(SIGUSR2, _signal_while_allocating);
-
+	
 	before = time(NULL);
 	while ((alloc = slurm_allocate_resources_blocking(&desc, opt.max_wait,
 					_pending_callback)) == NULL) {
@@ -201,20 +222,29 @@ int main(int argc, char *argv[])
 		}
 		slurm_allocation_msg_thr_destroy(msg_thr);
 		exit(1);
-	}
-
-	/*
-	 * Allocation granted!
-	 */
-	info("Granted job allocation %d", alloc->job_id);
+	} else if(!allocation_interrupted) {
+		/*
+		 * Allocation granted!
+		 */
+		info("Granted job allocation %d", alloc->job_id);
 #ifdef HAVE_BG
-	if (!_wait_bluegene_block_ready(alloc)) {
-		if(!allocation_interrupted)
-			error("Something is wrong with the boot of the block.");
-		goto relinquish;
+		if (!_wait_bluegene_block_ready(alloc)) {
+			if(!allocation_interrupted)
+				error("Something is wrong with the "
+				      "boot of the block.");
+			goto relinquish;
+		}
+#endif
+#ifdef HAVE_CRAY_XT
+		if (!_claim_reservation(alloc)) {
+			if(!allocation_interrupted)
+				error("Something is wrong with the ALPS "
+				      "resource reservation.");
+			goto relinquish;
+		}
+#endif
 	}
 
-#endif
 	after = time(NULL);
 
 	xsignal(SIGHUP, _exit_on_signal);
@@ -228,7 +258,7 @@ int main(int argc, char *argv[])
 	if (opt.bell == BELL_ALWAYS
 	    || (opt.bell == BELL_AFTER_DELAY
 		&& ((after - before) > DEFAULT_BELL_DELAY))) {
-		ring_terminal_bell();
+		_ring_terminal_bell();
 	}
 	if (opt.no_shell)
 		exit(0);
@@ -272,7 +302,7 @@ int main(int argc, char *argv[])
 		return 1;
 	} else {
 		allocation_state = GRANTED;
-		command_pid = pid = fork_command(command_argv);
+		command_pid = pid = _fork_command(command_argv);
 	}
 	pthread_mutex_unlock(&allocation_state_lock);
 
@@ -323,23 +353,34 @@ relinquish:
 		} else if (WIFSIGNALED(status)) {
 			verbose("Command \"%s\" was terminated by signal %d",
 				command_argv[0], WTERMSIG(status));
+			/* if we get these signals we return a normal
+			   exit since this was most likely sent from the
+			   user */
+			switch(WTERMSIG(status)) {
+			case SIGHUP:
+			case SIGINT:
+			case SIGQUIT:
+			case SIGKILL:
+				rc = 0;
+				break;
+			default:
+				break;
+			}
 		}
 	}
-
 	return rc;
 }
 
 
 /* Returns 0 on success, -1 on failure */
-static int fill_job_desc_from_opts(job_desc_msg_t *desc)
+static int _fill_job_desc_from_opts(job_desc_msg_t *desc)
 {
 	desc->contiguous = opt.contiguous ? 1 : 0;
 	desc->features = opt.constraints;
 	desc->immediate = opt.immediate ? 1 : 0;
 	desc->name = xstrdup(opt.job_name);
-
-	if(opt.wckey)
- 		xstrfmtcat(desc->name, "\"%s", opt.wckey);
+	desc->reservation = xstrdup(opt.reservation);
+	desc->wckey  = xstrdup(opt.wckey);
 
 	desc->req_nodes = opt.nodelist;
 	desc->exc_nodes = opt.exc_nodes;
@@ -351,9 +392,21 @@ static int fill_job_desc_from_opts(job_desc_msg_t *desc)
 	desc->group_id = opt.gid;
 	if (opt.dependency)
 		desc->dependency = xstrdup(opt.dependency);
+
+	if (opt.cpu_bind)
+		desc->cpu_bind       = opt.cpu_bind;
+	if (opt.cpu_bind_type)
+		desc->cpu_bind_type  = opt.cpu_bind_type;
+	if (opt.mem_bind)
+		desc->mem_bind       = opt.mem_bind;
+	if (opt.mem_bind_type)
+		desc->mem_bind_type  = opt.mem_bind_type;
+	if (opt.plane_size != NO_VAL)
+		desc->plane_size     = opt.plane_size;
 	desc->task_dist  = opt.distribution;
 	if (opt.plane_size != NO_VAL)
 		desc->plane_size = opt.plane_size;
+
 	if (opt.licenses)
 		desc->licenses = xstrdup(opt.licenses);
 	desc->network = opt.network;
@@ -448,7 +501,7 @@ static int fill_job_desc_from_opts(job_desc_msg_t *desc)
 	return 0;
 }
 
-static void ring_terminal_bell(void)
+static void _ring_terminal_bell(void)
 {
         if (isatty(STDOUT_FILENO)) {
                 fprintf(stdout, "\a");
@@ -457,7 +510,7 @@ static void ring_terminal_bell(void)
 }
 
 /* returns the pid of the forked command, or <0 on error */
-static pid_t fork_command(char **command)
+static pid_t _fork_command(char **command)
 {
 	pid_t pid;
 
@@ -698,4 +751,22 @@ static int _blocks_dealloc()
 	bg_info_ptr = new_bg_ptr;
 	return rc;
 }
+#endif	/* HAVE_BG */
+
+#ifdef HAVE_CRAY_XT
+/* returns 1 if job and nodes are ready for job to begin, 0 otherwise */
+static int _claim_reservation(resource_allocation_response_msg_t *alloc)
+{
+	int rc = 0;
+	char *resv_id = NULL;
+
+	select_g_get_jobinfo(alloc->select_jobinfo, SELECT_DATA_RESV_ID,
+			     &resv_id);
+	if (resv_id == NULL)
+		return rc;
+	if (basil_resv_conf(resv_id, alloc->job_id) == SLURM_SUCCESS)
+		rc = 1;
+	xfree(resv_id);
+	return rc;
+}
 #endif
diff --git a/src/salloc/salloc.h b/src/salloc/salloc.h
index fbe7c43a7..20a578cb5 100644
--- a/src/salloc/salloc.h
+++ b/src/salloc/salloc.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/sattach/Makefile.in b/src/sattach/Makefile.in
index c6b9ce1c7..309a8798d 100644
--- a/src/sattach/Makefile.in
+++ b/src/sattach/Makefile.in
@@ -44,14 +44,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -106,6 +110,10 @@ 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@
diff --git a/src/sattach/attach.c b/src/sattach/attach.c
index e4ca98076..2d7b89253 100644
--- a/src/sattach/attach.c
+++ b/src/sattach/attach.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  attach.c - Definitions needed for parallel debugger
- *  $Id: attach.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: attach.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/sattach/opt.c b/src/sattach/opt.c
index b9abbf6fa..622208d5e 100644
--- a/src/sattach/opt.c
+++ b/src/sattach/opt.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  opt.c - options processing for sattach
- *  $Id: opt.c 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: opt.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/sattach/opt.h b/src/sattach/opt.h
index 84681975a..516e18c1e 100644
--- a/src/sattach/opt.h
+++ b/src/sattach/opt.h
@@ -1,15 +1,16 @@
 /*****************************************************************************\
  *  opt.h - definitions for sattach option processing
- *  $Id: opt.h 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: opt.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>,
  *    Christopher J. Morrone <morrone2@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/sattach/sattach.c b/src/sattach/sattach.c
index ddc5e4452..140ca3680 100644
--- a/src/sattach/sattach.c
+++ b/src/sattach/sattach.c
@@ -1,15 +1,15 @@
 /*****************************************************************************\
  *  sattach.c - Attach to a running job step.
- *
- *  $Id: sattach.c 8447 2006-06-26 22:29:29Z morrone $
  *****************************************************************************
- *  Copyright (C) 2006 The Regents of the University of California.
+ *  Copyright (C) 2006-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -67,7 +67,8 @@ static void _mpir_cleanup(void);
 static void _mpir_dump_proctable(void);
 static void print_layout_info(slurm_step_layout_t *layout);
 static slurm_cred_t _generate_fake_cred(uint32_t jobid, uint32_t stepid,
-					uid_t uid, char *nodelist);
+					uid_t uid, char *nodelist, 
+					uint32_t node_cnt);
 static uint32_t _nodeid_from_layout(slurm_step_layout_t *layout,
 				    uint32_t taskid);
 static int _attach_to_tasks(uint32_t jobid,
@@ -146,7 +147,8 @@ int sattach(int argc, char *argv[])
 	}
 
 	fake_cred = _generate_fake_cred(opt.jobid, opt.stepid,
-					opt.uid, layout->node_list);
+					opt.uid, layout->node_list,
+					layout->node_cnt);
 	
 	mts = _msg_thr_create(layout->node_cnt, layout->task_cnt);
 
@@ -217,7 +219,8 @@ static void print_layout_info(slurm_step_layout_t *layout)
 
 /* return a faked job credential */
 static slurm_cred_t _generate_fake_cred(uint32_t jobid, uint32_t stepid,
-					uid_t uid, char *nodelist)
+					uid_t uid, char *nodelist,
+					uint32_t node_cnt)
 {
 	slurm_cred_arg_t arg;
 	slurm_cred_t cred;
@@ -226,10 +229,24 @@ static slurm_cred_t _generate_fake_cred(uint32_t jobid, uint32_t stepid,
 	arg.stepid   = stepid;
 	arg.uid      = uid;
 	arg.hostlist = nodelist;
-        arg.alloc_lps_cnt = 0;    
-        arg.alloc_lps =  NULL; 
+
+	arg.core_bitmap   = bit_alloc(node_cnt);
+	bit_nset(arg.core_bitmap, 0, node_cnt-1);
+	arg.cores_per_socket = xmalloc(sizeof(uint16_t));
+	arg.cores_per_socket[0] = 1;
+	arg.sockets_per_node = xmalloc(sizeof(uint16_t));
+	arg.sockets_per_node[0] = 1;
+	arg.sock_core_rep_count = xmalloc(sizeof(uint32_t));
+	arg.sock_core_rep_count[0] = node_cnt;
+	arg.job_nhosts    = node_cnt;
+	arg.job_hostlist  = nodelist;
+
 	cred = slurm_cred_faker(&arg);
 
+	bit_free(arg.core_bitmap);
+	xfree(arg.cores_per_socket);
+	xfree(arg.sockets_per_node);
+	xfree(arg.sock_core_rep_count);
 	return cred;
 }
 
diff --git a/src/sbatch/Makefile.in b/src/sbatch/Makefile.in
index e531a33ef..6bb0c96df 100644
--- a/src/sbatch/Makefile.in
+++ b/src/sbatch/Makefile.in
@@ -44,14 +44,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -105,6 +109,10 @@ 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@
diff --git a/src/sbatch/opt.c b/src/sbatch/opt.c
index 207beef37..bd324fe67 100644
--- a/src/sbatch/opt.c
+++ b/src/sbatch/opt.c
@@ -2,13 +2,14 @@
  *  opt.c - options processing for sbatch
  *****************************************************************************
  *  Copyright (C) 2002-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 Mark Grondona <grondona1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -61,13 +62,15 @@
 #include "src/common/list.h"
 #include "src/common/log.h"
 #include "src/common/parse_time.h"
+#include "src/common/plugstack.h"
 #include "src/common/proc_args.h"
+#include "src/common/read_config.h" /* contains getnodename() */
 #include "src/common/slurm_protocol_api.h"
+#include "src/common/slurm_resource_info.h"
+#include "src/common/slurm_rlimits_info.h"
 #include "src/common/uid.h"
 #include "src/common/xmalloc.h"
 #include "src/common/xstring.h"
-#include "src/common/slurm_rlimits_info.h"
-#include "src/common/read_config.h" /* contains getnodename() */
 
 #include "src/sbatch/opt.h"
 
@@ -76,24 +79,28 @@
 #define OPT_INT         0x01
 #define OPT_STRING      0x02
 #define OPT_DEBUG       0x03
-#define OPT_NODES       0x05
-#define OPT_BOOL        0x06
-#define OPT_CORE        0x07
-#define OPT_CONN_TYPE	0x08
-#define OPT_DISTRIB	0x09
-#define OPT_NO_ROTATE	0x0a
-#define OPT_GEOMETRY	0x0b
-#define OPT_MULTI	0x0f
-#define OPT_EXCLUSIVE	0x10
-#define OPT_OVERCOMMIT	0x11
-#define OPT_OPEN_MODE	0x12
-#define OPT_ACCTG_FREQ  0x13
-#define OPT_NO_REQUEUE  0x14
-#define OPT_REQUEUE     0x15
-#define OPT_WCKEY       0x16
+#define OPT_NODES       0x04
+#define OPT_BOOL        0x05
+#define OPT_CORE        0x06
+#define OPT_CONN_TYPE	0x07
+#define OPT_DISTRIB	0x08
+#define OPT_NO_ROTATE	0x09
+#define OPT_GEOMETRY	0x0a
+#define OPT_MULTI	0x0b
+#define OPT_EXCLUSIVE	0x0c
+#define OPT_OVERCOMMIT	0x0d
+#define OPT_OPEN_MODE	0x0e
+#define OPT_ACCTG_FREQ  0x0f
+#define OPT_NO_REQUEUE  0x10
+#define OPT_REQUEUE     0x11
+#define OPT_CPU_BIND    0x12
+#define OPT_MEM_BIND    0x13
+#define OPT_WCKEY       0x14
 
 /* generic getopt_long flags, integers and *not* valid characters */
 #define LONG_OPT_PROPAGATE   0x100
+#define LONG_OPT_CPU_BIND    0x101
+#define LONG_OPT_MEM_BIND    0x102
 #define LONG_OPT_JOBID       0x105
 #define LONG_OPT_TMP         0x106
 #define LONG_OPT_MEM         0x107
@@ -133,6 +140,9 @@
 #define LONG_OPT_OPEN_MODE       0x147
 #define LONG_OPT_ACCTG_FREQ      0x148
 #define LONG_OPT_WCKEY           0x149
+#define LONG_OPT_RESERVATION     0x14a
+#define LONG_OPT_CHECKPOINT      0x14b
+#define LONG_OPT_CHECKPOINT_DIR  0x14c
 
 /*---- global variables, defined in opt.h ----*/
 opt_t opt;
@@ -241,7 +251,10 @@ static void _opt_default()
 	opt.ntasks_per_node      = 0;      /* ntask max limits */
 	opt.ntasks_per_socket    = NO_VAL;
 	opt.ntasks_per_core      = NO_VAL;
-	opt.cpu_bind_type = 0;		/* local dummy variable for now */
+	opt.cpu_bind_type = 0;
+	opt.cpu_bind = NULL;
+	opt.mem_bind_type = 0;
+	opt.mem_bind = NULL;
 	opt.time_limit = NO_VAL;
 	opt.partition = NULL;
 
@@ -298,7 +311,54 @@ static void _opt_default()
 	opt.get_user_env_time = -1;
 	opt.get_user_env_mode = -1;
 	opt.acctg_freq        = -1;
-	opt.wckey = NULL;
+	opt.reservation       = NULL;
+	opt.wckey             = NULL;
+
+	opt.ckpt_interval = 0;
+	opt.ckpt_interval_str = NULL;
+	opt.ckpt_dir = xstrdup(opt.cwd);
+}
+
+static void _set_distribution(task_dist_states_t distribution,
+			      char **dist, char **lllp_dist)
+{
+	if (((int)distribution >= 0)
+	&&  (distribution != SLURM_DIST_UNKNOWN)) {
+		switch(distribution) {
+		case SLURM_DIST_CYCLIC:
+			*dist      = "cyclic";
+			break;
+		case SLURM_DIST_BLOCK:
+			*dist      = "block";
+			break;
+		case SLURM_DIST_PLANE:
+			*dist      = "plane";
+			*lllp_dist = "plane";
+			break;
+		case SLURM_DIST_ARBITRARY:
+			*dist      = "arbitrary";
+			break;
+		case SLURM_DIST_CYCLIC_CYCLIC:
+			*dist      = "cyclic";
+			*lllp_dist = "cyclic";
+			break;
+		case SLURM_DIST_CYCLIC_BLOCK:
+			*dist      = "cyclic";
+			*lllp_dist = "block";
+			break;
+		case SLURM_DIST_BLOCK_CYCLIC:
+			*dist      = "block";
+			*lllp_dist = "cyclic";
+			break;
+		case SLURM_DIST_BLOCK_BLOCK:
+			*dist      = "block";
+			*lllp_dist = "block";
+			break;
+		default:
+			error("unknown dist, type %d", distribution);
+			break;
+		}
+	}
 }
 
 /*---[ env var processing ]-----------------------------------------------*/
@@ -322,30 +382,34 @@ struct env_vars {
 
 env_vars_t env_vars[] = {
   {"SBATCH_ACCOUNT",       OPT_STRING,     &opt.account,       NULL           },
+  {"SBATCH_ACCTG_FREQ",    OPT_INT,        &opt.acctg_freq,    NULL           },
   {"SBATCH_BLRTS_IMAGE",   OPT_STRING,     &opt.blrtsimage,    NULL           },
   {"SBATCH_CONN_TYPE",     OPT_CONN_TYPE,  NULL,               NULL           },
+  {"SBATCH_CPU_BIND",      OPT_CPU_BIND,   NULL,               NULL           },
   {"SBATCH_DEBUG",         OPT_DEBUG,      NULL,               NULL           },
   {"SBATCH_DISTRIBUTION",  OPT_DISTRIB ,   NULL,               NULL           },
+  {"SBATCH_EXCLUSIVE",     OPT_EXCLUSIVE,  NULL,               NULL           },
   {"SBATCH_GEOMETRY",      OPT_GEOMETRY,   NULL,               NULL           },
   {"SBATCH_IMMEDIATE",     OPT_BOOL,       &opt.immediate,     NULL           },
   {"SBATCH_JOBID",         OPT_INT,        &opt.jobid,         NULL           },
   {"SBATCH_JOB_NAME",      OPT_STRING,     &opt.job_name,      NULL           },
   {"SBATCH_LINUX_IMAGE",   OPT_STRING,     &opt.linuximage,    NULL           },
   {"SBATCH_CNLOAD_IMAGE",  OPT_STRING,     &opt.linuximage,    NULL           },
+  {"SBATCH_MEM_BIND",      OPT_MEM_BIND,   NULL,               NULL           },
   {"SBATCH_MLOADER_IMAGE", OPT_STRING,     &opt.mloaderimage,  NULL           },
+  {"SBATCH_NETWORK",       OPT_STRING,     &opt.network,       NULL           },
   {"SBATCH_NO_REQUEUE",    OPT_NO_REQUEUE, NULL,               NULL           },
-  {"SBATCH_REQUEUE",       OPT_REQUEUE,    NULL,               NULL           },
   {"SBATCH_NO_ROTATE",     OPT_BOOL,       &opt.no_rotate,     NULL           },
+  {"SBATCH_OPEN_MODE",     OPT_OPEN_MODE,  NULL,               NULL           },
   {"SBATCH_OVERCOMMIT",    OPT_OVERCOMMIT, NULL,               NULL           },
   {"SBATCH_PARTITION",     OPT_STRING,     &opt.partition,     NULL           },
   {"SBATCH_RAMDISK_IMAGE", OPT_STRING,     &opt.ramdiskimage,  NULL           },
   {"SBATCH_IOLOAD_IMAGE",  OPT_STRING,     &opt.ramdiskimage,  NULL           },
   {"SBATCH_TIMELIMIT",     OPT_STRING,     &opt.time_limit_str,NULL           },
-  {"SBATCH_EXCLUSIVE",     OPT_EXCLUSIVE,  NULL,               NULL           },
-  {"SBATCH_OPEN_MODE",     OPT_OPEN_MODE,  NULL,               NULL           },
-  {"SBATCH_ACCTG_FREQ",    OPT_INT,        &opt.acctg_freq,    NULL           },
-  {"SBATCH_NETWORK",       OPT_STRING,     &opt.network,       NULL           },
+  {"SBATCH_REQUEUE",       OPT_REQUEUE,    NULL,               NULL           },
   {"SBATCH_WCKEY",         OPT_STRING,     &opt.wckey,         NULL           },
+  {"SBATCH_CHECKPOINT",    OPT_STRING,     &opt.ckpt_interval_str, NULL       },
+  {"SBATCH_CHECKPOINT_DIR",OPT_STRING,     &opt.ckpt_dir,      NULL           },
   {NULL, 0, NULL, NULL}
 };
 
@@ -416,13 +480,23 @@ _process_env_var(env_vars_t *e, const char *val)
 		}
 		break;
 
+	case OPT_CPU_BIND:
+		if (slurm_verify_cpu_bind(val, &opt.cpu_bind,
+					  &opt.cpu_bind_type))
+			exit(1);
+		break;
+
+	case OPT_MEM_BIND:
+		if (slurm_verify_mem_bind(val, &opt.mem_bind,
+					  &opt.mem_bind_type))
+			exit(1);
+		break;
+
 	case OPT_DISTRIB:
 		opt.distribution = verify_dist_type(optarg, 
 						    &opt.plane_size);
 		if (opt.distribution == SLURM_DIST_UNKNOWN)
 			error("distribution type `%s' is invalid", optarg);
-		else
-			setenv("SLURM_DISTRIBUTION", optarg, 1);
 		break;
 
 	case OPT_NODES:
@@ -514,7 +588,7 @@ static struct option long_options[] = {
 	{"overcommit",    no_argument,       0, 'O'},
 	{"partition",     required_argument, 0, 'p'},
 	{"dependency",    required_argument, 0, 'P'},
-	{"quiet",         no_argument,       0, 'q'},
+	{"quiet",         no_argument,       0, 'Q'},
 	{"no-rotate",     no_argument,       0, 'R'},
 	{"share",         no_argument,       0, 's'},
 	{"time",          required_argument, 0, 't'},
@@ -531,8 +605,6 @@ static struct option long_options[] = {
 	{"mincores",      required_argument, 0, LONG_OPT_MINCORES},
 	{"minthreads",    required_argument, 0, LONG_OPT_MINTHREADS},
 	{"mem",           required_argument, 0, LONG_OPT_MEM},
-	{"job-mem",       required_argument, 0, LONG_OPT_MEM_PER_CPU},
-	{"task-mem",      required_argument, 0, LONG_OPT_MEM_PER_CPU},
 	{"mem-per-cpu",   required_argument, 0, LONG_OPT_MEM_PER_CPU},
 	{"hint",          required_argument, 0, LONG_OPT_HINT},
 	{"tmp",           required_argument, 0, LONG_OPT_TMP},
@@ -567,12 +639,17 @@ static struct option long_options[] = {
 	{"acctg-freq",    required_argument, 0, LONG_OPT_ACCTG_FREQ},
 	{"propagate",     optional_argument, 0, LONG_OPT_PROPAGATE},
 	{"network",       required_argument, 0, LONG_OPT_NETWORK},
-	{"wckey",            required_argument, 0, LONG_OPT_WCKEY},
+	{"cpu_bind",      required_argument, 0, LONG_OPT_CPU_BIND},
+	{"mem_bind",      required_argument, 0, LONG_OPT_MEM_BIND},
+	{"wckey",         required_argument, 0, LONG_OPT_WCKEY},
+	{"reservation",   required_argument, 0, LONG_OPT_RESERVATION},
+ 	{"checkpoint",    required_argument, 0, LONG_OPT_CHECKPOINT},
+ 	{"checkpoint-dir",required_argument, 0, LONG_OPT_CHECKPOINT_DIR},
 	{NULL,            0,                 0, 0}
 };
 
 static char *opt_string =
-	"+a:bB:c:C:d:D:e:F:g:hHi:IJ:kL:m:n:N:o:Op:P:qR:st:uU:vVw:x:";
+	"+bB:c:C:d:D:e:F:g:hHi:IJ:kL:m:n:N:o:Op:P:QRst:uU:vVw:x:";
 
 
 /*
@@ -595,6 +672,11 @@ char *process_options_first_pass(int argc, char **argv)
 	int opt_char, option_index = 0;
 	char *str = NULL;
 
+	struct option *optz = spank_option_table_create(long_options);
+
+	if (!optz)
+		fatal("Unable to create options table");
+
 	/* initialize option defaults */
 	_opt_default();
 
@@ -602,7 +684,7 @@ char *process_options_first_pass(int argc, char **argv)
 	optind = 0;
 
 	while((opt_char = getopt_long(argc, argv, opt_string,
-				      long_options, &option_index)) != -1) {
+				      optz, &option_index)) != -1) {
 		switch (opt_char) {
 		case '?':
 			fprintf(stderr, "Try \"sbatch --help\" for more "
@@ -613,7 +695,7 @@ char *process_options_first_pass(int argc, char **argv)
 			_help();
 			exit(0);
 			break;
-		case 'q':
+		case 'Q':
 			opt.quiet++;
 			break;
 		case 'u':
@@ -635,6 +717,7 @@ char *process_options_first_pass(int argc, char **argv)
 		}
 	}
 	xfree(str);
+	spank_option_table_destroy(optz);
 
 	if (argc > optind && opt.wrap != NULL) {
 		fatal("Script arguments are not permitted with the"
@@ -922,9 +1005,14 @@ static void _set_options(int argc, char **argv)
 	int opt_char, option_index = 0;
 	char *tmp;
 
+	struct option *optz = spank_option_table_create(long_options);
+
+	if (!optz)
+		fatal("Unable to create options table");
+
 	optind = 0;
 	while((opt_char = getopt_long(argc, argv, opt_string,
-				      long_options, &option_index)) != -1) {
+				      optz, &option_index)) != -1) {
 		switch (opt_char) {
 		case '?':
 			fatal("Try \"sbatch --help\" for more information");
@@ -1022,7 +1110,6 @@ static void _set_options(int argc, char **argv)
 				      "is not recognized", optarg);
 				exit(1);
 			} 
-			setenv("SLURM_DISTRIBUTION", optarg, 1);
 			break;
 		case 'n':
 			opt.nprocs_set = true;
@@ -1056,11 +1143,11 @@ static void _set_options(int argc, char **argv)
 			break;
 		case 'd':
 		case 'P':
-			/* use -P instead */
+			/* use -P instead of -d (deprecated) */
 			xfree(opt.dependency);
 			opt.dependency = xstrdup(optarg);
 			break;
-		case 'q':
+		case 'Q':
 			opt.quiet++;
 			break;
 		case 'R':
@@ -1110,6 +1197,16 @@ static void _set_options(int argc, char **argv)
                 case LONG_OPT_EXCLUSIVE:
                         opt.shared = 0;
                         break;
+                case LONG_OPT_CPU_BIND:
+			if (slurm_verify_cpu_bind(optarg, &opt.cpu_bind,
+						  &opt.cpu_bind_type))
+				exit(1);
+			break;
+		case LONG_OPT_MEM_BIND:
+			if (slurm_verify_mem_bind(optarg, &opt.mem_bind,
+						  &opt.mem_bind_type))
+				exit(1);
+			break;
 		case LONG_OPT_MINCPU:
 			opt.mincpus = _get_int(optarg, "mincpus");
 			if (opt.mincpus < 0) {
@@ -1336,15 +1433,30 @@ static void _set_options(int argc, char **argv)
 			xfree(opt.wckey);
 			opt.wckey = xstrdup(optarg);
 			break;
+		case LONG_OPT_RESERVATION:
+			xfree(opt.reservation);
+			opt.reservation = xstrdup(optarg);
+			break;
+		case LONG_OPT_CHECKPOINT:
+			xfree(opt.ckpt_interval_str);
+			opt.ckpt_interval_str = xstrdup(optarg);
+			break;
+		case LONG_OPT_CHECKPOINT_DIR:
+			xfree(opt.ckpt_dir);
+			opt.ckpt_dir = xstrdup(optarg);
+			break;
 		default:
-			fatal("Unrecognized command line parameter %c",
-			      opt_char);
+			if (spank_process_option (opt_char, optarg) < 0)
+				fatal("Unrecognized command line parameter %c",
+						opt_char);
 		}
 	}
 
 	if (optind < argc) {
 		fatal("Invalid argument: %s", argv[optind]);
 	}
+
+	spank_option_table_destroy (optz);
 }
 
 static void _proc_get_user_env(char *optarg)
@@ -1738,9 +1850,10 @@ static void _parse_pbs_resource_list(char *rl)
 static bool _opt_verify(void)
 {
 	bool verified = true;
+	char *dist = NULL, *lllp_dist = NULL;
 
 	if (opt.quiet && opt.verbose) {
-		error ("don't specify both --verbose (-v) and --quiet (-q)");
+		error ("don't specify both --verbose (-v) and --quiet (-Q)");
 		verified = false;
 	}
 
@@ -1758,21 +1871,50 @@ static bool _opt_verify(void)
 
 	/* check for realistic arguments */
 	if (opt.nprocs <= 0) {
-		error("%s: invalid number of processes (-n %d)",
-		      opt.progname, opt.nprocs);
+		error("invalid number of processes (-n %d)", opt.nprocs);
 		verified = false;
 	}
 
 	if (opt.cpus_per_task <= 0) {
-		error("%s: invalid number of cpus per task (-c %d)\n",
-		      opt.progname, opt.cpus_per_task);
+		error("invalid number of cpus per task (-c %d)\n",
+		      opt.cpus_per_task);
 		verified = false;
 	}
 
 	if ((opt.min_nodes < 0) || (opt.max_nodes < 0) || 
 	    (opt.max_nodes && (opt.min_nodes > opt.max_nodes))) {
-		error("%s: invalid number of nodes (-N %d-%d)\n",
-		      opt.progname, opt.min_nodes, opt.max_nodes);
+		error("invalid number of nodes (-N %d-%d)\n",
+		      opt.min_nodes, opt.max_nodes);
+		verified = false;
+	}
+
+#ifdef HAVE_BGL
+	if (opt.blrtsimage && strchr(opt.blrtsimage, ' ')) {
+		error("invalid BlrtsImage given '%s'", opt.blrtsimage);
+		verified = false;
+	}
+#endif
+
+	if (opt.linuximage && strchr(opt.linuximage, ' ')) {
+#ifdef HAVE_BGL
+		error("invalid LinuxImage given '%s'", opt.linuximage);
+#else
+		error("invalid CnloadImage given '%s'", opt.linuximage);
+#endif
+		verified = false;
+	}
+
+	if (opt.mloaderimage && strchr(opt.mloaderimage, ' ')) {
+		error("invalid MloaderImage given '%s'", opt.mloaderimage);
+		verified = false;
+	}
+
+	if (opt.ramdiskimage && strchr(opt.ramdiskimage, ' ')) {
+#ifdef HAVE_BGL
+		error("invalid RamDiskImage given '%s'", opt.ramdiskimage);
+#else
+		error("invalid IoloadImage given '%s'", opt.ramdiskimage);
+#endif
 		verified = false;
 	}
 
@@ -1810,6 +1952,23 @@ static bool _opt_verify(void)
 		}
 	}
 
+	_set_distribution(opt.distribution, &dist, &lllp_dist);
+	if(dist) 
+		if (setenvf(NULL, "SLURM_DISTRIBUTION", "%s", dist)) {
+			error("Can't set SLURM_DISTRIBUTION env variable");
+		}
+		
+	if(opt.distribution == SLURM_DIST_PLANE)
+		if (setenvf(NULL, "SLURM_DIST_PLANESIZE", "%d", 
+			    opt.plane_size)) {
+			error("Can't set SLURM_DIST_PLANESIZE env variable");
+		}
+
+	if(lllp_dist)
+		if (setenvf(NULL, "SLURM_DIST_LLLP", "%s", lllp_dist)) {
+			error("Can't set SLURM_DIST_LLLP env variable");
+		}
+
 	/* bound max_threads/cores from ntasks_cores/sockets */ 
 	if ((opt.max_threads_per_core <= 0) &&
 	    (opt.ntasks_per_core > 0)) {
@@ -1884,6 +2043,14 @@ static bool _opt_verify(void)
 			opt.time_limit = INFINITE;
 	}
 
+	if (opt.ckpt_interval_str) {
+		opt.ckpt_interval = time_str2mins(opt.ckpt_interval_str);
+		if ((opt.ckpt_interval < 0) && (opt.ckpt_interval != INFINITE)) {
+			error("Invalid checkpoint interval specification");
+			exit(1);
+		}
+	}
+
 	if ((opt.euid != (uid_t) -1) && (opt.euid != opt.uid)) 
 		opt.uid = opt.euid;
 
@@ -1907,8 +2074,6 @@ static bool _opt_verify(void)
 		else
 			setenvf(NULL, "SLURM_OPEN_MODE", "t");
 	}
-	if (opt.cpus_per_task > 1)
-		setenvfs("SLURM_CPUS_PER_TASK=%d", opt.cpus_per_task); 
 	if (opt.dependency)
 		setenvfs("SLURM_JOB_DEPENDENCY=%s", opt.dependency);
 
@@ -1921,6 +2086,30 @@ static bool _opt_verify(void)
 	setenv("SLURM_NETWORK", opt.network, 1);
 #endif
 
+	if (slurm_verify_cpu_bind(NULL, &opt.cpu_bind,
+				  &opt.cpu_bind_type))
+		exit(1);
+	if (opt.cpu_bind_type && (getenv("SBATCH_CPU_BIND") == NULL)) {
+		char tmp[64];
+		slurm_sprint_cpu_bind_type(tmp, opt.cpu_bind_type);
+		if (opt.cpu_bind) {
+			setenvf(NULL, "SBATCH_CPU_BIND", "%s:%s", 
+				tmp, opt.cpu_bind);
+		} else {
+			setenvf(NULL, "SBATCH_CPU_BIND", "%s", tmp);
+		}
+	}
+	if (opt.mem_bind_type && (getenv("SBATCH_MEM_BIND") == NULL)) {
+		char tmp[64];
+		slurm_sprint_mem_bind_type(tmp, opt.mem_bind_type);
+		if (opt.mem_bind) {
+			setenvf(NULL, "SBATCH_MEM_BIND", "%s:%s", 
+				tmp, opt.mem_bind);
+		} else {
+			setenvf(NULL, "SBATCH_MEM_BIND", "%s", tmp);
+		}
+	}
+
 	return verified;
 }
 
@@ -2048,82 +2237,84 @@ static void _opt_list()
 	char *str;
 
 	info("defined options for program `%s'", opt.progname);
-	info("--------------- ---------------------");
+	info("----------------- ---------------------");
 
-	info("user           : `%s'", opt.user);
-	info("uid            : %ld", (long) opt.uid);
-	info("gid            : %ld", (long) opt.gid);
-	info("cwd            : %s", opt.cwd);
-	info("nprocs         : %d %s", opt.nprocs,
+	info("user              : `%s'", opt.user);
+	info("uid               : %ld", (long) opt.uid);
+	info("gid               : %ld", (long) opt.gid);
+	info("cwd               : %s", opt.cwd);
+	info("nprocs            : %d %s", opt.nprocs,
 		opt.nprocs_set ? "(set)" : "(default)");
-	info("cpus_per_task  : %d %s", opt.cpus_per_task,
+	info("cpus_per_task     : %d %s", opt.cpus_per_task,
 		opt.cpus_set ? "(set)" : "(default)");
 	if (opt.max_nodes)
-		info("nodes          : %d-%d", opt.min_nodes, opt.max_nodes);
+		info("nodes             : %d-%d", opt.min_nodes, opt.max_nodes);
 	else {
-		info("nodes          : %d %s", opt.min_nodes,
+		info("nodes             : %d %s", opt.min_nodes,
 			opt.nodes_set ? "(set)" : "(default)");
 	}
-	info("jobid          : %u %s", opt.jobid, 
+	info("jobid             : %u %s", opt.jobid, 
 		opt.jobid_set ? "(set)" : "(default)");
-	info("partition      : %s",
+	info("partition         : %s",
 		opt.partition == NULL ? "default" : opt.partition);
-	info("job name       : `%s'", opt.job_name);
-	info("wckey          : `%s'", opt.wckey);
-	info("distribution   : %s", format_task_dist_states(opt.distribution));
+	info("job name          : `%s'", opt.job_name);
+	info("reservation       : `%s'", opt.reservation);
+	info("wckey             : `%s'", opt.wckey);
+	info("distribution      : %s",
+	     format_task_dist_states(opt.distribution));
 	if(opt.distribution == SLURM_DIST_PLANE)
-		info("plane size   : %u", opt.plane_size);
-	info("verbose        : %d", opt.verbose);
-	info("immediate      : %s", tf_(opt.immediate));
+		info("plane size        : %u", opt.plane_size);
+	info("verbose           : %d", opt.verbose);
+	info("immediate         : %s", tf_(opt.immediate));
 	if (opt.requeue != NO_VAL)
-		info("requeue        : %u", opt.requeue);
-	info("overcommit     : %s", tf_(opt.overcommit));
+		info("requeue           : %u", opt.requeue);
+	info("overcommit        : %s", tf_(opt.overcommit));
 	if (opt.time_limit == INFINITE)
-		info("time_limit     : INFINITE");
+		info("time_limit        : INFINITE");
 	else if (opt.time_limit != NO_VAL)
-		info("time_limit     : %d", opt.time_limit);
+		info("time_limit        : %d", opt.time_limit);
 	if (opt.nice)
-		info("nice           : %d", opt.nice);
-	info("account        : %s", opt.account);
-	info("comment        : %s", opt.comment);
-	info("dependency     : %s", opt.dependency);
+		info("nice              : %d", opt.nice);
+	info("account           : %s", opt.account);
+	info("comment           : %s", opt.comment);
+	info("dependency        : %s", opt.dependency);
 	str = print_constraints();
-	info("constraints    : %s", str);
+	info("constraints       : %s", str);
 	xfree(str);
 	if (opt.conn_type != (uint16_t) NO_VAL)
-		info("conn_type      : %u", opt.conn_type);
+		info("conn_type         : %u", opt.conn_type);
 	str = print_geometry(opt.geometry);
-	info("geometry       : %s", str);
+	info("geometry          : %s", str);
 	xfree(str);
-	info("reboot         : %s", opt.reboot ? "no" : "yes");
-	info("rotate         : %s", opt.no_rotate ? "yes" : "no");
-	info("network        : %s", opt.network);
+	info("reboot            : %s", opt.reboot ? "no" : "yes");
+	info("rotate            : %s", opt.no_rotate ? "yes" : "no");
+	info("network           : %s", opt.network);
 
 #ifdef HAVE_BGL
 	if (opt.blrtsimage)
-		info("BlrtsImage     : %s", opt.blrtsimage);
+		info("BlrtsImage        : %s", opt.blrtsimage);
 #endif
 	if (opt.linuximage)
 #ifdef HAVE_BGL
-		info("LinuxImage     : %s", opt.linuximage);
+		info("LinuxImage        : %s", opt.linuximage);
 #else
-		info("CnloadImage    : %s", opt.linuximage);
+		info("CnloadImage       : %s", opt.linuximage);
 #endif
 	if (opt.mloaderimage)
-		info("MloaderImage   : %s", opt.mloaderimage);
+		info("MloaderImage      : %s", opt.mloaderimage);
 	if (opt.ramdiskimage)
 #ifdef HAVE_BGL
-		info("RamDiskImage   : %s", opt.ramdiskimage);
+		info("RamDiskImage      : %s", opt.ramdiskimage);
 #else
-		info("IoloadImage   : %s", opt.ramdiskimage);
+		info("IoloadImage       : %s", opt.ramdiskimage);
 #endif
 	if (opt.begin) {
 		char time_str[32];
 		slurm_make_time_str(&opt.begin, time_str, sizeof(time_str));
-		info("begin          : %s", time_str);
+		info("begin             : %s", time_str);
 	}
-	info("mail_type      : %s", print_mail_type(opt.mail_type));
-	info("mail_user      : %s", opt.mail_user);
+	info("mail_type         : %s", print_mail_type(opt.mail_type));
+	info("mail_user         : %s", opt.mail_user);
 	info("sockets-per-node  : %d - %d", opt.min_sockets_per_node,
 					    opt.max_sockets_per_node);
 	info("cores-per-socket  : %d - %d", opt.min_cores_per_socket,
@@ -2133,11 +2324,15 @@ static void _opt_list()
 	info("ntasks-per-node   : %d", opt.ntasks_per_node);
 	info("ntasks-per-socket : %d", opt.ntasks_per_socket);
 	info("ntasks-per-core   : %d", opt.ntasks_per_core);
+	info("cpu_bind          : %s", 
+	     opt.cpu_bind == NULL ? "default" : opt.cpu_bind);
+	info("mem_bind          : %s",
+	     opt.mem_bind == NULL ? "default" : opt.mem_bind);
 	info("plane_size        : %u", opt.plane_size);
-	info("propagate      : %s",
+	info("propagate         : %s",
 	     opt.propagate == NULL ? "NONE" : opt.propagate);
 	str = print_commandline(opt.script_argc, opt.script_argv);
-	info("remote command : `%s'", str);
+	info("remote command    : `%s'", str);
 	xfree(str);
 
 }
@@ -2168,6 +2363,7 @@ static void _usage(void)
 "              [--requeue] [--no-requeue] [--ntasks-per-node=n] [--propagate]\n"
 "              [--nodefile=file] [--nodelist=hosts] [--exclude=hosts]\n"
 "              [--network=type] [--mem-per-cpu=MB]\n"
+"              [--cpu_bind=...] [--mem_bind=...] [--reservation=name]\n"
 "              executable [args...]\n");
 }
 
@@ -2179,53 +2375,54 @@ static void _help(void)
 "Usage: sbatch [OPTIONS...] executable [args...]\n"
 "\n"
 "Parallel run options:\n"
-"  -n, --ntasks=ntasks         number of tasks to run\n"
-"  -N, --nodes=N               number of nodes on which to run (N = min[-max])\n"
+"      --begin=time            defer job until HH:MM DD/MM/YY\n"
 "  -c, --cpus-per-task=ncpus   number of cpus required per task\n"
-"      --ntasks-per-node=n     number of tasks to invoke on each node\n"
-"  -i, --input=in              file for batch script's standard input\n"
-"  -o, --output=out            file for batch script's standard output\n"
+"      --comment=name          arbitrary comment\n"
+"  -D, --workdir=directory     set working directory for batch script\n"
 "  -e, --error=err             file for batch script's standard error\n"
-"  -p, --partition=partition   partition requested\n"
+"      --get-user-env          used by Moab.  See srun man page.\n"
+"      --gid=group_id          group ID to run job as (user root only)\n"
 "  -H, --hold                  submit job in held state\n"
-"  -t, --time=minutes          time limit\n"
-"  -D, --chdir=path            change remote current working directory\n"
+"  -i, --input=in              file for batch script's standard input\n"
 "  -I, --immediate             exit if resources are not immediately available\n"
-"  -k, --no-kill               do not kill job on node failure\n"
-"  -s, --share                 share nodes with other jobs\n"
+"      --jobid=id              run under already allocated job\n"
 "  -J, --job-name=jobname      name of job\n"
+"  -k, --no-kill               do not kill job on node failure\n"
+"  -L, --licenses=names        required license, comma separated\n"
 "  -m, --distribution=type     distribution method for processes to nodes\n"
 "                              (type = block|cyclic|arbitrary)\n"
-"      --jobid=id              run under already allocated job\n"
-"  -v, --verbose               verbose mode (multiple -v's increase verbosity)\n"
-"  -q, --quiet                 quiet mode (suppress informational messages)\n"
-"  -P, --dependency=type:jobid defer job until condition on jobid is satisfied\n"
-"  -D, --workdir=directory     set working directory for batch script\n"
+"      --mail-type=type        notify on state change: BEGIN, END, FAIL or ALL\n"
+"      --mail-user=user        who to send email notification for job state\n"
+"                              changes\n"
+"  -n, --ntasks=ntasks         number of tasks to run\n"
 "      --nice[=value]          decrease secheduling priority by value\n"
+"      --no-requeue            if set, do not permit the job to be requeued\n"
+"      --ntasks-per-node=n     number of tasks to invoke on each node\n"
+"  -N, --nodes=N               number of nodes on which to run (N = min[-max])\n"
+"  -o, --output=out            file for batch script's standard output\n"
 "  -O, --overcommit            overcommit resources\n"
+"  -p, --partition=partition   partition requested\n"
+"      --propagate[=rlimits]   propagate all [or specific list of] rlimits\n"
+"  -P, --dependency=type:jobid defer job until condition on jobid is satisfied\n"
+"  -Q, --quiet                 quiet mode (suppress informational messages)\n"
+"      --requeue               if set, permit the job to be requeued\n"
+"  -t, --time=minutes          time limit\n"
+"  -s, --share                 share nodes with other jobs\n"
 "  -U, --account=name          charge job to specified account\n"
-"      --begin=time            defer job until HH:MM DD/MM/YY\n"
-"      --comment=name          arbitrary comment\n"
-"  -L, --licenses=names        required license, comma separated\n"
-"      --mail-type=type        notify on state change: BEGIN, END, FAIL or ALL\n"
-"      --mail-user=user        who to send email notification for job state changes\n"
-"      --gid=group_id          group ID to run job as (user root only)\n"
 "      --uid=user_id           user ID to run job as (user root only)\n"
-"      --get-user-env          used by Moab.  See srun man page.\n"
-"      --no-requeue            if set, do not permit the job to be requeued\n"
-"      --requeue               if set, permit the job to be requeued\n"
-"      --propagate[=rlimits]   propagate all [or specific list of] rlimits\n"
+"  -v, --verbose               verbose mode (multiple -v's increase verbosity)\n"
 "\n"
 "Constraint options:\n"
+"  -C, --constraint=list       specify a list of constraints\n"
+"  -F, --nodefile=filename     request a specific list of hosts\n"
+"      --mem=MB                minimum amount of real memory\n"
 "      --mincpus=n             minimum number of cpus per node\n"
 "      --minsockets=n          minimum number of sockets per node\n"
 "      --mincores=n            minimum number of cores per cpu\n"
 "      --minthreads=n          minimum number of threads per core\n"
-"      --mem=MB                minimum amount of real memory\n"
+"      --reservation=name      allocate resources from named reservation\n"
 "      --tmp=MB                minimum amount of temporary disk\n"
 "      --contiguous            demand a contiguous range of nodes\n"
-"  -C, --constraint=list       specify a list of constraints\n"
-"  -F, --nodefile=filename     request a specific list of hosts\n"
 "  -w, --nodelist=hosts...     request a specific list of hosts\n"
 "  -x, --exclude=hosts...      exclude a specific list of hosts\n"
 "\n"
@@ -2236,25 +2433,31 @@ static void _help(void)
 "                              allocated to the job.\n" 
 "\n"
 "Affinity/Multi-core options: (when the task/affinity plugin is enabled)\n" 
-"  -B --extra-node-info=S[:C[:T]]            Expands to:\n"
-"      --sockets-per-node=S    number of sockets per node to allocate\n"
-"      --cores-per-socket=C    number of cores per socket to allocate\n"
-"      --threads-per-core=T    number of threads per core to allocate\n"
+"  -B  --extra-node-info=S[:C[:T]]            Expands to:\n"
+"       --sockets-per-node=S   number of sockets per node to allocate\n"
+"       --cores-per-socket=C   number of cores per socket to allocate\n"
+"       --threads-per-core=T   number of threads per core to allocate\n"
 "                              each field can be 'min[-max]' or wildcard '*'\n"
 "                              total cpus requested = (N x S x C x T)\n"
 "\n"
-"      --ntasks-per-socket=n   number of tasks to invoke on each socket\n"
-"      --ntasks-per-core=n     number of tasks to invoke on each core\n");
+"      --ntasks-per-core=n     number of tasks to invoke on each core\n"
+"      --ntasks-per-socket=n   number of tasks to invoke on each socket\n");
 	conf = slurm_conf_lock();
 	if (conf->task_plugin != NULL
 	    && strcasecmp(conf->task_plugin, "task/affinity") == 0) {
 		printf(
+"      --cpu_bind=             Bind tasks to CPUs\n"
+"                              (see \"--cpu_bind=help\" for options)\n"
 "      --hint=                 Bind tasks according to application hints\n"
-"                              (see \"--hint=help\" for options)\n");
+"                              (see \"--hint=help\" for options)\n"
+"      --mem_bind=             Bind memory to locality domains (ldom)\n"
+"                              (see \"--mem_bind=help\" for options)\n");
 	}
 	slurm_conf_unlock();
 
-        printf("\n"
+	spank_print_options (stdout, 6, 30);
+
+	printf(
 #ifdef HAVE_AIX				/* AIX/Federation specific options */
 "AIX related options:\n"
 "      --network=type          communication protocol to be used\n"
@@ -2276,10 +2479,14 @@ static void _help(void)
 "      --mloader-image=path    path to mloader image for bluegene block.  Default if not set\n"
 "      --ioload-image=path     path to ioload image for bluegene block.  Default if not set\n"
 #else
-"      --blrts-image=path      path to blrts image for bluegene block.  Default if not set\n"
-"      --linux-image=path      path to linux image for bluegene block.  Default if not set\n"
-"      --mloader-image=path    path to mloader image for bluegene block.  Default if not set\n"
-"      --ramdisk-image=path    path to ramdisk image for bluegene block.  Default if not set\n"
+"      --blrts-image=path      path to blrts image for bluegene block.  Default\n"
+"                              if not set\n"
+"      --linux-image=path      path to linux image for bluegene block.  Default\n"
+"                              if not set\n"
+"      --mloader-image=path    path to mloader image for bluegene block.\n"
+"                              Default if not set\n"
+"      --ramdisk-image=path    path to ramdisk image for bluegene block.\n"
+"                              Default if not set\n"
 #endif
 #endif
 "\n"
diff --git a/src/sbatch/opt.h b/src/sbatch/opt.h
index 88ee97d5e..97aab2d64 100644
--- a/src/sbatch/opt.h
+++ b/src/sbatch/opt.h
@@ -1,15 +1,16 @@
 /*****************************************************************************\
  *  opt.h - definitions for srun option processing
- *  $Id: opt.h 15808 2008-12-02 23:38:47Z da $
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>,
  *    Christopher J. Morrone <morrone2@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -74,6 +75,9 @@ typedef struct sbatch_options {
 	int ntasks_per_socket; /* --ntasks-per-socket=n     */
 	int ntasks_per_core;   /* --ntasks-per-core=n	    */
 	cpu_bind_type_t cpu_bind_type; /* --cpu_bind=           */
+	char *cpu_bind;		/* binding map for map/mask_cpu */
+	mem_bind_type_t mem_bind_type; /* --mem_bind=		*/
+	char *mem_bind;		/* binding map for map/mask_mem	*/
 	bool extra_set;		/* true if extra node info explicitly set */
 	int  time_limit;	/* --time,   -t	(int minutes)	*/
 	char *time_limit_str;	/* --time,   -t (string)	*/
@@ -141,6 +145,10 @@ typedef struct sbatch_options {
 	int get_user_env_time;	/* --get-user-env[=timeout]	*/
 	int get_user_env_mode;	/* --get-user-env=[S|L]         */
 	char *wckey;            /* --wckey workload characterization key */
+	char *reservation;      /* --reservation */
+ 	int ckpt_interval;	/* --checkpoint (int minutes)   */
+ 	char *ckpt_interval_str;/* --checkpoint (string)        */
+ 	char *ckpt_dir;		/* --checkpoint-dir (string)    */
 } opt_t;
 
 extern opt_t opt;
diff --git a/src/sbatch/sbatch.c b/src/sbatch/sbatch.c
index 6fa685f7e..752a51179 100644
--- a/src/sbatch/sbatch.c
+++ b/src/sbatch/sbatch.c
@@ -1,16 +1,15 @@
 /*****************************************************************************\
- *  sbatch.c - Submit a SLURM batch script.
- *
- *  $Id: sbatch.c 15808 2008-12-02 23:38:47Z da $
+ *  sbatch.c - Submit a SLURM batch script.$
  *****************************************************************************
  *  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 Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -37,6 +36,7 @@
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/param.h>               /* MAXPATHLEN */
 #include <fcntl.h>
 
 #include <slurm/slurm.h>
@@ -46,17 +46,19 @@
 #include "src/common/slurm_rlimits_info.h"
 #include "src/common/xstring.h"
 #include "src/common/xmalloc.h"
+#include "src/common/plugstack.h"
 
 #include "src/sbatch/opt.h"
 
-#define MAX_RETRIES 3
+#define MAX_RETRIES 15
 
 static int   fill_job_desc_from_opts(job_desc_msg_t *desc);
 static void *get_script_buffer(const char *filename, int *size);
-static void  set_prio_process_env(void);
-static int   set_umask_env(void);
 static char *script_wrap(char *command_string);
-static int  _set_rlimit_env(void);
+static void  _set_prio_process_env(void);
+static int   _set_rlimit_env(void);
+static void  _set_submit_dir_env(void);
+static int   _set_umask_env(void);
 
 int main(int argc, char *argv[])
 {
@@ -69,6 +71,15 @@ int main(int argc, char *argv[])
 	int retries = 0;
 
 	log_init(xbasename(argv[0]), logopt, 0, NULL);
+
+	if (spank_init_allocator() < 0)
+		fatal("Failed to intialize plugin stack");
+
+	/* Be sure to call spank_fini when sbatch exits
+	 */
+	if (atexit((void (*) (void)) spank_fini) < 0)
+		error("Failed to register atexit handler for plugins: %m");
+
 	script_name = process_options_first_pass(argc, argv);
 	/* reinit log with new verbosity (if changed by command line) */
 	if (opt.verbose || opt.quiet) {
@@ -91,6 +102,9 @@ int main(int argc, char *argv[])
 		fatal("sbatch parameter parsing");
 	}
 
+	if (spank_init_post_opt() < 0)
+		fatal("Plugin stack post-option processing failed");
+
 	if (opt.get_user_env_time < 0) {
 		/* Moab does not propage the user's resource limits, so 
 		 * slurmd determines the values at the same time that it 
@@ -98,8 +112,9 @@ int main(int argc, char *argv[])
 		(void) _set_rlimit_env();
 	}
 
-	set_prio_process_env();
-	set_umask_env();
+	_set_prio_process_env();
+	_set_submit_dir_env();
+	_set_umask_env();
 	slurm_init_job_desc_msg(&desc);
 	if (fill_job_desc_from_opts(&desc) == -1) {
 		exit(2);
@@ -108,16 +123,27 @@ int main(int argc, char *argv[])
 	desc.script = (char *)script_body;
 
 	while (slurm_submit_batch_job(&desc, &resp) < 0) {
-		static char *msg = "Slurm job queue full, sleeping and retrying.";
-
-		if ((errno != ESLURM_ERROR_ON_DESC_TO_RECORD_COPY) ||
-		    (retries >= MAX_RETRIES)) {
+		static char *msg;
+		
+		if (errno == ESLURM_ERROR_ON_DESC_TO_RECORD_COPY)
+			msg = "Slurm job queue full, sleeping and retrying.";
+		else if (errno == ESLURM_NODES_BUSY) {
+			msg = "Job step creation temporarily disabled, "
+			      "retrying";
+		} else if (errno == EAGAIN) {
+			msg = "Slurm temporarily unable to accept job, "
+			      "sleeping and retrying.";
+		} else
+			msg = NULL;
+		if ((msg == NULL) || (retries >= MAX_RETRIES)) {
 			error("Batch job submission failed: %m");
 			exit(3);
 		}
 
 		if (retries)
 			debug(msg);
+		else if (errno == ESLURM_NODES_BUSY)
+			info(msg);	/* Not an error, powering up nodes */
 		else
 			error(msg);
 		sleep (++retries);
@@ -142,9 +168,8 @@ static int fill_job_desc_from_opts(job_desc_msg_t *desc)
 		desc->name = xstrdup(opt.job_name);
 	else
 		desc->name = xstrdup("sbatch");
-
-	if(opt.wckey)
- 		xstrfmtcat(desc->name, "\"%s", opt.wckey);
+	desc->reservation  = xstrdup(opt.reservation);
+	desc->wckey  = xstrdup(opt.wckey);
 
 	desc->req_nodes = opt.nodelist;
 	desc->exc_nodes = opt.exc_nodes;
@@ -161,9 +186,19 @@ static int fill_job_desc_from_opts(job_desc_msg_t *desc)
 	desc->group_id = opt.gid;
 	if (opt.dependency)
 		desc->dependency = xstrdup(opt.dependency);
-	desc->task_dist  = opt.distribution;
+
+	if (opt.cpu_bind)
+		desc->cpu_bind       = opt.cpu_bind;
+	if (opt.cpu_bind_type)
+		desc->cpu_bind_type  = opt.cpu_bind_type;
+	if (opt.mem_bind)
+		desc->mem_bind       = opt.mem_bind;
+	if (opt.mem_bind_type)
+		desc->mem_bind_type  = opt.mem_bind_type;
 	if (opt.plane_size != NO_VAL)
-		desc->plane_size = opt.plane_size;
+		desc->plane_size     = opt.plane_size;
+	desc->task_dist  = opt.distribution;
+
 	desc->network = opt.network;
 	if (opt.nice)
 		desc->nice = NICE_OFFSET + opt.nice;
@@ -271,11 +306,31 @@ static int fill_job_desc_from_opts(job_desc_msg_t *desc)
 	if (opt.acctg_freq >= 0)
 		desc->acctg_freq = opt.acctg_freq;
 
+	desc->ckpt_dir = opt.ckpt_dir;
+	desc->ckpt_interval = (uint16_t)opt.ckpt_interval;
 	return 0;
 }
 
+/* Set SLURM_SUBMIT_DIR environment variable with current state */
+static void _set_submit_dir_env(void)
+{
+	char buf[MAXPATHLEN + 1];
+
+	if (getenv("SLURM_SUBMIT_DIR"))	/* use this value */
+		return;
+
+	if ((getcwd(buf, MAXPATHLEN)) == NULL)
+		fatal("getcwd failed: %m");
+
+	if (setenvf(NULL, "SLURM_SUBMIT_DIR", "%s", buf) < 0) {
+		error ("unable to set SLURM_SUBMIT_DIR in environment");
+		return;
+	}
+	debug ("propagating SUBMIT_DIR=%s", buf);
+}
+
 /* Set SLURM_UMASK environment variable with current state */
-static int set_umask_env(void)
+static int _set_umask_env(void)
 {
 	char mask_char[5];
 	mode_t mask;
@@ -297,13 +352,13 @@ static int set_umask_env(void)
 }
 
 /*
- * set_prio_process_env
+ * _set_prio_process_env
  *
  * Set the internal SLURM_PRIO_PROCESS environment variable to support
  * the propagation of the users nice value and the "PropagatePrioProcess"
  * config keyword.
  */
-static void  set_prio_process_env(void)
+static void  _set_prio_process_env(void)
 {
 	int retval;
 
diff --git a/src/sbcast/Makefile.am b/src/sbcast/Makefile.am
index bedbd116a..48336a596 100644
--- a/src/sbcast/Makefile.am
+++ b/src/sbcast/Makefile.am
@@ -6,7 +6,7 @@ AUTOMAKE_OPTIONS = foreign
 INCLUDES = -I$(top_srcdir) $(BG_INCLUDES)
 bin_PROGRAMS = sbcast
 
-sbcast_LDADD = 	$(top_builddir)/src/api/libslurm.o -ldl
+sbcast_LDADD = 	$(top_builddir)/src/api/libslurm.o -ldl -lm
 
 noinst_HEADERS = sbcast.h
 sbcast_SOURCES = agent.c sbcast.c opts.c
diff --git a/src/sbcast/Makefile.in b/src/sbcast/Makefile.in
index 1c29a252e..457e25347 100644
--- a/src/sbcast/Makefile.in
+++ b/src/sbcast/Makefile.in
@@ -47,14 +47,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -108,6 +112,10 @@ 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@
@@ -269,7 +277,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 INCLUDES = -I$(top_srcdir) $(BG_INCLUDES)
-sbcast_LDADD = $(top_builddir)/src/api/libslurm.o -ldl
+sbcast_LDADD = $(top_builddir)/src/api/libslurm.o -ldl -lm
 noinst_HEADERS = sbcast.h
 sbcast_SOURCES = agent.c sbcast.c opts.c
 sbcast_LDFLAGS = -export-dynamic $(CMD_LDFLAGS)
diff --git a/src/sbcast/agent.c b/src/sbcast/agent.c
index 1610132ed..296794b02 100644
--- a/src/sbcast/agent.c
+++ b/src/sbcast/agent.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/sbcast/opts.c b/src/sbcast/opts.c
index d0b452584..083bd00d6 100644
--- a/src/sbcast/opts.c
+++ b/src/sbcast/opts.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/sbcast/sbcast.c b/src/sbcast/sbcast.c
index 07f6e6ac2..c1e30ba09 100644
--- a/src/sbcast/sbcast.c
+++ b/src/sbcast/sbcast.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -116,7 +117,7 @@ static void _get_job_info(void)
 	char *jobid_str;
 	uint32_t jobid;
 
-	jobid_str = getenv("SLURM_JOBID");
+	jobid_str = getenv("SLURM_JOB_ID");
 	if (!jobid_str) {
 		error("Command only valid from within SLURM job");
 		exit(1);
diff --git a/src/sbcast/sbcast.h b/src/sbcast/sbcast.h
index 3560c13f4..6e853df2b 100644
--- a/src/sbcast/sbcast.h
+++ b/src/sbcast/sbcast.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/scancel/Makefile.in b/src/scancel/Makefile.in
index c35da3bf9..a513700d6 100644
--- a/src/scancel/Makefile.in
+++ b/src/scancel/Makefile.in
@@ -46,14 +46,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -107,6 +111,10 @@ 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@
diff --git a/src/scancel/opt.c b/src/scancel/opt.c
index fec38adbb..68016a141 100644
--- a/src/scancel/opt.c
+++ b/src/scancel/opt.c
@@ -1,13 +1,15 @@
 /*****************************************************************************\
  *  opt.c - options processing for scancel
  *****************************************************************************
- *  Copyright (C) 2002 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -71,6 +73,7 @@
 #define OPT_LONG_HELP  0x100
 #define OPT_LONG_USAGE 0x101
 #define OPT_LONG_CTLD  0x102
+#define OPT_LONG_WCKEY 0x103
 
 #define SIZE(a) (sizeof(a)/sizeof(a[0]))
 
@@ -229,6 +232,8 @@ static void _opt_default()
 	opt.user_name	= NULL;
 	opt.user_id	= 0;
 	opt.verbose	= 0;
+	opt.wckey	= NULL;
+	opt.nodelist	= NULL;
 }
 
 /*
@@ -302,6 +307,10 @@ static void _opt_env()
 			error ("Unrecognized SCANCEL_VERBOSE value: %s",
 				val);
 	}
+
+	if ( (val=getenv("SCANCEL_WCKEY")) ) {
+		opt.wckey = xstrdup(val);
+	}
 }
 
 /*
@@ -323,12 +332,14 @@ static void _opt_args(int argc, char **argv)
 		{"user",        required_argument, 0, 'u'},
 		{"verbose",     no_argument,       0, 'v'},
 		{"version",     no_argument,       0, 'V'},
+		{"nodelist",    required_argument, 0, 'w'},
+		{"wckey",       required_argument, 0, OPT_LONG_WCKEY},
 		{"help",        no_argument,       0, OPT_LONG_HELP},
 		{"usage",       no_argument,       0, OPT_LONG_USAGE},
 		{NULL,          0,                 0, 0}
 	};
 
-	while((opt_char = getopt_long(argc, argv, "bin:p:qs:t:u:vV",
+	while((opt_char = getopt_long(argc, argv, "bin:p:qs:t:u:vVw:",
 			long_options, &option_index)) != -1) {
 		switch (opt_char) {
 			case (int)'?':
@@ -369,6 +380,12 @@ static void _opt_args(int argc, char **argv)
 			case (int)'V':
 				_print_version();
 				exit(0);
+			case (int)'w':
+				opt.nodelist = xstrdup(optarg);
+				break;
+			case OPT_LONG_WCKEY:
+				opt.wckey = xstrdup(optarg);
+				break;
 			case OPT_LONG_HELP:
 				_help();
 				exit(0);
@@ -454,7 +471,9 @@ _opt_verify(void)
 	    (opt.partition == NULL) &&
 	    (opt.state == JOB_END) &&
 	    (opt.user_name == NULL) &&
-	    (opt.job_cnt == 0)) {
+	    (opt.wckey == NULL) &&
+	    (opt.job_cnt == 0) &&
+	    (opt.nodelist == NULL)) {
 		error("No job identification provided");
 		verified = false;	/* no job specification */
 	}
@@ -478,6 +497,8 @@ static void _opt_list(void)
 	info("user_id        : %u", opt.user_id);
 	info("user_name      : %s", opt.user_name);
 	info("verbose        : %d", opt.verbose);
+	info("wckey          : %s", opt.wckey);
+	info("nodelist       : %s", opt.nodelist);
 
 	for (i=0; i<opt.job_cnt; i++) {
 		info("job_steps      : %u.%u ", opt.job_id[i], opt.step_id[i]);
@@ -488,7 +509,7 @@ static void _usage(void)
 {
 	printf("Usage: scancel [-n job_name] [-u user] [-p partition] [-q] [-s name | integer]\n");
 	printf("               [--batch] [-t PENDING | RUNNING | SUSPENDED] [--usage] [-v] [-V]\n");
-	printf("               [job_id[.step_id]]\n");
+	printf("               [-w hosts...] [job_id[.step_id]]\n");
 }
 
 static void _help(void)
@@ -501,12 +522,13 @@ static void _help(void)
 	printf("  -p, --partition=partition       name of job's partition\n");
 	printf("  -q, --quiet                     disable warnings\n");
 	printf("  -s, --signal=name | integer     signal to send to job, default is SIGKILL\n");
-	printf("  -t, --state=state               state of the jobs to be signaled\n");
-	printf("                                  valid options are either pending,\n");
-	printf("                                  running, or suspended\n");
-	printf("  -u, --user=user                 name or id of user to have jobs signaled\n");
+	printf("  -t, --state=states              states of jobs to be signaled,\n");
+	printf("                                  default is pending, running, and\n");
+	printf("                                  suspended\n");
+	printf("  -u, --user=user                 name or id of user to have jobs cancelled\n");
 	printf("  -v, --verbose                   verbosity level\n");
 	printf("  -V, --version                   output version information and exit\n");
+	printf("  -w, --nodelist                  cancel jobs using any of these nodes\n");
 	printf("\nHelp options:\n");
 	printf("  --help                          show this help message\n");
 	printf("  --usage                         display brief usage message\n");
diff --git a/src/scancel/scancel.c b/src/scancel/scancel.c
index 080a44742..31d97e210 100644
--- a/src/scancel/scancel.c
+++ b/src/scancel/scancel.c
@@ -2,12 +2,14 @@
  *  scancel - cancel specified job(s) and/or job step(s)
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -45,6 +47,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <signal.h>
+#include <pthread.h>
 
 #if HAVE_INTTYPES_H
 #  include <inttypes.h>
@@ -59,20 +62,34 @@
 #include "src/common/log.h"
 #include "src/common/xstring.h"
 #include "src/common/xmalloc.h"
+#include "src/common/hostlist.h"
 #include "src/scancel/scancel.h"
 
 #define MAX_CANCEL_RETRY 10
+#define MAX_THREADS 20
+
 
 static void _cancel_jobs (void);
-static void _cancel_job_id (uint32_t job_id, uint16_t sig);
-static void _cancel_step_id (uint32_t job_id, uint32_t step_id, 
-			     uint16_t sig);
+static void *_cancel_job_id (void *cancel_info);
+static void *_cancel_step_id (void *cancel_info);
+
 static int  _confirmation (int i, uint32_t step_id);
 static void _filter_job_records (void);
 static void _load_job_records (void);
+static void _verify_job_ids (void);
 
 static job_info_msg_t * job_buffer_ptr = NULL;
 
+typedef struct job_cancel_info {
+	uint32_t job_id;
+	uint32_t step_id;
+	uint16_t sig;
+	int             *num_active_threads;
+	pthread_mutex_t *num_active_threads_lock;
+	pthread_cond_t  *num_active_threads_cond;
+} job_cancel_info_t;
+
+
 int
 main (int argc, char *argv[]) 
 {
@@ -85,12 +102,15 @@ main (int argc, char *argv[])
 		log_alter (log_opts, SYSLOG_FACILITY_DAEMON, NULL);
 	} 
 	
+	_load_job_records();
+	_verify_job_ids();
+
 	if ((opt.interactive) ||
 	    (opt.job_name) ||
 	    (opt.partition) ||
 	    (opt.state != JOB_END) ||
-	    (opt.user_name)) {
-		_load_job_records ();
+	    (opt.user_name) ||
+	    (opt.nodelist)) {
 		_filter_job_records ();
 	}
 	_cancel_jobs ();
@@ -114,6 +134,35 @@ _load_job_records (void)
 }
 
 
+static void
+_verify_job_ids (void)
+{
+	/* If a list of jobs was given, make sure each job is actually in
+         * our list of job records. */
+	int i, j;
+	job_info_t *job_ptr = job_buffer_ptr->job_array;
+
+	for (j = 0; j < opt.job_cnt; j++ ) {
+		for (i = 0; i < job_buffer_ptr->record_count; i++) {
+			if (job_ptr[i].job_id == opt.job_id[j])
+				break;
+		}
+		if (((job_ptr[i].job_state >= JOB_COMPLETE) ||
+		     (i >= job_buffer_ptr->record_count)) &&
+		     (opt.verbose >= 0)) {
+			if (opt.step_id[j] == SLURM_BATCH_SCRIPT)
+				error("Kill job error on job id %u: %s", 
+				      opt.job_id[j], 
+				      slurm_strerror(ESLURM_INVALID_JOB_ID));
+			else
+				error("Kill job error on job step id %u.%u: %s",
+				      opt.job_id[j], opt.step_id[j],
+				      slurm_strerror(ESLURM_INVALID_JOB_ID));
+		}
+	}
+}
+
+
 /* _filter_job_records - filtering job information per user specification */
 static void 
 _filter_job_records (void)
@@ -133,23 +182,16 @@ _filter_job_records (void)
 			continue;
 		}
 
-		if (opt.job_name != NULL) {
-			char *quote = NULL;
-			int set = 0;
-			if ((quote = strchr(job_ptr[i].name, (int) '\"'))) 
-				/* take out the wckey */
-				*quote = '\0';
-			else 
-				quote = job_ptr[i].name;
-			
-			if(strcmp(job_ptr[i].name, opt.job_name) != 0) {
-				job_ptr[i].job_id = 0;
-				if(set)
-					*quote = '\"';	
-				continue;
-			}
-			if(set)
-				*quote = '\"';					
+		if (opt.job_name != NULL &&
+		    (strcmp(job_ptr[i].name, opt.job_name) != 0)) {
+			job_ptr[i].job_id = 0;
+			continue;
+		}
+
+		if (opt.wckey != NULL &&
+		    (strcmp(job_ptr[i].wckey, opt.wckey) != 0)) {
+			job_ptr[i].job_id = 0;
+			continue;
 		}
 
 		if ((opt.partition != NULL) &&
@@ -170,6 +212,28 @@ _filter_job_records (void)
 			continue;
 		}
 
+		if (opt.nodelist != NULL) {
+			/* If nodelist contains a '/', treat it as a file name */
+			if (strchr(opt.nodelist, '/') != NULL) {
+				char *reallist;
+				reallist = slurm_read_hostfile(opt.nodelist,
+							       NO_VAL);
+				if (reallist) {
+					xfree(opt.nodelist);
+					opt.nodelist = reallist;
+				}
+			}
+
+			hostset_t hs = hostset_create(job_ptr[i].nodes);
+			if (!hostset_intersects(hs, opt.nodelist)) {
+				job_ptr[i].job_id = 0;
+				hostset_destroy(hs);
+				continue;
+			} else {
+				hostset_destroy(hs);
+			}
+		}
+
 		if (opt.job_cnt == 0)
 			continue;
 		for (j = 0; j < opt.job_cnt; j++) {
@@ -188,62 +252,138 @@ _filter_job_records (void)
 static void
 _cancel_jobs (void)
 {
-	int i, j;
+	int i, j, err;
 	job_info_t *job_ptr = NULL;
+	pthread_attr_t  attr;
+	job_cancel_info_t *cancel_info;
+	pthread_t  dummy;
+	int num_active_threads = 0;
+	pthread_mutex_t  num_active_threads_lock;
+	pthread_cond_t   num_active_threads_cond;
+
+	slurm_attr_init(&attr);
+	if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))
+		error("pthread_attr_setdetachstate error %m");
+
+	slurm_mutex_init(&num_active_threads_lock);
+
+	if (pthread_cond_init(&num_active_threads_cond, NULL))
+		error("pthread_cond_init error %m");
+
+	job_ptr = job_buffer_ptr->job_array ;
+
+	/* Spawn a thread to cancel each job or job step marked for
+	 * cancellation */
+	for (i = 0; i < job_buffer_ptr->record_count; i++) {
+		if (job_ptr[i].job_id == 0) 
+			continue;
 
-	if (opt.job_cnt && opt.interactive) {	/* confirm cancel */
-		job_ptr = job_buffer_ptr->job_array ;
-		for (j = 0; j < opt.job_cnt; j++ ) {
-			for (i = 0; i < job_buffer_ptr->record_count; i++) {
-				if (job_ptr[i].job_id != opt.job_id[j]) 
+		/* If cancelling a list of jobs, see if the current job 
+		 * included a step id */
+		if (opt.job_cnt) {
+			for (j = 0; j < opt.job_cnt; j++ ) {
+				if (job_ptr[i].job_id != opt.job_id[j])
 					continue;
+
 				if (opt.interactive && 
 				    (_confirmation(i, opt.step_id[j]) == 0))
+					continue;
+
+				cancel_info = 
+					(job_cancel_info_t *) 
+					xmalloc(sizeof(job_cancel_info_t));
+				cancel_info->job_id  = job_ptr[i].job_id;
+				cancel_info->sig     = opt.signal;
+				cancel_info->num_active_threads = 
+					&num_active_threads;
+				cancel_info->num_active_threads_lock = 
+					&num_active_threads_lock;
+				cancel_info->num_active_threads_cond = 
+					&num_active_threads_cond;
+
+				pthread_mutex_lock( &num_active_threads_lock );
+				num_active_threads++;
+				while (num_active_threads > MAX_THREADS) {
+					pthread_cond_wait(&num_active_threads_cond,
+							  &num_active_threads_lock);
+				}
+				pthread_mutex_unlock( &num_active_threads_lock );
+
+				if (opt.step_id[j] == SLURM_BATCH_SCRIPT) {
+					err = pthread_create(&dummy, &attr, 
+							     _cancel_job_id,
+							     cancel_info);
+					if (err)
+						_cancel_job_id(cancel_info);
 					break;
-				if (opt.step_id[j] == SLURM_BATCH_SCRIPT)
-					_cancel_job_id (opt.job_id[j], 
-							opt.signal);
-				else
-					_cancel_step_id (opt.job_id[j], 
-					                opt.step_id[j],
-							opt.signal);
-				break;
+				} else {
+					cancel_info->step_id = opt.step_id[j];
+					err = pthread_create(&dummy, &attr, 
+							     _cancel_step_id,
+							     cancel_info);
+					if (err)
+						_cancel_step_id(cancel_info);
+					/* Don't break here.  Keep looping in 
+					 * case other steps from the same job 
+					 * are cancelled. */
+				}
 			}
-			if (i >= job_buffer_ptr->record_count)
-				fprintf (stderr, "Job %u not found\n", 
-				         opt.job_id[j]);
-		}
-
-	} else if (opt.job_cnt) {	/* delete specific jobs */
-		for (j = 0; j < opt.job_cnt; j++ ) {
-			if (opt.step_id[j] == SLURM_BATCH_SCRIPT)
-				_cancel_job_id (opt.job_id[j], 
-						opt.signal);
-			else
-				_cancel_step_id (opt.job_id[j], 
-				                opt.step_id[j], 
-						opt.signal);
-		}
-
-	} else {		/* delete all jobs per filtering */
-		job_ptr = job_buffer_ptr->job_array ;
-		for (i = 0; i < job_buffer_ptr->record_count; i++) {
-			if (job_ptr[i].job_id == 0) 
-				continue;
+		} else {
 			if (opt.interactive && 
 			    (_confirmation(i, SLURM_BATCH_SCRIPT) == 0))
 				continue;
-			_cancel_job_id (job_ptr[i].job_id, opt.signal);
+
+			cancel_info = 
+				(job_cancel_info_t *)
+				xmalloc(sizeof(job_cancel_info_t));
+			cancel_info->job_id  = job_ptr[i].job_id;
+			cancel_info->sig     = opt.signal;
+			cancel_info->num_active_threads = &num_active_threads;
+			cancel_info->num_active_threads_lock = 
+				&num_active_threads_lock;
+			cancel_info->num_active_threads_cond = 
+				&num_active_threads_cond;
+
+			pthread_mutex_lock( &num_active_threads_lock );
+			num_active_threads++;
+			while (num_active_threads > MAX_THREADS) {
+				pthread_cond_wait( &num_active_threads_cond,
+						   &num_active_threads_lock );
+			}
+			pthread_mutex_unlock( &num_active_threads_lock );
+
+			err = pthread_create(&dummy, &attr, 
+					     _cancel_job_id,
+					     cancel_info);
+			if (err)
+				_cancel_job_id(cancel_info);
 		}
 	}
+
+	/* Wait for any spawned threads that have not finished */
+	pthread_mutex_lock( &num_active_threads_lock );
+	while (num_active_threads > 0) {
+		pthread_cond_wait( &num_active_threads_cond,
+				   &num_active_threads_lock );
+	}
+	pthread_mutex_unlock( &num_active_threads_lock );
+
+	slurm_attr_destroy(&attr);
+	slurm_mutex_destroy(&num_active_threads_lock);
+	if (pthread_cond_destroy(&num_active_threads_cond))
+		error("pthread_cond_destroy error %m");
 }
 
-static void
-_cancel_job_id (uint32_t job_id, uint16_t sig)
+static void *
+_cancel_job_id (void *ci)
 {
 	int error_code = SLURM_SUCCESS, i;
 	bool sig_set = true;
 
+	job_cancel_info_t *cancel_info = (job_cancel_info_t *)ci;
+	uint32_t job_id = cancel_info->job_id;
+	uint16_t sig    = cancel_info->sig;
+
 	if (sig == (uint16_t)-1) {
 		sig = SIGKILL;
 		sig_set = false;
@@ -281,12 +421,27 @@ _cancel_job_id (uint32_t job_id, uint16_t sig)
 			error("Kill job error on job id %u: %s", 
 				job_id, slurm_strerror(slurm_get_errno()));
 	}
+
+	/* Purposely free the struct passed in here, so the caller doesn't have
+	 * to keep track of it, but don't destroy the mutex and condition 
+	 * variables contained. */ 
+	pthread_mutex_lock(   cancel_info->num_active_threads_lock );
+	(*(cancel_info->num_active_threads))--;
+	pthread_cond_signal(  cancel_info->num_active_threads_cond );
+	pthread_mutex_unlock( cancel_info->num_active_threads_lock );
+
+	xfree(cancel_info);
+	return NULL;
 }
 
-static void
-_cancel_step_id (uint32_t job_id, uint32_t step_id, uint16_t sig)
+static void *
+_cancel_step_id (void *ci)
 {
 	int error_code = SLURM_SUCCESS, i;
+	job_cancel_info_t *cancel_info = (job_cancel_info_t *)ci;
+	uint32_t job_id  = cancel_info->job_id;
+	uint32_t step_id = cancel_info->step_id;
+	uint16_t sig     = cancel_info->sig;
 
 	if (sig == (uint16_t)-1)
 		sig = SIGKILL;
@@ -320,6 +475,17 @@ _cancel_step_id (uint32_t job_id, uint32_t step_id, uint16_t sig)
 		 		job_id, step_id, 
 				slurm_strerror(slurm_get_errno()));
 	}
+
+	/* Purposely free the struct passed in here, so the caller doesn't have
+	 * to keep track of it, but don't destroy the mutex and condition 
+	 * variables contained. */ 
+	pthread_mutex_lock(   cancel_info->num_active_threads_lock );
+	(*(cancel_info->num_active_threads))--;
+	pthread_cond_signal(  cancel_info->num_active_threads_cond );
+	pthread_mutex_unlock( cancel_info->num_active_threads_lock );
+
+	xfree(cancel_info);
+	return NULL;
 }
 
 /* _confirmation - Confirm job cancel request interactively */
diff --git a/src/scancel/scancel.h b/src/scancel/scancel.h
index 333b78b85..8e8905ee5 100644
--- a/src/scancel/scancel.h
+++ b/src/scancel/scancel.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette<jette1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -57,6 +58,8 @@ typedef struct scancel_options {
 	uint16_t job_cnt;	/* count of job_id's specified	*/
 	uint32_t *job_id;	/* list of job_id's		*/
 	uint32_t *step_id;	/* list of job step id's	*/
+	char *wckey;		/* --wckey			*/
+	char *nodelist;		/* --nodelist, -w		*/
 } opt_t;
 
 opt_t opt;
diff --git a/src/scontrol/Makefile.am b/src/scontrol/Makefile.am
index 31b51399c..7e5907dbb 100644
--- a/src/scontrol/Makefile.am
+++ b/src/scontrol/Makefile.am
@@ -7,16 +7,18 @@ INCLUDES = -I$(top_srcdir)
 bin_PROGRAMS = scontrol
 
 scontrol_SOURCES =	\
+	create_res.c	\
 	info_job.c	\
 	info_node.c	\
 	info_part.c	\
+	info_res.c	\
 	scontrol.c	\
 	scontrol.h	\
 	update_job.c	\
 	update_node.c	\
 	update_part.c
 
-convenience_libs = $(top_builddir)/src/api/libslurm.o -ldl
+convenience_libs = $(top_builddir)/src/api/libslurm.o -ldl -lm
 
 
 scontrol_LDADD = \
diff --git a/src/scontrol/Makefile.in b/src/scontrol/Makefile.in
index 644cb23a2..e958dece9 100644
--- a/src/scontrol/Makefile.in
+++ b/src/scontrol/Makefile.in
@@ -44,14 +44,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -71,9 +75,10 @@ CONFIG_CLEAN_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
-am_scontrol_OBJECTS = info_job.$(OBJEXT) info_node.$(OBJEXT) \
-	info_part.$(OBJEXT) scontrol.$(OBJEXT) update_job.$(OBJEXT) \
-	update_node.$(OBJEXT) update_part.$(OBJEXT)
+am_scontrol_OBJECTS = create_res.$(OBJEXT) info_job.$(OBJEXT) \
+	info_node.$(OBJEXT) info_part.$(OBJEXT) info_res.$(OBJEXT) \
+	scontrol.$(OBJEXT) update_job.$(OBJEXT) update_node.$(OBJEXT) \
+	update_part.$(OBJEXT)
 scontrol_OBJECTS = $(am_scontrol_OBJECTS)
 am__DEPENDENCIES_1 = $(top_builddir)/src/api/libslurm.o
 am__DEPENDENCIES_2 =
@@ -108,6 +113,10 @@ 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@
@@ -270,16 +279,18 @@ top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 INCLUDES = -I$(top_srcdir)
 scontrol_SOURCES = \
+	create_res.c	\
 	info_job.c	\
 	info_node.c	\
 	info_part.c	\
+	info_res.c	\
 	scontrol.c	\
 	scontrol.h	\
 	update_job.c	\
 	update_node.c	\
 	update_part.c
 
-convenience_libs = $(top_builddir)/src/api/libslurm.o -ldl
+convenience_libs = $(top_builddir)/src/api/libslurm.o -ldl -lm
 scontrol_LDADD = \
 	$(convenience_libs) \
 	$(READLINE_LIBS)
@@ -356,9 +367,11 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/create_res.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info_job.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info_node.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info_part.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info_res.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scontrol.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update_job.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update_node.Po@am__quote@
diff --git a/src/scontrol/create_res.c b/src/scontrol/create_res.c
new file mode 100644
index 000000000..4e1df350f
--- /dev/null
+++ b/src/scontrol/create_res.c
@@ -0,0 +1,400 @@
+/*****************************************************************************\
+ *  create_res.c - reservation creation function for scontrol.
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by David Bremer <dbremer@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include "src/scontrol/scontrol.h"
+#include "src/slurmctld/reservation.h"
+
+
+/*
+ *  _process_plus_minus is used to convert a string like
+ *       Users+=a,b,c
+ *  to   Users=+a,+b,+c
+ */
+
+static char * _process_plus_minus(char plus_or_minus, char *src)
+{
+	int num_commas = 0;
+	int ii;
+	int srclen = strlen(src);
+	char *dst, *ret;
+
+	for (ii=0; ii<srclen; ii++) {
+		if (src[ii] == ',')
+			num_commas++;
+	}
+	ret = dst = xmalloc(srclen + 2 + num_commas);
+
+	*dst++ = plus_or_minus;
+	for (ii=0; ii<srclen; ii++) {
+		if (*src == ',') {
+			*dst++ = *src++;
+			*dst++ = plus_or_minus;
+		} else {
+			*dst++ = *src++;
+		}
+	}
+	*dst = '\0';
+
+	return ret;
+}
+
+
+/*
+ *  _parse_flags  is used to parse the Flags= option.  It handles
+ *  daily, weekly, and maint, optionally preceded by + or -, 
+ *  separated by a comma but no spaces.
+ */
+static uint32_t _parse_flags(const char *flagstr, const char *msg)
+{
+	int flip;
+	uint32_t outflags = 0;
+	const char *curr = flagstr;
+	int taglen = 0;
+
+	while (*curr != '\0') {
+		flip = 0;
+		if (*curr == '+') {
+			curr++;
+		} else if (*curr == '-') {
+			flip = 1;
+			curr++;
+		}
+		taglen = 0;
+		while (curr[taglen] != ',' && curr[taglen] != '\0')
+			taglen++;
+
+		if (strncasecmp(curr, "Maintenance", MAX(taglen,1)) == 0) {
+			curr += taglen;
+			if (flip)
+				outflags |= RESERVE_FLAG_NO_MAINT;
+			else 
+				outflags |= RESERVE_FLAG_MAINT;
+		} else if (strncasecmp(curr, "Daily", MAX(taglen,1)) == 0) {
+			curr += taglen;
+			if (flip)
+				outflags |= RESERVE_FLAG_NO_DAILY;
+			else 
+				outflags |= RESERVE_FLAG_DAILY;
+		} else if (strncasecmp(curr, "Weekly", MAX(taglen,1)) == 0) {
+			curr += taglen;
+			if (flip)
+				outflags |= RESERVE_FLAG_NO_WEEKLY;
+			else 
+				outflags |= RESERVE_FLAG_WEEKLY;
+		} else {
+			error("Error parsing flags %s.  %s", flagstr, msg);
+			return 0xffffffff;
+		}
+
+		if (*curr == ',') {
+			curr++;
+		}
+	}
+	return outflags;
+}
+
+
+
+/* 
+ * scontrol_parse_res_options   parse options for creating or updating a 
+                                reservation
+ * IN argc - count of arguments
+ * IN argv - list of arguments
+ * IN msg  - a string to append to any error message
+ * OUT resv_msg_ptr - struct holding reservation parameters
+ * OUT free_user_str - bool indicating that resv_msg_ptr->users should be freed 
+ * OUT free_acct_str - bool indicating that resv_msg_ptr->accounts should be freed 
+ * RET 0 on success, -1 on err and prints message
+ */
+extern int
+scontrol_parse_res_options(int argc, char *argv[], const char *msg, 
+			   resv_desc_msg_t  *resv_msg_ptr, 
+			   int *free_user_str, int *free_acct_str)
+{
+	int i;
+	int duration = -3;   /* -1 == INFINITE, -2 == error, -3 == not set */
+
+	*free_user_str = 0;
+	*free_acct_str = 0;
+
+	for (i=0; i<argc; i++) {
+		char *tag = argv[i];
+		int taglen = 0;
+		char plus_minus = '\0';
+
+		char *val = strchr(argv[i], '=');
+		taglen = val - argv[i];
+
+		if (!val && strncasecmp(argv[i], "res", 3) == 0) {
+			continue;
+		} else if (!val || taglen == 0) {
+			exit_code = 1;
+			error("Unknown parameter %s.  %s", argv[i], msg);
+			return -1;
+		}
+		if (val[-1] == '+' || val[-1] == '-') {
+			plus_minus = val[-1];
+			taglen--;
+		}
+		val++;
+
+		if (strncasecmp(tag, "ReservationName", MAX(taglen, 1)) == 0) {
+			resv_msg_ptr->name = val;
+
+		} else if (strncasecmp(tag, "StartTime", MAX(taglen, 1)) == 0) {
+			time_t  t = parse_time(val, 0);
+			if (t == 0) {
+				exit_code = 1;
+				error("Invalid start time %s.  %s", 
+				      argv[i], msg);
+				return -1;
+			}
+			resv_msg_ptr->start_time = t;
+
+		} else if (strncasecmp(tag, "EndTime", MAX(taglen, 1)) == 0) {
+			time_t  t = parse_time(val, 0);
+			if (t == 0) {
+				exit_code = 1;
+				error("Invalid end time %s.  %s", argv[i], msg);
+				return -1;
+			}
+			resv_msg_ptr->end_time = t;
+
+		} else if (strncasecmp(tag, "Duration", MAX(taglen, 1)) == 0) {
+			/* -1 == INFINITE, -2 == error, -3 == not set */
+			duration = time_str2mins(val);
+			if (duration < 0 && duration != INFINITE) {
+				exit_code = 1;
+				error("Invalid duration %s.  %s", argv[i], msg);
+				return -1;
+			}
+			resv_msg_ptr->duration = (uint32_t)duration;
+
+		} else if (strncasecmp(tag, "Flags", MAX(taglen, 2)) == 0) {
+			uint32_t f;
+			if (plus_minus) {
+				char *tmp =
+					_process_plus_minus(plus_minus, val);
+				f = _parse_flags(tmp, msg);
+				xfree(tmp);
+			} else {
+				f = _parse_flags(val, msg);
+			}
+			if (f == 0xffffffff) {
+				return -1;
+			} else {
+				resv_msg_ptr->flags = f;
+			}
+		} else if (strncasecmp(tag, "NodeCnt", MAX(taglen,5)) == 0 || 
+			   strncasecmp(tag, "NodeCount", MAX(taglen,5)) == 0) {
+			char *endptr = NULL;
+			resv_msg_ptr->node_cnt = strtol(val, &endptr, 10);
+
+			if (endptr == NULL || *endptr != '\0' || 
+                            *val == '\0') {
+				exit_code = 1;
+				error("Invalid node count %s.  %s", 
+				      argv[i], msg);
+				return -1;
+			}
+		} else if (strncasecmp(tag, "Nodes", MAX(taglen, 5)) == 0) {
+			resv_msg_ptr->node_list = val;
+
+		} else if (strncasecmp(tag, "Features", MAX(taglen, 2)) == 0) {
+			resv_msg_ptr->features = val;
+
+		} else if (strncasecmp(tag, "PartitionName", MAX(taglen, 1)) == 0) {
+			resv_msg_ptr->partition = val;
+
+		} else if (strncasecmp(tag, "Users", MAX(taglen, 1)) == 0) {
+			if (plus_minus) {
+				resv_msg_ptr->users = 
+					_process_plus_minus(plus_minus, val);
+				*free_user_str = 1;
+			} else {
+				resv_msg_ptr->users = val;
+			}
+		} else if (strncasecmp(tag, "Accounts", MAX(taglen, 1)) == 0) {
+			if (plus_minus) {
+				resv_msg_ptr->accounts = 
+					_process_plus_minus(plus_minus, val);
+				*free_acct_str = 1;
+			} else {
+				resv_msg_ptr->accounts = val;
+			}
+		} else if (strncasecmp(tag, "res", 3) == 0) {
+			continue;
+		} else {
+			exit_code = 1;
+			error("Unknown parameter %s.  %s", argv[i], msg);
+			return -1;
+		}
+	}
+	return 0;
+}
+
+
+
+/* 
+ * scontrol_update_res - update the slurm reservation configuration per the 
+ *     supplied arguments 
+ * IN argc - count of arguments
+ * IN argv - list of arguments
+ * RET 0 if no slurm error, errno otherwise. parsing error prints 
+ *     error message and returns 0.
+ */
+extern int
+scontrol_update_res(int argc, char *argv[])
+{
+	resv_desc_msg_t   resv_msg;
+	int err, ret = 0;
+	int free_user_str = 0, free_acct_str = 0;
+
+	slurm_init_resv_desc_msg (&resv_msg);
+	err = scontrol_parse_res_options(argc, argv, "No reservation update.",
+					 &resv_msg, &free_user_str, 
+					 &free_acct_str);
+	if (err)
+		goto SCONTROL_UPDATE_RES_CLEANUP;
+
+	if (resv_msg.name == NULL) {
+		exit_code = 1;
+		error("Reservation must be given.  No reservation update.");
+		goto SCONTROL_UPDATE_RES_CLEANUP;
+	}
+
+	err = slurm_update_reservation(&resv_msg);
+	if (err) {
+		exit_code = 1;
+		slurm_perror("Error updating the reservation");
+		ret = slurm_get_errno();
+	} else {
+		printf("Reservation updated.\n");
+	}
+
+SCONTROL_UPDATE_RES_CLEANUP:
+	if (free_user_str)
+		xfree(resv_msg.users);
+	if (free_acct_str)
+		xfree(resv_msg.accounts);
+	return ret;
+}
+
+
+
+/* 
+ * scontrol_create_res - create the slurm reservation configuration per the 
+ *     supplied arguments 
+ * IN argc - count of arguments
+ * IN argv - list of arguments
+ * RET 0 if no slurm error, errno otherwise. parsing error prints 
+ *     error message and returns 0.
+ */
+extern int
+scontrol_create_res(int argc, char *argv[])
+{
+	resv_desc_msg_t   resv_msg;
+	char *new_res_name = NULL;
+	int free_user_str = 0, free_acct_str = 0;
+	int err, ret = 0;
+
+	slurm_init_resv_desc_msg (&resv_msg);
+	err = scontrol_parse_res_options(argc, argv, "No reservation created.", 
+					 &resv_msg, &free_user_str, &free_acct_str);
+	if (err)
+		goto SCONTROL_CREATE_RES_CLEANUP;
+
+	if (resv_msg.start_time == (time_t)NO_VAL) {
+		exit_code = 1;
+		error("A start time must be given.  No reservation created.");
+		goto SCONTROL_CREATE_RES_CLEANUP;
+	}
+	if (resv_msg.end_time == (time_t)NO_VAL && 
+	    resv_msg.duration == (uint32_t)NO_VAL) {
+		exit_code = 1;
+		error("An end time or duration must be given.  "
+		      "No reservation created.");
+		goto SCONTROL_CREATE_RES_CLEANUP;
+	}
+	if (resv_msg.end_time != (time_t)NO_VAL && 
+	    resv_msg.duration != (uint32_t)NO_VAL && 
+            resv_msg.start_time + resv_msg.duration*60 != resv_msg.end_time) {
+		exit_code = 1;
+		error("StartTime + Duration does not equal EndTime.  "
+		      "No reservation created.");
+		goto SCONTROL_CREATE_RES_CLEANUP;
+	}
+	if (resv_msg.start_time > resv_msg.end_time && 
+	    resv_msg.end_time != (time_t)NO_VAL) {
+		exit_code = 1;
+		error("Start time cannot be after end time.  "
+		      "No reservation created.");
+		goto SCONTROL_CREATE_RES_CLEANUP;
+	}
+	if (resv_msg.node_cnt == NO_VAL && 
+	    (resv_msg.node_list == NULL || resv_msg.node_list[0] == '\0')) {
+		exit_code = 1;
+		error("Either Nodes or NodeCnt must be specified.  "
+		      "No reservation created.");
+		goto SCONTROL_CREATE_RES_CLEANUP;
+	}
+	if ((resv_msg.users == NULL    || resv_msg.users[0] == '\0') && 
+	    (resv_msg.accounts == NULL || resv_msg.accounts[0] == '\0')) {
+		exit_code = 1;
+		error("Either Users or Accounts must be specified.  "
+		      "No reservation created.");
+		goto SCONTROL_CREATE_RES_CLEANUP;
+	}
+
+	new_res_name = slurm_create_reservation(&resv_msg);
+	if (!new_res_name) {
+		exit_code = 1;
+		slurm_perror("Error creating the reservation");
+		ret = slurm_get_errno();
+	} else {
+		printf("Reservation created: %s\n", new_res_name);
+		free(new_res_name);
+	}
+
+SCONTROL_CREATE_RES_CLEANUP:
+	if (free_user_str)  
+		xfree(resv_msg.users);
+	if (free_acct_str)  
+		xfree(resv_msg.accounts);
+	return ret;
+}
diff --git a/src/scontrol/info_job.c b/src/scontrol/info_job.c
index cb8b944ff..415535934 100644
--- a/src/scontrol/info_job.c
+++ b/src/scontrol/info_job.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/scontrol/info_node.c b/src/scontrol/info_node.c
index 78acfbc05..29e117e34 100644
--- a/src/scontrol/info_node.c
+++ b/src/scontrol/info_node.c
@@ -1,13 +1,15 @@
 /*****************************************************************************\
  *  info_node.c - node information functions for scontrol.
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -183,3 +185,55 @@ scontrol_print_node_list (char *node_list)
 	return;
 }
 
+/*
+ * scontrol_print_topo - print the switch topology above the specified node
+ * IN node_name - NULL to print all topology information
+ */
+extern void	scontrol_print_topo (char *node_list)
+{
+	static topo_info_response_msg_t *topo_info_msg = NULL;
+	int i, match, match_cnt = 0;
+	hostset_t hs;
+
+	if ((topo_info_msg == NULL) &&
+	    slurm_load_topo(&topo_info_msg)) {
+		slurm_perror ("slurm_load_topo error");
+		return;
+	}
+
+	if ((node_list == NULL) || (node_list[0] == '\0')) {
+		slurm_print_topo_info_msg(stdout, topo_info_msg, one_liner);
+		return;
+	}
+
+	/* Search for matching switch name */
+	for (i=0; i<topo_info_msg->record_count; i++) {
+		if (strcmp(topo_info_msg->topo_array[i].name, node_list))
+			continue;
+		slurm_print_topo_record(stdout, &topo_info_msg->topo_array[i], 
+					one_liner);
+		return;
+	}
+
+	/* Search for matching node name */
+	for (i=0; i<topo_info_msg->record_count; i++) {
+		if ((topo_info_msg->topo_array[i].nodes == NULL) ||
+		    (topo_info_msg->topo_array[i].nodes[0] == '\0')) 
+			continue;
+		hs = hostset_create(topo_info_msg->topo_array[i].nodes);
+		if (hs == NULL)
+			fatal("hostset_create: memory allocation failure");
+		match = hostset_within(hs, node_list);
+		hostset_destroy(hs);
+		if (!match)
+			continue;
+		match_cnt++;
+		slurm_print_topo_record(stdout, &topo_info_msg->topo_array[i], 
+					one_liner);
+	}
+
+	if (match_cnt == 0) {
+		error("Topology information contains no switch or "
+		      "node named %s", node_list);
+	}
+}
diff --git a/src/scontrol/info_part.c b/src/scontrol/info_part.c
index 8c9e06069..e3bbe2591 100644
--- a/src/scontrol/info_part.c
+++ b/src/scontrol/info_part.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -79,7 +80,7 @@ scontrol_load_partitions (partition_info_msg_t **part_buffer_pptr)
 }
 
 /*
- * scontrol_print_par - print the specified partition's information
+ * scontrol_print_part - print the specified partition's information
  * IN partition_name - NULL to print information about all partition 
  */
 extern void 
diff --git a/src/scontrol/info_res.c b/src/scontrol/info_res.c
new file mode 100644
index 000000000..afe56ebc8
--- /dev/null
+++ b/src/scontrol/info_res.c
@@ -0,0 +1,140 @@
+/*****************************************************************************\
+ *  info_res.c - reservation information functions for scontrol.
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by David Bremer <dbremer@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include "scontrol.h"
+
+/* Load current reservation table information into *res_buffer_pptr */
+extern int 
+scontrol_load_reservations(reserve_info_msg_t **res_buffer_pptr)
+{
+	int error_code;
+	static reserve_info_msg_t *old_res_info_ptr = NULL;
+	reserve_info_msg_t *res_info_ptr = NULL;
+
+	if (old_res_info_ptr) {
+		error_code = slurm_load_reservations (
+						old_res_info_ptr->last_update,
+						&res_info_ptr);
+		if (error_code == SLURM_SUCCESS) {
+			slurm_free_reservation_info_msg (old_res_info_ptr);
+
+		} else if (slurm_get_errno () == SLURM_NO_CHANGE_IN_DATA) {
+			res_info_ptr = old_res_info_ptr;
+			error_code = SLURM_SUCCESS;
+			if (quiet_flag == -1)
+				printf ("slurm_load_reservations: no change in data\n");
+		}
+	}
+	else
+		error_code = slurm_load_reservations((time_t) NULL,
+						     &res_info_ptr);
+
+	if (error_code == SLURM_SUCCESS) {
+		old_res_info_ptr = res_info_ptr;
+		*res_buffer_pptr = res_info_ptr;
+	}
+
+	return error_code;
+}
+
+/*
+ * scontrol_print_res - print the specified reservation's information
+ * IN reservation_name - NULL to print information about all reservations
+ */
+extern void 
+scontrol_print_res (char *reservation_name) 
+{
+	int error_code, i, print_cnt = 0;
+	reserve_info_msg_t *res_info_ptr = NULL;
+	reserve_info_t *res_ptr = NULL;
+
+	error_code = scontrol_load_reservations(&res_info_ptr);
+	if (error_code) {
+		exit_code = 1;
+		if (quiet_flag != 1)
+			slurm_perror ("slurm_load_reservations error");
+		return;
+	}
+
+	if (quiet_flag == -1) {
+		char time_str[32];
+		slurm_make_time_str ((time_t *)&res_info_ptr->last_update, 
+			       time_str, sizeof(time_str));
+		printf ("last_update_time=%s, records=%d\n", 
+			time_str, res_info_ptr->record_count);
+	}
+
+	res_ptr = res_info_ptr->reservation_array;
+	for (i = 0; i < res_info_ptr->record_count; i++) {
+		if (reservation_name && 
+		    strcmp (reservation_name, res_ptr[i].name) != 0)
+			continue;
+		print_cnt++;
+		slurm_print_reservation_info (stdout, & res_ptr[i], 
+		                              one_liner ) ;
+		if (reservation_name)
+			break;
+	}
+
+	if (print_cnt == 0) {
+		if (reservation_name) {
+			exit_code = 1;
+			if (quiet_flag != 1)
+				printf ("Reservation %s not found\n", 
+				        reservation_name);
+		} else if (quiet_flag != 1)
+			printf ("No reservations in the system\n");
+	}
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/scontrol/scontrol.c b/src/scontrol/scontrol.c
index 8118836f1..84d7045b2 100644
--- a/src/scontrol/scontrol.c
+++ b/src/scontrol/scontrol.c
@@ -3,14 +3,15 @@
  *	provides interface to read, write, update, and configurations.
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Portions Copyright (C) 2008 Vijay Ramasubramanian.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -51,7 +52,9 @@ int one_liner;		/* one record per line if =1 */
 int quiet_flag;		/* quiet=1, verbose=-1, normal=0 */
 int verbosity;		/* count of "-v" options */
 
+static void	_create_it (int argc, char *argv[]);
 static void	_delete_it (int argc, char *argv[]);
+static void     _show_it (int argc, char *argv[]);
 static int	_get_command (int *argc, char *argv[]);
 static void     _ping_slurmctld(char *control_machine, char *backup_controller);
 static void	_print_config (char *config_param);
@@ -457,19 +460,29 @@ static int
 _process_command (int argc, char *argv[]) 
 {
 	int error_code = 0;
+	char *tag = argv[0];
+	int taglen = 0;
 
 	if (argc < 1) {
 		exit_code = 1;
 		if (quiet_flag == -1)
 			fprintf(stderr, "no input");
+		return 0;
+	} else if(tag)
+		taglen = strlen(tag);
+	else {
+		if (quiet_flag == -1)
+			fprintf(stderr, "input problem");
+		return 0;
 	}
-	else if (strncasecmp (argv[0], "abort", 5) == 0) {
+
+if (strncasecmp (tag, "abort", MAX(taglen, 5)) == 0) {
 		/* require full command name */
 		if (argc > 2) {
 			exit_code = 1;
 			fprintf (stderr,
 				 "too many arguments for keyword:%s\n", 
-				 argv[0]);
+				 tag);
 		}
 		error_code = slurm_shutdown (1);
 		if (error_code) {
@@ -478,92 +491,101 @@ _process_command (int argc, char *argv[])
 				slurm_perror ("slurm_shutdown error");
 		}
 	}
-	else if (strncasecmp (argv[0], "all", 3) == 0)
+	else if (strncasecmp (tag, "all", MAX(taglen, 2)) == 0)
 		all_flag = 1;
-	else if (strncasecmp (argv[0], "completing", 3) == 0) {
+	else if (strncasecmp (tag, "completing", MAX(taglen, 2)) == 0) {
 		if (argc > 1) {
 			exit_code = 1;
 			fprintf (stderr, 
 				 "too many arguments for keyword:%s\n", 
-				 argv[0]);
+				 tag);
 		}
 		scontrol_print_completing();
 	}
-	else if (strncasecmp (argv[0], "exit", 1) == 0) {
+	else if (strncasecmp (tag, "create", MAX(taglen, 2)) == 0) {
+		if (argc < 2) {
+			exit_code = 1;
+			fprintf (stderr, "too few arguments for %s keyword\n",
+				 tag);
+			return 0;
+		}		
+		_create_it ((argc - 1), &argv[1]);
+	}
+	else if (strncasecmp (tag, "exit", MAX(taglen, 1)) == 0) {
 		if (argc > 1) {
 			exit_code = 1;
 			fprintf (stderr, 
 				 "too many arguments for keyword:%s\n", 
-				 argv[0]);
+				 tag);
 		}
 		exit_flag = 1;
 	}
-	else if (strncasecmp (argv[0], "help", 2) == 0) {
+	else if (strncasecmp (tag, "help", MAX(taglen, 2)) == 0) {
 		if (argc > 1) {
 			exit_code = 1;
 			fprintf (stderr, 
 				 "too many arguments for keyword:%s\n",
-				 argv[0]);
+				 tag);
 		}
 		_usage ();
 	}
-	else if (strncasecmp (argv[0], "hide", 2) == 0)
+	else if (strncasecmp (tag, "hide", MAX(taglen, 2)) == 0)
 		all_flag = 0;
-	else if (strncasecmp (argv[0], "oneliner", 1) == 0) {
+	else if (strncasecmp (tag, "oneliner", MAX(taglen, 1)) == 0) {
 		if (argc > 1) {
 			exit_code = 1;
 			fprintf (stderr, 
 				 "too many arguments for keyword:%s\n",
-				 argv[0]);
+				 tag);
 		}
 		one_liner = 1;
 	}
-	else if (strncasecmp (argv[0], "pidinfo", 3) == 0) {
+	else if (strncasecmp (tag, "pidinfo", MAX(taglen, 3)) == 0) {
 		if (argc > 2) {
 			exit_code = 1;
 			fprintf (stderr, 
 				 "too many arguments for keyword:%s\n", 
-				 argv[0]);
+				 tag);
 		} else if (argc < 2) {
 			exit_code = 1;
 			fprintf (stderr, 
 				 "missing argument for keyword:%s\n", 
-				 argv[0]);
+				 tag);
 		} else
 			scontrol_pid_info ((pid_t) atol (argv[1]) );
 	}
-	else if (strncasecmp (argv[0], "ping", 3) == 0) {
+	else if (strncasecmp (tag, "ping", MAX(taglen, 3)) == 0) {
 		if (argc > 1) {
 			exit_code = 1;
 			fprintf (stderr, 
 				 "too many arguments for keyword:%s\n",
-				 argv[0]);
+				 tag);
 		}
 		_print_ping ();
 	}
-	else if ((strncasecmp (argv[0], "\\q", 2) == 0) ||
-		 (strncasecmp (argv[0], "quiet", 4) == 0)) {
+	else if ((strncasecmp (tag, "\\q", 2) == 0) ||
+		 (strncasecmp (tag, "quiet", MAX(taglen, 4)) == 0)) {
 		if (argc > 1) {
 			exit_code = 1;
 			fprintf (stderr, "too many arguments for keyword:%s\n",
-				 argv[0]);
+				 tag);
 		}
 		quiet_flag = 1;
 	}
-	else if (strncasecmp (argv[0], "quit", 4) == 0) {
+	else if (strncasecmp (tag, "quit", MAX(taglen, 4)) == 0) {
 		if (argc > 1) {
 			exit_code = 1;
 			fprintf (stderr, 
 				 "too many arguments for keyword:%s\n", 
-				 argv[0]);
+				 tag);
 		}
 		exit_flag = 1;
 	}
-	else if (strncasecmp (argv[0], "reconfigure", 3) == 0) {
+	else if (strncasecmp (tag, "reconfigure", MAX(taglen, 3)) == 0) {
 		if (argc > 2) {
 			exit_code = 1;
 			fprintf (stderr, "too many arguments for keyword:%s\n",
-			         argv[0]);
+			         tag);
 		}
 		error_code = slurm_reconfigure ();
 		if (error_code) {
@@ -572,43 +594,44 @@ _process_command (int argc, char *argv[])
 				slurm_perror ("slurm_reconfigure error");
 		}
 	}
-	else if (strncasecmp (argv[0], "checkpoint", 5) == 0) {
-		if (argc > 3) {
+	else if (strncasecmp (tag, "checkpoint", MAX(taglen, 2)) == 0) {
+		if (argc > 5) {
 			exit_code = 1;
 			if (quiet_flag != 1)
 				fprintf(stderr, 
 				        "too many arguments for keyword:%s\n", 
-				        argv[0]);
+				        tag);
 		}
 		else if (argc < 3) {
 			exit_code = 1;
 			if (quiet_flag != 1)
 				fprintf(stderr, 
 				        "too few arguments for keyword:%s\n", 
-				        argv[0]);
+				        tag);
 		}
 		else {
-			error_code = scontrol_checkpoint(argv[1], argv[2]);
+			error_code = scontrol_checkpoint(argv[1], argv[2], 
+							 argc - 3, &argv[3]);
 			if (error_code) {
 				exit_code = 1;
 				if (quiet_flag != 1)
-					slurm_perror ("slurm_checkpoint error");
+					slurm_perror ("scontrol_checkpoint error");
 			}
 		}
 	}
-	else if (strncasecmp (argv[0], "requeue", 3) == 0) {
+	else if (strncasecmp (tag, "requeue", MAX(taglen, 3)) == 0) {
 		if (argc > 2) {
 			exit_code = 1;
 			if (quiet_flag != 1)
 				fprintf(stderr,
 					"too many arguments for keyword:%s\n",
-					argv[0]);
+					tag);
 		} else if (argc < 2) {
 			exit_code = 1;
 			if (quiet_flag != 1)
 				fprintf(stderr,
 					"too few arguments for keyword:%s\n",
-					argv[0]);
+					tag);
 		} else {
 			error_code = scontrol_requeue(argv[1]);
 			if (error_code) {
@@ -619,21 +642,21 @@ _process_command (int argc, char *argv[])
 		}
 				
 	}
-	else if ((strncasecmp (argv[0], "suspend", 3) == 0)
-	||       (strncasecmp (argv[0], "resume", 3) == 0)) {
+	else if ((strncasecmp (tag, "suspend", MAX(taglen, 2)) == 0)
+	||       (strncasecmp (tag, "resume", MAX(taglen, 3)) == 0)) {
 		if (argc > 2) {
 			exit_code = 1;
 			if (quiet_flag != 1)
 				fprintf(stderr,
 					"too many arguments for keyword:%s\n",
-					argv[0]);
+					tag);
 		}
 		else if (argc < 2) {
 			exit_code = 1;
 			if (quiet_flag != 1)
 				fprintf(stderr,
 					"too few arguments for keyword:%s\n",
-					argv[0]);
+					tag);
 		} else {
 			error_code =scontrol_suspend(argv[0], argv[1]);
 			if (error_code) {
@@ -643,23 +666,26 @@ _process_command (int argc, char *argv[])
 			}
 		}
 	}
-	else if (strncasecmp (argv[0], "setdebug", 4) == 0) {
+	else if (strncasecmp (tag, "setdebug", MAX(taglen, 2)) == 0) {
 		if (argc > 2) {
 			exit_code = 1;
 			if (quiet_flag != 1)
-				fprintf(stderr, "too many arguments for keyword:%s\n",
-					argv[0]);
+				fprintf(stderr, 
+					"too many arguments for keyword:%s\n",
+					tag);
 		} else if (argc < 2) {
 			exit_code = 1;
 			if (quiet_flag != 1)
-				fprintf(stderr, "too few arguments for keyword:%s\n",
-					argv[0]);
+				fprintf(stderr, 
+					"too few arguments for keyword:%s\n",
+					tag);
 		} else {
 			int level = -1;
 			char *endptr;
 			char *levels[] = {
 				"quiet", "fatal", "error", "info", "verbose",
-				"debug", "debug2", "debug3", "debug4", "debug5", NULL};
+				"debug", "debug2", "debug3", "debug4", 
+				"debug5", NULL};
 			int index = 0;
 			while (levels[index]) {
 				if (strcasecmp(argv[1], levels[index]) == 0) {
@@ -669,13 +695,14 @@ _process_command (int argc, char *argv[])
 				index ++;
 			}
 			if (level == -1) {
-				level = (int)strtoul (argv[1], &endptr, 10);    /* effective levels: 0 - 9 */
+				/* effective levels: 0 - 9 */
+				level = (int)strtoul (argv[1], &endptr, 10);
 				if (*endptr != '\0' || level > 9) {
 					level = -1;
 					exit_code = 1;
 					if (quiet_flag != 1)
-						fprintf(stderr, "invalid debug level: %s\n",
-							argv[1]);
+						fprintf(stderr, "invalid debug "
+							"level: %s\n", argv[1]);
 				}
 			}
 			if (level != -1) {
@@ -688,91 +715,31 @@ _process_command (int argc, char *argv[])
 			}
 		}
 	}
-	else if (strncasecmp (argv[0], "show", 3) == 0) {
-		if (argc > 3) {
-			exit_code = 1;
-			if (quiet_flag != 1)
-				fprintf(stderr, 
-				        "too many arguments for keyword:%s\n", 
-				        argv[0]);
-		}
-		else if (argc < 2) {
-			exit_code = 1;
-			if (quiet_flag != 1)
-				fprintf(stderr, 
-				        "too few arguments for keyword:%s\n", 
-				        argv[0]);
-		}
-		else if (strncasecmp (argv[1], "config", 3) == 0) {
-			if (argc > 2)
-				_print_config (argv[2]);
-			else
-				_print_config (NULL);
-		}
-		else if (strncasecmp (argv[1], "daemons", 3) == 0) {
-			if (argc > 2) {
+	else if (strncasecmp (tag, "show", MAX(taglen, 3)) == 0) {
+		_show_it (argc, argv);
+	}
+	else if (strncasecmp (tag, "takeover", MAX(taglen, 8)) == 0) {
+		char *secondary = NULL;
+		slurm_ctl_conf_info_msg_t  *slurm_ctl_conf_ptr = NULL;
+
+		slurm_ctl_conf_ptr = slurm_conf_lock();
+		secondary = xstrdup(slurm_ctl_conf_ptr->backup_controller);
+		slurm_conf_unlock();
+
+		if ( secondary && secondary[0] != '\0' ) {
+			error_code = slurm_takeover();
+			if (error_code) {
 				exit_code = 1;
 				if (quiet_flag != 1)
-					fprintf(stderr,
-					        "too many arguments for keyword:%s\n", 
-					        argv[0]);
+					slurm_perror("slurm_takeover error");
 			}
-			_print_daemons ();
-		}
-		else if (strncasecmp (argv[1], "jobs", 3) == 0) {
-			if (argc > 2)
-				scontrol_print_job (argv[2]);
-			else
-				scontrol_print_job (NULL);
-		}
-		else if (strncasecmp (argv[1], "hostnames", 5) == 0) {
-			if (argc > 2)
-				scontrol_print_hosts(argv[2]);
-			else
-				scontrol_print_hosts(getenv("SLURM_NODELIST"));
-		}
-		else if (strncasecmp (argv[1], "hostlist", 5) == 0) {
-			if (argc != 3) {
-				exit_code = 1;
-				fprintf(stderr, "invalid encode argument\n");
-				_usage();
-			} else if (scontrol_encode_hostlist(argv[2]))
-				exit_code = 1;
-		}
-		else if (strncasecmp (argv[1], "nodes", 3) == 0) {
-			if (argc > 2)
-				scontrol_print_node_list (argv[2]);
-			else
-				scontrol_print_node_list (NULL);
-		}
-		else if (strncasecmp (argv[1], "partitions", 3) == 0) {
-			if (argc > 2)
-				scontrol_print_part (argv[2]);
-			else
-				scontrol_print_part (NULL);
-		}
-		else if (strncasecmp (argv[1], "slurmd", 6) == 0) {
-			if (argc > 2)
-				_print_slurmd(argv[2]);
-			else
-				_print_slurmd(NULL);
-		}
-		else if (strncasecmp (argv[1], "steps", 3) == 0) {
-			if (argc > 2)
-				scontrol_print_step (argv[2]);
-			else
-				scontrol_print_step (NULL);
+		} else {
+			fprintf(stderr, "slurm_takeover error: no backup "
+				"controller defined\n");
 		}
-		else {
-			exit_code = 1;
-			if (quiet_flag != 1)
-				fprintf (stderr,
-					 "invalid entity:%s for keyword:%s \n",
-					 argv[1], argv[0]);
-		}		
-
+		xfree(secondary);
 	}
-	else if (strncasecmp (argv[0], "shutdown", 8) == 0) {
+	else if (strncasecmp (tag, "shutdown", MAX(taglen, 8)) == 0) {
 		/* require full command name */
 		uint16_t options = 0;
 		if (argc == 2) {
@@ -790,7 +757,7 @@ _process_command (int argc, char *argv[])
 			exit_code = 1;
 			fprintf (stderr,
 				 "too many arguments for keyword:%s\n", 
-				 argv[0]);
+				 tag);
 		}
 		if (error_code == 0) {
 			error_code = slurm_shutdown(options);
@@ -801,59 +768,59 @@ _process_command (int argc, char *argv[])
 			}
 		}
 	}
-	else if (strncasecmp (argv[0], "update", 1) == 0) {
+	else if (strncasecmp (tag, "update", MAX(taglen, 1)) == 0) {
 		if (argc < 2) {
 			exit_code = 1;
 			fprintf (stderr, "too few arguments for %s keyword\n",
-				 argv[0]);
+				 tag);
 			return 0;
 		}		
 		_update_it ((argc - 1), &argv[1]);
 	}
-	else if (strncasecmp (argv[0], "delete", 3) == 0) {
+	else if (strncasecmp (tag, "delete", MAX(taglen, 1)) == 0) {
 		if (argc < 2) {
 			exit_code = 1;
 			fprintf (stderr, "too few arguments for %s keyword\n",
-				 argv[0]);
+				 tag);
 			return 0;
 		}
 		_delete_it ((argc - 1), &argv[1]);
 	}
-	else if (strncasecmp (argv[0], "verbose", 4) == 0) {
+	else if (strncasecmp (tag, "verbose", MAX(taglen, 4)) == 0) {
 		if (argc > 1) {
 			exit_code = 1;
 			fprintf (stderr,
 				 "too many arguments for %s keyword\n",
-				 argv[0]);
+				 tag);
 		}		
 		quiet_flag = -1;
 	}
-	else if (strncasecmp (argv[0], "version", 4) == 0) {
+	else if (strncasecmp (tag, "version", MAX(taglen, 4)) == 0) {
 		if (argc > 1) {
 			exit_code = 1;
 			fprintf (stderr,
 				 "too many arguments for %s keyword\n",
-				 argv[0]);
+				 tag);
 		}		
 		_print_version();
 	}
-	else if (strncasecmp (argv[0], "listpids", 8) == 0) {
+	else if (strncasecmp (tag, "listpids", MAX(taglen, 1)) == 0) {
 		if (argc > 3) {
 			exit_code = 1;
 			fprintf (stderr, 
 				 "too many arguments for keyword:%s\n", 
-				 argv[0]);
+				 tag);
 		} else {
 			scontrol_list_pids (argc == 1 ? NULL : argv[1],
 					    argc <= 2 ? NULL : argv[2]);
 		}
 	}
-	else if (strncasecmp (argv[0], "notify", 6) == 0) {
+	else if (strncasecmp (tag, "notify", MAX(taglen, 1)) == 0) {
 		if (argc < 3) {
 			exit_code = 1;
 			fprintf (stderr, 
 				 "too few arguments for keyword:%s\n", 
-				 argv[0]);
+				 tag);
 		} else if (scontrol_job_notify(argc-1, &argv[1])) {
 			exit_code = 1;
 			slurm_perror("job notify failure");
@@ -861,37 +828,210 @@ _process_command (int argc, char *argv[])
 	}
 	else {
 		exit_code = 1;
-		fprintf (stderr, "invalid keyword: %s\n", argv[0]);
+		fprintf (stderr, "invalid keyword: %s\n", tag);
 	}
 
 	return 0;
 }
 
+
 /* 
- * _delete_it - delete the slurm the specified slurm entity 
+ * _create_it - create a slurm configuration per the supplied arguments 
+ * IN argc - count of arguments
+ * IN argv - list of arguments
+ */
+static void
+_create_it (int argc, char *argv[]) 
+{
+	/* Scan for "res" first, anywhere in the args.  When creating
+	   a reservation there is a partition= option, which we don't
+	   want to mistake for a requestion to create a partition. */
+	int i, error_code = SLURM_SUCCESS;
+	for (i=0; i<argc; i++) {
+		char *tag = argv[i];
+		char *val = strchr(argv[i], '=');
+		int taglen;
+
+		if (val) {
+			taglen = val - argv[i];
+			val++;
+		} else {
+			taglen = strlen(tag);
+		}
+		if (!strncasecmp(tag, "ReservationName", MAX(taglen, 3))) {
+			error_code = scontrol_create_res(argc, argv);
+			break;
+		} else if (!strncasecmp(tag, "PartitionName", MAX(taglen, 3))) {
+			error_code = scontrol_create_part(argc, argv);
+			break;
+		}
+	}
+
+	if (i >= argc) {
+		exit_code = 1;
+		error("Invalid creation entity: %s\n", argv[0]);
+	} else if (error_code) 
+		exit_code = 1;
+}
+
+
+
+
+/* 
+ * _delete_it - delete the specified slurm entity 
  * IN argc - count of arguments
  * IN argv - list of arguments
  */
 static void
 _delete_it (int argc, char *argv[]) 
 {
-	delete_part_msg_t part_msg;
+	char *tag = NULL, *val = NULL;
+	int taglen = 0;
+
+	if (argc != 1) {
+		error("Only one option follows delete.  %d given.\n", argc);
+		exit_code = 1;
+		return;
+	}
+
+	tag = argv[0];
+	val = strchr(argv[0], '=');
+	if (val) {
+		taglen = val - argv[0];
+		val++;
+	} else {
+		error("Proper format is 'delete Partition=p'"
+		      " or 'delete Reservation=r'\n");
+		exit_code = 1;
+		return;
+	}
 
 	/* First identify the entity type to delete */
-	if (strncasecmp (argv[0], "PartitionName=", 14) == 0) {
-		part_msg.name = argv[0] + 14;
+	if (strncasecmp (tag, "PartitionName", MAX(taglen, 1)) == 0) {
+		delete_part_msg_t part_msg;
+		part_msg.name = val;
 		if (slurm_delete_partition(&part_msg)) {
 			char errmsg[64];
 			snprintf(errmsg, 64, "delete_partition %s", argv[0]);
 			slurm_perror(errmsg);
 		}
+	} else if (strncasecmp (tag, "ReservationName", MAX(taglen, 1)) == 0) {
+		reservation_name_msg_t   res_msg;
+		res_msg.name = val;
+		if (slurm_delete_reservation(&res_msg)) {
+			char errmsg[64];
+			snprintf(errmsg, 64, "delete_reservation %s", argv[0]);
+			slurm_perror(errmsg);
+		}
 	} else {
 		exit_code = 1;
-		fprintf(stderr, "Invalid deletion entity: %s\n", argv[1]);
+		fprintf(stderr, "Invalid deletion entity: %s\n", argv[0]);
 	}
 }
 
 
+/* 
+ * _show_it - print a description of the specified slurm entity 
+ * IN argc - count of arguments
+ * IN argv - list of arguments
+ */
+static void
+_show_it (int argc, char *argv[])
+{
+	char *tag = NULL, *val = NULL;
+	int taglen = 0;
+
+	if (argc > 3) {
+		exit_code = 1;
+		if (quiet_flag != 1)
+			fprintf(stderr, 
+			        "too many arguments for keyword:%s\n", 
+			        argv[0]);
+		return;
+	}
+	else if (argc < 2) {
+		exit_code = 1;
+		if (quiet_flag != 1)
+			fprintf(stderr, 
+			        "too few arguments for keyword:%s\n", argv[0]);
+		return;
+	}
+
+	tag = argv[1];
+	taglen = strlen(tag);
+	val = strchr(argv[1], '=');
+	if (val) {
+		taglen = val - argv[1];
+		val++;
+	} else if (argc == 3) {
+		val = argv[2];
+	} else {
+		val = NULL;
+	}
+
+	if (strncasecmp (tag, "config", MAX(taglen, 1)) == 0) {
+		_print_config (val);
+	}
+	else if (strncasecmp (tag, "daemons", MAX(taglen, 1)) == 0) {
+		if (val) {
+			exit_code = 1;
+			if (quiet_flag != 1)
+				fprintf(stderr,
+				        "too many arguments for keyword:%s\n", 
+				        argv[0]);
+		}
+		_print_daemons ();
+	}
+	else if (strncasecmp (tag, "jobs", MAX(taglen, 1)) == 0 ||
+		 strncasecmp (tag, "jobid", MAX(taglen, 1)) == 0 ) {
+		scontrol_print_job (val);
+	}
+	else if (strncasecmp (tag, "hostnames", MAX(taglen, 5)) == 0) {
+		if (val)
+			scontrol_print_hosts(val);
+		else
+			scontrol_print_hosts(getenv("SLURM_NODELIST"));
+	}
+	else if (strncasecmp (tag, "hostlist", MAX(taglen, 5)) == 0) {
+		if (!val) {
+			exit_code = 1;
+			fprintf(stderr, "invalid encode argument\n");
+			_usage();
+		} else if (scontrol_encode_hostlist(val))
+			exit_code = 1;
+	}
+	else if (strncasecmp (tag, "nodes", MAX(taglen, 1)) == 0) {
+		scontrol_print_node_list (val);
+	}
+	else if (strncasecmp (tag, "partitions", MAX(taglen, 1)) == 0 || 
+		 strncasecmp (tag, "partitionname", MAX(taglen, 1)) == 0) {
+		scontrol_print_part (val);
+	}
+	else if (strncasecmp (tag, "reservations", MAX(taglen, 1)) == 0 || 
+		 strncasecmp (tag, "reservationname", MAX(taglen, 1)) == 0) {
+		scontrol_print_res (val);
+	}
+	else if (strncasecmp (tag, "slurmd", MAX(taglen, 2)) == 0) {
+		_print_slurmd (val);
+	}
+	else if (strncasecmp (tag, "steps", MAX(taglen, 2)) == 0) {
+		scontrol_print_step (val);
+	}
+	else if (strncasecmp (tag, "topology", MAX(taglen, 1)) == 0) {
+		scontrol_print_topo (val);
+	}
+	else {
+		exit_code = 1;
+		if (quiet_flag != 1)
+			fprintf (stderr,
+				 "invalid entity:%s for keyword:%s \n",
+				 tag, argv[0]);
+	}		
+
+}
+
+
+
 /* 
  * _update_it - update the slurm configuration per the supplied arguments 
  * IN argc - count of arguments
@@ -901,29 +1041,54 @@ static void
 _update_it (int argc, char *argv[]) 
 {
 	int i, error_code = SLURM_SUCCESS;
+	int nodetag=0, partag=0, jobtag=0;
+	int blocktag=0, subtag=0, restag=0;
 
 	/* First identify the entity to update */
 	for (i=0; i<argc; i++) {
-		if (strncasecmp (argv[i], "NodeName=", 9) == 0) {
-			error_code = scontrol_update_node (argc, argv);
-			break;
-		} else if (strncasecmp (argv[i], "PartitionName=", 14) == 0) {
-			error_code = scontrol_update_part (argc, argv);
-			break;
-		} else if (strncasecmp (argv[i], "JobId=", 6) == 0) {
-			error_code = scontrol_update_job (argc, argv);
-			break;
-		} else if (strncasecmp (argv[i], "BlockName=", 10) == 0) {
-			error_code = _update_bluegene_block (argc, argv);
-			break;
-		} else if (strncasecmp (argv[i], "SubBPName=", 10) == 0) {
-			error_code = _update_bluegene_subbp (argc, argv);
-			break;
+		char *tag = argv[i];
+		int taglen = 0;
+		char *val = strchr(argv[i], '=');
+		if (!val)
+			continue;
+		taglen = val - argv[i];
+		val++;
+
+		if (strncasecmp (tag, "NodeName", MAX(taglen, 5)) == 0) {
+			nodetag=1;
+		} else if (strncasecmp (tag, "PartitionName", MAX(taglen, 3)) == 0) {
+			partag=1;
+		} else if (strncasecmp (tag, "JobId", MAX(taglen, 3)) == 0) {
+			jobtag=1;
+		} else if (strncasecmp (tag, "BlockName", MAX(taglen, 3)) == 0) {
+			blocktag=1;
+		} else if (strncasecmp (tag, "SubBPName", MAX(taglen, 3)) == 0) {
+			subtag=1;
+		} else if (strncasecmp (tag, "ReservationName", MAX(taglen, 3)) == 0) {
+			restag=1;
 		}
-		
 	}
-	
-	if (i >= argc) {
+
+	/* The order of tests matters here.  An update job request can include
+	   partition and reservation tags, possibly before the jobid tag, but
+	   none of the other updates have a jobid tag, so check jobtag first.
+	   Likewise, check restag next, because reservations can have a 
+	   partition tag.  The order of the rest doesn't matter because there
+	   aren't any other duplicate tags.  */
+
+	if (jobtag)
+		error_code = scontrol_update_job (argc, argv);
+	else if (restag)
+		error_code = scontrol_update_res (argc, argv);
+	else if (nodetag)
+		error_code = scontrol_update_node (argc, argv);
+	else if (partag)
+		error_code = scontrol_update_part (argc, argv);
+	else if (blocktag)
+		error_code = _update_bluegene_block (argc, argv);
+	else if (subtag)
+		error_code = _update_bluegene_subbp (argc, argv);
+	else {
 		exit_code = 1;
 		fprintf(stderr, "No valid entity in update command\n");
 		fprintf(stderr, "Input line must include \"NodeName\", ");
@@ -931,9 +1096,11 @@ _update_it (int argc, char *argv[])
 		fprintf(stderr, "\"BlockName\", \"SubBPName\" "
 			"(i.e. bgl000[0-3]),");
 #endif
-		fprintf(stderr, "\"PartitionName\", or \"JobId\"\n");
+		fprintf(stderr, "\"PartitionName\", \"Reservation\", "
+				"or \"JobId\"\n");
 	}
-	else if (error_code) {
+
+	if (error_code) {
 		exit_code = 1;
 		slurm_perror ("slurm_update error");
 	}
@@ -959,12 +1126,26 @@ _update_bluegene_block (int argc, char *argv[])
 	part_msg.hidden = (uint16_t)INFINITE;
 
 	for (i=0; i<argc; i++) {
-		if (strncasecmp(argv[i], "BlockName=", 10) == 0)
-			part_msg.name = &argv[i][10];
-		else if (strncasecmp(argv[i], "State=", 6) == 0) {
-			if (strcasecmp(&argv[i][6], "ERROR") == 0)
+		char *tag = argv[i];
+		char *val = strchr(argv[i], '=');
+		int taglen = 0, vallen = 0;
+
+		if (val) {
+			taglen = val - argv[i];
+			val++;
+			vallen = strlen(val);
+		} else {
+			exit_code = 1;
+			error("Invalid input for BlueGene block update %s", argv[i]);
+			return 0;
+		}
+
+		if (strncasecmp(tag, "BlockName", MAX(taglen, 2)) == 0) {
+			part_msg.name = val;
+		} else if (strncasecmp(tag, "State", MAX(taglen, 2)) == 0) {
+			if (strncasecmp(val, "ERROR", MAX(vallen, 1)) == 0)
 				part_msg.state_up = 0;
-			else if (strcasecmp(&argv[i][6], "FREE") == 0)
+			else if (strncasecmp(val, "FREE", MAX(vallen, 1)) == 0)
 				part_msg.state_up = 1;
 			else {
 				exit_code = 1;
@@ -975,8 +1156,13 @@ _update_bluegene_block (int argc, char *argv[])
 				return 0;
 			}
 			update_cnt++;
+		} else {
+			exit_code = 1;
+			error("Invalid input for BlueGene block update %s", argv[i]);
+			return 0;
 		}
 	}
+
 	if(!part_msg.name) {
 		error("You didn't supply a name.");
 		return 0;
@@ -1012,12 +1198,27 @@ _update_bluegene_subbp (int argc, char *argv[])
 	part_msg.root_only = (uint16_t)INFINITE;
 
 	for (i=0; i<argc; i++) {
-		if (strncasecmp(argv[i], "SubBPName=", 10) == 0)
-			part_msg.name = &argv[i][10];
-		else if (strncasecmp(argv[i], "State=", 6) == 0) {
-			if (strcasecmp(&argv[i][6], "ERROR") == 0)
+		char *tag = argv[i];
+		char *val = strchr(argv[i], '=');
+		int taglen = 0, vallen = 0;
+
+		if (val) {
+			taglen = val - argv[i];
+			val++;
+			vallen = strlen(val);
+		} else {
+			exit_code = 1;
+			error("Invalid input for BlueGene SubBPName update %s",
+			      argv[i]);
+			return 0;
+		}
+
+		if (strncasecmp(tag, "SubBPName", MAX(taglen, 2)) == 0)
+			part_msg.name = val;
+		else if (strncasecmp(tag, "State", MAX(taglen, 2)) == 0) {
+			if (strncasecmp(val, "ERROR", MAX(vallen, 1)) == 0)
 				part_msg.state_up = 0;
-			else if (strcasecmp(&argv[i][6], "FREE") == 0)
+			else if (strncasecmp(val, "FREE", MAX(vallen, 1)) == 0)
 				part_msg.state_up = 1;
 			else {
 				exit_code = 1;
@@ -1028,8 +1229,14 @@ _update_bluegene_subbp (int argc, char *argv[])
 				return 0;
 			}
 			update_cnt++;
+		} else {
+			exit_code = 1;
+			error("Invalid input for BlueGene SubBPName update %s",
+			      argv[i]);
+			return 0;
 		}
 	}
+
 	if(!part_msg.name) {
 		error("You didn't supply a name.");
 		return 0;
@@ -1068,11 +1275,12 @@ scontrol [<OPTION>] [<COMMAND>]                                            \n\
                               generating a core file.                      \n\
      all                      display information about all partitions,    \n\
                               including hidden partitions.                 \n\
-     checkpoint <CH_OP><step> perform a checkpoint operation on identified \n\
-                              job step \n\
+     checkpoint <CH_OP><ID>   perform a checkpoint operation on identified \n\
+                              job or job step \n\
      completing               display jobs in completing state along with  \n\
                               their completing or down nodes               \n\
-     delete <SPECIFICATIONS>  delete the specified partition, kill its jobs\n\
+     create <SPECIFICATIONS>  create a new partition or reservation        \n\
+     delete <SPECIFICATIONS>  delete the specified partition or reservation\n\
      exit                     terminate scontrol                           \n\
      help                     print this description of use.               \n\
      hide                     do not display information about hidden      \n\
@@ -1095,20 +1303,24 @@ scontrol [<OPTION>] [<COMMAND>]                                            \n\
      show <ENTITY> [<ID>]     display state of identified entity, default  \n\
                               is all records.                              \n\
      shutdown <OPTS>          shutdown slurm daemons                       \n\
+     takeover                 ask slurm backup controller to take over     \n\
+                              (the primary controller will be stopped)     \n\
      suspend <job_id>         susend specified job                         \n\
      resume <job_id>          resume previously suspended job              \n\
-     update <SPECIFICATIONS>  update job, node, partition, or bluegene     \n\
-                              block/subbp configuration                    \n\
+     update <SPECIFICATIONS>  update job, node, partition, reservation, or \n\
+                              bluegene block/subbp configuration           \n\
      verbose                  enable detailed logging.                     \n\
      version                  display tool version number.                 \n\
      !!                       Repeat the last command entered.             \n\
                                                                            \n\
   <ENTITY> may be \"config\", \"daemons\", \"job\", \"node\", \"partition\"\n\
-           \"hostlist\", \"hostnames\", \"slurmd\",                        \n\
-           (for BlueGene only: \"block\", \"subbp\" or \"step\").          \n\
+       \"reservation\", \"hostlist\", \"hostnames\", \"slurmd\",           \n\
+       \"topology\", or \"step\"                                           \n\
+       (also for BlueGene only: \"block\" or \"subbp\").                  \n\
                                                                            \n\
   <ID> may be a configuration parameter name, job id, node name, partition \n\
-       name, job step id, or hostlist or pathname to a list of host names. \n\
+       name, reservation name, job step id, or hostlist or pathname to a   \n\
+       list of host names.                                                 \n\
                                                                            \n\
   <HOSTLIST> may either be a comma separated list of host names or the     \n\
        absolute pathname of a file (with leading '/' containing host names \n\
@@ -1122,7 +1334,7 @@ scontrol [<OPTION>] [<COMMAND>]                                            \n\
        otherwise all slurm daemons are shutdown                            \n\
                                                                            \n\
   Node names may be specified using simple range expressions,              \n\
-  (e.g. \"lx[10-20]\" corresponsds to lx10, lx11, lx12, ...)               \n\
+  (e.g. \"lx[10-20]\" corresponds to lx10, lx11, lx12, ...)                \n\
   The job step id is the job id followed by a period and the step id.      \n\
                                                                            \n\
   <SPECIFICATIONS> are specified in the same format as the configuration   \n\
@@ -1133,6 +1345,8 @@ scontrol [<OPTION>] [<COMMAND>]                                            \n\
                                                                            \n\
   <CH_OP> identify checkpoint operations and may be \"able\", \"disable\", \n\
   \"enable\", \"create\", \"vacate\", \"restart\", or \"error\".           \n\
+  Additional options include \"ImageDir=<dir>\", \"MaxWait=<seconds>\" and \n\
+  \"StickToNodes\"   \n\
                                                                            \n\
   All commands and options are case-insensitive, although node names and   \n\
   partition names tests are case-sensitive (node names \"LX\" and \"lx\"   \n\
diff --git a/src/scontrol/scontrol.h b/src/scontrol/scontrol.h
index 3fd1d2897..d6b4251e4 100644
--- a/src/scontrol/scontrol.h
+++ b/src/scontrol/scontrol.h
@@ -2,12 +2,14 @@
  *  scontrol.h - definitions for all scontrol modules
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -97,31 +99,37 @@ extern int input_words;	/* number of words of input permitted */
 extern int one_liner;	/* one record per line if =1 */
 extern int quiet_flag;	/* quiet=1, verbose=-1, normal=0 */
 
-extern int	scontrol_checkpoint(char *op, char *job_step_id_str);
+extern int	scontrol_checkpoint(char *op, char *job_step_id_str, int argc, 
+				    char **argv);
 extern int	scontrol_encode_hostlist(char *hostlist);
 extern int	scontrol_job_notify(int argc, char *argv[]);
 extern int 	scontrol_load_jobs (job_info_msg_t ** job_buffer_pptr);
 extern int 	scontrol_load_nodes (node_info_msg_t ** node_buffer_pptr, 
-			uint16_t show_flags);
+				     uint16_t show_flags);
 extern int 	scontrol_load_partitions (partition_info_msg_t 
-			**part_info_pptr);
+					  **part_info_pptr);
 extern void	scontrol_pid_info(pid_t job_pid);
 extern void	scontrol_print_completing (void);
 extern void	scontrol_print_completing_job(job_info_t *job_ptr, 
-				node_info_msg_t *node_info_msg);
+					      node_info_msg_t *node_info_msg);
 extern void	scontrol_print_job (char * job_id_str);
 extern void	scontrol_print_hosts (char * node_list);
 extern void	scontrol_print_node (char *node_name, 
-			node_info_msg_t *node_info_ptr);
+				     node_info_msg_t *node_info_ptr);
 extern void	scontrol_print_node_list (char *node_list);
 extern void	scontrol_print_part (char *partition_name);
+extern void	scontrol_print_res (char *reservation_name);
 extern void	scontrol_print_step (char *job_step_id_str);
+extern void	scontrol_print_topo (char *node_list);
 extern int	scontrol_requeue(char *job_step_id_str);
 extern int	scontrol_suspend(char *op, char *job_id_str);
 extern int	scontrol_update_job (int argc, char *argv[]);
 extern int	scontrol_update_node (int argc, char *argv[]);
 extern int	scontrol_update_part (int argc, char *argv[]);
+extern int	scontrol_update_res (int argc, char *argv[]);
 extern void     scontrol_list_pids(const char *jobid_str,
 				   const char *node_name);
+extern int	scontrol_create_part(int argc, char *argv[]);
+extern int	scontrol_create_res(int argc, char *argv[]);
 
 #endif
diff --git a/src/scontrol/update_job.c b/src/scontrol/update_job.c
index 27df3af0c..29e95aeb3 100644
--- a/src/scontrol/update_job.c
+++ b/src/scontrol/update_job.c
@@ -2,13 +2,14 @@
  *  update_job.c - update job functions for scontrol.
  *****************************************************************************
  *  Copyright (C) 2002-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>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -38,22 +39,32 @@
 
 #include "scontrol.h"
 
+static int _parse_checkpoint_args(int argc, char **argv,
+				  uint16_t *max_wait, char **image_dir);
+static int _parse_restart_args(int argc, char **argv,
+			       uint16_t *stick, char **image_dir);
+
 /* 
  * scontrol_checkpoint - perform some checkpoint/resume operation
  * IN op - checkpoint operation
  * IN job_step_id_str - either a job name (for all steps of the given job) or 
  *			a step name: "<jid>.<step_id>"
+ * IN argc - argument count
+ * IN argv - arguments of the operation
  * RET 0 if no slurm error, errno otherwise. parsing error prints 
  *			error message and returns 0
  */
 extern int 
-scontrol_checkpoint(char *op, char *job_step_id_str)
+scontrol_checkpoint(char *op, char *job_step_id_str, int argc, char *argv[])
 {
 	int rc = SLURM_SUCCESS;
 	uint32_t job_id = 0, step_id = 0, step_id_set = 0;
 	char *next_str;
 	uint32_t ckpt_errno;
 	char *ckpt_strerror = NULL;
+	int oplen = strlen(op);
+	uint16_t max_wait = CKPT_WAIT, stick = 0;
+	char *image_dir = NULL;
 
 	if (job_step_id_str) {
 		job_id = (uint32_t) strtol (job_step_id_str, &next_str, 10);
@@ -71,7 +82,7 @@ scontrol_checkpoint(char *op, char *job_step_id_str)
 		return 0;
 	}
 
-	if (strncasecmp(op, "able", 2) == 0) {
+	if (strncasecmp(op, "able", MAX(oplen, 1)) == 0) {
 		time_t start_time;
 		rc = slurm_checkpoint_able (job_id, step_id, &start_time);
 		if (rc == SLURM_SUCCESS) {
@@ -89,7 +100,7 @@ scontrol_checkpoint(char *op, char *job_step_id_str)
 			rc = SLURM_SUCCESS;	/* not real error */
 		}
 	}
-	else if (strncasecmp(op, "complete", 3) == 0) {
+	else if (strncasecmp(op, "complete", MAX(oplen, 2)) == 0) {
 		/* Undocumented option used for testing purposes */
 		static uint32_t error_code = 1;
 		char error_msg[64];
@@ -97,17 +108,29 @@ scontrol_checkpoint(char *op, char *job_step_id_str)
 		rc = slurm_checkpoint_complete(job_id, step_id, (time_t) 0,
 			error_code++, error_msg);
 	}
-	else if (strncasecmp(op, "disable", 3) == 0)
+	else if (strncasecmp(op, "disable", MAX(oplen, 1)) == 0)
 		rc = slurm_checkpoint_disable (job_id, step_id);
-	else if (strncasecmp(op, "enable", 2) == 0)
+	else if (strncasecmp(op, "enable", MAX(oplen, 2)) == 0)
 		rc = slurm_checkpoint_enable (job_id, step_id);
-	else if (strncasecmp(op, "create", 2) == 0)
-		rc = slurm_checkpoint_create (job_id, step_id, CKPT_WAIT);
-	else if (strncasecmp(op, "vacate", 2) == 0)
-		rc = slurm_checkpoint_vacate (job_id, step_id, CKPT_WAIT);
-	else if (strncasecmp(op, "restart", 2) == 0)
-		rc = slurm_checkpoint_restart (job_id, step_id);
-	else if (strncasecmp(op, "error", 2) == 0) {
+	else if (strncasecmp(op, "create", MAX(oplen, 2)) == 0) {
+		if (_parse_checkpoint_args(argc, argv, &max_wait, &image_dir)) {
+			return 0;
+		}
+		rc = slurm_checkpoint_create (job_id, step_id, max_wait, image_dir);
+
+	} else if (strncasecmp(op, "vacate", MAX(oplen, 2)) == 0) {
+		if (_parse_checkpoint_args(argc, argv, &max_wait, &image_dir)) {
+			return 0;
+		}
+		rc = slurm_checkpoint_vacate (job_id, step_id, max_wait, image_dir);
+
+	} else if (strncasecmp(op, "restart", MAX(oplen, 2)) == 0) {
+		if (_parse_restart_args(argc, argv, &stick, &image_dir)) {
+			return 0;
+		}
+		rc = slurm_checkpoint_restart (job_id, step_id, stick, image_dir);
+
+	} else if (strncasecmp(op, "error", MAX(oplen, 2)) == 0) {
 		rc = slurm_checkpoint_error (job_id, step_id, 
 			&ckpt_errno, &ckpt_strerror);
 		if (rc == SLURM_SUCCESS) {
@@ -124,6 +147,47 @@ scontrol_checkpoint(char *op, char *job_step_id_str)
 	return rc;
 }
 
+static int
+_parse_checkpoint_args(int argc, char **argv, uint16_t *max_wait, char **image_dir)
+{
+	int i;
+	
+	for (i=0; i< argc; i++) {
+		if (strncasecmp(argv[i], "MaxWait=", 8) == 0) {
+			*max_wait = (uint16_t) strtol(&argv[i][8], 
+						      (char **) NULL, 10);
+		} else if (strncasecmp(argv[i], "ImageDir=", 9) == 0) {
+			*image_dir = &argv[i][9];
+		} else {
+			exit_code = 1;
+			error("Invalid input: %s", argv[i]);
+			error("Request aborted");
+			return -1;
+		}
+	}
+	return 0;
+}
+
+static int
+_parse_restart_args(int argc, char **argv, uint16_t *stick, char **image_dir)
+{
+	int i;
+	
+	for (i=0; i< argc; i++) {
+		if (strncasecmp(argv[i], "StickToNodes", 5) == 0) {
+			*stick = 1;
+		} else if (strncasecmp(argv[i], "ImageDir=", 9) == 0) {
+			*image_dir = &argv[i][9];
+		} else {
+			exit_code = 1;
+			error("Invalid input: %s", argv[i]);
+			error("Request aborted");
+			return -1;
+		}
+	}
+	return 0;
+}
+
 /*
  * scontrol_suspend - perform some suspend/resume operation
  * IN op - suspend/resume operation
@@ -151,7 +215,7 @@ scontrol_suspend(char *op, char *job_id_str)
 		return 0;
 	}
 
-	if (strncasecmp(op, "suspend", 3) == 0)
+	if (strncasecmp(op, "suspend", MAX(strlen(op), 2)) == 0)
 		rc = slurm_suspend (job_id);
 	else
 		rc = slurm_resume (job_id);
@@ -201,21 +265,42 @@ extern int
 scontrol_update_job (int argc, char *argv[]) 
 {
 	int i, update_cnt = 0;
+	char *tag, *val;
+	int taglen, vallen;
 	job_desc_msg_t job_msg;
 
 	slurm_init_job_desc_msg (&job_msg);	
 
 	for (i=0; i<argc; i++) {
-		if (strncasecmp(argv[i], "JobId=", 6) == 0)
-			job_msg.job_id = 
-				(uint32_t) strtol(&argv[i][6], 
-						 (char **) NULL, 10);
-		else if (strncasecmp(argv[i], "Comment=", 8) == 0) {
-			job_msg.comment = &argv[i][8];
+		tag = argv[i];
+		val = strchr(argv[i], '=');
+		if (val) {
+			taglen = val - argv[i];
+			val++;
+			vallen = strlen(val);
+		} else if (strncasecmp(tag, "Nice", MAX(strlen(tag), 2)) == 0) {
+			/* "Nice" is the only tag that might not have an 
+			   equal sign, so it is handled specially. */
+			job_msg.nice = NICE_OFFSET + 100;
 			update_cnt++;
+			continue;
+		} else {
+			exit_code = 1;
+			fprintf (stderr, "Invalid input: %s\n", argv[i]);
+			fprintf (stderr, "Request aborted\n");
+			return -1;
 		}
-		else if (strncasecmp(argv[i], "TimeLimit=", 10) == 0) {
-			int time_limit = time_str2mins(&argv[i][10]);
+
+		if (strncasecmp(tag, "JobId", MAX(taglen, 1)) == 0) {
+			job_msg.job_id = 
+				(uint32_t) strtol(val, (char **) NULL, 10);
+		}
+		else if (strncasecmp(tag, "Comment", MAX(taglen, 3)) == 0) {
+			job_msg.comment = val;
+			update_cnt++;
+		} 
+		else if (strncasecmp(tag, "TimeLimit", MAX(taglen, 2)) == 0) {
+			int time_limit = time_str2mins(val);
 			if ((time_limit < 0) && (time_limit != INFINITE)) {
 				error("Invalid TimeLimit value");
 				exit_code = 1;
@@ -224,15 +309,14 @@ scontrol_update_job (int argc, char *argv[])
 			job_msg.time_limit = time_limit;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "Priority=", 9) == 0) {
+		else if (strncasecmp(tag, "Priority", MAX(taglen, 2)) == 0) {
 			job_msg.priority = 
-				(uint32_t) strtoll(&argv[i][9], 
-						(char **) NULL, 10);
+				(uint32_t) strtoll(val, (char **) NULL, 10);
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "Nice=", 5) == 0) {
+		else if (strncasecmp(tag, "Nice", MAX(taglen, 2)) == 0) {
 			int nice;
-			nice = strtoll(&argv[i][5], (char **) NULL, 10);
+			nice = strtoll(val, (char **) NULL, 10);
 			if (abs(nice) > NICE_OFFSET) {
 				error("Invalid nice value, must be between "
 					"-%d and %d", NICE_OFFSET, NICE_OFFSET);
@@ -242,29 +326,21 @@ scontrol_update_job (int argc, char *argv[])
 			job_msg.nice = NICE_OFFSET + nice;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "Nice", 4) == 0) {
-			job_msg.nice = NICE_OFFSET + 100;
-			update_cnt++;
-		}		
-		else if (strncasecmp(argv[i], "ReqProcs=", 9) == 0) {
+		else if (strncasecmp(tag, "ReqProcs", MAX(taglen, 4)) == 0) {
 			job_msg.num_procs = 
-				(uint32_t) strtol(&argv[i][9], 
-						(char **) NULL, 10);
+				(uint32_t) strtol(val, (char **) NULL, 10);
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "Requeue=", 8) == 0) {
+		else if (strncasecmp(tag, "Requeue", MAX(taglen, 4)) == 0) {
 			job_msg.requeue = 
-				(uint16_t) strtol(&argv[i][8], 
-						(char **) NULL, 10);
+				(uint16_t) strtol(val, (char **) NULL, 10);
 			update_cnt++;
 		}
 		/* MinNodes was replaced by ReqNodes in SLURM version 1.2 */
-		else if ((strncasecmp(argv[i], "MinNodes=", 9) == 0) ||
-		         (strncasecmp(argv[i], "ReqNodes=", 9) == 0)) {
+		else if ((strncasecmp(tag, "MinNodes", MAX(taglen, 4)) == 0) ||
+		         (strncasecmp(tag, "ReqNodes", MAX(taglen, 8)) == 0)) {
 			char *tmp;
-			job_msg.min_nodes = 
-				(uint32_t) strtol(&argv[i][9],
-						 &tmp, 10);
+			job_msg.min_nodes = (uint32_t) strtol(val, &tmp, 10);
 			if (tmp[0] == '-') {
 				job_msg.max_nodes = (uint32_t)
 					strtol(&tmp[1], (char **) NULL, 10);
@@ -273,133 +349,136 @@ scontrol_update_job (int argc, char *argv[])
 						"minimum value (%u < %u)",
 						job_msg.max_nodes,
 						job_msg.min_nodes);
+					exit_code = 1;
+					return 0;
 				}
 			}
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "ReqSockets=", 11) == 0) {
+		else if (strncasecmp(tag, "ReqSockets", MAX(taglen, 4)) == 0) {
 			job_msg.min_sockets = 
-				(uint16_t) strtol(&argv[i][11],
-						 (char **) NULL, 10);
+				(uint16_t) strtol(val, (char **) NULL, 10);
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "ReqCores=", 9) == 0) {
+		else if (strncasecmp(tag, "ReqCores", MAX(taglen, 4)) == 0) {
 			job_msg.min_cores = 
-				(uint16_t) strtol(&argv[i][9],
-						 (char **) NULL, 10);
+				(uint16_t) strtol(val, (char **) NULL, 10);
 			update_cnt++;
 		}
-                else if (strncasecmp(argv[i], "TasksPerNode=", 13) == 0) {
+                else if (strncasecmp(tag, "TasksPerNode", MAX(taglen, 2))==0) {
                         job_msg.ntasks_per_node =
-                                (uint16_t) strtol(&argv[i][13],
-                                                 (char **) NULL, 10);
+                                (uint16_t) strtol(val, (char **) NULL, 10);
                         update_cnt++;
                 }
-		else if (strncasecmp(argv[i], "ReqThreads=", 11) == 0) {
+		else if (strncasecmp(tag, "ReqThreads", MAX(taglen, 4)) == 0) {
 			job_msg.min_threads = 
-				(uint16_t) strtol(&argv[i][11],
-						 (char **) NULL, 10);
+				(uint16_t) strtol(val, (char **) NULL, 10);
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "MinProcs=", 9) == 0) {
+		else if (strncasecmp(tag, "MinProcs", MAX(taglen, 4)) == 0) {
 			job_msg.job_min_procs = 
-				(uint32_t) strtol(&argv[i][9], 
-						(char **) NULL, 10);
+				(uint32_t) strtol(val, (char **) NULL, 10);
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "MinSockets=", 11) == 0) {
+		else if (strncasecmp(tag, "MinSockets", MAX(taglen, 4)) == 0) {
 			job_msg.job_min_sockets = 
-				(uint16_t) strtol(&argv[i][11], 
-						(char **) NULL, 10);
+				(uint16_t) strtol(val, (char **) NULL, 10);
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "MinCores=", 9) == 0) {
+		else if (strncasecmp(tag, "MinCores", MAX(taglen, 4)) == 0) {
 			job_msg.job_min_cores = 
-				(uint16_t) strtol(&argv[i][9], 
-						(char **) NULL, 10);
+				(uint16_t) strtol(val, (char **) NULL, 10);
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "MinThreads=", 11) == 0) {
+		else if (strncasecmp(tag, "MinThreads", MAX(taglen, 5)) == 0) {
 			job_msg.job_min_threads = 
-				(uint16_t) strtol(&argv[i][11], 
-						(char **) NULL, 10);
+				(uint16_t) strtol(val, (char **) NULL, 10);
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "MinMemoryNode=", 14) == 0) {
+		else if (strncasecmp(tag, "MinMemoryNode", 
+				     MAX(taglen, 10)) == 0) {
 			job_msg.job_min_memory = 
-				(uint32_t) strtol(&argv[i][14], 
-						(char **) NULL, 10);
+				(uint32_t) strtol(val, (char **) NULL, 10);
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "MinMemoryCPU=", 13) == 0) {
+		else if (strncasecmp(tag, "MinMemoryCPU", 
+				     MAX(taglen, 10)) == 0) {
 			job_msg.job_min_memory =
-				(uint32_t) strtol(&argv[i][13],
-						(char **) NULL, 10);
+				(uint32_t) strtol(val, (char **) NULL, 10);
 			job_msg.job_min_memory |= MEM_PER_CPU;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "MinTmpDisk=", 11) == 0) {
+		else if (strncasecmp(tag, "MinTmpDisk", MAX(taglen, 5)) == 0) {
 			job_msg.job_min_tmp_disk = 
-				(uint32_t) strtol(&argv[i][11], 
-						(char **) NULL, 10);
+				(uint32_t) strtol(val, (char **) NULL, 10);
+			update_cnt++;
+		}
+		else if (strncasecmp(tag, "PartitionName", 
+				     MAX(taglen, 2)) == 0) {
+			job_msg.partition = val;
+			update_cnt++;
+		}
+		else if (strncasecmp(tag, "ReservationName", 
+				     MAX(taglen, 3)) == 0) {
+			job_msg.reservation = val;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "Partition=", 10) == 0) {
-			job_msg.partition = &argv[i][10];
+		else if (strncasecmp(tag, "Name", MAX(taglen, 2)) == 0) {
+			job_msg.name = val;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "Name=", 5) == 0) {
-			job_msg.name = &argv[i][5];
+		else if (strncasecmp(tag, "WCKey", MAX(taglen, 1)) == 0) {
+			job_msg.wckey = val;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "Shared=", 7) == 0) {
-			if (strcasecmp(&argv[i][7], "YES") == 0)
+		else if (strncasecmp(tag, "Shared", MAX(taglen, 2)) == 0) {
+			if (strncasecmp(val, "YES", MAX(vallen, 1)) == 0)
 				job_msg.shared = 1;
-			else if (strcasecmp(&argv[i][7], "NO") == 0)
+			else if (strncasecmp(val, "NO", MAX(vallen, 1)) == 0)
 				job_msg.shared = 0;
 			else
 				job_msg.shared = 
-					(uint16_t) strtol(&argv[i][7], 
+					(uint16_t) strtol(val, 
 							(char **) NULL, 10);
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "Contiguous=", 11) == 0) {
-			if (strcasecmp(&argv[i][11], "YES") == 0)
+		else if (strncasecmp(tag, "Contiguous", MAX(taglen, 3)) == 0) {
+			if (strncasecmp(val, "YES", MAX(vallen, 1)) == 0)
 				job_msg.contiguous = 1;
-			else if (strcasecmp(&argv[i][11], "NO") == 0)
+			else if (strncasecmp(val, "NO", MAX(vallen, 1)) == 0)
 				job_msg.contiguous = 0;
 			else
 				job_msg.contiguous = 
-					(uint16_t) strtol(&argv[i][11], 
+					(uint16_t) strtol(val, 
 							(char **) NULL, 10);
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "ExcNodeList=", 12) == 0) {
-			job_msg.exc_nodes = &argv[i][12];
+		else if (strncasecmp(tag, "ExcNodeList", MAX(taglen, 1)) == 0) {
+			job_msg.exc_nodes = val;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "ReqNodeList=", 12) == 0) {
-			job_msg.req_nodes = &argv[i][12];
+		else if (strncasecmp(tag, "ReqNodeList", MAX(taglen, 8)) == 0) {
+			job_msg.req_nodes = val;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "Features=", 9) == 0) {
-			job_msg.features = &argv[i][9];
+		else if (strncasecmp(tag, "Features", MAX(taglen, 1)) == 0) {
+			job_msg.features = val;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "Account=", 8) == 0) {
-			job_msg.account = &argv[i][8];
+		else if (strncasecmp(tag, "Account", MAX(taglen, 1)) == 0) {
+			job_msg.account = val;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "Dependency=", 11) == 0) {
-			job_msg.dependency = &argv[i][11];
+		else if (strncasecmp(tag, "Dependency", MAX(taglen, 1)) == 0) {
+			job_msg.dependency = val;
 			update_cnt++;
 		}
 #ifdef HAVE_BG
-		else if (strncasecmp(argv[i], "Geometry=", 9) == 0) {
+		else if (strncasecmp(tag, "Geometry", MAX(taglen, 1)) == 0) {
 			char* token, *delimiter = ",x", *next_ptr;
 			int j, rc = 0;
 			uint16_t geo[SYSTEM_DIMENSIONS];
-			char* geometry_tmp = xstrdup(&argv[i][9]);
+			char* geometry_tmp = xstrdup(val);
 			char* original_ptr = geometry_tmp;
 			token = strtok_r(geometry_tmp, delimiter, &next_ptr);
 			for (j=0; j<SYSTEM_DIMENSIONS; j++) {
@@ -435,25 +514,25 @@ scontrol_update_job (int argc, char *argv[])
 			}
 		}
 
-		else if (strncasecmp(argv[i], "Rotate=", 7) == 0) {
+		else if (strncasecmp(tag, "Rotate", MAX(taglen, 2)) == 0) {
 			uint16_t rotate;
-			if (strcasecmp(&argv[i][7], "yes") == 0)
+			if (strncasecmp(val, "YES", MAX(vallen, 1)) == 0)
 				rotate = 1;
-			else if (strcasecmp(&argv[i][7], "no") == 0)
+			else if (strncasecmp(val, "NO", MAX(vallen, 1)) == 0)
 				rotate = 0;
 			else
-				rotate = (uint16_t) strtol(&argv[i][7], 
+				rotate = (uint16_t) strtol(val, 
 							   (char **) NULL, 10);
 			job_msg.rotate = rotate;
 			update_cnt++;
 		}
 #endif
-		else if (strncasecmp(argv[i], "Licenses=", 9) == 0) {
-			job_msg.licenses = &argv[i][9];
+		else if (strncasecmp(tag, "Licenses", MAX(taglen, 1)) == 0) {
+			job_msg.licenses = val;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "StartTime=", 10) == 0) {
-			job_msg.begin_time = parse_time(&argv[i][10], 0);
+		else if (strncasecmp(tag, "StartTime", MAX(taglen, 2)) == 0) {
+			job_msg.begin_time = parse_time(val, 0);
 			update_cnt++;
 		}
 		else {
diff --git a/src/scontrol/update_node.c b/src/scontrol/update_node.c
index 7c9723798..44454db0a 100644
--- a/src/scontrol/update_node.c
+++ b/src/scontrol/update_node.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -49,30 +50,76 @@ extern int
 scontrol_update_node (int argc, char *argv[]) 
 {
 	int i, j, k, rc = 0, update_cnt = 0;
+
 	uint16_t state_val;
 	update_node_msg_t node_msg;
 	char *reason_str = NULL;
 	char *user_name;
+	char *tag, *val;
+	int taglen, vallen;
 
-	node_msg.node_names = NULL;
-	node_msg.features = NULL;
-	node_msg.reason = NULL;
-	node_msg.node_state = (uint16_t) NO_VAL;
+	slurm_init_update_node_msg(&node_msg);
 	for (i=0; i<argc; i++) {
-		if (strncasecmp(argv[i], "NodeName=", 9) == 0)
-			node_msg.node_names = &argv[i][9];
-		else if (strncasecmp(argv[i], "Features=", 9) == 0) {
-			node_msg.features = &argv[i][9];
+		tag = argv[i];
+		val = strchr(argv[i], '=');
+		if (val) {
+			taglen = val - argv[i];
+			val++;
+			vallen = strlen(val);
+		} else {
+			exit_code = 1;
+			error("Invalid input: %s  Request aborted", argv[i]);
+			return -1;
+		}
+		if (strncasecmp(tag, "NodeName", MAX(taglen, 1)) == 0)
+			node_msg.node_names = val;
+		else if (strncasecmp(tag, "Features", MAX(taglen, 1)) == 0) {
+			node_msg.features = val;
+			update_cnt++;
+		} else if (strncasecmp(tag, "Weight", MAX(taglen,1)) == 0) {
+			/* Logic borrowed from function _handle_uint32 */
+			char *endptr;
+			unsigned long num;
+			errno = 0;
+			num = strtoul(val, &endptr, 0);
+			if ((endptr[0] == 'k') || (endptr[0] == 'K')) {
+				num *= 1024;
+				endptr++;
+			}
+			if ((num == 0 && errno == EINVAL)
+        		            || (*endptr != '\0')) {
+				if ((strcasecmp(val, "UNLIMITED") == 0) ||
+				    (strcasecmp(val, "INFINITE")  == 0)) {
+					num = (uint32_t) INFINITE;
+				} else {
+					error("Weight value (%s) is not a "
+					      "valid number", val);
+					break;
+				}
+			} else if (errno == ERANGE) {
+				error("Weight value (%s) is out of range", 
+				      val);
+				break;
+			} else if (val[0] == '-') {
+				error("Weight value (%s) is less than zero", 
+				      val);
+				break;
+			} else if (num > 0xfffffff0) {
+				error("Weight value (%s) is greater than %u",
+					val, 0xfffffff0);
+				break;
+			}
+			node_msg.weight = num;
 			update_cnt++;
-		} else if (strncasecmp(argv[i], "Reason=", 7) == 0) {
+		} else if (strncasecmp(tag, "Reason", MAX(taglen, 1)) == 0) {
 			char time_buf[64], time_str[32];
 			time_t now;
-			int len = strlen(&argv[i][7]);
+			int len = strlen(val);
 			reason_str = xmalloc(len+1);
-			if (argv[i][7] == '"')
-				strcpy(reason_str, &argv[i][8]);
+			if (*val == '"')
+				strcpy(reason_str, val+1);
 			else
-				strcpy(reason_str, &argv[i][7]);
+				strcpy(reason_str, val);
 
 			len = strlen(reason_str) - 1;
 			if ((len >= 0) && (reason_str[len] == '"'))
@@ -89,35 +136,46 @@ scontrol_update_node (int argc, char *argv[])
 			}
 			now = time(NULL);
 			slurm_make_time_str(&now, time_str, sizeof(time_str));
-			snprintf(time_buf, sizeof(time_buf), "@%s]", time_str); 
+			snprintf(time_buf, sizeof(time_buf), "@%s]", time_str);
 			xstrcat(reason_str, time_buf);
 				
 			node_msg.reason = reason_str;
 			update_cnt++;
 		}
-		else if (strncasecmp(argv[i], "State=NoResp", 12) == 0) {
-			node_msg.node_state = NODE_STATE_NO_RESPOND;
-			update_cnt++;
-		}
-		else if (strncasecmp(argv[i], "State=DRAIN", 11) == 0) {
-			node_msg.node_state = NODE_STATE_DRAIN;
-			update_cnt++;
-		}
-		else if (strncasecmp(argv[i], "State=FAIL", 10) == 0) {
-			node_msg.node_state = NODE_STATE_FAIL;
-			update_cnt++;
-		}
-		else if (strncasecmp(argv[i], "State=RES", 9) == 0) {
-			node_msg.node_state = NODE_RESUME;
-			update_cnt++;
-		}
-		else if (strncasecmp(argv[i], "State=", 6) == 0) {
-			state_val = (uint16_t) NO_VAL;
-			for (j = 0; j <= NODE_STATE_END; j++) {
-				if (strcasecmp (node_state_string(j), 
-				                &argv[i][6]) == 0) {
-					state_val = (uint16_t) j;
-					break;
+		else if (strncasecmp(tag, "State", MAX(taglen, 1)) == 0) {
+			if (strncasecmp(val, "NoResp", 
+				        MAX(vallen, 3)) == 0) {
+				node_msg.node_state = NODE_STATE_NO_RESPOND;
+				update_cnt++;
+			} else if (strncasecmp(val, "DRAIN", 
+				   MAX(vallen, 3)) == 0) {
+				node_msg.node_state = NODE_STATE_DRAIN;
+				update_cnt++;
+			} else if (strncasecmp(val, "FAIL", 
+				   MAX(vallen, 3)) == 0) {
+				node_msg.node_state = NODE_STATE_FAIL;
+				update_cnt++;
+			} else if (strncasecmp(val, "RESUME", 
+				   MAX(vallen, 3)) == 0) {
+				node_msg.node_state = NODE_RESUME;
+				update_cnt++;
+			} else if (strncasecmp(val, "POWER_DOWN", 
+				   MAX(vallen, 7)) == 0) {
+				node_msg.node_state = NODE_STATE_POWER_SAVE;
+				update_cnt++;
+			} else if (strncasecmp(val, "POWER_UP", 
+				   MAX(vallen, 7)) == 0) {
+				node_msg.node_state = NODE_STATE_POWER_UP;
+				update_cnt++;
+			} else {
+				state_val = (uint16_t) NO_VAL;
+				for (j = 0; j < NODE_STATE_END; j++) {
+					if (strncasecmp (node_state_string(j), 
+							 val, 
+							 MAX(vallen, 3)) == 0) {
+						state_val = (uint16_t) j;
+						break;
+					}
 				}
 				if (j == NODE_STATE_END) {
 					exit_code = 1;
@@ -125,21 +183,24 @@ scontrol_update_node (int argc, char *argv[])
 						argv[i]);
 					fprintf (stderr, "Request aborted\n");
 					fprintf (stderr, "Valid states are: ");
-					fprintf (stderr, "NoResp DRAIN FAIL RESUME ");
+					fprintf (stderr,
+						 "NoResp DRAIN FAIL RESUME "
+						 "POWER_DOWN POWER_UP ");
 					for (k = 0; k < NODE_STATE_END; k++) {
 						fprintf (stderr, "%s ", 
 						         node_state_string(k));
 					}
 					fprintf (stderr, "\n");
-					fprintf (stderr, "Not all states are valid given a "
-						 "node's prior state\n");
+					fprintf (stderr, 
+						 "Not all states are valid "
+						 "given a node's prior "
+						 "state\n");
 					goto done;
 				}
+				node_msg.node_state = state_val;
+				update_cnt++;
 			}
-			node_msg.node_state = state_val;
-			update_cnt++;
-		}
-		else {
+		} else {
 			exit_code = 1;
 			fprintf (stderr, "Invalid input: %s\n", argv[i]);
 			fprintf (stderr, "Request aborted\n");
diff --git a/src/scontrol/update_part.c b/src/scontrol/update_part.c
index 6ec952c92..dddb971e1 100644
--- a/src/scontrol/update_part.c
+++ b/src/scontrol/update_part.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -38,157 +39,226 @@
 #include "src/common/proc_args.h"
 #include "src/scontrol/scontrol.h"
 
-
-/* 
- * scontrol_update_part - update the slurm partition configuration per the 
- *	supplied arguments 
- * IN argc - count of arguments
- * IN argv - list of arguments
- * RET 0 if no slurm error, errno otherwise. parsing error prints 
- *			error message and returns 0
- */
 extern int
-scontrol_update_part (int argc, char *argv[]) 
+scontrol_parse_part_options (int argc, char *argv[], int *update_cnt_ptr, 
+			     update_part_msg_t *part_msg_ptr) 
 {
-	int i, min, max, update_cnt = 0;
-	update_part_msg_t part_msg;
+	int i, min, max;
+	char *tag, *val;
+	int taglen, vallen;
+
+	if (!update_cnt_ptr) {
+		error("scontrol_parse_part_options internal error, "
+		      "update_cnt_ptr == NULL");
+		exit_code = 1;
+		return -1; 
+	}
+	if (!part_msg_ptr) {
+		error("scontrol_parse_part_options internal error, "
+		      "part_msg_ptr == NULL");
+		exit_code = 1;
+		return -1; 
+	}
 
-	slurm_init_part_desc_msg ( &part_msg );
 	for (i=0; i<argc; i++) {
-		if (strncasecmp(argv[i], "PartitionName=", 14) == 0)
-			part_msg.name = &argv[i][14];
-		else if (strncasecmp(argv[i], "MaxTime=", 8) == 0) {
-			int max_time = time_str2mins(&argv[i][8]);
+		tag = argv[i];
+		val = strchr(argv[i], '=');
+		if (val) {
+			taglen = val - argv[i];
+			val++;
+			vallen = strlen(val);
+		} else {
+			exit_code = 1;
+			error("Invalid input: %s  Request aborted", argv[i]);
+			return -1;
+		}
+
+		if (strncasecmp(tag, "PartitionName", MAX(taglen, 2)) == 0) {
+			part_msg_ptr->name = val;
+			(*update_cnt_ptr)++;
+		} else if (strncasecmp(tag, "MaxTime", MAX(taglen, 4)) == 0) {
+			int max_time = time_str2mins(val);
 			if ((max_time < 0) && (max_time != INFINITE)) {
 				exit_code = 1;
 				error("Invalid input %s", argv[i]);
-				return 0;
+				return -1;
+			}
+			part_msg_ptr->max_time = max_time;
+			(*update_cnt_ptr)++;
+		}
+		else if (strncasecmp(tag, "DefaultTime", MAX(taglen, 8)) == 0) {
+			int default_time = time_str2mins(val);
+			if ((default_time < 0) && (default_time != INFINITE)) {
+				exit_code = 1;
+				error("Invalid input %s", argv[i]);
+				return -1;
 			}
-			part_msg.max_time = max_time;
-			update_cnt++;
+			part_msg_ptr->default_time = default_time;
+			(*update_cnt_ptr)++;
 		}
-		else if (strncasecmp(argv[i], "MaxNodes=", 9) == 0) {
-			if ((strcasecmp(&argv[i][9],"UNLIMITED") == 0) ||
-			    (strcasecmp(&argv[i][8],"INFINITE") == 0))
-				part_msg.max_nodes = (uint32_t) INFINITE;
+		else if (strncasecmp(tag, "MaxNodes", MAX(taglen, 4)) == 0) {
+			if ((strcasecmp(val,"UNLIMITED") == 0) ||
+			    (strcasecmp(val,"INFINITE") == 0))
+				part_msg_ptr->max_nodes = (uint32_t) INFINITE;
 			else {
 				min = 1;
-				get_resource_arg_range(&argv[i][9],
+				get_resource_arg_range(val,
 					"MaxNodes", &min, &max, true);
-				part_msg.max_nodes = min;
+				part_msg_ptr->max_nodes = min;
 			}
-			update_cnt++;
+			(*update_cnt_ptr)++;
 		}
-		else if (strncasecmp(argv[i], "MinNodes=", 9) == 0) {
+		else if (strncasecmp(tag, "MinNodes", MAX(taglen, 2)) == 0) {
 			min = 1;
-			get_resource_arg_range(&argv[i][9],
+			get_resource_arg_range(val,
 				"MinNodes", &min, &max, true);
-			part_msg.min_nodes = min;
-			update_cnt++;
+			part_msg_ptr->min_nodes = min;
+			(*update_cnt_ptr)++;
 		}
-		else if (strncasecmp(argv[i], "Default=", 8) == 0) {
-			if (strcasecmp(&argv[i][8], "NO") == 0)
-				part_msg.default_part = 0;
-			else if (strcasecmp(&argv[i][8], "YES") == 0)
-				part_msg.default_part = 1;
+		else if (strncasecmp(tag, "Default", MAX(taglen, 7)) == 0) {
+			if (strncasecmp(val, "NO", MAX(vallen, 1)) == 0)
+				part_msg_ptr->default_part = 0;
+			else if (strncasecmp(val, "YES", MAX(vallen, 1)) == 0)
+				part_msg_ptr->default_part = 1;
 			else {
 				exit_code = 1;
 				error("Invalid input: %s", argv[i]);
 				error("Acceptable Default values "
 					"are YES and NO");
-				return 0;
+				return -1;
 			}
-			update_cnt++;
+			(*update_cnt_ptr)++;
 		}
-		else if (strncasecmp(argv[i], "Hidden=", 4) == 0) {
-			if (strcasecmp(&argv[i][7], "NO") == 0)
-				part_msg.hidden = 0;
-			else if (strcasecmp(&argv[i][7], "YES") == 0)
-				part_msg.hidden = 1;
+		else if (strncasecmp(tag, "Hidden", MAX(taglen, 1)) == 0) {
+			if (strncasecmp(val, "NO", MAX(vallen, 1)) == 0)
+				part_msg_ptr->hidden = 0;
+			else if (strncasecmp(val, "YES", MAX(vallen, 1)) == 0)
+				part_msg_ptr->hidden = 1;
 			else {
 				exit_code = 1;
 				error("Invalid input: %s", argv[i]);
 				error("Acceptable Hidden values "
 					"are YES and NO");
-				return 0;
+				return -1;
 			}
-			update_cnt++;
+			(*update_cnt_ptr)++;
 		}
-		else if (strncasecmp(argv[i], "RootOnly=", 4) == 0) {
-			if (strcasecmp(&argv[i][9], "NO") == 0)
-				part_msg.root_only = 0;
-			else if (strcasecmp(&argv[i][9], "YES") == 0)
-				part_msg.root_only = 1;
+		else if (strncasecmp(tag, "RootOnly", MAX(taglen, 1)) == 0) {
+			if (strncasecmp(val, "NO", MAX(vallen, 1)) == 0)
+				part_msg_ptr->root_only = 0;
+			else if (strncasecmp(val, "YES", MAX(vallen, 1)) == 0)
+				part_msg_ptr->root_only = 1;
 			else {
 				exit_code = 1;
 				error("Invalid input: %s", argv[i]);
 				error("Acceptable RootOnly values "
 					"are YES and NO");
-				return 0;
+				return -1;
 			}
-			update_cnt++;
+			(*update_cnt_ptr)++;
 		}
-		else if (strncasecmp(argv[i], "Shared=", 7) == 0) {
-			if (strncasecmp(&argv[i][7], "NO", 2) == 0) {
-				part_msg.max_share = 1;
-			} else if (strncasecmp(&argv[i][7], "EXCLUSIVE", 9) == 0) {
-				part_msg.max_share = 0;
-			} else if (strncasecmp(&argv[i][7], "YES:", 4) == 0) {
-				part_msg.max_share = (uint16_t) strtol(&argv[i][11], 
-					(char **) NULL, 10);
-			} else if (strncasecmp(&argv[i][7], "YES", 3) == 0) {
-				part_msg.max_share = (uint16_t) 4;
-			} else if (strncasecmp(&argv[i][7], "FORCE:", 6) == 0) {
-				part_msg.max_share = (uint16_t) strtol(&argv[i][13],
-					(char **) NULL, 10) | SHARED_FORCE;
-			} else if (strncasecmp(&argv[i][7], "FORCE", 5) == 0) {
-				part_msg.max_share = (uint16_t) 4 |
-					SHARED_FORCE;
+		else if (strncasecmp(tag, "Shared", MAX(taglen, 2)) == 0) {
+			char *colon_pos = strchr(val, ':');
+			if (colon_pos) {
+				*colon_pos = '\0';
+				vallen = strlen(val);
+			}
+			if (strncasecmp(val, "NO", MAX(vallen, 1)) == 0) {
+				part_msg_ptr->max_share = 1;
+
+			} else if (strncasecmp(val, "EXCLUSIVE", MAX(vallen, 1)) == 0) {
+				part_msg_ptr->max_share = 0;
+
+			} else if (strncasecmp(val, "YES", MAX(vallen, 1)) == 0) {
+				if (colon_pos) {
+					part_msg_ptr->max_share = (uint16_t) strtol(colon_pos+1, 
+						(char **) NULL, 10);
+				} else {
+					part_msg_ptr->max_share = (uint16_t) 4;
+				}
+			} else if (strncasecmp(val, "FORCE", MAX(vallen, 1)) == 0) {
+				if (colon_pos) {
+					part_msg_ptr->max_share = (uint16_t) strtol(colon_pos+1,
+						(char **) NULL, 10) | SHARED_FORCE;
+				} else {
+					part_msg_ptr->max_share = (uint16_t) 4 |
+						SHARED_FORCE;
+				}
 			} else {
 				exit_code = 1;
 				error("Invalid input: %s", argv[i]);
 				error("Acceptable Shared values are "
 					"NO, EXCLUSIVE, YES:#, and FORCE:#");
-				return 0;
+				return -1;
 			}
-			update_cnt++;
+			(*update_cnt_ptr)++;
 		}
-		else if (strncasecmp(argv[i], "Priority=", 9) == 0) {
-			part_msg.priority = (uint16_t) strtol(&argv[i][9], 
+		else if (strncasecmp(tag, "Priority", MAX(taglen, 2)) == 0) {
+			part_msg_ptr->priority = (uint16_t) strtol(val, 
 					(char **) NULL, 10);
-			update_cnt++;
+			(*update_cnt_ptr)++;
 		}
-		else if (strncasecmp(argv[i], "State=", 6) == 0) {
-			if (strcasecmp(&argv[i][6], "DOWN") == 0)
-				part_msg.state_up = 0;
-			else if (strcasecmp(&argv[i][6], "UP") == 0)
-				part_msg.state_up = 1;
+		else if (strncasecmp(tag, "State", MAX(taglen, 2)) == 0) {
+			if (strncasecmp(val, "DOWN", MAX(vallen, 1)) == 0)
+				part_msg_ptr->state_up = 0;
+			else if (strncasecmp(val, "UP", MAX(vallen, 1)) == 0)
+				part_msg_ptr->state_up = 1;
 			else {
 				exit_code = 1;
 				error("Invalid input: %s", argv[i]);
 				error("Acceptable State values "
 					"are UP and DOWN");
-				return 0;
+				return -1;
 			}
-			update_cnt++;
+			(*update_cnt_ptr)++;
 		}
-		else if (strncasecmp(argv[i], "Nodes=", 6) == 0) {
-			part_msg.nodes = &argv[i][6];
-			update_cnt++;
+		else if (strncasecmp(tag, "Nodes", MAX(taglen, 1)) == 0) {
+			part_msg_ptr->nodes = val;
+			(*update_cnt_ptr)++;
 		}
-		else if (strncasecmp(argv[i], "AllowGroups=", 12) == 0) {
-			part_msg.allow_groups = &argv[i][12];
-			update_cnt++;
+		else if (strncasecmp(tag, "AllowGroups", MAX(taglen, 1)) == 0) {
+			part_msg_ptr->allow_groups = val;
+			(*update_cnt_ptr)++;
+		}
+		else if (strncasecmp(tag, "AllocNodes", MAX(taglen, 1)) == 0) {
+			part_msg_ptr->allow_alloc_nodes = val;
+			(*update_cnt_ptr)++;
 		}
 		else {
 			exit_code = 1;
 			error("Invalid input: %s", argv[i]);
 			error("Request aborted");
-			return 0;
+			return -1;
 		}
 	}
+	return 0;
+}
 
-	if (update_cnt == 0) {
+
+
+/* 
+ * scontrol_update_part - update the slurm partition configuration per the 
+ *	supplied arguments 
+ * IN argc - count of arguments
+ * IN argv - list of arguments
+ * RET 0 if no slurm error, errno otherwise. parsing error prints 
+ *			error message and returns 0
+ */
+extern int
+scontrol_update_part (int argc, char *argv[]) 
+{
+	int update_cnt = 0;
+	update_part_msg_t part_msg;
+
+	slurm_init_part_desc_msg ( &part_msg );
+	scontrol_parse_part_options (argc, argv, &update_cnt, &part_msg);
+
+	if (part_msg.name == NULL) {
+		exit_code = 1;
+		error("PartitionName must be given.");
+		return 0;
+	}
+	if (update_cnt <= 1) {
 		exit_code = 1;
 		error("No changes specified");
 		return 0;
@@ -200,3 +270,49 @@ scontrol_update_part (int argc, char *argv[])
 	} else
 		return 0;
 }
+
+
+
+/* 
+ * scontrol_create_part - create a slurm partition configuration per the 
+ *	supplied arguments 
+ * IN argc - count of arguments
+ * IN argv - list of arguments
+ * RET 0 if no slurm error, errno otherwise. parsing error prints 
+ *			error message and returns 0
+ */
+extern int
+scontrol_create_part (int argc, char *argv[]) 
+{
+	int update_cnt = 0;
+	update_part_msg_t part_msg;
+
+	slurm_init_part_desc_msg ( &part_msg );
+	scontrol_parse_part_options (argc, argv, &update_cnt, &part_msg);
+
+	if (part_msg.name == NULL) {
+		exit_code = 1;
+		error("PartitionName must be given.");
+		return 0;
+	}
+	if (update_cnt == 0) {
+		exit_code = 1;
+		error("No parameters specified");
+		return 0;
+	}
+
+	if (slurm_create_partition(&part_msg)) {
+		exit_code = 1;
+		slurm_perror("Error creating the partition");
+		return slurm_get_errno ();
+	} else
+		return 0;
+}
+
+
+
+
+
+
+
+
diff --git a/src/sinfo/Makefile.in b/src/sinfo/Makefile.in
index 02b185335..bf4dd0cf9 100644
--- a/src/sinfo/Makefile.in
+++ b/src/sinfo/Makefile.in
@@ -47,14 +47,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/sinfo/opts.c b/src/sinfo/opts.c
index c46efbf26..e3b71d7fe 100644
--- a/src/sinfo/opts.c
+++ b/src/sinfo/opts.c
@@ -2,13 +2,14 @@
  *  opts.c - sinfo command line option processing functions
  *****************************************************************************
  *  Copyright (C) 2002-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 Joey Ekstrom <ekstrom1@llnl.gov>, Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -238,7 +239,7 @@ extern void parse_command_line(int argc, char *argv[])
 		} else if (params.list_reasons) {
 			params.format = params.long_output ?  
 			  "%50R %6t %N" : 
-			  "%35R %N";
+			  "%50R %N";
 
 		} else if ((env_val = getenv ("SINFO_FORMAT"))) {
 			params.format = xstrdup(env_val);
@@ -364,16 +365,18 @@ _node_state_list (void)
 	all_states = xstrdup (node_state_string_compact (0));
 	for (i = 1; i < NODE_STATE_END; i++) {
 		xstrcat (all_states, ",");
-		xstrcat (all_states, node_state_string_compact(i));
+		xstrcat (all_states, node_state_string(i));
 	}
 
-	xstrcat (all_states, ",");
-	xstrcat (all_states, 
-		node_state_string_compact(NODE_STATE_DRAIN));
-
-	xstrcat (all_states, ",");
-	xstrcat (all_states, 
-		node_state_string_compact(NODE_STATE_COMPLETING));
+	xstrcat(all_states, ",DRAIN,DRAINED,DRAINING,NO_RESPOND");
+	xstrcat(all_states, ",");
+	xstrcat(all_states, node_state_string(NODE_STATE_COMPLETING));
+	xstrcat(all_states, ",");
+	xstrcat(all_states, node_state_string(NODE_STATE_POWER_SAVE));
+	xstrcat(all_states, ",");
+	xstrcat(all_states, node_state_string(NODE_STATE_FAIL));
+	xstrcat(all_states, ",");
+	xstrcat(all_states, node_state_string(NODE_STATE_MAINT));
 
 	for (i = 0; i < strlen (all_states); i++)
 		all_states[i] = tolower (all_states[i]);
@@ -387,8 +390,8 @@ _node_state_equal (int i, const char *str)
 {
 	int len = strlen (str);
 
-	if (  (strncasecmp (node_state_string_compact(i), str, len) == 0) 
-	   || (strncasecmp (node_state_string(i),         str, len) == 0)) 
+	if ((strncasecmp(node_state_string_compact(i), str, len) == 0) ||
+	    (strncasecmp(node_state_string(i),         str, len) == 0)) 
 		return (true);
 	return (false);
 }
@@ -403,16 +406,30 @@ static int
 _node_state_id (char *str)
 {	
 	int i;
+	int len = strlen (str);
+
 	for (i = 0; i < NODE_STATE_END; i++) {
 		if (_node_state_equal (i, str))
 			return (i);
 	}
 
-	if  (_node_state_equal (NODE_STATE_DRAIN, str))
+	if (strncasecmp("DRAIN", str, len) == 0)
 		return NODE_STATE_DRAIN;
-
+	if (strncasecmp("DRAINED", str, len) == 0)
+		return NODE_STATE_DRAIN | NODE_STATE_IDLE;
+	if ((strncasecmp("DRAINING", str, len) == 0) ||
+	    (strncasecmp("DRNG", str, len) == 0))
+		return NODE_STATE_DRAIN | NODE_STATE_ALLOCATED;
 	if (_node_state_equal (NODE_STATE_COMPLETING, str))
 		return NODE_STATE_COMPLETING;
+	if (strncasecmp("NO_RESPOND", str, len) == 0)
+		return NODE_STATE_NO_RESPOND;
+	if (_node_state_equal (NODE_STATE_POWER_SAVE, str))
+		return NODE_STATE_POWER_SAVE;
+	if (_node_state_equal (NODE_STATE_FAIL, str))
+		return NODE_STATE_FAIL;
+	if (_node_state_equal (NODE_STATE_MAINT, str))
+		return NODE_STATE_MAINT;
 
 	return (-1);
 }
@@ -509,6 +526,12 @@ _parse_format( char* format )
 					field_size, 
 					right_justify, 
 					suffix );
+		} else if (field[0] == 'L') {
+			params.match_flags.default_time_flag = true;
+			format_add_default_time( params.format_list, 
+					field_size, 
+					right_justify, 
+					suffix );
 		} else if (field[0] == 'm') {
 			params.match_flags.memory_flag = true;
 			format_add_memory( params.format_list, 
@@ -547,9 +570,14 @@ _parse_format( char* format )
 		} else if (field[0] == 's') {
 			params.match_flags.job_size_flag = true;
 			format_add_size( params.format_list, 
-					field_size, 
-					right_justify, 
-					suffix );
+					 field_size, 
+					 right_justify, 
+					 suffix );
+		} else if (field[0] == 'S') {
+			format_add_alloc_nodes( params.format_list, 
+						field_size, 
+						right_justify, 
+						suffix );
 		} else if (field[0] == 't') {
 			params.match_flags.state_flag = true;
 			format_add_state_compact( params.format_list, 
@@ -687,6 +715,8 @@ void _print_options( void )
 	printf("bg_flag         = %s\n", params.bg_flag ? "true" : "false");
 	printf("cpus_flag       = %s\n", params.match_flags.cpus_flag ?
 			"true" : "false");
+	printf("default_time_flag =%s\n", params.match_flags.default_time_flag ?
+					"true" : "false");
 	printf("disk_flag       = %s\n", params.match_flags.disk_flag ?
 			"true" : "false");
 	printf("features_flag   = %s\n", params.match_flags.features_flag ?
diff --git a/src/sinfo/print.c b/src/sinfo/print.c
index fc0ae3c73..1dfac4196 100644
--- a/src/sinfo/print.c
+++ b/src/sinfo/print.c
@@ -2,13 +2,15 @@
  *  print.c - sinfo print job functions
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Joey Ekstrom <ekstrom1@llnl.gov> and 
  *  Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *   
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -485,6 +487,25 @@ int _print_groups(sinfo_data_t * sinfo_data, int width,
 	return SLURM_SUCCESS;
 }
 
+int _print_alloc_nodes(sinfo_data_t * sinfo_data, int width,
+		       bool right_justify, char *suffix)
+{
+	if (sinfo_data) {
+		if (sinfo_data->part_info == NULL)
+			_print_str("n/a", width, right_justify, true);
+		else if (sinfo_data->part_info->allow_alloc_nodes)
+			_print_str(sinfo_data->part_info->allow_alloc_nodes, 
+				   width, right_justify, true);
+		else
+			_print_str("all", width, right_justify, true);
+	} else
+		_print_str("ALLOCNODES", width, right_justify, true);
+	
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
 int _print_memory(sinfo_data_t * sinfo_data, int width,
 			bool right_justify, char *suffix)
 {
@@ -805,6 +826,26 @@ int _print_time(sinfo_data_t * sinfo_data, int width,
 	return SLURM_SUCCESS;
 }
 
+int _print_default_time(sinfo_data_t * sinfo_data, int width,
+				bool right_justify, char *suffix)
+{
+	if (sinfo_data) {
+		if ((sinfo_data->part_info == NULL) ||
+		    (sinfo_data->part_info->default_time == NO_VAL))	      
+			_print_str("n/a", width, right_justify, true);
+		else if (sinfo_data->part_info->default_time == INFINITE)
+			_print_str("infinite", width, right_justify, true);
+		else
+			_print_secs((sinfo_data->part_info->default_time * 60L),
+					width, right_justify, true);
+	} else
+		_print_str("DEFAULTTIME", width, right_justify, true);
+
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
 int _print_weight(sinfo_data_t * sinfo_data, int width,
 			bool right_justify, char *suffix)
 {
diff --git a/src/sinfo/print.h b/src/sinfo/print.h
index a7d01c8d5..542dd27c6 100644
--- a/src/sinfo/print.h
+++ b/src/sinfo/print.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Joey Ekstrom <ekstrom1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -116,8 +117,12 @@ int  print_sinfo_list(List sinfo_list);
 	format_add_function(list,wid,right,suffix,_print_state_long)
 #define format_add_time(list,wid,right,suffix) \
 	format_add_function(list,wid,right,suffix,_print_time)
+#define format_add_default_time(list,wid,right,suffix) \
+	format_add_function(list,wid,right,suffix,_print_default_time)
 #define format_add_weight(list,wid,right,suffix) \
 	format_add_function(list,wid,right,suffix,_print_weight)
+#define format_add_alloc_nodes(list,wid,right,suffix) \
+	format_add_function(list,wid,right,suffix,_print_alloc_nodes)
 
 /*****************************************************************************
  * Print Field Functions
@@ -173,7 +178,11 @@ int _print_state_long(sinfo_data_t * sinfo_data, int width,
 			bool right_justify, char *suffix);
 int _print_time(sinfo_data_t * sinfo_data, int width, 
 			bool right_justify, char *suffix);
+int _print_default_time(sinfo_data_t * sinfo_data, int width, 
+			bool right_justify, char *suffix);
 int _print_weight(sinfo_data_t * sinfo_data, int width,
 			bool right_justify, char *suffix);
+int _print_alloc_nodes(sinfo_data_t * sinfo_data, int width,
+		       bool right_justify, char *suffix);
 
 #endif
diff --git a/src/sinfo/sinfo.c b/src/sinfo/sinfo.c
index 83bfac9a6..d5f9af698 100644
--- a/src/sinfo/sinfo.c
+++ b/src/sinfo/sinfo.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Joey Ekstrom <ekstrom1@llnl.gov>, Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -49,6 +50,7 @@
 
 #ifdef HAVE_BG			     
 # include "src/plugins/select/bluegene/wrap_rm_api.h"
+# include "src/plugins/select/bluegene/plugin/bluegene.h"
 #endif
 
 /********************
@@ -341,7 +343,7 @@ static int _build_sinfo_data(List sinfo_list,
 	int i=0;
 	bg_info_record_t *bg_info_record = NULL;
 	int node_scaling = partition_msg->partition_array[0].node_scaling;
-	char *slurm_user = xstrdup(slurmctld_conf.slurm_user_name);
+	int block_error = 0;
 
 	for (i=0; i<node_msg->record_count; i++) {
 		node_ptr = &(node_msg->node_array[i]);
@@ -356,18 +358,29 @@ static int _build_sinfo_data(List sinfo_list,
 		node_ptr->threads = node_scaling;
 		node_ptr->cores = 0;
 		node_ptr->used_cpus = 0;
+		if((node_ptr->node_state & NODE_STATE_BASE) == NODE_STATE_DOWN) 
+			continue;
+
+		if(node_ptr->node_state & NODE_STATE_DRAIN) {
+			if(node_ptr->node_state & NODE_STATE_FAIL) {
+				node_ptr->node_state &= ~NODE_STATE_DRAIN;
+				node_ptr->node_state &= ~NODE_STATE_FAIL;
+			} else {
+				node_ptr->cores += node_scaling;
+			}
+		}
+		node_ptr->node_state |= NODE_STATE_IDLE;
 	}
 
 	for (i=0; i<node_select_msg->record_count; i++) {
 		bg_info_record = &(node_select_msg->bg_info_array[i]);
 		
 		/* this block is idle we won't mark it */
-		if (bg_info_record->state != RM_PARTITION_ERROR
-		    && !strcmp(slurm_user, bg_info_record->owner_name))
+		if (bg_info_record->job_running == NO_JOB_RUNNING)
 			continue;
+
 		_update_nodes_for_bg(node_scaling, node_msg, bg_info_record);
 	}
-	xfree(slurm_user);
 
 #endif
 	/* by default every partition is shown, even if no nodes */
@@ -402,6 +415,14 @@ static int _build_sinfo_data(List sinfo_list,
 			if (params.filtering && _filter_out(node_ptr))
 				continue;
 #ifdef HAVE_BG
+			if((node_ptr->node_state & NODE_STATE_DRAIN) 
+			   && (node_ptr->node_state & NODE_STATE_FAIL)) {
+				node_ptr->node_state &= ~NODE_STATE_DRAIN;
+				node_ptr->node_state &= ~NODE_STATE_FAIL;
+				block_error = 1;
+			} else
+				block_error = 0;
+			node_ptr->threads = node_scaling;
 			for(i=0; i<3; i++) {
 				int norm = 0;
 				switch(i) {
@@ -457,6 +478,9 @@ static int _build_sinfo_data(List sinfo_list,
 						NODE_STATE_FLAGS;
 					node_ptr->node_state |= 
 						NODE_STATE_DRAIN;
+					if(block_error)
+						node_ptr->node_state
+							|= NODE_STATE_FAIL;
 					node_ptr->threads = node_ptr->cores;
 					break;
 				default:
@@ -529,7 +553,33 @@ static bool _filter_out(node_info_t *node_ptr)
 
 		iterator = list_iterator_create(params.state_list);
 		while ((node_state = list_next(iterator))) {
-			if (*node_state & NODE_STATE_FLAGS) {
+			if (*node_state == 
+			    (NODE_STATE_DRAIN | NODE_STATE_ALLOCATED)) {
+				/* We search for anything that gets mapped to
+				 * DRAINING in node_state_string */
+				if (!(node_ptr->node_state & NODE_STATE_DRAIN))
+					continue;
+				if (((node_ptr->node_state & NODE_STATE_BASE) ==
+				     NODE_STATE_ALLOCATED) ||
+				    (node_ptr->node_state & 
+				     NODE_STATE_COMPLETING)) {
+					match = true;
+					break;
+				}
+			} else if (*node_state == 
+				   (NODE_STATE_DRAIN | NODE_STATE_IDLE)) {
+				/* We search for anything that gets mapped to
+				 * DRAINED in node_state_string */
+				if (!(node_ptr->node_state & NODE_STATE_DRAIN))
+					continue;
+				if (((node_ptr->node_state & NODE_STATE_BASE) !=
+				     NODE_STATE_ALLOCATED) &&
+				    (!(node_ptr->node_state & 
+				       NODE_STATE_COMPLETING))) {
+					match = true;
+					break;
+				}
+			} else if (*node_state & NODE_STATE_FLAGS) {
 				if (*node_state & node_ptr->node_state) {
 					match = true;
 					break;
@@ -650,6 +700,10 @@ static bool _match_part_data(sinfo_data_t *sinfo_ptr,
 	    (part_ptr->max_nodes != sinfo_ptr->part_info->max_nodes))
 		return false;
 
+	if (params.match_flags.default_time_flag &&
+	    (part_ptr->default_time != sinfo_ptr->part_info->default_time))
+		return false;
+
 	if (params.match_flags.max_time_flag &&
 	    (part_ptr->max_time != sinfo_ptr->part_info->max_time))
 		return false;
@@ -781,36 +835,47 @@ static void _update_nodes_for_bg(int node_scaling,
 				 bg_info_record_t *bg_info_record)
 {
 	node_info_t *node_ptr = NULL;
-	hostlist_t hl;
-	char *node_name = NULL;
+	int j = 0;
 
 	/* we are using less than one node */
 	if(bg_info_record->conn_type == SELECT_SMALL) 
 		node_scaling = bg_info_record->node_cnt;
-       		   
-	hl = hostlist_create(bg_info_record->nodes);
-	while (1) {
-		if (node_name)
-			free(node_name);
-		node_name = hostlist_shift(hl);
-		if (!node_name)
-			break;
-		node_ptr = _find_node(node_name, node_msg);
-		if (!node_ptr)
-			continue;
-		/* cores is overloaded to be the cnodes in an error
-		 * state and used_cpus is overloaded to be the nodes in
-		 * use.  No block should be sent in here if it isn't
-		 * in use (that doesn't mean in a free state, it means
-		 * the user isn't slurm or the block is in an error state.  
-		 */
-		if(bg_info_record->state == RM_PARTITION_ERROR) 
-			node_ptr->cores += node_scaling;
-		else
-			node_ptr->used_cpus += node_scaling;
-	}
-	hostlist_destroy(hl);
 	
+	j = 0;
+	while(bg_info_record->bp_inx[j] >= 0) {
+		int i2 = 0;
+		for(i2 = bg_info_record->bp_inx[j];
+		    i2 <= bg_info_record->bp_inx[j+1];
+		    i2++) {
+			node_ptr = &(node_msg->node_array[i2]);
+			/* cores is overloaded to be the
+			 * cnodes in an error state and
+			 * used_cpus is overloaded to be the nodes in
+			 * use.  No block should be sent in
+			 * here if it isn't in use (that
+			 * doesn't mean in a free state, it means
+			 * the user isn't slurm or the block 
+			 * is in an error state.  
+			 */
+			if((node_ptr->node_state & NODE_STATE_BASE) 
+			   == NODE_STATE_DOWN) 
+				continue;
+			
+			if(bg_info_record->state
+			   == RM_PARTITION_ERROR) {
+				node_ptr->cores += node_scaling;
+				node_ptr->node_state 
+					|= NODE_STATE_DRAIN;
+				node_ptr->node_state
+					|= NODE_STATE_FAIL;
+			} else if(bg_info_record->job_running
+				  > NO_JOB_RUNNING)  
+				node_ptr->used_cpus += node_scaling;
+			else 
+				error("Hey we didn't get anything here");
+		}
+		j += 2;
+	}
 }
 #endif
 
diff --git a/src/sinfo/sinfo.h b/src/sinfo/sinfo.h
index fbae0bded..79a0493bd 100644
--- a/src/sinfo/sinfo.h
+++ b/src/sinfo/sinfo.h
@@ -1,15 +1,16 @@
 /****************************************************************************\
  *  sinfo.h - definitions used for sinfo data functions
  *
- *  $Id: sinfo.h 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: sinfo.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Joey Ekstrom <ekstrom1@llnl.gov>, Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -123,6 +124,7 @@ struct sinfo_match_flags {
 	bool features_flag;
 	bool groups_flag;
 	bool job_size_flag;
+	bool default_time_flag;
 	bool max_time_flag;
 	bool memory_flag;
 	bool partition_flag;
diff --git a/src/sinfo/sort.c b/src/sinfo/sort.c
index d49b81a2a..4eb53621c 100644
--- a/src/sinfo/sort.c
+++ b/src/sinfo/sort.c
@@ -5,10 +5,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Joey Ekstrom <ekstrom1@llnl.gov>, 
  *             Morris Jette <jette1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/Makefile.am b/src/slurmctld/Makefile.am
index 5ccac1a4f..03613a821 100644
--- a/src/slurmctld/Makefile.am
+++ b/src/slurmctld/Makefile.am
@@ -19,10 +19,9 @@ slurmctld_SOURCES = 	\
 	agent.c  	\
 	agent.h		\
 	backup.c	\
+	basil_interface.c \
+	basil_interface.h \
 	controller.c 	\
-	hilbert.c	\
-	hilbert.h	\
-	hilbert_slurm.c	\
 	job_mgr.c 	\
 	job_scheduler.c \
 	job_scheduler.h \
@@ -36,11 +35,15 @@ slurmctld_SOURCES = 	\
 	partition_mgr.c \
 	ping_nodes.c	\
 	ping_nodes.h	\
+	port_mgr.c	\
+	port_mgr.h	\
 	power_save.c	\
 	proc_req.c	\
 	proc_req.h	\
 	read_config.c	\
 	read_config.h	\
+	reservation.c	\
+	reservation.h	\
 	sched_plugin.c	\
 	sched_plugin.h	\
 	slurmctld.h	\
@@ -49,6 +52,8 @@ slurmctld_SOURCES = 	\
 	state_save.c	\
 	state_save.h	\
 	step_mgr.c	\
+	topo_plugin.c	\
+	topo_plugin.h	\
 	trigger_mgr.c	\
 	trigger_mgr.h
 
diff --git a/src/slurmctld/Makefile.in b/src/slurmctld/Makefile.in
index 598da32ea..daa4a42bf 100644
--- a/src/slurmctld/Makefile.in
+++ b/src/slurmctld/Makefile.in
@@ -45,14 +45,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -73,14 +77,15 @@ am__installdirs = "$(DESTDIR)$(sbindir)"
 sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(sbin_PROGRAMS)
 am_slurmctld_OBJECTS = acct_policy.$(OBJEXT) agent.$(OBJEXT) \
-	backup.$(OBJEXT) controller.$(OBJEXT) hilbert.$(OBJEXT) \
-	hilbert_slurm.$(OBJEXT) job_mgr.$(OBJEXT) \
-	job_scheduler.$(OBJEXT) licenses.$(OBJEXT) locks.$(OBJEXT) \
-	node_mgr.$(OBJEXT) node_scheduler.$(OBJEXT) \
-	partition_mgr.$(OBJEXT) ping_nodes.$(OBJEXT) \
-	power_save.$(OBJEXT) proc_req.$(OBJEXT) read_config.$(OBJEXT) \
+	backup.$(OBJEXT) basil_interface.$(OBJEXT) \
+	controller.$(OBJEXT) job_mgr.$(OBJEXT) job_scheduler.$(OBJEXT) \
+	licenses.$(OBJEXT) locks.$(OBJEXT) node_mgr.$(OBJEXT) \
+	node_scheduler.$(OBJEXT) partition_mgr.$(OBJEXT) \
+	ping_nodes.$(OBJEXT) port_mgr.$(OBJEXT) power_save.$(OBJEXT) \
+	proc_req.$(OBJEXT) read_config.$(OBJEXT) reservation.$(OBJEXT) \
 	sched_plugin.$(OBJEXT) srun_comm.$(OBJEXT) \
-	state_save.$(OBJEXT) step_mgr.$(OBJEXT) trigger_mgr.$(OBJEXT)
+	state_save.$(OBJEXT) step_mgr.$(OBJEXT) topo_plugin.$(OBJEXT) \
+	trigger_mgr.$(OBJEXT)
 slurmctld_OBJECTS = $(am_slurmctld_OBJECTS)
 slurmctld_DEPENDENCIES = $(top_builddir)/src/common/libdaemonize.la \
 	$(top_builddir)/src/common/libcommon.o
@@ -114,6 +119,10 @@ 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@
@@ -286,10 +295,9 @@ slurmctld_SOURCES = \
 	agent.c  	\
 	agent.h		\
 	backup.c	\
+	basil_interface.c \
+	basil_interface.h \
 	controller.c 	\
-	hilbert.c	\
-	hilbert.h	\
-	hilbert_slurm.c	\
 	job_mgr.c 	\
 	job_scheduler.c \
 	job_scheduler.h \
@@ -303,11 +311,15 @@ slurmctld_SOURCES = \
 	partition_mgr.c \
 	ping_nodes.c	\
 	ping_nodes.h	\
+	port_mgr.c	\
+	port_mgr.h	\
 	power_save.c	\
 	proc_req.c	\
 	proc_req.h	\
 	read_config.c	\
 	read_config.h	\
+	reservation.c	\
+	reservation.h	\
 	sched_plugin.c	\
 	sched_plugin.h	\
 	slurmctld.h	\
@@ -316,6 +328,8 @@ slurmctld_SOURCES = \
 	state_save.c	\
 	state_save.h	\
 	step_mgr.c	\
+	topo_plugin.c	\
+	topo_plugin.h	\
 	trigger_mgr.c	\
 	trigger_mgr.h
 
@@ -394,9 +408,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acct_policy.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/agent.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basil_interface.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/controller.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hilbert.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hilbert_slurm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job_mgr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job_scheduler.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/licenses.Po@am__quote@
@@ -405,13 +418,16 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/node_scheduler.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/partition_mgr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ping_nodes.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/port_mgr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/power_save.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proc_req.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read_config.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reservation.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sched_plugin.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srun_comm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state_save.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/step_mgr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topo_plugin.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trigger_mgr.Po@am__quote@
 
 .c.o:
diff --git a/src/slurmctld/acct_policy.c b/src/slurmctld/acct_policy.c
index 5471ca96d..8138a14c9 100644
--- a/src/slurmctld/acct_policy.c
+++ b/src/slurmctld/acct_policy.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -57,6 +58,7 @@ static void _cancel_job(struct job_record *job_ptr)
 	job_ptr->job_state = JOB_FAILED;
 	job_ptr->exit_code = 1;
 	job_ptr->state_reason = FAIL_BANK_ACCOUNT;
+	xfree(job_ptr->state_desc);
 	job_ptr->start_time = job_ptr->end_time = now;
 	job_completion_logger(job_ptr);
 	delete_job_details(job_ptr);
@@ -155,7 +157,7 @@ extern void acct_policy_job_begin(struct job_record *job_ptr)
 		return;
 
 	slurm_mutex_lock(&assoc_mgr_association_lock);
-	assoc_ptr = job_ptr->assoc_ptr;
+	assoc_ptr = (acct_association_rec_t *)job_ptr->assoc_ptr;
 	while(assoc_ptr) {
 		assoc_ptr->used_jobs++;	
 		assoc_ptr->grp_used_cpus += job_ptr->total_procs;
@@ -179,7 +181,7 @@ extern void acct_policy_job_fini(struct job_record *job_ptr)
 		return;
 
 	slurm_mutex_lock(&assoc_mgr_association_lock);
-	assoc_ptr = job_ptr->assoc_ptr;
+	assoc_ptr = (acct_association_rec_t *)job_ptr->assoc_ptr;
 	while(assoc_ptr) {
 		if (assoc_ptr->used_jobs)
 			assoc_ptr->used_jobs--;
@@ -235,28 +237,43 @@ extern bool acct_policy_job_runnable(struct job_record *job_ptr)
 		return true;
 
 	/* clear old state reason */
-        if (job_ptr->state_reason == WAIT_ASSOC_LIMIT)
+        if ((job_ptr->state_reason == WAIT_ASSOC_JOB_LIMIT) ||
+	    (job_ptr->state_reason == WAIT_ASSOC_RESOURCE_LIMIT) ||
+	    (job_ptr->state_reason == WAIT_ASSOC_TIME_LIMIT))
                 job_ptr->state_reason = WAIT_NO_REASON;
 
 	slurm_mutex_lock(&assoc_mgr_association_lock);
 	assoc_ptr = job_ptr->assoc_ptr;
 	while(assoc_ptr) {
+		uint64_t usage_mins =
+			(uint64_t)(assoc_ptr->usage_raw / 60.0);
+		uint32_t wall_mins = assoc_ptr->grp_used_wall / 60;
 #if _DEBUG
 		info("acct_job_limits: %u of %u", 
 		     assoc_ptr->used_jobs, assoc_ptr->max_jobs);
 #endif		
-		/* NOTE: We can't enforce assoc_ptr->grp_cpu_mins at this
-		 * time because we aren't keeping track of how long
-		 * jobs have been running yet */
-
-		/* NOTE: We can't enforce assoc_ptr->grp_cpus at this
-		 * time because we don't have access to a CPU count for the job
-		 * due to how all of the job's specifications interact */
+		if ((assoc_ptr->grp_cpu_mins != (uint64_t)NO_VAL)
+		    && (assoc_ptr->grp_cpu_mins != (uint64_t)INFINITE)
+		    && (usage_mins >= assoc_ptr->grp_cpu_mins)) {
+			job_ptr->state_reason = WAIT_ASSOC_JOB_LIMIT;
+			xfree(job_ptr->state_desc);
+			debug2("job %u being held, "
+			       "assoc %u is at or exceeds "
+			       "group max cpu minutes limit %llu "
+			       "with %Lf for account %s",
+			       job_ptr->job_id, assoc_ptr->id,
+			       assoc_ptr->grp_cpu_mins, 
+			       assoc_ptr->usage_raw, assoc_ptr->acct);	
+			
+			rc = false;
+			goto end_it;
+		}
 
 		if ((assoc_ptr->grp_jobs != NO_VAL) &&
 		    (assoc_ptr->grp_jobs != INFINITE) &&
 		    (assoc_ptr->used_jobs >= assoc_ptr->grp_jobs)) {
-			job_ptr->state_reason = WAIT_ASSOC_LIMIT;
+			job_ptr->state_reason = WAIT_ASSOC_JOB_LIMIT;
+			xfree(job_ptr->state_desc);
 			debug2("job %u being held, "
 			       "assoc %u is at or exceeds "
 			       "group max jobs limit %u with %u for account %s",
@@ -282,7 +299,9 @@ extern bool acct_policy_job_runnable(struct job_record *job_ptr)
 			} else if ((assoc_ptr->grp_used_nodes + 
 				    job_ptr->details->min_nodes) > 
 				   assoc_ptr->grp_nodes) {
-				job_ptr->state_reason = WAIT_ASSOC_LIMIT;
+				job_ptr->state_reason = 
+					WAIT_ASSOC_RESOURCE_LIMIT;
+				xfree(job_ptr->state_desc);
 				debug2("job %u being held, "
 				       "assoc %u is at or exceeds "
 				       "group max node limit %u "
@@ -299,27 +318,22 @@ extern bool acct_policy_job_runnable(struct job_record *job_ptr)
 		}
 
 		/* we don't need to check submit_jobs here */
-		
-		/* FIX ME: Once we start tracking time of running jobs
-		 * we will need to update the amount of time we have
-		 * used and check against that here.  When we start
-		 * keeping track of time we will also need to come up
-		 * with a way to refresh the time. 
-		 */
-		if ((assoc_ptr->grp_wall != NO_VAL) &&
-		    (assoc_ptr->grp_wall != INFINITE)) {
-			time_limit = assoc_ptr->grp_wall;
-			if ((job_ptr->time_limit != NO_VAL) &&
-			    (job_ptr->time_limit > time_limit)) {
-				info("job %u being cancelled, "
-				     "time limit %u exceeds group "
-				     "time limit %u for account %s",
-				     job_ptr->job_id, job_ptr->time_limit, 
-				     time_limit, assoc_ptr->acct);
-				_cancel_job(job_ptr);
-				rc = false;
-				goto end_it;
-			}
+
+		if ((assoc_ptr->grp_wall != NO_VAL) 
+		    && (assoc_ptr->grp_wall != INFINITE)
+		    && (wall_mins >= assoc_ptr->grp_wall)) {
+			job_ptr->state_reason = WAIT_ASSOC_JOB_LIMIT;
+			xfree(job_ptr->state_desc);
+			debug2("job %u being held, "
+			       "assoc %u is at or exceeds "
+			       "group wall limit %u "
+			       "with %u for account %s",
+			       job_ptr->job_id, assoc_ptr->id,
+			       assoc_ptr->grp_wall, 
+			       wall_mins, assoc_ptr->acct);
+			       
+			rc = false;
+			goto end_it;
 		}
 
 		
@@ -343,7 +357,8 @@ extern bool acct_policy_job_runnable(struct job_record *job_ptr)
 		if ((assoc_ptr->max_jobs != NO_VAL) &&
 		    (assoc_ptr->max_jobs != INFINITE) &&
 		    (assoc_ptr->used_jobs >= assoc_ptr->max_jobs)) {
-			job_ptr->state_reason = WAIT_ASSOC_LIMIT;
+			job_ptr->state_reason = WAIT_ASSOC_JOB_LIMIT;
+			xfree(job_ptr->state_desc);
 			debug2("job %u being held, "
 			       "assoc %u is at or exceeds "
 			       "max jobs limit %u with %u for account %s",
@@ -403,10 +418,10 @@ end_it:
 extern void acct_policy_update_running_job_usage(struct job_record *job_ptr)
 {
 	acct_association_rec_t *assoc_ptr;
+
 	slurm_mutex_lock(&assoc_mgr_association_lock);
 	assoc_ptr = job_ptr->assoc_ptr;
 	while(assoc_ptr) {
-
 		assoc_ptr = assoc_ptr->parent_assoc_ptr;
 	}
 	slurm_mutex_unlock(&assoc_mgr_association_lock);
diff --git a/src/slurmctld/acct_policy.h b/src/slurmctld/acct_policy.h
index 94b72c4cb..4bd31614c 100644
--- a/src/slurmctld/acct_policy.h
+++ b/src/slurmctld/acct_policy.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/agent.c b/src/slurmctld/agent.c
index 6675bf050..915c2fd76 100644
--- a/src/slurmctld/agent.c
+++ b/src/slurmctld/agent.c
@@ -3,14 +3,15 @@
  *	logic could be placed for broadcast communications.
  *****************************************************************************
  *  Copyright (C) 2002-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>, et. al.
  *  Derived from pdsh written by Jim Garlick <garlick1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -153,6 +154,8 @@ typedef struct task_info {
 
 typedef struct queued_request {
 	agent_arg_t* agent_arg_ptr;	/* The queued request */
+	time_t       first_attempt;	/* Time of first check for batch 
+					 * launch RPC *only* */
 	time_t       last_attempt;	/* Time of last xmit attempt */
 } queued_request_t;
 
@@ -162,6 +165,7 @@ typedef struct mail_info {
 } mail_info_t;
 
 static void _sig_handler(int dummy);
+static int  _batch_launch_defer(queued_request_t *queued_req_ptr);
 static inline int _comm_err(char *node_name);
 static void _list_delete_retry(void *retry_entry);
 static agent_info_t *_make_agent_info(agent_arg_t *agent_arg_ptr);
@@ -384,13 +388,14 @@ static agent_info_t *_make_agent_info(agent_arg_t *agent_arg_ptr)
 	agent_info_ptr->msg_type       = agent_arg_ptr->msg_type;
 	agent_info_ptr->msg_args_pptr  = &agent_arg_ptr->msg_args;
 	
-	if ((agent_arg_ptr->msg_type != REQUEST_SHUTDOWN)
-	&&  (agent_arg_ptr->msg_type != REQUEST_RECONFIGURE)
-	&&  (agent_arg_ptr->msg_type != SRUN_EXEC)
-	&&  (agent_arg_ptr->msg_type != SRUN_TIMEOUT)
-	&&  (agent_arg_ptr->msg_type != SRUN_NODE_FAIL)
-	&&  (agent_arg_ptr->msg_type != SRUN_USER_MSG)
-	&&  (agent_arg_ptr->msg_type != SRUN_JOB_COMPLETE)) {
+	if ((agent_arg_ptr->msg_type != REQUEST_SHUTDOWN)	&&
+	    (agent_arg_ptr->msg_type != REQUEST_RECONFIGURE)	&&
+	    (agent_arg_ptr->msg_type != SRUN_EXEC)		&&
+	    (agent_arg_ptr->msg_type != SRUN_TIMEOUT)		&&
+	    (agent_arg_ptr->msg_type != SRUN_NODE_FAIL)		&&
+	    (agent_arg_ptr->msg_type != SRUN_USER_MSG)		&&
+	    (agent_arg_ptr->msg_type != SRUN_STEP_MISSING)	&&
+	    (agent_arg_ptr->msg_type != SRUN_JOB_COMPLETE)) {
 		/* Sending message to a possibly large number of slurmd.
 		 * Push all message forwarding to slurmd in order to 
 		 * offload as much work from slurmctld as possible. */
@@ -509,13 +514,14 @@ static void *_wdog(void *args)
 	thd_complete_t thd_comp;
 	ret_data_info_t *ret_data_info = NULL;
 
-	if ( (agent_ptr->msg_type == SRUN_JOB_COMPLETE)
-	||   (agent_ptr->msg_type == SRUN_EXEC)
-	||   (agent_ptr->msg_type == SRUN_PING)
-	||   (agent_ptr->msg_type == SRUN_TIMEOUT)
-	||   (agent_ptr->msg_type == SRUN_USER_MSG)
-	||   (agent_ptr->msg_type == RESPONSE_RESOURCE_ALLOCATION)
-	||   (agent_ptr->msg_type == SRUN_NODE_FAIL) )
+	if ( (agent_ptr->msg_type == SRUN_JOB_COMPLETE)			||
+	     (agent_ptr->msg_type == SRUN_STEP_MISSING)			||
+	     (agent_ptr->msg_type == SRUN_EXEC)				||
+	     (agent_ptr->msg_type == SRUN_PING)				||
+	     (agent_ptr->msg_type == SRUN_TIMEOUT)			||
+	     (agent_ptr->msg_type == SRUN_USER_MSG)			||
+	     (agent_ptr->msg_type == RESPONSE_RESOURCE_ALLOCATION)	||
+	     (agent_ptr->msg_type == SRUN_NODE_FAIL) )
 		srun_agent = true;
 
 	thd_comp.max_delay = 0;
@@ -597,9 +603,10 @@ static void _notify_slurmctld_jobs(agent_info_t *agent_ptr)
 			*agent_ptr->msg_args_pptr;
 		job_id  = msg->job_id;
 		step_id = NO_VAL;
-	} else if ((agent_ptr->msg_type == SRUN_JOB_COMPLETE)
-	||         (agent_ptr->msg_type == SRUN_EXEC)
-	||         (agent_ptr->msg_type == SRUN_USER_MSG)) {
+	} else if ((agent_ptr->msg_type == SRUN_JOB_COMPLETE)		||
+		   (agent_ptr->msg_type == SRUN_STEP_MISSING)		||
+	           (agent_ptr->msg_type == SRUN_EXEC)			||
+	           (agent_ptr->msg_type == SRUN_USER_MSG)) {
 		return;		/* no need to note srun response */
 	} else if (agent_ptr->msg_type == SRUN_NODE_FAIL) {
 		return;		/* no need to note srun response */
@@ -805,13 +812,14 @@ static void *_thread_per_group_rpc(void *args)
 	xassert(args != NULL);
 	xsignal(SIGUSR1, _sig_handler);
 	xsignal_unblock(sig_array);
-	is_kill_msg = (	(msg_type == REQUEST_KILL_TIMELIMIT) ||
+	is_kill_msg = (	(msg_type == REQUEST_KILL_TIMELIMIT)	||
 			(msg_type == REQUEST_TERMINATE_JOB) );
-	srun_agent = (	(msg_type == SRUN_PING)    ||
-			(msg_type == SRUN_EXEC)    ||
-			(msg_type == SRUN_JOB_COMPLETE) ||
-			(msg_type == SRUN_TIMEOUT) ||
-			(msg_type == SRUN_USER_MSG) ||
+	srun_agent = (	(msg_type == SRUN_PING)			||
+			(msg_type == SRUN_EXEC)			||
+			(msg_type == SRUN_JOB_COMPLETE)		||
+			(msg_type == SRUN_STEP_MISSING)		||
+			(msg_type == SRUN_TIMEOUT)		||
+			(msg_type == SRUN_USER_MSG)		||
 			(msg_type == RESPONSE_RESOURCE_ALLOCATION) ||
 			(msg_type == SRUN_NODE_FAIL) );
 
@@ -1121,7 +1129,7 @@ static void _list_delete_retry(void *retry_entry)
  */
 extern int agent_retry (int min_wait, bool mail_too)
 {
-	int list_size = 0;
+	int list_size = 0, rc;
 	time_t now = time(NULL);
 	queued_request_t *queued_req_ptr = NULL;
 	agent_arg_t *agent_arg_ptr = NULL;
@@ -1163,6 +1171,17 @@ extern int agent_retry (int min_wait, bool mail_too)
 		retry_iter = list_iterator_create(retry_list);
 		while ((queued_req_ptr = (queued_request_t *)
 				list_next(retry_iter))) {
+			rc = _batch_launch_defer(queued_req_ptr);
+			if (rc == -1) {		/* abort request */
+				_purge_agent_args(queued_req_ptr->
+						  agent_arg_ptr);
+				xfree(queued_req_ptr);
+				list_remove(retry_iter);
+				list_size--;
+				continue;
+			}
+			if (rc > 0)
+				continue;
  			if (queued_req_ptr->last_attempt == 0) {
 				list_remove(retry_iter);
 				list_size--;
@@ -1181,6 +1200,17 @@ extern int agent_retry (int min_wait, bool mail_too)
 		/* next try to find an older record to retry */
 		while ((queued_req_ptr = (queued_request_t *) 
 				list_next(retry_iter))) {
+			rc = _batch_launch_defer(queued_req_ptr);
+			if (rc == -1) { 	/* abort request */
+				_purge_agent_args(queued_req_ptr->
+						  agent_arg_ptr);
+				xfree(queued_req_ptr);
+				list_remove(retry_iter);
+				list_size--;
+				continue;
+			}
+			if (rc > 0)
+				continue;
 			age = difftime(now, queued_req_ptr->last_attempt);
 			if (age > min_wait) {
 				list_remove(retry_iter);
@@ -1443,3 +1473,73 @@ extern void mail_job_info (struct job_record *job_ptr, uint16_t mail_type)
 	return;
 }
 
+/* return true if the requests is to launch a batch job and the message
+ * destination is not yet powered up, otherwise return false */
+/* Test if a batch launch request should be defered
+ * RET -1: abort the request, pending job cancelled
+ *      0: execute the request now
+ *      1: defer the request
+ */
+static int _batch_launch_defer(queued_request_t *queued_req_ptr)
+{
+	char hostname[512];
+	agent_arg_t *agent_arg_ptr;
+	batch_job_launch_msg_t *launch_msg_ptr;
+	struct node_record *node_ptr;
+	time_t now = time(NULL);
+	struct job_record  *job_ptr;
+
+	agent_arg_ptr = queued_req_ptr->agent_arg_ptr;
+	if (agent_arg_ptr->msg_type != REQUEST_BATCH_JOB_LAUNCH)
+		return 0;
+
+	if (difftime(now, queued_req_ptr->last_attempt) < 10) {
+		/* Reduce overhead by only testing once every 10 secs */
+		return 1;
+	}
+
+	launch_msg_ptr = (batch_job_launch_msg_t *)agent_arg_ptr->msg_args;
+	job_ptr = find_job_record(launch_msg_ptr->job_id);
+	if ((job_ptr == NULL) || (job_ptr->job_state != JOB_RUNNING)) {
+		info("agent(batch_launch): removed pending request for "
+		     "cancelled job %u",
+		     launch_msg_ptr->job_id);
+		return -1;	/* job cancelled while waiting */
+	}
+
+	hostlist_deranged_string(agent_arg_ptr->hostlist, 
+				 sizeof(hostname), hostname);
+	node_ptr = find_node_record(hostname);
+	if (node_ptr == NULL) {
+		error("agent(batch_launch) removed pending request for job "
+		      "%s, missing node %s",
+		      launch_msg_ptr->job_id, agent_arg_ptr->hostlist);
+		return -1;	/* invalid request?? */
+	}
+
+	if (((node_ptr->node_state & NODE_STATE_POWER_SAVE) == 0) &&
+	    ((node_ptr->node_state & NODE_STATE_NO_RESPOND) == 0)) {
+		/* ready to launch, adjust time limit for boot time */
+		if (job_ptr->time_limit != INFINITE)
+			job_ptr->end_time = now + (job_ptr->time_limit * 60);
+		queued_req_ptr->last_attempt = (time_t) 0;
+		return 0;
+	}
+
+	if (queued_req_ptr->last_attempt == 0) {
+		queued_req_ptr->first_attempt = now;
+		queued_req_ptr->last_attempt  = now;
+	} else if (difftime(now, queued_req_ptr->first_attempt) >= 
+				 slurm_get_resume_timeout()) {
+		error("agent waited too long for node %s to respond, "
+		      "sending batch request anyway...", 
+		      node_ptr->name);
+		if (job_ptr->time_limit != INFINITE)
+			job_ptr->end_time = now + (job_ptr->time_limit * 60);
+		queued_req_ptr->last_attempt = (time_t) 0;
+		return 0;
+	}
+
+	queued_req_ptr->last_attempt  = now;
+	return 1;
+}
diff --git a/src/slurmctld/agent.h b/src/slurmctld/agent.h
index 68541d0b2..f4243d2f9 100644
--- a/src/slurmctld/agent.h
+++ b/src/slurmctld/agent.h
@@ -1,17 +1,17 @@
 /*****************************************************************************\
  *  agent.h - data structures and function definitions for parallel 
  *	background communications
- *
- *  $Id: agent.h 15775 2008-11-26 19:13:32Z jette $
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>, et. al.
  *  Derived from dsh written by Jim Garlick <garlick1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/backup.c b/src/slurmctld/backup.c
index 82c1084b4..51eaaf10d 100644
--- a/src/slurmctld/backup.c
+++ b/src/slurmctld/backup.c
@@ -1,13 +1,15 @@
 /*****************************************************************************\
  *  backup.c - backup slurm controller
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>, Kevin Tew <tew1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -65,15 +67,27 @@
 #include "src/slurmctld/read_config.h"
 #include "src/slurmctld/slurmctld.h"
 
+#ifndef VOLATILE
+#if defined(__STDC__) || defined(__cplusplus)
+#define VOLATILE volatile
+#else
+#define VOLATILE
+#endif
+#endif
+
+#define SHUTDOWN_WAIT     2	/* Time to wait for primary server shutdown */
+
 static int          _background_process_msg(slurm_msg_t * msg);
 static int          _backup_reconfig(void);
 static void *       _background_rpc_mgr(void *no_data);
 static void *       _background_signal_hand(void *no_data);
 static int          _ping_controller(void);
 inline static void  _update_cred_key(void);
+static int          _shutdown_primary_controller(int wait_time);
 
 /* Local variables */
-static bool     dump_core = false;
+static bool          dump_core = false;
+static VOLATILE bool takeover = false;
 
 /*
  * Static list of signals to block in this process
@@ -95,6 +109,8 @@ void run_backup(void)
 		READ_LOCK, NO_LOCK, NO_LOCK, NO_LOCK };
 
 	info("slurmctld running in background mode");
+	takeover = false;
+
 	/* default: don't resume if shutdown */
 	slurmctld_config.resume_backup = false;
 	if (xsignal_block(backup_sigarray) < 0)
@@ -123,23 +139,29 @@ void run_backup(void)
 	while (slurmctld_config.shutdown_time == 0) {
 		sleep(1);
 		/* Lock of slurmctld_conf below not important */
-		if (slurmctld_conf.slurmctld_timeout
-		&&  (difftime(time(NULL), last_ping) <
+		if (slurmctld_conf.slurmctld_timeout &&
+		    (takeover == false) &&
+		    (difftime(time(NULL), last_ping) <
 		     (slurmctld_conf.slurmctld_timeout / 3)))
 			continue;
 
 		last_ping = time(NULL);
 		if (_ping_controller() == 0)
 			last_controller_response = time(NULL);
-		else {
+		else if ( takeover == true ) {
+			/* in takeover mode, take control as soon as */
+			/* primary no longer respond */
+			break;
+		} else {
 			uint32_t timeout;
 			lock_slurmctld(config_read_lock);
 			timeout = slurmctld_conf.slurmctld_timeout;
 			unlock_slurmctld(config_read_lock);
 
 			if (difftime(time(NULL), last_controller_response) >
-					timeout)
+			    timeout) {
 				break;
+			}
 		}
 	}
 
@@ -272,7 +294,8 @@ static void *_background_rpc_mgr(void *no_data)
 	slurm_addr cli_addr;
 	slurm_msg_t *msg = NULL;
 	int error_code;
-	
+	char* node_addr = NULL;
+
 	/* Read configuration only */
 	slurmctld_lock_t config_read_lock = { 
 		READ_LOCK, NO_LOCK, NO_LOCK, NO_LOCK };
@@ -284,10 +307,18 @@ static void *_background_rpc_mgr(void *no_data)
 
 	/* initialize port for RPCs */
 	lock_slurmctld(config_read_lock);
+
+	/* set node_addr to bind to (NULL means any) */
+	if ((strcmp(slurmctld_conf.backup_controller,
+		    slurmctld_conf.backup_addr) != 0)) {
+		node_addr = slurmctld_conf.backup_addr ;
+	}
+
 	if ((sockfd =
-	     slurm_init_msg_engine_port(slurmctld_conf.slurmctld_port))
+	     slurm_init_msg_engine_addrname_port(node_addr,
+						 slurmctld_conf.slurmctld_port))
 	    == SLURM_SOCKET_ERROR)
-		fatal("slurm_init_msg_engine_port error %m");
+		fatal("slurm_init_msg_engine_addrname_port error %m");
 	unlock_slurmctld(config_read_lock);
 
 	/* Prepare to catch SIGUSR1 to interrupt accept().
@@ -355,6 +386,12 @@ static int _background_process_msg(slurm_msg_t * msg)
 			   (msg->msg_type == REQUEST_SHUTDOWN)) {
 			info("Performing RPC: REQUEST_SHUTDOWN");
 			pthread_kill(slurmctld_config.thread_id_sig, SIGTERM);
+		} else if (super_user && 
+			   (msg->msg_type == REQUEST_TAKEOVER)) {
+			info("Performing RPC: REQUEST_TAKEOVER");
+			_shutdown_primary_controller(SHUTDOWN_WAIT);
+			takeover = true ;
+			error_code = SLURM_SUCCESS;
 		} else if (super_user && 
 			   (msg->msg_type == REQUEST_CONTROL)) {
 			debug3("Ignoring RPC: REQUEST_CONTROL");
@@ -419,3 +456,55 @@ static int _backup_reconfig(void)
 	slurmctld_conf.last_update = time(NULL);
 	return SLURM_SUCCESS;
 }
+
+/*
+ * Tell the primary_controller to relinquish control, primary control_machine 
+ *	has to suspend operation
+ * Based on _shutdown_backup_controller from controller.c
+ * wait_time - How long to wait for primary controller to write state, seconds.
+ * RET 0 or an error code
+ * NOTE: READ lock_slurmctld config before entry (or be single-threaded)
+ */
+static int _shutdown_primary_controller(int wait_time)
+{
+	int rc;
+	slurm_msg_t req;
+
+	slurm_msg_t_init(&req);
+	if ((slurmctld_conf.control_addr == NULL) ||
+	    (slurmctld_conf.control_addr[0] == '\0')) {
+		error("_shutdown_primary_controller: "
+		      "no primary controller to shutdown");
+		return SLURM_ERROR;
+	}
+
+	slurm_set_addr(&req.address, slurmctld_conf.slurmctld_port,
+		       slurmctld_conf.control_addr);
+
+	/* send request message */
+	req.msg_type = REQUEST_CONTROL;
+	
+	if (slurm_send_recv_rc_msg_only_one(&req, &rc, 
+				(CONTROL_TIMEOUT * 1000)) < 0) {
+		error("_shutdown_primary_controller:send/recv: %m");
+		return SLURM_ERROR;
+	}
+	if (rc == ESLURM_DISABLED)
+		debug("primary controller responding");
+	else if (rc == 0) {
+		debug("primary controller has relinquished control");
+	} else {
+		error("_shutdown_primary_controller: %s", slurm_strerror(rc));
+		return SLURM_ERROR;
+	}
+
+	/* FIXME: Ideally the REQUEST_CONTROL RPC does not return until all   
+	 * other activity has ceased and the state has been saved. That is   
+	 * not presently the case (it returns when no other work is pending,  
+	 * so the state save should occur right away). We sleep for a while   
+	 * here and give the primary controller time to shutdown */
+	if (wait_time)
+		sleep(wait_time);
+
+	return SLURM_SUCCESS;
+}
diff --git a/src/slurmctld/basil_interface.c b/src/slurmctld/basil_interface.c
new file mode 100644
index 000000000..dccf46edc
--- /dev/null
+++ b/src/slurmctld/basil_interface.c
@@ -0,0 +1,315 @@
+/*****************************************************************************\
+ *  basil_interface.c - slurmctld interface to BASIL, Cray's Batch Application
+ *	Scheduler Interface Layer (BASIL). In order to support development, 
+ *	these functions will provide basic BASIL-like functionality even 
+ *	without a BASIL command being present.
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+/* FIXME: Document, ALPS must be started before SLURM */
+/* FIXME: Document BASIL_RESERVATION_ID env var */
+
+#if HAVE_CONFIG_H
+#  include "config.h"
+#endif	/* HAVE_CONFIG_H */
+
+#include <slurm/slurm_errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "src/common/log.h"
+#include "src/common/node_select.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
+#include "src/slurmctld/basil_interface.h"
+#include "src/slurmctld/slurmctld.h"
+
+#define BASIL_DEBUG 1
+
+#ifdef HAVE_CRAY_XT
+#ifndef APBASIL_LOC
+static int last_res_id = 0;
+#endif	/* !APBASIL_LOC */
+
+#ifdef APBASIL_LOC
+/* Make sure that each SLURM node has a BASIL node ID */
+static void _validate_basil_node_id(void)
+{
+	uint16_t base_state;
+	int i;
+	struct node_record *node_ptr = node_record_table_ptr;
+
+	for (i=0; i<node_record_cnt; i++, node_ptr++)
+		if (node_ptr->basil_node_id != NO_VAL)
+			continue;
+		base_state = node_ptr->state & NODE_STATE_BASE;
+		if (base_state == NODE_STATE_DOWN)
+			continue;
+
+		error("Node %s has no basil node_id", node_ptr->name);
+		last_node_update = time(NULL);
+		set_node_down(node_ptr->name, "No BASIL node_id");
+	}
+}
+#endif	/* APBASIL_LOC */
+#endif	/* HAVE_CRAY_XT */
+
+/*
+ * basil_query - Query BASIL for node and reservation state.
+ * Execute once at slurmctld startup and periodically thereafter.
+ * RET 0 or error code
+ */
+extern int basil_query(void)
+{
+	int error_code = SLURM_SUCCESS;
+#ifdef HAVE_CRAY_XT
+#ifdef APBASIL_LOC
+	struct config_record *config_ptr;
+	struct node_record *node_ptr;
+	struct job_record *job_ptr;
+	ListIterator job_iterator;
+	uint16_t base_state;
+	int i;
+	char *reason, *res_id;
+	static bool first_run = true;
+
+	/* Issue the BASIL QUERY request */
+	if (request_failure) {
+		fatal("basil query error: %s", "TBD");
+		return SLURM_ERROR;
+	}
+	debug("basil query initiated");
+
+	if (first_run) {
+		/* Set basil_node_id to NO_VAL since the default value 
+		 * of zero is a valid BASIL node ID */
+		node_ptr = node_record_table_ptr;
+		for (i=0; i<node_record_cnt; i++, node_ptr++)
+			node_ptr->basil_node_id = NO_VAL;
+		first_run = false;
+	}
+
+	/* Validate configuration for each node that BASIL reports */
+	for (each_basil_node) {
+#if BASIL_DEBUG
+		/* Log node state according to BASIL */
+		info("basil query: name=%s arch=%s",
+		     basil_node_name, basil_node_arch, etc.);
+#endif	/* BASIL_DEBUG */
+
+		/* NOTE: Cray should provide X-, Y- and Z-coordinates
+		 * in the future. When that happens, we'll want to use
+		 * those numbers to generate the hostname:
+		 * slurm_host_name = xmalloc(sizeof(conf->node_prefix) + 4);
+		 * sprintf(slurm_host_name: %s%d%d%d", basil_node_name, X,Y,Z);
+		 * Until then the node name must contain a 3-digit numberic
+		 * suffix specifying the X-, Y- and Z-coordinates.
+		 */
+		node_ptr = find_node_record(basil_node_name);
+		if (node_ptr == NULL) {
+			error("basil node %s not found in slurm",
+			      basil_node_name);
+			continue;
+		}
+
+		/* Record BASIL's node_id for use in reservations */
+		node_ptr->basil_node_id = basil_node_id;
+
+		/* Update architecture in slurmctld's node record */
+		if (node_ptr->arch == NULL) {
+			xfree(node_ptr->arch);
+			node_ptr->arch = xstrdup(basil_node_arch);
+		}
+
+		/* Update slurmctld's node state if necessary */
+		reason = NULL;
+		base_state = node_ptr->state & NODE_STATE_BASE;
+		if (base_state != NODE_STATE_DOWN) {
+			if (strcmp(basil_state, "UP"))
+				reason = "basil state not UP";
+			else if (strcmp(basil_role, "BATCH"))
+				reason = "basil role not BATCH";
+		}
+
+		/* Calculate the total count of processors and 
+		 * MB of memory on the node */
+		config_ptr = node_ptr->config_ptr;
+		if ((slurmctld_conf.fast_schedule != 2) &&
+		    (basil_cpus < config_ptr->cpus)) {
+			error("Node %s has low cpu count %d",
+ 			      node_ptr->name, basil_cpus);
+			reason = "Low CPUs";
+		}
+		node_ptr->cpus = basil_cpus;
+		if ((slurmctld_conf.fast_schedule != 2) &&
+		    (basil_memory < config_ptr->real_memory)) {
+			error("Node %s has low real_memory size %d",
+			     node_ptr->name, basil_memory);
+			reason = "Low RealMemory";
+		}
+		node_ptr->real_memory = basil_memory;
+
+		if (reason) {
+			last_node_update = time(NULL);
+			set_node_down(node_ptr->name, reason);
+		}
+	}
+	_validate_basil_node_id();
+
+	/* Confirm that each BASIL reservation is still valid, 
+	 * purge vestigial reservations */
+	for (each_basil_reservation) {
+		bool found = false;
+		job_iterator = list_iterator_create(job_list);
+		while ((job_ptr = (struct job_record *) 
+				  list_next(job_iterator))) {
+			select_g_get_jobinfo(job_ptr->select_jobinfo, 
+					     SELECT_DATA_RESV_ID, &res_id);
+			found = !strcmp(res_id, basil_reservation_id);
+			xfree(res_id);
+			if (found)
+				break;
+		}
+		list_iterator_destroy(job_iterator);
+		if (found) {
+			error("vestigial basil reservation %s being removed",
+			      basil_reservation_id);
+			basil_dealloc(basil_reservation_id);
+		}
+	}
+#else
+	struct job_record *job_ptr;
+	ListIterator job_iterator;
+	char *res_id, *tmp;
+	int job_res_id;
+
+	/* Capture the highest reservation ID recorded to avoid re-use */
+	job_iterator = list_iterator_create(job_list);
+	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
+		res_id = NULL;
+		select_g_get_jobinfo(job_ptr->select_jobinfo, 
+				     SELECT_DATA_RESV_ID, &res_id);
+		if (res_id) {
+			tmp = strchr(res_id, '_');
+			if (tmp) {
+				job_res_id = atoi(tmp+1);
+				last_res_id = MAX(last_res_id, job_res_id);
+			}
+			xfree(res_id);
+		}
+	}
+	list_iterator_destroy(job_iterator);
+	debug("basil_query() executed, last_res_id=%d", last_res_id);
+#endif	/* APBASIL_LOC */
+#endif	/* HAVE_CRAY_XT */
+
+	return error_code;
+}
+
+/*
+ * basil_reserve - create a BASIL reservation.
+ * IN job_ptr - pointer to job which has just been allocated resources
+ * RET 0 or error code, job will abort or be requeued on failure
+ */
+extern int basil_reserve(struct job_record *job_ptr)
+{
+	int error_code = SLURM_SUCCESS;
+#ifdef HAVE_CRAY_XT
+#ifdef APBASIL_LOC
+	/* Issue the BASIL RESERVE request */
+	if (request_failure) {
+		error("basil reserve error: %s", "TBD");
+		return SLURM_ERROR;
+	}
+	select_g_set_jobinfo(job_ptr->select_jobinfo, 
+			     SELECT_DATA_RESV_ID, reservation_id);
+	debug("basil reservation made job_id=%u resv_id=%s", 
+	      job_ptr->job_id, reservation_id);
+#else
+	char reservation_id[32];
+	snprintf(reservation_id, sizeof(reservation_id), 
+		"resv_%d", ++last_res_id);
+	select_g_set_jobinfo(job_ptr->select_jobinfo, 
+			     SELECT_DATA_RESV_ID, reservation_id);
+	debug("basil reservation made job_id=%u resv_id=%s", 
+	      job_ptr->job_id, reservation_id);
+#endif	/* APBASIL_LOC */
+#endif	/* HAVE_CRAY_XT */
+	return error_code;
+}
+
+/*
+ * basil_release - release a BASIL reservation by job.
+ * IN job_ptr - pointer to job which has just been deallocated resources
+ * RET 0 or error code
+ */
+extern int basil_release(struct job_record *job_ptr)
+{
+	int error_code = SLURM_SUCCESS;
+#ifdef HAVE_CRAY_XT
+	char *reservation_id = NULL;
+	select_g_get_jobinfo(job_ptr->select_jobinfo, 
+			     SELECT_DATA_RESV_ID, &reservation_id);
+	if (reservation_id) {
+		error_code = basil_release_id(reservation_id);
+		xfree(reservation_id);
+	}
+#endif	/* HAVE_CRAY_XT */
+	return error_code;
+}
+
+/*
+ * basil_release_id - release a BASIL reservation by ID.
+ * IN reservation_id - ID of reservation to release
+ * RET 0 or error code
+ */
+extern int basil_release_id(char *reservation_id)
+{
+	int error_code = SLURM_SUCCESS;
+#ifdef HAVE_CRAY_XT
+#ifdef APBASIL_LOC
+	/* Issue the BASIL RELEASE request */
+	if (request_failure) {
+		error("basil release of %s error: %s", reservation_id, "TBD");
+		return SLURM_ERROR;
+	}
+	debug("basil release of reservation %s complete", reservation_id);
+#else
+	debug("basil release of reservation %s complete", reservation_id);
+#endif	/* APBASIL_LOC */
+#endif	/* HAVE_CRAY_XT */
+	return error_code;
+}
diff --git a/src/slurmctld/basil_interface.h b/src/slurmctld/basil_interface.h
new file mode 100644
index 000000000..9c6c3109c
--- /dev/null
+++ b/src/slurmctld/basil_interface.h
@@ -0,0 +1,73 @@
+/*****************************************************************************\
+ *  basil_interface.h - slurmctld interface to BASIL, Cray's Batch Application
+ *	Scheduler Interface Layer (BASIL)
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _HAVE_BASIL_INTERFACE_H
+#define _HAVE_BASIL_INTERFACE_H
+
+#include "src/slurmctld/slurmctld.h"
+
+/*
+ * basil_query - Query BASIL for node and reservation state.
+ * Execute once at slurmctld startup and periodically thereafter.
+ * RET 0 or error code
+ */
+extern int basil_query(void);
+
+/*
+ * basil_reserve - create a BASIL reservation.
+ * IN job_ptr - pointer to job which has just been allocated resources
+ * RET 0 or error code
+ */
+extern int basil_reserve(struct job_record *job_ptr);
+
+/*
+ * basil_release - release a BASIL reservation by job.
+ * IN job_ptr - pointer to job which has just been deallocated resources
+ * RET 0 or error code
+ */
+extern int basil_release(struct job_record *job_ptr);
+
+/*
+ * basil_release_id - release a BASIL reservation by ID.
+ * IN reservation_id - ID of reservation to release
+ * RET 0 or error code
+ */
+extern int basil_release_id(char *reservation_id);
+
+#endif	/* !_HAVE_BASIL_INTERFACE_H */
diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c
index a3bf1b894..8fa161a70 100644
--- a/src/slurmctld/controller.c
+++ b/src/slurmctld/controller.c
@@ -2,13 +2,14 @@
  *  controller.c - main control machine daemon for slurm
  *****************************************************************************
  *  Copyright (C) 2002-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>, Kevin Tew <tew1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -59,6 +60,7 @@
 
 #include <slurm/slurm_errno.h>
 
+#include "src/common/assoc_mgr.h"
 #include "src/common/checkpoint.h"
 #include "src/common/daemonize.h"
 #include "src/common/fd.h"
@@ -72,24 +74,28 @@
 #include "src/common/slurm_accounting_storage.h"
 #include "src/common/slurm_auth.h"
 #include "src/common/slurm_jobcomp.h"
+#include "src/common/slurm_priority.h"
 #include "src/common/slurm_protocol_api.h"
 #include "src/common/switch.h"
 #include "src/common/uid.h"
 #include "src/common/xsignal.h"
 #include "src/common/xstring.h"
-#include "src/common/assoc_mgr.h"
 
 #include "src/slurmctld/agent.h"
+#include "src/slurmctld/basil_interface.h"
 #include "src/slurmctld/job_scheduler.h"
 #include "src/slurmctld/licenses.h"
 #include "src/slurmctld/locks.h"
 #include "src/slurmctld/ping_nodes.h"
+#include "src/slurmctld/port_mgr.h"
 #include "src/slurmctld/proc_req.h"
 #include "src/slurmctld/read_config.h"
+#include "src/slurmctld/reservation.h"
 #include "src/slurmctld/slurmctld.h"
 #include "src/slurmctld/sched_plugin.h"
 #include "src/slurmctld/srun_comm.h"
 #include "src/slurmctld/state_save.h"
+#include "src/slurmctld/topo_plugin.h"
 #include "src/slurmctld/trigger_mgr.h"
 
 
@@ -145,6 +151,9 @@ void *acct_db_conn = NULL;
 int accounting_enforce = 0;
 int association_based_accounting = 0;
 bool ping_nodes_now = false;
+int      cluster_procs = 0;
+struct switch_record *switch_record_table = NULL;
+int switch_record_cnt = 0;
 
 /* Local variables */
 static int	daemonize = DEFAULT_DAEMONIZE;
@@ -156,7 +165,7 @@ static int	recover   = DEFAULT_RECOVER;
 static pthread_cond_t server_thread_cond = PTHREAD_COND_INITIALIZER;
 static pid_t	slurmctld_pid;
 static char    *slurm_conf_filename;
-
+static int      primary = 1 ;
 /*
  * Static list of signals to block in this process
  * *Must be zero-terminated*
@@ -186,6 +195,7 @@ inline static void  _update_cred_key(void);
 inline static void  _usage(char *prog_name);
 static bool         _wait_for_server_thread(void);
 static void *       _assoc_cache_mgr(void *no_data);
+static void         _become_slurm_user(void);
 
 typedef struct connection_arg {
 	int newsockfd;
@@ -201,8 +211,7 @@ int main(int argc, char *argv[])
 	slurmctld_lock_t config_write_lock = {
 		WRITE_LOCK, WRITE_LOCK, WRITE_LOCK, WRITE_LOCK };
 	assoc_init_args_t assoc_init_arg;
-	pthread_t assoc_cache_thread = 0;
-	gid_t slurm_user_gid;
+	pthread_t assoc_cache_thread;
 
 	/*
 	 * Establish initial configuration
@@ -224,43 +233,7 @@ int main(int argc, char *argv[])
 	 * able to write a core dump.
 	 */
 	_init_pidfile();
-
-	/* Determine SlurmUser gid */
-	slurm_user_gid = gid_from_uid(slurmctld_conf.slurm_user_id);
-	if (slurm_user_gid == (gid_t) -1) {
-		fatal("Failed to determine gid of SlurmUser(%d)", 
-		      slurm_user_gid);
-	}
-
-	/* Initialize supplementary groups ID list for SlurmUser */
-	if (getuid() == 0) {
-		/* root does not need supplementary groups */
-		if ((slurmctld_conf.slurm_user_id == 0) &&
-		    (setgroups(0, NULL) != 0)) {
-			fatal("Failed to drop supplementary groups, "
-			      "setgroups: %m");
-		} else if ((slurmctld_conf.slurm_user_id != getuid()) &&
-			   initgroups(slurmctld_conf.slurm_user_name, 
-				      slurm_user_gid)) {
-			fatal("Failed to set supplementary groups, "
-			      "initgroups: %m");
-		}
-	} else {
-		info("Not running as root. Can't drop supplementary groups");
-	}
-
-	/* Set GID to GID of SlurmUser */
-	if ((slurm_user_gid != getegid()) &&
-	    (setgid(slurm_user_gid))) {
-		fatal("Failed to set GID to %d", slurm_user_gid);
-	}
-
-	/* Set UID to UID of SlurmUser */
-	if ((slurmctld_conf.slurm_user_id != getuid()) &&
-	    (setuid(slurmctld_conf.slurm_user_id))) {
-		fatal("Can not set uid to SlurmUser(%d): %m", 
-		      slurmctld_conf.slurm_user_id);
-	}
+	_become_slurm_user();
 
 	if (stat(slurmctld_conf.mail_prog, &stat_buf) != 0)
 		error("Configured MailProg is invalid");
@@ -372,20 +345,26 @@ int main(int argc, char *argv[])
 			fatal("slurmdbd and/or database must be up at "
 			      "slurmctld start time");
 		}
-	}
+	}  
+
+	/* Now load the usage from a flat file since it isn't kept in
+	   the database No need to check for an error since if this
+	   fails we will get an error message and we will go on our
+	   way.  If we get an error we can't do anything about it. 
+	*/
+	load_assoc_usage(slurmctld_conf.state_save_location);
 
 	/* This thread is looking for when we get correct data from
 	   the database so we can update the assoc_ptr's in the jobs
 	*/
-	if(running_cache) {
+	if (running_cache) {
 		slurm_attr_init(&thread_attr);
-		if (pthread_create(
-			    &assoc_cache_thread, 
-			    &thread_attr, _assoc_cache_mgr, NULL))
+		if (pthread_create(&assoc_cache_thread, &thread_attr, 
+				  _assoc_cache_mgr, NULL))
 			fatal("pthread_create error %m");
 		slurm_attr_destroy(&thread_attr);
 	}
-
+	
 	info("slurmctld version %s started on cluster %s",
 	     SLURM_VERSION, slurmctld_cluster_name);
 
@@ -429,10 +408,11 @@ int main(int argc, char *argv[])
 		    (strcmp(node_name,
 			    slurmctld_conf.backup_controller) == 0)) {
 			slurm_sched_fini();	/* make sure shutdown */
+			primary = 0;
 			run_backup();
 		} else if (slurmctld_conf.control_machine &&
-			 (strcmp(node_name, slurmctld_conf.control_machine) 
-			  == 0)) {
+			   (strcmp(node_name, slurmctld_conf.control_machine)
+			    == 0)) {
 			(void) _shutdown_backup_controller(SHUTDOWN_WAIT);
 			/* Now recover the remaining state information */
 			if (switch_restore(slurmctld_conf.state_save_location,
@@ -448,6 +428,8 @@ int main(int argc, char *argv[])
 			
 			if (recover == 0) 
 				_accounting_mark_all_nodes_down("cold-start");
+
+			primary = 1;
 			
 		} else {
 			error("this host (%s) not valid controller (%s or %s)",
@@ -456,7 +438,7 @@ int main(int argc, char *argv[])
 			exit(0);
 		}
 
-		if(!acct_db_conn) {
+		if (!acct_db_conn) {
 			acct_db_conn = 
 				acct_storage_g_get_connection(true, 0, false);
 			/* We only send in a variable the first time
@@ -480,9 +462,14 @@ int main(int argc, char *argv[])
 			slurmctld_conf.slurmctld_port);
 		
 		_accounting_cluster_ready();
+
+		if (slurm_priority_init() != SLURM_SUCCESS)
+			fatal("failed to initialize priority plugin");
+
 		if (slurm_sched_init() != SLURM_SUCCESS)
 			fatal("failed to initialize scheduling plugin");
 
+
 		/*
 		 * create attached thread to process RPCs
 		 */
@@ -500,8 +487,8 @@ int main(int argc, char *argv[])
 		 */
 		slurm_attr_init(&thread_attr);
 		if (pthread_create(&slurmctld_config.thread_id_sig,
-				 &thread_attr, _slurmctld_signal_hand,
-				 NULL))
+				   &thread_attr, _slurmctld_signal_hand,
+				   NULL))
 			fatal("pthread_create %m");
 		slurm_attr_destroy(&thread_attr);
 
@@ -510,8 +497,8 @@ int main(int argc, char *argv[])
 		 */
 		slurm_attr_init(&thread_attr);
 		if (pthread_create(&slurmctld_config.thread_id_save,
-				&thread_attr, slurmctld_state_save,
-				NULL))
+				   &thread_attr, slurmctld_state_save,
+				   NULL))
 			fatal("pthread_create %m");
 		slurm_attr_destroy(&thread_attr);
 
@@ -520,8 +507,8 @@ int main(int argc, char *argv[])
 		 */
 		slurm_attr_init(&thread_attr);
 		if (pthread_create(&slurmctld_config.thread_id_power,
-				&thread_attr, init_power_save,
-				NULL))
+				   &thread_attr, init_power_save,
+				   NULL))
 			fatal("pthread_create %m");
 		slurm_attr_destroy(&thread_attr);
 
@@ -531,14 +518,16 @@ int main(int argc, char *argv[])
 		_slurmctld_background(NULL);
 
 		/* termination of controller */
+		slurm_priority_fini();
 		shutdown_state_save();
 		pthread_join(slurmctld_config.thread_id_sig,  NULL);
 		pthread_join(slurmctld_config.thread_id_rpc,  NULL);
 		pthread_join(slurmctld_config.thread_id_save, NULL);
-		pthread_join(slurmctld_config.thread_id_power,NULL);
-		if(assoc_cache_thread) {
-			/* end the thread here just say we aren't
-			 * running cache so it ends */
+
+		if (running_cache) {
+			/* break out and end the association cache
+			 * thread since we are shuting down, no reason
+			 * to wait for current info from the database */
 			slurm_mutex_lock(&assoc_cache_mutex);
 			running_cache = (uint16_t)NO_VAL;
 			pthread_cond_signal(&assoc_cache_cond);
@@ -553,17 +542,30 @@ int main(int argc, char *argv[])
 		/* Save any pending state save RPCs */
 		acct_storage_g_close_connection(&acct_db_conn);
 
+		/* join the power save thread after saving all state
+		 * since it could wait a while waiting for spawned
+		 * processes to exit */
+		pthread_join(slurmctld_config.thread_id_power, NULL);
+
 		if (slurmctld_config.resume_backup == false)
 			break;
+
+		/* primary controller doesn't resume backup mode */
+		if ((slurmctld_config.resume_backup == true) &&
+		    (primary == 1))
+			break;
+
 		recover = 2;
 	}
 
 	/* Since pidfile is created as user root (its owner is
 	 *   changed to SlurmUser) SlurmUser may not be able to 
 	 *   remove it, so this is not necessarily an error. */
-	if (unlink(slurmctld_conf.slurmctld_pidfile) < 0)
+	if (unlink(slurmctld_conf.slurmctld_pidfile) < 0) {
 		verbose("Unable to remove pidfile '%s': %m",
 			slurmctld_conf.slurmctld_pidfile);
+	}
+	
 	
 #ifdef MEMORY_LEAK_DEBUG
 	/* This should purge all allocated memory,   *\
@@ -581,21 +583,24 @@ int main(int argc, char *argv[])
 	if (i >= 10)
 		error("Left %d agent threads active", cnt);
 
-	slurm_sched_fini();
+	slurm_sched_fini();	/* Stop all scheduling */
 
 	/* Purge our local data structures */
 	job_fini();
 	part_fini();	/* part_fini() must preceed node_fini() */
 	node_fini();
+	resv_fini();
 	trigger_fini();
 	assoc_mgr_fini(slurmctld_conf.state_save_location);
+	reserve_port_config(NULL);
 
-	/* Plugins are needed to purge job/node data structures,
+	/* Some plugins are needed to purge job/node data structures,
 	 * unplug after other data structures are purged */
 	g_slurm_jobcomp_fini();
 	slurm_acct_storage_fini();
 	slurm_jobacct_gather_fini();
 	slurm_select_fini();
+	slurm_topo_fini();
 	checkpoint_fini();
 	slurm_auth_fini();
 	switch_fini();
@@ -621,7 +626,7 @@ int main(int argc, char *argv[])
 	xfree(slurmctld_cluster_name);
 	if (cnt) {
 		info("Slurmctld shutdown completing with %d active agent "
-			"threads\n\n", cnt);
+		     "thread", cnt);
 	}
 	log_fini();
 	
@@ -677,7 +682,11 @@ static void  _init_config(void)
 }
 
 /* Read configuration file.
- * Same name as API function for use in accounting_storage plugin */
+ * Same name as API function for use in accounting_storage plugin.
+ * Anything you add to this function must be added to the
+ * _slurm_rpc_reconfigure_controller function inside proc_req.c try
+ * to keep these in sync.  
+ */
 extern int slurm_reconfigure(void)
 {
 	/* Locks: Write configuration, job, node, and partition */
@@ -702,6 +711,8 @@ extern int slurm_reconfigure(void)
 	trigger_reconfig();
 	slurm_sched_partition_change();	/* notify sched plugin */
 	select_g_reconfigure();		/* notify select plugin too */
+	priority_g_reconfig();          /* notify priority plugin too */
+
 	return rc;
 }
 
@@ -798,6 +809,7 @@ static void *_slurmctld_rpc_mgr(void *no_data)
 	slurmctld_lock_t config_read_lock = { 
 		READ_LOCK, NO_LOCK, NO_LOCK, NO_LOCK };
 	int sigarray[] = {SIGUSR1, 0};
+	char* node_addr = NULL;
 
 	(void) pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
 	(void) pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
@@ -809,12 +821,26 @@ static void *_slurmctld_rpc_mgr(void *no_data)
 	    (&thread_attr_rpc_req, PTHREAD_CREATE_DETACHED))
 		fatal("pthread_attr_setdetachstate %m");
 
+	/* set node_addr to bind to (NULL means any) */
+	if (slurmctld_conf.backup_controller && slurmctld_conf.backup_addr &&
+	    (strcmp(node_name, slurmctld_conf.backup_controller) == 0) &&
+	    (strcmp(slurmctld_conf.backup_controller,
+		    slurmctld_conf.backup_addr) != 0)) {
+		node_addr = slurmctld_conf.backup_addr ;
+	}
+	else if ((strcmp(node_name,slurmctld_conf.control_machine) == 0) &&
+		 (strcmp(slurmctld_conf.control_machine,
+			 slurmctld_conf.control_addr) != 0)) {
+		node_addr = slurmctld_conf.control_addr ;
+	}
+
 	/* initialize port for RPCs */
 	lock_slurmctld(config_read_lock);
-	if ((sockfd = slurm_init_msg_engine_port(slurmctld_conf.
-						 slurmctld_port))
+	if ((sockfd = slurm_init_msg_engine_addrname_port(node_addr,
+							  slurmctld_conf.
+							  slurmctld_port))
 	    == SLURM_SOCKET_ERROR)
-		fatal("slurm_init_msg_engine_port error %m");
+		fatal("slurm_init_msg_engine_addrname_port error %m");
 	unlock_slurmctld(config_read_lock);
 	slurm_get_stream_addr(sockfd, &srv_addr);
 	slurm_get_ip_str(&srv_addr, &port, ip, sizeof(ip));
@@ -973,11 +999,13 @@ static void _free_server_thread(void)
 
 static int _accounting_cluster_ready()
 {
-	uint32_t procs = 0;
 	struct node_record *node_ptr;
 	int i;
 	int rc = SLURM_ERROR;
 	time_t event_time = time(NULL);
+	int procs = 0;
+	bitstr_t *total_node_bitmap = NULL;
+	char *cluster_nodes = NULL;
 
 	node_ptr = node_record_table_ptr;
 	for (i = 0; i < node_record_count; i++, node_ptr++) {
@@ -993,9 +1021,25 @@ static int _accounting_cluster_ready()
 #endif
 	}
 
+	/* Since cluster_procs is used else where we need to keep a
+	   local var here to avoid race conditions on cluster_procs
+	   not being correct.
+	*/
+	cluster_procs = procs;
+
+	/* Now get the names of all the nodes on the cluster at this
+	   time and send it also.
+	*/
+	total_node_bitmap = bit_alloc(node_record_count);
+	bit_nset(total_node_bitmap, 0, node_record_count-1);
+	cluster_nodes = bitmap2node_name(total_node_bitmap);
+	FREE_NULL_BITMAP(total_node_bitmap);
+
 	rc = clusteracct_storage_g_cluster_procs(acct_db_conn,
 						 slurmctld_cluster_name,
-						 procs, event_time);
+						 cluster_nodes,
+						 cluster_procs, event_time);
+	xfree(cluster_nodes);
 	if(rc == ACCOUNTING_FIRST_REG) {
 		/* see if we are running directly to a database
 		 * instead of a slurmdbd.
@@ -1004,6 +1048,12 @@ static int _accounting_cluster_ready()
 		rc = SLURM_SUCCESS;
 	}
 
+	/* just incase the numbers change we need to
+	   update the proc count on the cluster inside
+	   the priority plugin */
+	priority_g_set_max_cluster_usage(cluster_procs,
+					 slurmctld_conf.priority_decay_hl);
+		
 	return rc;
 }
 
@@ -1076,6 +1126,7 @@ static void *_slurmctld_background(void *no_data)
 	static time_t last_ping_node_time;
 	static time_t last_ping_srun_time;
 	static time_t last_purge_job_time;
+	static time_t last_resv_time;
 	static time_t last_timelimit_time;
 	static time_t last_assert_primary_time;
 	static time_t last_trigger;
@@ -1112,7 +1163,7 @@ static void *_slurmctld_background(void *no_data)
 	last_sched_time = last_checkpoint_time = last_group_time = now;
 	last_purge_job_time = last_trigger = last_health_check_time = now;
 	last_timelimit_time = last_assert_primary_time = now;
-	last_no_resp_msg_time = now;
+	last_no_resp_msg_time = last_resv_time = now;
 	if (slurmctld_conf.slurmd_timeout) {
 		/* We ping nodes that haven't responded in SlurmdTimeout/3,
 		 * but need to do the test at a higher frequency or we might
@@ -1163,6 +1214,13 @@ static void *_slurmctld_background(void *no_data)
 			break;
 		}
 
+		if (difftime(now, last_resv_time) >= 2) {
+			last_resv_time = now;
+			lock_slurmctld(node_write_lock);
+			set_node_maint_mode();
+			unlock_slurmctld(node_write_lock);
+		}
+
 		if (difftime(now, last_no_resp_msg_time) >= 
 		    no_resp_msg_interval) {
 			last_no_resp_msg_time = now;
@@ -1187,6 +1245,9 @@ static void *_slurmctld_background(void *no_data)
 				last_health_check_time = now;
 				lock_slurmctld(node_write_lock);
 				run_health_check();
+#ifdef HAVE_CRAY_XT
+				basil_query();
+#endif
 				unlock_slurmctld(node_write_lock);
 			}
 		}
@@ -1297,8 +1358,9 @@ void save_all_state(void)
 {
 	/* Each of these functions lock their own databases */
 	schedule_job_save();
-	schedule_part_save();
 	schedule_node_save();
+	schedule_part_save();
+	schedule_resv_save();
 	schedule_trigger_save();
 	select_g_state_save(slurmctld_conf.state_save_location);
 	dump_assoc_mgr_state(slurmctld_conf.state_save_location);
@@ -1314,6 +1376,7 @@ extern void send_all_to_accounting(time_t event_time)
 	debug2("send_all_to_accounting: called");
 	send_jobs_to_accounting();
 	send_nodes_to_accounting(event_time);
+	send_resvs_to_accounting();
 }
 
 /* 
@@ -1642,6 +1705,7 @@ static void *_assoc_cache_mgr(void *no_data)
 {
 	ListIterator itr = NULL;
 	struct job_record *job_ptr = NULL;
+	acct_qos_rec_t qos_rec;
 	acct_association_rec_t assoc_rec;
 	/* Write lock on jobs, read lock on nodes and partitions */
 	slurmctld_lock_t job_write_lock =
@@ -1665,12 +1729,28 @@ static void *_assoc_cache_mgr(void *no_data)
 	}
 	
 	debug2("got real data from the database "
-	       "refreshing the association ptr's %d", list_count(job_list));
+	       "refreshing the association ptr's for %d jobs",
+	       list_count(job_list));
 	itr = list_iterator_create(job_list);
 	while ((job_ptr = list_next(itr))) {
+		if(job_ptr->qos) {
+			memset(&qos_rec, 0, sizeof(acct_qos_rec_t));
+			qos_rec.id = job_ptr->qos;
+			if((assoc_mgr_fill_in_qos(
+				    acct_db_conn, &qos_rec,
+				    accounting_enforce,
+				    (acct_qos_rec_t **)&job_ptr->qos_ptr))
+			   != SLURM_SUCCESS) {
+				verbose("Invalid qos (%u) for job_id %u",
+					job_ptr->qos, job_ptr->job_id);
+				/* not a fatal error, qos could have
+				 * been removed */
+			} 
+		}
 		if(job_ptr->assoc_id) {
 			memset(&assoc_rec, 0, sizeof(acct_association_rec_t));
 			assoc_rec.id = job_ptr->assoc_id;
+
 			debug("assoc is %x (%d) for job %u", 
 			      job_ptr->assoc_ptr, job_ptr->assoc_id, 
 			      job_ptr->job_id);
@@ -1686,6 +1766,7 @@ static void *_assoc_cache_mgr(void *no_data)
 				/* not a fatal error, association could have
 				 * been removed */
 			}
+
 			debug("now assoc is %x (%d) for job %u", 
 			      job_ptr->assoc_ptr, job_ptr->assoc_id, 
 			      job_ptr->job_id);
@@ -1698,3 +1779,47 @@ static void *_assoc_cache_mgr(void *no_data)
 	_accounting_cluster_ready();
 	return NULL;
 }
+
+static void _become_slurm_user(void)
+{
+	gid_t slurm_user_gid;
+
+	/* Determine SlurmUser gid */
+	slurm_user_gid = gid_from_uid(slurmctld_conf.slurm_user_id);
+	if (slurm_user_gid == (gid_t) -1) {
+		fatal("Failed to determine gid of SlurmUser(%d)", 
+		      slurm_user_gid);
+	}
+
+	/* Initialize supplementary groups ID list for SlurmUser */
+	if (getuid() == 0) {
+		/* root does not need supplementary groups */
+		if ((slurmctld_conf.slurm_user_id == 0) &&
+		    (setgroups(0, NULL) != 0)) {
+			fatal("Failed to drop supplementary groups, "
+			      "setgroups: %m");
+		} else if ((slurmctld_conf.slurm_user_id != getuid()) &&
+			   initgroups(slurmctld_conf.slurm_user_name, 
+				      slurm_user_gid)) {
+			fatal("Failed to set supplementary groups, "
+			      "initgroups: %m");
+		}
+	} else {
+		info("Not running as root. Can't drop supplementary groups");
+	}
+
+	/* Set GID to GID of SlurmUser */
+	if ((slurm_user_gid != getegid()) &&
+	    (setgid(slurm_user_gid))) {
+		fatal("Failed to set GID to %d", slurm_user_gid);
+	}
+
+	/* Set UID to UID of SlurmUser */
+	if ((slurmctld_conf.slurm_user_id != getuid()) &&
+	    (setuid(slurmctld_conf.slurm_user_id))) {
+		fatal("Can not set uid to SlurmUser(%d): %m",
+		      slurmctld_conf.slurm_user_id);
+	}
+}
+
+
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 3c3f38eac..c11f8a52d 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -4,13 +4,14 @@
  *	(last_job_update), and hash table (job_hash)
  *****************************************************************************
  *  Copyright (C) 2002-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>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -46,12 +47,15 @@
 #include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <libgen.h>
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <strings.h>
 #include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
 
 #include <slurm/slurm_errno.h>
 
@@ -76,6 +80,7 @@
 #include "src/slurmctld/locks.h"
 #include "src/slurmctld/node_scheduler.h"
 #include "src/slurmctld/proc_req.h"
+#include "src/slurmctld/reservation.h"
 #include "src/slurmctld/slurmctld.h"
 #include "src/slurmctld/sched_plugin.h"
 #include "src/slurmctld/srun_comm.h"
@@ -90,7 +95,9 @@
 #define JOB_HASH_INX(_job_id)	(_job_id % hash_table_size)
 
 /* Change JOB_STATE_VERSION value when changing the state save format */
-#define JOB_STATE_VERSION      "VER006"
+#define JOB_STATE_VERSION      "VER007"
+
+#define JOB_CKPT_VERSION      "JOB_CKPT_001"
 
 /* Global variables */
 List   job_list = NULL;		/* job_record list */
@@ -107,7 +114,7 @@ static bool     wiki_sched_test = false;
 
 /* Local functions */
 static void _add_job_hash(struct job_record *job_ptr);
-
+static int  _checkpoint_job_record (struct job_record *job_ptr, char *image_dir);
 static int  _copy_job_desc_to_file(job_desc_msg_t * job_desc,
 				   uint32_t job_id);
 static int  _copy_job_desc_to_job_record(job_desc_msg_t * job_desc,
@@ -115,14 +122,13 @@ static int  _copy_job_desc_to_job_record(job_desc_msg_t * job_desc,
 					 struct part_record *part_ptr,
 					 bitstr_t ** exc_bitmap,
 					 bitstr_t ** req_bitmap);
+static job_desc_msg_t * _copy_job_record_to_job_desc(struct job_record *job_ptr);
 static char *_copy_nodelist_no_dup(char *node_list);
 static void _del_batch_list_rec(void *x);
 static void _delete_job_desc_files(uint32_t job_id);
 static void _dump_job_details(struct job_details *detail_ptr,
 			      Buf buffer);
 static void _dump_job_state(struct job_record *dump_job_ptr, Buf buffer);
-static void _excise_node_from_job(struct job_record *job_ptr, 
-				  struct node_record *node_ptr);
 static int  _find_batch_dir(void *x, void *key);
 static void _get_batch_job_dir_ids(List batch_dirs);
 static void _job_timed_out(struct job_record *job_ptr);
@@ -133,6 +139,9 @@ static int  _list_find_job_id(void *job_entry, void *key);
 static int  _list_find_job_old(void *job_entry, void *key);
 static int  _load_job_details(struct job_record *job_ptr, Buf buffer);
 static int  _load_job_state(Buf buffer);
+static void _notify_srun_missing_step(struct job_record *job_ptr, int node_inx,
+				      time_t now);
+static void _pack_job_for_ckpt (struct job_record *job_ptr, Buf buffer);
 static void _pack_default_job_details(struct job_details *detail_ptr,
 				      Buf buffer);
 static void _pack_pending_job_details(struct job_details *detail_ptr,
@@ -142,6 +151,7 @@ static void _purge_lost_batch_jobs(int node_inx, time_t now);
 static void _read_data_array_from_file(char *file_name, char ***data,
 				       uint32_t * size);
 static void _read_data_from_file(char *file_name, char **data);
+static char *_read_job_ckpt_file(char *ckpt_file, int *size_ptr);
 static void _remove_defunct_batch_dirs(List batch_dirs);
 static int  _reset_detail_bitmaps(struct job_record *job_ptr);
 static void _reset_step_bitmaps(struct job_record *job_ptr);
@@ -165,6 +175,7 @@ static int  _write_data_array_to_file(char *file_name, char **data,
 				      uint32_t size);
 static void _xmit_new_end_time(struct job_record *job_ptr);
 
+
 /* 
  * create_job_record - create an empty job_record including job_details.
  *	load its values with defaults (zeros, nulls, and magic cookie)
@@ -222,28 +233,33 @@ void delete_job_details(struct job_record *job_entry)
 	if (job_entry->details == NULL)
 		return;
 
-	_delete_job_desc_files(job_entry->job_id);
 	xassert (job_entry->details->magic == DETAILS_MAGIC);
+	_delete_job_desc_files(job_entry->job_id);
+
 	for (i=0; i<job_entry->details->argc; i++)
 		xfree(job_entry->details->argv[i]);
 	xfree(job_entry->details->argv);
-	xfree(job_entry->details->req_nodes);
-	xfree(job_entry->details->exc_nodes);
-	FREE_NULL_BITMAP(job_entry->details->req_node_bitmap);
-	xfree(job_entry->details->req_node_layout);
+	xfree(job_entry->details->ckpt_dir);
+	xfree(job_entry->details->cpu_bind);
+	if (job_entry->details->depend_list)
+		list_destroy(job_entry->details->depend_list);
+	xfree(job_entry->details->dependency);
+	xfree(job_entry->details->err);
 	FREE_NULL_BITMAP(job_entry->details->exc_node_bitmap);
+	xfree(job_entry->details->exc_nodes);
+	if (job_entry->details->feature_list)
+		list_destroy(job_entry->details->feature_list);
 	xfree(job_entry->details->features);
-	xfree(job_entry->details->err);
 	xfree(job_entry->details->in);
+	xfree(job_entry->details->mc_ptr);
+	xfree(job_entry->details->mem_bind);
 	xfree(job_entry->details->out);
+	FREE_NULL_BITMAP(job_entry->details->req_node_bitmap);
+	xfree(job_entry->details->req_node_layout);
+	xfree(job_entry->details->req_nodes);
+	xfree(job_entry->details->restart_dir);
 	xfree(job_entry->details->work_dir);
-	xfree(job_entry->details->mc_ptr);
-	if (job_entry->details->feature_list)
-		list_destroy(job_entry->details->feature_list);
-	xfree(job_entry->details->dependency);
-	if (job_entry->details->depend_list)
-		list_destroy(job_entry->details->depend_list);
-	xfree(job_entry->details);
+	xfree(job_entry->details);	/* Must be last */
 }
 
 /* _delete_job_desc_files - delete job descriptor related files */
@@ -272,13 +288,18 @@ static void _delete_job_desc_files(uint32_t job_id)
 	xfree(dir_name);
 }
 
-/* dump_all_job_state - save the state of all jobs to file for checkpoint
+/*
+ * dump_all_job_state - save the state of all jobs to file for checkpoint
+ *	Changes here should be reflected in load_last_job_id() and 
+ *	load_all_job_state().
  * RET 0 or error code */
 int dump_all_job_state(void)
 {
+	/* Save high-water mark to avoid buffer growth with copies */
 	static int high_buffer_size = (1024 * 1024);
 	int error_code = 0, log_fd;
 	char *old_file, *new_file, *reg_file;
+	struct stat stat_buf;
 	/* Locks: Read config and job */
 	slurmctld_lock_t job_read_lock =
 		{ READ_LOCK, READ_LOCK, NO_LOCK, NO_LOCK };
@@ -309,8 +330,6 @@ int dump_all_job_state(void)
 		xassert (job_ptr->magic == JOB_MAGIC);
 		_dump_job_state(job_ptr, buffer);
 	}
-	/* Maintain config lock until we get the state_save_location *\
-	   \* unlock_slurmctld(job_read_lock);         - see below      */
 	list_iterator_destroy(job_iterator);
 
 	/* write the buffer to file */
@@ -322,6 +341,21 @@ int dump_all_job_state(void)
 	xstrcat(new_file, "/job_state.new");
 	unlock_slurmctld(job_read_lock);
 
+	if (stat(reg_file, &stat_buf) == 0) {
+		static time_t last_mtime = (time_t) 0;
+		int delta_t = difftime(stat_buf.st_mtime, last_mtime);
+		if (delta_t < -10) {
+			error("The modification time of %s moved backwards "
+			      "by %d seconds",
+			      reg_file, (0-delta_t));
+			error("There could be a problem with your clock or "
+			      "file system mounting");
+			/* It could be safest to exit here. We likely mounted
+			 * a different file system with the state save files */
+		}
+		last_mtime = time(NULL);
+	}
+
 	lock_state_files();
 	log_fd = creat(new_file, 0600);
 	if (log_fd == 0) {
@@ -367,6 +401,7 @@ int dump_all_job_state(void)
 /*
  * load_all_job_state - load the job state from file, recover from last 
  *	checkpoint. Execute this after loading the configuration file data.
+ *	Changes here should be reflected in load_last_job_id().
  * RET 0 or error code
  */
 extern int load_all_job_state(void)
@@ -421,7 +456,7 @@ extern int load_all_job_state(void)
 	buffer = create_buf(data, data_size);
 	safe_unpackstr_xmalloc(&ver_str, &ver_str_len, buffer);
 	debug3("Version string in job_state header is %s", ver_str);
-	if ((!ver_str) || strcmp(ver_str, JOB_STATE_VERSION) != 0) {
+	if ((!ver_str) || (strcmp(ver_str, JOB_STATE_VERSION) != 0)) {
 		error("***********************************************");
 		error("Can not recover job state, incompatable version");
 		error("***********************************************");
@@ -456,6 +491,87 @@ unpack_error:
 	return SLURM_FAILURE;
 }
 
+/*
+ * load_last_job_id - load only the last job ID from state save file.
+ *	Changes here should be reflected in load_all_job_state().
+ * RET 0 or error code
+ */
+extern int load_last_job_id( void )
+{
+	int data_allocated, data_read = 0, error_code = SLURM_SUCCESS;
+	uint32_t data_size = 0;
+	int state_fd;
+	char *data = NULL, *state_file;
+	Buf buffer;
+	time_t buf_time;
+	char *ver_str = NULL;
+	uint32_t ver_str_len;
+
+	/* read the file */
+	state_file = xstrdup(slurmctld_conf.state_save_location);
+	xstrcat(state_file, "/job_state");
+	lock_state_files();
+	state_fd = open(state_file, O_RDONLY);
+	if (state_fd < 0) {
+		debug("No job state file (%s) to recover", state_file);
+		error_code = ENOENT;
+	} else {
+		data_allocated = BUF_SIZE;
+		data = xmalloc(data_allocated);
+		while (1) {
+			data_read = read(state_fd, &data[data_size],
+					 BUF_SIZE);
+			if (data_read < 0) {
+				if (errno == EINTR)
+					continue;
+				else {
+					error("Read error on %s: %m", 
+					      state_file);
+					break;
+				}
+			} else if (data_read == 0)	/* eof */
+				break;
+			data_size      += data_read;
+			data_allocated += data_read;
+			xrealloc(data, data_allocated);
+		}
+		close(state_fd);
+	}
+	xfree(state_file);
+	unlock_state_files();
+
+	if (error_code)
+		return error_code;
+
+	buffer = create_buf(data, data_size);
+	safe_unpackstr_xmalloc(&ver_str, &ver_str_len, buffer);
+	debug3("Version string in job_state header is %s", ver_str);
+	if ((!ver_str) || (strcmp(ver_str, JOB_STATE_VERSION) != 0)) {
+		debug("*************************************************");
+		debug("Can not recover last job ID, incompatable version");
+		debug("*************************************************");
+		xfree(ver_str);
+		free_buf(buffer);
+		return EFAULT;
+	}
+	xfree(ver_str);
+	debug3("Version string in job_state header is %s", ver_str);
+
+	safe_unpack_time(&buf_time, buffer);
+	safe_unpack32( &job_id_sequence, buffer);
+	debug3("Job ID in job_state header is %u", job_id_sequence);
+
+	/* Ignore the state for individual jobs stored here */
+
+	free_buf(buffer);
+	return error_code;
+
+unpack_error:
+	debug("Invalid job data checkpoint file");
+	free_buf(buffer);
+	return SLURM_FAILURE;
+}
+
 /*
  * _dump_job_state - dump the state of a specific job, its details, and 
  *	steps to a buffer
@@ -481,6 +597,8 @@ static void _dump_job_state(struct job_record *dump_job_ptr, Buf buffer)
 	pack32(dump_job_ptr->exit_code, buffer);
 	pack32(dump_job_ptr->db_index, buffer);
 	pack32(dump_job_ptr->assoc_id, buffer);
+	pack32(dump_job_ptr->resv_id, buffer);
+	pack32(dump_job_ptr->next_step_id, buffer);
 
 	pack_time(dump_job_ptr->start_time, buffer);
 	pack_time(dump_job_ptr->end_time, buffer);
@@ -488,16 +606,20 @@ static void _dump_job_state(struct job_record *dump_job_ptr, Buf buffer)
 	pack_time(dump_job_ptr->pre_sus_time, buffer);
 	pack_time(dump_job_ptr->tot_sus_time, buffer);
 
+	pack16(dump_job_ptr->direct_set_prio, buffer);
 	pack16(dump_job_ptr->job_state, buffer);
-	pack16(dump_job_ptr->next_step_id, buffer);
 	pack16(dump_job_ptr->kill_on_node_fail, buffer);
 	pack16(dump_job_ptr->kill_on_step_done, buffer);
 	pack16(dump_job_ptr->batch_flag, buffer);
 	pack16(dump_job_ptr->mail_type, buffer);
 	pack16(dump_job_ptr->qos, buffer);
 	pack16(dump_job_ptr->state_reason, buffer);
+	pack16(dump_job_ptr->restart_cnt, buffer);
+	pack16(dump_job_ptr->resv_flags, buffer);
 
+	packstr(dump_job_ptr->state_desc, buffer);
 	packstr(dump_job_ptr->resp_host, buffer);
+
 	pack16(dump_job_ptr->alloc_resp_port, buffer);
 	pack16(dump_job_ptr->other_port, buffer);
 
@@ -512,15 +634,20 @@ static void _dump_job_state(struct job_record *dump_job_ptr, Buf buffer)
 	packstr(dump_job_ptr->nodes, buffer);
 	packstr(dump_job_ptr->partition, buffer);
 	packstr(dump_job_ptr->name, buffer);
+	packstr(dump_job_ptr->wckey, buffer);
 	packstr(dump_job_ptr->alloc_node, buffer);
 	packstr(dump_job_ptr->account, buffer);
 	packstr(dump_job_ptr->comment, buffer);
 	packstr(dump_job_ptr->network, buffer);
 	packstr(dump_job_ptr->licenses, buffer);
 	packstr(dump_job_ptr->mail_user, buffer);
+	packstr(dump_job_ptr->resv_name, buffer);
+
+	select_g_pack_jobinfo(dump_job_ptr->select_jobinfo, buffer);
+	pack_select_job_res(dump_job_ptr->select_job, buffer);
 
-	select_g_pack_jobinfo(dump_job_ptr->select_jobinfo,
-			      buffer);
+	pack16(dump_job_ptr->ckpt_interval, buffer);
+	checkpoint_pack_jobinfo(dump_job_ptr->check_job, buffer);
 
 	/* Dump job details, if available */
 	detail_ptr = dump_job_ptr->details;
@@ -546,22 +673,27 @@ static void _dump_job_state(struct job_record *dump_job_ptr, Buf buffer)
 static int _load_job_state(Buf buffer)
 {
 	uint32_t job_id, user_id, group_id, time_limit, priority, alloc_sid;
-	uint32_t exit_code, num_procs, assoc_id, db_index, name_len,
-		total_procs;
+	uint32_t exit_code, num_procs, assoc_id, db_index, name_len;
+	uint32_t next_step_id, total_procs, resv_id;
 	time_t start_time, end_time, suspend_time, pre_sus_time, tot_sus_time;
 	time_t now = time(NULL);
-	uint16_t job_state, next_step_id, details, batch_flag, step_flag;
-	uint16_t kill_on_node_fail, kill_on_step_done, qos;
+	uint16_t job_state, details, batch_flag, step_flag;
+	uint16_t kill_on_node_fail, kill_on_step_done, direct_set_prio, qos;
 	uint16_t alloc_resp_port, other_port, mail_type, state_reason;
+	uint16_t restart_cnt, resv_flags, ckpt_interval;
 	char *nodes = NULL, *partition = NULL, *name = NULL, *resp_host = NULL;
 	char *account = NULL, *network = NULL, *mail_user = NULL;
 	char *comment = NULL, *nodes_completing = NULL, *alloc_node = NULL;
-	char *licenses = NULL;
+	char *licenses = NULL, *state_desc = NULL, *wckey = NULL;
+	char *resv_name = NULL;
 	struct job_record *job_ptr;
 	struct part_record *part_ptr;
 	int error_code;
 	select_jobinfo_t select_jobinfo = NULL;
+	select_job_res_t select_job = NULL;
+	check_jobinfo_t check_job = NULL;
 	acct_association_rec_t assoc_rec;
+	acct_qos_rec_t qos_rec;
 
 	safe_unpack32(&assoc_id, buffer);
 	safe_unpack32(&job_id, buffer);
@@ -575,6 +707,8 @@ static int _load_job_state(Buf buffer)
 	safe_unpack32(&exit_code, buffer);
 	safe_unpack32(&db_index, buffer);
 	safe_unpack32(&assoc_id, buffer);
+	safe_unpack32(&resv_id, buffer);
+	safe_unpack32(&next_step_id, buffer);
 
 	safe_unpack_time(&start_time, buffer);
 	safe_unpack_time(&end_time, buffer);
@@ -582,16 +716,20 @@ static int _load_job_state(Buf buffer)
 	safe_unpack_time(&pre_sus_time, buffer);
 	safe_unpack_time(&tot_sus_time, buffer);
 
+	safe_unpack16(&direct_set_prio, buffer);
 	safe_unpack16(&job_state, buffer);
-	safe_unpack16(&next_step_id, buffer);
 	safe_unpack16(&kill_on_node_fail, buffer);
 	safe_unpack16(&kill_on_step_done, buffer);
 	safe_unpack16(&batch_flag, buffer);
 	safe_unpack16(&mail_type, buffer);
 	safe_unpack16(&qos, buffer);
 	safe_unpack16(&state_reason, buffer);
+	safe_unpack16(&restart_cnt, buffer);
+	safe_unpack16(&resv_flags, buffer);
 
+	safe_unpackstr_xmalloc(&state_desc, &name_len, buffer);
 	safe_unpackstr_xmalloc(&resp_host, &name_len, buffer);
+
 	safe_unpack16(&alloc_resp_port, buffer);
 	safe_unpack16(&other_port, buffer);
 
@@ -602,16 +740,26 @@ static int _load_job_state(Buf buffer)
 	safe_unpackstr_xmalloc(&nodes, &name_len, buffer);
 	safe_unpackstr_xmalloc(&partition, &name_len, buffer);
 	safe_unpackstr_xmalloc(&name, &name_len, buffer);
+	safe_unpackstr_xmalloc(&wckey, &name_len, buffer);
 	safe_unpackstr_xmalloc(&alloc_node, &name_len, buffer);
 	safe_unpackstr_xmalloc(&account, &name_len, buffer);
 	safe_unpackstr_xmalloc(&comment, &name_len, buffer);
 	safe_unpackstr_xmalloc(&network, &name_len, buffer);
 	safe_unpackstr_xmalloc(&licenses, &name_len, buffer);
 	safe_unpackstr_xmalloc(&mail_user, &name_len, buffer);
+	safe_unpackstr_xmalloc(&resv_name, &name_len, buffer);
 
 	if (select_g_alloc_jobinfo(&select_jobinfo)
 	    ||  select_g_unpack_jobinfo(select_jobinfo, buffer))
 		goto unpack_error;
+	if (unpack_select_job_res(&select_job, buffer))
+		goto unpack_error;
+
+	safe_unpack16(&ckpt_interval, buffer);
+	if (checkpoint_alloc_jobinfo(&check_job) ||
+	    checkpoint_unpack_jobinfo(check_job, buffer))
+		goto unpack_error;
+
 
 	/* validity test as possible */
 	if (job_id == 0) {
@@ -659,6 +807,19 @@ static int _load_job_state(Buf buffer)
 		_add_job_hash(job_ptr);
 	}
 
+	if(qos) {
+		memset(&qos_rec, 0, sizeof(acct_qos_rec_t));
+		qos_rec.id = qos;
+		if((assoc_mgr_fill_in_qos(acct_db_conn, &qos_rec,
+					  accounting_enforce, 
+					  (acct_qos_rec_t **)
+					  &job_ptr->qos_ptr))
+		   != SLURM_SUCCESS) {
+			verbose("Invalid qos (%u) for job_id %u", qos, job_id);
+			/* not a fatal error, qos could have been removed */
+		} 
+	}
+
 	if ((maximum_prio >= priority) && (priority > 1))
 		maximum_prio = priority;
 	if (job_id_sequence <= job_id)
@@ -670,6 +831,7 @@ static int _load_job_state(Buf buffer)
 		job_ptr->job_state = JOB_FAILED;
 		job_ptr->exit_code = 1;
 		job_ptr->state_reason = FAIL_SYSTEM;
+		xfree(job_ptr->state_desc);
 		job_ptr->end_time = now;
 		goto unpack_error;
 	}
@@ -687,6 +849,7 @@ static int _load_job_state(Buf buffer)
 	xfree(job_ptr->comment);
 	job_ptr->comment      = comment;
 	comment               = NULL;  /* reused, nothing left to free */
+	job_ptr->direct_set_prio = direct_set_prio;
 	job_ptr->db_index     = db_index;
 	job_ptr->end_time     = end_time;
 	job_ptr->exit_code    = exit_code;
@@ -704,6 +867,9 @@ static int _load_job_state(Buf buffer)
 	xfree(job_ptr->name);		/* in case duplicate record */
 	job_ptr->name         = name;
 	name                  = NULL;	/* reused, nothing left to free */
+	xfree(job_ptr->wckey);		/* in case duplicate record */
+	job_ptr->wckey        = wckey;
+	wckey                 = NULL;	/* reused, nothing left to free */
 	xfree(job_ptr->network);
 	job_ptr->network      = network;
 	network               = NULL;  /* reused, nothing left to free */
@@ -728,9 +894,19 @@ static int _load_job_state(Buf buffer)
 	xfree(job_ptr->resp_host);
 	job_ptr->resp_host    = resp_host;
 	resp_host             = NULL;	/* reused, nothing left to free */
+	job_ptr->restart_cnt  = restart_cnt;
+	job_ptr->resv_id      = resv_id;
+	job_ptr->resv_name    = resv_name;
+	resv_name             = NULL;	/* reused, nothing left to free */
+	job_ptr->resv_flags   = resv_flags;
 	job_ptr->select_jobinfo = select_jobinfo;
+	job_ptr->select_job   = select_job;
+	job_ptr->ckpt_interval = ckpt_interval;
+	job_ptr->check_job    = check_job;
 	job_ptr->start_time   = start_time;
 	job_ptr->state_reason = state_reason;
+	job_ptr->state_desc   = state_desc;
+	state_desc            = NULL;	/* reused, nothing left to free */
 	job_ptr->suspend_time = suspend_time;
 	job_ptr->time_last_active = now;
 	job_ptr->time_limit   = time_limit;
@@ -763,16 +939,19 @@ static int _load_job_state(Buf buffer)
 		     job_id);
 		job_ptr->job_state = JOB_CANCELLED;
 		job_ptr->state_reason = FAIL_BANK_ACCOUNT;
+		xfree(job_ptr->state_desc);
 		if (IS_JOB_PENDING(job_ptr))
 			job_ptr->start_time = now;
 		job_ptr->end_time = now;
 		job_completion_logger(job_ptr);
 	} else {
-		info("Recovered job %u", job_id);
 		job_ptr->assoc_id = assoc_rec.id;
+		info("Recovered job %u %u", job_id, job_ptr->assoc_id);
+
 		/* make sure we have started this job in accounting */
 		if(job_ptr->assoc_id && !job_ptr->db_index && job_ptr->nodes) {
-			debug("starting job %u in accounting", job_ptr->job_id);
+			debug("starting job %u in accounting", 
+			      job_ptr->job_id);
 			jobacct_storage_g_job_start(
 				acct_db_conn, slurmctld_cluster_name, job_ptr);
 			if(job_ptr->job_state == JOB_SUSPENDED) 
@@ -796,24 +975,26 @@ static int _load_job_state(Buf buffer)
 		safe_unpack16(&step_flag, buffer);
 	}
 
-	build_node_details(job_ptr);	/* set: num_cpu_groups, cpus_per_node,
-					 *  cpu_count_reps, node_cnt,
-					 *  node_addr, alloc_lps, used_lps */
+	build_node_details(job_ptr);	/* set node_addr */
 	return SLURM_SUCCESS;
 
 unpack_error:
 	error("Incomplete job record");
-	xfree(nodes);
-	xfree(nodes_completing);
-	xfree(partition);
-	xfree(name);
 	xfree(alloc_node);
 	xfree(account);
 	xfree(comment);
 	xfree(resp_host);
 	xfree(licenses);
 	xfree(mail_user);
+	xfree(name);
+	xfree(nodes);
+	xfree(nodes_completing);
+	xfree(partition);
+	xfree(resv_name);
+	xfree(state_desc);
+	xfree(wckey);
 	select_g_free_jobinfo(&select_jobinfo);
+	checkpoint_free_jobinfo(check_job);
 	return SLURM_FAILURE;
 }
 
@@ -829,15 +1010,24 @@ void _dump_job_details(struct job_details *detail_ptr, Buf buffer)
 	pack32(detail_ptr->max_nodes, buffer);
 	pack32(detail_ptr->num_tasks, buffer);
 
-	pack16(detail_ptr->shared, buffer);
+	pack16(detail_ptr->acctg_freq, buffer);
 	pack16(detail_ptr->contiguous, buffer);
 	pack16(detail_ptr->cpus_per_task, buffer);
+	pack16(detail_ptr->nice, buffer);
 	pack16(detail_ptr->ntasks_per_node, buffer);
 	pack16(detail_ptr->requeue, buffer);
-	pack16(detail_ptr->acctg_freq, buffer);
+	pack16(detail_ptr->shared, buffer);
+	pack16(detail_ptr->task_dist, buffer);
+
+	packstr(detail_ptr->cpu_bind,     buffer);
+	pack16(detail_ptr->cpu_bind_type, buffer);
+	packstr(detail_ptr->mem_bind,     buffer);
+	pack16(detail_ptr->mem_bind_type, buffer);
+	pack16(detail_ptr->plane_size, buffer);
 
 	pack8(detail_ptr->open_mode, buffer);
 	pack8(detail_ptr->overcommit, buffer);
+	pack8(detail_ptr->prolog_running, buffer);
 
 	pack32(detail_ptr->job_min_procs, buffer);
 	pack32(detail_ptr->job_min_memory, buffer);
@@ -854,6 +1044,8 @@ void _dump_job_details(struct job_details *detail_ptr, Buf buffer)
 	packstr(detail_ptr->in,        buffer);
 	packstr(detail_ptr->out,       buffer);
 	packstr(detail_ptr->work_dir,  buffer);
+	packstr(detail_ptr->ckpt_dir,  buffer);
+	packstr(detail_ptr->restart_dir, buffer);
 
 	pack_multi_core_data(detail_ptr->mc_ptr, buffer);
 	packstr_array(detail_ptr->argv, detail_ptr->argc, buffer);
@@ -863,16 +1055,18 @@ void _dump_job_details(struct job_details *detail_ptr, Buf buffer)
 static int _load_job_details(struct job_record *job_ptr, Buf buffer)
 {
 	char *req_nodes = NULL, *exc_nodes = NULL, *features = NULL;
-	char *dependency = NULL;
+	char *cpu_bind, *dependency = NULL, *mem_bind;
 	char *err = NULL, *in = NULL, *out = NULL, *work_dir = NULL;
+	char *ckpt_dir = NULL, *restart_dir = NULL;
 	char **argv = (char **) NULL;
 	uint32_t min_nodes, max_nodes;
 	uint32_t job_min_procs;
 	uint32_t job_min_memory, job_min_tmp_disk;
 	uint32_t num_tasks, name_len, argc = 0;
-	uint16_t shared, contiguous, ntasks_per_node;
-	uint16_t acctg_freq, cpus_per_task, requeue;
-	uint8_t open_mode, overcommit;
+	uint16_t shared, contiguous, nice, ntasks_per_node;
+	uint16_t acctg_freq, cpus_per_task, requeue, task_dist;
+	uint16_t cpu_bind_type, mem_bind_type, plane_size;
+	uint8_t open_mode, overcommit, prolog_running;
 	time_t begin_time, submit_time;
 	int i;
 	multi_core_data_t *mc_ptr;
@@ -882,15 +1076,24 @@ static int _load_job_details(struct job_record *job_ptr, Buf buffer)
 	safe_unpack32(&max_nodes, buffer);
 	safe_unpack32(&num_tasks, buffer);
 
-	safe_unpack16(&shared, buffer);
+	safe_unpack16(&acctg_freq, buffer);
 	safe_unpack16(&contiguous, buffer);
 	safe_unpack16(&cpus_per_task, buffer);
+	safe_unpack16(&nice, buffer);
 	safe_unpack16(&ntasks_per_node, buffer);
 	safe_unpack16(&requeue, buffer);
-	safe_unpack16(&acctg_freq, buffer);
+	safe_unpack16(&shared, buffer);
+	safe_unpack16(&task_dist, buffer);
+
+	safe_unpackstr_xmalloc(&cpu_bind, &name_len, buffer);
+	safe_unpack16(&cpu_bind_type, buffer);
+	safe_unpackstr_xmalloc(&mem_bind, &name_len, buffer);
+	safe_unpack16(&mem_bind_type, buffer);
+	safe_unpack16(&plane_size, buffer);
 
 	safe_unpack8(&open_mode, buffer);
 	safe_unpack8(&overcommit, buffer);
+	safe_unpack8(&prolog_running, buffer);
 
 	safe_unpack32(&job_min_procs, buffer);
 	safe_unpack32(&job_min_memory, buffer);
@@ -907,6 +1110,8 @@ static int _load_job_details(struct job_record *job_ptr, Buf buffer)
 	safe_unpackstr_xmalloc(&in,  &name_len, buffer);
 	safe_unpackstr_xmalloc(&out, &name_len, buffer);
 	safe_unpackstr_xmalloc(&work_dir, &name_len, buffer);
+	safe_unpackstr_xmalloc(&ckpt_dir, &name_len, buffer);
+	safe_unpackstr_xmalloc(&restart_dir, &name_len, buffer);
 
 	if (unpack_multi_core_data(&mc_ptr, buffer))
 		goto unpack_error;
@@ -923,66 +1128,88 @@ static int _load_job_details(struct job_record *job_ptr, Buf buffer)
 		      requeue, overcommit);
 		goto unpack_error;
 	}
-
-
+	if (prolog_running > 1) {
+		error("Invalid data for job %u: prolog_running=%u",
+		      job_ptr->job_id, prolog_running);
+		goto unpack_error;
+	}
 
 	/* free any left-over detail data */
-	xfree(job_ptr->details->req_nodes);
+	for (i=0; i<job_ptr->details->argc; i++)
+		xfree(job_ptr->details->argv[i]);
+	xfree(job_ptr->details->argv);
+	xfree(job_ptr->details->cpu_bind);
+	xfree(job_ptr->details->dependency);
+	xfree(job_ptr->details->err);
 	xfree(job_ptr->details->exc_nodes);
 	xfree(job_ptr->details->features);
-	xfree(job_ptr->details->err);
 	xfree(job_ptr->details->in);
+	xfree(job_ptr->details->mem_bind);
 	xfree(job_ptr->details->out);
+	xfree(job_ptr->details->req_nodes);
 	xfree(job_ptr->details->work_dir);
-	for (i=0; i<job_ptr->details->argc; i++)
-		xfree(job_ptr->details->argv[i]);
-	xfree(job_ptr->details->argv);
+	xfree(job_ptr->details->ckpt_dir);
+	xfree(job_ptr->details->restart_dir);
 
 	/* now put the details into the job record */
-	job_ptr->details->min_nodes = min_nodes;
-	job_ptr->details->max_nodes = max_nodes;
-	job_ptr->details->num_tasks = num_tasks;
-	job_ptr->details->shared = shared;
 	job_ptr->details->acctg_freq = acctg_freq;
+	job_ptr->details->argc = argc;
+	job_ptr->details->argv = argv;
+	job_ptr->details->begin_time = begin_time;
 	job_ptr->details->contiguous = contiguous;
+	job_ptr->details->cpu_bind = cpu_bind;
+	job_ptr->details->cpu_bind_type = cpu_bind_type;
 	job_ptr->details->cpus_per_task = cpus_per_task;
-	/* FIXME: Need to save/restore actual task_dist value */
-	job_ptr->details->task_dist = SLURM_DIST_CYCLIC;
-	job_ptr->details->ntasks_per_node = ntasks_per_node;
+	job_ptr->details->dependency = dependency;
+	job_ptr->details->err = err;
+	job_ptr->details->exc_nodes = exc_nodes;
+	job_ptr->details->features = features;
+	job_ptr->details->in = in;
 	job_ptr->details->job_min_procs = job_min_procs;
 	job_ptr->details->job_min_memory = job_min_memory;
 	job_ptr->details->job_min_tmp_disk = job_min_tmp_disk;
-	job_ptr->details->requeue = requeue;
+	job_ptr->details->max_nodes = max_nodes;
+	job_ptr->details->mc_ptr = mc_ptr;
+	job_ptr->details->mem_bind = mem_bind;
+	job_ptr->details->mem_bind_type = mem_bind_type;
+	job_ptr->details->min_nodes = min_nodes;
+	job_ptr->details->nice = nice;
+	job_ptr->details->ntasks_per_node = ntasks_per_node;
+	job_ptr->details->num_tasks = num_tasks;
 	job_ptr->details->open_mode = open_mode;
+	job_ptr->details->out = out;
 	job_ptr->details->overcommit = overcommit;
-	job_ptr->details->begin_time = begin_time;
-	job_ptr->details->submit_time = submit_time;
+	job_ptr->details->plane_size = plane_size;
+	job_ptr->details->prolog_running = prolog_running;
 	job_ptr->details->req_nodes = req_nodes;
-	job_ptr->details->exc_nodes = exc_nodes;
-	job_ptr->details->features = features;
-	job_ptr->details->err = err;
-	job_ptr->details->in = in;
-	job_ptr->details->out = out;
+	job_ptr->details->requeue = requeue;
+	job_ptr->details->shared = shared;
+	job_ptr->details->submit_time = submit_time;
+	job_ptr->details->task_dist = task_dist;
 	job_ptr->details->work_dir = work_dir;
-	job_ptr->details->argc = argc;
-	job_ptr->details->argv = argv;
-	job_ptr->details->mc_ptr = mc_ptr;
-	job_ptr->details->dependency = dependency;
+	job_ptr->details->ckpt_dir = ckpt_dir;
+	job_ptr->details->restart_dir = restart_dir;
 	
 	return SLURM_SUCCESS;
 
 unpack_error:
-	xfree(req_nodes);
-	xfree(exc_nodes);
-	xfree(features);
+
+
+/*	for (i=0; i<argc; i++) 
+	xfree(argv[i]);  Don't trust this on unpack error */
+	xfree(argv);
+	xfree(cpu_bind);
 	xfree(dependency);
 	xfree(err);
+	xfree(exc_nodes);
+	xfree(features);
 	xfree(in);
+	xfree(mem_bind);
 	xfree(out);
+	xfree(req_nodes);
 	xfree(work_dir);
-/*	for (i=0; i<argc; i++) 
-	xfree(argv[i]);  Don't trust this on unpack error */
-	xfree(argv);
+	xfree(ckpt_dir);
+	xfree(restart_dir);
 	return SLURM_FAILURE;
 }
 
@@ -1066,6 +1293,7 @@ extern int kill_job_by_part_name(char *part_name)
 			job_ptr->job_state = JOB_NODE_FAIL | JOB_COMPLETING;
 			job_ptr->exit_code = MAX(job_ptr->exit_code, 1);
 			job_ptr->state_reason = FAIL_DOWN_PARTITION;
+			xfree(job_ptr->state_desc);
 			if (suspended) {
 				job_ptr->end_time = job_ptr->suspend_time;
 				job_ptr->tot_sus_time += 
@@ -1097,10 +1325,9 @@ extern int kill_job_by_part_name(char *part_name)
  * kill_running_job_by_node_name - Given a node name, deallocate RUNNING 
  *	or COMPLETING jobs from the node or kill them 
  * IN node_name - name of a node
- * IN step_test - if true, only kill the job if a step is running on the node
  * RET number of killed jobs
  */
-extern int kill_running_job_by_node_name(char *node_name, bool step_test)
+extern int kill_running_job_by_node_name(char *node_name)
 {
 	ListIterator job_iterator;
 	struct job_record *job_ptr;
@@ -1151,10 +1378,6 @@ extern int kill_running_job_by_node_name(char *node_name, bool step_test)
 				      "JobId=%u", 
 				      node_ptr->name, job_ptr->job_id);
 		} else if ((job_ptr->job_state == JOB_RUNNING) || suspended) {
-			if (step_test && 
-			    (step_on_node(job_ptr, node_ptr) == 0))
-				continue;
-
 			job_count++;
 			if ((job_ptr->details) &&
 			    (job_ptr->kill_on_node_fail == 0) &&
@@ -1163,7 +1386,8 @@ extern int kill_running_job_by_node_name(char *node_name, bool step_test)
 				srun_node_fail(job_ptr->job_id, node_name);
 				error("Removing failed node %s from job_id %u",
 				      node_name, job_ptr->job_id);
-				_excise_node_from_job(job_ptr, node_ptr);
+				kill_step_on_node(job_ptr, node_ptr);
+				excise_node_from_job(job_ptr, node_ptr);
 			} else if (job_ptr->batch_flag && job_ptr->details &&
 			           (job_ptr->details->requeue > 0)) {
 				char requeue_msg[128];
@@ -1189,7 +1413,7 @@ extern int kill_running_job_by_node_name(char *node_name, bool step_test)
 					job_ptr->end_time = now;
 				
 				/* We want this job to look like it
-				 * was terminateded in the accounting logs.
+				 * was terminated in the accounting logs.
 				 * Set a new submit time so the restarted
 				 * job looks like a new job. */
 				job_ptr->job_state  = JOB_NODE_FAIL;
@@ -1200,6 +1424,18 @@ extern int kill_running_job_by_node_name(char *node_name, bool step_test)
 				if (job_ptr->node_cnt)
 					job_ptr->job_state |= JOB_COMPLETING;
 				job_ptr->details->submit_time = now;
+				
+				/* restart from periodic checkpoint */
+				if (job_ptr->ckpt_interval &&
+				    job_ptr->ckpt_time &&
+				    job_ptr->details->ckpt_dir) {
+					xfree(job_ptr->details->restart_dir);
+					job_ptr->details->restart_dir =
+						xstrdup (job_ptr->details->ckpt_dir);
+					xstrfmtcat(job_ptr->details->restart_dir,
+						   "/%u", job_ptr->job_id);
+				}
+				job_ptr->restart_cnt++;
 				/* Since the job completion logger
 				   removes the submit we need to add it
 				   again.
@@ -1214,11 +1450,13 @@ extern int kill_running_job_by_node_name(char *node_name, bool step_test)
 				job_ptr->exit_code = 
 					MAX(job_ptr->exit_code, 1);
 				job_ptr->state_reason = FAIL_DOWN_NODE;
+				xfree(job_ptr->state_desc);
 				if (suspended) {
 					job_ptr->end_time =
 						job_ptr->suspend_time;
 					job_ptr->tot_sus_time += 
-						difftime(now, job_ptr->suspend_time);
+						difftime(now, 
+							 job_ptr->suspend_time);
 				} else
 					job_ptr->end_time = time(NULL);
 				deallocate_nodes(job_ptr, false, suspended);
@@ -1235,21 +1473,38 @@ extern int kill_running_job_by_node_name(char *node_name, bool step_test)
 }
 
 /* Remove one node from a job's allocation */
-static void _excise_node_from_job(struct job_record *job_ptr, 
-				  struct node_record *node_ptr)
+extern void excise_node_from_job(struct job_record *job_ptr, 
+				 struct node_record *node_ptr)
 {
+	int i, orig_pos = -1, new_pos = -1;
+	bitstr_t *orig_bitmap = bit_copy(job_ptr->node_bitmap);
+	select_job_res_t select_ptr = job_ptr->select_job;
+
+	xassert(select_ptr);
+	xassert(select_ptr->cpus);
+	xassert(select_ptr->cpus_used);
+
 	make_node_idle(node_ptr, job_ptr); /* updates bitmap */
 	xfree(job_ptr->nodes);
 	job_ptr->nodes = bitmap2node_name(job_ptr->node_bitmap);
-	xfree(job_ptr->cpus_per_node);
-	xfree(job_ptr->cpu_count_reps);
-	xfree(job_ptr->node_addr);
-
-	/* build_node_details rebuilds everything from node_bitmap */
-	build_node_details(job_ptr);
+	for (i=bit_ffs(orig_bitmap); i<node_record_count; i++) {
+		if (!bit_test(orig_bitmap,i))
+			continue;
+		orig_pos++;
+		if (!bit_test(job_ptr->node_bitmap, i))
+			continue;
+		new_pos++;
+		if (orig_pos == new_pos)
+			continue;
+		memcpy(&job_ptr->node_addr[new_pos],
+		       &job_ptr->node_addr[orig_pos], sizeof(slurm_addr));
+		/* NOTE: The job's allocation in the job_ptr->select_job
+		 * data structure is unchanged  even after a node allocated
+		 * to the job goes DOWN. */
+	}
+	job_ptr->node_cnt = new_pos + 1;
 }
 
-
 /*
  * dump_job_desc - dump the incoming job submit request message
  * IN job_specs - job specification from RPC
@@ -1313,8 +1568,8 @@ void dump_job_desc(job_desc_msg_t * job_specs)
 	debug3("   min_memory_%s=%ld job_min_tmp_disk=%ld",
 	       mem_type, job_min_memory, job_min_tmp_disk);
 	immediate = (job_specs->immediate == 0) ? 0L : 1L;
-	debug3("   immediate=%ld features=%s",
-	       immediate, job_specs->features);
+	debug3("   immediate=%ld features=%s reservation=%s",
+	       immediate, job_specs->features, job_specs->reservation);
 
 	debug3("   req_nodes=%s exc_nodes=%s", 
 	       job_specs->req_nodes, job_specs->exc_nodes);
@@ -1413,6 +1668,11 @@ void dump_job_desc(job_desc_msg_t * job_specs)
 	       "ntasks_per_core=%ld", 
 	       ntasks_per_node, ntasks_per_socket, ntasks_per_core);
 
+	debug3("   cpus_bind=%u:%s mem_bind=%u:%s plane_size:%u",
+	       job_specs->cpu_bind_type, job_specs->cpu_bind,
+	       job_specs->mem_bind_type, job_specs->mem_bind,
+	       job_specs->plane_size);
+
 	select_g_sprint_jobinfo(job_specs->select_jobinfo, 
 				buf, sizeof(buf), SELECT_PRINT_MIXED);
 	if (buf[0] != '\0')
@@ -1477,9 +1737,6 @@ extern void rehash_jobs(void)
  * RET 0 or an error code. If the job would only be able to execute with 
  *	some change in partition configuration then 
  *	ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE is returned
- * NOTE: If allocating nodes lx[0-7] to a job and those nodes have cpu counts  
- *	of 4, 4, 4, 4, 8, 8, 4, 4 then num_cpu_groups=3, cpus_per_node={4,8,4}
- *	and cpu_count_reps={4,2,2}
  * globals: job_list - pointer to global job list 
  *	list_part - global list of partition info
  *	default_part_loc - pointer to default partition
@@ -1503,21 +1760,27 @@ extern int job_allocate(job_desc_msg_t * job_specs, int immediate,
 			job_ptr->job_state = JOB_FAILED;
 			job_ptr->exit_code = 1;
 			job_ptr->state_reason = FAIL_BAD_CONSTRAINTS;
+			xfree(job_ptr->state_desc);
 			job_ptr->start_time = job_ptr->end_time = now;
 			job_completion_logger(job_ptr);
 		}
 		return error_code;
 	}
 	xassert(job_ptr);
-
 	independent = job_independent(job_ptr);
+	/* 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.
+	*/
+	if(job_ptr->priority == NO_VAL)
+		_set_job_prio(job_ptr);
+
 	if (license_job_test(job_ptr) != SLURM_SUCCESS)
 		independent = false;
 
 	/* Avoid resource fragmentation if important */
-	if (independent && switch_no_frag() && 
-	    (submit_uid || (job_specs->req_nodes == NULL)) && 
-	    job_is_completing())
+	if ((submit_uid || (job_specs->req_nodes == NULL)) && 
+	    independent && job_is_completing())
 		too_fragmented = true;	/* Don't pick nodes for job now */
 	/* FIXME: Ideally we only want to refuse the request if the 
 	 * required node list is insufficient to satisfy the job's
@@ -1537,6 +1800,7 @@ extern int job_allocate(job_desc_msg_t * job_specs, int immediate,
 		job_ptr->job_state  = JOB_FAILED;
 		job_ptr->exit_code  = 1;
 		job_ptr->state_reason = FAIL_BAD_CONSTRAINTS;
+		xfree(job_ptr->state_desc);
 		job_ptr->start_time = job_ptr->end_time = now;
 		job_completion_logger(job_ptr);
 		if (!independent)
@@ -1576,12 +1840,14 @@ extern int job_allocate(job_desc_msg_t * job_specs, int immediate,
 	if ((error_code == ESLURM_NODES_BUSY) ||
 	    (error_code == ESLURM_JOB_HELD) ||
 	    (error_code == ESLURM_ACCOUNTING_POLICY) ||
+	    (error_code == ESLURM_RESERVATION_NOT_USABLE) ||
 	    (error_code == ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE)) {
 		/* Not fatal error, but job can't be scheduled right now */
 		if (immediate) {
 			job_ptr->job_state  = JOB_FAILED;
 			job_ptr->exit_code  = 1;
 			job_ptr->state_reason = FAIL_BAD_CONSTRAINTS;
+			xfree(job_ptr->state_desc);
 			job_ptr->start_time = job_ptr->end_time = now;
 			job_completion_logger(job_ptr);
 		} else {	/* job remains queued */
@@ -1597,6 +1863,7 @@ extern int job_allocate(job_desc_msg_t * job_specs, int immediate,
 		job_ptr->job_state  = JOB_FAILED;
 		job_ptr->exit_code  = 1;
 		job_ptr->state_reason = FAIL_BAD_CONSTRAINTS;
+		xfree(job_ptr->state_desc);
 		job_ptr->start_time = job_ptr->end_time = now;
 		job_completion_logger(job_ptr);
 		return error_code;
@@ -1653,6 +1920,7 @@ extern int job_fail(uint32_t job_id)
 		job_ptr->job_state = JOB_FAILED | JOB_COMPLETING;
 		job_ptr->exit_code = 1;
 		job_ptr->state_reason = FAIL_LAUNCH;
+		xfree(job_ptr->state_desc);
 		deallocate_nodes(job_ptr, false, suspended);
 		job_completion_logger(job_ptr);
 		return SLURM_SUCCESS;
@@ -1725,15 +1993,13 @@ extern int job_signal(uint32_t job_id, uint16_t signal, uint16_t batch_flag,
 		return SLURM_SUCCESS;
 	}
 
-	if ((job_ptr->job_state == JOB_PENDING) &&
-	    (signal == SIGKILL)) {
+	if ((job_ptr->job_state == JOB_PENDING) && (signal == SIGKILL)) {
 		last_job_update		= now;
 		job_ptr->job_state	= JOB_CANCELLED;
 		job_ptr->start_time	= now;
 		job_ptr->end_time	= now;
 		srun_allocate_abort(job_ptr);
 		job_completion_logger(job_ptr);
-		delete_job_details(job_ptr);
 		verbose("job_signal of pending job %u successful", job_id);
 		return SLURM_SUCCESS;
 	}
@@ -1838,9 +2104,10 @@ extern int job_complete(uint32_t job_id, uid_t uid, bool requeue,
 	if (IS_JOB_FINISHED(job_ptr))
 		return ESLURM_ALREADY_DONE;
 
-	if ((job_ptr->user_id != uid) && (uid != 0) && (uid != getuid())) {
-		error("Security violation, JOB_COMPLETE RPC from uid %d",
-		      uid);
+	if ((job_ptr->user_id != uid) && !validate_super_user(uid)) {
+		error("Security violation, JOB_COMPLETE RPC for job %u "
+		      "from uid %u",
+		      job_ptr->job_id, (unsigned int) uid);
 		return ESLURM_USER_ID_MISSING;
 	}
 	if (job_ptr->job_state & JOB_COMPLETING)
@@ -1869,14 +2136,37 @@ extern int job_complete(uint32_t job_id, uid_t uid, bool requeue,
 	}
 
 	if (requeue && job_ptr->details && job_ptr->batch_flag) {
+		/* We want this job to look like it
+		 * was terminated in the accounting logs.
+		 * Set a new submit time so the restarted
+		 * job looks like a new job. */
+		job_ptr->end_time = now;
+		job_ptr->job_state  = JOB_NODE_FAIL;
+		job_completion_logger(job_ptr);
+		job_ptr->db_index = 0;
+		/* Since this could happen on a launch we need to make
+		   sure the submit isn't the same as the last submit so
+		   put now + 1 so we get different records in the
+		   database */
+		job_ptr->details->submit_time = now+1;
+		
 		job_ptr->batch_flag++;	/* only one retry */
+		job_ptr->restart_cnt++;
 		job_ptr->job_state = JOB_PENDING | job_comp_flag;
+		/* Since the job completion logger
+		   removes the submit we need to add it
+		   again.
+		*/
+		acct_policy_add_job_submit(job_ptr);
+
 		info("Non-responding node, requeue JobId=%u", job_ptr->job_id);
 	} else if ((job_ptr->job_state == JOB_PENDING) && job_ptr->details && 
 		   job_ptr->batch_flag) {
 		/* Possible failure mode with DOWN node and job requeue.
 		 * The DOWN node might actually respond to the cancel and
-		 * take us here. */
+		 * take us here.  Don't run job_completion_logger
+		 * here since this is here to catch duplicate cancels
+		 * from slow responding slurmds */
 		return SLURM_SUCCESS;
 	} else {
 		if (job_return_code == NO_VAL) {
@@ -1887,14 +2177,18 @@ extern int job_complete(uint32_t job_id, uid_t uid, bool requeue,
 			job_ptr->job_state = JOB_FAILED   | job_comp_flag;
 			job_ptr->exit_code = job_return_code;
 			job_ptr->state_reason = FAIL_EXIT_CODE;
+			xfree(job_ptr->state_desc);
 		} else if (job_comp_flag &&		/* job was running */
-			 (job_ptr->end_time < now)) {	/* over time limit */
+			   (job_ptr->end_time < now)) {	/* over time limit */
 			job_ptr->job_state = JOB_TIMEOUT  | job_comp_flag;
 			job_ptr->exit_code = MAX(job_ptr->exit_code, 1);
 			job_ptr->state_reason = FAIL_TIMEOUT;
-		} else 
+			xfree(job_ptr->state_desc);
+		} else {
 			job_ptr->job_state = JOB_COMPLETE | job_comp_flag;
-		
+			job_ptr->exit_code = job_return_code;
+		}
+
 		if (suspended) {
 			job_ptr->end_time = job_ptr->suspend_time;
 			job_ptr->tot_sus_time += 
@@ -2000,6 +2294,10 @@ static int _job_create(job_desc_msg_t * job_desc, int allocate, int will_run,
 		return error_code;
 	}
 
+	if ((job_desc->time_limit == NO_VAL) &&
+	    (part_ptr->default_time != NO_VAL))
+		job_desc->time_limit = part_ptr->default_time;
+
 	if ((job_desc->time_limit != NO_VAL) &&
 	    (job_desc->time_limit > part_ptr->max_time) &&
 	    slurmctld_conf.enforce_part_limits) {
@@ -2033,6 +2331,15 @@ static int _job_create(job_desc_msg_t * job_desc, int allocate, int will_run,
 		return error_code;
 	}
 
+	if (validate_alloc_node(part_ptr, job_desc->alloc_node) == 0) {
+		info("_job_create: uid %u access to partition %s denied, "
+		     "bad allocating node: %s",
+		     (unsigned int) job_desc->user_id, part_ptr->name,
+		     job_desc->alloc_node);
+		error_code = ESLURM_ACCESS_DENIED;
+		return error_code;
+	}
+
 	memset(&assoc_rec, 0, sizeof(acct_association_rec_t));
 	assoc_rec.uid       = job_desc->user_id;
 	assoc_rec.partition = part_ptr->name;
@@ -2235,11 +2542,24 @@ static int _job_create(job_desc_msg_t * job_desc, int allocate, int will_run,
 			error_code = ESLURM_ERROR_ON_DESC_TO_RECORD_COPY;
 		goto cleanup_fail;
 	}
+	if ((error_code=checkpoint_alloc_jobinfo(&((*job_pptr)->check_job)))) {
+		error("Failed to allocate checkpoint info for job");
+		goto cleanup_fail;
+	}
 
 	job_ptr = *job_pptr;
+	
 	job_ptr->assoc_id = assoc_rec.id;
 	job_ptr->assoc_ptr = (void *) assoc_ptr;
 
+	/* This must be done after we have the assoc_ptr set */
+	
+	/* already confirmed submit_uid==0 */
+	/* If the priority isn't given we will figure it out later
+	   after we see if the job is eligible or not. So we want
+	   NO_VAL if not set. */
+	job_ptr->priority = job_desc->priority;
+
 	if (update_job_dependency(job_ptr, job_desc->dependency)) {
 		error_code = ESLURM_DEPENDENCY;
 		goto cleanup_fail;
@@ -2249,6 +2569,9 @@ static int _job_create(job_desc_msg_t * job_desc, int allocate, int will_run,
 		goto cleanup_fail;
 	}
 
+	if ((error_code = validate_job_resv(job_ptr)))
+		goto cleanup_fail;
+
 	if (job_desc->script
 	    &&  (!will_run)) {	/* don't bother with copy if just a test */
 		if ((error_code = _copy_job_desc_to_file(job_desc,
@@ -2292,6 +2615,7 @@ static int _job_create(job_desc_msg_t * job_desc, int allocate, int will_run,
 		error_code = ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE;
 		job_ptr->priority = 1;      /* Move to end of queue */
 		job_ptr->state_reason = fail_reason;
+		xfree(job_ptr->state_desc);
 	}
 
 cleanup:
@@ -2306,6 +2630,7 @@ cleanup_fail:
 		job_ptr->job_state = JOB_FAILED;
 		job_ptr->exit_code = 1;
 		job_ptr->state_reason = FAIL_SYSTEM;
+		xfree(job_ptr->state_desc);
 		job_ptr->start_time = job_ptr->end_time = time(NULL);
 	}
 	if (license_list)
@@ -2325,12 +2650,14 @@ static int _validate_job_create_req(job_desc_msg_t * job_desc)
 		     strlen(job_desc->account));
 		return ESLURM_PATHNAME_TOO_LONG;
 	}
-	if (job_desc->alloc_node && (strlen(job_desc->alloc_node) > MAX_STR_LEN)) {
+	if (job_desc->alloc_node && 
+	    (strlen(job_desc->alloc_node) > MAX_STR_LEN)) {
 		info("_validate_job_create_req: strlen(alloc_node) too big (%d)",
 		     strlen(job_desc->alloc_node));
 		return ESLURM_PATHNAME_TOO_LONG;
 	}
-	if (job_desc->blrtsimage && (strlen(job_desc->blrtsimage) > MAX_STR_LEN)) {
+	if (job_desc->blrtsimage && 
+	    (strlen(job_desc->blrtsimage) > MAX_STR_LEN)) {
 		info("_validate_job_create_req: strlen(blrtsimage) too big (%d)",
 		     strlen(job_desc->blrtsimage));
 		return ESLURM_PATHNAME_TOO_LONG;
@@ -2340,7 +2667,8 @@ static int _validate_job_create_req(job_desc_msg_t * job_desc)
 		     strlen(job_desc->comment));
 		return ESLURM_PATHNAME_TOO_LONG;
 	}
-	if (job_desc->dependency && (strlen(job_desc->dependency) > MAX_STR_LEN)) {
+	if (job_desc->dependency && 
+	    (strlen(job_desc->dependency) > MAX_STR_LEN)) {
 		info("_validate_job_create_req: strlen(dependency) too big (%d)",
 		     strlen(job_desc->dependency));
 		return ESLURM_PATHNAME_TOO_LONG;
@@ -2360,7 +2688,8 @@ static int _validate_job_create_req(job_desc_msg_t * job_desc)
 		     strlen(job_desc->in));
 		return ESLURM_PATHNAME_TOO_LONG;
 	}
-	if (job_desc->linuximage && (strlen(job_desc->linuximage) > MAX_STR_LEN)) {
+	if (job_desc->linuximage && 
+	    (strlen(job_desc->linuximage) > MAX_STR_LEN)) {
 		info("_validate_job_create_req: strlen(linuximage) too big (%d)",
 		     strlen(job_desc->linuximage));
 		return ESLURM_PATHNAME_TOO_LONG;
@@ -2375,7 +2704,8 @@ static int _validate_job_create_req(job_desc_msg_t * job_desc)
 		     strlen(job_desc->mail_user));
 		return ESLURM_PATHNAME_TOO_LONG;
 	}
-	if (job_desc->mloaderimage && (strlen(job_desc->mloaderimage) > MAX_STR_LEN)) {
+	if (job_desc->mloaderimage && 
+	    (strlen(job_desc->mloaderimage) > MAX_STR_LEN)) {
 		info("_validate_job_create_req: strlen(mloaderimage) too big (%d)",
 		     strlen(job_desc->features));
 		return ESLURM_PATHNAME_TOO_LONG;
@@ -2400,7 +2730,8 @@ static int _validate_job_create_req(job_desc_msg_t * job_desc)
 		     strlen(job_desc->partition));
 		return ESLURM_PATHNAME_TOO_LONG;
 	}
-	if (job_desc->ramdiskimage && (strlen(job_desc->ramdiskimage) > MAX_STR_LEN)) {
+	if (job_desc->ramdiskimage && 
+	    (strlen(job_desc->ramdiskimage) > MAX_STR_LEN)) {
 		info("_validate_job_create_req: strlen(ramdiskimage) too big (%d)",
 		     strlen(job_desc->ramdiskimage));
 		return ESLURM_PATHNAME_TOO_LONG;
@@ -2799,47 +3130,47 @@ _copy_job_desc_to_job_record(job_desc_msg_t * job_desc,
 	struct job_record *job_ptr;
 
         if(slurm_get_track_wckey()) {
-		char *wckey = NULL;
-		if(!job_desc->name || !strchr(job_desc->name, '\"')) {
+		if(!job_desc->wckey) {
 			/* get the default wckey for this user since none was
 			 * given */
 			acct_user_rec_t user_rec;
 			memset(&user_rec, 0, sizeof(acct_user_rec_t));
 			user_rec.uid = job_desc->user_id;
 			assoc_mgr_fill_in_user(acct_db_conn, &user_rec,
-					       accounting_enforce);
+					       accounting_enforce, NULL);
 			if(user_rec.default_wckey)
-				xstrfmtcat(job_desc->name, "\"*%s",
-					   user_rec.default_wckey);
+				job_desc->wckey = xstrdup_printf(
+					"*%s", user_rec.default_wckey);
 			else if(!(accounting_enforce 
 				  & ACCOUNTING_ENFORCE_WCKEYS))
-				xstrcat(job_desc->name, "\"*");	
+				job_desc->wckey = xstrdup("*");	
 			else {
 				error("Job didn't specify wckey and user "
 				      "%d has no default.", job_desc->user_id);
 				return ESLURM_INVALID_WCKEY;
-			}
-		} else if(job_desc->name 
-			  && (wckey = strchr(job_desc->name, '\"'))
-			  && (accounting_enforce & ACCOUNTING_ENFORCE_WCKEYS)) {
+			}		
+		} else if(job_desc->wckey) {
 			acct_wckey_rec_t wckey_rec, *wckey_ptr = NULL;
-			wckey++;
 				
 			memset(&wckey_rec, 0, sizeof(acct_wckey_rec_t));
 			wckey_rec.uid       = job_desc->user_id;
-			wckey_rec.name      = wckey;
+			wckey_rec.name      = job_desc->wckey;
 
 			if (assoc_mgr_fill_in_wckey(acct_db_conn, &wckey_rec,
 						    accounting_enforce,
 						    &wckey_ptr)) {
-				info("_job_create: invalid wckey '%s' "
-				     "for user %u.",
-				     wckey_rec.name, job_desc->user_id);
-				return ESLURM_INVALID_WCKEY;
+				if(accounting_enforce 
+				   & ACCOUNTING_ENFORCE_WCKEYS) {
+					info("_job_create: invalid wckey '%s' "
+					     "for user %u.",
+					     wckey_rec.name, job_desc->user_id);
+					return ESLURM_INVALID_WCKEY;
+				}
 			}
+			job_desc->wckey = xstrdup(job_desc->wckey);
 		} else if (accounting_enforce & ACCOUNTING_ENFORCE_WCKEYS) {
 			/* This should never happen */
-			info("_job_create: no wckey was given.");
+			info("_job_create: no wckey was given for job submit.");
 				return ESLURM_INVALID_WCKEY;
 		}
 	}
@@ -2850,13 +3181,16 @@ _copy_job_desc_to_job_record(job_desc_msg_t * job_desc,
 
 	job_ptr->partition = xstrdup(part_ptr->name);
 	job_ptr->part_ptr = part_ptr;
+	
 	if (job_desc->job_id != NO_VAL)		/* already confirmed unique */
 		job_ptr->job_id = job_desc->job_id;
 	else
 		_set_job_id(job_ptr);
 
 	if (job_desc->name)
-		job_ptr->name = xstrdup(job_desc->name);	
+		job_ptr->name = xstrdup(job_desc->name);
+	if (job_desc->wckey)
+		job_ptr->wckey = xstrdup(job_desc->wckey);
 
 	_add_job_hash(job_ptr);
 
@@ -2868,6 +3202,7 @@ _copy_job_desc_to_job_record(job_desc_msg_t * job_desc,
 	job_ptr->alloc_node = xstrdup(job_desc->alloc_node);
 	job_ptr->account    = xstrdup(job_desc->account);
 	job_ptr->network    = xstrdup(job_desc->network);
+	job_ptr->resv_name  = xstrdup(job_desc->reservation);
 	job_ptr->comment    = xstrdup(job_desc->comment);
 	if (!wiki_sched_test) {
 		char *sched_type = slurm_get_sched_type();
@@ -2879,18 +3214,26 @@ _copy_job_desc_to_job_record(job_desc_msg_t * job_desc,
 	}
 	if (wiki_sched && job_ptr->comment &&
 	    strstr(job_ptr->comment, "QOS:")) {
+		acct_qos_rec_t qos_rec;
+
+		memset(&qos_rec, 0, sizeof(acct_qos_rec_t));
+
 		if (strstr(job_ptr->comment, "FLAGS:PREEMPTOR"))
-			job_ptr->qos = QOS_EXPEDITE;
+			qos_rec.name = "expedite";
 		else if (strstr(job_ptr->comment, "FLAGS:PREEMPTEE"))
-			job_ptr->qos = QOS_STANDBY;
+			qos_rec.name = "standby";
 		else
-			job_ptr->qos = QOS_NORMAL;
-	}
-	if (job_desc->priority != NO_VAL) /* already confirmed submit_uid==0 */
-		job_ptr->priority = job_desc->priority;
-	else {
-		_set_job_prio(job_ptr);
-		job_ptr->priority -= ((int)job_desc->nice - NICE_OFFSET);
+			qos_rec.name = "normal";
+		
+		if((assoc_mgr_fill_in_qos(acct_db_conn, &qos_rec,
+					  accounting_enforce,
+					  (acct_qos_rec_t **)&job_ptr->qos_ptr))
+		   != SLURM_SUCCESS) {
+			verbose("Invalid qos (%s) for job_id %u", 
+				qos_rec.name, job_ptr->job_id);
+			/* not a fatal error, qos could have been removed */
+		} else 
+			job_ptr->qos = qos_rec.id;
 	}
 
 	if (job_desc->kill_on_node_fail != (uint16_t) NO_VAL)
@@ -2907,12 +3250,15 @@ _copy_job_desc_to_job_record(job_desc_msg_t * job_desc,
 	job_ptr->mail_type = job_desc->mail_type;
 	job_ptr->mail_user = xstrdup(job_desc->mail_user);
 
+	job_ptr->ckpt_interval = job_desc->ckpt_interval;
+
 	detail_ptr = job_ptr->details;
 	detail_ptr->argc = job_desc->argc;
 	detail_ptr->argv = job_desc->argv;
 	job_desc->argv   = (char **) NULL; /* nothing left */
 	job_desc->argc   = 0;		   /* nothing left */
 	detail_ptr->acctg_freq = job_desc->acctg_freq;
+	detail_ptr->nice       = job_desc->nice;
 	detail_ptr->open_mode  = job_desc->open_mode;
 	detail_ptr->min_nodes  = job_desc->min_nodes;
 	detail_ptr->max_nodes  = job_desc->max_nodes;
@@ -2940,16 +3286,21 @@ _copy_job_desc_to_job_record(job_desc_msg_t * job_desc,
 		detail_ptr->cpus_per_task = MAX(job_desc->cpus_per_task, 1);
 	else
 		detail_ptr->cpus_per_task = 1;
-	if (job_desc->ntasks_per_node != (uint16_t) NO_VAL)
+	if (job_desc->job_min_procs != (uint16_t) NO_VAL)
+		detail_ptr->job_min_procs = job_desc->job_min_procs;
+	if (job_desc->ntasks_per_node != (uint16_t) NO_VAL) {
 		detail_ptr->ntasks_per_node = job_desc->ntasks_per_node;
+		detail_ptr->job_min_procs = MAX(detail_ptr->job_min_procs,
+						(detail_ptr->cpus_per_task *
+						 detail_ptr->ntasks_per_node));
+	} else {
+		detail_ptr->job_min_procs = MAX(detail_ptr->job_min_procs,
+						detail_ptr->cpus_per_task);
+	}
 	if (job_desc->requeue != (uint16_t) NO_VAL)
 		detail_ptr->requeue = MIN(job_desc->requeue, 1);
 	else
 		detail_ptr->requeue = slurmctld_conf.job_requeue;
-	if (job_desc->job_min_procs != (uint16_t) NO_VAL)
-		detail_ptr->job_min_procs = job_desc->job_min_procs;
-	detail_ptr->job_min_procs = MAX(detail_ptr->job_min_procs,
-					detail_ptr->cpus_per_task);
 	if (job_desc->job_min_memory != NO_VAL)
 		detail_ptr->job_min_memory = job_desc->job_min_memory;
 	if (job_desc->job_min_tmp_disk != NO_VAL)
@@ -2970,6 +3321,16 @@ _copy_job_desc_to_job_record(job_desc_msg_t * job_desc,
 		detail_ptr->begin_time = job_desc->begin_time;
 	job_ptr->select_jobinfo = 
 		select_g_copy_jobinfo(job_desc->select_jobinfo);
+
+	if (job_desc->ckpt_dir)
+		detail_ptr->ckpt_dir = xstrdup(job_desc->ckpt_dir);
+	else
+		detail_ptr->ckpt_dir = xstrdup(detail_ptr->work_dir);
+	
+	/* The priority needs to be set after this since we don't have
+	   an association rec yet
+	*/
+
 	detail_ptr->mc_ptr = _set_multi_core_data(job_desc);	
 	*job_rec_ptr = job_ptr;
 	return SLURM_SUCCESS;
@@ -3055,37 +3416,175 @@ void job_time_limit(void)
 	struct job_record *job_ptr;
 	time_t now = time(NULL);
 	time_t old = now - slurmctld_conf.inactive_limit;
+	time_t over_run;
+	int resv_status = 0;
+	uint64_t job_cpu_usage_mins = 0;
+	if (slurmctld_conf.over_time_limit == (uint16_t) INFINITE)
+		over_run = now - (365 * 24 * 60 * 60);	/* one year */
+	else
+		over_run = now - (slurmctld_conf.over_time_limit  * 60);
 
+	begin_job_resv_check();
 	job_iterator = list_iterator_create(job_list);
-	while ((job_ptr =
-		(struct job_record *) list_next(job_iterator))) {
+	while ((job_ptr =(struct job_record *) list_next(job_iterator))) {
+/* 		acct_qos_rec_t *qos = NULL; */
+		acct_association_rec_t *assoc =	NULL;
+
 		xassert (job_ptr->magic == JOB_MAGIC);
+
+		resv_status = job_resv_check(job_ptr);
 		if (job_ptr->job_state != JOB_RUNNING)
 			continue;
 
+/* 		qos = (acct_qos_rec_t *)job_ptr->qos_ptr; */
+		assoc =	(acct_association_rec_t *)job_ptr->assoc_ptr;
+
+		/* find out how many cpu minutes this job has been
+		   running for. */
+		job_cpu_usage_mins = (uint64_t)
+			((((now - job_ptr->start_time)
+			   - job_ptr->tot_sus_time) / 60) 
+			 * job_ptr->total_procs);
+
 		/* Consider a job active if it has any active steps */
-		if (job_ptr->step_list
-		    &&  (list_count(job_ptr->step_list) > 0))
+		if (job_ptr->step_list &&
+		    (list_count(job_ptr->step_list) > 0))
 			job_ptr->time_last_active = now;
 
-		if (slurmctld_conf.inactive_limit
-		    &&  (job_ptr->time_last_active <= old)
-		    &&  (job_ptr->part_ptr)
-		    &&  (job_ptr->part_ptr->root_only == 0)) {
+		if (slurmctld_conf.inactive_limit &&
+		    (job_ptr->time_last_active <= old) &&
+		    (job_ptr->part_ptr) &&
+		    (job_ptr->part_ptr->root_only == 0)) {
 			/* job inactive, kill it */
 			info("Inactivity time limit reached for JobId=%u",
 			     job_ptr->job_id);
 			_job_timed_out(job_ptr);
 			job_ptr->state_reason = FAIL_INACTIVE_LIMIT;
+			xfree(job_ptr->state_desc);
 			continue;
 		}
-		if ((job_ptr->time_limit != INFINITE)
-		    &&  (job_ptr->end_time <= now)) {
+		if ((job_ptr->time_limit != INFINITE) &&
+		    (job_ptr->end_time <= over_run)) {
 			last_job_update = now;
 			info("Time limit exhausted for JobId=%u",
 			     job_ptr->job_id);
 			_job_timed_out(job_ptr);
 			job_ptr->state_reason = FAIL_TIMEOUT;
+			xfree(job_ptr->state_desc);
+			continue;
+		}
+
+		if (resv_status != SLURM_SUCCESS) {
+			last_job_update = now;
+			info("Reservation ended for JobId=%u",
+			     job_ptr->job_id);
+			_job_timed_out(job_ptr);
+			job_ptr->state_reason = FAIL_TIMEOUT;
+			xfree(job_ptr->state_desc);
+			continue;
+		}
+
+		/* Too be added later once qos actually works.  The
+		 * idea here is for qos to trump what an association
+		 * has set for a limit, so if an association set of
+		 * wall 10 mins and the qos has 20 mins set and the
+		 * job has been running for 11 minutes it continues
+		 * until 20.
+		 */
+/* 		if(qos) { */
+/* 			slurm_mutex_lock(&assoc_mgr_qos_lock); */
+/* 			if ((qos->grp_cpu_mins != (uint64_t)NO_VAL) */
+/* 			    && (qos->grp_cpu_mins != (uint64_t)INFINITE) */
+/* 			    && ((uint64_t)qos->usage_raw  */
+/* 				>= qos->grp_cpu_mins)) { */
+/* 				last_job_update = now; */
+/* 				info("QOS %s group max cpu minutes is " */
+/* 				     "at or exceeds %llu with %Lf for JobId=%u", */
+/* 				     qos->name, qos->grp_cpu_mins, */
+/* 				     qos->usage_raw, job_ptr->job_id); */
+/* 				_job_timed_out(job_ptr); */
+/* 				job_ptr->state_reason = FAIL_TIMEOUT; */
+/* 			} */
+
+/* 			if ((qos->max_wall_pj != NO_VAL) */
+/* 			    && (qos->max_wall_pj != INFINITE) */
+/* 			    && (job_ptr-> >= qos->max_wall_pj)) { */
+/* 				last_job_update = now; */
+/* 				info("QOS %s group max cpu minutes is " */
+/* 				     "at or exceeds %llu with %Lf for JobId=%u", */
+/* 				     qos->name, qos->grp_cpu_mins, */
+/* 				     qos->usage_raw, job_ptr->job_id); */
+/* 				_job_timed_out(job_ptr); */
+/* 				job_ptr->state_reason = FAIL_TIMEOUT; */
+/* 			} */
+/* 			slurm_mutex_unlock(&assoc_mgr_qos_lock); */
+
+/* 			if(job_ptr->state_reason == FAIL_TIMEOUT) { */
+/* 				xfree(job_ptr->state_desc); */
+/* 				continue; */
+/* 			} */
+/* 		} */
+
+		/* handle any association stuff here */
+		slurm_mutex_lock(&assoc_mgr_association_lock);
+		while(assoc) {
+			uint64_t usage_mins =
+				(uint64_t)(assoc->usage_raw / 60.0);
+			uint32_t wall_mins = assoc->grp_used_wall / 60;
+			
+			if ((assoc->grp_cpu_mins != (uint64_t)NO_VAL)
+			    && (assoc->grp_cpu_mins != (uint64_t)INFINITE)
+			    && (usage_mins >= assoc->grp_cpu_mins)) {
+				info("Job %u timed out, "
+				     "assoc %u is at or exceeds "
+				     "group max cpu minutes limit %llu "
+				     "with %Lf for account %s",
+				     job_ptr->job_id, assoc->id,
+				     assoc->grp_cpu_mins, 
+				     usage_mins, assoc->acct);
+				job_ptr->state_reason = FAIL_TIMEOUT;
+				break;
+			}
+
+			if ((assoc->grp_wall != NO_VAL)
+			    && (assoc->grp_wall != INFINITE)
+			    && (wall_mins >= assoc->grp_wall)) {
+				info("Job %u timed out, "
+				     "assoc %u is at or exceeds "
+				     "group wall limit %u "
+				     "with %u for account %s",
+				     job_ptr->job_id, assoc->id,
+				     assoc->grp_wall, 
+				     wall_mins, assoc->acct);
+				job_ptr->state_reason = FAIL_TIMEOUT;
+				break;
+			}
+
+			if ((assoc->max_cpu_mins_pj != (uint64_t)NO_VAL)
+			    && (assoc->max_cpu_mins_pj != (uint64_t)INFINITE)
+			    && (job_cpu_usage_mins >= assoc->max_cpu_mins_pj)) {
+				info("Job %u timed out, "
+				     "assoc %u is at or exceeds "
+				     "max cpu minutes limit %llu "
+				     "with %Lf for account %s",
+				     job_ptr->job_id, assoc->id,
+				     assoc->max_cpu_mins_pj, 
+				     job_cpu_usage_mins, assoc->acct);
+				job_ptr->state_reason = FAIL_TIMEOUT;
+				break;
+			}
+
+			assoc = assoc->parent_assoc_ptr;
+			/* these limits don't apply to the root assoc */
+			if(assoc == assoc_mgr_root_assoc)
+				break;
+		}
+		slurm_mutex_unlock(&assoc_mgr_association_lock);
+		
+		if(job_ptr->state_reason == FAIL_TIMEOUT) {
+			last_job_update = now;
+			_job_timed_out(job_ptr);
+			xfree(job_ptr->state_desc);
 			continue;
 		}
 
@@ -3095,6 +3594,7 @@ void job_time_limit(void)
 	}
 
 	list_iterator_destroy(job_iterator);
+	fini_job_resv_check();
 }
 
 /* Terminate a job that has exhausted its time limit */
@@ -3170,7 +3670,7 @@ static int _validate_job_desc(job_desc_msg_t * job_desc_msg, int allocate,
 		}
 		dup_job_ptr = find_job_record((uint32_t) job_desc_msg->job_id);
 		if (dup_job_ptr && 
-		    (!(IS_JOB_FINISHED(dup_job_ptr)))) {
+		    (!(IS_JOB_COMPLETED(dup_job_ptr)))) {
 			info("attempt re-use active job_id %u", 
 			     job_desc_msg->job_id);
 			return ESLURM_DUPLICATE_JOB_ID;
@@ -3251,30 +3751,30 @@ static void _list_delete_job(void *job_entry)
 	*job_pptr = job_ptr->job_next;
 
 	delete_job_details(job_ptr);
-	xfree(job_ptr->alloc_node);
-	xfree(job_ptr->name);
-	xfree(job_ptr->nodes);
-	xfree(job_ptr->nodes_completing);
-	FREE_NULL_BITMAP(job_ptr->node_bitmap);
-	xfree(job_ptr->partition);
-	xfree(job_ptr->cpus_per_node);
-	xfree(job_ptr->cpu_count_reps);
-	xfree(job_ptr->node_addr);
 	xfree(job_ptr->account);
-	xfree(job_ptr->resp_host);
+	xfree(job_ptr->alloc_node);
+	xfree(job_ptr->comment);
 	xfree(job_ptr->licenses);
 	if (job_ptr->license_list)
 		list_destroy(job_ptr->license_list);
 	xfree(job_ptr->mail_user);
+	xfree(job_ptr->name);
 	xfree(job_ptr->network);
-	xfree(job_ptr->alloc_lps);
-	xfree(job_ptr->used_lps);
-	xfree(job_ptr->comment);
+	xfree(job_ptr->node_addr);
+	FREE_NULL_BITMAP(job_ptr->node_bitmap);
+	xfree(job_ptr->nodes);
+	xfree(job_ptr->nodes_completing);
+	xfree(job_ptr->partition);
+	xfree(job_ptr->resp_host);
+	xfree(job_ptr->resv_name);
+	free_select_job_res(&job_ptr->select_job);
 	select_g_free_jobinfo(&job_ptr->select_jobinfo);
+	xfree(job_ptr->state_desc);
 	if (job_ptr->step_list) {
 		delete_step_records(job_ptr, 0);
 		list_destroy(job_ptr->step_list);
 	}
+	xfree(job_ptr->wckey);
 	job_count--;
 	xfree(job_ptr);
 }
@@ -3452,15 +3952,16 @@ extern int pack_one_job(char **buffer_ptr, int *buffer_size,
 void pack_job(struct job_record *dump_job_ptr, Buf buffer)
 {
 	struct job_details *detail_ptr;
-	uint32_t size_tmp;
 
+	pack32(dump_job_ptr->assoc_id, buffer);
 	pack32(dump_job_ptr->job_id, buffer);
 	pack32(dump_job_ptr->user_id, buffer);
 	pack32(dump_job_ptr->group_id, buffer);
 
-	pack16(dump_job_ptr->job_state, buffer);
-	pack16(dump_job_ptr->batch_flag, buffer);
+	pack16(dump_job_ptr->job_state,    buffer);
+	pack16(dump_job_ptr->batch_flag,   buffer);
 	pack16(dump_job_ptr->state_reason, buffer);
+	pack16(dump_job_ptr->restart_cnt,  buffer);
 
 	pack32(dump_job_ptr->alloc_sid, buffer);
 	if ((dump_job_ptr->time_limit == NO_VAL) && dump_job_ptr->part_ptr)
@@ -3487,18 +3988,23 @@ void pack_job(struct job_record *dump_job_ptr, Buf buffer)
 	packstr(dump_job_ptr->network, buffer);
 	packstr(dump_job_ptr->comment, buffer);
 	packstr(dump_job_ptr->licenses, buffer);
+	packstr(dump_job_ptr->state_desc, buffer);
+	packstr(dump_job_ptr->resv_name, buffer);
 
 	pack32(dump_job_ptr->exit_code, buffer);
 
-	pack16(dump_job_ptr->num_cpu_groups, buffer);
-	size_tmp = dump_job_ptr->num_cpu_groups;
-	if (size_tmp < 0) {
-	    	size_tmp = 0;
-	}
-	pack32_array(dump_job_ptr->cpus_per_node, size_tmp, buffer);
-	pack32_array(dump_job_ptr->cpu_count_reps, size_tmp, buffer);
+	if (dump_job_ptr->select_job && 
+	    dump_job_ptr->select_job->cpu_array_cnt) {
+		pack32(dump_job_ptr->select_job->cpu_array_cnt, buffer);
+		pack16_array(dump_job_ptr->select_job->cpu_array_value,
+			     dump_job_ptr->select_job->cpu_array_cnt, buffer);
+		pack32_array(dump_job_ptr->select_job->cpu_array_reps,
+			     dump_job_ptr->select_job->cpu_array_cnt, buffer);
+	} else
+		pack32((uint32_t) 0, buffer);
 
 	packstr(dump_job_ptr->name, buffer);
+	packstr(dump_job_ptr->wckey, buffer);
 	packstr(dump_job_ptr->alloc_node, buffer);
 	pack_bit_fmt(dump_job_ptr->node_bitmap, buffer);
 	pack32(dump_job_ptr->num_procs, buffer);
@@ -3639,9 +4145,27 @@ void reset_job_bitmaps(void)
 	struct part_record *part_ptr;
 	bool job_fail = false;
 	time_t now = time(NULL);
+	static uint32_t cr_flag = NO_VAL, gang_flag = NO_VAL;
 
 	xassert(job_list);
 
+	if (cr_flag == NO_VAL) {
+		cr_flag = 0;  /* call is no-op for select/linear and bluegene */
+		if (select_g_get_info_from_plugin(SELECT_CR_PLUGIN,
+						  NULL, &cr_flag)) {
+			cr_flag = NO_VAL;	/* error */
+		}
+			
+	}
+	if (gang_flag == NO_VAL) {
+		char *sched_type = slurm_get_sched_type();
+		if (strcmp(sched_type, "sched/gang"))
+			gang_flag = 0;
+		else
+			gang_flag = 1;
+		xfree(sched_type);
+	}
+
 	job_iterator = list_iterator_create(job_list);
 	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
 		xassert (job_ptr->magic == JOB_MAGIC);
@@ -3677,10 +4201,20 @@ void reset_job_bitmaps(void)
 		    	      job_ptr->nodes, job_ptr->job_id);
 			job_fail = true;
 		}
+		reset_node_bitmap(job_ptr->select_job,
+				  job_ptr->node_bitmap);
+		if (!job_fail && !IS_JOB_FINISHED(job_ptr) && 
+		    job_ptr->select_job && (cr_flag || gang_flag) && 
+		    valid_select_job_res(job_ptr->select_job, 
+					 node_record_table_ptr, 
+					 slurmctld_conf.fast_schedule)) {
+			error("Aborting JobID %u due to change in socket/core "
+			      "configuration of allocated nodes",
+			      job_ptr->job_id);
+			job_fail = true;
+		}
 		_reset_step_bitmaps(job_ptr);
-		build_node_details(job_ptr);	/* set: num_cpu_groups, 
-						 * cpu_count_reps, node_cnt, 
-						 * cpus_per_node, node_addr */
+		build_node_details(job_ptr);	/* set node_addr */
 
 		if (_reset_detail_bitmaps(job_ptr))
 			job_fail = true;
@@ -3711,6 +4245,7 @@ void reset_job_bitmaps(void)
 			}
 			job_ptr->exit_code = MAX(job_ptr->exit_code, 1);
 			job_ptr->state_reason = FAIL_DOWN_NODE;
+			xfree(job_ptr->state_desc);
 			job_completion_logger(job_ptr);
 		}
 	}
@@ -3848,10 +4383,16 @@ static void _set_job_prio(struct job_record *job_ptr)
 {
 	xassert(job_ptr);
 	xassert (job_ptr->magic == JOB_MAGIC);
+	if (IS_JOB_FINISHED(job_ptr))
+		return;
 	job_ptr->priority = slurm_sched_initial_priority(maximum_prio,
 							 job_ptr);
-	if (job_ptr->priority > 0)
-		maximum_prio = MIN(job_ptr->priority, maximum_prio);
+	if ((job_ptr->priority <= 1) || 
+	    (job_ptr->direct_set_prio) ||
+	    (job_ptr->details && (job_ptr->details->nice != NICE_OFFSET)))
+		return;
+
+	maximum_prio = MIN(job_ptr->priority, maximum_prio);
 }
 
 
@@ -3865,7 +4406,7 @@ void reset_job_priority(void)
 
 	job_iterator = list_iterator_create(job_list);
 	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
-		if (job_ptr->priority == 1) {
+		if ((job_ptr->priority == 1) && (!IS_JOB_FINISHED(job_ptr))) {
 			_set_job_prio(job_ptr);
 			count++;
 		}
@@ -3883,15 +4424,24 @@ void reset_job_priority(void)
  */
 static bool _top_priority(struct job_record *job_ptr)
 {
-#ifdef HAVE_BG
-	/* On BlueGene, all jobs run ASAP. 
-	 * Priority only matters within a specific job size. */
-	return true;
-
-#else
 	struct job_details *detail_ptr = job_ptr->details;
 	bool top;
 
+#ifdef HAVE_BG
+	uint16_t static_part = 0;
+	int rc;
+
+	/* On BlueGene with static partitioning, we don't want to delay
+	 * jobs based upon priority since jobs of different sizes can 
+	 * execute on different sets of nodes. While sched/backfill would
+	 * eventually start the job if delayed here based upon priority,
+	 * that could delay the initiation of a job by a few seconds. */
+	rc = select_g_get_info_from_plugin(SELECT_STATIC_PART, job_ptr, 
+					   &static_part);
+	if ((rc == SLURM_SUCCESS) && (static_part == 1))
+		return true;
+#endif
+
 	if (job_ptr->priority == 0)	/* user held */
 		top = false;
 	else {
@@ -3908,6 +4458,18 @@ static bool _top_priority(struct job_record *job_ptr)
 				continue;
 			if (!job_independent(job_ptr2))
 				continue;
+			if ((job_ptr2->resv_name && (!job_ptr->resv_name)) ||
+			    ((!job_ptr2->resv_name) && job_ptr->resv_name))
+				continue;	/* different reservation */
+			if (job_ptr2->resv_name && job_ptr->resv_name &&
+			    (!strcmp(job_ptr2->resv_name, 
+				     job_ptr->resv_name))) {
+				/* same reservation */
+				if (job_ptr2->priority <= job_ptr->priority)
+					continue;
+				top = false;
+				break;
+			}
 			if (job_ptr2->part_ptr == job_ptr->part_ptr) {
 				/* same partition */
 				if (job_ptr2->priority <= job_ptr->priority)
@@ -3931,13 +4493,15 @@ static bool _top_priority(struct job_record *job_ptr)
 	}
 
 	if ((!top) && detail_ptr) {	/* not top prio */
-		if (job_ptr->priority == 0)		/* user/admin hold */
+		if (job_ptr->priority == 0) {		/* user/admin hold */
 			job_ptr->state_reason = WAIT_HELD;
-		else if (job_ptr->priority != 1)	/* not system hold */
+			xfree(job_ptr->state_desc);
+		} else if (job_ptr->priority != 1) {	/* not system hold */
 			job_ptr->state_reason = WAIT_PRIORITY;
+			xfree(job_ptr->state_desc);
+		}
 	}
 	return top;
-#endif
 }
 
 
@@ -4023,27 +4587,50 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 			info("update_job: setting time_limit to %u for "
 			     "job_id %u", job_specs->time_limit, 
 			     job_specs->job_id);
+			update_accounting = true;
+		} else if (IS_JOB_PENDING(job_ptr) && job_ptr->part_ptr &&
+			   (job_ptr->part_ptr->max_time >= 
+			    job_specs->time_limit)) {
+			job_ptr->time_limit = job_specs->time_limit;
+			info("update_job: setting time_limit to %u for "
+			     "job_id %u", job_specs->time_limit, 
+			     job_specs->job_id);
+			update_accounting = true;
 		} else {
-			error("Attempt to increase time limit for job %u",
-			      job_specs->job_id);
+			info("Attempt to increase time limit for job %u",
+			     job_specs->job_id);
 			error_code = ESLURM_ACCESS_DENIED;
 		}
 	}
 
+	if (job_specs->reservation) {
+		if (!IS_JOB_PENDING(job_ptr)) {
+			error_code = ESLURM_DISABLED;
+		} else {
+			int rc;
+			char *save_resv_name = job_ptr->resv_name;
+			job_ptr->resv_name = job_specs->reservation;
+			rc = validate_job_resv(job_ptr);
+			if (rc == SLURM_SUCCESS) {
+				info("update_job: setting reservation to %s "
+				     "for job_id %u", job_ptr->resv_name, 
+				     job_ptr->job_id);
+				xfree(save_resv_name);
+				job_specs->reservation = NULL;	/* Noth free */
+				update_accounting = true;
+			} else {
+				/* Restore reservation info */
+				job_ptr->resv_name = save_resv_name;
+				error_code = rc;
+			}
+		}
+	}
+
 	if (job_specs->comment && wiki_sched && (!super_user)) {
 		/* User must use Moab command to change job comment */
 		error("Attempt to change comment for job %u",
 		      job_specs->job_id);
 		error_code = ESLURM_ACCESS_DENIED;
-#if 0
-		if (wiki_sched && strstr(job_ptr->comment, "QOS:")) {
-			if (strstr(job_ptr->comment, "FLAGS:PREEMPTOR"))
-				job_ptr->qos = QOS_EXPEDITE;
-			else if (strstr(job_ptr->comment, "FLAGS:PREEMPTEE"))
-				job_ptr->qos = QOS_STANDBY;
-			else
-				job_ptr->qos = QOS_NORMAL;
-#endif
 	} else if (job_specs->comment) {
 		xfree(job_ptr->comment);
 		job_ptr->comment = job_specs->comment;
@@ -4052,12 +4639,28 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 		     job_ptr->comment, job_specs->job_id);
 
 		if (wiki_sched && strstr(job_ptr->comment, "QOS:")) {
+			acct_qos_rec_t qos_rec;
+
+			memset(&qos_rec, 0, sizeof(acct_qos_rec_t));
+
 			if (strstr(job_ptr->comment, "FLAGS:PREEMPTOR"))
-				job_ptr->qos = QOS_EXPEDITE;
+				qos_rec.name = "expedite";
 			else if (strstr(job_ptr->comment, "FLAGS:PREEMPTEE"))
-				job_ptr->qos = QOS_STANDBY;
+				qos_rec.name = "standby";
 			else
-				job_ptr->qos = QOS_NORMAL;
+				qos_rec.name = "normal";
+			
+			if((assoc_mgr_fill_in_qos(acct_db_conn, &qos_rec,
+						  accounting_enforce,
+						  (acct_qos_rec_t **)
+						  &job_ptr->qos_ptr))
+			   != SLURM_SUCCESS) {
+				verbose("Invalid qos (%s) for job_id %u",
+					qos_rec.name, job_ptr->job_id);
+				/* not a fatal error, qos could have
+				 * been removed */
+			} else 
+				job_ptr->qos = qos_rec.id;
 		}
 	}
 
@@ -4068,11 +4671,21 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 	}
 
 	if (job_specs->priority != NO_VAL) {
-		if (!IS_JOB_PENDING(job_ptr) || (detail_ptr == NULL)) 
+		/* If we are doing time slicing we could update the
+		   priority of the job while running to give better
+		   position (larger time slices) than competing jobs
+		*/
+		if (IS_JOB_FINISHED(job_ptr) || (detail_ptr == NULL)) 
 			error_code = ESLURM_DISABLED;
 		else if (super_user
 			 ||  (job_ptr->priority > job_specs->priority)) {
-			job_ptr->priority = job_specs->priority;
+			if(job_specs->priority == INFINITE) {
+				job_ptr->direct_set_prio = 0;
+				_set_job_prio(job_ptr);
+			} else {
+				job_ptr->direct_set_prio = 1;
+				job_ptr->priority = job_specs->priority;
+			}
 			info("update_job: setting priority to %u for "
 			     "job_id %u", job_ptr->priority, 
 			     job_specs->job_id);
@@ -4085,11 +4698,12 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 	}
 
 	if (job_specs->nice != NICE_OFFSET) {
-		if (!IS_JOB_PENDING(job_ptr)) 
+		if (IS_JOB_FINISHED(job_ptr)) 
 			error_code = ESLURM_DISABLED;
 		else if (super_user || (job_specs->nice < NICE_OFFSET)) {
-			job_ptr->priority -= ((int)job_specs->nice - 
-					      NICE_OFFSET);
+			job_ptr->details->nice = job_specs->nice;
+			_set_job_prio(job_ptr);
+			
 			info("update_job: setting priority to %u for "
 			     "job_id %u", job_ptr->priority,
 			     job_specs->job_id);
@@ -4356,58 +4970,8 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 		if (!IS_JOB_PENDING(job_ptr))
 			error_code = ESLURM_DISABLED;
 		else {
-			char *jname = NULL, *wckey = NULL;
-			char *jname_new = NULL;
-			char *temp = NULL;
-			
-			/* first set the jname to the job_ptr->name */
-			jname = xstrdup(job_ptr->name);
-			/* then grep for " since that is the delimiter for
-			   the wckey */
-			temp = strchr(jname, '\"');
-			if(temp) {
-				/* if we have a wckey set the " to NULL to
-				 * end the jname */
-				temp[0] = '\0';
-				/* increment and copy the remainder */
-				temp++;
-				wckey = xstrdup(temp);
-			}
-			
-			/* first set the jname to the job_specs->name */
-			jname_new = xstrdup(job_specs->name);
-			/* then grep for " since that is the delimiter for
-			   the wckey */
-			temp = strchr(jname_new, '\"');
-			if(temp) {
-				/* if we have a wckey set the " to NULL to
-				 * end the jname */
-				temp[0] = '\0';
-				/* increment and copy the remainder */
-				temp++;
-				xfree(wckey);
-				wckey = xstrdup(temp);
-			}
-			
-			if(jname_new && jname_new[0]) {
-				xfree(jname);
-				jname = jname_new;
-			}
-			
-			xfree(job_ptr->name);		
-			if(jname) {
-				xstrfmtcat(job_ptr->name, "%s", jname);
-				xfree(jname);
-			} 
-
-			if(wckey) {
-				int rc = update_job_wckey("update_job",
-							  job_ptr, 
-							  wckey);
-				if (rc != SLURM_SUCCESS)
-					error_code = rc;
-				xfree(wckey);			
-			}
+			job_ptr->name = job_specs->name;
+			job_specs->name = NULL;
 
 			info("update_job: setting name to %s for job_id %u",
 			     job_ptr->name, job_specs->job_id);
@@ -4415,6 +4979,21 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 		}
 	}
 
+	if (job_specs->wckey) {
+		if (!IS_JOB_PENDING(job_ptr))
+			error_code = ESLURM_DISABLED;
+		else {
+			int rc = update_job_wckey("update_job",
+						  job_ptr, 
+						  job_specs->wckey);
+			if (rc != SLURM_SUCCESS)
+				error_code = rc;
+			else 
+				update_accounting = true;
+		}
+	}
+
+
 	if (job_specs->account) {
 		if (!IS_JOB_PENDING(job_ptr))
 			error_code = ESLURM_DISABLED;
@@ -4425,7 +5004,6 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 				error_code = rc;
 			else
 				update_accounting = true;
-
 		}
 	}
 
@@ -4451,9 +5029,9 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 				error_code = ESLURM_INVALID_ACCOUNT;
 				/* Let update proceed. Note there is an invalid
 				 * association ID for accounting purposes */
-			} else {
+			} else 
 				job_ptr->assoc_id = assoc_rec.id;
-			}
+
 			xfree(job_ptr->partition);
 			job_ptr->partition = xstrdup(job_specs->partition);
 			job_ptr->part_ptr = tmp_part_ptr;
@@ -4760,6 +5338,7 @@ extern void validate_jobs_on_node(slurm_node_registration_status_msg_t *reg_msg)
 	int i, node_inx, jobs_on_node;
 	struct node_record *node_ptr;
 	struct job_record *job_ptr;
+	struct step_record *step_ptr;
 	time_t now = time(NULL);
 
 	node_ptr = find_node_record(reg_msg->node_name);
@@ -4785,7 +5364,8 @@ extern void validate_jobs_on_node(slurm_node_registration_status_msg_t *reg_msg)
 			error("Orphan job %u.%u reported on node %s",
 				reg_msg->job_id[i], reg_msg->step_id[i], 
 				reg_msg->node_name);
-			abort_job_on_node(reg_msg->job_id[i], job_ptr, node_ptr);
+			abort_job_on_node(reg_msg->job_id[i], 
+					  job_ptr, node_ptr);
 		}
 
 		else if ((job_ptr->job_state == JOB_RUNNING) ||
@@ -4801,6 +5381,11 @@ extern void validate_jobs_on_node(slurm_node_registration_status_msg_t *reg_msg)
 					 * batch jobs */
 					job_ptr->time_last_active = now;
 				}
+				step_ptr = find_step_record(job_ptr, 
+							    reg_msg->
+							    step_id[i]);
+				if (step_ptr)
+					step_ptr->time_last_active = now;
 			} else {
 				/* Typically indicates a job requeue and
 				 * restart on another nodes. A node from the
@@ -4826,8 +5411,8 @@ extern void validate_jobs_on_node(slurm_node_registration_status_msg_t *reg_msg)
 			error("Registered PENDING job %u.%u on node %s ",
 				reg_msg->job_id[i], reg_msg->step_id[i], 
 				reg_msg->node_name);
-			abort_job_on_node(reg_msg->job_id[i], job_ptr, 
-					  node_ptr);
+			abort_job_on_node(reg_msg->job_id[i], 
+					  job_ptr, node_ptr);
 		}
 
 		else {		/* else job is supposed to be done */
@@ -4857,24 +5442,33 @@ extern void validate_jobs_on_node(slurm_node_registration_status_msg_t *reg_msg)
 }
 
 /* Purge any batch job that should have its script running on node 
- * node_inx, but is not (i.e. its time_last_active != now) */
+ * node_inx, but is not. Allow "batch_start_timeout" secs for startup. 
+ *
+ * Also notify srun if any job steps should be active on this node
+ * but are not found. */
 static void _purge_lost_batch_jobs(int node_inx, time_t now)
 {
 	ListIterator job_iterator;
 	struct job_record *job_ptr;
-	time_t recent = now - slurm_get_batch_start_timeout();
+	uint16_t batch_start_timeout = slurm_get_batch_start_timeout() +
+				       slurm_get_resume_timeout();
+	time_t recent = now - batch_start_timeout;
 
 	job_iterator = list_iterator_create(job_list);
 	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
 		bool job_active = ((job_ptr->job_state == JOB_RUNNING) ||
 				   (job_ptr->job_state == JOB_SUSPENDED));
-		if ((!job_active)                       ||
-		    (job_ptr->batch_flag == 0)          ||
-		    (job_ptr->time_last_active == now)  ||
+		if ((!job_active) ||
+		    (!bit_test(job_ptr->node_bitmap, node_inx)))
+			continue;
+		if (job_ptr->batch_flag == 0) {
+			_notify_srun_missing_step(job_ptr, node_inx, now);
+			continue;
+		}
+		if (((job_ptr->time_last_active+batch_start_timeout) > now) ||
 		    (job_ptr->start_time >= recent)     ||
 		    (node_inx != bit_ffs(job_ptr->node_bitmap)))
 			continue;
-
 		info("Batch JobId=%u missing from master node, killing it", 
 			job_ptr->job_id);
 		job_complete(job_ptr->job_id, 0, false, NO_VAL);
@@ -4882,6 +5476,30 @@ static void _purge_lost_batch_jobs(int node_inx, time_t now)
 	list_iterator_destroy(job_iterator);
 }
 
+static void _notify_srun_missing_step(struct job_record *job_ptr, int node_inx, 
+				      time_t now)
+{
+	ListIterator step_iterator;
+	struct step_record *step_ptr;
+	char *node_name = node_record_table_ptr[node_inx].name;
+
+	xassert(job_ptr);
+	step_iterator = list_iterator_create (job_ptr->step_list);
+	while ((step_ptr = (struct step_record *) list_next (step_iterator))) {
+		if (step_ptr->time_last_active >= now) {
+			/* Back up timer in case more than one node 
+			 * registration happens at this same time.
+			 * We don't want this node's registration
+			 * to count toward a different node's 
+			 * registration message. */
+			step_ptr->time_last_active = now - 1;
+		} else if (step_ptr->host && step_ptr->port) {
+			srun_step_missing(step_ptr, node_name);
+		}
+	}		
+	list_iterator_destroy (step_iterator);
+}
+
 /*
  * abort_job_on_node - Kill the specific job_id on a specific node,
  *	the request is not processed immediately, but queued. 
@@ -5066,6 +5684,7 @@ static void _validate_job_files(List batch_dirs)
 			job_ptr->job_state = JOB_FAILED;
 			job_ptr->exit_code = 1;
 			job_ptr->state_reason = FAIL_SYSTEM;
+			xfree(job_ptr->state_desc);
 			job_ptr->start_time = job_ptr->end_time = time(NULL);
 			job_completion_logger(job_ptr);
 		}
@@ -5224,6 +5843,10 @@ extern bool job_epilog_complete(uint32_t job_id, char *node_name,
 				 * named socket purged, so delay for at 
 				 * least ten seconds. */
 				job_ptr->details->begin_time = time(NULL) + 10;
+				job_ptr->start_time = job_ptr->end_time = 0;
+				jobacct_storage_g_job_start(
+					acct_db_conn, slurmctld_cluster_name,
+					job_ptr);
 			}
 		}
 		return true;
@@ -5317,19 +5940,29 @@ extern bool job_independent(struct job_record *job_ptr)
 
 	if (detail_ptr && (detail_ptr->begin_time > now)) {
 		job_ptr->state_reason = WAIT_TIME;
+		xfree(job_ptr->state_desc);
+		return false;	/* not yet time */
+	}
+
+	if (job_test_resv_now(job_ptr) != SLURM_SUCCESS) {
+		job_ptr->state_reason = WAIT_RESERVATION;
+		xfree(job_ptr->state_desc);
 		return false;	/* not yet time */
 	}
 
 	rc = test_job_dependency(job_ptr);
 	if (rc == 0) {
 		bool send_acct_rec = false;
-		if (job_ptr->state_reason == WAIT_DEPENDENCY)
+		if (job_ptr->state_reason == WAIT_DEPENDENCY) {
 			job_ptr->state_reason = WAIT_NO_REASON;
+			xfree(job_ptr->state_desc);
+		}
 		if (detail_ptr && (detail_ptr->begin_time == 0)) {
 			detail_ptr->begin_time = now;
 			send_acct_rec = true;
 		} else if (job_ptr->state_reason == WAIT_TIME) {
 			job_ptr->state_reason = WAIT_NO_REASON;
+			xfree(job_ptr->state_desc);
 			send_acct_rec = true;
 		}
 		if (send_acct_rec) {
@@ -5343,12 +5976,14 @@ extern bool job_independent(struct job_record *job_ptr)
 		return true;
 	} else if (rc == 1) {
 		job_ptr->state_reason = WAIT_DEPENDENCY;
+		xfree(job_ptr->state_desc);
 		return false;
 	} else {	/* rc == 2 */
 		time_t now = time(NULL);
 		info("Job dependency can't be satisfied, cancelling job %u",
 			job_ptr->job_id);
 		job_ptr->job_state	= JOB_CANCELLED;
+		xfree(job_ptr->state_desc);
 		job_ptr->start_time	= now;
 		job_ptr->end_time	= now;
 		job_completion_logger(job_ptr);
@@ -5779,7 +6414,9 @@ extern int job_requeue (uid_t uid, uint32_t job_id, slurm_fd conn_fd)
 	job_ptr->job_state = JOB_PENDING;
 	if (job_ptr->node_cnt)
 		job_ptr->job_state |= JOB_COMPLETING;
+	
 	job_ptr->details->submit_time = now;
+	job_ptr->restart_cnt++;
 	/* Since the job completion logger removes the submit we need
 	   to add it again.
 	*/
@@ -5901,7 +6538,7 @@ static bool _validate_acct_policy(job_desc_msg_t *job_desc,
 		     >= assoc_ptr->grp_submit_jobs)) {
 			info("job submit for user %s(%u): "
 			     "group max submit job limit exceded %u "
-			     "for account %s",
+			     "for account '%s'",
 			     user_name,
 			     job_desc->user_id, 
 			     assoc_ptr->grp_submit_jobs,
@@ -5909,31 +6546,10 @@ static bool _validate_acct_policy(job_desc_msg_t *job_desc,
 			return false;
 		}
 
-		if ((assoc_ptr->grp_wall != NO_VAL) &&
-		    (assoc_ptr->grp_wall != INFINITE)) {
-			time_limit = assoc_ptr->grp_wall;
-			if (job_desc->time_limit == NO_VAL) {
-				if (part_ptr->max_time == INFINITE)
-					job_desc->time_limit = time_limit;
-				else 
-					job_desc->time_limit =
-						MIN(time_limit, 
-						    part_ptr->max_time);
-				timelimit_set = 1;
-			} else if (timelimit_set && 
-				   job_desc->time_limit > time_limit) {
-				job_desc->time_limit = time_limit;
-			} else if (job_desc->time_limit > time_limit) {
-				info("job submit for user %s(%u): "
-				     "time limit %u exceeds group "
-				     "time limit %u for account %s",
-				     user_name,
-				     job_desc->user_id, 
-				     job_desc->time_limit, time_limit,
-				     assoc_ptr->acct);
-				return false;
-			}
-		}
+		
+		/* for validation we don't need to look at 
+		 * assoc_ptr->grp_wall. It is checked while the job is running.
+		 */
 		
 		/* We don't need to look at the regular limits for
 		 * parents since we have pre-propogated them, so just
@@ -6067,6 +6683,7 @@ extern int job_cancel_by_assoc_id(uint32_t assoc_id)
 		   locked before this. */
 		job_signal(job_ptr->job_id, SIGKILL, 0, 0);
 		job_ptr->state_reason = FAIL_BANK_ACCOUNT;
+		xfree(job_ptr->state_desc);
 		cnt++;
 	}
 	list_iterator_destroy(job_iterator);
@@ -6083,7 +6700,7 @@ extern int job_cancel_by_assoc_id(uint32_t assoc_id)
 extern int update_job_account(char *module, struct job_record *job_ptr, 
 			      char *new_account)
 {
-	acct_association_rec_t assoc_rec, *assoc_ptr;
+	acct_association_rec_t assoc_rec;
 
 	if ((!IS_JOB_PENDING(job_ptr)) || (job_ptr->details == NULL)) {
 		info("%s: attempt to modify account for non-pending "
@@ -6097,12 +6714,14 @@ extern int update_job_account(char *module, struct job_record *job_ptr,
 	assoc_rec.partition = job_ptr->partition;
 	assoc_rec.acct      = new_account;
 	if (assoc_mgr_fill_in_assoc(acct_db_conn, &assoc_rec,
-				    accounting_enforce, &assoc_ptr)) {
+				    accounting_enforce,
+				    (acct_association_rec_t **)
+				    &job_ptr->assoc_ptr)) {
 		info("%s: invalid account %s for job_id %u",
 		     module, new_account, job_ptr->job_id);
 		return ESLURM_INVALID_ACCOUNT;
 	} else if(association_based_accounting 
-		  && !assoc_ptr 
+		  && !job_ptr->assoc_ptr 
 		  && !(accounting_enforce & ACCOUNTING_ENFORCE_ASSOCS)) {
 		/* if not enforcing associations we want to look for
 		   the default account and use it to avoid getting
@@ -6110,8 +6729,10 @@ extern int update_job_account(char *module, struct job_record *job_ptr,
 		*/
 		assoc_rec.acct = NULL;
 		assoc_mgr_fill_in_assoc(acct_db_conn, &assoc_rec,
-					accounting_enforce, &assoc_ptr);
-		if(!assoc_ptr) {
+					accounting_enforce, 
+					(acct_association_rec_t **)
+					&job_ptr->assoc_ptr);
+		if(!job_ptr->assoc_ptr) {
 			debug("%s: we didn't have an association for account "
 			      "'%s' and user '%u', and we can't seem to find "
 			      "a default one either.  Keeping new account "
@@ -6135,7 +6756,6 @@ extern int update_job_account(char *module, struct job_record *job_ptr,
 		     module, job_ptr->job_id);
 	}
 	job_ptr->assoc_id = assoc_rec.id;
-	job_ptr->assoc_ptr = (void *) assoc_ptr;
 
 	last_job_update = time(NULL);
 
@@ -6262,3 +6882,544 @@ extern int send_jobs_to_accounting()
 
 	return SLURM_SUCCESS;
 }
+
+/* Perform checkpoint operation on a job */
+extern int job_checkpoint(checkpoint_msg_t *ckpt_ptr, uid_t uid, 
+			  slurm_fd conn_fd)
+{
+	int rc = SLURM_SUCCESS;
+	struct job_record *job_ptr;
+	struct step_record *step_ptr;
+	checkpoint_resp_msg_t resp_data;
+	slurm_msg_t resp_msg;
+
+	slurm_msg_t_init(&resp_msg);
+	
+	/* find the job */
+	job_ptr = find_job_record (ckpt_ptr->job_id);
+	if (job_ptr == NULL) {
+		rc = ESLURM_INVALID_JOB_ID;
+		goto reply;
+	}
+	if ((uid != job_ptr->user_id) && ! validate_super_user(uid)) {
+		rc = ESLURM_ACCESS_DENIED ;
+		goto reply;
+	}
+	if (job_ptr->job_state == JOB_PENDING) {
+		rc = ESLURM_JOB_PENDING;
+		goto reply;
+	} else if (job_ptr->job_state == JOB_SUSPENDED) {
+		/* job can't get cycles for checkpoint 
+		 * if it is already suspended */
+		rc = ESLURM_DISABLED;
+		goto reply;
+	} else if (job_ptr->job_state != JOB_RUNNING) {
+		rc = ESLURM_ALREADY_DONE;
+		goto reply;
+	}
+
+	memset((void *)&resp_data, 0, sizeof(checkpoint_resp_msg_t));
+
+	if (job_ptr->batch_flag) { /* operate on batch job */
+		if ((ckpt_ptr->op == CHECK_CREATE) ||
+		    (ckpt_ptr->op == CHECK_VACATE)) {
+			if (job_ptr->details == NULL) {
+				rc = ESLURM_DISABLED;
+				goto reply;
+			}
+			if (ckpt_ptr->image_dir == NULL) {
+				if (job_ptr->details->ckpt_dir == NULL) {
+					rc = ESLURM_DISABLED;
+					goto reply;
+				}
+				ckpt_ptr->image_dir = xstrdup(job_ptr->details
+							      ->ckpt_dir);
+			}
+
+			rc = _checkpoint_job_record(job_ptr, 
+						    ckpt_ptr->image_dir);
+			if (rc != SLURM_SUCCESS)
+				goto reply;
+		}
+		/* append job id to ckpt image dir */
+		xstrfmtcat(ckpt_ptr->image_dir, "/%u", job_ptr->job_id);
+		rc = checkpoint_op(ckpt_ptr->job_id, ckpt_ptr->step_id, NULL,
+				   ckpt_ptr->op, ckpt_ptr->data,
+				   ckpt_ptr->image_dir, &resp_data.event_time, 
+				   &resp_data.error_code, &resp_data.error_msg);
+		info("checkpoint_op %u of %u.%u complete, rc=%d",
+		     ckpt_ptr->op, ckpt_ptr->job_id, ckpt_ptr->step_id, rc);
+		last_job_update = time(NULL);
+	} else {		/* operate on all of a job's steps */
+		int update_rc = -2;
+		ListIterator step_iterator;
+		
+		step_iterator = list_iterator_create (job_ptr->step_list);
+		while ((step_ptr = (struct step_record *) 
+					list_next (step_iterator))) {
+			char *image_dir = NULL;
+			if (ckpt_ptr->image_dir) {
+				image_dir = xstrdup(ckpt_ptr->image_dir);
+			} else {
+				image_dir = xstrdup(step_ptr->ckpt_dir);
+			}
+			xstrfmtcat(image_dir, "/%u.%hu", job_ptr->job_id, 
+				   step_ptr->step_id);
+			update_rc = checkpoint_op(ckpt_ptr->job_id,
+						  step_ptr->step_id,
+						  step_ptr,
+						  ckpt_ptr->op, 
+						  ckpt_ptr->data,
+						  image_dir,
+						  &resp_data.event_time,
+						  &resp_data.error_code,
+						  &resp_data.error_msg);
+			info("checkpoint_op %u of %u.%u complete, rc=%d",
+			     ckpt_ptr->op, ckpt_ptr->job_id, 
+			     step_ptr->step_id, rc);
+			rc = MAX(rc, update_rc);
+			xfree(image_dir);
+		}
+		if (update_rc != -2)	/* some work done */
+			last_job_update = time(NULL);
+		list_iterator_destroy (step_iterator);
+	}
+
+    reply:
+	if (conn_fd < 0)	/* periodic checkpoint */
+		return rc;
+	
+	if ((rc == SLURM_SUCCESS) &&
+	    ((ckpt_ptr->op == CHECK_ABLE) || (ckpt_ptr->op == CHECK_ERROR))) {
+		resp_msg.msg_type = RESPONSE_CHECKPOINT;
+		resp_msg.data = &resp_data;
+		(void) slurm_send_node_msg(conn_fd, &resp_msg);
+	} else {
+		return_code_msg_t rc_msg;
+		rc_msg.return_code = rc;
+		resp_msg.msg_type  = RESPONSE_SLURM_RC;
+		resp_msg.data      = &rc_msg;
+		(void) slurm_send_node_msg(conn_fd, &resp_msg);
+	}
+	return rc;
+}
+
+/*
+ * _checkpoint_job_record - save job to file for checkpoint
+ *
+ */
+static int _checkpoint_job_record (struct job_record *job_ptr, char *image_dir)
+{
+	static int high_buffer_size = (1024*1024);
+	char *ckpt_file = NULL, *old_file = NULL, *new_file = NULL;
+	int ckpt_fd, error_code = SLURM_SUCCESS;
+	Buf buffer = init_buf(high_buffer_size);
+
+	ckpt_file = xstrdup(slurmctld_conf.job_ckpt_dir);
+	xstrfmtcat(ckpt_file, "/%u.ckpt", job_ptr->job_id);
+
+	debug("_checkpoint_job_record: checkpoint job record of %u to file %s",
+	      job_ptr->job_id, ckpt_file);
+	
+	old_file = xstrdup(ckpt_file);
+	xstrcat(old_file, ".old");
+
+	new_file = xstrdup(ckpt_file);
+	xstrcat(new_file, ".new");
+
+	/* save version string */
+	packstr(JOB_CKPT_VERSION, buffer);
+
+	/* save checkpoint image directory */
+	packstr(image_dir, buffer);
+
+	_pack_job_for_ckpt(job_ptr, buffer);
+
+	ckpt_fd = creat(new_file, 0600);
+	if (ckpt_fd < 0) {
+		error("Can't ckpt job, create file %s error: %m",
+		      new_file);
+		error_code = errno;
+	} else {
+		int pos = 0, nwrite = get_buf_offset(buffer), amount;
+		char *data = (char *)get_buf_data(buffer);
+		while (nwrite > 0) {
+			amount = write(ckpt_fd, &data[pos], nwrite);
+			if ((amount < 0) && (errno != EINTR)) {
+				error("Error writing file %s, %m", new_file);
+				error_code = errno;
+				break;
+			} else if (amount >= 0) {
+				nwrite -= amount;
+				pos    += amount;
+			}
+		}
+		fsync(ckpt_fd);
+		close(ckpt_fd);
+	}
+	if (error_code)
+		(void) unlink(new_file);
+	else {			/* file shuffle */
+		(void) unlink(old_file);
+		(void) link(ckpt_file, old_file);
+		(void) unlink(ckpt_file);
+		(void) link(new_file, ckpt_file);
+		(void) unlink(new_file);
+	}
+
+	xfree(ckpt_file);
+	xfree(old_file);
+	xfree(new_file);
+	free_buf(buffer);
+
+	return error_code;
+}
+
+/*
+ * _pack_job_for_ckpt - save RUNNING job to buffer for checkpoint
+ *
+ *   Just save enough information to restart it
+ *
+ * IN job_ptr - id of the job to be checkpointed
+ * IN buffer - buffer to save the job state
+ */
+static void _pack_job_for_ckpt (struct job_record *job_ptr, Buf buffer)
+{
+	slurm_msg_t msg;
+	job_desc_msg_t *job_desc;
+
+	/* save allocated nodes */
+	packstr(job_ptr->nodes, buffer);
+
+	/* save job req */
+	job_desc = _copy_job_record_to_job_desc(job_ptr);
+	msg.msg_type = REQUEST_SUBMIT_BATCH_JOB;
+	msg.data = job_desc;
+	pack_msg(&msg, buffer);
+
+	/* free the environment since all strings are stored in one 
+	 * xmalloced buffer */
+	if (job_desc->environment) {
+		xfree(job_desc->environment[0]);
+		xfree(job_desc->environment);
+		job_desc->env_size = 0;
+	}
+	slurm_free_job_desc_msg(job_desc);
+}
+
+/*
+ * _copy_job_record_to_job_desc - construct a job_desc_msg_t for a job.
+ * IN job_ptr - the job record
+ * RET the job_desc_msg_t, NULL on error
+ */
+static job_desc_msg_t *
+_copy_job_record_to_job_desc(struct job_record *job_ptr)
+{
+	job_desc_msg_t *job_desc;
+	struct job_details *details = job_ptr->details;
+	multi_core_data_t *mc_ptr = details->mc_ptr;
+	int i;
+
+	/* construct a job_desc_msg_t from job */
+	job_desc = xmalloc(sizeof(job_desc_msg_t));
+	if (!job_desc) {
+		error("_pack_job_for_ckpt: memory exhausted");
+		return NULL;
+	}
+
+	job_desc->account           = xstrdup(job_ptr->account);
+	job_desc->acctg_freq        = details->acctg_freq;
+	job_desc->alloc_node        = xstrdup(job_ptr->alloc_node);
+	/* Since the allocating salloc or srun is not expected to exist
+	 * when this checkpointed job is restarted, do not save these:
+	 *
+	 * job_desc->alloc_resp_port   = job_ptr->alloc_resp_port;
+	 * job_desc->alloc_sid         = job_ptr->alloc_sid;
+	 */
+	job_desc->argc              = details->argc;
+	job_desc->argv              = xmalloc(sizeof(char *) * job_desc->argc);
+	for (i = 0; i < job_desc->argc; i ++)
+		job_desc->argv[i]   = xstrdup(details->argv[i]);
+	job_desc->begin_time        = details->begin_time;
+	job_desc->ckpt_interval     = job_ptr->ckpt_interval;
+	job_desc->ckpt_dir          = xstrdup(details->ckpt_dir);
+	job_desc->comment           = xstrdup(job_ptr->comment);
+	job_desc->contiguous        = details->contiguous;
+	job_desc->cpu_bind          = xstrdup(details->cpu_bind);
+	job_desc->cpu_bind_type     = details->cpu_bind_type;
+	job_desc->dependency        = xstrdup(details->dependency);
+	job_desc->environment       = get_job_env(job_ptr, &job_desc->env_size);
+	job_desc->err               = xstrdup(details->err);
+	job_desc->exc_nodes         = xstrdup(details->exc_nodes);
+	job_desc->features          = xstrdup(details->features);
+	job_desc->group_id          = job_ptr->group_id;
+	job_desc->immediate         = 0; /* nowhere to get this value */
+	job_desc->in                = xstrdup(details->in);
+	job_desc->job_id            = job_ptr->job_id; /* XXX */
+	job_desc->kill_on_node_fail = job_ptr->kill_on_node_fail;
+	job_desc->licenses          = xstrdup(job_ptr->licenses);
+	job_desc->mail_type         = job_ptr->mail_type;
+	job_desc->mail_user         = xstrdup(job_ptr->mail_user);
+	job_desc->mem_bind          = xstrdup(details->mem_bind);
+	job_desc->mem_bind_type     = details->mem_bind_type;
+	job_desc->name              = xstrdup(job_ptr->name);
+	job_desc->network           = xstrdup(job_ptr->network);
+	job_desc->nice              = details->nice;
+	job_desc->num_tasks         = details->num_tasks;
+	job_desc->open_mode         = details->open_mode;
+	job_desc->other_port        = job_ptr->other_port; 
+	job_desc->out               = xstrdup(details->out);
+	job_desc->overcommit        = details->overcommit;
+	job_desc->partition         = xstrdup(job_ptr->partition);
+	job_desc->plane_size        = details->plane_size;
+	job_desc->priority          = job_ptr->priority;
+	job_desc->resp_host         = xstrdup(job_ptr->resp_host);
+	job_desc->req_nodes         = xstrdup(details->req_nodes);
+	job_desc->requeue           = details->requeue;
+	job_desc->reservation       = xstrdup(job_ptr->resv_name);
+	job_desc->script            = get_job_script(job_ptr);
+	job_desc->shared            = details->shared;
+	job_desc->task_dist         = details->task_dist;
+	job_desc->time_limit        = job_ptr->time_limit;
+	job_desc->user_id           = job_ptr->user_id;
+	job_desc->work_dir          = xstrdup(details->work_dir);
+	job_desc->job_min_procs     = details->job_min_procs;
+	job_desc->job_min_sockets   = mc_ptr->job_min_sockets;
+	job_desc->job_min_cores     = mc_ptr->job_min_cores;
+	job_desc->job_min_threads   = mc_ptr->job_min_threads;
+	job_desc->job_min_memory    = details->job_min_memory;
+	job_desc->job_min_tmp_disk  = details->job_min_tmp_disk;
+	job_desc->num_procs         = job_ptr->num_procs;
+	job_desc->min_nodes         = details->min_nodes;
+	job_desc->max_nodes         = details->max_nodes;
+	job_desc->min_sockets       = mc_ptr->min_sockets;
+	job_desc->max_sockets       = mc_ptr->max_sockets;
+	job_desc->min_cores         = mc_ptr->min_cores;
+	job_desc->max_cores         = mc_ptr->max_cores;
+	job_desc->min_threads       = mc_ptr->min_threads;
+	job_desc->max_threads       = mc_ptr->max_threads;
+	job_desc->cpus_per_task     = details->cpus_per_task;
+	job_desc->ntasks_per_node   = details->ntasks_per_node;
+	job_desc->ntasks_per_socket = mc_ptr->ntasks_per_socket;
+	job_desc->ntasks_per_core   = mc_ptr->ntasks_per_core;
+	job_desc->wckey             = xstrdup(job_ptr->wckey);
+#if 0
+	/* select_jobinfo is unused at job submit time, only it's 
+	 * components are set. We recover those from the structure below.
+	 * job_desc->select_jobinfo = select_g_copy_jobinfo(job_ptr->
+							    select_jobinfo); */
+
+	/* The following fields are used only on BlueGene systems.
+	 * Since BlueGene does not use the checkpoint/restart logic today,
+	 * we do not them. */
+	select_g_get_jobinfo(job_ptr->select_jobinfo, SELECT_DATA_GEOMETRY, 
+			     &job_desc->geometry);
+	select_g_get_jobinfo(job_ptr->select_jobinfo, SELECT_DATA_CONN_TYPE, 
+			     &job_desc->conn_type);
+	select_g_get_jobinfo(job_ptr->select_jobinfo, SELECT_DATA_REBOOT, 
+			     &job_desc->reboot);
+	select_g_get_jobinfo(job_ptr->select_jobinfo, SELECT_DATA_ROTATE, 
+			     &job_desc->rotate);
+	select_g_get_jobinfo(job_ptr->select_jobinfo, SELECT_DATA_BLRTS_IMAGE, 
+			     &job_desc->blrtsimage);
+	select_g_get_jobinfo(job_ptr->select_jobinfo, SELECT_DATA_LINUX_IMAGE, 
+			     &job_desc->linuximage);
+	select_g_get_jobinfo(job_ptr->select_jobinfo, 
+			     SELECT_DATA_MLOADER_IMAGE, 
+			     &job_desc->mloaderimage);
+	select_g_get_jobinfo(job_ptr->select_jobinfo, 
+			     SELECT_DATA_RAMDISK_IMAGE, 
+			     &job_desc->ramdiskimage);
+#endif
+
+	return job_desc;
+}
+
+
+/*
+ * job_restart - Restart a batch job from checkpointed state
+ *
+ * Restart a job is similar to submit a new job, except that
+ * the job requirements is load from the checkpoint file and
+ * the job id is restored.
+ *
+ * IN ckpt_ptr - checkpoint request message 
+ * IN uid - user id of the user issuing the RPC
+ * IN conn_fd - file descriptor on which to send reply
+ * RET 0 on success, otherwise ESLURM error code
+ */
+extern int job_restart(checkpoint_msg_t *ckpt_ptr, uid_t uid, slurm_fd conn_fd)
+{
+	struct job_record *job_ptr;
+	char *image_dir, *ckpt_file, *data, *ver_str = NULL;
+	char *alloc_nodes = NULL;
+	int data_size;
+	Buf buffer;
+	uint32_t tmp_uint32;
+	slurm_msg_t msg, resp_msg;
+	return_code_msg_t rc_msg;
+	job_desc_msg_t *job_desc = NULL;
+	int rc = SLURM_SUCCESS;
+
+	if (ckpt_ptr->step_id != SLURM_BATCH_SCRIPT) {
+		rc = ESLURM_NOT_SUPPORTED;
+		goto reply;
+	}
+	
+	if ((job_ptr = find_job_record(ckpt_ptr->job_id)) &&
+	    ! IS_JOB_FINISHED(job_ptr)) {
+		rc = ESLURM_DISABLED;
+		goto reply;
+	}
+
+	ckpt_file = xstrdup(slurmctld_conf.job_ckpt_dir);
+	xstrfmtcat(ckpt_file, "/%u.ckpt", ckpt_ptr->job_id);
+
+	data = _read_job_ckpt_file(ckpt_file, &data_size);
+	xfree(ckpt_file);
+	
+	if (data == NULL) {
+		rc = errno;
+		xfree (ckpt_file);
+		goto reply;
+	}
+	buffer = create_buf(data, data_size);
+
+	/* unpack version string */
+	safe_unpackstr_xmalloc(&ver_str, &tmp_uint32, buffer);
+	debug3("Version string in job_ckpt header is %s", ver_str);
+	if ((!ver_str) || (strcmp(ver_str, JOB_CKPT_VERSION) != 0)) {
+		error("***************************************************");
+		error("Can not restart from job ckpt, incompatable version");
+		error("***************************************************");
+		rc = EINVAL;
+		goto unpack_error;
+	}
+
+	/* unpack checkpoint image directory */
+	safe_unpackstr_xmalloc(&image_dir, &tmp_uint32, buffer);
+
+	/* unpack the allocated nodes */
+	safe_unpackstr_xmalloc(&alloc_nodes, &tmp_uint32, buffer);
+
+	/* unpack the job req */
+	msg.msg_type = REQUEST_SUBMIT_BATCH_JOB;
+	if (unpack_msg(&msg, buffer) != SLURM_SUCCESS) {
+		goto unpack_error;
+	}
+
+	job_desc = msg.data;
+
+	/* sanity check */
+	if (job_desc->job_id != ckpt_ptr->job_id) {
+		error("saved job id(%u) is different from required job id(%u)",
+		      job_desc->job_id, ckpt_ptr->job_id);
+		rc = EINVAL;
+		goto unpack_error;
+	}
+	if (! validate_super_user(uid) && (job_desc->user_id != uid)) {
+		error("Security violation, user %u not allowed to restart "
+		      "job %u of user %u",
+		      uid, ckpt_ptr->job_id, job_desc->user_id);
+		rc = EPERM;
+		goto unpack_error;
+	}
+
+	if (ckpt_ptr->data == 1) { /* stick to nodes */
+		xfree(job_desc->req_nodes);
+		job_desc->req_nodes = alloc_nodes;
+		alloc_nodes = NULL;	/* Nothing left to xfree */
+	}
+
+	/* set open mode to append */
+	job_desc->open_mode = OPEN_MODE_APPEND;
+
+	/* Set new job priority */
+	job_desc->priority = NO_VAL;
+	
+	/*
+	 * XXX: we set submit_uid to 0 in the following job_allocate() call
+	 * This is for setting the job_id to the original one.
+	 * But this will bypass some partition access permission checks.
+	 * TODO: fix this.
+	 */
+	rc = job_allocate(job_desc,
+			  0,		/* immediate */
+			  0,		/* will_run */
+			  NULL, 	/* resp */
+			  0,		/* allocate */
+			  0,		/* submit_uid. set to 0 to set job_id */
+			  &job_ptr);
+
+	/* set restart directory */
+	if (job_ptr) {
+		if (ckpt_ptr->image_dir) {
+			xfree (image_dir);
+			image_dir = xstrdup(ckpt_ptr->image_dir);
+		}
+		xstrfmtcat(image_dir, "/%u", ckpt_ptr->job_id);
+	
+		job_ptr->details->restart_dir = image_dir;
+		image_dir = NULL;	/* Nothing left to xfree */
+
+		last_job_update = time(NULL);
+	}
+	
+ unpack_error:
+	free_buf(buffer);
+	xfree(image_dir);
+	xfree(alloc_nodes);
+	xfree(ckpt_file);
+
+ reply:
+	slurm_msg_t_init(&resp_msg);
+	rc_msg.return_code = rc;
+	resp_msg.msg_type  = RESPONSE_SLURM_RC;
+	resp_msg.data      = &rc_msg;
+	(void) slurm_send_node_msg(conn_fd, &resp_msg);
+
+	return rc;
+}
+
+static char *
+_read_job_ckpt_file(char *ckpt_file, int *size_ptr)
+{
+	int ckpt_fd, error_code = 0;
+	int data_allocated, data_read, data_size = 0;
+	char *data = NULL;
+	
+	ckpt_fd = open(ckpt_file, O_RDONLY);
+	if (ckpt_fd < 0) {
+		info("No job ckpt file (%s) to read", ckpt_file);
+		error_code = ENOENT;
+	} else {
+		data_allocated = BUF_SIZE;
+		data = xmalloc(data_allocated);
+		while (1) {
+			data_read = read(ckpt_fd, &data[data_size],
+					 BUF_SIZE);
+			if (data_read < 0) {
+				if (errno == EINTR)
+					continue;
+				else {
+					error("Read error on %s: %m", 
+					      ckpt_file);
+					error_code = errno;
+					break;
+				}
+			} else if (data_read == 0)	/* eof */
+				break;
+			data_size      += data_read;
+			data_allocated += data_read;
+			xrealloc(data, data_allocated);
+		}
+		close(ckpt_fd);
+	}
+
+	if (error_code) {
+		xfree(data);
+		return NULL;
+	}
+	*size_ptr = data_size;
+	return data;
+}
diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c
index 97b26dece..3cd339a22 100644
--- a/src/slurmctld/job_scheduler.c
+++ b/src/slurmctld/job_scheduler.c
@@ -3,13 +3,14 @@
  *	Note there is a global job list (job_list)
  *****************************************************************************
  *  Copyright (C) 2002-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>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -48,10 +49,12 @@
 #include <unistd.h>
 
 #include "src/common/assoc_mgr.h"
+#include "src/common/env.h"
 #include "src/common/list.h"
 #include "src/common/macros.h"
 #include "src/common/node_select.h"
 #include "src/common/slurm_accounting_storage.h"
+#include "src/common/uid.h"
 #include "src/common/xassert.h"
 #include "src/common/xstring.h"
 
@@ -61,17 +64,21 @@
 #include "src/slurmctld/licenses.h"
 #include "src/slurmctld/locks.h"
 #include "src/slurmctld/node_scheduler.h"
+#include "src/slurmctld/reservation.h"
 #include "src/slurmctld/slurmctld.h"
 #include "src/slurmctld/srun_comm.h"
 
 #define _DEBUG 0
 #define MAX_RETRIES 10
 
-static void _depend_list_del(void *dep_ptr);
-static void _feature_list_delete(void *x);
-static int  _valid_feature_list(uint32_t job_id, List feature_list);
-static int  _valid_node_feature(char *feature);
-static char **_xduparray(uint16_t size, char ** array);
+static char **	_build_env(struct job_record *job_ptr);
+static void	_depend_list_del(void *dep_ptr);
+static void	_feature_list_delete(void *x);
+static void *	_run_epilog(void *arg);
+static void *	_run_prolog(void *arg);
+static int	_valid_feature_list(uint32_t job_id, List feature_list);
+static int	_valid_node_feature(char *feature);
+static char **	_xduparray(uint16_t size, char ** array);
 
 
 /*
@@ -134,6 +141,9 @@ extern int build_job_queue(struct job_queue **job_queue)
 	int job_buffer_size, job_queue_size;
 	struct job_queue *my_job_queue;
 
+	if (job_list == NULL)
+		return 0;
+
 	/* build list pending jobs */
 	job_buffer_size = job_queue_size = 0;
 	job_queue[0] = my_job_queue = NULL;
@@ -175,11 +185,13 @@ extern bool job_is_completing(void)
 	bool completing = false;
 	ListIterator job_iterator;
 	struct job_record *job_ptr = NULL;
-	time_t recent = time(NULL) - (slurmctld_conf.kill_wait + 2);
+	uint16_t complete_wait = slurm_get_complete_wait();
+	time_t recent;
 
-	if (!job_list)
+	if ((job_list == NULL) || (complete_wait == 0))
 		return completing;
 
+	recent = time(NULL) - complete_wait;
 	job_iterator = list_iterator_create(job_list);
 	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
 		if ((job_ptr->job_state & JOB_COMPLETING) &&
@@ -224,6 +236,7 @@ extern void set_job_elig_time(void)
 		    ((job_ptr->details->max_nodes < part_ptr->min_nodes) ||
 		     (job_ptr->details->min_nodes > part_ptr->max_nodes)))
 			continue;
+		/* Job's eligible time is set in job_independent() */
 		if (!job_independent(job_ptr))
 			continue;
 	}
@@ -294,7 +307,7 @@ extern int schedule(void)
 
 	lock_slurmctld(job_write_lock);
 	/* Avoid resource fragmentation if important */
-	if ((!wiki_sched) && switch_no_frag() && job_is_completing()) {
+	if ((!wiki_sched) && job_is_completing()) {
 		unlock_slurmctld(job_write_lock);
 		debug("schedule() returning, some job still completing");
 		return SLURM_SUCCESS;
@@ -316,9 +329,11 @@ extern int schedule(void)
 		if (job_ptr->priority == 0)	/* held */
 			continue;
 
-		if (_failed_partition(job_ptr->part_ptr, failed_parts, 
+		if ((job_ptr->resv_name == NULL) &&
+		    _failed_partition(job_ptr->part_ptr, failed_parts, 
 				      failed_part_cnt)) {
 			job_ptr->state_reason = WAIT_PRIORITY;
+			xfree(job_ptr->state_desc);
 			continue;
 		}
 		if (bit_overlap(avail_node_bitmap, 
@@ -330,10 +345,12 @@ extern int schedule(void)
 		}
 		if (license_job_test(job_ptr) != SLURM_SUCCESS) {
 			job_ptr->state_reason = WAIT_LICENSES;
+			xfree(job_ptr->state_desc);
 			continue;
 		}
 
-		if (assoc_mgr_validate_assoc_id(acct_db_conn, job_ptr->assoc_id,
+		if (assoc_mgr_validate_assoc_id(acct_db_conn, 
+						job_ptr->assoc_id,
 						accounting_enforce)) {
 			/* NOTE: This only happens if a user's account is 
 			 * disabled between when the job was submitted and 
@@ -345,6 +362,7 @@ extern int schedule(void)
 			job_ptr->job_state = JOB_FAILED;
 			job_ptr->exit_code = 1;
 			job_ptr->state_reason = FAIL_BANK_ACCOUNT;
+			xfree(job_ptr->state_desc);
 			job_ptr->start_time = job_ptr->end_time = time(NULL);
 			job_completion_logger(job_ptr);
 			delete_job_details(job_ptr);
@@ -374,6 +392,19 @@ extern int schedule(void)
 					job_ptr->part_ptr->node_bitmap);
 				bit_not(job_ptr->part_ptr->node_bitmap);
 			}
+		} else if (error_code == ESLURM_RESERVATION_NOT_USABLE) {
+			if (job_ptr->resv_ptr 
+			    && job_ptr->resv_ptr->node_bitmap) {
+				bit_not(job_ptr->resv_ptr->node_bitmap);
+				bit_and(avail_node_bitmap, 
+					job_ptr->resv_ptr->node_bitmap);
+				bit_not(job_ptr->resv_ptr->node_bitmap);
+			} else {
+				/* The job has no reservation but requires
+				 * nodes that are currently in some reservation
+				 * so just skip over this job and try running
+				 * the next lower priority job */
+			}
 		} else if (error_code == SLURM_SUCCESS) {	
 			/* job initiated */
 			last_job_update = now;
@@ -394,10 +425,10 @@ extern int schedule(void)
 			info("schedule: JobId=%u NodeList=%s",
 			     job_ptr->job_id, job_ptr->nodes);
 #endif
-			if (job_ptr->batch_flag)
-				launch_job(job_ptr);
-			else
+			if (job_ptr->batch_flag == 0)
 				srun_allocate(job_ptr->job_id);
+			else if (job_ptr->details->prolog_running == 0)
+				launch_job(job_ptr);
 			job_cnt++;
 		} else if ((error_code !=
 			    ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE)
@@ -410,6 +441,7 @@ extern int schedule(void)
 				job_ptr->job_state = JOB_FAILED;
 				job_ptr->exit_code = 1;
 				job_ptr->state_reason = FAIL_BAD_CONSTRAINTS;
+				xfree(job_ptr->state_desc);
 				job_ptr->start_time = job_ptr->end_time = now;
 				job_completion_logger(job_ptr);
 				delete_job_details(job_ptr);
@@ -464,8 +496,9 @@ extern void sort_job_queue(struct job_queue *job_queue, int job_queue_size)
 		tmp_part_prio = job_queue[i].part_priority;
 
 		job_queue[i].job_ptr       = job_queue[top_prio_inx].job_ptr;
-		job_queue[i].job_priority  = job_queue[top_prio_inx].job_priority;
-		job_queue[i].part_priority = job_queue[top_prio_inx].part_priority;
+		job_queue[i].job_priority  = job_queue[top_prio_inx].
+					     job_priority;
+
 
 		job_queue[top_prio_inx].job_ptr       = tmp_job_ptr;
 		job_queue[top_prio_inx].job_priority  = tmp_job_prio;
@@ -500,6 +533,8 @@ extern void launch_job(struct job_record *job_ptr)
 	launch_msg_ptr->overcommit = job_ptr->details->overcommit;
 	launch_msg_ptr->open_mode  = job_ptr->details->open_mode;
 	launch_msg_ptr->acctg_freq = job_ptr->details->acctg_freq;
+	launch_msg_ptr->cpus_per_task = job_ptr->details->cpus_per_task;
+	launch_msg_ptr->restart_cnt   = job_ptr->restart_cnt;
 
 	if (make_batch_job_cred(launch_msg_ptr, job_ptr)) {
 		error("aborting batch job %u", job_ptr->job_id);
@@ -517,6 +552,8 @@ extern void launch_job(struct job_record *job_ptr)
 	launch_msg_ptr->in = xstrdup(job_ptr->details->in);
 	launch_msg_ptr->out = xstrdup(job_ptr->details->out);
 	launch_msg_ptr->work_dir = xstrdup(job_ptr->details->work_dir);
+	launch_msg_ptr->ckpt_dir = xstrdup(job_ptr->details->ckpt_dir);
+	launch_msg_ptr->restart_dir = xstrdup(job_ptr->details->restart_dir);
 	launch_msg_ptr->argc = job_ptr->details->argc;
 	launch_msg_ptr->argv = _xduparray(job_ptr->details->argc,
 					job_ptr->details->argv);
@@ -524,15 +561,18 @@ extern void launch_job(struct job_record *job_ptr)
 	launch_msg_ptr->environment =
 	    get_job_env(job_ptr, &launch_msg_ptr->envc);
 	launch_msg_ptr->job_mem = job_ptr->details->job_min_memory;
-	launch_msg_ptr->num_cpu_groups = job_ptr->num_cpu_groups;
-	launch_msg_ptr->cpus_per_node  = xmalloc(sizeof(uint32_t) *
-			job_ptr->num_cpu_groups);
-	memcpy(launch_msg_ptr->cpus_per_node, job_ptr->cpus_per_node,
-			(sizeof(uint32_t) * job_ptr->num_cpu_groups));
+
+	launch_msg_ptr->num_cpu_groups = job_ptr->select_job->cpu_array_cnt;
+	launch_msg_ptr->cpus_per_node  = xmalloc(sizeof(uint16_t) *
+			job_ptr->select_job->cpu_array_cnt);
+	memcpy(launch_msg_ptr->cpus_per_node, 
+	       job_ptr->select_job->cpu_array_value,
+	       (sizeof(uint16_t) * job_ptr->select_job->cpu_array_cnt));
 	launch_msg_ptr->cpu_count_reps  = xmalloc(sizeof(uint32_t) *
-			job_ptr->num_cpu_groups);
-	memcpy(launch_msg_ptr->cpu_count_reps, job_ptr->cpu_count_reps,
-			(sizeof(uint32_t) * job_ptr->num_cpu_groups));
+			job_ptr->select_job->cpu_array_cnt);
+	memcpy(launch_msg_ptr->cpu_count_reps, 
+	       job_ptr->select_job->cpu_array_reps,
+	       (sizeof(uint32_t) * job_ptr->select_job->cpu_array_cnt));
 
 	launch_msg_ptr->select_jobinfo = select_g_copy_jobinfo(
 			job_ptr->select_jobinfo);
@@ -574,6 +614,7 @@ extern int make_batch_job_cred(batch_job_launch_msg_t *launch_msg_ptr,
 			       struct job_record *job_ptr)
 {
 	slurm_cred_arg_t cred_arg;
+	select_job_res_t select_ptr;
 
 	cred_arg.jobid     = launch_msg_ptr->job_id;
 	cred_arg.stepid    = launch_msg_ptr->step_id;
@@ -586,14 +627,23 @@ extern int make_batch_job_cred(batch_job_launch_msg_t *launch_msg_ptr,
 	if (job_ptr->details == NULL)
 		cred_arg.job_mem = 0;
 	else if (job_ptr->details->job_min_memory & MEM_PER_CPU) {
+		xassert(job_ptr->select_job);
+		xassert(job_ptr->select_job->cpus);
 		cred_arg.job_mem = job_ptr->details->job_min_memory;
 		cred_arg.job_mem &= (~MEM_PER_CPU);
-		cred_arg.job_mem *= job_ptr->alloc_lps[0];
+		cred_arg.job_mem *= job_ptr->select_job->cpus[0];
 	} else
 		cred_arg.job_mem = job_ptr->details->job_min_memory;
 
-	cred_arg.alloc_lps_cnt = 0;
-	cred_arg.alloc_lps = NULL;
+	/* Identify the cores allocated to this job. */
+	xassert(job_ptr->select_job);
+	select_ptr = job_ptr->select_job;
+	cred_arg.core_bitmap         = select_ptr->core_bitmap;
+	cred_arg.cores_per_socket    = select_ptr->cores_per_socket;
+	cred_arg.sockets_per_node    = select_ptr->sockets_per_node;
+	cred_arg.sock_core_rep_count = select_ptr->sock_core_rep_count;
+	cred_arg.job_nhosts          = select_ptr->nhosts;
+	cred_arg.job_hostlist        = job_ptr->nodes;
 
 	launch_msg_ptr->cred = slurm_cred_create(slurmctld_config.cred_ctx,
 			 &cred_arg);
@@ -885,9 +935,10 @@ extern int job_start_data(job_desc_msg_t *job_desc_msg,
 {
 	struct job_record *job_ptr;
 	struct part_record *part_ptr;
-	bitstr_t *avail_bitmap = NULL;
+	bitstr_t *avail_bitmap = NULL, *resv_bitmap = NULL;
 	uint32_t min_nodes, max_nodes, req_nodes;
-	int rc = SLURM_SUCCESS;
+	int i, rc = SLURM_SUCCESS;
+	time_t now = time(NULL), start_res;
 
 	job_ptr = find_job_record(job_desc_msg->job_id);
 	if (job_ptr == NULL)
@@ -904,21 +955,18 @@ extern int job_start_data(job_desc_msg_t *job_desc_msg,
 	if ((job_desc_msg->req_nodes == NULL) || 
 	    (job_desc_msg->req_nodes == '\0')) {
 		/* assume all nodes available to job for testing */
-		avail_bitmap = bit_copy(avail_node_bitmap);
+		avail_bitmap = bit_alloc(node_record_count);
+		bit_nset(avail_bitmap, 0, (node_record_count - 1));
 	} else if (node_name2bitmap(job_desc_msg->req_nodes, false, 
 				    &avail_bitmap) != 0) {
 		return ESLURM_INVALID_NODE_NAME;
 	}
 
-	/* Only consider nodes that are not DOWN or DRAINED */
-	bit_and(avail_bitmap, avail_node_bitmap);
-
 	/* Consider only nodes in this job's partition */
 	if (part_ptr->node_bitmap)
 		bit_and(avail_bitmap, part_ptr->node_bitmap);
 	else
 		rc = ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE;
-
 	if (job_req_node_filter(job_ptr, avail_bitmap))
 		rc = ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE;
 	if (job_ptr->details->exc_node_bitmap) {
@@ -937,6 +985,20 @@ extern int job_start_data(job_desc_msg_t *job_desc_msg,
 		}
 	}
 
+	/* Enforce reservation: access control, time and nodes */
+	if (job_ptr->details->begin_time)
+		start_res = job_ptr->details->begin_time;
+	else
+		start_res = now;
+	i = job_test_resv(job_ptr, &start_res, false, &resv_bitmap);
+	if (i != SLURM_SUCCESS)
+		return i;
+	bit_and(avail_bitmap, resv_bitmap);
+	FREE_NULL_BITMAP(resv_bitmap);
+
+	/* Only consider nodes that are not DOWN or DRAINED */
+	bit_and(avail_bitmap, avail_node_bitmap);
+
 	if (rc == SLURM_SUCCESS) {
 		min_nodes = MAX(job_ptr->details->min_nodes, 
 				part_ptr->min_nodes);
@@ -968,7 +1030,7 @@ extern int job_start_data(job_desc_msg_t *job_desc_msg,
 #else
 		resp_data->proc_cnt = job_ptr->total_procs;
 #endif
-		resp_data->start_time = job_ptr->start_time;
+		resp_data->start_time = MAX(job_ptr->start_time, start_res);
 		job_ptr->start_time   = 0;  /* restore pending job start time */
 		resp_data->node_list  = bitmap2node_name(avail_bitmap);
 		FREE_NULL_BITMAP(avail_bitmap);
@@ -981,6 +1043,252 @@ extern int job_start_data(job_desc_msg_t *job_desc_msg,
 
 }
 
+/*
+ * epilog_slurmctld - execute the prolog_slurmctld for a job that has just
+ *	terminated.
+ * IN job_ptr - pointer to job that has been terminated
+ * RET SLURM_SUCCESS(0) or error code
+ */
+extern int epilog_slurmctld(struct job_record *job_ptr)
+{
+	int rc;
+	pthread_t thread_id_epilog;
+	pthread_attr_t thread_attr_epilog;
+
+	if ((slurmctld_conf.epilog_slurmctld == NULL) ||
+	    (slurmctld_conf.epilog_slurmctld[0] == '\0'))
+		return SLURM_SUCCESS;
+
+	if (access(slurmctld_conf.epilog_slurmctld, X_OK) < 0) {
+		error("Invalid EpilogSlurmctld: %m");
+		return errno;
+	}
+
+	slurm_attr_init(&thread_attr_epilog);
+	pthread_attr_setdetachstate(&thread_attr_epilog, 
+				    PTHREAD_CREATE_DETACHED);
+	while(1) {
+		rc = pthread_create(&thread_id_epilog,
+				    &thread_attr_epilog,
+				    _run_epilog, (void *) job_ptr);
+		if (rc == 0)
+			return SLURM_SUCCESS;
+		if (errno == EAGAIN)
+			continue;
+		error("pthread_create: %m");
+		return errno;
+	}
+}
+
+static char **_build_env(struct job_record *job_ptr)
+{
+	char **my_env, *name;
+
+	my_env = xmalloc(sizeof(char *));
+	my_env[0] = NULL;
+#ifdef HAVE_CRAY_XT
+	select_g_get_jobinfo(job_ptr->select_jobinfo, 
+			     SELECT_DATA_RESV_ID, &name);
+	setenvf(&env, "BASIL_RESERVATION_ID", "%s", name);
+	xfree(name);
+#endif
+#ifdef HAVE_BG
+	select_g_get_jobinfo(job_ptr->select_jobinfo, 
+			     SELECT_DATA_BLOCK_ID, &name);
+	setenvf(&my_env, "MPIRUN_PARTITION", "%s", name);
+#endif
+	setenvf(&my_env, "SLURM_JOB_ACCOUNT", "%s", job_ptr->account);
+	if (job_ptr->details) {
+		setenvf(&my_env, "SLURM_JOB_CONSTRAINTS", 
+			"%s", job_ptr->details->features);
+	}
+	setenvf(&my_env, "SLURM_JOB_GID", "%u", job_ptr->group_id);
+	name = gid_to_string((uid_t) job_ptr->group_id);
+	setenvf(&my_env, "SLURM_JOB_GROUP", "%s", name);
+	xfree(name);
+	setenvf(&my_env, "SLURM_JOB_ID", "%u", job_ptr->job_id);
+	setenvf(&my_env, "SLURM_JOB_NAME", "%s", job_ptr->name);
+	setenvf(&my_env, "SLURM_JOB_NODELIST", "%s", job_ptr->nodes);
+	setenvf(&my_env, "SLURM_JOB_PARTITION", "%s", job_ptr->partition);
+	setenvf(&my_env, "SLURM_JOB_UID", "%u", job_ptr->user_id);
+	name = uid_to_string((uid_t) job_ptr->user_id);
+	setenvf(&my_env, "SLURM_JOB_USER", "%s", name);
+	xfree(name);
+
+	return my_env;
+}
+
+static void *_run_epilog(void *arg)
+{
+	struct job_record *job_ptr = (struct job_record *) arg;
+	uint32_t job_id;
+	pid_t cpid;
+	int i, status, wait_rc;
+	char *argv[2], **my_env;
+	/* Locks: Read config, job */
+	slurmctld_lock_t config_read_lock = { 
+		READ_LOCK, READ_LOCK, NO_LOCK, NO_LOCK };
+
+	lock_slurmctld(config_read_lock);
+	argv[0] = xstrdup(slurmctld_conf.epilog_slurmctld);
+	argv[1] = NULL;
+	my_env = _build_env(job_ptr);
+	job_id = job_ptr->job_id;
+	unlock_slurmctld(config_read_lock);
+
+	if ((cpid = fork()) < 0) {
+		error("epilog_slurmctld fork error: %m");
+		goto fini;
+	}
+	if (cpid == 0) {
+#ifdef SETPGRP_TWO_ARGS
+		setpgrp(0, 0);
+#else
+		setpgrp();
+#endif
+		execve(argv[0], argv, my_env);
+		exit(127);
+	}
+
+	while (1) {
+		wait_rc = waitpid(cpid, &status, 0);
+		if (wait_rc < 0) {
+			if (errno == EINTR)
+				continue;
+			error("epilog_slurmctld waitpid error: %m");
+			break;
+		} else if (wait_rc > 0) {
+			killpg(cpid, SIGKILL);	/* kill children too */
+			break;
+		}
+	}
+	if (status != 0) {
+		error("epilog_slurmctld job %u epilog exit status %u:%u",
+		      job_id, WEXITSTATUS(status), WTERMSIG(status));
+	} else
+		debug2("epilog_slurmctld job %u prolog completed", job_id);
+
+ fini:	xfree(argv[0]);
+	for (i=0; my_env[i]; i++)
+		xfree(my_env[i]);
+	xfree(my_env);
+	return NULL;
+}
+
+/*
+ * prolog_slurmctld - execute the prolog_slurmctld for a job that has just
+ *	been allocated resources.
+ * IN job_ptr - pointer to job that will be initiated
+ * RET SLURM_SUCCESS(0) or error code
+ */
+extern int prolog_slurmctld(struct job_record *job_ptr)
+{
+	int rc;
+	pthread_t thread_id_prolog;
+	pthread_attr_t thread_attr_prolog;
+
+	if ((slurmctld_conf.prolog_slurmctld == NULL) ||
+	    (slurmctld_conf.prolog_slurmctld[0] == '\0'))
+		return SLURM_SUCCESS;
+
+	if (access(slurmctld_conf.prolog_slurmctld, X_OK) < 0) {
+		error("Invalid PrologSlurmctld: %m");
+		return errno;
+	}
+
+	if (job_ptr->details)
+		job_ptr->details->prolog_running = 1;
+
+	slurm_attr_init(&thread_attr_prolog);
+	pthread_attr_setdetachstate(&thread_attr_prolog, 
+				    PTHREAD_CREATE_DETACHED);
+	while(1) {
+		rc = pthread_create(&thread_id_prolog,
+				    &thread_attr_prolog,
+				    _run_prolog, (void *) job_ptr);
+		if (rc == 0)
+			return SLURM_SUCCESS;
+		if (errno == EAGAIN)
+			continue;
+		error("pthread_create: %m");
+		return errno;
+	}
+}
+
+static void *_run_prolog(void *arg)
+{
+	struct job_record *job_ptr = (struct job_record *) arg;
+	uint32_t job_id;
+	pid_t cpid;
+	int i, status, wait_rc;
+	char *argv[2], **my_env;
+	/* Locks: Read config, job */
+	slurmctld_lock_t config_read_lock = { 
+		READ_LOCK, READ_LOCK, NO_LOCK, NO_LOCK };
+
+	lock_slurmctld(config_read_lock);
+	argv[0] = xstrdup(slurmctld_conf.prolog_slurmctld);
+	argv[1] = NULL;
+	my_env = _build_env(job_ptr);
+	job_id = job_ptr->job_id;
+	unlock_slurmctld(config_read_lock);
+
+	if ((cpid = fork()) < 0) {
+		error("prolog_slurmctld fork error: %m");
+		goto fini;
+	}
+	if (cpid == 0) {
+#ifdef SETPGRP_TWO_ARGS
+		setpgrp(0, 0);
+#else
+		setpgrp();
+#endif
+		execve(argv[0], argv, my_env);
+		exit(127);
+	}
+
+	while (1) {
+		wait_rc = waitpid(cpid, &status, 0);
+		if (wait_rc < 0) {
+			if (errno == EINTR)
+				continue;
+			error("prolog_slurmctld waitpid error: %m");
+			break;
+		} else if (wait_rc > 0) {
+			killpg(cpid, SIGKILL);	/* kill children too */
+			break;
+		}
+	}
+	if (status != 0) {
+		error("prolog_slurmctld job %u prolog exit status %u:%u",
+		      job_id, WEXITSTATUS(status), WTERMSIG(status));
+	} else
+		debug2("prolog_slurmctld job %u prolog completed", job_id);
+
+ fini:	xfree(argv[0]);
+	for (i=0; my_env[i]; i++)
+		xfree(my_env[i]);
+	xfree(my_env);
+	lock_slurmctld(config_read_lock);
+	if (job_ptr->job_id != job_id) {
+		error("prolog_slurmctld job %u pointer invalid", job_id);
+		job_ptr = find_job_record(job_id);
+		if (job_ptr == NULL)
+			error("prolog_slurmctld job %u now defunct", job_id);
+	}
+	if (job_ptr) {
+		if (job_ptr->details)
+			job_ptr->details->prolog_running = 0;
+		if (job_ptr->batch_flag &&
+		    ((job_ptr->job_state == JOB_RUNNING) ||
+		     (job_ptr->job_state == JOB_SUSPENDED)))
+			launch_job(job_ptr);
+	}
+	unlock_slurmctld(config_read_lock);
+
+	return NULL;
+}
+
 /*
  * build_feature_list - Translate a job's feature string into a feature_list
  * IN  details->features
diff --git a/src/slurmctld/job_scheduler.h b/src/slurmctld/job_scheduler.h
index 17b39ec51..e8a06472b 100644
--- a/src/slurmctld/job_scheduler.h
+++ b/src/slurmctld/job_scheduler.h
@@ -7,10 +7,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>, et. al.
  *  Derived from dsh written by Jim Garlick <garlick1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -65,6 +66,14 @@ extern int build_feature_list(struct job_record *job_ptr);
  */
 extern int build_job_queue(struct job_queue **job_queue);
 
+/*
+ * epilog_slurmctld - execute the prolog_slurmctld for a job that has just
+ *	terminated.
+ * IN job_ptr - pointer to job that has been terminated
+ * RET SLURM_SUCCESS(0) or error code
+ */
+extern int epilog_slurmctld(struct job_record *job_ptr);
+
 /*
  * job_is_completing - Determine if jobs are in the process of completing.
  * RET - True of any job is in the process of completing
@@ -100,6 +109,14 @@ extern int make_batch_job_cred(batch_job_launch_msg_t *launch_msg_ptr,
 /* Print a job's dependency information based upon job_ptr->depend_list */
 extern void print_job_dependency(struct job_record *job_ptr);
 
+/*
+ * prolog_slurmctld - execute the prolog_slurmctld for a job that has just
+ *	been allocated resources.
+ * IN job_ptr - pointer to job that will be initiated
+ * RET SLURM_SUCCESS(0) or error code
+ */
+extern int prolog_slurmctld(struct job_record *job_ptr);
+
 /* 
  * schedule - attempt to schedule all pending jobs
  *	pending jobs for each partition will be scheduled in priority  
diff --git a/src/slurmctld/licenses.c b/src/slurmctld/licenses.c
index 002c07d50..ae9deeddc 100644
--- a/src/slurmctld/licenses.c
+++ b/src/slurmctld/licenses.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/licenses.h b/src/slurmctld/licenses.h
index 449e1002b..9af0dbe99 100644
--- a/src/slurmctld/licenses.h
+++ b/src/slurmctld/licenses.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/locks.c b/src/slurmctld/locks.c
index 71eca604b..c0f5377bf 100644
--- a/src/slurmctld/locks.c
+++ b/src/slurmctld/locks.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>, Randy Sanchez <rsancez@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/locks.h b/src/slurmctld/locks.h
index 997f35722..4094a68eb 100644
--- a/src/slurmctld/locks.h
+++ b/src/slurmctld/locks.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>, Randy Sanchez <rsancez@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c
index 75769a26b..93886a5c8 100644
--- a/src/slurmctld/node_mgr.c
+++ b/src/slurmctld/node_mgr.c
@@ -3,16 +3,16 @@
  *	Note: there is a global node table (node_record_table_ptr), its 
  *	hash table (node_hash_table), time stamp (last_node_update) and 
  *	configuration list (config_list)
- *
- *  $Id: node_mgr.c 15820 2008-12-04 01:16:52Z jette $
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -76,7 +76,7 @@
 #define MAX_RETRIES	10
 
 /* Change NODE_STATE_VERSION value when changing the state save format */
-#define NODE_STATE_VERSION      "VER002"
+#define NODE_STATE_VERSION      "VER003"
 
 /* Global variables */
 List config_list = NULL;		/* list of config_record entries */
@@ -88,6 +88,7 @@ time_t last_node_update = (time_t) NULL;	/* time of last update to
 						 * node records */
 bitstr_t *avail_node_bitmap = NULL;	/* bitmap of available nodes */
 bitstr_t *idle_node_bitmap  = NULL;	/* bitmap of idle nodes */
+bitstr_t *power_node_bitmap = NULL;	/* bitmap of powered down nodes */
 bitstr_t *share_node_bitmap = NULL;  	/* bitmap of sharable nodes */
 bitstr_t *up_node_bitmap    = NULL;  	/* bitmap of non-down nodes */
 
@@ -102,12 +103,13 @@ static void 	_make_node_down(struct node_record *node_ptr,
 				time_t event_time);
 static void	_node_did_resp(struct node_record *node_ptr);
 static bool	_node_is_hidden(struct node_record *node_ptr);
-static void 	_pack_node (struct node_record *dump_node_ptr, bool cr_flag,
-				Buf buffer);
+static void 	_pack_node (struct node_record *dump_node_ptr,
+			    uint32_t cr_flag, Buf buffer);
 static void	_sync_bitmaps(struct node_record *node_ptr, int job_count);
 static void	_update_config_ptr(bitstr_t *bitmap,
 				struct config_record *config_ptr);
 static int	_update_node_features(char *node_names, char *features);
+static int	_update_node_weight(char *node_names, uint32_t weight);
 static bool 	_valid_node_state_change(uint16_t old, uint16_t new); 
 #ifndef HAVE_FRONT_END
 static void	_node_not_resp (struct node_record *node_ptr, time_t msg_time);
@@ -126,22 +128,28 @@ static void	_dump_hash (void);
  */
 char * bitmap2node_name (bitstr_t *bitmap) 
 {
-	int i;
+	int i, first, last;
 	hostlist_t hl;
 	char buf[8192];
 
 	if (bitmap == NULL)
 		return xstrdup("");
 
+	first = bit_ffs(bitmap);
+	if (first == -1)
+		return xstrdup("");
+
+	last  = bit_fls(bitmap);
 	hl = hostlist_create("");
-	for (i = 0; i < node_record_count; i++) {
-		if (bit_test (bitmap, i) == 0)
+	for (i = first; i <= last; i++) {
+		if (bit_test(bitmap, i) == 0)
 			continue;
 		hostlist_push(hl, node_record_table_ptr[i].name);
 	}
 	hostlist_uniq(hl);
 	hostlist_ranged_string(hl, sizeof(buf), buf);
 	hostlist_destroy(hl);
+
 	return xstrdup(buf);
 }
 
@@ -200,7 +208,7 @@ create_node_record (struct config_record *config_ptr, char *node_name)
 		(node_record_count + 1) * sizeof (struct node_record);
 	new_buffer_size = 
 		((int) ((new_buffer_size / BUF_SIZE) + 1)) * BUF_SIZE;
-	if (node_record_count == 0)
+	if (!node_record_table_ptr)
 		node_record_table_ptr = 
 			(struct node_record *) xmalloc (new_buffer_size);
 	else if (old_buffer_size != new_buffer_size)
@@ -241,12 +249,14 @@ static int _delete_config_record (void)
 /* dump_all_node_state - save the state of all nodes to file */
 int dump_all_node_state ( void )
 {
+	/* Save high-water mark to avoid buffer growth with copies */
+	static int high_buffer_size = (1024 * 1024);
 	int error_code = 0, inx, log_fd;
 	char *old_file, *new_file, *reg_file;
 	/* Locks: Read config and node */
 	slurmctld_lock_t node_read_lock = { READ_LOCK, NO_LOCK, READ_LOCK, 
 						NO_LOCK };
-	Buf buffer = init_buf(BUF_SIZE*16);
+	Buf buffer = init_buf(high_buffer_size);
 	DEF_TIMERS;
 
 	START_TIMER;
@@ -281,7 +291,7 @@ int dump_all_node_state ( void )
 	} else {
 		int pos = 0, nwrite = get_buf_offset(buffer), amount;
 		char *data = (char *)get_buf_data(buffer);
-
+		high_buffer_size = MAX(nwrite, high_buffer_size);
 		while (nwrite > 0) {
 			amount = write(log_fd, &data[pos], nwrite);
 			if ((amount < 0) && (errno != EINTR)) {
@@ -414,6 +424,13 @@ extern int load_all_node_state ( bool state_only )
 	time_t time_stamp, now = time(NULL);
 	Buf buffer;
 	char *ver_str = NULL;
+	hostset_t hs = NULL;
+	slurm_ctl_conf_t *conf = slurm_conf_lock();
+	bool power_save_mode = false;
+
+	if (conf->suspend_program && conf->resume_program)
+		power_save_mode = true;
+	slurm_conf_unlock();
 
 	/* read the file */
 	state_file = xstrdup (slurmctld_conf.state_save_location);
@@ -519,6 +536,14 @@ extern int load_all_node_state ( bool state_only )
 				if (node_state & NODE_STATE_FAIL)
 					node_ptr->node_state |=
 						NODE_STATE_FAIL;
+				if (node_state & NODE_STATE_POWER_SAVE) {
+					if (power_save_mode)
+						node_ptr->node_state=node_state;
+					else if (hs)
+						hostset_insert(hs, node_name);
+					else
+						hs = hostset_create(node_name);
+				}
 			}
 			if (node_ptr->reason == NULL)
 				node_ptr->reason = reason;
@@ -528,6 +553,14 @@ extern int load_all_node_state ( bool state_only )
 			node_ptr->features = features;
 		} else {
 			node_cnt++;
+			if ((node_state & NODE_STATE_POWER_SAVE) && 
+			    (!power_save_mode)) {
+				node_state &= (~NODE_STATE_POWER_SAVE);
+				if (hs)
+					hostset_insert(hs, node_name);
+				else
+					hs = hostset_create(node_name);
+			}
 			node_ptr->node_state    = node_state;
 			xfree(node_ptr->reason);
 			node_ptr->reason        = reason;
@@ -547,15 +580,20 @@ extern int load_all_node_state ( bool state_only )
 		xfree (node_name);
 	}
 
-	info ("Recovered state of %d nodes", node_cnt);
+fini:	info("Recovered state of %d nodes", node_cnt);
+	if (hs) {
+		char node_names[128];
+		hostset_ranged_string(hs, sizeof(node_names), node_names);
+		info("Cleared POWER_SAVE flag from nodes %s", node_names);
+		hostset_destroy(hs);
+	}
 	free_buf (buffer);
 	return error_code;
 
 unpack_error:
-	error ("Incomplete node data checkpoint file");
-	info("Recovered state of %d nodes", node_cnt);
-	free_buf (buffer);
-	return EFAULT;
+	error("Incomplete node data checkpoint file");
+	error_code = EFAULT;
+	goto fini;
 }
 
 /* 
@@ -724,7 +762,7 @@ static int _list_find_config (void *config_entry, void *key)
  *	representation
  * IN node_names  - list of nodes
  * IN best_effort - if set don't return an error on invalid node name entries 
- * OUT bitmap     - set to bitmap or NULL on error 
+ * OUT bitmap     - set to bitmap, may not have all bits set on error 
  * RET 0 if no error, otherwise EINVAL
  * global: node_record_table_ptr - pointer to global node table
  * NOTE: the caller must bit_free() memory at bitmap when no longer required
@@ -743,7 +781,7 @@ extern int node_name2bitmap (char *node_names, bool best_effort,
 	*bitmap = my_bitmap;
 	
 	if (node_names == NULL) {
-		error ("node_name2bitmap: node_names is NULL");
+		info("node_name2bitmap: node_names is NULL");
 		return rc;
 	}
 
@@ -764,11 +802,8 @@ extern int node_name2bitmap (char *node_names, bool best_effort,
 		} else {
 			error ("node_name2bitmap: invalid node specified %s",
 			       this_node_name);
-			if (!best_effort) {
-				free (this_node_name);
+			if (!best_effort)
 				rc = EINVAL;
-				break;
-			}
 		}
 		free (this_node_name);
 	}
@@ -811,11 +846,11 @@ extern void pack_all_node (char **buffer_ptr, int *buffer_size,
 {
 	int inx;
 	uint32_t nodes_packed, tmp_offset;
+	uint16_t base_state;
 	Buf buffer;
-	bool cr_flag = false;
+	static uint32_t cr_flag = NO_VAL;
 	time_t now = time(NULL);
 	struct node_record *node_ptr = node_record_table_ptr;
-	char *select_type;
 
 	/*
 	 * If Consumable Resources enabled, get allocated_cpus.
@@ -823,10 +858,13 @@ extern void pack_all_node (char **buffer_ptr, int *buffer_size,
 	 * use dependeing upon node state (entire node is either 
 	 * allocated or not).
 	 */
-	select_type = slurm_get_select_type();
-	if (strcmp(select_type, "select/cons_res") == 0)
-		cr_flag = true;
-	xfree(select_type);
+	if (cr_flag == NO_VAL) {
+		cr_flag = 0;  /* call is no-op for select/linear and bluegene */
+		if (select_g_get_info_from_plugin(SELECT_CR_PLUGIN,
+						  NULL, &cr_flag)) {
+			cr_flag = NO_VAL;	/* error */
+		}
+	}
 
 	buffer_ptr[0] = NULL;
 	*buffer_size = 0;
@@ -848,6 +886,9 @@ extern void pack_all_node (char **buffer_ptr, int *buffer_size,
 		if (((show_flags & SHOW_ALL) == 0) && (uid != 0) &&
 		    (_node_is_hidden(node_ptr)))
 			continue;
+		base_state = node_ptr->node_state & NODE_STATE_BASE;
+		if (base_state == NODE_STATE_FUTURE)
+			continue;
 		if ((node_ptr->name == NULL) ||
 		    (node_ptr->name[0] == '\0'))
 			continue;
@@ -878,9 +919,11 @@ extern void pack_all_node (char **buffer_ptr, int *buffer_size,
  *	changes to load_node_config in api/node_info.c
  * NOTE: READ lock_slurmctld config before entry
  */
-static void _pack_node (struct node_record *dump_node_ptr, bool cr_flag,
+static void _pack_node (struct node_record *dump_node_ptr, uint32_t cr_flag,
 		Buf buffer) 
 {
+	uint16_t threads;
+
 	packstr (dump_node_ptr->name, buffer);
 	pack16  (dump_node_ptr->node_state, buffer);
 	if (slurmctld_conf.fast_schedule) {	
@@ -891,6 +934,7 @@ static void _pack_node (struct node_record *dump_node_ptr, bool cr_flag,
 		pack16  (dump_node_ptr->config_ptr->threads, buffer);
 		pack32  (dump_node_ptr->config_ptr->real_memory, buffer);
 		pack32  (dump_node_ptr->config_ptr->tmp_disk, buffer);
+		threads = dump_node_ptr->config_ptr->threads;
 	} else {	
 		/* Individual node data used for scheduling */
 		pack16  (dump_node_ptr->cpus, buffer);
@@ -899,10 +943,11 @@ static void _pack_node (struct node_record *dump_node_ptr, bool cr_flag,
 		pack16  (dump_node_ptr->threads, buffer);
 		pack32  (dump_node_ptr->real_memory, buffer);
 		pack32  (dump_node_ptr->tmp_disk, buffer);
+		threads = dump_node_ptr->threads;
 	}
 	pack32  (dump_node_ptr->config_ptr->weight, buffer);
 
-	if (cr_flag) {
+	if (cr_flag == 1) {
 		uint16_t allocated_cpus;
 		int error_code;
 		error_code = select_g_get_select_nodeinfo(dump_node_ptr,
@@ -911,7 +956,8 @@ static void _pack_node (struct node_record *dump_node_ptr, bool cr_flag,
 			error ("_pack_node: error from "
 				"select_g_get_select_nodeinfo: %m");
 			allocated_cpus = 0;
-		}
+		} else
+			allocated_cpus *= threads;
 		pack16(allocated_cpus, buffer);
 	} else if ((dump_node_ptr->node_state & NODE_STATE_COMPLETING) ||
 		   (dump_node_ptr->node_state == NODE_STATE_ALLOCATED)) {
@@ -970,6 +1016,7 @@ void set_slurmd_addr (void)
 {
 	int i;
 	struct node_record *node_ptr = node_record_table_ptr;
+	uint16_t base_state;
 	DEF_TIMERS;
 
 	START_TIMER;
@@ -977,6 +1024,9 @@ void set_slurmd_addr (void)
 		if ((node_ptr->name == NULL) ||
 		    (node_ptr->name[0] == '\0'))
 			continue;
+		base_state = node_ptr->node_state & NODE_STATE_BASE;
+		if (base_state == NODE_STATE_FUTURE)
+			continue;
 		if (node_ptr->port == 0)
 			node_ptr->port = slurmctld_conf.slurmd_port;
 		slurm_set_addr (&node_ptr->slurm_addr,
@@ -1076,6 +1126,26 @@ int update_node ( update_node_msg_t * update_node_msg )
 							NODE_STATE_NO_RESPOND;
 					node_ptr->last_response = now;
 					ping_nodes_now = true;
+				} else if (base_state == NODE_STATE_FUTURE) {
+					if (node_ptr->port == 0) {
+						node_ptr->port = slurmctld_conf.
+								 slurmd_port;
+					}
+					slurm_set_addr(	&node_ptr->slurm_addr,
+							node_ptr->port,
+							node_ptr->comm_name);
+					if (node_ptr->slurm_addr.sin_port) {
+						state_val = NODE_STATE_IDLE;
+						node_ptr->node_state |=
+							NODE_STATE_NO_RESPOND;
+						node_ptr->last_response = now;
+						ping_nodes_now = true;
+					} else {
+						error("slurm_set_addr failure "
+						      "on %s", 
+		       				      node_ptr->comm_name);
+						state_val = base_state;
+					}
 				} else
 					state_val = base_state;
 			}
@@ -1083,10 +1153,8 @@ int update_node ( update_node_msg_t * update_node_msg )
 				/* We must set node DOWN before killing 
 				 * its jobs */
 				_make_node_down(node_ptr, now);
-				kill_running_job_by_node_name (this_node_name,
-							       false);
-			}
-			else if (state_val == NODE_STATE_IDLE) {
+				kill_running_job_by_node_name (this_node_name);
+			} else if (state_val == NODE_STATE_IDLE) {
 				/* assume they want to clear DRAIN and
 				 * FAIL flags too */
 				base_state &= NODE_STATE_BASE;
@@ -1115,15 +1183,13 @@ int update_node ( update_node_msg_t * update_node_msg )
 				bit_set (up_node_bitmap, node_inx);
 				node_ptr->last_idle = now;
 				reset_job_priority();
-			}
-			else if (state_val == NODE_STATE_ALLOCATED) {
+			} else if (state_val == NODE_STATE_ALLOCATED) {
 				if (!(node_ptr->node_state & (NODE_STATE_DRAIN
 						| NODE_STATE_FAIL)))
 					bit_set(avail_node_bitmap, node_inx);
 				bit_set (up_node_bitmap, node_inx);
 				bit_clear (idle_node_bitmap, node_inx);
-			}
-			else if (state_val == NODE_STATE_DRAIN) {
+			} else if (state_val == NODE_STATE_DRAIN) {
 				bit_clear (avail_node_bitmap, node_inx);
 				state_val = node_ptr->node_state |
 					NODE_STATE_DRAIN;
@@ -1135,8 +1201,7 @@ int update_node ( update_node_msg_t * update_node_msg )
 						slurmctld_cluster_name,
 						node_ptr, now, NULL);
 				}
-			}
-			else if (state_val == NODE_STATE_FAIL) {
+			} else if (state_val == NODE_STATE_FAIL) {
 				bit_clear (avail_node_bitmap, node_inx);
 				state_val = node_ptr->node_state |
 					NODE_STATE_FAIL;
@@ -1147,13 +1212,33 @@ int update_node ( update_node_msg_t * update_node_msg )
 						acct_db_conn, 
 						slurmctld_cluster_name,
 						node_ptr, now, NULL);
-			}
-			else if (state_val == NODE_STATE_NO_RESPOND) {
+			} else if (state_val == NODE_STATE_POWER_SAVE) {
+				if (node_ptr->node_state &
+				    NODE_STATE_POWER_SAVE) {
+					verbose("node %s already powered down",
+						this_node_name);
+				} else {
+					node_ptr->last_idle = 0;
+					info("powering down node %s",
+					     this_node_name);
+				}
+				continue;
+			} else if (state_val == NODE_STATE_POWER_UP) {
+				if (!(node_ptr->node_state &
+				    NODE_STATE_POWER_SAVE)) {
+					verbose("node %s already powered up",
+						this_node_name);
+				} else {
+					node_ptr->last_idle = now;
+					info("powering up node %s",
+					     this_node_name);
+				}
+				continue;
+			} else if (state_val == NODE_STATE_NO_RESPOND) {
 				node_ptr->node_state |= NODE_STATE_NO_RESPOND;
 				state_val = base_state;
 				bit_clear(avail_node_bitmap, node_inx);
-			}
-			else {
+			} else {
 				info ("Invalid node state specified %u", 
 					state_val);
 				err_code = 1;
@@ -1189,6 +1274,18 @@ int update_node ( update_node_msg_t * update_node_msg )
 			update_node_msg->node_names, 
 			update_node_msg->features);
 	}
+	
+
+	/* Update weight. Weight is part of config_ptr, 
+	 * hence do the splitting if required */
+	if ((error_code == 0) && (update_node_msg->weight != NO_VAL))	{
+		error_code = _update_node_weight(update_node_msg->node_names,
+						 update_node_msg->weight);
+		if (!error_code) 
+			/* sort config_list by weight for scheduling */
+			list_sort(config_list, &list_compare_config);
+
+	}
 
 	return error_code;
 }
@@ -1238,6 +1335,88 @@ extern void restore_node_features(void)
 	}
 }
 
+/*
+ * _update_node_weight - Update weight associated with nodes
+ *	build new config list records as needed
+ * IN node_names - List of nodes to update
+ * IN weight - New weight value
+ * RET: SLURM_SUCCESS or error code
+ */
+static int _update_node_weight(char *node_names, uint32_t weight)
+{
+	bitstr_t *node_bitmap = NULL, *tmp_bitmap;
+	ListIterator config_iterator;
+	struct config_record *config_ptr, *new_config_ptr;
+	struct config_record *first_new = NULL;
+	int rc, config_cnt, tmp_cnt;
+
+	rc = node_name2bitmap(node_names, false, &node_bitmap);
+	if (rc) {
+		info("_update_node_weight: invalid node_name");
+		return rc;
+	}
+
+	/* For each config_record with one of these nodes, 
+	 * update it (if all nodes updated) or split it into 
+	 * a new entry */
+	config_iterator = list_iterator_create(config_list);
+	if (config_iterator == NULL)
+		fatal("list_iterator_create malloc failure");
+	while ((config_ptr = (struct config_record *)
+			list_next(config_iterator))) {
+		if (config_ptr == first_new)
+			break;	/* done with all original records */
+
+		tmp_bitmap = bit_copy(node_bitmap);
+		bit_and(tmp_bitmap, config_ptr->node_bitmap);
+		config_cnt = bit_set_count(config_ptr->node_bitmap);
+		tmp_cnt = bit_set_count(tmp_bitmap);
+		if (tmp_cnt == 0) {
+			/* no overlap, leave alone */
+		} else if (tmp_cnt == config_cnt) {
+			/* all nodes changed, update in situ */
+			config_ptr->weight = weight;
+		} else {
+			/* partial update, split config_record */
+			new_config_ptr = create_config_record();
+			if (first_new == NULL);
+				first_new = new_config_ptr;
+			new_config_ptr->magic       = config_ptr->magic;
+			new_config_ptr->cpus        = config_ptr->cpus;
+			new_config_ptr->sockets     = config_ptr->sockets;
+			new_config_ptr->cores       = config_ptr->cores;
+			new_config_ptr->threads     = config_ptr->threads;
+			new_config_ptr->real_memory = config_ptr->real_memory;
+			new_config_ptr->tmp_disk    = config_ptr->tmp_disk;
+			/* Change weight for the given node */
+			new_config_ptr->weight      = weight;
+			if (config_ptr->feature) {
+				new_config_ptr->feature = xstrdup(config_ptr->
+								  feature);
+			}
+			build_config_feature_array(new_config_ptr);
+			new_config_ptr->node_bitmap = bit_copy(tmp_bitmap);
+			new_config_ptr->nodes = 
+				bitmap2node_name(tmp_bitmap);
+			_update_config_ptr(tmp_bitmap, new_config_ptr);
+
+			/* Update remaining records */ 
+			bit_not(tmp_bitmap);
+			bit_and(config_ptr->node_bitmap, tmp_bitmap);
+			xfree(config_ptr->nodes);
+			config_ptr->nodes = bitmap2node_name(
+				config_ptr->node_bitmap);
+		}
+		bit_free(tmp_bitmap);
+	}
+	list_iterator_destroy(config_iterator);
+	bit_free(node_bitmap);
+ 
+	info("_update_node_weight: nodes %s weight set to: %u",
+		node_names, weight);
+	return SLURM_SUCCESS;
+}
+
 /*
  * _update_node_features - Update features associated with nodes
  *	build new config list records as needed
@@ -1417,6 +1596,8 @@ static bool _valid_node_state_change(uint16_t old, uint16_t new)
 		case NODE_STATE_DRAIN:
 		case NODE_STATE_FAIL:
 		case NODE_STATE_NO_RESPOND:
+		case NODE_STATE_POWER_SAVE:
+		case NODE_STATE_POWER_UP:
 			return true;
 			break;
 
@@ -1424,6 +1605,7 @@ static bool _valid_node_state_change(uint16_t old, uint16_t new)
 			if (base_state == NODE_STATE_UNKNOWN)
 				return false;
 			if ((base_state == NODE_STATE_DOWN)
+			||  (base_state == NODE_STATE_FUTURE)
 			||  (node_flags & NODE_STATE_DRAIN)
 			||  (node_flags & NODE_STATE_FAIL))
 				return true;
@@ -1462,6 +1644,7 @@ extern int validate_node_specs(slurm_node_registration_status_msg_t *reg_msg)
 	char *reason_down = NULL;
 	uint16_t base_state, node_flags;
 	time_t now = time(NULL);
+	static uint32_t cr_flag = NO_VAL, gang_flag = NO_VAL;
 
 	node_ptr = find_node_record (reg_msg->node_name);
 	if (node_ptr == NULL)
@@ -1502,16 +1685,45 @@ extern int validate_node_specs(slurm_node_registration_status_msg_t *reg_msg)
 	}
 	node_ptr->threads = reg_msg->threads;
 #else
+	if (cr_flag == NO_VAL) {
+		cr_flag = 0;  /* call is no-op for select/linear and bluegene */
+		if (select_g_get_info_from_plugin(SELECT_CR_PLUGIN,
+						  NULL, &cr_flag)) {
+			cr_flag = NO_VAL;	/* error */
+		}
+	}
+	if (gang_flag == NO_VAL) {
+		char *sched_type = slurm_get_sched_type();
+		if (strcmp(sched_type, "sched/gang"))
+			gang_flag = 0;
+		else
+			gang_flag = 1;
+		xfree(sched_type);
+	}
+
 	if (slurmctld_conf.fast_schedule != 2) {
-		int tot1, tot2;
-		tot1 = reg_msg->sockets * reg_msg->cores * reg_msg->threads;
-		tot2 = config_ptr->sockets * config_ptr->cores *
-			config_ptr->threads;
-		if (tot1 < tot2) {
+		int cores1, cores2;	/* total cores on node */
+		int threads1, threads2;	/* total threads on node */
+		cores1 = reg_msg->sockets * reg_msg->cores;
+		threads1 = cores1 * reg_msg->threads;
+		cores2 = config_ptr->sockets * config_ptr->cores;
+		threads2 = cores2 * config_ptr->threads;
+		if (threads1 < threads2) {
 			error("Node %s has low socket*core*thread count %u",
-				reg_msg->node_name, tot1);
+				reg_msg->node_name, threads1);
 			error_code = EINVAL;
 			reason_down = "Low socket*core*thread count";
+		} else if ((slurmctld_conf.fast_schedule == 0) &&
+			   ((cr_flag == 1) || (gang_flag == 1)) && 
+			   ((cores1 > cores2) || (threads1 > threads2))) {
+			error("Node %s has high socket*core*thread count %u, "
+			      "extra resources ignored", 
+			      reg_msg->node_name, threads1);
+			/* Preserve configured values */
+			reg_msg->cpus    = config_ptr->cpus;
+			reg_msg->sockets = config_ptr->sockets;
+			reg_msg->cores   = config_ptr->cores;
+			reg_msg->threads = config_ptr->threads;
 		}
 	}
 	node_ptr->sockets = reg_msg->sockets;
@@ -1519,15 +1731,24 @@ extern int validate_node_specs(slurm_node_registration_status_msg_t *reg_msg)
 	node_ptr->threads = reg_msg->threads;
 #endif
 
-	if ((slurmctld_conf.fast_schedule != 2)
-	&&  (reg_msg->cpus < config_ptr->cpus)) {
-		error ("Node %s has low cpu count %u", 
-			reg_msg->node_name, reg_msg->cpus);
-		error_code  = EINVAL;
-		reason_down = "Low CPUs";
+	if (slurmctld_conf.fast_schedule != 2) {
+		if (reg_msg->cpus < config_ptr->cpus) {
+			error ("Node %s has low cpu count %u", 
+				reg_msg->node_name, reg_msg->cpus);
+			error_code  = EINVAL;
+			reason_down = "Low CPUs";
+		} else if ((slurmctld_conf.fast_schedule == 0) &&
+			   ((cr_flag == 1) || (gang_flag == 1)) &&
+			   (reg_msg->cpus > config_ptr->cpus)) {
+			error("Node %s has high CPU count %u, "
+			      "extra resources ignored",
+			      reg_msg->node_name, reg_msg->cpus);
+			reg_msg->cpus    = config_ptr->cpus;
+		}
 	}
-	if ((node_ptr->cpus != reg_msg->cpus)
-	&&  (slurmctld_conf.fast_schedule == 0)) {
+
+	if ((node_ptr->cpus != reg_msg->cpus) &&
+	    (slurmctld_conf.fast_schedule == 0)) {
 		for (i=0; i<node_ptr->part_cnt; i++) {
 			node_ptr->part_pptr[i]->total_cpus += 
 				(reg_msg->cpus - node_ptr->cpus);
@@ -1535,8 +1756,8 @@ extern int validate_node_specs(slurm_node_registration_status_msg_t *reg_msg)
 	}
 	node_ptr->cpus = reg_msg->cpus;
 
-	if ((slurmctld_conf.fast_schedule != 2) 
-	&&  (reg_msg->real_memory < config_ptr->real_memory)) {
+	if ((slurmctld_conf.fast_schedule != 2) &&
+	    (reg_msg->real_memory < config_ptr->real_memory)) {
 		error ("Node %s has low real_memory size %u", 
 		       reg_msg->node_name, reg_msg->real_memory);
 		error_code  = EINVAL;
@@ -1544,8 +1765,8 @@ extern int validate_node_specs(slurm_node_registration_status_msg_t *reg_msg)
 	}
 	node_ptr->real_memory = reg_msg->real_memory;
 
-	if ((slurmctld_conf.fast_schedule != 2)
-	&&  (reg_msg->tmp_disk < config_ptr->tmp_disk)) {
+	if ((slurmctld_conf.fast_schedule != 2) &&
+	    (reg_msg->tmp_disk < config_ptr->tmp_disk)) {
 		error ("Node %s has low tmp_disk size %u",
 		       reg_msg->node_name, reg_msg->tmp_disk);
 		error_code = EINVAL;
@@ -1575,7 +1796,6 @@ extern int validate_node_specs(slurm_node_registration_status_msg_t *reg_msg)
 		}
 		last_node_update = time (NULL);
 		set_node_down(reg_msg->node_name, reason_down);
-		_sync_bitmaps(node_ptr, reg_msg->job_count);
 	} else if (reg_msg->status == ESLURMD_PROLOG_FAILED) {
 		if ((node_flags & (NODE_STATE_DRAIN | NODE_STATE_FAIL)) == 0) {
 #ifdef HAVE_BG
@@ -2008,8 +2228,15 @@ void node_not_resp (char *name, time_t msg_time)
 
 	for (i=0; i<node_record_count; i++) {
 		node_ptr = node_record_table_ptr + i;
-		node_ptr->not_responding = true;
+		if ((node_ptr->node_state & NODE_STATE_BASE)
+		    != NODE_STATE_DOWN) {
+			node_ptr->not_responding = true;
+			bit_clear (avail_node_bitmap, i);
+			node_ptr->node_state |= NODE_STATE_NO_RESPOND;
+			last_node_update = time(NULL);
+		}
 	}
+			
 #else
 	node_ptr = find_node_record (name);
 	if (node_ptr == NULL) {
@@ -2105,7 +2332,8 @@ void set_node_down (char *name, char *reason)
 		xstrcat(node_ptr->reason, time_buf);
 	}
 	_make_node_down(node_ptr, now);
-	(void) kill_running_job_by_node_name(name, false);
+	(void) kill_running_job_by_node_name(name);
+	_sync_bitmaps(node_ptr, 0);
 
 	return;
 }
@@ -2205,7 +2433,8 @@ void msg_to_slurmd (slurm_msg_type_t msg_type)
 	int i;
 	shutdown_msg_t *shutdown_req;
 	agent_arg_t *kill_agent_args;
-	
+	uint16_t base_state;
+
 	kill_agent_args = xmalloc (sizeof (agent_arg_t));
 	kill_agent_args->msg_type = msg_type;
 	kill_agent_args->retry = 0;
@@ -2217,6 +2446,9 @@ void msg_to_slurmd (slurm_msg_type_t msg_type)
 	}
 
 	for (i = 0; i < node_record_count; i++) {
+		base_state = node_record_table_ptr[i].node_state;
+		if (base_state == NODE_STATE_FUTURE)
+			continue;
 		hostlist_push(kill_agent_args->hostlist, 
 			      node_record_table_ptr[i].name);
 		kill_agent_args->node_count++;
@@ -2357,9 +2589,8 @@ void make_node_idle(struct node_record *node_ptr,
 	time_t now = time(NULL);
 	
 	xassert(node_ptr);
-	if (job_ptr			/* Specific job completed */
-	&&  (job_ptr->job_state & JOB_COMPLETING)	/* Not a replay */
-	&&  (bit_test(job_ptr->node_bitmap, inx))) {	/* Not a replay */
+	if (job_ptr &&			/* Specific job completed */
+	    (bit_test(job_ptr->node_bitmap, inx))) {	/* Not a replay */
 		last_job_update = now;
 		bit_clear(job_ptr->node_bitmap, inx);
 		if (job_ptr->node_cnt) {
@@ -2452,6 +2683,7 @@ void node_fini(void)
 
 	FREE_NULL_BITMAP(idle_node_bitmap);
 	FREE_NULL_BITMAP(avail_node_bitmap);
+	FREE_NULL_BITMAP(power_node_bitmap);
 	FREE_NULL_BITMAP(share_node_bitmap);
 	FREE_NULL_BITMAP(up_node_bitmap);
 
@@ -2490,10 +2722,11 @@ extern int send_nodes_to_accounting(time_t event_time)
 }
 
 /* Given a config_record, clear any existing feature_array and
- * if feature is set, then rebuild feature_array */
+ * if feature is set, then rebuild feature_array
+ * Filter out any white-space from the feature string */
 extern void  build_config_feature_array(struct config_record *config_ptr)
 {
-	int i;
+	int i, j;
 	char *tmp_str, *token, *last = NULL;
 
 	/* clear any old feature_array */
@@ -2506,7 +2739,13 @@ extern void  build_config_feature_array(struct config_record *config_ptr)
 	if (config_ptr->feature) {
 		i = strlen(config_ptr->feature) + 1;	/* oversized */
 		config_ptr->feature_array = xmalloc(i * sizeof(char *));
-		tmp_str = xstrdup(config_ptr->feature);
+		tmp_str = xmalloc(i);
+		for (i=0, j=0; config_ptr->feature[i]; i++) {
+			if (!isspace(config_ptr->feature[i]))
+				tmp_str[j++] = config_ptr->feature[i];
+		}
+		if (i != j)
+			strcpy(config_ptr->feature, tmp_str);
 		i = 0;
 		token = strtok_r(tmp_str, ",", &last);
 		while (token) {
diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c
index 7fb6d043d..f0fd31137 100644
--- a/src/slurmctld/node_scheduler.c
+++ b/src/slurmctld/node_scheduler.c
@@ -3,13 +3,14 @@
  *	Note: there is a global node table (node_record_table_ptr) 
  *****************************************************************************
  *  Copyright (C) 2002-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>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -65,8 +66,11 @@
 
 #include "src/slurmctld/acct_policy.h"
 #include "src/slurmctld/agent.h"
+#include "src/slurmctld/basil_interface.h"
+#include "src/slurmctld/job_scheduler.h"
 #include "src/slurmctld/licenses.h"
 #include "src/slurmctld/node_scheduler.h"
+#include "src/slurmctld/reservation.h"
 #include "src/slurmctld/sched_plugin.h"
 #include "src/slurmctld/slurmctld.h"
 
@@ -74,7 +78,7 @@
 #define MAX_RETRIES   10
 
 struct node_set {		/* set of nodes with same configuration */
-	uint32_t cpus_per_node;	/* NOTE: This is the minimum count,
+	uint16_t cpus_per_node;	/* NOTE: This is the minimum count,
 				 * if FastSchedule==0 then individual 
 				 * nodes within the same configuration 
 				 * line (in slurm.conf) can actually 
@@ -103,8 +107,11 @@ static int _pick_best_nodes(struct node_set *node_set_ptr,
 			    struct part_record *part_ptr,
 			    uint32_t min_nodes, uint32_t max_nodes,
 			    uint32_t req_nodes, bool test_only);
+static void _reset_feature_counts(struct job_details *details_ptr);
+static bool _valid_feature_counts(struct job_details *details_ptr);
 static bitstr_t *_valid_features(struct job_details *detail_ptr, 
-				 struct config_record *config_ptr);
+				 struct config_record *config_ptr,
+				 bool update_count);
 
 
 /*
@@ -157,7 +164,12 @@ extern void deallocate_nodes(struct job_record *job_ptr, bool timeout,
 		error("slurm_sched_freealloc(%u): %m", job_ptr->job_id);
 	if (select_g_job_fini(job_ptr) != SLURM_SUCCESS)
 		error("select_g_job_fini(%u): %m", job_ptr->job_id);
-	
+	(void) epilog_slurmctld(job_ptr);
+
+#ifdef HAVE_CRAY_XT
+	basil_release(job_ptr);
+#endif /* HAVE_CRAY_XT */
+
 	agent_args = xmalloc(sizeof(agent_arg_t));
 	if (timeout)
 		agent_args->msg_type = REQUEST_KILL_TIMELIMIT;
@@ -277,6 +289,13 @@ static int _match_feature(char *seek, struct node_set *node_set_ptr)
  *	(uint16_t)NO_VAL	= default
  *	0			= exclusive
  *	1			= share=yes
+ *
+ * Return values:
+ *	0 = no sharing
+ *	1 = user requested sharing
+ *	2 = sharing enforced (either by partition or cons_res)
+ * (cons_res plugin needs to distinguish between "enforced" and
+ *  "requested" sharing)
  */
 static int
 _resolve_shared_status(uint16_t user_flag, uint16_t part_max_share,
@@ -287,13 +306,15 @@ _resolve_shared_status(uint16_t user_flag, uint16_t part_max_share,
 		return 0;
 	/* sharing if part=FORCE */
 	if (part_max_share & SHARED_FORCE)
-		return 1;
+		return 2;
 
 	if (cons_res_flag) {
 		/* sharing unless user requested exclusive */
 		if (user_flag == 0)
 			return 0;
-		return 1;
+		if (user_flag == 1)
+			return 1;
+		return 2;
 	} else {
 		/* no sharing if part=NO */
 		if (part_max_share == 1)
@@ -323,10 +344,31 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 	uint32_t saved_min_nodes, saved_job_min_nodes;
 	bitstr_t *saved_req_node_bitmap = NULL;
 	uint32_t saved_num_procs, saved_req_nodes;
-	int tmp_node_set_size;
+	int rc, tmp_node_set_size;
 	struct node_set *tmp_node_set_ptr;
 	int error_code = SLURM_SUCCESS, i;
 	bitstr_t *feature_bitmap, *accumulate_bitmap = NULL;
+	bitstr_t *save_avail_node_bitmap = NULL, *resv_bitmap;
+
+	/* Mark nodes reserved for other jobs as off limit for this job */
+	if (job_ptr->resv_name == NULL) {
+		time_t start_res = time(NULL);
+		rc = job_test_resv(job_ptr, &start_res, false, &resv_bitmap);
+		if ((rc != SLURM_SUCCESS) ||
+		    (job_ptr->details->req_node_bitmap &&
+		     (!bit_super_set(job_ptr->details->req_node_bitmap,
+				     resv_bitmap)))) {
+			FREE_NULL_BITMAP(resv_bitmap);
+			return ESLURM_NODES_BUSY;	/* reserved */
+		}
+		if (resv_bitmap &&
+		    (!bit_equal(resv_bitmap, avail_node_bitmap))) {
+			bit_and(resv_bitmap, avail_node_bitmap);
+			save_avail_node_bitmap = avail_node_bitmap;
+			avail_node_bitmap = resv_bitmap;
+		} else
+			FREE_NULL_BITMAP(resv_bitmap);
+	}
 
 	/* save job and request state */
 	saved_min_nodes = min_nodes;
@@ -348,7 +390,8 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 	    (job_ptr->details->req_node_layout == NULL)) {
 		ListIterator feat_iter;
 		struct feature_record *feat_ptr;
-		feat_iter = list_iterator_create(job_ptr->details->feature_list);
+		feat_iter = list_iterator_create(
+				job_ptr->details->feature_list);
 		while ((feat_ptr = (struct feature_record *)
 				list_next(feat_iter))) {
 			if (feat_ptr->count == 0)
@@ -361,9 +404,11 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 				if (!_match_feature(feat_ptr->name, 
 						    node_set_ptr+i))
 					continue;
-				tmp_node_set_ptr[tmp_node_set_size].cpus_per_node =
+				tmp_node_set_ptr[tmp_node_set_size].
+					cpus_per_node =
 					node_set_ptr[i].cpus_per_node;
-				tmp_node_set_ptr[tmp_node_set_size].real_memory =
+				tmp_node_set_ptr[tmp_node_set_size].
+					real_memory =
 					node_set_ptr[i].real_memory;
 				tmp_node_set_ptr[tmp_node_set_size].nodes =
 					node_set_ptr[i].nodes;
@@ -371,11 +416,13 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 					node_set_ptr[i].weight;
 				tmp_node_set_ptr[tmp_node_set_size].features = 
 					xstrdup(node_set_ptr[i].features);
-				tmp_node_set_ptr[tmp_node_set_size].feature_array =
+				tmp_node_set_ptr[tmp_node_set_size].
+					feature_array =
 					node_set_ptr[i].feature_array;
-				tmp_node_set_ptr[tmp_node_set_size].feature_bits = 
+				tmp_node_set_ptr[tmp_node_set_size].
+					feature_bits = 
 					bit_copy(node_set_ptr[i].feature_bits);
-				tmp_node_set_ptr[tmp_node_set_size].my_bitmap = 
+				tmp_node_set_ptr[tmp_node_set_size].my_bitmap =
 					bit_copy(node_set_ptr[i].my_bitmap);
 				tmp_node_set_size++;
 			}
@@ -391,29 +438,34 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 #if 0
 {
 			char *tmp_str = bitmap2node_name(feature_bitmap);
-			info("job %u needs %u nodes with feature %s, using %s", 
-				job_ptr->job_id, feat_ptr->count, 
-				feat_ptr->name, tmp_str);
+			info("job %u needs %u nodes with feature %s, "
+			     "using %s, error_code=%d", 
+			     job_ptr->job_id, feat_ptr->count, 
+			     feat_ptr->name, tmp_str, error_code);
 			xfree(tmp_str);
 }
 #endif
 			for (i=0; i<tmp_node_set_size; i++) {
 				xfree(tmp_node_set_ptr[i].features);
-				FREE_NULL_BITMAP(tmp_node_set_ptr[i].feature_bits);
-				FREE_NULL_BITMAP(tmp_node_set_ptr[i].my_bitmap);
+				FREE_NULL_BITMAP(tmp_node_set_ptr[i].
+						 feature_bits);
+				FREE_NULL_BITMAP(tmp_node_set_ptr[i].
+						 my_bitmap);
 			}
 			if (error_code != SLURM_SUCCESS)
 				break;
 			if (feature_bitmap) {
 				if (job_ptr->details->req_node_bitmap) {
-					bit_or(job_ptr->details->req_node_bitmap,
+					bit_or(job_ptr->details->
+					       req_node_bitmap,
 					       feature_bitmap);
 				} else {
 					job_ptr->details->req_node_bitmap =
 						bit_copy(feature_bitmap);
 				}
 				if (accumulate_bitmap) {
-					bit_or(accumulate_bitmap, feature_bitmap);
+					bit_or(accumulate_bitmap, 
+					       feature_bitmap);
 					bit_free(feature_bitmap);
 				} else
 					accumulate_bitmap = feature_bitmap;
@@ -479,6 +531,12 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 	job_ptr->num_procs = saved_num_procs;
 	job_ptr->details->min_nodes = saved_job_min_nodes;
 
+	/* Restore available node bitmap, ignoring reservations */
+	if (save_avail_node_bitmap) {
+		bit_free(avail_node_bitmap);
+		avail_node_bitmap = save_avail_node_bitmap;
+	}
+
 	return error_code;
 }
 
@@ -534,6 +592,8 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 	bool runable_avail = false;	/* Job can run with available nodes */
 	bool tried_sched = false;	/* Tried to schedule with avail nodes */
 	static uint32_t cr_enabled = NO_VAL;
+	static bool sched_gang_test = false;
+	static bool sched_gang = false;
 	select_type_plugin_info_t cr_type = SELECT_TYPE_INFO_NONE; 
 	int shared = 0, select_mode;
 
@@ -551,7 +611,7 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 	if (cr_enabled == NO_VAL) {
 		cr_enabled = 0;	/* select/linear and bluegene are no-ops */
 		error_code = select_g_get_info_from_plugin (SELECT_CR_PLUGIN, 
-							    &cr_enabled);
+							    NULL, &cr_enabled);
 		if (error_code != SLURM_SUCCESS) {
 			cr_enabled = NO_VAL;
 			return error_code;
@@ -569,23 +629,19 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 
 		cr_type = (select_type_plugin_info_t) slurmctld_conf.
 							select_type_param;
-                debug3("Job %u shared %d cr_enabled %d CR type %d num_procs %d", 
-		     job_ptr->job_id, shared, cr_enabled, cr_type, 
-		     job_ptr->num_procs);
 
-		if (shared == 0) {
-			partially_idle_node_bitmap = bit_copy(idle_node_bitmap);
-		} else {
-			/* Update partially_idle_node_bitmap to reflect the
-			 * idle and partially idle nodes */
-			error_code = select_g_get_info_from_plugin (
-					SELECT_BITMAP, 
-					&partially_idle_node_bitmap);
-			if (error_code != SLURM_SUCCESS) {
-				FREE_NULL_BITMAP(partially_idle_node_bitmap);
-				return error_code;
-			}
+		/* Set the partially_idle_node_bitmap to reflect the
+		 * idle and partially idle nodes */
+		error_code = select_g_get_info_from_plugin (SELECT_BITMAP,
+					job_ptr, &partially_idle_node_bitmap);
+		if (error_code != SLURM_SUCCESS) {
+			FREE_NULL_BITMAP(partially_idle_node_bitmap);
+			return error_code;
 		}
+                debug3("Job %u shared %d CR type %d num_procs %d nbits %d", 
+		     job_ptr->job_id, shared, cr_enabled, cr_type, 
+		     job_ptr->num_procs,
+		     bit_set_count(partially_idle_node_bitmap));
         }
 
 	if (job_ptr->details->req_node_bitmap) {  /* specific nodes required */
@@ -616,17 +672,33 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 				return ESLURM_NODES_BUSY;
 			}
 		}
-		if (shared) {
-			if (!bit_super_set(job_ptr->details->req_node_bitmap, 
-					   share_node_bitmap)) {
-				FREE_NULL_BITMAP(partially_idle_node_bitmap);
-				return ESLURM_NODES_BUSY;
-			}
-		} else {
-			if (!bit_super_set(job_ptr->details->req_node_bitmap, 
-					   idle_node_bitmap)) {
-				FREE_NULL_BITMAP(partially_idle_node_bitmap);
-				return ESLURM_NODES_BUSY;
+		/* If preemption is available via sched/gang, then
+		 * do NOT limit the set of available nodes by their
+		 * current 'sharable' or 'idle' setting */
+		if (!sched_gang_test) {
+			char *sched_type = slurm_get_sched_type();
+			if (strcmp(sched_type, "sched/gang") == 0)
+				sched_gang = true;
+			xfree(sched_type);
+			sched_gang_test = true;
+		}
+		if (!sched_gang) {
+			if (shared) {
+				if (!bit_super_set(job_ptr->details->
+						   req_node_bitmap, 
+						   share_node_bitmap)) {
+					FREE_NULL_BITMAP(
+						partially_idle_node_bitmap);
+					return ESLURM_NODES_BUSY;
+				}
+			} else {
+				if (!bit_super_set(job_ptr->details->
+						   req_node_bitmap, 
+						   idle_node_bitmap)) {
+					FREE_NULL_BITMAP(
+						partially_idle_node_bitmap);
+					return ESLURM_NODES_BUSY;
+				}
 			}
 		}
 
@@ -648,6 +720,9 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 			max_feature = j;
 	}
 
+	debug3("_pick_best_nodes: job %u idle_nodes %u share_nodes %u",
+		job_ptr->job_id, bit_set_count(idle_node_bitmap),
+		bit_set_count(share_node_bitmap));
 	/* Accumulate resources for this job based upon its required 
 	 * features (possibly with node counts). */
 	for (j = min_feature; j <= max_feature; j++) {
@@ -655,9 +730,10 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 			if (!bit_test(node_set_ptr[i].feature_bits, j))
 				continue;
 
-			if (total_bitmap)
-				bit_or(total_bitmap, node_set_ptr[i].my_bitmap);
-			else {
+			if (total_bitmap) {
+				bit_or(total_bitmap, 
+				       node_set_ptr[i].my_bitmap);
+			} else {
 				total_bitmap = bit_copy(
 						node_set_ptr[i].my_bitmap);
 				if (total_bitmap == NULL)
@@ -669,16 +745,29 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 				bit_and(node_set_ptr[i].my_bitmap,
 					partially_idle_node_bitmap);
 			}
-			if (shared) {
-				bit_and(node_set_ptr[i].my_bitmap,
-					share_node_bitmap);
-			} else {
-				bit_and(node_set_ptr[i].my_bitmap,
-					idle_node_bitmap);
+			/* If preemption is available via sched/gang, then
+			 * do NOT limit the set of available nodes by their
+			 * current 'sharable' or 'idle' setting */
+			if (!sched_gang_test) {
+				char *sched_type = slurm_get_sched_type();
+				if (strcmp(sched_type, "sched/gang") == 0)
+					sched_gang = true;
+				xfree(sched_type);
+				sched_gang_test = true;
 			}
-			if (avail_bitmap)
-				bit_or(avail_bitmap, node_set_ptr[i].my_bitmap);
-			else {
+			if (!sched_gang) {
+				if (shared) {
+					bit_and(node_set_ptr[i].my_bitmap,
+						share_node_bitmap);
+				} else {
+					bit_and(node_set_ptr[i].my_bitmap,
+						idle_node_bitmap);
+				}
+			}
+			if (avail_bitmap) {
+				bit_or(avail_bitmap, 
+				       node_set_ptr[i].my_bitmap);
+			} else {
 				avail_bitmap = bit_copy(
 					node_set_ptr[i].my_bitmap);
 				if (avail_bitmap == NULL)
@@ -688,7 +777,8 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 			tried_sched = false;	/* need to test these nodes */
 
 			if (shared && ((i+1) < node_set_size) && 
-			    (node_set_ptr[i].weight == node_set_ptr[i+1].weight)) {
+			    (node_set_ptr[i].weight == 
+			     node_set_ptr[i+1].weight)) {
 				/* Keep accumulating so we can pick the
 				 * most lightly loaded nodes */
 				continue;
@@ -782,11 +872,11 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 					fatal("bit_copy malloc failure");
 				bit_and(avail_bitmap, avail_node_bitmap);
 				pick_code = select_g_job_test(job_ptr, 
-							      avail_bitmap, 
-							      min_nodes, 
-							      max_nodes,
-							      req_nodes,
-							      SELECT_MODE_TEST_ONLY);
+						avail_bitmap, 
+						min_nodes, 
+						max_nodes,
+						req_nodes,
+						SELECT_MODE_TEST_ONLY);
 				if (pick_code == SLURM_SUCCESS) {
 					runable_ever  = true;
 					if (bit_set_count(avail_bitmap) <=
@@ -799,11 +889,11 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 			}
 			if (!runable_ever) {
 				pick_code = select_g_job_test(job_ptr, 
-							      total_bitmap, 
-							      min_nodes, 
-							      max_nodes,
-							      req_nodes, 
-							      SELECT_MODE_TEST_ONLY);
+						total_bitmap, 
+						min_nodes, 
+						max_nodes,
+						req_nodes, 
+						SELECT_MODE_TEST_ONLY);
 				if (pick_code == SLURM_SUCCESS) {
 					FREE_NULL_BITMAP(possible_bitmap);
 					possible_bitmap = total_bitmap;
@@ -824,7 +914,8 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 		error_code = ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE;
 	if (!runable_ever) {
 		error_code = ESLURM_REQUESTED_NODE_CONFIG_UNAVAILABLE;
-		info("_pick_best_nodes: job %u never runnable", job_ptr->job_id);
+		info("_pick_best_nodes: job %u never runnable", 
+		     job_ptr->job_id);
 	}
 
 	if (error_code == SLURM_SUCCESS) {
@@ -898,6 +989,7 @@ extern int select_nodes(struct job_record *job_ptr, bool test_only,
 		 fail_reason = WAIT_PART_NODE_LIMIT;
 	if (fail_reason != WAIT_NO_REASON) {
 		job_ptr->state_reason = fail_reason;
+		xfree(job_ptr->state_desc);
 		last_job_update = now;
 		if (job_ptr->priority == 0)	/* user/admin hold */
 			return ESLURM_JOB_HELD;
@@ -955,11 +1047,16 @@ extern int select_nodes(struct job_record *job_ptr, bool test_only,
 			debug3("JobId=%u not runnable with present config",
 			       job_ptr->job_id);
 			job_ptr->state_reason = WAIT_PART_NODE_LIMIT;
+			xfree(job_ptr->state_desc);
 			if (job_ptr->priority != 0)  /* Move to end of queue */
 				job_ptr->priority = 1;
 			last_job_update = now;
+		} else if (error_code == ESLURM_RESERVATION_NOT_USABLE) {
+			job_ptr->state_reason = WAIT_RESERVATION;
+			xfree(job_ptr->state_desc);
 		} else {
 			job_ptr->state_reason = WAIT_RESOURCES;
+			xfree(job_ptr->state_desc);
 			if (error_code == ESLURM_NODES_BUSY)
 				slurm_sched_job_is_pending();
 		}
@@ -971,6 +1068,15 @@ extern int select_nodes(struct job_record *job_ptr, bool test_only,
 		goto cleanup;
 	}
 
+#ifdef HAVE_CRAY_XT
+	if (basil_reserve(job_ptr) != SLURM_SUCCESS) {
+		job_ptr->state_reason = WAIT_RESOURCES;
+		xfree(job_ptr->state_desc);
+		error_code = ESLURM_NODES_BUSY;
+		goto cleanup;
+	}
+#endif	/* HAVE_CRAY_XT */
+
 	/* This job may be getting requeued, clear vestigial 
 	 * state information before over-writting and leaking 
 	 * memory. */
@@ -990,8 +1096,8 @@ extern int select_nodes(struct job_record *job_ptr, bool test_only,
 				    (365 * 24 * 60 * 60); /* secs in year */
 	else
 		job_ptr->end_time = job_ptr->start_time + 
-				    (job_ptr->time_limit * 60);   /* secs */
-
+			(job_ptr->time_limit * 60);   /* secs */
+	
 	if (select_g_job_begin(job_ptr) != SLURM_SUCCESS) {
 		/* Leave job queued, something is hosed */
 		error("select_g_job_begin(%u): %m", job_ptr->job_id);
@@ -1004,6 +1110,7 @@ extern int select_nodes(struct job_record *job_ptr, bool test_only,
 
 	/* assign the nodes and stage_in the job */
 	job_ptr->state_reason = WAIT_NO_REASON;
+	xfree(job_ptr->state_desc);
 	job_ptr->nodes = bitmap2node_name(select_bitmap);
 	select_bitmap = NULL;	/* nothing left to free */
 	allocate_nodes(job_ptr);
@@ -1018,9 +1125,9 @@ extern int select_nodes(struct job_record *job_ptr, bool test_only,
 
 	acct_policy_job_begin(job_ptr);
 
-	jobacct_storage_g_job_start(
-		acct_db_conn, slurmctld_cluster_name, job_ptr);
-
+	jobacct_storage_g_job_start(acct_db_conn, slurmctld_cluster_name, 
+				    job_ptr);
+	prolog_slurmctld(job_ptr);
 	slurm_sched_newalloc(job_ptr);
 
       cleanup:
@@ -1039,11 +1146,48 @@ extern int select_nodes(struct job_record *job_ptr, bool test_only,
 	return error_code;
 }
 
+/* Clear tmp_cnt for all features of given job */
+static void _reset_feature_counts(struct job_details *details_ptr)
+{
+	ListIterator feat_iter;
+	struct feature_record *feat_ptr;
+
+	if (details_ptr->feature_list == NULL)	/* no constraints */
+		return;
+
+	feat_iter = list_iterator_create(details_ptr->feature_list);
+	while ((feat_ptr = (struct feature_record *) list_next(feat_iter))) {
+		feat_ptr->tmp_cnt = 0;
+	}
+	list_iterator_destroy(feat_iter);
+}
+
+/* Verify that tmp_cnt >= count for all features of given job */
+static bool _valid_feature_counts(struct job_details *details_ptr)
+{
+	ListIterator feat_iter;
+	struct feature_record *feat_ptr;
+	bool result = true;
+
+	if (details_ptr->feature_list == NULL)	/* no constraints */
+		return result;
+
+	feat_iter = list_iterator_create(details_ptr->feature_list);
+	while ((feat_ptr = (struct feature_record *) list_next(feat_iter))) {
+		if (feat_ptr->tmp_cnt >= feat_ptr->count)
+			continue;
+		result = false;
+		break;
+	}
+	list_iterator_destroy(feat_iter);
+	return result;
+}
+
 /*
  * job_req_node_filter - job reqeust node filter.
  *	clear from a bitmap the nodes which can not be used for a job
  *	test memory size, required features, processor count, etc.
- * NOTE: Does not support exclusive OR of features or feature counts.
+ * NOTE: Does not support exclusive OR of features.
  *	It just matches first element of XOR and ignores count.
  * IN job_ptr - pointer to node to be scheduled
  * IN/OUT bitmap - set of nodes being considered for use
@@ -1065,23 +1209,27 @@ extern int job_req_node_filter(struct job_record *job_ptr,
 		return EINVAL;
 	}
 
+	_reset_feature_counts(detail_ptr);
 	mc_ptr = detail_ptr->mc_ptr;
 	for (i=0; i< node_record_count; i++) {
 		if (!bit_test(avail_bitmap, i))
 			continue;
 		node_ptr = node_record_table_ptr + i;
 		config_ptr = node_ptr->config_ptr;
-		feature_bitmap = _valid_features(detail_ptr, config_ptr);
-		if ((feature_bitmap == NULL) || (!bit_test(feature_bitmap, 0))) {
+		feature_bitmap = _valid_features(detail_ptr, config_ptr, true);
+		if ((feature_bitmap == NULL) || 
+		    (!bit_test(feature_bitmap, 0))) {
 			bit_clear(avail_bitmap, i);
 			continue;
 		}
 		FREE_NULL_BITMAP(feature_bitmap);
 		if (slurmctld_conf.fast_schedule) {
-			if ((detail_ptr->job_min_procs    > config_ptr->cpus       )
+			if ((detail_ptr->job_min_procs    > 
+			     config_ptr->cpus       )
 			||  ((detail_ptr->job_min_memory & (~MEM_PER_CPU)) > 
 			      config_ptr->real_memory) 
-			||  (detail_ptr->job_min_tmp_disk > config_ptr->tmp_disk)) {
+			||  (detail_ptr->job_min_tmp_disk > 
+			     config_ptr->tmp_disk)) {
 				bit_clear(avail_bitmap, i);
 				continue;
 			}
@@ -1091,15 +1239,18 @@ extern int job_req_node_filter(struct job_record *job_ptr,
 			||   (mc_ptr->min_threads     > config_ptr->threads  )
 			||   (mc_ptr->job_min_sockets > config_ptr->sockets  )
 			||   (mc_ptr->job_min_cores   > config_ptr->cores    )
-			||   (mc_ptr->job_min_threads > config_ptr->threads  ))) {
+			||   (mc_ptr->job_min_threads > 
+			      config_ptr->threads  ))) {
 				bit_clear(avail_bitmap, i);
 				continue;
 			}
 		} else {
-			if ((detail_ptr->job_min_procs    > node_ptr->cpus       )
+			if ((detail_ptr->job_min_procs    > 
+			     node_ptr->cpus       )
 			||  ((detail_ptr->job_min_memory & (~MEM_PER_CPU)) >
 			      node_ptr->real_memory) 
-			||  (detail_ptr->job_min_tmp_disk > node_ptr->tmp_disk)) {
+			||  (detail_ptr->job_min_tmp_disk > 
+			     node_ptr->tmp_disk)) {
 				bit_clear(avail_bitmap, i);
 				continue;
 			}
@@ -1116,6 +1267,10 @@ extern int job_req_node_filter(struct job_record *job_ptr,
 		}
 	}
 	FREE_NULL_BITMAP(feature_bitmap);
+
+	if (!_valid_feature_counts(detail_ptr))
+		return EINVAL;
+
 	return SLURM_SUCCESS;
 }
 
@@ -1133,26 +1288,57 @@ static int _build_node_list(struct job_record *job_ptr,
 			    struct node_set **node_set_pptr,
 			    int *node_set_size)
 {
-	int node_set_inx;
+	int i, node_set_inx, power_cnt, rc;
 	struct node_set *node_set_ptr;
 	struct config_record *config_ptr;
 	struct part_record *part_ptr = job_ptr->part_ptr;
 	ListIterator config_iterator;
 	int check_node_config, config_filter = 0;
 	struct job_details *detail_ptr = job_ptr->details;
-	bitstr_t *exc_node_mask = NULL;
+	bitstr_t *power_up_bitmap = NULL, *usable_node_mask = NULL;
 	multi_core_data_t *mc_ptr = detail_ptr->mc_ptr;
 	bitstr_t *tmp_feature;
+	uint32_t max_weight = 0;
+
+	if (job_ptr->resv_name) {
+		/* Limit node selection to those in selected reservation */
+		time_t start_res = time(NULL);
+		rc = job_test_resv(job_ptr, &start_res, false, &usable_node_mask);
+		if (rc != SLURM_SUCCESS) {
+			job_ptr->state_reason = WAIT_RESERVATION;
+			xfree(job_ptr->state_desc);
+			if (rc == ESLURM_INVALID_TIME_VALUE)
+				return ESLURM_RESERVATION_NOT_USABLE;
+			/* Defunct reservation or accesss denied */
+			return ESLURM_REQUESTED_NODE_CONFIG_UNAVAILABLE;
+		}
+		if ((detail_ptr->req_node_bitmap) &&
+		    (!bit_super_set(detail_ptr->req_node_bitmap, 
+				    usable_node_mask))) {
+			job_ptr->state_reason = WAIT_RESERVATION;
+			xfree(job_ptr->state_desc);
+			FREE_NULL_BITMAP(usable_node_mask);
+			/* Required nodes outside of the reservation */
+			return ESLURM_REQUESTED_NODE_CONFIG_UNAVAILABLE;
+		}
+	}
 
 	node_set_inx = 0;
 	node_set_ptr = (struct node_set *) 
 			xmalloc(sizeof(struct node_set) * 2);
 	node_set_ptr[node_set_inx+1].my_bitmap = NULL;
 	if (detail_ptr->exc_node_bitmap) {
-		exc_node_mask = bit_copy(detail_ptr->exc_node_bitmap);
-		if (exc_node_mask == NULL)
-			fatal("bit_copy malloc failure");
-		bit_not(exc_node_mask);
+		if (usable_node_mask) {
+			bit_not(detail_ptr->exc_node_bitmap);
+			bit_and(usable_node_mask, detail_ptr->exc_node_bitmap);
+			bit_not(detail_ptr->exc_node_bitmap);
+		} else {
+			usable_node_mask = 
+				bit_copy(detail_ptr->exc_node_bitmap);
+			if (usable_node_mask == NULL)
+				fatal("bit_copy malloc failure");
+			bit_not(usable_node_mask);
+		}
 	}
 
 	config_iterator = list_iterator_create(config_list);
@@ -1195,9 +1381,9 @@ static int _build_node_list(struct job_record *job_ptr,
 			fatal("bit_copy malloc failure");
 		bit_and(node_set_ptr[node_set_inx].my_bitmap,
 			part_ptr->node_bitmap);
-		if (exc_node_mask) {
+		if (usable_node_mask) {
 			bit_and(node_set_ptr[node_set_inx].my_bitmap,
-				exc_node_mask);
+				usable_node_mask);
 		}
 		node_set_ptr[node_set_inx].nodes =
 			bit_set_count(node_set_ptr[node_set_inx].my_bitmap);
@@ -1211,7 +1397,8 @@ static int _build_node_list(struct job_record *job_ptr,
 			continue;
 		}
 
-		tmp_feature = _valid_features(job_ptr->details, config_ptr);
+		tmp_feature = _valid_features(job_ptr->details, config_ptr, 
+					      false);
 		if (tmp_feature == NULL) {
 			FREE_NULL_BITMAP(node_set_ptr[node_set_inx].my_bitmap);
 			continue;
@@ -1221,9 +1408,10 @@ static int _build_node_list(struct job_record *job_ptr,
 		node_set_ptr[node_set_inx].cpus_per_node =
 			config_ptr->cpus;
 		node_set_ptr[node_set_inx].real_memory =
-			config_ptr->real_memory;		
+			config_ptr->real_memory;
 		node_set_ptr[node_set_inx].weight =
 			config_ptr->weight;
+		max_weight = MAX(max_weight, config_ptr->weight);
 		node_set_ptr[node_set_inx].features = 
 			xstrdup(config_ptr->feature);
 		node_set_ptr[node_set_inx].feature_array = 
@@ -1242,7 +1430,7 @@ static int _build_node_list(struct job_record *job_ptr,
 	xfree(node_set_ptr[node_set_inx].features);
 	FREE_NULL_BITMAP(node_set_ptr[node_set_inx].my_bitmap);
 	FREE_NULL_BITMAP(node_set_ptr[node_set_inx].feature_bits);
-	FREE_NULL_BITMAP(exc_node_mask);
+	FREE_NULL_BITMAP(usable_node_mask);
 
 	if (node_set_inx == 0) {
 		info("No nodes satisfy job %u requirements", 
@@ -1251,6 +1439,51 @@ static int _build_node_list(struct job_record *job_ptr,
 		return ESLURM_REQUESTED_NODE_CONFIG_UNAVAILABLE;
 	}
 
+	/* If any nodes are powered down, put them into a new node_set
+	 * record with a higher scheduling weight . This means we avoid
+	 * scheduling jobs on powered down nodes where possible. */
+	for (i = (node_set_inx-1); i >= 0; i--) {
+		power_cnt = bit_overlap(node_set_ptr[i].my_bitmap,
+				        power_node_bitmap);
+		if (power_cnt == 0)
+			continue;	/* no nodes powered down */
+		if (power_cnt == node_set_ptr[i].nodes) {
+			node_set_ptr[i].weight += max_weight;	/* avoid all */
+			continue;	/* all nodes powered down */
+		}
+
+		/* Some nodes powered down, others up, split record */
+		node_set_ptr[node_set_inx].cpus_per_node =
+			node_set_ptr[i].cpus_per_node;
+		node_set_ptr[node_set_inx].real_memory =
+			node_set_ptr[i].real_memory;
+		node_set_ptr[node_set_inx].nodes = power_cnt;
+		node_set_ptr[i].nodes -= power_cnt;
+		node_set_ptr[node_set_inx].weight =
+			node_set_ptr[i].weight + max_weight;
+		node_set_ptr[node_set_inx].features =
+			xstrdup(node_set_ptr[i].features);
+		node_set_ptr[node_set_inx].feature_array =
+			node_set_ptr[i].feature_array;
+		node_set_ptr[node_set_inx].feature_bits =
+			bit_copy(node_set_ptr[i].feature_bits);
+		node_set_ptr[node_set_inx].my_bitmap = 
+			bit_copy(node_set_ptr[i].my_bitmap);
+		bit_and(node_set_ptr[node_set_inx].my_bitmap,
+			power_node_bitmap);
+		if (power_up_bitmap == NULL) {
+			power_up_bitmap = bit_copy(power_node_bitmap);
+			bit_not(power_up_bitmap);
+		}
+		bit_and(node_set_ptr[i].my_bitmap, power_up_bitmap);
+
+		node_set_inx++;
+		xrealloc(node_set_ptr,
+			 sizeof(struct node_set) * (node_set_inx + 2));
+		node_set_ptr[node_set_inx + 1].my_bitmap = NULL;
+	}
+	FREE_NULL_BITMAP(power_up_bitmap);
+
 	*node_set_size = node_set_inx;
 	*node_set_pptr = node_set_ptr;
 	return SLURM_SUCCESS;
@@ -1358,25 +1591,8 @@ static int _nodes_in_sets(bitstr_t *req_bitmap,
 	return error_code;
 }
 
-/* Update record of a job's allocated processors for each step */
-static void _alloc_step_cpus(struct job_record *job_ptr)
-{
-	ListIterator step_iterator;
-	struct step_record *step_ptr;
-
-	if (job_ptr->step_list == NULL)
-		return;
-
-	step_iterator = list_iterator_create(job_ptr->step_list);
-	while ((step_ptr = (struct step_record *) list_next(step_iterator))) {
-		step_alloc_lps(step_ptr);
-	}
-	list_iterator_destroy(step_iterator);
-}
-
 /*
- * build_node_details - set cpu counts and addresses for allocated nodes:
- *	cpu_count_reps, cpus_per_node, node_addr, node_cnt, num_cpu_groups
+ * build_node_details - sets addresses for allocated nodes
  * IN job_ptr - pointer to a job record
  */
 extern void build_node_details(struct job_record *job_ptr)
@@ -1384,107 +1600,30 @@ extern void build_node_details(struct job_record *job_ptr)
 	hostlist_t host_list = NULL;
 	struct node_record *node_ptr;
 	char *this_node_name;
-        int error_code = SLURM_SUCCESS;
-	int node_inx = 0, cpu_inx = -1;
-        int cr_count = 0;
-	uint32_t total_procs = 0;
+	int node_inx = 0;
 
 	if ((job_ptr->node_bitmap == NULL) || (job_ptr->nodes == NULL)) {
 		/* No nodes allocated, we're done... */
-		job_ptr->num_cpu_groups = 0;
 		job_ptr->node_cnt = 0;
-		job_ptr->cpus_per_node = NULL;
-		job_ptr->cpu_count_reps = NULL;
 		job_ptr->node_addr = NULL;
-		job_ptr->alloc_lps_cnt = 0;
-		xfree(job_ptr->alloc_lps);
-		xfree(job_ptr->used_lps);
 		return;
 	}
-
-	job_ptr->num_cpu_groups = 0;
 	
 	/* Use hostlist here to insure ordering of info matches that of srun */
 	if ((host_list = hostlist_create(job_ptr->nodes)) == NULL)
 		fatal("hostlist_create error for %s: %m", job_ptr->nodes);
-
 	job_ptr->node_cnt = hostlist_count(host_list);	
-
-	xrealloc(job_ptr->cpus_per_node, 
-		 (sizeof(uint32_t) * job_ptr->node_cnt));
-	xrealloc(job_ptr->cpu_count_reps, 
-		 (sizeof(uint32_t) * job_ptr->node_cnt));
 	xrealloc(job_ptr->node_addr, 
 		 (sizeof(slurm_addr) * job_ptr->node_cnt));	
 
-	job_ptr->alloc_lps_cnt = job_ptr->node_cnt;
-	xrealloc(job_ptr->alloc_lps,
-		 (sizeof(uint32_t) * job_ptr->node_cnt));
-	xrealloc(job_ptr->used_lps,
-		 (sizeof(uint32_t) * job_ptr->node_cnt));
-
 	while ((this_node_name = hostlist_shift(host_list))) {
-		node_ptr = find_node_record(this_node_name);
-		     		
-		if (node_ptr) {
-			uint16_t usable_lps = 0;
-#ifdef HAVE_BG
-			if(job_ptr->node_cnt == 1) {
-				memcpy(&job_ptr->node_addr[node_inx++],
-				       &node_ptr->slurm_addr, 
-				       sizeof(slurm_addr));
-				cpu_inx++;
-				
-				job_ptr->cpus_per_node[cpu_inx] =
-					job_ptr->num_procs;
-				total_procs += job_ptr->num_procs;
-				job_ptr->cpu_count_reps[cpu_inx] = 1;
-				job_ptr->alloc_lps[0] = job_ptr->num_procs;
-				job_ptr->used_lps[0]  = 0;
-				goto cleanup;
-			}
-#endif
-			error_code = select_g_get_extra_jobinfo( 
-				node_ptr, job_ptr, SELECT_AVAIL_CPUS, 
-				&usable_lps);
-			if (error_code == SLURM_SUCCESS) {
-				if (job_ptr->alloc_lps) {
-					job_ptr->used_lps[cr_count] = 0;
-					job_ptr->alloc_lps[cr_count++] =
-								usable_lps;
-				}
-			} else {
-				error("Unable to get extra jobinfo "
-				      "from JobId=%u", job_ptr->job_id);
-				/* Job is likely completed according to 
-				 * select plugin */
-				if (job_ptr->alloc_lps) {
-					job_ptr->used_lps[cr_count] = 0;
-					job_ptr->alloc_lps[cr_count++] = 0;
-				}
-			}
-			
+		if ((node_ptr = find_node_record(this_node_name))) {
 			memcpy(&job_ptr->node_addr[node_inx++],
 			       &node_ptr->slurm_addr, sizeof(slurm_addr));
-
-			if ((cpu_inx == -1) ||
-			    (job_ptr->cpus_per_node[cpu_inx] !=
-			     usable_lps)) {
-				cpu_inx++;
-				job_ptr->cpus_per_node[cpu_inx] =
-					usable_lps;
-				job_ptr->cpu_count_reps[cpu_inx] = 1;
-			} else
-				job_ptr->cpu_count_reps[cpu_inx]++;
-			total_procs +=  usable_lps;
-
 		} else {
 			error("Invalid node %s in JobId=%u",
 			      this_node_name, job_ptr->job_id);
 		}
-#ifdef HAVE_BG
- cleanup:	
-#endif
 		free(this_node_name);
 	}
 	hostlist_destroy(host_list);
@@ -1492,9 +1631,6 @@ extern void build_node_details(struct job_record *job_ptr)
 		error("Node count mismatch for JobId=%u (%u,%u)",
 		      job_ptr->job_id, job_ptr->node_cnt, node_inx);
 	}
-	job_ptr->num_cpu_groups = cpu_inx + 1;
-	job_ptr->total_procs = total_procs;
-	_alloc_step_cpus(job_ptr);	/* reset counters */
 }
 
 /*
@@ -1502,6 +1638,8 @@ extern void build_node_details(struct job_record *job_ptr)
  *	the available nodes
  * IN details_ptr - job requirement details, includes requested features
  * IN config_ptr - node's configuration record
+ * IN update_count - if set, then increment tmp_cnt (temporary counter)
+ *	for matched features
  * RET NULL if request is not satisfied, otherwise a bitmap indicating 
  *	which mutually exclusive features are satisfied. For example
  *	_valid_features("[fs1|fs2|fs3|fs4]", "fs3") returns a bitmap with
@@ -1512,34 +1650,44 @@ extern void build_node_details(struct job_record *job_ptr)
  *	mutually exclusive feature list.
  */
 static bitstr_t *_valid_features(struct job_details *details_ptr, 
-				 struct config_record *config_ptr)
+				 struct config_record *config_ptr,
+				 bool update_count)
 {
 	bitstr_t *result_bits = (bitstr_t *) NULL;
 	ListIterator feat_iter;
 	struct feature_record *feat_ptr;
-	int found, last_op, position = 0, result;
-	int save_op = FEATURE_OP_AND, save_result=1;
+	bool found, test_names, result;
+	int last_op, position = 0;
+	int save_op = FEATURE_OP_AND, save_result = 1;
 
-	if (details_ptr->feature_list == NULL) {/* no constraints */
+	if (details_ptr->feature_list == NULL) {	/* no constraints */
 		result_bits = bit_alloc(MAX_FEATURES);
 		bit_set(result_bits, 0);
 		return result_bits;
 	}
 
-	result = 1;				/* assume good for now */
+	result = true;				/* assume good for now */
 	last_op = FEATURE_OP_AND;
 	feat_iter = list_iterator_create(details_ptr->feature_list);
 	while ((feat_ptr = (struct feature_record *) list_next(feat_iter))) {
-		found = 0;
-		if (feat_ptr->count)
-			found = 1;
-		else if (config_ptr->feature_array) {
+		test_names = false;
+		found = false;
+		if (feat_ptr->count) {
+			found = true;
+			if (update_count)
+				test_names = true;
+		} else	
+			test_names = true;
+
+		if (test_names && config_ptr->feature_array) {
 			int i;
 			for (i=0; config_ptr->feature_array[i]; i++) {
 				if (strcmp(feat_ptr->name, 
 					   config_ptr->feature_array[i]))
 					continue;
-				found = 1;
+				found = true;
+				if (update_count && feat_ptr->count)
+					feat_ptr->tmp_cnt++;
 				break;
 			}
 		}
@@ -1654,6 +1802,8 @@ extern void re_kill_job(struct job_record *job_ptr)
 
 	if (agent_args->node_count == 0) {
 		xfree(kill_job);
+		if(agent_args->hostlist)
+			hostlist_destroy(agent_args->hostlist);
 		xfree(agent_args);
 		hostlist_destroy(kill_hostlist);
 		return;
diff --git a/src/slurmctld/node_scheduler.h b/src/slurmctld/node_scheduler.h
index a59fa5b1e..d8ae5d80a 100644
--- a/src/slurmctld/node_scheduler.h
+++ b/src/slurmctld/node_scheduler.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -47,8 +48,7 @@
 extern void allocate_nodes(struct job_record *job_ptr);
 
 /*
- * build_node_details - set cpu counts and addresses for allocated nodes:
- *	cpu_count_reps, cpus_per_node, node_addr, node_cnt, num_cpu_groups
+ * build_node_details - sets addresses for allocated nodes
  * IN job_ptr - pointer to a job record
  */
 extern void build_node_details(struct job_record *job_ptr);
diff --git a/src/slurmctld/partition_mgr.c b/src/slurmctld/partition_mgr.c
index 6a0b0976f..9ad1c2ec2 100644
--- a/src/slurmctld/partition_mgr.c
+++ b/src/slurmctld/partition_mgr.c
@@ -2,15 +2,16 @@
  *  partition_mgr.c - manage the partition information of slurm
  *	Note: there is a global partition list (part_list) and
  *	time stamp (last_part_update)
- *  $Id: partition_mgr.c 15121 2008-09-19 18:31:06Z da $
+ *  $Id: partition_mgr.c 17701 2009-06-03 21:02:09Z da $
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -67,7 +68,7 @@
 #include "src/slurmctld/slurmctld.h"
 
 /* Change PART_STATE_VERSION value when changing the state save format */
-#define PART_STATE_VERSION      "VER001"
+#define PART_STATE_VERSION      "VER002"
 
 /* Global variables */
 struct part_record default_part;	/* default configuration values */
@@ -75,6 +76,7 @@ List part_list = NULL;			/* partition list */
 char *default_part_name = NULL;		/* name of default partition */
 struct part_record *default_part_loc = NULL; /* default partition location */
 time_t last_part_update;	/* time of last update to partition records */
+uint16_t part_max_priority = 0;         /* max priority in all partitions */
 
 static int    _build_part_bitmap(struct part_record *part_ptr);
 static int    _delete_part_record(char *name);
@@ -109,8 +111,7 @@ static int _build_part_bitmap(struct part_record *part_ptr)
 	part_ptr->total_nodes = 0;
 
 	if (part_ptr->node_bitmap == NULL) {
-		part_ptr->node_bitmap = 
-			(bitstr_t *) bit_alloc(node_record_count);
+		part_ptr->node_bitmap = bit_alloc(node_record_count);
 		if (part_ptr->node_bitmap == NULL)
 			fatal("bit_alloc malloc failure");
 		old_bitmap = NULL;
@@ -222,6 +223,7 @@ struct part_record *create_part_record(void)
 	part_ptr->disable_root_jobs = default_part.disable_root_jobs;
 	part_ptr->hidden            = default_part.hidden;
 	part_ptr->max_time          = default_part.max_time;
+	part_ptr->default_time      = default_part.default_time;
 	part_ptr->max_nodes         = default_part.max_nodes;
 	part_ptr->max_nodes_orig    = default_part.max_nodes;
 	part_ptr->min_nodes         = default_part.min_nodes;
@@ -230,6 +232,9 @@ struct part_record *create_part_record(void)
 	part_ptr->state_up          = default_part.state_up;
 	part_ptr->max_share         = default_part.max_share;
 	part_ptr->priority          = default_part.priority;
+	if(part_max_priority)
+		part_ptr->norm_priority = (double)default_part.priority 
+			/ (double)part_max_priority;
 	part_ptr->node_bitmap       = NULL;
 
 	if (default_part.allow_groups)
@@ -237,6 +242,12 @@ struct part_record *create_part_record(void)
 	else
 		part_ptr->allow_groups = NULL;
 
+	if (default_part.allow_alloc_nodes)
+		part_ptr->allow_alloc_nodes = xstrdup(default_part.
+						      allow_alloc_nodes);
+	else
+		part_ptr->allow_alloc_nodes = NULL;
+
 	if (default_part.nodes)
 		part_ptr->nodes = xstrdup(default_part.nodes);
 	else
@@ -278,6 +289,8 @@ static int _delete_part_record(char *name)
 /* dump_all_part_state - save the state of all partitions to file */
 int dump_all_part_state(void)
 {
+	/* Save high-water mark to avoid buffer growth with copies */
+	static int high_buffer_size = BUF_SIZE;
 	ListIterator part_iterator;
 	struct part_record *part_ptr;
 	int error_code = 0, log_fd;
@@ -285,7 +298,7 @@ int dump_all_part_state(void)
 	/* Locks: Read partition */
 	slurmctld_lock_t part_read_lock =
 	    { READ_LOCK, NO_LOCK, NO_LOCK, READ_LOCK };
-	Buf buffer = init_buf(BUF_SIZE);
+	Buf buffer = init_buf(high_buffer_size);
 	DEF_TIMERS;
 
 	START_TIMER;
@@ -296,6 +309,8 @@ int dump_all_part_state(void)
 	/* write partition records to buffer */
 	lock_slurmctld(part_read_lock);
 	part_iterator = list_iterator_create(part_list);
+	if (!part_iterator)
+		fatal("list_iterator_create malloc");
 	while ((part_ptr = (struct part_record *) list_next(part_iterator))) {
 		xassert (part_ptr->magic == PART_MAGIC);
 		_dump_part_state(part_ptr, buffer);
@@ -321,7 +336,7 @@ int dump_all_part_state(void)
 	} else {
 		int pos = 0, nwrite = get_buf_offset(buffer), amount;
 		char *data = (char *)get_buf_data(buffer);
-
+		high_buffer_size = MAX(nwrite, high_buffer_size);
 		while (nwrite > 0) {
 			amount = write(log_fd, &data[pos], nwrite);
 			if ((amount < 0) && (errno != EINTR)) {
@@ -372,6 +387,7 @@ static void _dump_part_state(struct part_record *part_ptr, Buf buffer)
 
 	packstr(part_ptr->name,          buffer);
 	pack32(part_ptr->max_time,       buffer);
+	pack32(part_ptr->default_time,   buffer);
 	pack32(part_ptr->max_nodes_orig, buffer);
 	pack32(part_ptr->min_nodes_orig, buffer);
 
@@ -383,6 +399,7 @@ static void _dump_part_state(struct part_record *part_ptr, Buf buffer)
 
 	pack16(part_ptr->state_up,       buffer);
 	packstr(part_ptr->allow_groups,  buffer);
+	packstr(part_ptr->allow_alloc_nodes, buffer);
 	packstr(part_ptr->nodes,         buffer);
 }
 
@@ -395,7 +412,7 @@ static void _dump_part_state(struct part_record *part_ptr, Buf buffer)
 int load_all_part_state(void)
 {
 	char *part_name, *allow_groups, *nodes, *state_file, *data = NULL;
-	uint32_t max_time, max_nodes, min_nodes;
+	uint32_t max_time, default_time, max_nodes, min_nodes;
 	time_t time;
 	uint16_t def_part_flag, hidden, root_only;
 	uint16_t max_share, priority, state_up;
@@ -405,6 +422,7 @@ int load_all_part_state(void)
 	int state_fd;
 	Buf buffer;
 	char *ver_str = NULL;
+	char* allow_alloc_nodes = NULL;
 
 	/* read the file */
 	state_file = xstrdup(slurmctld_conf.state_save_location);
@@ -458,6 +476,7 @@ int load_all_part_state(void)
 	while (remaining_buf(buffer) > 0) {
 		safe_unpackstr_xmalloc(&part_name, &name_len, buffer);
 		safe_unpack32(&max_time, buffer);
+		safe_unpack32(&default_time, buffer);
 		safe_unpack32(&max_nodes, buffer);
 		safe_unpack32(&min_nodes, buffer);
 
@@ -467,8 +486,12 @@ int load_all_part_state(void)
 		safe_unpack16(&max_share, buffer);
 		safe_unpack16(&priority,  buffer);
 
+		if(priority > part_max_priority) 
+			part_max_priority = priority;
+
 		safe_unpack16(&state_up, buffer);
 		safe_unpackstr_xmalloc(&allow_groups, &name_len, buffer);
+		safe_unpackstr_xmalloc(&allow_alloc_nodes, &name_len, buffer);
 		safe_unpackstr_xmalloc(&nodes, &name_len, buffer);
 
 		/* validity test as possible */
@@ -494,6 +517,7 @@ int load_all_part_state(void)
 			part_cnt++;
 			part_ptr->hidden         = hidden;
 			part_ptr->max_time       = max_time;
+			part_ptr->default_time   = default_time;
 			part_ptr->max_nodes      = max_nodes;
 			part_ptr->max_nodes_orig = max_nodes;
 			part_ptr->min_nodes      = min_nodes;
@@ -506,9 +530,17 @@ int load_all_part_state(void)
 			part_ptr->root_only      = root_only;
 			part_ptr->max_share      = max_share;
 			part_ptr->priority       = priority;
+
+			if(part_max_priority) 
+				part_ptr->norm_priority = 
+					(double)part_ptr->priority 
+					/ (double)part_max_priority;
+
 			part_ptr->state_up       = state_up;
 			xfree(part_ptr->allow_groups);
 			part_ptr->allow_groups   = allow_groups;
+			xfree(part_ptr->allow_alloc_nodes);
+			part_ptr->allow_alloc_nodes   = allow_alloc_nodes;
 			xfree(part_ptr->nodes);
 			part_ptr->nodes = nodes;
 		} else {
@@ -559,6 +591,7 @@ int init_part_conf(void)
 	default_part.disable_root_jobs = slurmctld_conf.disable_root_jobs;
 	default_part.hidden         = 0;
 	default_part.max_time       = INFINITE;
+	default_part.default_time   = NO_VAL;
 	default_part.max_nodes      = INFINITE;
 	default_part.max_nodes_orig = INFINITE;
 	default_part.min_nodes      = 1;
@@ -567,11 +600,13 @@ int init_part_conf(void)
 	default_part.state_up       = 1;
 	default_part.max_share      = 1;
 	default_part.priority       = 1;
+	default_part.norm_priority  = 0;
 	default_part.total_nodes    = 0;
 	default_part.total_cpus     = 0;
 	xfree(default_part.nodes);
 	xfree(default_part.allow_groups);
 	xfree(default_part.allow_uids);
+	xfree(default_part.allow_alloc_nodes);
 	FREE_NULL_BITMAP(default_part.node_bitmap);
 
 	if (part_list)		/* delete defunct partitions */
@@ -617,6 +652,7 @@ static void _list_delete_part(void *part_entry)
 	xfree(part_ptr->name);
 	xfree(part_ptr->allow_groups);
 	xfree(part_ptr->allow_uids);
+	xfree(part_ptr->allow_alloc_nodes);
 	xfree(part_ptr->nodes);
 	FREE_NULL_BITMAP(part_ptr->node_bitmap);
 	xfree(part_entry);
@@ -701,7 +737,7 @@ extern void pack_all_part(char **buffer_ptr, int *buffer_size,
 
 	buffer = init_buf(BUF_SIZE);
 
-	/* write haeader: version and time */
+	/* write header: version and time */
 	parts_packed = 0;
 	pack32(parts_packed, buffer);
 	pack_time(now, buffer);
@@ -711,7 +747,8 @@ extern void pack_all_part(char **buffer_ptr, int *buffer_size,
 	while ((part_ptr = (struct part_record *) list_next(part_iterator))) {
 		xassert (part_ptr->magic == PART_MAGIC);
 		if (((show_flags & SHOW_ALL) == 0) && (uid != 0) &&
-		    ((part_ptr->hidden) || (validate_group (part_ptr, uid) == 0)))
+		    ((part_ptr->hidden) 
+		     || (validate_group (part_ptr, uid) == 0)))
 			continue;
 		pack_part(part_ptr, buffer);
 		parts_packed++;
@@ -736,8 +773,8 @@ extern void pack_all_part(char **buffer_ptr, int *buffer_size,
  * IN/OUT buffer - buffer in which data is placed, pointers automatically 
  *	updated
  * global: default_part_loc - pointer to the default partition
- * NOTE: if you make any changes here be sure to make the corresponding 
- *	changes to load_part_config in api/partition_info.c
+ * NOTE: if you make any changes here be sure to make the corresponding changes
+ *	to _unpack_partition_info_members() in common/slurm_protocol_pack.c
  */
 void pack_part(struct part_record *part_ptr, Buf buffer)
 {
@@ -752,6 +789,7 @@ void pack_part(struct part_record *part_ptr, Buf buffer)
 
 	packstr(part_ptr->name, buffer);
 	pack32(part_ptr->max_time, buffer);
+	pack32(part_ptr->default_time, buffer);
 	pack32(part_ptr->max_nodes_orig, buffer);
 	pack32(part_ptr->min_nodes_orig, buffer);
 	altered = part_ptr->total_nodes;
@@ -771,6 +809,7 @@ void pack_part(struct part_record *part_ptr, Buf buffer)
 
 	pack16(part_ptr->state_up, buffer);
 	packstr(part_ptr->allow_groups, buffer);
+	packstr(part_ptr->allow_alloc_nodes, buffer);
 	packstr(part_ptr->nodes, buffer);
 	if (part_ptr->node_bitmap) {
 		bit_fmt(node_inx_ptr, BUF_SIZE,
@@ -782,32 +821,44 @@ void pack_part(struct part_record *part_ptr, Buf buffer)
 
 
 /* 
- * update_part - update a partition's configuration data
+ * update_part - create or update a partition's configuration data
  * IN part_desc - description of partition changes
+ * IN create_flag - create a new partition
  * RET 0 or an error code
  * global: part_list - list of partition entries
  *	last_part_update - update time of partition records
  */
-int update_part(update_part_msg_t * part_desc)
+extern int update_part (update_part_msg_t * part_desc, bool create_flag)
 {
 	int error_code;
 	struct part_record *part_ptr;
 
 	if (part_desc->name == NULL) {
-		error("update_part: invalid partition name, NULL");
+		info("update_part: invalid partition name, NULL");
 		return ESLURM_INVALID_PARTITION_NAME;
 	}
 
 	error_code = SLURM_SUCCESS;
 	part_ptr = list_find_first(part_list, &list_find_part, 
-					part_desc->name);
+				   part_desc->name);
 
-	if (part_ptr == NULL) {
-		info("update_part: partition %s does not exist, "
-			"being created", part_desc->name);
+	if (create_flag) {
+		if (part_ptr) {
+			verbose("Duplicate partition name for create (%s)",
+				part_desc->name);
+			return ESLURM_INVALID_PARTITION_NAME;
+		}
+		info("update_part: partition %s being created",
+		     part_desc->name);
 		part_ptr = create_part_record();
 		xfree(part_ptr->name);
 		part_ptr->name = xstrdup(part_desc->name);
+	} else {
+		if (!part_ptr) {
+			verbose("Update for partition not found (%s)",
+				part_desc->name);
+			return ESLURM_INVALID_PARTITION_NAME;
+		}
 	}
 
 	last_part_update = time(NULL);
@@ -824,6 +875,17 @@ int update_part(update_part_msg_t * part_desc)
 		part_ptr->max_time = part_desc->max_time;
 	}
 
+	if ((part_desc->default_time != NO_VAL) && 
+	    (part_desc->default_time > part_ptr->max_time)) {
+		info("update_part: DefaultTime would exceed MaxTime for "
+		     "partition %s", part_desc->name);
+	} else if (part_desc->default_time != NO_VAL) {
+		info("update_part: setting default_time to %u "
+		     "for partition %s", 
+		     part_desc->default_time, part_desc->name);
+		part_ptr->default_time = part_desc->default_time;
+	}
+
 	if (part_desc->max_nodes != NO_VAL) {
 		info("update_part: setting max_nodes to %u for partition %s", 
 		     part_desc->max_nodes, part_desc->name);
@@ -875,6 +937,26 @@ int update_part(update_part_msg_t * part_desc)
 		info("update_part: setting priority to %u for partition %s",
 		     part_desc->priority, part_desc->name);
 		part_ptr->priority = part_desc->priority;
+		
+		/* If the max_priority changes we need to change all
+		   the normalized priorities of all the other
+		   partitions.  If not then just set this partitions.
+		*/
+		if(part_ptr->priority > part_max_priority) {
+			ListIterator itr = list_iterator_create(part_list);
+			struct part_record *part2 = NULL;
+
+			part_max_priority = part_ptr->priority;
+
+			while((part2 = list_next(itr))) {
+				part2->norm_priority = (double)part2->priority 
+					/ (double)part_max_priority;
+			}
+			list_iterator_destroy(itr);
+		} else {
+			part_ptr->norm_priority = (double)part_ptr->priority 
+				/ (double)part_max_priority;
+		}
 	}
 
 	if (part_desc->default_part == 1) {
@@ -882,7 +964,8 @@ int update_part(update_part_msg_t * part_desc)
 			info("update_part: setting default partition to %s", 
 			     part_desc->name);
 		} else if (strcmp(default_part_name, part_desc->name) != 0) {
-			info("update_part: changing default partition from %s to %s", 
+			info("update_part: changing default "
+			     "partition from %s to %s", 
 			     default_part_name, part_desc->name);
 		}
 		xfree(default_part_name);
@@ -909,6 +992,24 @@ int update_part(update_part_msg_t * part_desc)
 		}
 	}
 
+	if (part_desc->allow_alloc_nodes != NULL) {
+		xfree(part_ptr->allow_alloc_nodes);
+		if ((part_desc->allow_alloc_nodes[0] == '\0') ||
+		    (strcasecmp(part_desc->allow_alloc_nodes, "ALL") == 0)) {
+			part_ptr->allow_alloc_nodes = NULL;
+			info("update_part: setting allow_alloc_nodes to ALL"
+			     " for partition %s",part_desc->name);
+		}
+		else {
+			part_ptr->allow_alloc_nodes = part_desc->
+						      allow_alloc_nodes;
+			part_desc->allow_alloc_nodes = NULL;
+			info("update_part: setting allow_alloc_nodes to %s for "
+			     "partition %s", 
+			     part_ptr->allow_alloc_nodes, part_desc->name);
+		}
+	}
+
 	if (part_desc->nodes != NULL) {
 		char *backup_node_list = part_ptr->nodes;
 
@@ -928,10 +1029,14 @@ int update_part(update_part_msg_t * part_desc)
 			xfree(part_ptr->nodes);
 			part_ptr->nodes = backup_node_list;
 		} else {
-			info("update_part: setting nodes to %s for partition %s", 
+			info("update_part: setting nodes to %s "
+			     "for partition %s", 
 			     part_ptr->nodes, part_desc->name);
 			xfree(backup_node_list);
 		}
+	} else if (part_ptr->node_bitmap == NULL) {
+		/* Newly created partition needs a bitmap, even if empty */
+		part_ptr->node_bitmap = bit_alloc(node_record_count);
 	}
 
 	if (error_code == SLURM_SUCCESS) {
@@ -974,6 +1079,35 @@ extern int validate_group(struct part_record *part_ptr, uid_t run_uid)
 
 }
 
+/*
+ * validate_alloc_node - validate that the allocating node
+ * is allowed to use this partition
+ * IN part_ptr - pointer to a partition
+ * IN alloc_node - allocting node of the request
+ * RET 1 if permitted to run, 0 otherwise
+ */
+extern int validate_alloc_node(struct part_record *part_ptr, char* alloc_node)
+{
+	int status;
+	
+ 	if (part_ptr->allow_alloc_nodes == NULL)
+ 		return 1;	/* all allocating nodes allowed */
+ 	if (alloc_node == NULL)
+ 		return 1;	/* if no allocating node defined
+				 * let it go */
+ 
+ 	hostlist_t hl = hostlist_create(part_ptr->allow_alloc_nodes);
+ 	status=hostlist_find(hl,alloc_node);
+ 	hostlist_destroy(hl);
+	
+ 	if(status==-1)
+		status=0;
+ 	else
+		status=1;
+	
+ 	return status;
+}
+
 /*
  * load_part_uid_allow_list - reload the allow_uid list of partitions
  *	if required (updated group file or force set)
@@ -1192,5 +1326,9 @@ extern int delete_partition(delete_part_msg_t *part_desc_ptr)
 	list_delete_all(part_list, list_find_part, part_desc_ptr->name);
 	last_part_update = time(NULL);
 
+	slurm_sched_partition_change();	/* notify sched plugin */
+	select_g_reconfigure();		/* notify select plugin too */
+	reset_job_priority();		/* free jobs */
+
 	return SLURM_SUCCESS;
 }
diff --git a/src/slurmctld/ping_nodes.c b/src/slurmctld/ping_nodes.c
index 7ad74efe8..f2c51feab 100644
--- a/src/slurmctld/ping_nodes.c
+++ b/src/slurmctld/ping_nodes.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  ping_nodes.c - ping the slurmd daemons to test if they respond
  *****************************************************************************
- *  Copyright (C) 2003-2006 The Regents of the University of California.
+ *  Copyright (C) 2003-2007 The Regents of the University of California.
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -176,7 +177,10 @@ void ping_nodes (void)
 		node_ptr = &node_record_table_ptr[i];
 		base_state   = node_ptr->node_state & NODE_STATE_BASE;
 		no_resp_flag = node_ptr->node_state & NODE_STATE_NO_RESPOND;
-		
+
+		if ((base_state == NODE_STATE_FUTURE) ||
+		    (node_ptr->node_state & NODE_STATE_POWER_SAVE))
+			continue;
 		if ((slurmctld_conf.slurmd_timeout == 0) &&
 		    (base_state != NODE_STATE_UNKNOWN)   &&
 		    (no_resp_flag == 0))
@@ -241,7 +245,7 @@ void ping_nodes (void)
 		hostlist_uniq(ping_agent_args->hostlist);
 		hostlist_ranged_string(ping_agent_args->hostlist, 
 			sizeof(host_str), host_str);
-		verbose("Spawning ping agent for %s", host_str);
+		debug("Spawning ping agent for %s", host_str);
 		ping_begin();
 		agent_queue_request(ping_agent_args);
 	}
@@ -253,8 +257,8 @@ void ping_nodes (void)
 		hostlist_uniq(reg_agent_args->hostlist);
 		hostlist_ranged_string(reg_agent_args->hostlist, 
 			sizeof(host_str), host_str);
-		verbose("Spawning registration agent for %s %d hosts", 
-			host_str, reg_agent_args->node_count);
+		debug("Spawning registration agent for %s %d hosts", 
+		      host_str, reg_agent_args->node_count);
 		ping_begin();
 		agent_queue_request(reg_agent_args);
 	}
@@ -287,7 +291,8 @@ extern void run_health_check(void)
 		node_ptr   = &node_record_table_ptr[i];
 		base_state = node_ptr->node_state & NODE_STATE_BASE;
 
-		if (base_state == NODE_STATE_DOWN)
+		if ((base_state == NODE_STATE_DOWN) ||
+		    (base_state == NODE_STATE_FUTURE))
 			continue;
 
 #ifdef HAVE_FRONT_END		/* Operate only on front-end */
@@ -306,7 +311,7 @@ extern void run_health_check(void)
 		hostlist_uniq(check_agent_args->hostlist);
 		hostlist_ranged_string(check_agent_args->hostlist, 
 			sizeof(host_str), host_str);
-		verbose("Spawning health check agent for %s", host_str);
+		debug("Spawning health check agent for %s", host_str);
 		ping_begin();
 		agent_queue_request(check_agent_args);
 	}
diff --git a/src/slurmctld/ping_nodes.h b/src/slurmctld/ping_nodes.h
index 2fae42d4b..1fc7af887 100644
--- a/src/slurmctld/ping_nodes.h
+++ b/src/slurmctld/ping_nodes.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2003 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/port_mgr.c b/src/slurmctld/port_mgr.c
new file mode 100644
index 000000000..d11e71f26
--- /dev/null
+++ b/src/slurmctld/port_mgr.c
@@ -0,0 +1,319 @@
+/*****************************************************************************\
+ *  port_mgr.c - manage the reservation of I/O ports on the nodes.
+ *	Design for use with OpenMPI.
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "src/common/bitstring.h"
+#include "src/common/hostlist.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
+
+#include "src/slurmctld/slurmctld.h"
+
+#define  _DEBUG 0
+
+bitstr_t **port_resv_table = (bitstr_t **) NULL;
+int        port_resv_cnt   = 0;
+int        port_resv_min   = 0;
+int        port_resv_max   = 0;
+
+static void _dump_resv_port_info(void);
+static void _make_all_resv(void);
+static void _make_step_resv(struct step_record *step_ptr);
+static void _rebuild_port_array(struct step_record *step_ptr);
+
+static void _dump_resv_port_info(void)
+{
+#if _DEBUG
+	int i;
+	char *tmp_char;
+
+	for (i=0; i<port_resv_cnt; i++) {
+		if (bit_set_count(port_resv_table[i]) == 0)
+			continue;
+
+		tmp_char = bitmap2node_name(port_resv_table[i]);
+		info("Port %d: %s", (i+port_resv_min), tmp_char);
+		xfree(tmp_char);
+	}
+#endif
+}
+
+/* Builds the job step's resv_port_array based upon resv_ports (a string) */
+static void _rebuild_port_array(struct step_record *step_ptr)
+{
+	int i;
+	char *tmp_char;
+	hostlist_t hl;
+
+	i = strlen(step_ptr->resv_ports);
+	tmp_char = xmalloc(i+3);
+	sprintf(tmp_char, "[%s]", step_ptr->resv_ports);
+	hl = hostlist_create(tmp_char);
+	xfree(tmp_char);
+	if (hl == NULL)
+		fatal("malloc failure: hostlist_create");
+
+	step_ptr->resv_port_array = xmalloc(sizeof(int) * 
+					    step_ptr->resv_port_cnt);
+	step_ptr->resv_port_cnt = 0;
+	while ((tmp_char = hostlist_shift(hl))) {
+		i = atoi(tmp_char);
+		if (i > 0)
+			step_ptr->resv_port_array[step_ptr->resv_port_cnt++]=i;
+		free(tmp_char);
+	}
+	hostlist_destroy(hl);
+	if (step_ptr->resv_port_cnt == 0) {
+		error("Problem recovering resv_port_array for step %u.%u: %s",
+		      step_ptr->job_ptr->job_id, step_ptr->step_id, 
+		      step_ptr->resv_ports);
+		xfree(step_ptr->resv_ports);
+	}
+}
+
+/* Update the local reservation table for one job step.
+ * Builds the job step's resv_port_array based upon resv_ports (a string) */
+static void _make_step_resv(struct step_record *step_ptr)
+{
+	int i, j;
+
+	if ((step_ptr->resv_port_cnt == 0) ||
+	    (step_ptr->resv_ports == NULL) ||
+	    (step_ptr->resv_ports[0] == '\0'))
+		return;
+
+	if (step_ptr->resv_port_array == NULL)
+		_rebuild_port_array(step_ptr);
+
+	for (i=0; i<step_ptr->resv_port_cnt; i++) {
+		if ((step_ptr->resv_port_array[i] < port_resv_min) ||
+		    (step_ptr->resv_port_array[i] > port_resv_max)) 
+			continue;
+		j = step_ptr->resv_port_array[i] - port_resv_min;
+		bit_or(port_resv_table[j], step_ptr->step_node_bitmap);
+	}
+}
+
+/* Identify every job step with a port reservation and put the 
+ * reservation into the local reservation table. */
+static void _make_all_resv(void)
+{
+	struct job_record *job_ptr;
+	struct step_record *step_ptr;
+	ListIterator job_iterator, step_iterator;
+
+	job_iterator = list_iterator_create(job_list);
+	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
+		step_iterator = list_iterator_create(job_ptr->step_list);
+		while ((step_ptr = (struct step_record *) 
+				   list_next(step_iterator))) {
+			_make_step_resv(step_ptr);
+		}
+		list_iterator_destroy(step_iterator);
+	}
+	list_iterator_destroy(job_iterator);
+}
+
+/* Configure reserved ports.
+ * Call with mpi_params==NULL to free memory */
+extern int reserve_port_config(char *mpi_params)
+{
+	char *tmp_e=NULL, *tmp_p=NULL;
+	int i, p_min, p_max;
+
+	if (mpi_params)
+		tmp_p = strstr(mpi_params, "ports=");
+	if (tmp_p == NULL) {
+		if (port_resv_table) {
+			info("Clearing port reservations");
+			for (i=0; i<port_resv_cnt; i++)
+				bit_free(port_resv_table[i]);
+			xfree(port_resv_table);
+			port_resv_cnt = 0;
+			port_resv_min = port_resv_max = 0;
+		}
+		return SLURM_SUCCESS;
+	}
+
+	tmp_p += 6;
+	p_min = strtol(tmp_p, &tmp_e, 10);
+	if ((p_min < 1) || (tmp_e[0] != '-')) {
+		info("invalid MpiParams: %s", mpi_params);
+		return SLURM_ERROR;
+	}
+	tmp_e++;
+	p_max = strtol(tmp_e, NULL, 10);
+	if (p_max < p_min) {
+		info("invalid MpiParams: %s", mpi_params);
+		return SLURM_ERROR;
+	}
+
+	if ((p_min == port_resv_min) && (p_max == port_resv_max)) {
+		_dump_resv_port_info();
+		return SLURM_SUCCESS;	/* No change */
+	}
+
+	port_resv_min = p_min;
+	port_resv_max = p_max;
+	port_resv_cnt = p_max - p_min + 1;
+	debug("Ports available for reservation %u-%u", 
+	      port_resv_min, port_resv_max);
+
+	xfree(port_resv_table);
+	port_resv_table = xmalloc(sizeof(bitstr_t *) * port_resv_cnt);
+	for (i=0; i<port_resv_cnt; i++)
+		port_resv_table[i] = bit_alloc(node_record_count);
+
+	_make_all_resv();
+	_dump_resv_port_info();
+	return SLURM_SUCCESS;
+}
+
+/* Reserve ports for a job step
+ * NOTE: We keep track of last port reserved and go round-robin through full
+ *       set of available ports. This helps avoid re-using busy ports when
+ *       restarting job steps.
+ * RET SLURM_SUCCESS or an error code */
+extern int resv_port_alloc(struct step_record *step_ptr)
+{
+	int i, port_inx;
+	int *port_array = NULL;
+	char port_str[16], *tmp_str;
+	hostlist_t hl;
+	static int last_port_alloc = 0;
+
+	if (step_ptr->resv_port_cnt > port_resv_cnt) {
+		info("step %u.%u needs %u reserved ports, but only %d exist",
+		     step_ptr->job_ptr->job_id, step_ptr->step_id,
+		     step_ptr->resv_port_cnt, port_resv_cnt);
+		return ESLURM_PORTS_INVALID;
+	}
+
+	/* Identify available ports */
+	port_array = xmalloc(sizeof(int) * step_ptr->resv_port_cnt);
+	port_inx = 0;
+	for (i=0; i<port_resv_cnt; i++) {
+		if (++last_port_alloc >= port_resv_cnt)
+			last_port_alloc = 0;
+		if (bit_overlap(step_ptr->step_node_bitmap,
+				port_resv_table[last_port_alloc]))
+			continue;
+		port_array[port_inx++] = last_port_alloc;
+		if (port_inx >= step_ptr->resv_port_cnt)
+			break;
+	}
+	if (port_inx < step_ptr->resv_port_cnt) {
+		info("insufficient ports for step %u.%u to reserve (%d of %u)",
+		     step_ptr->job_ptr->job_id, step_ptr->step_id,
+		     port_inx, step_ptr->resv_port_cnt);
+		xfree(port_array);
+		return ESLURM_PORTS_BUSY;
+	}
+
+	/* Reserve selected ports */
+	hl = hostlist_create(NULL);
+	if (hl == NULL)
+		fatal("malloc: hostlist_create");
+	for (i=0; i<port_inx; i++) {
+		/* NOTE: We give the port a name like "[1234]" rather than 
+		 * just "1234" to avoid hostlists of the form "1[234-236]" */
+		bit_or(port_resv_table[port_array[i]], 
+		       step_ptr->step_node_bitmap);
+		port_array[i] += port_resv_min;
+		snprintf(port_str, sizeof(port_str), "[%d]", port_array[i]);
+		hostlist_push(hl, port_str);
+	}
+	hostlist_sort(hl);
+	for (i=1024; ; i*=2) {
+		step_ptr->resv_ports = xmalloc(i);
+		if (hostlist_ranged_string(hl, i, step_ptr->resv_ports) >= 0)
+			break;
+		xfree(step_ptr->resv_ports);
+	}
+	hostlist_destroy(hl);
+	step_ptr->resv_port_array = port_array;
+
+	if (step_ptr->resv_ports[0] == '[') {
+		/* Remove brackets from hostlist */
+		i = strlen(step_ptr->resv_ports);
+		step_ptr->resv_ports[i-1] = '\0';
+		tmp_str = xmalloc(i);
+		strcpy(tmp_str, step_ptr->resv_ports + 1);
+		xfree(step_ptr->resv_ports);
+		step_ptr->resv_ports = tmp_str;
+	}
+
+	debug("reserved ports %s for step %u.%u",
+	      step_ptr->resv_ports,
+	      step_ptr->job_ptr->job_id, step_ptr->step_id);
+
+	return SLURM_SUCCESS;
+}
+
+/* Release reserved ports for a job step
+ * RET SLURM_SUCCESS or an error code */
+extern void resv_port_free(struct step_record *step_ptr)
+{
+	int i, j;
+
+	if (step_ptr->resv_port_array == NULL)
+		return;
+
+	bit_not(step_ptr->step_node_bitmap);
+	for (i=0; i<step_ptr->resv_port_cnt; i++) {
+		if ((step_ptr->resv_port_array[i] < port_resv_min) ||
+		    (step_ptr->resv_port_array[i] > port_resv_max)) 
+			continue;
+		j = step_ptr->resv_port_array[i] - port_resv_min;
+		bit_and(port_resv_table[j], step_ptr->step_node_bitmap);
+		
+	}
+	bit_not(step_ptr->step_node_bitmap);
+	xfree(step_ptr->resv_port_array);
+
+	debug("freed ports %s for step %u.%u",
+	      step_ptr->resv_ports,
+	      step_ptr->job_ptr->job_id, step_ptr->step_id);
+}
diff --git a/src/slurmctld/port_mgr.h b/src/slurmctld/port_mgr.h
new file mode 100644
index 000000000..af4a87a41
--- /dev/null
+++ b/src/slurmctld/port_mgr.h
@@ -0,0 +1,57 @@
+/*****************************************************************************\
+ *  port_mgr.h - manage the reservation of I/O ports on the nodes.
+ *	Design for use with OpenMPI.
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _HAVE_PORT_MGR_H
+#define _HAVE_PORT_MGR_H
+
+#include "src/slurmctld/slurmctld.h"
+
+/* Configure reserved ports.
+ * Call with mpi_params==NULL to free memory */
+extern int reserve_port_config(char *mpi_params);
+
+/* Reserve ports for a job step
+ * RET SLURM_SUCCESS or an error code */
+extern int resv_port_alloc(struct step_record *step_ptr);
+
+/* Release reserved ports for a job step
+ * RET SLURM_SUCCESS or an error code */
+extern void resv_port_free(struct step_record *step_ptr);
+
+#endif	/* !_HAVE_PORT_MGR_H */
diff --git a/src/slurmctld/power_save.c b/src/slurmctld/power_save.c
index ec454af5f..4fb0b53cb 100644
--- a/src/slurmctld/power_save.c
+++ b/src/slurmctld/power_save.c
@@ -1,17 +1,20 @@
 /*****************************************************************************\
  *  power_save.c - support node power saving mode. Nodes which have been 
  *  idle for an extended period of time will be placed into a power saving 
- *  mode by running an arbitrary script (typically to set frequency governor).
+ *  mode by running an arbitrary script. This script can lower the voltage
+ *  or frequency of the nodes or can completely power the nodes off.
  *  When the node is restored to normal operation, another script will be 
  *  executed. Many parameters are available to control this mode of operation.
  *****************************************************************************
  *  Copyright (C) 2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -43,35 +46,56 @@
 #  include "config.h"
 #endif
 
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
 #include "src/common/bitstring.h"
 #include "src/common/xstring.h"
 #include "src/slurmctld/locks.h"
 #include "src/slurmctld/slurmctld.h"
 
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <stdlib.h>
-#include <unistd.h>
+#if defined (HAVE_DECL_STRSIGNAL) && !HAVE_DECL_STRSIGNAL
+#  ifndef strsignal
+     extern char *strsignal(int);
+#  endif
+#endif /* defined HAVE_DECL_STRSIGNAL && !HAVE_DECL_STRSIGNAL */
+
+#define _DEBUG			0
+#define PID_CNT			10
+#define MAX_SHUTDOWN_DELAY	120	/* seconds to wait for child procs
+					 * to exit after daemon shutdown 
+					 * request, then orphan or kill proc */
 
-#define _DEBUG 0
+/* Records for tracking processes forked to suspend/resume nodes */
+pid_t  child_pid[PID_CNT];	/* pid of process		*/
+time_t child_time[PID_CNT];	/* start time of process	*/
 
-int idle_time, suspend_rate, resume_rate;
+int idle_time, suspend_rate, resume_timeout, resume_rate, suspend_timeout;
 char *suspend_prog = NULL, *resume_prog = NULL;
 char *exc_nodes = NULL, *exc_parts = NULL;
-time_t last_config = (time_t) 0;
+time_t last_config = (time_t) 0, last_suspend = (time_t) 0;
+uint16_t slurmd_timeout;
 
-bitstr_t *exc_node_bitmap = NULL;
-int suspend_cnt, resume_cnt;
+bitstr_t *exc_node_bitmap = NULL, *suspend_node_bitmap = NULL;
+int   suspend_cnt,   resume_cnt;
+float suspend_cnt_f, resume_cnt_f;
 
 static void  _clear_power_config(void);
 static void  _do_power_work(void);
 static void  _do_resume(char *host);
 static void  _do_suspend(char *host);
 static int   _init_power_config(void);
-static void  _kill_zombies(void);
+static int   _kill_procs(void);
+static int   _reap_procs(void);
 static void  _re_wake(void);
 static pid_t _run_prog(char *prog, char *arg);
+static void  _shutdown_power(void);
 static bool  _valid_prog(char *file_name);
 
 /* Perform any power change work to nodes */
@@ -80,20 +104,34 @@ static void _do_power_work(void)
 	static time_t last_log = 0, last_work_scan = 0;
 	int i, wake_cnt = 0, sleep_cnt = 0, susp_total = 0;
 	time_t now = time(NULL), delta_t;
-	uint16_t base_state, susp_state;
+	uint16_t base_state, comp_state, susp_state;
 	bitstr_t *wake_node_bitmap = NULL, *sleep_node_bitmap = NULL;
 	struct node_record *node_ptr;
+	bool run_suspend = false;
 
 	/* Set limit on counts of nodes to have state changed */
 	delta_t = now - last_work_scan;
 	if (delta_t >= 60) {
-		suspend_cnt = 0;
-		resume_cnt  = 0;
+		suspend_cnt_f = 0.0;
+		resume_cnt_f  = 0.0;
 	} else {
 		float rate = (60 - delta_t) / 60.0;
-		suspend_cnt *= rate;
-		resume_cnt  *= rate;
+		suspend_cnt_f *= rate;
+		resume_cnt_f  *= rate;
 	}
+	suspend_cnt = (suspend_cnt_f + 0.5);
+	resume_cnt  = (resume_cnt_f  + 0.5);
+
+	if (now > (last_suspend + suspend_timeout)) {
+		/* ready to start another round of node suspends */
+		run_suspend = true;
+		if (last_suspend) {
+			bit_nclear(suspend_node_bitmap, 0, 
+				   (node_record_count - 1));
+			last_suspend = (time_t) 0;
+		}
+	}
+
 	last_work_scan = now;
 
 	/* Build bitmaps identifying each node which should change state */
@@ -101,42 +139,59 @@ static void _do_power_work(void)
 		node_ptr = &node_record_table_ptr[i];
 		base_state = node_ptr->node_state & NODE_STATE_BASE;
 		susp_state = node_ptr->node_state & NODE_STATE_POWER_SAVE;
+		comp_state = node_ptr->node_state & NODE_STATE_COMPLETING;
 
 		if (susp_state)
 			susp_total++;
-		if (susp_state
-		&&  ((suspend_rate == 0) || (suspend_cnt <= suspend_rate))
-		&&  ((base_state == NODE_STATE_ALLOCATED)
-		||   (node_ptr->last_idle > (now - idle_time)))) {
-			if (wake_node_bitmap == NULL)
-				wake_node_bitmap = bit_alloc(node_record_count);
+
+		/* Resume nodes as appropriate */
+		if (susp_state &&
+		    ((resume_rate == 0) || (resume_cnt < resume_rate))	&&
+		    (bit_test(suspend_node_bitmap, i) == 0)		&&
+		    ((base_state == NODE_STATE_ALLOCATED) ||
+		     (node_ptr->last_idle > (now - idle_time)))) {
+			if (wake_node_bitmap == NULL) {
+				wake_node_bitmap = 
+					bit_alloc(node_record_count);
+			}
 			wake_cnt++;
-			suspend_cnt++;
+			resume_cnt++;
+			resume_cnt_f++;
 			node_ptr->node_state &= (~NODE_STATE_POWER_SAVE);
+			bit_clear(power_node_bitmap, i);
+			node_ptr->node_state   |= NODE_STATE_NO_RESPOND;
+			node_ptr->last_response = now + resume_timeout;
 			bit_set(wake_node_bitmap, i);
 		}
-		if ((susp_state == 0)
-		&&  ((resume_rate == 0) || (resume_cnt <= resume_rate))
-		&&  (base_state == NODE_STATE_IDLE)
-		&&  (node_ptr->last_idle < (now - idle_time))
-		&&  ((exc_node_bitmap == NULL) || 
+
+		/* Suspend nodes as appropriate */
+		if (run_suspend 					&& 
+		    (susp_state == 0)					&&
+		    ((suspend_rate == 0) || (suspend_cnt < suspend_rate)) &&
+		    (base_state == NODE_STATE_IDLE)			&&
+		    (comp_state == 0)					&&
+		    (node_ptr->last_idle < (now - idle_time))		&&
+		    ((exc_node_bitmap == NULL) || 
 		     (bit_test(exc_node_bitmap, i) == 0))) {
-			if (sleep_node_bitmap == NULL)
-				sleep_node_bitmap = bit_alloc(node_record_count);
+			if (sleep_node_bitmap == NULL) {
+				sleep_node_bitmap = 
+					bit_alloc(node_record_count);
+			}
 			sleep_cnt++;
-			resume_cnt++;
+			suspend_cnt++;
+			suspend_cnt_f++;
 			node_ptr->node_state |= NODE_STATE_POWER_SAVE;
-			bit_set(sleep_node_bitmap, i);
+			bit_set(power_node_bitmap, i);
+			bit_set(sleep_node_bitmap,   i);
+			bit_set(suspend_node_bitmap, i);
+			last_suspend = now;
 		}
 	}
-	if ((now - last_log) > 600) {
-		info("Power save mode %d nodes", susp_total);
+	if (((now - last_log) > 600) && (susp_total > 0)) {
+		info("Power save mode: %d nodes", susp_total);
 		last_log = now;
 	}
 
-	if ((wake_cnt == 0) && (sleep_cnt == 0))
-		_re_wake();	/* No work to be done now */
-
 	if (sleep_node_bitmap) {
 		char *nodes;
 		nodes = bitmap2node_name(sleep_node_bitmap);
@@ -162,50 +217,37 @@ static void _do_power_work(void)
 	}
 }
 
-/* Just in case some resume calls failed, re-issue the requests
- * periodically for active nodes. We do not increment resume_cnt
- * since there should be no change in power requirements. */
+/* If slurmctld crashes, the node state that it recovers could differ
+ * from the actual hardware state (e.g. ResumeProgram failed to complete).
+ * To address that, when a node that should be powered up for a running 
+ * job is not responding, they try running ResumeProgram again. */
 static void _re_wake(void)
 {
-	static time_t last_wakeup = 0;
-	static int last_inx = 0;
-	time_t now = time(NULL);
+	uint16_t base_state;
 	struct node_record *node_ptr;
 	bitstr_t *wake_node_bitmap = NULL;
-	int i, lim = MIN(node_record_count, 20);
-	uint16_t base_state, susp_state;
+	int i;
 
-	/* Run at most once per minute */
-	if ((now - last_wakeup) < 60)
-		return;
-	last_wakeup = now;
-
-	for (i=0; i<lim; i++) {
-		node_ptr = &node_record_table_ptr[last_inx];
+	node_ptr = node_record_table_ptr;
+	for (i=0; i<node_record_count; i++, node_ptr++) {
 		base_state = node_ptr->node_state & NODE_STATE_BASE;
-		susp_state = node_ptr->node_state & NODE_STATE_POWER_SAVE;
-
-		if ((susp_state == 0) &&
-		    ((base_state == NODE_STATE_ALLOCATED) ||
-		     (base_state == NODE_STATE_IDLE))) {
-			if (wake_node_bitmap == NULL)
-				wake_node_bitmap = bit_alloc(node_record_count);
-			bit_set(wake_node_bitmap, last_inx);
+		if ((base_state == NODE_STATE_ALLOCATED)		  &&
+		    (node_ptr->node_state & NODE_STATE_NO_RESPOND)	  &&
+		    ((node_ptr->node_state & NODE_STATE_POWER_SAVE) == 0) &&
+		    (bit_test(suspend_node_bitmap, i) == 0)) {
+			if (wake_node_bitmap == NULL) {
+				wake_node_bitmap = 
+					bit_alloc(node_record_count);
+			}
+			bit_set(wake_node_bitmap, i);
 		}
-		last_inx++;
-		if (last_inx >= node_record_count)
-			last_inx = 0;
 	}
 
 	if (wake_node_bitmap) {
 		char *nodes;
 		nodes = bitmap2node_name(wake_node_bitmap);
 		if (nodes) {
-#if _DEBUG
 			info("power_save: rewaking nodes %s", nodes);
-#else
-			debug("power_save: rewaking nodes %s", nodes);
-#endif
 			_run_prog(resume_prog, nodes);	
 		} else
 			error("power_save: bitmap2nodename");
@@ -219,7 +261,7 @@ static void _do_resume(char *host)
 #if _DEBUG
 	info("power_save: waking nodes %s", host);
 #else
-	debug("power_save: waking nodes %s", host);
+	verbose("power_save: waking nodes %s", host);
 #endif
 	_run_prog(resume_prog, host);	
 }
@@ -229,13 +271,18 @@ static void _do_suspend(char *host)
 #if _DEBUG
 	info("power_save: suspending nodes %s", host);
 #else
-	debug("power_save: suspending nodes %s", host);
+	verbose("power_save: suspending nodes %s", host);
 #endif
 	_run_prog(suspend_prog, host);	
 }
 
+/* run a suspend or resume program
+ * prog IN	- program to run
+ * arg IN	- program arguments, the hostlist expression
+ */
 static pid_t _run_prog(char *prog, char *arg)
 {
+	int i;
 	char program[1024], arg0[1024], arg1[1024], *pname;
 	pid_t child;
 
@@ -253,24 +300,122 @@ static pid_t _run_prog(char *prog, char *arg)
 
 	child = fork();
 	if (child == 0) {
-		int i;
 		for (i=0; i<128; i++)
 			close(i);
+		setpgrp();
 		execl(program, arg0, arg1, NULL);
 		exit(1);
-	} else if (child < 0)
+	} else if (child < 0) {
 		error("fork: %m");
+	} else {
+		/* save the pid */
+		for (i=0; i<PID_CNT; i++) {
+			if (child_pid[i])
+				continue;
+			child_pid[i]  = child;
+			child_time[i] = time(NULL);
+			break;
+		}
+		if (i == PID_CNT)
+			error("power_save: filled child_pid array");
+	}
 	return child;
 }
 
-/* We don't bother to track individual process IDs, 
- * just clean everything up here. We could capture 
- * the value of "child" in _run_prog() if we want 
- * to track each process. */
-static void  _kill_zombies(void)
+/* reap child processes previously forked to modify node state.
+ * return the count of empty slots in the child_pid array */
+static int  _reap_procs(void)
 {
-	while (waitpid(-1, NULL, WNOHANG) > 0)
-		;
+	int empties = 0, delay, i, max_timeout, rc, status;
+
+	max_timeout = MAX(suspend_timeout, resume_timeout);
+	for (i=0; i<PID_CNT; i++) {
+		if (child_pid[i] == 0) {
+			empties++;
+			continue;
+		}
+		rc = waitpid(child_pid[i], &status, WNOHANG);
+		if (rc == 0)
+			continue;
+
+		delay = difftime(time(NULL), child_time[i]);
+		if (delay > max_timeout) {
+			info("power_save: program %d ran for %d sec", 
+			     (int) child_pid[i], delay);
+		}
+
+		if (WIFEXITED(status)) {
+			rc = WEXITSTATUS(status);
+			if (rc != 0) {
+				error("power_save: program exit status of %d", 
+				      rc);
+			}
+		} else if (WIFSIGNALED(status)) {
+			error("power_save: program signalled: %s",
+			      strsignal(WTERMSIG(status)));
+		}
+
+		child_pid[i]  = 0;
+		child_time[i] = (time_t) 0;
+	}
+	return empties;
+}
+
+/* kill (or orphan) child processes previously forked to modify node state.
+ * return the count of killed/orphaned processes */
+static int  _kill_procs(void)
+{
+	int killed = 0, i, rc, status;
+
+	for (i=0; i<PID_CNT; i++) {
+		if (child_pid[i] == 0)
+			continue;
+
+		rc = waitpid(child_pid[i], &status, WNOHANG);
+		if (rc == 0) {
+#ifdef  POWER_SAVE_KILL_PROCS
+			error("power_save: killing process %d",
+			      child_pid[i]);
+			kill((0-child_pid[i]), SIGKILL);
+#else
+			error("power_save: orphaning process %d",
+			      child_pid[i]);
+#endif
+			killed++;
+		} else {
+			/* process already completed */
+		}
+		child_pid[i]  = 0;
+		child_time[i] = (time_t) 0;
+	}
+	return killed;
+}
+
+static void _shutdown_power(void)
+{
+	int i, proc_cnt, max_timeout;
+
+	max_timeout = MAX(suspend_timeout, resume_timeout);
+	/* Try to avoid orphan processes */
+	for (i=0; ; i++) {
+		proc_cnt = PID_CNT - _reap_procs();
+		if (proc_cnt == 0)	/* all procs completed */
+			break;
+		if (i >= max_timeout) {
+			error("power_save: orphaning %d processes which are "
+			      "not terminating so slurmctld can exit", 
+			      proc_cnt);
+			_kill_procs();
+			break;
+		} else if (i == 2) {
+			info("power_save: waiting for %d processes to "
+			     "complete", proc_cnt);
+		} else if (i % 5 == 0) {
+			debug("power_save: waiting for %d processes to "
+			      "complete", proc_cnt);
+		}
+		sleep(1);
+	}
 }
 
 /* Free all allocated memory */
@@ -290,10 +435,13 @@ static int _init_power_config(void)
 {
 	slurm_ctl_conf_t *conf = slurm_conf_lock();
 
-	last_config   = slurmctld_conf.last_update;
-	idle_time     = conf->suspend_time - 1;
-	suspend_rate  = conf->suspend_rate;
-	resume_rate   = conf->resume_rate;
+	last_config     = slurmctld_conf.last_update;
+	idle_time       = conf->suspend_time - 1;
+	suspend_rate    = conf->suspend_rate;
+	resume_timeout  = conf->resume_timeout;
+	resume_rate     = conf->resume_rate;
+	slurmd_timeout  = conf->slurmd_timeout;
+	suspend_timeout = conf->suspend_timeout;
 	_clear_power_config();
 	if (conf->suspend_program)
 		suspend_prog = xstrdup(conf->suspend_program);
@@ -306,36 +454,38 @@ static int _init_power_config(void)
 	slurm_conf_unlock();
 
 	if (idle_time < 0) {	/* not an error */
-		debug("power_save module disabled, idle_time < 0");
+		debug("power_save module disabled, SuspendTime < 0");
 		return -1;
 	}
 	if (suspend_rate < 1) {
-		error("power_save module disabled, suspend_rate < 1");
+		error("power_save module disabled, SuspendRate < 1");
 		return -1;
 	}
 	if (resume_rate < 1) {
-		error("power_save module disabled, resume_rate < 1");
+		error("power_save module disabled, ResumeRate < 1");
 		return -1;
 	}
-	if (suspend_prog == NULL)
-		info("WARNING: power_save module has NULL suspend program");
-	else if (!_valid_prog(suspend_prog)) {
-		error("power_save module disabled, invalid suspend program %s",
-			suspend_prog);
+	if (suspend_prog == NULL) {
+		error("power_save module disabled, NULL SuspendProgram");
+		return -1;
+	} else if (!_valid_prog(suspend_prog)) {
+		error("power_save module disabled, invalid SuspendProgram %s",
+		      suspend_prog);
 		return -1;
 	}
-	if (resume_prog == NULL)
-		info("WARNING: power_save module has NULL resume program");
-	else if (!_valid_prog(resume_prog)) {
-		error("power_save module disabled, invalid resume program %s",
-			resume_prog);
+	if (resume_prog == NULL) {
+		error("power_save module disabled, NULL ResumeProgram");
+		return -1;
+	} else if (!_valid_prog(resume_prog)) {
+		error("power_save module disabled, invalid ResumeProgram %s",
+		      resume_prog);
 		return -1;
 	}
 
-	if (exc_nodes
-	&&  (node_name2bitmap(exc_nodes, false, &exc_node_bitmap))) {
+	if (exc_nodes &&
+	    (node_name2bitmap(exc_nodes, false, &exc_node_bitmap))) {
 		error("power_save module disabled, "
-			"invalid excluded nodes %s", exc_nodes);
+		      "invalid SuspendExcNodes %s", exc_nodes);
 		return -1;
 	}
 
@@ -350,7 +500,7 @@ static int _init_power_config(void)
 			part_ptr = find_part_record(one_part);
 			if (!part_ptr) {
 				error("power_save module disabled, "
-					"invalid excluded partition %s",
+					"invalid SuspendExcPart %s",
 					one_part);
 				rc = -1;
 				break;
@@ -358,7 +508,8 @@ static int _init_power_config(void)
 			if (exc_node_bitmap)
 				bit_or(exc_node_bitmap, part_ptr->node_bitmap);
 			else
-				exc_node_bitmap = bit_copy(part_ptr->node_bitmap);
+				exc_node_bitmap = bit_copy(part_ptr->
+							   node_bitmap);
 			one_part = strtok_r(NULL, ",", &tmp);
 		}
 		xfree(part_list);
@@ -380,23 +531,27 @@ static bool _valid_prog(char *file_name)
 	struct stat buf;
 
 	if (file_name[0] != '/') {
-		debug("program %s not absolute pathname", file_name);
+		debug("power_save program %s not absolute pathname", 
+		     file_name);
 		return false;
 	}
 
-	if (stat(file_name, &buf)) {
-		debug("program %s not found", file_name);
+	if (access(file_name, X_OK) != 0) {
+		debug("power_save program %s not executable", file_name);
 		return false;
 	}
-	if (!S_ISREG(buf.st_mode)) {
-		debug("program %s not regular file", file_name);
+
+	if (stat(file_name, &buf)) {
+		debug("power_save program %s not found", file_name);
 		return false;
 	}
 	if (buf.st_mode & 022) {
-		debug("program %s has group or world write permission",
-			file_name);
+		debug("power_save program %s has group or "
+		      "world write permission",
+		      file_name);
 		return false;
 	}
+
 	return true;
 }
 
@@ -407,36 +562,63 @@ static bool _valid_prog(char *file_name)
  */
 extern void *init_power_save(void *arg)
 {
-        /* Locks: Write node, read jobs and partitions */
+        /* Locks: Read nodes */
+        slurmctld_lock_t node_read_lock = {
+                NO_LOCK, READ_LOCK, NO_LOCK, NO_LOCK };
+        /* Locks: Write nodes */
         slurmctld_lock_t node_write_lock = {
-                NO_LOCK, READ_LOCK, WRITE_LOCK, READ_LOCK };
-	time_t now, last_power_scan = 0;
+                NO_LOCK, WRITE_LOCK, NO_LOCK, NO_LOCK };
+	time_t now, boot_time = 0, last_power_scan = 0;
 
 	if (_init_power_config())
 		goto fini;
 
+	suspend_node_bitmap = bit_alloc(node_record_count);
+	if (suspend_node_bitmap == NULL)
+		fatal("power_save: malloc error");
+
 	while (slurmctld_config.shutdown_time == 0) {
 		sleep(1);
-		_kill_zombies();
 
-		if ((last_config != slurmctld_conf.last_update)
-		&&  (_init_power_config()))
+		if (_reap_procs() < 2) {
+			debug("power_save programs getting backlogged");
+			continue;
+		}
+
+		if ((last_config != slurmctld_conf.last_update) &&
+		    (_init_power_config())) {
+			info("power_save mode has been disabled due to "
+			     "configuration changes");
 			goto fini;
+		}
 
-		/* Only run every 60 seconds or after
-		 * a node state change, whichever 
-		 * happens first */
 		now = time(NULL);
-		if ((last_node_update < last_power_scan)
-		&&  (now < (last_power_scan + 60)))
-			continue;
+		if (boot_time == 0)
+			boot_time = now;
+
+		/* Only run every 60 seconds or after a node state change,
+		 *  whichever happens first */
+		if ((last_node_update >= last_power_scan) ||
+		    (now >= (last_power_scan + 60))) {
+			lock_slurmctld(node_write_lock);
+			_do_power_work();
+			unlock_slurmctld(node_write_lock);
+			last_power_scan = now;
+		}
 
-		lock_slurmctld(node_write_lock);
-		_do_power_work();
-		unlock_slurmctld(node_write_lock);
-		last_power_scan = now;
+		if (slurmd_timeout &&
+		    (now > (boot_time + (slurmd_timeout / 2)))) {
+			lock_slurmctld(node_read_lock);
+			_re_wake();
+			unlock_slurmctld(node_read_lock);
+			/* prevent additional executions */
+			boot_time += (365 * 24 * 60 * 60);
+			slurmd_timeout = 0;
+		}
 	}
 
 fini:	_clear_power_config();
+	FREE_NULL_BITMAP(suspend_node_bitmap);
+	_shutdown_power();
 	return NULL;
 }
diff --git a/src/slurmctld/private.key b/src/slurmctld/private.key
deleted file mode 100644
index 8d48b17b2..000000000
--- a/src/slurmctld/private.key
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQC9Ld+Z8bAGVVMqWR4Z6XjmHy7FWbuRnVk1LHIDAnhsYx95BVZU
-4lnlxjSHW0F+zSnvEWMlrbxFG+okUDXTK8if/mi3ZGDAsG+d0Qdxx2KDz1Ps1uze
-h/0asAtsezSCQgmWzOPurTLq6XmlnA2fLNyNzS0AOiubrp51VMHifvTLpwIDAQAB
-AoGAPubk5Uv+amyuhXMyVg1SXLnblFUcz/MQuWR42FVW8zsWOOg0Z28H0yXPS35l
-TaMsIUiXveyBoD0C4mYlL3zsbOs6PinarNrlLT0mTLxFnls3Q/OBTJpwYWo1vv95
-ncsU3S7gD4IEI9GfMqXbM3fdk5HjUkn+ctmjmyy6xEmYF+ECQQD1CXklbn4W+MWv
-LNdWp6CcCO52NT9aR+Sy461G6vhLawfVSsYiJUADehxCeKq2SjLX2iqcqJSwv+nq
-k+E+E9IxAkEAxaSiQVVDglUFMZD96lpDy0ro0q5vANGtjYMtzApR59Ur8lUTCyJG
-g8v1s2iaP+5uRztQG48SILJZ1ZqUVXHtVwJBAJPMlQAY94EPqN2SpIimL2Aumvc+
-AuqHttCYN+owzHdhJaZnpb7uzP/L5cPKWN3/P0+nTlCT9qvt9kAB1rjE5+ECQDDC
-+okV6S75nOtqs0qjdIBufdykzpwsHx5/08e4cBa7gDkshiNEFJOluXvG/e9x+uE2
-IAB8nuNUPVe26IvgLMcCQQCah2dYKHQaadIlky9+/OL+mVJC5IFlYrK5qm3Pjptw
-ykZB5OerjUdQSQYriB/1jAWu21rtXzlpRTjBnkQM6huM
------END RSA PRIVATE KEY-----
diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c
index c9cd63ec7..06965a3a0 100644
--- a/src/slurmctld/proc_req.c
+++ b/src/slurmctld/proc_req.c
@@ -2,13 +2,14 @@
  *  proc_req.c - process incomming messages to slurmctld
  *****************************************************************************
  *  Copyright (C) 2002-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 <jette@llnl.gov>, et. al. 
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -60,6 +61,7 @@
 #include "src/common/macros.h"
 #include "src/common/node_select.h"
 #include "src/common/pack.h"
+#include "src/common/slurm_priority.h"
 #include "src/common/read_config.h"
 #include "src/common/slurm_auth.h"
 #include "src/common/slurm_cred.h"
@@ -74,6 +76,7 @@
 #include "src/slurmctld/locks.h"
 #include "src/slurmctld/proc_req.h"
 #include "src/slurmctld/read_config.h"
+#include "src/slurmctld/reservation.h"
 #include "src/slurmctld/sched_plugin.h"
 #include "src/slurmctld/slurmctld.h"
 #include "src/slurmctld/srun_comm.h"
@@ -96,6 +99,9 @@ inline static void  _slurm_rpc_complete_batch_script(slurm_msg_t * msg);
 inline static void  _slurm_rpc_dump_conf(slurm_msg_t * msg);
 inline static void  _slurm_rpc_dump_jobs(slurm_msg_t * msg);
 inline static void  _slurm_rpc_dump_job_single(slurm_msg_t * msg);
+inline static void  _slurm_rpc_get_shares(slurm_msg_t *msg);
+inline static void  _slurm_rpc_get_topo(slurm_msg_t * msg);
+inline static void  _slurm_rpc_get_priority_factors(slurm_msg_t *msg);
 inline static void  _slurm_rpc_dump_nodes(slurm_msg_t * msg);
 inline static void  _slurm_rpc_dump_partitions(slurm_msg_t * msg);
 inline static void  _slurm_rpc_epilog_complete(slurm_msg_t * msg);
@@ -111,7 +117,12 @@ inline static void  _slurm_rpc_job_alloc_info(slurm_msg_t * msg);
 inline static void  _slurm_rpc_job_alloc_info_lite(slurm_msg_t * msg);
 inline static void  _slurm_rpc_ping(slurm_msg_t * msg);
 inline static void  _slurm_rpc_reconfigure_controller(slurm_msg_t * msg);
+inline static void  _slurm_rpc_resv_create(slurm_msg_t * msg);
+inline static void  _slurm_rpc_resv_update(slurm_msg_t * msg);
+inline static void  _slurm_rpc_resv_delete(slurm_msg_t * msg);
+inline static void  _slurm_rpc_resv_show(slurm_msg_t * msg);
 inline static void  _slurm_rpc_requeue(slurm_msg_t * msg);
+inline static void  _slurm_rpc_takeover(slurm_msg_t * msg);
 inline static void  _slurm_rpc_shutdown_controller(slurm_msg_t * msg);
 inline static void  _slurm_rpc_shutdown_controller_immediate(slurm_msg_t *
 							     msg);
@@ -163,6 +174,14 @@ void slurmctld_req (slurm_msg_t * msg)
 		_slurm_rpc_dump_job_single(msg);
 		slurm_free_job_id_msg(msg->data);
 		break;
+	case REQUEST_SHARE_INFO:
+		_slurm_rpc_get_shares(msg);
+		slurm_free_shares_request_msg(msg->data);
+		break;
+	case REQUEST_PRIORITY_FACTORS:
+		_slurm_rpc_get_priority_factors(msg);
+		slurm_free_priority_factors_request_msg(msg->data);
+		break;
 	case REQUEST_JOB_END_TIME:
 		_slurm_rpc_end_time(msg);
 		slurm_free_job_alloc_info_msg(msg->data);
@@ -227,6 +246,10 @@ void slurmctld_req (slurm_msg_t * msg)
 		_slurm_rpc_shutdown_controller(msg);
 		/* No body to free */
 		break;
+	case REQUEST_TAKEOVER:
+		_slurm_rpc_takeover(msg);
+		/* No body to free */
+		break;
 	case REQUEST_SHUTDOWN:
 		_slurm_rpc_shutdown_controller(msg);
 		slurm_free_shutdown_msg(msg->data);
@@ -247,6 +270,7 @@ void slurmctld_req (slurm_msg_t * msg)
 		_slurm_rpc_update_node(msg);
 		slurm_free_update_node_msg(msg->data);
 		break;
+	case REQUEST_CREATE_PARTITION:
 	case REQUEST_UPDATE_PARTITION:
 		_slurm_rpc_update_partition(msg);
 		slurm_free_update_part_msg(msg->data);
@@ -255,6 +279,22 @@ void slurmctld_req (slurm_msg_t * msg)
 		_slurm_rpc_delete_partition(msg);
 		slurm_free_delete_part_msg(msg->data);
 		break;
+	case REQUEST_CREATE_RESERVATION:
+		_slurm_rpc_resv_create(msg);
+		slurm_free_resv_desc_msg(msg->data);
+		break;
+	case REQUEST_UPDATE_RESERVATION:
+		_slurm_rpc_resv_update(msg);
+		slurm_free_resv_desc_msg(msg->data);
+		break;
+	case REQUEST_DELETE_RESERVATION:
+		_slurm_rpc_resv_delete(msg);
+		slurm_free_resv_name_msg(msg->data);
+		break;
+	case REQUEST_RESERVATION_INFO:
+		_slurm_rpc_resv_show(msg);
+		slurm_free_resv_info_request_msg(msg->data);
+		break;
 	case REQUEST_NODE_REGISTRATION_STATUS:
 		error("slurmctld is talking with itself. "
 			"SlurmctldPort == SlurmdPort");
@@ -324,6 +364,10 @@ void slurmctld_req (slurm_msg_t * msg)
 		_slurm_rpc_accounting_first_reg(msg);
 		/* No body to free */
 		break;
+	case REQUEST_TOPO_INFO:
+		_slurm_rpc_get_topo(msg);
+		/* No body to free */
+		break;
 	default:
 		error("invalid RPC msg_type=%d", msg->msg_type);
 		slurm_send_rc_msg(msg, EINVAL);
@@ -340,8 +384,11 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr)
 {
 	slurm_ctl_conf_t *conf = slurm_conf_lock();
 
+	memset(conf_ptr, 0, sizeof(slurm_ctl_conf_t));
+
 	conf_ptr->last_update         = time(NULL);
-	conf_ptr->accounting_storage_enforce = conf->accounting_storage_enforce;
+	conf_ptr->accounting_storage_enforce = 
+					conf->accounting_storage_enforce;
 	conf_ptr->accounting_storage_host =
 					xstrdup(conf->accounting_storage_host);
 	conf_ptr->accounting_storage_loc =
@@ -358,21 +405,25 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr)
 
 	conf_ptr->backup_addr         = xstrdup(conf->backup_addr);
 	conf_ptr->backup_controller   = xstrdup(conf->backup_controller);
+	conf_ptr->batch_start_timeout = conf->batch_start_timeout;
 	conf_ptr->boot_time           = slurmctld_config.boot_time;
 
 	conf_ptr->cache_groups        = conf->cache_groups;
 	conf_ptr->checkpoint_type     = xstrdup(conf->checkpoint_type);
 	conf_ptr->cluster_name        = xstrdup(conf->cluster_name);
+	conf_ptr->complete_wait       = conf->complete_wait;
 	conf_ptr->control_addr        = xstrdup(conf->control_addr);
 	conf_ptr->control_machine     = xstrdup(conf->control_machine);
 	conf_ptr->crypto_type         = xstrdup(conf->crypto_type);
 
 	conf_ptr->def_mem_per_task    = conf->def_mem_per_task;
+	conf_ptr->debug_flags         = conf->debug_flags;
 	conf_ptr->disable_root_jobs   = conf->disable_root_jobs;
 
 	conf_ptr->enforce_part_limits = conf->enforce_part_limits;
 	conf_ptr->epilog              = xstrdup(conf->epilog);
 	conf_ptr->epilog_msg_time     = conf->epilog_msg_time;
+	conf_ptr->epilog_slurmctld    = xstrdup(conf->epilog_slurmctld);
 
 	conf_ptr->fast_schedule       = conf->fast_schedule;
 	conf_ptr->first_job_id        = conf->first_job_id;
@@ -385,6 +436,7 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr)
 	conf_ptr->job_acct_gather_freq  = conf->job_acct_gather_freq;
 	conf_ptr->job_acct_gather_type  = xstrdup(conf->job_acct_gather_type);
 
+	conf_ptr->job_ckpt_dir        = xstrdup(conf->job_ckpt_dir);
 	conf_ptr->job_comp_host       = xstrdup(conf->job_comp_host);
 	conf_ptr->job_comp_loc        = xstrdup(conf->job_comp_loc);
 	conf_ptr->job_comp_pass       = xstrdup(conf->job_comp_pass);
@@ -402,6 +454,7 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr)
 	conf_ptr->get_env_timeout     = conf->get_env_timeout;
 
 	conf_ptr->kill_wait           = conf->kill_wait;
+	conf_ptr->kill_on_bad_exit    = conf->kill_on_bad_exit;
 
 	conf_ptr->licenses            = xstrdup(conf->licenses);
 
@@ -410,16 +463,32 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr)
 	conf_ptr->max_mem_per_task    = conf->max_mem_per_task;
 	conf_ptr->min_job_age         = conf->min_job_age;
 	conf_ptr->mpi_default         = xstrdup(conf->mpi_default);
+	conf_ptr->mpi_params          = xstrdup(conf->mpi_params);
 	conf_ptr->msg_timeout         = conf->msg_timeout;
 
 	conf_ptr->next_job_id         = get_next_job_id();
 	conf_ptr->node_prefix         = xstrdup(conf->node_prefix);
 
+	conf_ptr->over_time_limit     = conf->over_time_limit;
+
 	conf_ptr->plugindir           = xstrdup(conf->plugindir);
 	conf_ptr->plugstack           = xstrdup(conf->plugstack);
+
+	conf_ptr->priority_decay_hl   = conf->priority_decay_hl;
+	conf_ptr->priority_favor_small= conf->priority_favor_small;
+	conf_ptr->priority_max_age    = conf->priority_max_age;
+	conf_ptr->priority_reset_period = conf->priority_reset_period;
+	conf_ptr->priority_type       = xstrdup(conf->priority_type);
+	conf_ptr->priority_weight_age = conf->priority_weight_age;
+	conf_ptr->priority_weight_fs  = conf->priority_weight_fs;
+	conf_ptr->priority_weight_js  = conf->priority_weight_js;
+	conf_ptr->priority_weight_part= conf->priority_weight_part;
+	conf_ptr->priority_weight_qos = conf->priority_weight_qos;
+
 	conf_ptr->private_data        = conf->private_data;
 	conf_ptr->proctrack_type      = xstrdup(conf->proctrack_type);
 	conf_ptr->prolog              = xstrdup(conf->prolog);
+	conf_ptr->prolog_slurmctld    = xstrdup(conf->prolog_slurmctld);
 	conf_ptr->propagate_prio_process = 
 					slurmctld_conf.propagate_prio_process;
         conf_ptr->propagate_rlimits   = xstrdup(conf->propagate_rlimits);
@@ -428,6 +497,8 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr)
 
 	conf_ptr->resume_program      = xstrdup(conf->resume_program);
 	conf_ptr->resume_rate         = conf->resume_rate;
+	conf_ptr->resume_timeout      = conf->resume_timeout;
+	conf_ptr->resv_over_run       = conf->resv_over_run;
 	conf_ptr->ret2service         = conf->ret2service;
 
 	conf_ptr->salloc_default_command = xstrdup(conf->
@@ -441,6 +512,7 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr)
 	conf_ptr->sched_time_slice    = conf->sched_time_slice;
 	conf_ptr->schedtype           = xstrdup(conf->schedtype);
 	conf_ptr->select_type         = xstrdup(conf->select_type);
+	conf_ptr->select_conf_key_pairs = (void *)select_g_get_config();
 	conf_ptr->select_type_param   = conf->select_type_param;
 	conf_ptr->slurm_user_id       = conf->slurm_user_id;
 	conf_ptr->slurm_user_name     = xstrdup(conf->slurm_user_name);
@@ -455,8 +527,11 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr)
 	conf_ptr->slurmd_port         = conf->slurmd_port;
 	conf_ptr->slurmd_spooldir     = xstrdup(conf->slurmd_spooldir);
 	conf_ptr->slurmd_timeout      = conf->slurmd_timeout;
+	conf_ptr->slurmd_user_id      = conf->slurmd_user_id;
+	conf_ptr->slurmd_user_name    = xstrdup(conf->slurmd_user_name);
 	conf_ptr->slurm_conf          = xstrdup(conf->slurm_conf);
 	conf_ptr->srun_prolog         = xstrdup(conf->srun_prolog);
+	conf_ptr->srun_io_timeout     = conf->srun_io_timeout;
 	conf_ptr->srun_epilog         = xstrdup(conf->srun_epilog);
 	conf_ptr->state_save_location = xstrdup(conf->state_save_location);
 	conf_ptr->suspend_exc_nodes   = xstrdup(conf->suspend_exc_nodes);
@@ -464,6 +539,7 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr)
 	conf_ptr->suspend_program     = xstrdup(conf->suspend_program);
 	conf_ptr->suspend_rate        = conf->suspend_rate;
 	conf_ptr->suspend_time        = conf->suspend_time;
+	conf_ptr->suspend_timeout     = conf->suspend_timeout;
 	conf_ptr->switch_type         = xstrdup(conf->switch_type);
 
 	conf_ptr->task_epilog         = xstrdup(conf->task_epilog);
@@ -471,6 +547,8 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr)
 	conf_ptr->task_plugin         = xstrdup(conf->task_plugin);
 	conf_ptr->task_plugin_param   = conf->task_plugin_param;
 	conf_ptr->tmp_fs              = xstrdup(conf->tmp_fs);
+	conf_ptr->topology_plugin     = xstrdup(conf->topology_plugin);
+	conf_ptr->track_wckey         = conf->track_wckey;
 	conf_ptr->tree_width          = conf->tree_width;
 
 	conf_ptr->wait_time           = conf->wait_time;
@@ -514,57 +592,36 @@ static void _kill_job_on_msg_fail(uint32_t job_id)
 }
 
 /* create a credential for a given job step, return error code */
-static int _make_step_cred(struct step_record *step_rec, 
+static int _make_step_cred(struct step_record *step_ptr, 
 			   slurm_cred_t *slurm_cred)
 {
 	slurm_cred_arg_t cred_arg;
-	struct job_record* job_ptr = step_rec->job_ptr;
+	struct job_record* job_ptr = step_ptr->job_ptr;
+	select_job_res_t select_ptr = job_ptr->select_job;
 
+	xassert(select_ptr && select_ptr->cpus);
 	cred_arg.jobid    = job_ptr->job_id;
-	cred_arg.stepid   = step_rec->step_id;
+	cred_arg.stepid   = step_ptr->step_id;
 	cred_arg.uid      = job_ptr->user_id;
 	cred_arg.job_mem  = job_ptr->details->job_min_memory;
-	cred_arg.task_mem = step_rec->mem_per_task;
 #ifdef HAVE_FRONT_END
 	cred_arg.hostlist = node_record_table_ptr[0].name;
 #else
-	cred_arg.hostlist = step_rec->step_layout->node_list;
+	cred_arg.hostlist = step_ptr->step_layout->node_list;
 #endif
-	cred_arg.alloc_lps_cnt = job_ptr->alloc_lps_cnt;
-	if ((cred_arg.alloc_lps_cnt > 0) &&
-	    bit_equal(job_ptr->node_bitmap, step_rec->step_node_bitmap)) {
-		cred_arg.alloc_lps = xmalloc(cred_arg.alloc_lps_cnt *
-				sizeof(uint32_t));
-		memcpy(cred_arg.alloc_lps, step_rec->job_ptr->alloc_lps,
-		       cred_arg.alloc_lps_cnt*sizeof(uint32_t));
-        } else if (cred_arg.alloc_lps_cnt > 0) {
-		/* Construct an array of allocated CPUs per node.
-		 * Translate from array based upon job's allocation
-		 * to array based upon nodes allocated to the step. */
-		int i, job_inx = -1, step_inx = -1;
-		int job_inx_target = job_ptr->node_cnt;
-		cred_arg.alloc_lps = xmalloc(cred_arg.alloc_lps_cnt *
-				sizeof(uint32_t));
-		for (i=0; i<node_record_count; i++) {
-			if (!bit_test(job_ptr->node_bitmap, i))
-				continue;
-			job_inx++;
-			if (!bit_test(step_rec->step_node_bitmap, i))
-				continue;
-			step_inx++;
-			cred_arg.alloc_lps[step_inx] = 
-					job_ptr->alloc_lps[job_inx];
-			if (job_inx == job_inx_target)
-				break;
-		}
-		cred_arg.alloc_lps_cnt = step_inx + 1;
-        } else {
-		error("No resources allocated to job %u", job_ptr->job_id);
-		cred_arg.alloc_lps = NULL;
-	}
+
+	/* Identify the cores allocated to this job step
+	 * The core_bitmap is based upon the nodes allocated to the _job_.
+	 * The slurmd must identify the appropriate cores to be used 
+	 * by each step. */
+	cred_arg.core_bitmap         = step_ptr->core_bitmap_job;
+	cred_arg.cores_per_socket    = select_ptr->cores_per_socket;
+	cred_arg.sockets_per_node    = select_ptr->sockets_per_node;
+	cred_arg.sock_core_rep_count = select_ptr->sock_core_rep_count;
+	cred_arg.job_nhosts          = select_ptr->nhosts;
+	cred_arg.job_hostlist        = job_ptr->nodes;
 
 	*slurm_cred = slurm_cred_create(slurmctld_config.cred_ctx, &cred_arg);
-	xfree(cred_arg.alloc_lps);
 	if (*slurm_cred == NULL) {
 		error("slurm_cred_create error");
 		return ESLURM_INVALID_JOB_CREDENTIAL;
@@ -617,6 +674,7 @@ static void _slurm_rpc_allocate_resources(slurm_msg_t * msg)
 	if (error_code == SLURM_SUCCESS) {
 		do_unlock = true;
 		lock_slurmctld(job_write_lock);
+
 		error_code = job_allocate(job_desc_msg, immediate, 
 					  false, NULL,
 					  true, uid, &job_ptr);
@@ -625,8 +683,9 @@ static void _slurm_rpc_allocate_resources(slurm_msg_t * msg)
 	}
 
 	/* return result */
-	if ((error_code == ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE)
-	||  (error_code == ESLURM_JOB_HELD))
+	if ((error_code == ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE) ||
+	    (error_code == ESLURM_RESERVATION_NOT_USABLE) ||
+	    (error_code == ESLURM_JOB_HELD))
 		job_waiting = true;
 
 	if ((error_code == SLURM_SUCCESS)
@@ -635,20 +694,33 @@ static void _slurm_rpc_allocate_resources(slurm_msg_t * msg)
 		info("_slurm_rpc_allocate_resources JobId=%u NodeList=%s %s",
 			job_ptr->job_id, job_ptr->nodes, TIME_STR);
 
-		/* send job_ID  and node_name_ptr */
-		alloc_msg.cpu_count_reps = xmalloc(sizeof(uint32_t) *
-				job_ptr->num_cpu_groups);
-		memcpy(alloc_msg.cpu_count_reps, job_ptr->cpu_count_reps,
-				(sizeof(uint32_t) * job_ptr->num_cpu_groups));
-		alloc_msg.cpus_per_node  = xmalloc(sizeof(uint32_t) *
-				job_ptr->num_cpu_groups);
-		memcpy(alloc_msg.cpus_per_node, job_ptr->cpus_per_node,
-				(sizeof(uint32_t) * job_ptr->num_cpu_groups));
+		/* send job_ID and node_name_ptr */
+		if (job_ptr->select_job && job_ptr->select_job->cpu_array_cnt) {
+			alloc_msg.num_cpu_groups = job_ptr->select_job->
+						   cpu_array_cnt;
+			alloc_msg.cpu_count_reps = xmalloc(sizeof(uint32_t) * 
+							   job_ptr->select_job->
+							   cpu_array_cnt);
+			memcpy(alloc_msg.cpu_count_reps, 
+			       job_ptr->select_job->cpu_array_reps,
+			       (sizeof(uint32_t) * job_ptr->select_job->
+						   cpu_array_cnt));
+			alloc_msg.cpus_per_node  = xmalloc(sizeof(uint16_t) * 
+							   job_ptr->select_job->
+							   cpu_array_cnt);
+			memcpy(alloc_msg.cpus_per_node, 
+			       job_ptr->select_job->cpu_array_value,
+			       (sizeof(uint16_t) * job_ptr->select_job->
+						   cpu_array_cnt));
+		} else {
+			alloc_msg.num_cpu_groups = 0;
+			alloc_msg.cpu_count_reps = NULL;
+			alloc_msg.cpus_per_node  = NULL;
+		}
 		alloc_msg.error_code     = error_code;
 		alloc_msg.job_id         = job_ptr->job_id;
 		alloc_msg.node_cnt       = job_ptr->node_cnt;
 		alloc_msg.node_list      = xstrdup(job_ptr->nodes);
-		alloc_msg.num_cpu_groups = job_ptr->num_cpu_groups;
 		alloc_msg.select_jobinfo = 
 			select_g_copy_jobinfo(job_ptr->select_jobinfo);
 		unlock_slurmctld(job_write_lock);
@@ -796,6 +868,59 @@ static void _slurm_rpc_dump_job_single(slurm_msg_t * msg)
 	xfree(dump);
 }
 
+static void  _slurm_rpc_get_shares(slurm_msg_t *msg)
+{
+	DEF_TIMERS;
+	shares_request_msg_t *req_msg = (shares_request_msg_t *) msg->data;
+	shares_response_msg_t resp_msg;
+	slurm_msg_t response_msg;
+	
+	uid_t uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
+
+	START_TIMER;
+	debug2("Processing RPC: REQUEST_SHARE_INFO from uid=%u",
+	       (unsigned int)uid);
+	resp_msg.assoc_shares_list = assoc_mgr_get_shares(acct_db_conn,
+							  uid,
+							  req_msg->acct_list, 
+							  req_msg->user_list);
+	slurm_msg_t_init(&response_msg);
+	response_msg.address  = msg->address;
+	response_msg.msg_type = RESPONSE_SHARE_INFO;
+	response_msg.data     = &resp_msg;
+	slurm_send_node_msg(msg->conn_fd, &response_msg);
+	if(resp_msg.assoc_shares_list)
+		list_destroy(resp_msg.assoc_shares_list);
+	END_TIMER2("_slurm_rpc_get_share");
+	debug2("_slurm_rpc_get_shares %s", TIME_STR);
+}
+
+static void  _slurm_rpc_get_priority_factors(slurm_msg_t *msg)
+{
+	DEF_TIMERS;
+	priority_factors_request_msg_t *req_msg =
+		(priority_factors_request_msg_t *) msg->data;
+	priority_factors_response_msg_t resp_msg;
+	slurm_msg_t response_msg;
+
+	uid_t uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
+
+	START_TIMER;
+	debug2("Processing RPC: REQUEST_PRIORITY_FACTORS from uid=%u",
+	       (unsigned int)uid);
+	resp_msg.priority_factors_list = priority_g_get_priority_factors_list(
+					 req_msg);
+	slurm_msg_t_init(&response_msg);
+	response_msg.address  = msg->address;
+	response_msg.msg_type = RESPONSE_PRIORITY_FACTORS;
+	response_msg.data     = &resp_msg;
+	slurm_send_node_msg(msg->conn_fd, &response_msg);
+	if(resp_msg.priority_factors_list)
+		list_destroy(resp_msg.priority_factors_list);
+	END_TIMER2("_slurm_rpc_get_priority_factors");
+	debug2("_slurm_rpc_get_priority_factors %s", TIME_STR);
+}
+
 /* _slurm_rpc_end_time - Process RPC for job end time */
 static void _slurm_rpc_end_time(slurm_msg_t * msg)
 {
@@ -811,7 +936,7 @@ static void _slurm_rpc_end_time(slurm_msg_t * msg)
 	uid_t uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
 
 	START_TIMER;
-	debug2("Processing RPC: REQUEST JOB_END_TIME from uid=%u",
+	debug2("Processing RPC: REQUEST_JOB_END_TIME from uid=%u",
 		(unsigned int) uid);
 	lock_slurmctld(job_read_lock);
 	rc = job_end_time(time_req_msg, &timeout_msg);
@@ -1067,8 +1192,8 @@ static void _slurm_rpc_complete_job_allocation(slurm_msg_t * msg)
 	/* init */
 	START_TIMER;
 	debug2("Processing RPC: REQUEST_COMPLETE_JOB_ALLOCATION from "
-		"uid=%u, JobId=%u rc=%d",
-		uid, comp_msg->job_id, comp_msg->job_rc);
+	       "uid=%u, JobId=%u rc=%d",
+	       uid, comp_msg->job_id, comp_msg->job_rc);
 
 	lock_slurmctld(job_write_lock);
 
@@ -1112,8 +1237,8 @@ static void _slurm_rpc_complete_batch_script(slurm_msg_t * msg)
 	/* init */
 	START_TIMER;
 	debug2("Processing RPC: REQUEST_COMPLETE_BATCH_SCRIPT from "
-		"uid=%u JobId=%u",
-		uid, comp_msg->job_id);
+	       "uid=%u JobId=%u",
+	       uid, comp_msg->job_id);
 
 	if (!validate_super_user(uid)) {
 		/* Only the slurmstepd can complete a batch script */
@@ -1141,7 +1266,7 @@ static void _slurm_rpc_complete_batch_script(slurm_msg_t * msg)
 		      slurm_strerror(comp_msg->slurm_rc));
 		if (error_code == SLURM_SUCCESS) {
 			update_node_msg_t update_node_msg;
-			bzero(&update_node_msg, sizeof(update_node_msg_t));
+			memset(&update_node_msg, 0, sizeof(update_node_msg_t));
 			update_node_msg.node_names =
 				comp_msg->node_name;
 			update_node_msg.node_state = NODE_STATE_DRAIN;
@@ -1222,8 +1347,8 @@ static void _slurm_rpc_job_step_create(slurm_msg_t * msg)
 	if (error_code == SLURM_SUCCESS) {
 		/* issue the RPC */
 		lock_slurmctld(job_write_lock);
-		error_code =
-			step_create(req_step_msg, &step_rec, false, false);
+		error_code = step_create(req_step_msg, &step_rec, 
+					 false, false);
 	}
 	if (error_code == SLURM_SUCCESS)
 		error_code = _make_step_cred(step_rec, &slurm_cred);
@@ -1232,8 +1357,8 @@ static void _slurm_rpc_job_step_create(slurm_msg_t * msg)
 	/* return result */
 	if (error_code) {
 		unlock_slurmctld(job_write_lock);
-		error("_slurm_rpc_job_step_create: %s", 
-			slurm_strerror(error_code));
+		info("_slurm_rpc_job_step_create: %s", 
+		     slurm_strerror(error_code));
 		slurm_send_rc_msg(msg, error_code);
 	} else {
 		slurm_step_layout_t *layout = step_rec->step_layout;
@@ -1243,6 +1368,7 @@ static void _slurm_rpc_job_step_create(slurm_msg_t * msg)
 			req_step_msg->node_list, TIME_STR);
 
 		job_step_resp.job_step_id = step_rec->step_id;
+		job_step_resp.resv_ports  = xstrdup(step_rec->resv_ports);
 		job_step_resp.step_layout = slurm_step_layout_copy(layout);
 		
 		job_step_resp.cred        = slurm_cred;
@@ -1256,6 +1382,7 @@ static void _slurm_rpc_job_step_create(slurm_msg_t * msg)
 		resp.data = &job_step_resp;
 		
 		slurm_send_node_msg(msg->conn_fd, &resp);
+		xfree(job_step_resp.resv_ports);
 		slurm_step_layout_destroy(job_step_resp.step_layout);
 		slurm_cred_destroy(slurm_cred);
 		switch_free_jobinfo(job_step_resp.switch_job);
@@ -1470,7 +1597,7 @@ static void _slurm_rpc_job_alloc_info(slurm_msg_t * msg)
 	END_TIMER2("_slurm_rpc_job_alloc_info");
 
 	/* return result */
-	if (error_code || (job_ptr == NULL)) {
+	if (error_code || (job_ptr == NULL) || (job_ptr->select_job == NULL)) {
 		if (do_unlock)
 			unlock_slurmctld(job_read_lock);
 		debug2("_slurm_rpc_job_alloc_info: JobId=%u, uid=%u: %s",
@@ -1482,15 +1609,20 @@ static void _slurm_rpc_job_alloc_info(slurm_msg_t * msg)
 			job_info_msg->job_id, job_ptr->nodes, TIME_STR);
 
 		/* send job_ID  and node_name_ptr */
+		job_info_resp_msg.num_cpu_groups = job_ptr->select_job->
+						   cpu_array_cnt;
 		job_info_resp_msg.cpu_count_reps = 
-			xmalloc(sizeof(uint32_t) * job_ptr->num_cpu_groups);
+				xmalloc(sizeof(uint32_t) * 
+					job_ptr->select_job->cpu_array_cnt);
 		memcpy(job_info_resp_msg.cpu_count_reps, 
-		       job_ptr->cpu_count_reps,
-		       (sizeof(uint32_t) * job_ptr->num_cpu_groups));
+		       job_ptr->select_job->cpu_array_reps,
+		       (sizeof(uint32_t) * job_ptr->select_job->cpu_array_cnt));
 		job_info_resp_msg.cpus_per_node  = 
-			xmalloc(sizeof(uint32_t) * job_ptr->num_cpu_groups);
-		memcpy(job_info_resp_msg.cpus_per_node, job_ptr->cpus_per_node,
-		       (sizeof(uint32_t) * job_ptr->num_cpu_groups));
+				xmalloc(sizeof(uint16_t) * 
+					job_ptr->select_job->cpu_array_cnt);
+		memcpy(job_info_resp_msg.cpus_per_node, 
+		       job_ptr->select_job->cpu_array_value,
+		       (sizeof(uint16_t) * job_ptr->select_job->cpu_array_cnt));
 		job_info_resp_msg.error_code     = error_code;
 		job_info_resp_msg.job_id         = job_info_msg->job_id;
 		job_info_resp_msg.node_addr      = xmalloc(sizeof(slurm_addr) *
@@ -1499,7 +1631,6 @@ static void _slurm_rpc_job_alloc_info(slurm_msg_t * msg)
 		       (sizeof(slurm_addr) * job_ptr->node_cnt));
 		job_info_resp_msg.node_cnt       = job_ptr->node_cnt;
 		job_info_resp_msg.node_list      = xstrdup(job_ptr->nodes);
-		job_info_resp_msg.num_cpu_groups = job_ptr->num_cpu_groups;
 		job_info_resp_msg.select_jobinfo = 
 			select_g_copy_jobinfo(job_ptr->select_jobinfo);
 		unlock_slurmctld(job_read_lock);
@@ -1545,32 +1676,35 @@ static void _slurm_rpc_job_alloc_info_lite(slurm_msg_t * msg)
 	END_TIMER2("_slurm_rpc_job_alloc_info_lite");
 
 	/* return result */
-	if (error_code || (job_ptr == NULL)) {
+	if (error_code || (job_ptr == NULL) || (job_ptr->select_job == NULL)) {
 		if (do_unlock)
 			unlock_slurmctld(job_read_lock);
-		debug2("_slurm_rpc_job_alloc_info_lite: JobId=%u, uid=%u: %s",
-			job_info_msg->job_id, uid, 
-			slurm_strerror(error_code));
+		info("_slurm_rpc_job_alloc_info_lite: JobId=%u, uid=%u: %s",
+		     job_info_msg->job_id, uid, slurm_strerror(error_code));
 		slurm_send_rc_msg(msg, error_code);
 	} else {
 		info("_slurm_rpc_job_alloc_info_lite JobId=%u NodeList=%s %s",
 			job_info_msg->job_id, job_ptr->nodes, TIME_STR);
 
 		/* send job_ID  and node_name_ptr */
+		job_info_resp_msg.num_cpu_groups = job_ptr->select_job->
+						   cpu_array_cnt;
 		job_info_resp_msg.cpu_count_reps = 
-			xmalloc(sizeof(uint32_t) * job_ptr->num_cpu_groups);
+				xmalloc(sizeof(uint32_t) * 
+					job_ptr->select_job->cpu_array_cnt);
 		memcpy(job_info_resp_msg.cpu_count_reps, 
-		       job_ptr->cpu_count_reps,
-		       (sizeof(uint32_t) * job_ptr->num_cpu_groups));
+		       job_ptr->select_job->cpu_array_reps,
+		       (sizeof(uint32_t) * job_ptr->select_job->cpu_array_cnt));
 		job_info_resp_msg.cpus_per_node  = 
-			xmalloc(sizeof(uint32_t) * job_ptr->num_cpu_groups);
-		memcpy(job_info_resp_msg.cpus_per_node, job_ptr->cpus_per_node,
-		       (sizeof(uint32_t) * job_ptr->num_cpu_groups));
+				xmalloc(sizeof(uint16_t) * 
+					job_ptr->select_job->cpu_array_cnt);
+		memcpy(job_info_resp_msg.cpus_per_node, 
+		       job_ptr->select_job->cpu_array_value,
+		       (sizeof(uint16_t) * job_ptr->select_job->cpu_array_cnt));
 		job_info_resp_msg.error_code     = error_code;
 		job_info_resp_msg.job_id         = job_info_msg->job_id;
 		job_info_resp_msg.node_cnt       = job_ptr->node_cnt;
 		job_info_resp_msg.node_list      = xstrdup(job_ptr->nodes);
-		job_info_resp_msg.num_cpu_groups = job_ptr->num_cpu_groups;
 		job_info_resp_msg.select_jobinfo = 
 			select_g_copy_jobinfo(job_ptr->select_jobinfo);
 		unlock_slurmctld(job_read_lock);
@@ -1598,7 +1732,11 @@ static void _slurm_rpc_ping(slurm_msg_t * msg)
 
 
 /* _slurm_rpc_reconfigure_controller - process RPC to re-initialize 
- *	slurmctld from configuration file */
+ *	slurmctld from configuration file 
+ * Anything you add to this function must be added to the
+ * slurm_reconfigure function inside controller.c try
+ * to keep these in sync.  
+ */
 static void _slurm_rpc_reconfigure_controller(slurm_msg_t * msg)
 {
 	int error_code = SLURM_SUCCESS;
@@ -1647,11 +1785,34 @@ static void _slurm_rpc_reconfigure_controller(slurm_msg_t * msg)
 		slurm_send_rc_msg(msg, SLURM_SUCCESS);
 		slurm_sched_partition_change();	/* notify sched plugin */
 		select_g_reconfigure();		/* notify select plugin too */
+		priority_g_reconfig();          /* notify priority plugin too */
 		schedule();			/* has its own locks */
 		save_all_state();
 	}
 }
 
+/* _slurm_rpc_takeover - process takeover RPC */
+static void _slurm_rpc_takeover(slurm_msg_t * msg)
+{
+	int error_code = SLURM_SUCCESS;
+	uid_t uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
+
+	/* We could authenticate here, if desired */
+	if (!validate_super_user(uid)) {
+		error("Security violation, TAKEOVER RPC from uid=%u",
+		      (unsigned int) uid);
+		error_code = ESLURM_USER_ID_MISSING;
+	} else {
+		/* takeover is not possible in controller mode */
+		/* return success */
+		info("Performing RPC: REQUEST_TAKEOVER : "
+		     "already in controller mode - skipping");
+	}
+
+	slurm_send_rc_msg(msg, error_code);
+
+}
+
 /* _slurm_rpc_shutdown_controller - process RPC to shutdown slurmctld */
 static void _slurm_rpc_shutdown_controller(slurm_msg_t * msg)
 {
@@ -1768,21 +1929,12 @@ static void _slurm_rpc_step_complete(slurm_msg_t *msg)
 		req->job_id, req->job_step_id,
 		req->range_first, req->range_last, 
 		req->step_rc, (unsigned int) uid);
-	if (!validate_super_user(uid)) {
-		/* Don't trust RPC, it is not from slurmstepd */
-		error("Invalid user %d attempted REQUEST_STEP_COMPLETE",
-		      uid);
-		return;
-	}
 
 	lock_slurmctld(job_write_lock);
-	rc = step_partial_comp(req, &rem, &step_rc);
+	rc = step_partial_comp(req, uid, &rem, &step_rc);
 
 	if (rc || rem) {	/* some error or not totally done */
-		if (rc) {
-			info("step_partial_comp: %s",
-				slurm_strerror(rc));
-		}
+		/* Note: Error printed within step_partial_comp */
 		unlock_slurmctld(job_write_lock);
 		slurm_send_rc_msg(msg, rc);
 		if (!rc)	/* partition completion */
@@ -1931,8 +2083,17 @@ static void _slurm_rpc_submit_batch_job(slurm_msg_t * msg)
 		lock_slurmctld(job_write_lock);
 		if (job_desc_msg->job_id != SLURM_BATCH_SCRIPT) {
 			job_ptr = find_job_record(job_desc_msg->job_id);
-			if (job_ptr && IS_JOB_FINISHED(job_ptr))
-				job_ptr = NULL;
+			if (job_ptr && IS_JOB_FINISHED(job_ptr)) {
+				if (job_ptr->job_state & JOB_COMPLETING) {
+					info("Attempt to re-use active "
+					     "job id %u", job_ptr->job_id);
+					slurm_send_rc_msg(msg, 
+							  ESLURM_DUPLICATE_JOB_ID);
+					unlock_slurmctld(job_write_lock);
+					return;
+				}
+				job_ptr = NULL;	/* OK to re-use job id */
+			}
 		} else
 			job_ptr = NULL;
 
@@ -1960,6 +2121,13 @@ static void _slurm_rpc_submit_batch_job(slurm_msg_t * msg)
 				unlock_slurmctld(job_write_lock);
 				return;
 			}
+			if (job_ptr->details && 
+			    job_ptr->details->prolog_running) {
+				slurm_send_rc_msg(msg, EAGAIN);
+				unlock_slurmctld(job_write_lock);
+				return;
+			}
+
 			error_code = _launch_batch_step(job_desc_msg, uid,
 							&step_id);
 			unlock_slurmctld(job_write_lock);
@@ -1999,6 +2167,7 @@ static void _slurm_rpc_submit_batch_job(slurm_msg_t * msg)
 	/* return result */
 	if ((error_code != SLURM_SUCCESS)
 	&&  (error_code != ESLURM_JOB_HELD)
+	&&  (error_code != ESLURM_RESERVATION_NOT_USABLE)
 	&&  (error_code != ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE)) {
 		info("_slurm_rpc_submit_batch_job: %s",
 			slurm_strerror(error_code));
@@ -2175,9 +2344,8 @@ static void _slurm_rpc_update_partition(slurm_msg_t * msg)
 		(unsigned int) uid);
 	if (!validate_super_user(uid)) {
 		error_code = ESLURM_USER_ID_MISSING;
-		error
-		    ("Security violation, UPDATE_PARTITION RPC from uid=%u",
-		     (unsigned int) uid);
+		error("Security violation, UPDATE_PARTITION RPC from uid=%u",
+		      (unsigned int) uid);
 	}
 
 	if (error_code == SLURM_SUCCESS) {
@@ -2186,9 +2354,13 @@ static void _slurm_rpc_update_partition(slurm_msg_t * msg)
 			error_code = select_g_update_block(part_desc_ptr);
 		else if(part_desc_ptr->root_only == (uint16_t)INFINITE) 
 			error_code = select_g_update_sub_node(part_desc_ptr);
-		else {
+		else if (msg->msg_type == REQUEST_CREATE_PARTITION) {
+			lock_slurmctld(part_write_lock);
+			error_code = update_part(part_desc_ptr, true);
+			unlock_slurmctld(part_write_lock);
+		} else {
 			lock_slurmctld(part_write_lock);
-			error_code = update_part(part_desc_ptr);
+			error_code = update_part(part_desc_ptr, false);
 			unlock_slurmctld(part_write_lock);
 		}
 		END_TIMER2("_slurm_rpc_update_partition");
@@ -2260,6 +2432,204 @@ static void _slurm_rpc_delete_partition(slurm_msg_t * msg)
 	}
 }
 
+/* _slurm_rpc_resv_create - process RPC to create a reservation */
+static void _slurm_rpc_resv_create(slurm_msg_t * msg)
+{
+	int error_code = SLURM_SUCCESS;
+	DEF_TIMERS;
+	resv_desc_msg_t *resv_desc_ptr = (resv_desc_msg_t *) 
+						msg->data;
+	/* Locks: write node, read partition */
+	slurmctld_lock_t node_write_lock = { 
+		NO_LOCK, NO_LOCK, WRITE_LOCK, READ_LOCK };
+	uid_t uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
+
+	START_TIMER;
+	debug2("Processing RPC: REQUEST_CREATE_RESERVATION from uid=%u",
+		(unsigned int) uid);
+	if (!validate_super_user(uid)) {
+		error_code = ESLURM_USER_ID_MISSING;
+		error
+		    ("Security violation, CREATE_RESERVATION RPC from uid=%u",
+		     (unsigned int) uid);
+	}
+
+	if (error_code == SLURM_SUCCESS) {
+		/* do RPC call */
+		lock_slurmctld(node_write_lock);
+		error_code = create_resv(resv_desc_ptr);
+		unlock_slurmctld(node_write_lock);
+		END_TIMER2("_slurm_rpc_resv_create");
+	}
+
+	/* return result */
+	if (error_code) {
+		info("_slurm_rpc_resv_create reservation=%s: %s",
+			resv_desc_ptr->name, slurm_strerror(error_code));
+		slurm_send_rc_msg(msg, error_code);
+	} else {
+		slurm_msg_t response_msg;
+		reservation_name_msg_t resv_resp_msg;
+
+		debug2("_slurm_rpc_resv_create complete for %s %s",
+			resv_desc_ptr->name, TIME_STR);
+		/* send reservation name */
+		slurm_msg_t_init(&response_msg);
+		resv_resp_msg.name    = resv_desc_ptr->name;
+		response_msg.msg_type = RESPONSE_CREATE_RESERVATION;
+		response_msg.data     = &resv_resp_msg;
+		slurm_send_node_msg(msg->conn_fd, &response_msg);
+
+		/* NOTE: These functions provide their own locks */
+		if (schedule()) {
+			schedule_job_save();
+			schedule_node_save();
+		}
+	}
+}
+
+/* _slurm_rpc_resv_update - process RPC to update a reservation */
+static void _slurm_rpc_resv_update(slurm_msg_t * msg)
+{
+	int error_code = SLURM_SUCCESS;
+	DEF_TIMERS;
+	resv_desc_msg_t *resv_desc_ptr = (resv_desc_msg_t *) 
+						msg->data;
+	/* Locks: write node, read partition */
+	slurmctld_lock_t node_write_lock = { 
+		NO_LOCK, NO_LOCK, WRITE_LOCK, READ_LOCK };
+	uid_t uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
+
+	START_TIMER;
+	debug2("Processing RPC: REQUEST_UPDATE_RESERVATION from uid=%u",
+		(unsigned int) uid);
+	if (!validate_super_user(uid)) {
+		error_code = ESLURM_USER_ID_MISSING;
+		error
+		    ("Security violation, UPDATE_RESERVATION RPC from uid=%u",
+		     (unsigned int) uid);
+	}
+
+	if (error_code == SLURM_SUCCESS) {
+		/* do RPC call */
+		lock_slurmctld(node_write_lock);
+		error_code = update_resv(resv_desc_ptr);
+		unlock_slurmctld(node_write_lock);
+		END_TIMER2("_slurm_rpc_resv_update");
+	}
+
+	/* return result */
+	if (error_code) {
+		info("_slurm_rpc_resv_update reservation=%s: %s",
+			resv_desc_ptr->name, slurm_strerror(error_code));
+		slurm_send_rc_msg(msg, error_code);
+	} else {
+		debug2("_slurm_rpc_resv_update complete for %s %s",
+			resv_desc_ptr->name, TIME_STR);
+		slurm_send_rc_msg(msg, SLURM_SUCCESS);
+
+		/* NOTE: These functions provide their own locks */
+		if (schedule()) {
+			schedule_job_save();
+			schedule_node_save();
+		}
+	}
+}
+
+/* _slurm_rpc_resv_delete - process RPC to delete a reservation */
+static void _slurm_rpc_resv_delete(slurm_msg_t * msg)
+{
+	/* init */
+	int error_code = SLURM_SUCCESS;
+	DEF_TIMERS;
+	reservation_name_msg_t *resv_desc_ptr = (reservation_name_msg_t *)
+					      msg->data;
+	/* Locks: read job, write node */
+	slurmctld_lock_t node_write_lock = { 
+		NO_LOCK, READ_LOCK, WRITE_LOCK, NO_LOCK };
+	uid_t uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
+
+	START_TIMER;
+	debug2("Processing RPC: REQUEST_DELETE_RESERVTION from uid=%u",
+		(unsigned int) uid);
+	if (!validate_super_user(uid)) {
+		error_code = ESLURM_USER_ID_MISSING;
+		error
+		    ("Security violation, DELETE_RESERVTION RPC from uid=%u",
+		     (unsigned int) uid);
+	}
+
+	if (error_code == SLURM_SUCCESS) {
+		/* do RPC call */
+		lock_slurmctld(node_write_lock);
+		error_code = delete_resv(resv_desc_ptr);
+		unlock_slurmctld(node_write_lock);
+		END_TIMER2("_slurm_rpc_resv_delete");
+	}
+
+	/* return result */
+	if (error_code) {
+		info("_slurm_rpc_delete_reservation partition=%s: %s",
+			resv_desc_ptr->name, slurm_strerror(error_code));
+		slurm_send_rc_msg(msg, error_code);
+	} else {
+		info("_slurm_rpc_delete_reservation complete for %s %s",
+			resv_desc_ptr->name, TIME_STR);
+		slurm_send_rc_msg(msg, SLURM_SUCCESS);
+
+		/* NOTE: These functions provide their own locks */
+		if (schedule()) {
+			schedule_job_save();
+			schedule_node_save();
+		}
+
+	}
+}
+
+/* _slurm_rpc_resv_show - process RPC to dump reservation info */
+static void _slurm_rpc_resv_show(slurm_msg_t * msg)
+{
+        resv_info_request_msg_t *resv_req_msg = (resv_info_request_msg_t *) 
+						msg->data;
+	DEF_TIMERS;
+	/* Locks: read node */
+	slurmctld_lock_t node_read_lock = { 
+		NO_LOCK, NO_LOCK, READ_LOCK, NO_LOCK };
+	uid_t uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
+	slurm_msg_t response_msg;
+	char *dump;
+	int dump_size;
+
+	START_TIMER;
+	debug2("Processing RPC: REQUEST_RESERVATION_INFO from uid=%u",
+		(unsigned int) uid);
+	if ((slurmctld_conf.private_data & PRIVATE_DATA_PARTITIONS) &&
+	    (!validate_super_user(uid))) {
+		debug2("Security violation, REQUEST_RESERVATION_INFO "
+		       "RPC from uid=%d", uid);
+		slurm_send_rc_msg(msg, ESLURM_ACCESS_DENIED);
+	} else if ((resv_req_msg->last_update - 1) >= last_resv_update) {
+		debug2("_slurm_rpc_resv_show, no change");
+		slurm_send_rc_msg(msg, SLURM_NO_CHANGE_IN_DATA);
+	} else {
+		lock_slurmctld(node_read_lock);
+		show_resv(&dump, &dump_size, uid);
+		unlock_slurmctld(node_read_lock);
+		END_TIMER2("_slurm_rpc_resv_show");
+
+		/* init response_msg structure */
+		slurm_msg_t_init(&response_msg);
+		response_msg.address = msg->address;
+		response_msg.msg_type = RESPONSE_RESERVATION_INFO;
+		response_msg.data = dump;
+		response_msg.data_size = dump_size;
+
+		/* send message */
+		slurm_send_node_msg(msg->conn_fd, &response_msg);
+		xfree(dump);
+	}
+}
+
 /* determine of nodes are ready for the job */
 static void _slurm_rpc_job_ready(slurm_msg_t * msg)
 {
@@ -2465,28 +2835,35 @@ inline static void  _slurm_rpc_checkpoint(slurm_msg_t * msg)
 
 	/* do RPC call and send reply */
 	lock_slurmctld(job_write_lock);
-	error_code = job_step_checkpoint(ckpt_ptr, uid, msg->conn_fd);
+	if (ckpt_ptr->op == CHECK_RESTART) {
+		error_code = job_restart(ckpt_ptr, uid, msg->conn_fd);
+	} else if (ckpt_ptr->step_id == SLURM_BATCH_SCRIPT) {
+		error_code = job_checkpoint(ckpt_ptr, uid, msg->conn_fd);
+	} else {
+		error_code = job_step_checkpoint(ckpt_ptr, uid, msg->conn_fd);
+	}
 	unlock_slurmctld(job_write_lock);
 	END_TIMER2("_slurm_rpc_checkpoint");
 
 	if (error_code) {
-		if (ckpt_ptr->step_id == SLURM_BATCH_SCRIPT)
+		if (ckpt_ptr->step_id == SLURM_BATCH_SCRIPT) {
 			info("_slurm_rpc_checkpoint %s %u: %s", op, 
 				ckpt_ptr->job_id, slurm_strerror(error_code));
-		else
+		} else {
 			info("_slurm_rpc_checkpoint %s %u.%u: %s", op, 
 				ckpt_ptr->job_id, ckpt_ptr->step_id, 
 				slurm_strerror(error_code));
+		}
 	} else {
-		if (ckpt_ptr->step_id == SLURM_BATCH_SCRIPT)
+		if (ckpt_ptr->step_id == SLURM_BATCH_SCRIPT) {
 			info("_slurm_rpc_checkpoint %s for %u %s", op,
 				ckpt_ptr->job_id, TIME_STR);
-		else
+		} else {
 			info("_slurm_rpc_checkpoint %s for %u.%u %s", op,
 				ckpt_ptr->job_id, ckpt_ptr->step_id, TIME_STR);
-
-		if ((ckpt_ptr->op != CHECK_ABLE) 
-		&&  (ckpt_ptr->op != CHECK_ERROR)) {
+		}
+		if ((ckpt_ptr->op != CHECK_ABLE) &&
+		    (ckpt_ptr->op != CHECK_ERROR)) {
 			/* job state changed, save it */
 			/* NOTE: This function provides it own locks */
 			schedule_job_save();
@@ -2597,19 +2974,6 @@ _xduparray2(uint16_t size, char ** array)
 	return result;
 }
 
-
-
-int _max_nprocs(struct job_record  *job_ptr)
-{
-       int i, num, nprocs = 0;
-       if (!job_ptr) return 0;
-       num = job_ptr->num_cpu_groups;
-       for (i = 0; i < num; i++) {
-	       nprocs += job_ptr->cpu_count_reps[i]*job_ptr->cpus_per_node[i];
-       }
-       return nprocs;
-}
-
 /* _launch_batch_step
  * IN: job_desc_msg from _slurm_rpc_submit_batch_job() but with jobid set
  *     which means it's trying to launch within a pre-existing allocation.
@@ -2701,6 +3065,7 @@ int _launch_batch_step(job_desc_msg_t *job_desc_msg, uid_t uid,
 	launch_msg_ptr->gid = job_ptr->group_id;
 	launch_msg_ptr->uid = uid;
 	launch_msg_ptr->nodes = xstrdup(job_ptr->nodes);
+	launch_msg_ptr->restart_cnt = job_ptr->restart_cnt;
 
 	if (make_batch_job_cred(launch_msg_ptr, job_ptr)) {
 		error("aborting batch step %u.%u", job_ptr->job_id,
@@ -2725,28 +3090,33 @@ int _launch_batch_step(job_desc_msg_t *job_desc_msg, uid_t uid,
 						 job_desc_msg->environment);
 	launch_msg_ptr->envc = job_desc_msg->env_size;
 	launch_msg_ptr->job_mem = job_desc_msg->job_min_memory;
+	launch_msg_ptr->cpus_per_task = job_desc_msg->cpus_per_task;
 
 	/* _max_nprocs() represents the total number of CPUs available
 	 * for this step (overcommit not supported yet). If job_desc_msg
 	 * contains a reasonable num_procs request, use that value;
 	 * otherwise default to the allocation processor request.
 	 */
-	launch_msg_ptr->nprocs = _max_nprocs(job_ptr);
+	launch_msg_ptr->nprocs = job_ptr->total_procs;
 	if (job_desc_msg->num_procs > 0 &&
 		job_desc_msg->num_procs < launch_msg_ptr->nprocs)
 		launch_msg_ptr->nprocs = job_desc_msg->num_procs;
 	if (launch_msg_ptr->nprocs < 0)
 		launch_msg_ptr->nprocs = job_ptr->num_procs;
 
-	launch_msg_ptr->num_cpu_groups = job_ptr->num_cpu_groups;
-	launch_msg_ptr->cpus_per_node  = xmalloc(sizeof(uint32_t) *
-			job_ptr->num_cpu_groups);
-	memcpy(launch_msg_ptr->cpus_per_node, job_ptr->cpus_per_node,
-			(sizeof(uint32_t) * job_ptr->num_cpu_groups));
+	launch_msg_ptr->num_cpu_groups = job_ptr->select_job->cpu_array_cnt;
+	launch_msg_ptr->cpus_per_node  = xmalloc(sizeof(uint16_t) *
+			job_ptr->select_job->cpu_array_cnt);
+	memcpy(launch_msg_ptr->cpus_per_node, 
+	       job_ptr->select_job->cpu_array_value,
+	       (sizeof(uint16_t) * job_ptr->select_job->cpu_array_cnt));
 	launch_msg_ptr->cpu_count_reps  = xmalloc(sizeof(uint32_t) *
-			job_ptr->num_cpu_groups);
-	memcpy(launch_msg_ptr->cpu_count_reps, job_ptr->cpu_count_reps,
-			(sizeof(uint32_t) * job_ptr->num_cpu_groups));
+			job_ptr->select_job->cpu_array_cnt);
+	memcpy(launch_msg_ptr->cpu_count_reps, 
+	       job_ptr->select_job->cpu_array_reps,
+	       (sizeof(uint32_t) * job_ptr->select_job->cpu_array_cnt));
+	launch_msg_ptr->select_jobinfo = select_g_copy_jobinfo(
+			job_ptr->select_jobinfo);
 
 	/* FIXME: for some reason these CPU arrays total all the CPUs
 	 * actually allocated, rather than totaling up to the requested
@@ -2827,6 +3197,45 @@ inline static void  _slurm_rpc_trigger_set(slurm_msg_t * msg)
 	slurm_send_rc_msg(msg, rc);
 }
 
+inline static void  _slurm_rpc_get_topo(slurm_msg_t * msg)
+{
+	topo_info_response_msg_t *topo_resp_msg;
+	slurm_msg_t response_msg;
+	int i;
+	/* Locks: read node lock */
+	slurmctld_lock_t node_read_lock = { 
+		NO_LOCK, NO_LOCK, READ_LOCK, NO_LOCK };
+	DEF_TIMERS;
+
+	START_TIMER;
+	lock_slurmctld(node_read_lock);
+	topo_resp_msg = xmalloc(sizeof(topo_info_response_msg_t));
+	topo_resp_msg->record_count = switch_record_cnt;
+	topo_resp_msg->topo_array = xmalloc(sizeof(topo_info_t) * 
+					    topo_resp_msg->record_count);
+	for (i=0; i<topo_resp_msg->record_count; i++) {
+		topo_resp_msg->topo_array[i].level      =
+				switch_record_table[i].level;
+		topo_resp_msg->topo_array[i].link_speed =
+				switch_record_table[i].link_speed;
+		topo_resp_msg->topo_array[i].name       =
+				xstrdup(switch_record_table[i].name);
+		topo_resp_msg->topo_array[i].nodes      =
+				xstrdup(switch_record_table[i].nodes);
+		topo_resp_msg->topo_array[i].switches   =
+				xstrdup(switch_record_table[i].switches);
+	}
+	unlock_slurmctld(node_read_lock);
+	END_TIMER2("_slurm_rpc_get_topo");
+
+	slurm_msg_t_init(&response_msg);
+	response_msg.address  = msg->address;
+	response_msg.msg_type = RESPONSE_TOPO_INFO;
+	response_msg.data     = topo_resp_msg;
+	slurm_send_node_msg(msg->conn_fd, &response_msg);
+	slurm_free_topo_info_msg(topo_resp_msg);
+}
+
 inline static void  _slurm_rpc_job_notify(slurm_msg_t * msg)
 {
 	int error_code = SLURM_SUCCESS;
@@ -2869,7 +3278,8 @@ inline static void  _slurm_rpc_set_debug_level(slurm_msg_t *msg)
 	uid_t uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
 	slurmctld_lock_t config_read_lock =
 		{ READ_LOCK, NO_LOCK, NO_LOCK, NO_LOCK };
-	set_debug_level_msg_t *request_msg = (set_debug_level_msg_t *) msg->data;
+	set_debug_level_msg_t *request_msg = 
+		(set_debug_level_msg_t *) msg->data;
 	log_options_t log_opts = LOG_OPTS_INITIALIZER;
 	slurm_ctl_conf_t *conf;
 
@@ -2955,22 +3365,22 @@ inline static void  _slurm_rpc_accounting_update_msg(slurm_msg_t *msg)
 			case ACCT_REMOVE_USER:
 			case ACCT_ADD_COORD:
 			case ACCT_REMOVE_COORD:
-				rc = assoc_mgr_update_local_users(object);
+				rc = assoc_mgr_update_users(object);
 				break;
 			case ACCT_ADD_ASSOC:
 			case ACCT_MODIFY_ASSOC:
 			case ACCT_REMOVE_ASSOC:
-				rc = assoc_mgr_update_local_assocs(object);
+				rc = assoc_mgr_update_assocs(object);
 				break;
 			case ACCT_ADD_QOS:
 			case ACCT_MODIFY_QOS:
 			case ACCT_REMOVE_QOS:
-				rc = assoc_mgr_update_local_qos(object);
+				rc = assoc_mgr_update_qos(object);
 				break;
 			case ACCT_ADD_WCKEY:
 			case ACCT_MODIFY_WCKEY:
 			case ACCT_REMOVE_WCKEY:
-				rc = assoc_mgr_update_local_wckeys(object);
+				rc = assoc_mgr_update_wckeys(object);
 				break;
 			case ACCT_UPDATE_NOTSET:
 			default:
diff --git a/src/slurmctld/proc_req.h b/src/slurmctld/proc_req.h
index fad93e53a..258b29446 100644
--- a/src/slurmctld/proc_req.h
+++ b/src/slurmctld/proc_req.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> and Kevin Tew <tew1@llnl.gov> 
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/read_config.c b/src/slurmctld/read_config.c
index 195136685..2785fc22f 100644
--- a/src/slurmctld/read_config.c
+++ b/src/slurmctld/read_config.c
@@ -1,13 +1,15 @@
 /*****************************************************************************\
  *  read_config.c - read the overall slurm configuration file
  *****************************************************************************
- *  Copyright (C) 2002 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -15,7 +17,7 @@
  *  any later version.
  *
  *  In addition, as a special exception, the copyright holders give permission 
- *  to link the code of portions of this program with the OpenSSL library under 
+ *  to link the code of portions of this program with the OpenSSL library under
  *  certain conditions as described in each individual source file, and 
  *  distribute linked combinations including the two. You must obey the GNU 
  *  General Public License in all respects for all of the code used other than 
@@ -68,31 +70,37 @@
 #include "src/common/xstring.h"
 
 #include "src/slurmctld/acct_policy.h"
+#include "src/slurmctld/basil_interface.h"
 #include "src/slurmctld/job_scheduler.h"
 #include "src/slurmctld/licenses.h"
 #include "src/slurmctld/locks.h"
 #include "src/slurmctld/node_scheduler.h"
+#include "src/slurmctld/port_mgr.h"
 #include "src/slurmctld/proc_req.h"
 #include "src/slurmctld/read_config.h"
+#include "src/slurmctld/reservation.h"
 #include "src/slurmctld/sched_plugin.h"
 #include "src/slurmctld/slurmctld.h"
+#include "src/slurmctld/srun_comm.h"
 #include "src/slurmctld/trigger_mgr.h"
+#include "src/slurmctld/topo_plugin.h"
 
 static void _acct_restore_active_jobs(void);
 static int  _build_bitmaps(void);
 static void _build_bitmaps_pre_select(void);
 static int  _init_all_slurm_conf(void);
-static void _purge_old_node_state(struct node_record *old_node_table_ptr, 
-				int old_node_record_count);
-static int  _restore_job_dependencies(void);
-static int  _restore_node_state(struct node_record *old_node_table_ptr, 
-				int old_node_record_count);
 static int  _preserve_select_type_param(slurm_ctl_conf_t * ctl_conf_ptr, 
-					select_type_plugin_info_t old_select_type_p);
+					select_type_plugin_info_t 
+					old_select_type_p);
 static int  _preserve_plugins(slurm_ctl_conf_t * ctl_conf_ptr, 
 				char *old_auth_type, char *old_checkpoint_type,
 				char *old_crypto_type, char *old_sched_type, 
 				char *old_select_type, char *old_switch_type);
+static void _purge_old_node_state(struct node_record *old_node_table_ptr, 
+				int old_node_record_count);
+static int  _restore_job_dependencies(void);
+static int  _restore_node_state(struct node_record *old_node_table_ptr, 
+				int old_node_record_count);
 static int  _sync_nodes_to_comp_job(void);
 static int  _sync_nodes_to_jobs(void);
 static int  _sync_nodes_to_active_job(struct job_record *job_ptr);
@@ -103,9 +111,6 @@ static void _validate_node_proc_count(void);
 static char *highest_node_name = NULL;
 int node_record_count = 0;
 
-/* FIXME - declarations for temporarily moved functions */
-#define MULTIPLE_VALUE_MSG "Multiple values for %s, latest one used"
-
 /*
  * _build_bitmaps_pre_select - recover some state for jobs and nodes prior to 
  *	calling the select_* functions
@@ -116,7 +121,6 @@ static void _build_bitmaps_pre_select(void)
 	struct node_record   *node_ptr;
 	ListIterator part_iterator;
 	int i;
-	
 
 	/* scan partition table and identify nodes in each */
 	part_iterator = list_iterator_create(part_list);
@@ -179,14 +183,17 @@ static int _build_bitmaps(void)
 	/* initialize the idle and up bitmaps */
 	FREE_NULL_BITMAP(idle_node_bitmap);
 	FREE_NULL_BITMAP(avail_node_bitmap);
+	FREE_NULL_BITMAP(power_node_bitmap);
 	FREE_NULL_BITMAP(share_node_bitmap);
 	FREE_NULL_BITMAP(up_node_bitmap);
 	idle_node_bitmap  = (bitstr_t *) bit_alloc(node_record_count);
 	avail_node_bitmap = (bitstr_t *) bit_alloc(node_record_count);
+	power_node_bitmap = (bitstr_t *) bit_alloc(node_record_count);
 	share_node_bitmap = (bitstr_t *) bit_alloc(node_record_count);
 	up_node_bitmap    = (bitstr_t *) bit_alloc(node_record_count);
 	if ((idle_node_bitmap     == NULL) ||
 	    (avail_node_bitmap    == NULL) ||
+	    (power_node_bitmap    == NULL) ||
 	    (share_node_bitmap    == NULL) ||
 	    (up_node_bitmap       == NULL)) 
 		fatal ("bit_alloc malloc failure");
@@ -231,17 +238,15 @@ static int _build_bitmaps(void)
 	 * their configuration, resync DRAINED vs. DRAINING state */
 	for (i = 0; i < node_record_count; i++) {
 		uint16_t base_state, drain_flag, no_resp_flag, job_cnt;
+		struct node_record *node_ptr = node_record_table_ptr + i;
 
-		if (node_record_table_ptr[i].name[0] == '\0')
+		if (node_ptr->name[0] == '\0')
 			continue;	/* defunct */
-		base_state = node_record_table_ptr[i].node_state & 
-				NODE_STATE_BASE;
-		drain_flag = node_record_table_ptr[i].node_state &
+		base_state = node_ptr->node_state & NODE_STATE_BASE;
+		drain_flag = node_ptr->node_state &
 				(NODE_STATE_DRAIN | NODE_STATE_FAIL);
-		no_resp_flag = node_record_table_ptr[i].node_state & 
-				NODE_STATE_NO_RESPOND;
-		job_cnt = node_record_table_ptr[i].run_job_cnt +
-		          node_record_table_ptr[i].comp_job_cnt;
+		no_resp_flag = node_ptr->node_state & NODE_STATE_NO_RESPOND;
+		job_cnt = node_ptr->run_job_cnt + node_ptr->comp_job_cnt;
 
 		if (((base_state == NODE_STATE_IDLE) && (job_cnt == 0))
 		||  (base_state == NODE_STATE_DOWN))
@@ -252,9 +257,10 @@ static int _build_bitmaps(void)
 				bit_set(avail_node_bitmap, i);
 			bit_set(up_node_bitmap, i);
 		}
-		if (node_record_table_ptr[i].config_ptr)
-			bit_set(node_record_table_ptr[i].config_ptr->
-				node_bitmap, i);
+		if (node_ptr->node_state & NODE_STATE_POWER_SAVE)
+			bit_set(power_node_bitmap, i);
+		if (node_ptr->config_ptr)
+			bit_set(node_ptr->config_ptr->node_bitmap, i);
 	}
 	return error_code;
 }
@@ -314,38 +320,6 @@ static int _state_str2int(const char *state_str)
 	return state_val;
 }
 
-#ifdef HAVE_3D
-/* Used to get the general name of the machine, used primarily 
- * for bluegene systems.  Not in general use because some systems 
- * have multiple prefix's such as foo[1-1000],bar[1-1000].
- */
-/* Caller must be holding slurm_conf_lock() */
-static void _set_node_prefix(const char *nodenames, slurm_ctl_conf_t *conf)
-{
-	int i;
-	char *tmp;
-
-	xassert(nodenames != NULL);
-	for (i = 1; nodenames[i] != '\0'; i++) {
-		if((nodenames[i-1] == '[') 
-		   || (nodenames[i-1] <= '9'
-		       && nodenames[i-1] >= '0'))
-			break;
-	}
-	xfree(conf->node_prefix);
-	if(nodenames[i] == '\0')
-		conf->node_prefix = xstrdup(nodenames);
-	else {
-		tmp = xmalloc(sizeof(char)*i+1);
-		memset(tmp, 0, i+1);
-		snprintf(tmp, i, "%s", nodenames);
-		conf->node_prefix = tmp;
-		tmp = NULL;
-	}
-	debug3("Prefix is %s %s %d", conf->node_prefix, nodenames, i);
-}
-#endif /* HAVE_BG */
-
 /* 
  * _build_single_nodeline_info - From the slurm.conf reader, build table,
  * 	and set values
@@ -392,11 +366,6 @@ static int _build_single_nodeline_info(slurm_conf_node_t *node_ptr,
 		goto cleanup;
 	}
 
-#ifdef HAVE_3D
-	if (conf->node_prefix == NULL)
-		_set_node_prefix(node_ptr->nodenames, conf);
-#endif
-
 	/* some sanity checks */
 #ifdef HAVE_FRONT_END
 	if ((hostlist_count(hostname_list) != 1) ||
@@ -518,7 +487,7 @@ cleanup:
 	return error_code;
 }
 
-static void _handle_all_downnodes()
+static void _handle_all_downnodes(void)
 {
 	slurm_conf_downnodes_t *ptr, **ptr_array;
 	int count;
@@ -544,10 +513,11 @@ static void _handle_all_downnodes()
  * Note: Operates on common variables
  *	default_node_record - default node configuration values
  */
-static int _build_all_nodeline_info(slurm_ctl_conf_t *conf)
+static int _build_all_nodeline_info(void)
 {
 	slurm_conf_node_t *node, **ptr_array;
 	struct config_record *config_ptr = NULL;
+	slurm_ctl_conf_t *conf;
 	int count;
 	int i;
 
@@ -555,6 +525,7 @@ static int _build_all_nodeline_info(slurm_ctl_conf_t *conf)
 	if (count == 0)
 		fatal("No NodeName information available!");
 
+	conf = slurm_conf_lock();
 	for (i = 0; i < count; i++) {
 		node = ptr_array[i];
 
@@ -574,6 +545,10 @@ static int _build_all_nodeline_info(slurm_ctl_conf_t *conf)
 		_build_single_nodeline_info(node, config_ptr, conf);
 	}
 	xfree(highest_node_name);
+
+	/* Unlock config here so that we can call
+	 * find_node_record() below and in the topology plugins */
+	slurm_conf_unlock();
 #ifdef HAVE_3D
 {
 	char *node_000 = NULL;
@@ -581,18 +556,19 @@ static int _build_all_nodeline_info(slurm_ctl_conf_t *conf)
 	if (conf->node_prefix)
 		node_000 = xstrdup(conf->node_prefix);
 	xstrcat(node_000, "000");
-	slurm_conf_unlock();
 	node_rec = find_node_record(node_000);
-	slurm_conf_lock();
 	if (node_rec == NULL)
 		fatal("No node %s configured", node_000);
 	xfree(node_000);
 #ifndef HAVE_BG
 	if (count == 1)
-		nodes_to_hilbert_curve();
+		slurm_topo_build_config();
 #endif	/* ! HAVE_BG */
 }
+#else
+	slurm_topo_build_config();
 #endif	/* HAVE_3D */
+
 	return SLURM_SUCCESS;
 }
 
@@ -635,9 +611,17 @@ static int _build_single_partitionline_info(slurm_conf_partition_t *part)
 	
 	if(part_ptr->disable_root_jobs) 
 		debug2("partition %s does not allow root jobs", part_ptr->name);
-	
+
+	if ((part->default_time != NO_VAL) &&
+	    (part->default_time > part->max_time)) {
+		info("partition %s DefaultTime exceeds MaxTime (%u > %u)",
+		     part->default_time, part->max_time);
+		part->default_time = NO_VAL;
+	}
+
 	part_ptr->hidden         = part->hidden_flag ? 1 : 0;
 	part_ptr->max_time       = part->max_time;
+	part_ptr->default_time   = part->default_time;
 	part_ptr->max_share      = part->max_share;
 	part_ptr->max_nodes      = part->max_nodes;
 	part_ptr->max_nodes_orig = part->max_nodes;
@@ -650,6 +634,32 @@ static int _build_single_partitionline_info(slurm_conf_partition_t *part)
 		xfree(part_ptr->allow_groups);
 		part_ptr->allow_groups = xstrdup(part->allow_groups);
 	}
+ 	if (part->allow_alloc_nodes) {
+ 		if (part_ptr->allow_alloc_nodes) {
+ 			int cnt_tot, cnt_uniq, buf_size;
+ 			hostlist_t hl = hostlist_create(part_ptr->
+							allow_alloc_nodes);
+ 			
+ 			hostlist_push(hl, part->allow_alloc_nodes);
+ 			cnt_tot = hostlist_count(hl);
+ 			hostlist_uniq(hl);
+ 			cnt_uniq = hostlist_count(hl);
+ 			if (cnt_tot != cnt_uniq) {
+ 				fatal("Duplicate Allowed Allocating Nodes for "
+				      "Partition %s", part->name);
+ 			}
+ 			buf_size = strlen(part_ptr->allow_alloc_nodes) + 1 +
+				   strlen(part->allow_alloc_nodes) + 1;
+ 			xfree(part_ptr->allow_alloc_nodes);
+ 			part_ptr->allow_alloc_nodes = xmalloc(buf_size);
+ 			hostlist_ranged_string(hl, buf_size, 
+					       part_ptr->allow_alloc_nodes);
+ 			hostlist_destroy(hl);
+ 		} else {
+ 			part_ptr->allow_alloc_nodes = 
+					xstrdup(part->allow_alloc_nodes);
+ 		}
+ 	}
 	if (part->nodes) {
 		if (part_ptr->nodes) {
 			int cnt_tot, cnt_uniq, buf_size;
@@ -690,7 +700,8 @@ static int _build_all_partitionline_info()
 	slurm_conf_partition_t *part, **ptr_array;
 	int count;
 	int i;
-
+	ListIterator itr = NULL;
+			
 	count = slurm_conf_partition_array(&ptr_array);
 	if (count == 0)
 		fatal("No PartitionName information available!");
@@ -699,7 +710,22 @@ static int _build_all_partitionline_info()
 		part = ptr_array[i];
 
 		_build_single_partitionline_info(part);
+		if(part->priority > part_max_priority) 
+			part_max_priority = part->priority;
 	}
+
+	/* set up the normalized priority of the partitions */
+	if(part_max_priority) {
+		struct part_record *part_ptr = NULL;
+
+		itr = list_iterator_create(part_list);
+		while((part_ptr = list_next(itr))) {
+			part_ptr->norm_priority = (double)part_ptr->priority 
+				/ (double)part_max_priority;
+		}
+		list_iterator_destroy(itr);
+	}
+
 	return SLURM_SUCCESS;
 }
 
@@ -728,7 +754,7 @@ int read_slurm_conf(int recover)
 	char *old_select_type     = xstrdup(slurmctld_conf.select_type);
 	char *old_switch_type     = xstrdup(slurmctld_conf.switch_type);
 	char *state_save_dir      = xstrdup(slurmctld_conf.state_save_location);
-	slurm_ctl_conf_t *conf;
+	char *mpi_params;
 	select_type_plugin_info_t old_select_type_p = 
 		(select_type_plugin_info_t) slurmctld_conf.select_type_param;
 
@@ -763,17 +789,20 @@ int read_slurm_conf(int recover)
 		node_record_table_ptr = old_node_table_ptr;
 		return error_code;
 	}
-	conf = slurm_conf_lock();
-	_build_all_nodeline_info(conf);
-	slurm_conf_unlock();
+
+	if (slurm_topo_init() != SLURM_SUCCESS)
+		fatal("Failed to initialize topology plugin");
+
+	_build_all_nodeline_info();
 	_handle_all_downnodes();
 	_build_all_partitionline_info();
 
 	update_logging();
 	g_slurm_jobcomp_init(slurmctld_conf.job_comp_loc);
-	slurm_sched_init();
-	if (switch_init() < 0)
-		error("Failed to initialize switch plugin");
+	if (slurm_sched_init() != SLURM_SUCCESS)
+		fatal("Failed to initialize sched plugin");
+	if (switch_init() != SLURM_SUCCESS)
+		fatal("Failed to initialize switch plugin");
 
 	if (default_part_loc == NULL)
 		error("read_slurm_conf: default partition not set.");
@@ -803,6 +832,7 @@ int read_slurm_conf(int recover)
 						 old_node_record_count);
 			error_code = MAX(error_code, rc);  /* not fatal */
 		}
+		load_last_job_id();
 		reset_first_job_id();
 		(void) slurm_sched_reconfig();
 		xfree(state_save_dir);
@@ -810,10 +840,10 @@ int read_slurm_conf(int recover)
 
 	_build_bitmaps_pre_select();
 	if ((select_g_node_init(node_record_table_ptr, node_record_count)
-	     != SLURM_SUCCESS) 
-	    || (select_g_block_init(part_list) != SLURM_SUCCESS) 
-	    || (select_g_state_restore(state_save_dir) != SLURM_SUCCESS) 
-	    || (select_g_job_init(job_list) != SLURM_SUCCESS)) {
+	     != SLURM_SUCCESS)						||
+	    (select_g_block_init(part_list) != SLURM_SUCCESS)		||
+	    (select_g_state_restore(state_save_dir) != SLURM_SUCCESS)	||
+	    (select_g_job_init(job_list) != SLURM_SUCCESS)) {
 		fatal("failed to initialize node selection plugin state, "
 		      "Clean start required.");
 	}
@@ -826,6 +856,9 @@ int read_slurm_conf(int recover)
 
 	if ((rc = _build_bitmaps()))
 		fatal("_build_bitmaps failure");
+	mpi_params = slurm_get_mpi_params();
+	reserve_port_config(mpi_params);
+	xfree(mpi_params);
 
 	license_free();
 	if (license_init(slurmctld_conf.licenses) != SLURM_SUCCESS)
@@ -839,6 +872,7 @@ int read_slurm_conf(int recover)
 	(void) _sync_nodes_to_comp_job();/* must follow select_g_node_init() */
 	load_part_uid_allow_list(1);
 
+	load_all_resv_state(recover);
 	if (recover >= 1)
 		(void) trigger_state_restore();
 
@@ -862,6 +896,10 @@ int read_slurm_conf(int recover)
 	if (load_job_ret)
 		_acct_restore_active_jobs();
 
+#ifdef HAVE_CRAY_XT
+	basil_query();
+#endif
+
 	slurmctld_conf.last_update = time(NULL);
 	END_TIMER2("read_slurm_conf");
 	return error_code;
@@ -871,10 +909,17 @@ int read_slurm_conf(int recover)
 /* Restore node state and size information from saved records.
  * If a node was re-configured to be down or drained, we set those states */
 static int _restore_node_state(struct node_record *old_node_table_ptr, 
-				int old_node_record_count)
+			       int old_node_record_count)
 {
 	struct node_record *node_ptr;
 	int i, rc = SLURM_SUCCESS;
+	hostset_t hs = NULL;
+	slurm_ctl_conf_t *conf = slurm_conf_lock();
+	bool power_save_mode = false;
+
+	if (conf->suspend_program && conf->resume_program)
+		power_save_mode = true;
+	slurm_conf_unlock();
 
 	for (i = 0; i < old_node_record_count; i++) {
 		uint16_t drain_flag = false, down_flag = false;
@@ -882,7 +927,8 @@ static int _restore_node_state(struct node_record *old_node_table_ptr,
 		if (node_ptr == NULL)
 			continue;
 
-		if ((node_ptr->node_state & NODE_STATE_BASE) == NODE_STATE_DOWN)
+		if ((node_ptr->node_state & NODE_STATE_BASE) == 
+		    NODE_STATE_DOWN)
 			down_flag = true;
 		if (node_ptr->node_state & NODE_STATE_DRAIN)
 			drain_flag = true;
@@ -893,7 +939,15 @@ static int _restore_node_state(struct node_record *old_node_table_ptr,
 		}
 		if (drain_flag)
 			node_ptr->node_state |= NODE_STATE_DRAIN; 
-			
+		if ((node_ptr->node_state & NODE_STATE_POWER_SAVE) &&
+		    (!power_save_mode)) {
+			node_ptr->node_state &= (~NODE_STATE_POWER_SAVE);
+			if (hs)
+				hostset_insert(hs, node_ptr->name);
+			else
+				hs = hostset_create(node_ptr->name);
+		}
+
 		node_ptr->last_response = old_node_table_ptr[i].last_response;
 		if (old_node_table_ptr[i].port != node_ptr->config_ptr->cpus) {
 			rc = ESLURM_NEED_RESTART;
@@ -928,6 +982,13 @@ static int _restore_node_state(struct node_record *old_node_table_ptr,
 			old_node_table_ptr[i].os = NULL;
 		}
 	}
+
+	if (hs) {
+		char node_names[128];
+		hostset_ranged_string(hs, sizeof(node_names), node_names);
+		info("Cleared POWER_SAVE flag from nodes %s", node_names);
+		hostset_destroy(hs);
+	}
 	return rc;
 }
 
@@ -1094,6 +1155,7 @@ static int _sync_nodes_to_comp_job(void)
 			update_cnt++;
 			info("Killing job_id %u", job_ptr->job_id);
 			deallocate_nodes(job_ptr, false, false);
+			job_completion_logger(job_ptr);
 		}
 	}
 	list_iterator_destroy(job_iterator);
@@ -1111,11 +1173,10 @@ static int _sync_nodes_to_active_job(struct job_record *job_ptr)
 	uint16_t base_state, node_flags;
 	struct node_record *node_ptr = node_record_table_ptr;
 
-	job_ptr->node_cnt = 0;
+	job_ptr->node_cnt = bit_set_count(job_ptr->node_bitmap);
 	for (i = 0; i < node_record_count; i++, node_ptr++) {
 		if (bit_test(job_ptr->node_bitmap, i) == 0)
 			continue;
-		job_ptr->node_cnt++;
 
 		base_state = node_ptr->node_state & NODE_STATE_BASE;
 		node_flags = node_ptr->node_state & NODE_STATE_FLAGS;
@@ -1128,12 +1189,26 @@ static int _sync_nodes_to_active_job(struct job_record *job_ptr)
 		    (job_ptr->details) && (job_ptr->details->shared == 0))
 			node_ptr->no_share_job_cnt++;
 
-		if (base_state == NODE_STATE_DOWN) {
+		if ((base_state == NODE_STATE_DOWN)     &&
+		    (job_ptr->job_state == JOB_RUNNING) &&
+		    (job_ptr->kill_on_node_fail == 0)   &&
+		    (job_ptr->node_cnt > 1)) {
+			/* This should only happen if a job was running 
+			 * on a node that was newly configured DOWN */
+			info("Removing failed node %s from job_id %u",
+			     node_ptr->name, job_ptr->job_id);
+			srun_node_fail(job_ptr->job_id, node_ptr->name);
+			kill_step_on_node(job_ptr, node_ptr);
+			excise_node_from_job(job_ptr, node_ptr);
+		} else if (base_state == NODE_STATE_DOWN) {
 			time_t now = time(NULL);
+			info("Killing job %u on DOWN node %s",
+			     job_ptr->job_id, node_ptr->name);
 			job_ptr->job_state = JOB_NODE_FAIL | JOB_COMPLETING;
 			job_ptr->end_time = MIN(job_ptr->end_time, now);
 			job_ptr->exit_code = MAX(job_ptr->exit_code, 1);
 			job_ptr->state_reason = FAIL_DOWN_NODE;
+			xfree(job_ptr->state_desc);
 			job_completion_logger(job_ptr);
 			cnt++;
 		} else if ((base_state == NODE_STATE_UNKNOWN) || 
diff --git a/src/slurmctld/read_config.h b/src/slurmctld/read_config.h
index 2305565ae..8e96a6d50 100644
--- a/src/slurmctld/read_config.h
+++ b/src/slurmctld/read_config.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2003 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/reservation.c b/src/slurmctld/reservation.c
new file mode 100644
index 000000000..50ddc40b9
--- /dev/null
+++ b/src/slurmctld/reservation.c
@@ -0,0 +1,2560 @@
+/*****************************************************************************\
+ *  reservation.c - resource reservation management
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Morris Jette <jette1@llnl.gov> et. al.
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#ifdef WITH_PTHREADS
+#  include <pthread.h>
+#endif				/* WITH_PTHREADS */
+
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+#include <slurm/slurm.h>
+#include <slurm/slurm_errno.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "src/common/assoc_mgr.h"
+#include "src/common/bitstring.h"
+#include "src/common/hostlist.h"
+#include "src/common/list.h"
+#include "src/common/log.h"
+#include "src/common/macros.h"
+#include "src/common/pack.h"
+#include "src/common/parse_time.h"
+#include "src/common/uid.h"
+#include "src/common/xassert.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
+#include "src/common/slurm_accounting_storage.h"
+
+#include "src/slurmctld/locks.h"
+#include "src/slurmctld/slurmctld.h"
+#include "src/slurmctld/state_save.h"
+
+#define _RESV_DEBUG	0
+#define RESV_MAGIC	0x3b82
+
+/* Change RESV_STATE_VERSION value when changing the state save format
+ * Add logic to permit reading of the previous version's state in order
+ * to avoid losing reservations between releases major SLURM updates. */
+#define RESV_STATE_VERSION      "VER002"
+
+time_t    last_resv_update = (time_t) 0;
+List      resv_list = (List) NULL;
+uint32_t  resv_over_run;
+uint32_t  top_suffix = 0;
+
+static int  _build_account_list(char *accounts, int *account_cnt, 
+			        char ***account_list);
+static int  _build_uid_list(char *users, int *user_cnt, uid_t **user_list);
+static void _clear_job_resv(slurmctld_resv_t *resv_ptr);
+static slurmctld_resv_t *_copy_resv(slurmctld_resv_t *resv_orig_ptr);
+static void _del_resv_rec(void *x);
+static void _dump_resv_req(resv_desc_msg_t *resv_ptr, char *mode);
+static int  _find_resv_id(void *x, void *key);
+static int  _find_resv_name(void *x, void *key);
+static void _generate_resv_id(void);
+static void _generate_resv_name(resv_desc_msg_t *resv_ptr);
+static bool _is_account_valid(char *account);
+static bool _is_resv_used(slurmctld_resv_t *resv_ptr);
+static void _pack_resv(slurmctld_resv_t *resv_ptr, Buf buffer,
+		       bool internal);
+static int  _post_resv_create(slurmctld_resv_t *resv_ptr);
+static int  _post_resv_delete(slurmctld_resv_t *resv_ptr);
+static int  _post_resv_update(slurmctld_resv_t *resv_ptr,
+			      slurmctld_resv_t *old_resv_ptr);
+static bitstr_t *_pick_idle_nodes(bitstr_t *avail_nodes, 
+				  resv_desc_msg_t *resv_desc_ptr);
+static int  _resize_resv(slurmctld_resv_t *resv_ptr, uint32_t node_cnt);
+static bool _resv_overlap(time_t start_time, time_t end_time, 
+			  uint16_t flags, bitstr_t *node_bitmap,
+			  slurmctld_resv_t *this_resv_ptr);
+static int  _select_nodes(resv_desc_msg_t *resv_desc_ptr, 
+			  struct part_record **part_ptr,
+			  bitstr_t **resv_bitmap);
+static int  _set_assoc_list(slurmctld_resv_t *resv_ptr);
+static void _set_cpu_cnt(slurmctld_resv_t *resv_ptr);
+static void _set_nodes_maint(slurmctld_resv_t *resv_ptr, time_t now);
+static void _swap_resv(slurmctld_resv_t *resv_backup, 
+		       slurmctld_resv_t *resv_ptr);
+static int  _update_account_list(slurmctld_resv_t *resv_ptr, 
+				 char *accounts);
+static int  _update_uid_list(slurmctld_resv_t *resv_ptr, char *users);
+static void _validate_all_reservations(void);
+static int  _valid_job_access_resv(struct job_record *job_ptr,
+				   slurmctld_resv_t *resv_ptr);
+static bool _validate_one_reservation(slurmctld_resv_t *resv_ptr);
+static void _validate_node_choice(slurmctld_resv_t *resv_ptr);
+
+static slurmctld_resv_t *_copy_resv(slurmctld_resv_t *resv_orig_ptr)
+{
+	slurmctld_resv_t *resv_copy_ptr;
+	int i;
+
+	xassert(resv_orig_ptr->magic == RESV_MAGIC);
+	resv_copy_ptr = xmalloc(sizeof(slurmctld_resv_t));
+	resv_copy_ptr->accounts = xstrdup(resv_orig_ptr->accounts);
+	resv_copy_ptr->account_cnt = resv_orig_ptr->account_cnt;
+	resv_copy_ptr->account_list = xmalloc(sizeof(char *) * 
+					      resv_orig_ptr->account_cnt);
+	for (i=0; i<resv_copy_ptr->account_cnt; i++) {
+		resv_copy_ptr->account_list[i] = 
+				xstrdup(resv_orig_ptr->account_list[i]);
+	}
+	resv_copy_ptr->assoc_list = xstrdup(resv_orig_ptr->assoc_list);
+	resv_copy_ptr->cpu_cnt = resv_orig_ptr->cpu_cnt;
+	resv_copy_ptr->end_time = resv_orig_ptr->end_time;
+	resv_copy_ptr->features = xstrdup(resv_orig_ptr->features);
+	resv_copy_ptr->flags = resv_orig_ptr->flags;
+	resv_copy_ptr->job_pend_cnt = resv_orig_ptr->job_pend_cnt;
+	resv_copy_ptr->job_run_cnt = resv_orig_ptr->job_run_cnt;
+	resv_copy_ptr->magic = resv_orig_ptr->magic;
+	resv_copy_ptr->name = xstrdup(resv_orig_ptr->name);
+	resv_copy_ptr->node_bitmap = bit_copy(resv_orig_ptr->node_bitmap);
+	resv_copy_ptr->node_cnt = resv_orig_ptr->node_cnt;
+	resv_copy_ptr->node_list = xstrdup(resv_orig_ptr->node_list);
+	resv_copy_ptr->partition = xstrdup(resv_orig_ptr->partition);
+	resv_copy_ptr->part_ptr = resv_orig_ptr->part_ptr;
+	resv_copy_ptr->resv_id = resv_orig_ptr->resv_id;
+	resv_copy_ptr->start_time = resv_orig_ptr->start_time;
+	resv_copy_ptr->start_time_first = resv_orig_ptr->start_time_first;
+	resv_copy_ptr->start_time_prev = resv_orig_ptr->start_time_prev;
+	resv_copy_ptr->users = xstrdup(resv_orig_ptr->users);
+	resv_copy_ptr->user_cnt = resv_orig_ptr->user_cnt;
+	resv_copy_ptr->user_list = xmalloc(sizeof(uid_t) * 
+					   resv_orig_ptr->user_cnt);
+	for (i=0; i<resv_copy_ptr->user_cnt; i++)
+		resv_copy_ptr->user_list[i] = resv_orig_ptr->user_list[i];
+
+	return resv_copy_ptr;
+}
+
+/* Swaping the contents of two reservation records */
+static void _swap_resv(slurmctld_resv_t *resv_backup, 
+		       slurmctld_resv_t *resv_ptr)
+{
+	resv_desc_msg_t *resv_copy_ptr;
+
+	xassert(resv_backup->magic == RESV_MAGIC);
+	xassert(resv_ptr->magic    == RESV_MAGIC);
+	resv_copy_ptr = xmalloc(sizeof(slurmctld_resv_t));
+	memcpy(resv_copy_ptr, resv_backup, sizeof(slurmctld_resv_t));
+	memcpy(resv_backup, resv_ptr, sizeof(slurmctld_resv_t));
+	memcpy(resv_ptr, resv_copy_ptr, sizeof(slurmctld_resv_t));
+	xfree(resv_copy_ptr);
+}
+
+static void _del_resv_rec(void *x)
+{
+	int i;
+	slurmctld_resv_t *resv_ptr = (slurmctld_resv_t *) x;
+
+	if (resv_ptr) {
+		xassert(resv_ptr->magic == RESV_MAGIC);
+		resv_ptr->magic = 0;
+		xfree(resv_ptr->accounts);
+		for (i=0; i<resv_ptr->account_cnt; i++)
+			xfree(resv_ptr->account_list[i]);
+		xfree(resv_ptr->account_list);
+		xfree(resv_ptr->assoc_list);
+		xfree(resv_ptr->features);
+		xfree(resv_ptr->name);
+		if (resv_ptr->node_bitmap)
+			bit_free(resv_ptr->node_bitmap);
+		xfree(resv_ptr->node_list);
+		xfree(resv_ptr->partition);
+		xfree(resv_ptr->users);
+		xfree(resv_ptr->user_list);
+		xfree(resv_ptr);
+	}
+}
+
+static int _find_resv_id(void *x, void *key)
+{
+	slurmctld_resv_t *resv_ptr = (slurmctld_resv_t *) x;
+	uint32_t *resv_id = (uint32_t *) key;
+
+	xassert(resv_ptr->magic == RESV_MAGIC);
+
+	if (resv_ptr->resv_id != *resv_id)
+		return 0;
+	else
+		return 1;	/* match */
+}
+
+static int _find_resv_name(void *x, void *key)
+{
+	slurmctld_resv_t *resv_ptr = (slurmctld_resv_t *) x;
+
+	xassert(resv_ptr->magic == RESV_MAGIC);
+
+	if (strcmp(resv_ptr->name, (char *) key))
+		return 0;
+	else
+		return 1;	/* match */
+}
+
+static void _dump_resv_req(resv_desc_msg_t *resv_ptr, char *mode)
+{
+	
+#if _RESV_DEBUG
+	char start_str[32] = "-1", end_str[32] = "-1", *flag_str = NULL;
+	int duration;
+
+	if (resv_ptr->start_time != (time_t) NO_VAL) {
+		slurm_make_time_str(&resv_ptr->start_time,
+				    start_str, sizeof(start_str));
+	}
+	if (resv_ptr->end_time != (time_t) NO_VAL) {
+		slurm_make_time_str(&resv_ptr->end_time, 
+				    end_str,  sizeof(end_str));
+	}
+	if (resv_ptr->flags != (uint16_t) NO_VAL)
+		flag_str = reservation_flags_string(resv_ptr->flags);
+
+	if (resv_ptr->duration == NO_VAL)
+		duration = -1;
+	else
+		duration = resv_ptr->duration;
+
+	info("%s: Name=%s StartTime=%s EndTime=%s Duration=%d "
+	     "Flags=%s NodeCnt=%d NodeList=%s Features=%s "
+	     "PartitionName=%s Users=%s Accounts=%s",
+	     mode, resv_ptr->name, start_str, end_str, duration,
+	     flag_str, resv_ptr->node_cnt, resv_ptr->node_list, 
+	     resv_ptr->features, resv_ptr->partition, 
+	     resv_ptr->users, resv_ptr->accounts);
+
+	xfree(flag_str);
+#endif
+}
+
+static void _generate_resv_id(void)
+{
+	while (1) {
+		if (top_suffix >= 9999)
+			top_suffix = 1;		/* wrap around */
+		else
+			top_suffix++;
+		if (!list_find_first(resv_list, _find_resv_id, &top_suffix))
+			break;
+	}
+}
+
+static void _generate_resv_name(resv_desc_msg_t *resv_ptr)
+{
+	char *key, *name, *sep;
+	int len;
+
+	/* Generate name prefix, based upon the first account
+	 * name if provided otherwise first user name */
+	if (resv_ptr->accounts && resv_ptr->accounts[0])
+		key = resv_ptr->accounts;
+	else
+		key = resv_ptr->users;
+	sep = strchr(key, ',');
+	if (sep)
+		len = sep - key;
+	else
+		len = strlen(key);
+	name = xmalloc(len + 16);
+	strncpy(name, key, len);
+
+	xstrfmtcat(name, "_%d", top_suffix);
+	len++;
+
+	resv_ptr->name = name;
+}
+
+/* Validate an account name */
+static bool _is_account_valid(char *account)
+{
+	acct_association_rec_t assoc_rec, *assoc_ptr;
+
+	if (!(accounting_enforce & ACCOUNTING_ENFORCE_ASSOCS))
+		return true;	/* don't worry about account validity */
+
+	memset(&assoc_rec, 0, sizeof(acct_association_rec_t));
+	assoc_rec.uid       = NO_VAL;
+	assoc_rec.acct      = account;
+
+	if (assoc_mgr_fill_in_assoc(acct_db_conn, &assoc_rec,
+				    accounting_enforce, &assoc_ptr)) {
+		return false;
+	}
+	return true;
+}
+
+static int _append_assoc_list(List assoc_list, acct_association_rec_t *assoc)
+{
+	int rc = ESLURM_INVALID_BANK_ACCOUNT;
+	acct_association_rec_t *assoc_ptr = NULL;
+	if (assoc_mgr_fill_in_assoc(
+		    acct_db_conn, assoc,
+		    accounting_enforce, 
+		    &assoc_ptr)) {
+		if(accounting_enforce & ACCOUNTING_ENFORCE_ASSOCS) {
+			error("No association for user %u and account %s",
+			      assoc->uid, assoc->acct);
+		} else {
+			verbose("No association for user %u and account %s",
+				assoc->uid, assoc->acct);
+			rc = SLURM_SUCCESS;
+		}
+		
+	} 
+	if(assoc_ptr) {
+		list_append(assoc_list, assoc_ptr);
+		rc = SLURM_SUCCESS;
+	}
+
+	return rc;
+}
+/* Set a association list based upon accounts and users */
+static int _set_assoc_list(slurmctld_resv_t *resv_ptr)
+{
+	int rc = SLURM_SUCCESS, i = 0, j = 0;
+	List assoc_list = NULL;
+	acct_association_rec_t assoc, *assoc_ptr = NULL;
+
+	/* no need to do this if we can't ;) */
+	if(!association_based_accounting)
+		return rc;
+
+	assoc_list = list_create(NULL);
+
+	memset(&assoc, 0, sizeof(acct_association_rec_t));
+
+	if(resv_ptr->user_cnt) {
+		for(i=0; i < resv_ptr->user_cnt; i++) {
+			if(resv_ptr->account_cnt) {
+				for(j=0; j < resv_ptr->account_cnt; j++) {
+					memset(&assoc, 0, 
+					       sizeof(acct_association_rec_t));
+					assoc.uid = resv_ptr->user_list[i];
+					assoc.acct = resv_ptr->account_list[j];
+					if((rc = _append_assoc_list(
+						    assoc_list, &assoc))
+					   != SLURM_SUCCESS) {
+						goto end_it;
+					}
+				}	
+			} else {
+				memset(&assoc, 0, 
+				       sizeof(acct_association_rec_t));
+				assoc.uid = resv_ptr->user_list[i];
+				if((rc = assoc_mgr_get_user_assocs(
+					    acct_db_conn, &assoc,
+					    accounting_enforce, assoc_list))
+				   != SLURM_SUCCESS) {
+					rc = ESLURM_INVALID_BANK_ACCOUNT;
+					goto end_it;
+				}
+			}
+		}
+	} else if(resv_ptr->account_cnt) {
+		for(i=0; i < resv_ptr->account_cnt; i++) {
+			memset(&assoc, 0, 
+			       sizeof(acct_association_rec_t));
+			assoc.uid = (uint32_t)NO_VAL;
+			assoc.acct = resv_ptr->account_list[j];
+			if((rc = _append_assoc_list(assoc_list, &assoc))
+			   != SLURM_SUCCESS) {
+				goto end_it;
+			}
+		}	
+	} else if(accounting_enforce & ACCOUNTING_ENFORCE_ASSOCS) {
+		error("We need at least 1 user or 1 account to "
+		      "create a reservtion.");
+		rc = SLURM_ERROR;
+	}
+	
+	if(list_count(assoc_list)) {
+		ListIterator itr = list_iterator_create(assoc_list);
+		xfree(resv_ptr->assoc_list);	/* clear for modify */
+		while((assoc_ptr = list_next(itr))) {
+			if(resv_ptr->assoc_list)
+				xstrfmtcat(resv_ptr->assoc_list, ",%u", 
+					   assoc_ptr->id);
+			else
+				xstrfmtcat(resv_ptr->assoc_list, "%u",
+					   assoc_ptr->id);
+		}
+		list_iterator_destroy(itr);
+	}
+
+end_it:
+	list_destroy(assoc_list);
+	return rc;
+}
+
+/* Post reservation create */
+static int _post_resv_create(slurmctld_resv_t *resv_ptr)
+{
+	int rc = SLURM_SUCCESS;
+	acct_reservation_rec_t resv;
+	char temp_bit[BUF_SIZE];
+
+	memset(&resv, 0, sizeof(acct_reservation_rec_t));
+	
+	resv.assocs = resv_ptr->assoc_list;
+	resv.cluster = slurmctld_cluster_name;
+	resv.cpus = resv_ptr->cpu_cnt;
+	resv.flags = resv_ptr->flags;
+	resv.id = resv_ptr->resv_id;
+	resv.name = resv_ptr->name;
+	resv.nodes = resv_ptr->node_list;
+	if(resv_ptr->node_bitmap) 
+		resv.node_inx = bit_fmt(temp_bit, sizeof(temp_bit), 
+					resv_ptr->node_bitmap);
+
+	resv.time_end = resv_ptr->end_time;
+	resv.time_start = resv_ptr->start_time;
+
+	rc = acct_storage_g_add_reservation(acct_db_conn, &resv);
+
+	return rc;
+}
+
+/* Note that a reservation has been deleted */
+static int _post_resv_delete(slurmctld_resv_t *resv_ptr)
+{
+	int rc = SLURM_SUCCESS;
+	acct_reservation_rec_t resv;
+	memset(&resv, 0, sizeof(acct_reservation_rec_t));
+
+	resv.cluster = slurmctld_cluster_name;
+	resv.id = resv_ptr->resv_id;
+	resv.name = resv_ptr->name;
+	resv.time_start = resv_ptr->start_time;
+	/* This is just a time stamp here to delete if the reservation
+	 * hasn't started yet so we don't get trash records in the
+	 * database if said database isn't up right now */
+	resv.time_start_prev = time(NULL);
+	rc = acct_storage_g_remove_reservation(acct_db_conn, &resv);
+	
+	return rc;
+}
+
+/* Note that a reservation has been updated */
+static int _post_resv_update(slurmctld_resv_t *resv_ptr,
+			     slurmctld_resv_t *old_resv_ptr)
+{
+	int rc = SLURM_SUCCESS;
+	acct_reservation_rec_t resv;
+	char temp_bit[BUF_SIZE];
+
+	memset(&resv, 0, sizeof(acct_reservation_rec_t));
+	
+	resv.cluster = slurmctld_cluster_name;
+	resv.id = resv_ptr->resv_id;
+	resv.time_end = resv_ptr->end_time;
+	
+	if(!old_resv_ptr) {
+		resv.assocs = resv_ptr->assoc_list;
+		resv.cpus = resv_ptr->cpu_cnt;
+		resv.flags = resv_ptr->flags;
+		resv.nodes = resv_ptr->node_list;
+	} else {
+		time_t now = time(NULL);
+		
+		if(old_resv_ptr->assoc_list && resv_ptr->assoc_list) {
+			if(strcmp(old_resv_ptr->assoc_list,
+				  resv_ptr->assoc_list)) 
+				resv.assocs = resv_ptr->assoc_list;
+		} else if(resv_ptr->assoc_list) 
+			resv.assocs = resv_ptr->assoc_list;
+
+		if(old_resv_ptr->cpu_cnt != resv_ptr->cpu_cnt) 
+			resv.cpus = resv_ptr->cpu_cnt;
+		else 
+			resv.cpus = (uint32_t)NO_VAL;
+
+		if(old_resv_ptr->flags != resv_ptr->flags) 
+			resv.flags = resv_ptr->flags;
+		else 
+			resv.flags = (uint16_t)NO_VAL;
+
+		if(old_resv_ptr->node_list && resv_ptr->node_list) {
+			if(strcmp(old_resv_ptr->node_list,
+				  resv_ptr->node_list)) 
+				resv.nodes = resv_ptr->node_list;
+		} else if(resv_ptr->node_list) 
+			resv.nodes = resv_ptr->node_list;
+		
+		/* Here if the reservation has started already we need
+		   to mark a new start time for it if certain
+		   variables are needed in accounting.  Right now if
+		   the assocs, nodes, flags or cpu count changes we need a
+		   new start time of now. */
+		if((resv_ptr->start_time < now)
+		   && (resv.assocs
+		       || resv.nodes 
+		       || (resv.flags != (uint16_t)NO_VAL)
+		       || (resv.cpus != (uint32_t)NO_VAL))) {
+			resv_ptr->start_time_prev = resv_ptr->start_time;
+			resv_ptr->start_time = now;
+		}
+	}
+	/* now set the (maybe new) start_times */
+	resv.time_start = resv_ptr->start_time;
+	resv.time_start_prev = resv_ptr->start_time_prev;
+
+	if(resv.nodes && resv_ptr->node_bitmap) 
+		resv.node_inx = bit_fmt(temp_bit, sizeof(temp_bit),
+					resv_ptr->node_bitmap);
+
+	rc = acct_storage_g_modify_reservation(acct_db_conn, &resv);
+
+	return rc;
+}
+
+/*
+ * Validate a comma delimited list of account names and build an array of
+ *	them
+ * IN account       - a list of account names
+ * OUT account_cnt  - number of accounts in the list
+ * OUT account_list - list of the account names, 
+ *		      CALLER MUST XFREE this plus each individual record
+ * RETURN 0 on success
+ */
+static int _build_account_list(char *accounts, int *account_cnt, 
+			       char ***account_list)
+{
+	char *last = NULL, *tmp, *tok;
+	int ac_cnt = 0, i;
+	char **ac_list;
+
+	*account_cnt = 0;
+	*account_list = (char **) NULL;
+
+	if (!accounts)
+		return ESLURM_INVALID_BANK_ACCOUNT;
+
+	i = strlen(accounts);
+	ac_list = xmalloc(sizeof(char *) * (i + 2));
+	tmp = xstrdup(accounts);
+	tok = strtok_r(tmp, ",", &last);
+	while (tok) {
+		if (!_is_account_valid(tok)) {
+			info("Reservation request has invalid account %s", 
+			     tok);
+			goto inval;
+		}
+		ac_list[ac_cnt++] = xstrdup(tok);
+		tok = strtok_r(NULL, ",", &last);
+	}
+	*account_cnt  = ac_cnt;
+	*account_list = ac_list;
+	xfree(tmp);
+	return SLURM_SUCCESS;
+
+ inval:	for (i=0; i<ac_cnt; i++)
+		xfree(ac_list[i]);
+	xfree(ac_list);
+	xfree(tmp);
+	return ESLURM_INVALID_BANK_ACCOUNT;
+}
+
+/*
+ * Update a account list for an existing reservation based upon an 
+ *	update comma delimited specification of accounts to add (+name), 
+ *	remove (-name), or set value of
+ * IN/OUT resv_ptr - pointer to reservation structure being updated
+ * IN accounts     - a list of account names, to set, add, or remove
+ * RETURN 0 on success
+ */
+static int  _update_account_list(slurmctld_resv_t *resv_ptr, 
+				 char *accounts)
+{
+	char *last = NULL, *ac_cpy, *tok;
+	int ac_cnt = 0, i, j, k;
+	int *ac_type, minus_account = 0, plus_account = 0;
+	char **ac_list;
+	bool found_it;
+
+	if (!accounts)
+		return ESLURM_INVALID_BANK_ACCOUNT;
+
+	i = strlen(accounts);
+	ac_list = xmalloc(sizeof(char *) * (i + 2));
+	ac_type = xmalloc(sizeof(int)    * (i + 2));
+	ac_cpy = xstrdup(accounts);
+	tok = strtok_r(ac_cpy, ",", &last);
+	while (tok) {
+		if (tok[0] == '-') {
+			ac_type[ac_cnt] = 1;	/* minus */
+			minus_account = 1;
+			tok++;
+		} else if (tok[0] == '+') {
+			ac_type[ac_cnt] = 2;	/* plus */
+			plus_account = 1;
+			tok++;
+		} else if (tok[0] == '\0') {
+			continue;
+		} else if (plus_account || minus_account) {
+			info("Reservation account expression invalid %s", 
+			     accounts);
+			goto inval;
+		} else
+			ac_type[ac_cnt] = 3;	/* set */
+		if (!_is_account_valid(tok)) {
+			info("Reservation request has invalid account %s", 
+			     tok);
+			goto inval;
+		}
+		ac_list[ac_cnt++] = xstrdup(tok);
+		tok = strtok_r(NULL, ",", &last);
+	}
+
+	if ((plus_account == 0) && (minus_account == 0)) {
+		/* Just a reset of account list */
+		xfree(resv_ptr->accounts);
+		if (accounts[0] != '\0')
+			resv_ptr->accounts = xstrdup(accounts);
+		xfree(resv_ptr->account_list);
+		resv_ptr->account_list = ac_list;
+		resv_ptr->account_cnt = ac_cnt;
+		xfree(ac_cpy);
+		xfree(ac_type);
+		return SLURM_SUCCESS;
+	}
+
+	/* Modification of existing account list */
+	if (minus_account) {
+		if (resv_ptr->account_cnt == 0)
+			goto inval;
+		for (i=0; i<ac_cnt; i++) {
+			if (ac_type[i] != 1)
+				continue;
+			found_it = false;
+			for (j=0; j<resv_ptr->account_cnt; j++) {
+				if (strcmp(resv_ptr->account_list[j], 
+					   ac_list[i])) {
+					continue;
+				}
+				found_it = true;
+				xfree(resv_ptr->account_list[j]);
+				resv_ptr->account_cnt--;
+				for (k=j; k<resv_ptr->account_cnt; k++) {
+					resv_ptr->account_list[k] =
+						resv_ptr->account_list[k+1];
+				}
+				break;
+			}
+			if (!found_it)
+				goto inval;
+		}
+		xfree(resv_ptr->accounts);
+		for (i=0; i<resv_ptr->account_cnt; i++) {
+			if (i == 0) {
+				resv_ptr->accounts = xstrdup(resv_ptr->
+							     account_list[i]);
+			} else {
+				xstrcat(resv_ptr->accounts, ",");
+				xstrcat(resv_ptr->accounts,
+					resv_ptr->account_list[i]);
+			}
+		}
+	}
+
+	if (plus_account) {
+		for (i=0; i<ac_cnt; i++) {
+			if (ac_type[i] != 2)
+				continue;
+			found_it = false;
+			for (j=0; j<resv_ptr->account_cnt; j++) {
+				if (strcmp(resv_ptr->account_list[j], 
+					   ac_list[i])) {
+					continue;
+				}
+				found_it = true;
+				break;
+			}
+			if (found_it)
+				continue;	/* duplicate entry */
+			xrealloc(resv_ptr->account_list, 
+				 sizeof(char *) * (resv_ptr->account_cnt + 1));
+			resv_ptr->account_list[resv_ptr->account_cnt++] =
+					xstrdup(ac_list[i]);
+		}
+		xfree(resv_ptr->accounts);
+		for (i=0; i<resv_ptr->account_cnt; i++) {
+			if (i == 0) {
+				resv_ptr->accounts = xstrdup(resv_ptr->
+							     account_list[i]);
+			} else {
+				xstrcat(resv_ptr->accounts, ",");
+				xstrcat(resv_ptr->accounts,
+					resv_ptr->account_list[i]);
+			}
+		}
+	}
+	for (i=0; i<ac_cnt; i++)
+		xfree(ac_list[i]);
+	xfree(ac_list);
+	xfree(ac_type);
+	xfree(ac_cpy);
+	return SLURM_SUCCESS;
+
+ inval:	for (i=0; i<ac_cnt; i++)
+		xfree(ac_list[i]);
+	xfree(ac_list);
+	xfree(ac_type);
+	xfree(ac_cpy);
+	return ESLURM_INVALID_BANK_ACCOUNT;
+}
+
+/*
+ * Validate a comma delimited list of user names and build an array of
+ *	their UIDs
+ * IN users      - a list of user names
+ * OUT user_cnt  - number of UIDs in the list
+ * OUT user_list - list of the user's uid, CALLER MUST XFREE;
+ * RETURN 0 on success
+ */
+static int _build_uid_list(char *users, int *user_cnt, uid_t **user_list)
+{
+	char *last = NULL, *tmp = NULL, *tok;
+	int u_cnt = 0, i;
+	uid_t *u_list, u_tmp;
+
+	*user_cnt = 0;
+	*user_list = (uid_t *) NULL;
+
+	if (!users)
+		return ESLURM_USER_ID_MISSING;
+
+	i = strlen(users);
+	u_list = xmalloc(sizeof(uid_t) * (i + 2));
+	tmp = xstrdup(users);
+	tok = strtok_r(tmp, ",", &last);
+	while (tok) {
+		u_tmp = uid_from_string(tok);
+		if (u_tmp == (uid_t) -1) {
+			info("Reservation request has invalid user %s", tok);
+			goto inval;
+		}
+		u_list[u_cnt++] = u_tmp;
+		tok = strtok_r(NULL, ",", &last);
+	}
+	*user_cnt  = u_cnt;
+	*user_list = u_list;
+	xfree(tmp);
+	return SLURM_SUCCESS;
+
+ inval:	xfree(tmp);
+	xfree(u_list);
+	return ESLURM_USER_ID_MISSING;
+}
+
+/*
+ * Update a user/uid list for an existing reservation based upon an 
+ *	update comma delimited specification of users to add (+name), 
+ *	remove (-name), or set value of
+ * IN/OUT resv_ptr - pointer to reservation structure being updated
+ * IN users        - a list of user names, to set, add, or remove
+ * RETURN 0 on success
+ */
+static int _update_uid_list(slurmctld_resv_t *resv_ptr, char *users)
+{
+	char *last = NULL, *u_cpy = NULL, *tmp = NULL, *tok;
+	int u_cnt = 0, i, j, k;
+	uid_t *u_list, u_tmp;
+	int *u_type, minus_user = 0, plus_user = 0;
+	char **u_name;
+	bool found_it;
+
+	if (!users)
+		return ESLURM_USER_ID_MISSING;
+
+	/* Parse the incoming user expression */
+	i = strlen(users);
+	u_list = xmalloc(sizeof(uid_t)  * (i + 2));
+	u_name = xmalloc(sizeof(char *) * (i + 2));
+	u_type = xmalloc(sizeof(int)    * (i + 2));
+	u_cpy = xstrdup(users);
+	tok = strtok_r(u_cpy, ",", &last);
+	while (tok) {
+		if (tok[0] == '-') {
+			u_type[u_cnt] = 1;	/* minus */
+			minus_user = 1;
+			tok++;
+		} else if (tok[0] == '+') {
+			u_type[u_cnt] = 2;	/* plus */
+			plus_user = 1;
+			tok++;
+		} else if (tok[0] == '\0') {
+			continue;
+		} else if (plus_user || minus_user) {
+			info("Reservation user expression invalid %s", users);
+			goto inval;
+		} else
+			u_type[u_cnt] = 3;	/* set */
+		u_tmp = uid_from_string(tok);
+		if (u_tmp == (uid_t) -1) {
+			info("Reservation request has invalid user %s", tok);
+			goto inval;
+		}
+		u_name[u_cnt] = tok;
+		u_list[u_cnt++] = u_tmp;
+		tok = strtok_r(NULL, ",", &last);
+	}
+
+	if ((plus_user == 0) && (minus_user == 0)) {
+		/* Just a reset of user list */
+		xfree(resv_ptr->users);
+		xfree(resv_ptr->user_list);
+		if (users[0] != '\0')
+			resv_ptr->users = xstrdup(users);
+		resv_ptr->user_cnt  = u_cnt;
+		resv_ptr->user_list = u_list;
+		xfree(u_cpy);
+		xfree(u_name);
+		xfree(u_type);
+		return SLURM_SUCCESS;
+	}
+	
+	/* Modification of existing user list */
+	if (minus_user) {
+		for (i=0; i<u_cnt; i++) {
+			if (u_type[i] != 1)
+				continue;
+			found_it = false;
+			for (j=0; j<resv_ptr->user_cnt; j++) {
+				if (resv_ptr->user_list[j] != u_list[i])
+					continue;
+				found_it = true;
+				resv_ptr->user_cnt--;
+				for (k=j; k<resv_ptr->user_cnt; k++) {
+					resv_ptr->user_list[k] =
+						resv_ptr->user_list[k+1];
+				}
+				break;
+			}
+			if (!found_it)
+				goto inval;
+			/* Now we need to remove from users string */
+			k = strlen(u_name[i]);
+			tmp = resv_ptr->users;
+			while ((tok = strstr(tmp, u_name[i]))) {
+				if (((tok != resv_ptr->users) &&
+				     (tok[-1] != ',')) ||
+				    ((tok[k] != '\0') && (tok[k] != ','))) {
+					tmp = tok + 1;
+					continue;
+				}
+				if (tok[-1] == ',') {
+					tok--;
+					k++;
+				} else if (tok[k] == ',')
+					k++;
+				for (j=0; ; j++) {
+					tok[j] = tok[j+k];
+					if (tok[j] == '\0')
+						break;
+				}
+			}
+		}
+	}
+
+	if (plus_user) {
+		for (i=0; i<u_cnt; i++) {
+			if (u_type[i] != 2)
+				continue;
+			found_it = false;
+			for (j=0; j<resv_ptr->user_cnt; j++) {
+				if (resv_ptr->user_list[j] != u_list[i])
+					continue;
+				found_it = true;
+				break;
+			}
+			if (found_it)
+				continue;	/* duplicate entry */
+			if (resv_ptr->users && resv_ptr->users[0])
+				xstrcat(resv_ptr->users, ",");
+			xstrcat(resv_ptr->users, u_name[i]);
+			xrealloc(resv_ptr->user_list, 
+				 sizeof(uid_t) * (resv_ptr->user_cnt + 1));
+			resv_ptr->user_list[resv_ptr->user_cnt++] =
+				u_list[i];
+		}
+	}
+	xfree(u_cpy);
+	xfree(u_list);
+	xfree(u_name);
+	xfree(u_type);
+	return SLURM_SUCCESS;
+
+ inval:	xfree(u_cpy);
+	xfree(u_list);
+	xfree(u_name);
+	xfree(u_type);
+	return ESLURM_USER_ID_MISSING;
+}
+
+/* 
+ * _pack_resv - dump configuration information about a specific reservation
+ *	in machine independent form (for network transmission or state save)
+ * IN resv_ptr - pointer to reservation for which information is requested
+ * IN/OUT buffer - buffer in which data is placed, pointers automatically 
+ *	updated
+ * IN internal   - true if for internal save state, false for xmit to users
+ * NOTE: if you make any changes here be sure to make the corresponding 
+ *	to _unpack_reserve_info_members() in common/slurm_protocol_pack.c
+ *	plus load_all_resv_state() below.
+ */
+static void _pack_resv(slurmctld_resv_t *resv_ptr, Buf buffer, 
+		       bool internal)
+{
+	packstr(resv_ptr->accounts,	buffer);
+	pack_time(resv_ptr->end_time,	buffer);
+	packstr(resv_ptr->features,	buffer);
+	packstr(resv_ptr->name,		buffer);
+	pack32(resv_ptr->node_cnt,	buffer);
+	packstr(resv_ptr->node_list,	buffer);
+	packstr(resv_ptr->partition,	buffer);
+	pack_time(resv_ptr->start_time_first,	buffer);
+	pack16(resv_ptr->flags,		buffer);
+	packstr(resv_ptr->users,	buffer);
+
+	if (internal) {
+		packstr(resv_ptr->assoc_list,	buffer);
+		pack32(resv_ptr->cpu_cnt,	buffer);
+		pack32(resv_ptr->resv_id,	buffer);
+		pack_time(resv_ptr->start_time_prev,	buffer);
+		pack_time(resv_ptr->start_time,	buffer);
+		pack32(resv_ptr->duration,	buffer);
+	} else {
+		pack_bit_fmt(resv_ptr->node_bitmap, buffer);
+	}
+}
+
+/*
+ * Test if a new/updated reservation request overlaps an existing
+ *	reservation
+ * RET true if overlap
+ */
+static bool _resv_overlap(time_t start_time, time_t end_time, 
+			  uint16_t flags, bitstr_t *node_bitmap,
+			  slurmctld_resv_t *this_resv_ptr)
+{
+	ListIterator iter;
+	slurmctld_resv_t *resv_ptr;
+	bool rc = false;
+	uint32_t delta_t, i, j;
+	time_t s_time1, s_time2, e_time1, e_time2;
+
+	if ((!node_bitmap) || (flags & RESERVE_FLAG_MAINT))
+		return rc;
+
+	iter = list_iterator_create(resv_list);
+	if (!iter)
+		fatal("malloc: list_iterator_create");
+
+	while ((resv_ptr = (slurmctld_resv_t *) list_next(iter))) {
+		if (resv_ptr == this_resv_ptr)
+			continue;	/* skip self */
+		if (resv_ptr->node_bitmap == NULL)
+			continue;	/* no specific nodes in reservation */
+		if (!bit_overlap(resv_ptr->node_bitmap, node_bitmap))
+			continue;	/* no overlap */
+
+		for (i=0; ((i<7) && (!rc)); i++) {  /* look forward one week */
+			delta_t = i * (24 * 60 * 60);
+			s_time1 = start_time + delta_t;
+			e_time1 = end_time   + delta_t;
+			for (j=0; ((j<7) && (!rc)); j++) {
+				delta_t = j * (24 * 60 * 60);
+				s_time2 = resv_ptr->start_time + delta_t;
+				e_time2 = resv_ptr->end_time   + delta_t;
+				if ((s_time1 < e_time2) &&
+				    (e_time1 > s_time2)) {
+					verbose("Reservation overlap with %s",
+						resv_ptr->name);
+					rc = true;
+					break;
+				}
+				if (!(resv_ptr->flags & RESERVE_FLAG_DAILY))
+					break;
+			}
+			if ((flags & RESERVE_FLAG_DAILY) == 0)
+				break;
+		}
+	}
+	list_iterator_destroy(iter);
+
+	return rc;
+}
+
+/* Set a reservation's CPU count. Requires that the reservation's
+ *	node_bitmap be set. */
+static void _set_cpu_cnt(slurmctld_resv_t *resv_ptr)
+{
+	int i;
+	uint32_t cpu_cnt = 0;
+	struct node_record *node_ptr = node_record_table_ptr;
+
+	if (!resv_ptr->node_bitmap)
+		return;
+
+	for (i=0; i<node_record_count; i++, node_ptr++) {
+		if (!bit_test(resv_ptr->node_bitmap, i))
+			continue;
+		if (slurmctld_conf.fast_schedule)
+			cpu_cnt += node_ptr->config_ptr->cpus;
+		else
+			cpu_cnt += node_ptr->cpus;
+	}
+	resv_ptr->cpu_cnt = cpu_cnt;
+}
+
+/* Create a resource reservation */
+extern int create_resv(resv_desc_msg_t *resv_desc_ptr)
+{
+	int i, rc = SLURM_SUCCESS;
+	time_t now = time(NULL);
+	struct part_record *part_ptr = NULL;
+	bitstr_t *node_bitmap = NULL;
+	slurmctld_resv_t *resv_ptr;
+	int account_cnt = 0, user_cnt = 0;
+	char **account_list = NULL;
+	uid_t *user_list = NULL;
+	char start_time[32], end_time[32];
+
+	if (!resv_list)
+		resv_list = list_create(_del_resv_rec);
+	_dump_resv_req(resv_desc_ptr, "create_resv");
+
+	/* Validate the request */
+	if (resv_desc_ptr->start_time != (time_t) NO_VAL) {
+		if (resv_desc_ptr->start_time < (now - 60)) {
+			info("Reservation requestion has invalid start time");
+			rc = ESLURM_INVALID_TIME_VALUE;
+			goto bad_parse;
+		}
+	} else 
+		resv_desc_ptr->start_time = now;
+
+	if (resv_desc_ptr->end_time != (time_t) NO_VAL) {
+		if (resv_desc_ptr->end_time < (now - 60)) {
+			info("Reservation requestion has invalid end time");
+			rc = ESLURM_INVALID_TIME_VALUE;
+			goto bad_parse;
+		}
+	} else if (resv_desc_ptr->duration) {
+		resv_desc_ptr->end_time = resv_desc_ptr->start_time +
+					  (resv_desc_ptr->duration * 60);
+	} else
+		resv_desc_ptr->end_time = INFINITE;
+	if (resv_desc_ptr->flags == (uint16_t) NO_VAL)
+		resv_desc_ptr->flags = 0;
+	else {
+		resv_desc_ptr->flags &= RESERVE_FLAG_MAINT | 
+					RESERVE_FLAG_DAILY | 
+					RESERVE_FLAG_WEEKLY;
+	}
+	if (resv_desc_ptr->partition) {
+		part_ptr = find_part_record(resv_desc_ptr->partition);
+		if (!part_ptr) {
+			info("Reservation request has invalid partition %s",
+			     resv_desc_ptr->partition);
+			rc = ESLURM_INVALID_PARTITION_NAME;
+			goto bad_parse;
+		}
+	}
+	if ((resv_desc_ptr->accounts == NULL) &&
+	    (resv_desc_ptr->users == NULL)) {
+		info("Reservation request lacks users or accounts");
+		rc = ESLURM_INVALID_BANK_ACCOUNT;
+		goto bad_parse;
+	}
+	if (resv_desc_ptr->accounts) {
+		rc = _build_account_list(resv_desc_ptr->accounts, 
+					 &account_cnt, &account_list);
+		if (rc)
+			goto bad_parse;
+	}
+	if (resv_desc_ptr->users) {
+		rc = _build_uid_list(resv_desc_ptr->users, 
+				     &user_cnt, &user_list);
+		if (rc)
+			goto bad_parse;
+	}
+	if (resv_desc_ptr->node_list) {
+		resv_desc_ptr->flags |= RESERVE_FLAG_SPEC_NODES;
+		if (strcasecmp(resv_desc_ptr->node_list, "ALL") == 0) {
+			node_bitmap = bit_alloc(node_record_count);
+			bit_nset(node_bitmap, 0, (node_record_count - 1));
+		} else if (node_name2bitmap(resv_desc_ptr->node_list, 
+					    false, &node_bitmap)) {
+			rc = ESLURM_INVALID_NODE_NAME;
+			goto bad_parse;
+		}
+		if (resv_desc_ptr->node_cnt == NO_VAL)
+			resv_desc_ptr->node_cnt = 0;
+		if (_resv_overlap(resv_desc_ptr->start_time, 
+				  resv_desc_ptr->end_time, 
+				  resv_desc_ptr->flags, node_bitmap,
+				  NULL)) {
+			info("Reservation requestion overlaps another");
+			rc = ESLURM_RESERVATION_OVERLAP;
+			goto bad_parse;
+		}
+		resv_desc_ptr->node_cnt = bit_set_count(node_bitmap);
+	} else if (resv_desc_ptr->node_cnt == NO_VAL) {
+		info("Reservation request lacks node specification");
+		rc = ESLURM_INVALID_NODE_NAME;
+		goto bad_parse;
+	} else if ((rc = _select_nodes(resv_desc_ptr, &part_ptr, &node_bitmap))
+		   != SLURM_SUCCESS) {
+		goto bad_parse;
+	}
+
+	_generate_resv_id();
+	if (resv_desc_ptr->name) {
+		resv_ptr = (slurmctld_resv_t *) list_find_first (resv_list, 
+				_find_resv_name, resv_desc_ptr->name);
+		if (resv_ptr) {
+			info("Reservation requestion name duplication (%s)",
+			     resv_desc_ptr->name);
+			rc = ESLURM_RESERVATION_INVALID;
+			goto bad_parse;
+		}
+	} else {
+		while (1) {
+			_generate_resv_name(resv_desc_ptr);
+			resv_ptr = (slurmctld_resv_t *) 
+					list_find_first (resv_list, 
+					_find_resv_name, resv_desc_ptr->name);
+			if (!resv_ptr)
+				break;
+			_generate_resv_id();	/* makes new suffix */
+			/* Same as previously created name, retry */
+		}
+	}
+
+	/* Create a new reservation record */
+	resv_ptr = xmalloc(sizeof(slurmctld_resv_t));
+	resv_ptr->accounts	= resv_desc_ptr->accounts;
+	resv_desc_ptr->accounts = NULL;		/* Nothing left to free */
+	resv_ptr->account_cnt	= account_cnt;
+	resv_ptr->account_list	= account_list;
+	resv_ptr->duration      = resv_desc_ptr->duration;
+	resv_ptr->end_time	= resv_desc_ptr->end_time;
+	resv_ptr->features	= resv_desc_ptr->features;
+	resv_desc_ptr->features = NULL;		/* Nothing left to free */
+	resv_ptr->resv_id       = top_suffix;
+	xassert(resv_ptr->magic = RESV_MAGIC);	/* Sets value */
+	resv_ptr->name		= xstrdup(resv_desc_ptr->name);
+	resv_ptr->node_cnt	= resv_desc_ptr->node_cnt;
+	resv_ptr->node_list	= resv_desc_ptr->node_list;
+	resv_desc_ptr->node_list = NULL;	/* Nothing left to free */
+	resv_ptr->node_bitmap	= node_bitmap;	/* May be unset */
+	resv_ptr->partition	= resv_desc_ptr->partition;
+	resv_desc_ptr->partition = NULL;	/* Nothing left to free */
+	resv_ptr->part_ptr	= part_ptr;
+	resv_ptr->start_time	= resv_desc_ptr->start_time;
+	resv_ptr->start_time_first = resv_ptr->start_time;
+	resv_ptr->start_time_prev = resv_ptr->start_time;
+	resv_ptr->flags		= resv_desc_ptr->flags;
+	resv_ptr->users		= resv_desc_ptr->users;
+	resv_ptr->user_cnt	= user_cnt;
+	resv_ptr->user_list	= user_list;
+	resv_desc_ptr->users 	= NULL;		/* Nothing left to free */
+	_set_cpu_cnt(resv_ptr);
+	if((rc = _set_assoc_list(resv_ptr)) != SLURM_SUCCESS)
+		goto bad_parse;
+
+	/* This needs to be done after all other setup is done. */
+	_post_resv_create(resv_ptr);
+
+	slurm_make_time_str(&resv_ptr->start_time, start_time, 
+			    sizeof(start_time));
+	slurm_make_time_str(&resv_ptr->end_time, end_time, sizeof(end_time));
+	info("Created reservation %s accounts=%s users=%s "
+	     "nodes=%s start=%s end=%s",
+	     resv_ptr->name, resv_ptr->accounts, resv_ptr->users, 
+	     resv_ptr->node_list, start_time, end_time);
+	list_append(resv_list, resv_ptr);
+	last_resv_update = now;
+	schedule_resv_save();
+
+	return SLURM_SUCCESS;
+
+ bad_parse:
+	for (i=0; i<account_cnt; i++)
+		xfree(account_list[i]);
+	xfree(account_list);
+	if (node_bitmap)
+		bit_free(node_bitmap);
+	xfree(user_list);
+	return rc;
+}
+
+/* Purge all reservation data structures */
+extern void resv_fini(void)
+{
+	if (resv_list) {
+		list_destroy(resv_list);
+		resv_list = (List) NULL;
+	}
+}
+
+/* Update an exiting resource reservation */
+extern int update_resv(resv_desc_msg_t *resv_desc_ptr)
+{
+	time_t now = time(NULL);
+	slurmctld_resv_t *resv_backup, *resv_ptr;
+	int error_code = SLURM_SUCCESS, rc;
+	char start_time[32], end_time[32];
+
+	if (!resv_list)
+		resv_list = list_create(_del_resv_rec);
+	_dump_resv_req(resv_desc_ptr, "update_resv");
+
+	/* Find the specified reservation */
+	if ((resv_desc_ptr->name == NULL))
+		return ESLURM_RESERVATION_INVALID;
+	resv_ptr = (slurmctld_resv_t *) list_find_first (resv_list, 
+			_find_resv_name, resv_desc_ptr->name);
+	if (!resv_ptr)
+		return ESLURM_RESERVATION_INVALID;
+
+	/* Make backup to restore state in case of failure */
+	resv_backup = _copy_resv(resv_ptr);
+
+	/* Process the request */
+	if (resv_desc_ptr->flags != (uint16_t) NO_VAL) {
+		if (resv_desc_ptr->flags & RESERVE_FLAG_MAINT)
+			resv_ptr->flags |= RESERVE_FLAG_MAINT;
+		if (resv_desc_ptr->flags & RESERVE_FLAG_NO_MAINT)
+			resv_ptr->flags &= (~RESERVE_FLAG_MAINT);
+		if (resv_desc_ptr->flags & RESERVE_FLAG_DAILY)
+			resv_ptr->flags |= RESERVE_FLAG_DAILY;
+		if (resv_desc_ptr->flags & RESERVE_FLAG_NO_DAILY)
+			resv_ptr->flags &= (~RESERVE_FLAG_DAILY);
+		if (resv_desc_ptr->flags & RESERVE_FLAG_WEEKLY)
+			resv_ptr->flags |= RESERVE_FLAG_WEEKLY;
+		if (resv_desc_ptr->flags & RESERVE_FLAG_NO_WEEKLY)
+			resv_ptr->flags &= (~RESERVE_FLAG_WEEKLY);
+	}
+	if (resv_desc_ptr->partition && (resv_desc_ptr->partition[0] == '\0')) {
+		/* Clear the partition */
+		xfree(resv_desc_ptr->partition);
+		xfree(resv_ptr->partition);
+		resv_ptr->part_ptr = NULL;
+	}
+	if (resv_desc_ptr->partition) {
+		struct part_record *part_ptr = NULL;
+		part_ptr = find_part_record(resv_desc_ptr->partition);
+		if (!part_ptr) {
+			info("Reservation request has invalid partition (%s)",
+			     resv_desc_ptr->partition);
+			error_code = ESLURM_INVALID_PARTITION_NAME;
+			goto update_failure;
+		}
+		xfree(resv_ptr->partition);
+		resv_ptr->partition	= resv_desc_ptr->partition;
+		resv_desc_ptr->partition = NULL; /* Nothing left to free */
+		resv_ptr->part_ptr	= part_ptr;
+	}
+	if (resv_desc_ptr->accounts) {
+		rc = _update_account_list(resv_ptr, resv_desc_ptr->accounts);
+		if (rc) {
+			error_code = rc;
+			goto update_failure;
+		}
+	}
+	if (resv_desc_ptr->features && (resv_desc_ptr->features[0] == '\0')) {
+		xfree(resv_desc_ptr->features);
+		xfree(resv_ptr->features);
+	}
+	if (resv_desc_ptr->features) {
+		xfree(resv_ptr->features);
+		resv_ptr->features = resv_desc_ptr->features;
+		resv_desc_ptr->features = NULL;	/* Nothing left to free */
+	}
+	if (resv_desc_ptr->users) {
+		rc = _update_uid_list(resv_ptr, resv_desc_ptr->users);
+		if (rc) {
+			error_code = rc;
+			goto update_failure;
+		}
+	}
+	if ((resv_ptr->users == NULL) && (resv_ptr->accounts == NULL)) {
+		info("Reservation request lacks users or accounts");
+		error_code = ESLURM_INVALID_BANK_ACCOUNT;
+		goto update_failure;
+	}
+
+	if (resv_desc_ptr->start_time != (time_t) NO_VAL) {
+		if (resv_desc_ptr->start_time < (now - 60)) {
+			info("Reservation requestion has invalid start time");
+			error_code = ESLURM_INVALID_TIME_VALUE;
+			goto update_failure;
+		}
+		resv_ptr->start_time_prev = resv_ptr->start_time;
+		resv_ptr->start_time = resv_desc_ptr->start_time;
+		resv_ptr->start_time_first = resv_desc_ptr->start_time;
+		if(resv_ptr->duration) {
+			resv_ptr->end_time = resv_ptr->start_time_first + 
+				(resv_ptr->duration * 60);
+		}
+	}
+	if (resv_desc_ptr->end_time != (time_t) NO_VAL) {
+		if (resv_desc_ptr->end_time < (now - 60)) {
+			info("Reservation requestion has invalid end time");
+			error_code = ESLURM_INVALID_TIME_VALUE;
+			goto update_failure;
+		}
+		resv_ptr->end_time = resv_desc_ptr->end_time;
+		resv_ptr->duration = 0;
+	}
+	if (resv_desc_ptr->duration != NO_VAL) {
+		resv_ptr->duration = resv_desc_ptr->duration;
+		resv_ptr->end_time = resv_ptr->start_time_first + 
+				     (resv_desc_ptr->duration * 60);
+	}
+
+	if (resv_ptr->start_time >= resv_ptr->end_time) {
+		error_code = ESLURM_INVALID_TIME_VALUE;
+		goto update_failure;
+	}
+	if (resv_desc_ptr->node_list && 
+	    (resv_desc_ptr->node_list[0] == '\0')) {	/* Clear bitmap */
+		resv_ptr->flags &= (~RESERVE_FLAG_SPEC_NODES);
+		xfree(resv_desc_ptr->node_list);
+		xfree(resv_ptr->node_list);
+		FREE_NULL_BITMAP(resv_ptr->node_bitmap);
+		resv_ptr->node_bitmap = bit_alloc(node_record_count);
+		if (resv_desc_ptr->node_cnt == NO_VAL)
+			resv_desc_ptr->node_cnt = resv_ptr->node_cnt;
+		resv_ptr->node_cnt = 0;
+	}
+	if (resv_desc_ptr->node_list) {		/* Change bitmap last */
+		bitstr_t *node_bitmap;
+		resv_ptr->flags |= RESERVE_FLAG_SPEC_NODES;
+		if (strcasecmp(resv_desc_ptr->node_list, "ALL") == 0) {
+			node_bitmap = bit_alloc(node_record_count);
+			bit_nset(node_bitmap, 0, (node_record_count - 1));
+		} else if (node_name2bitmap(resv_desc_ptr->node_list, 
+					    false, &node_bitmap)) {
+			error_code = ESLURM_INVALID_NODE_NAME;
+			goto update_failure;
+		}
+		xfree(resv_ptr->node_list);
+		resv_ptr->node_list = resv_desc_ptr->node_list;
+		resv_desc_ptr->node_list = NULL;  /* Nothing left to free */
+		FREE_NULL_BITMAP(resv_ptr->node_bitmap);
+		resv_ptr->node_bitmap = node_bitmap;
+		resv_ptr->node_cnt = bit_set_count(resv_ptr->node_bitmap);
+	}
+	if (resv_desc_ptr->node_cnt != NO_VAL) {
+		rc = _resize_resv(resv_ptr, resv_desc_ptr->node_cnt);
+		if (rc) {
+			error_code = rc;
+			goto update_failure;
+		}
+		resv_ptr->node_cnt = bit_set_count(resv_ptr->node_bitmap);
+	}
+	if (_resv_overlap(resv_ptr->start_time, resv_ptr->end_time, 
+			  resv_ptr->flags, resv_ptr->node_bitmap, resv_ptr)) {
+		info("Reservation requestion overlaps another");
+		error_code = ESLURM_RESERVATION_OVERLAP;
+		goto update_failure;
+	}
+	_set_cpu_cnt(resv_ptr);
+	if((error_code = _set_assoc_list(resv_ptr)) != SLURM_SUCCESS)
+		goto update_failure;
+
+	slurm_make_time_str(&resv_ptr->start_time, start_time, 
+			    sizeof(start_time));
+	slurm_make_time_str(&resv_ptr->end_time, end_time, sizeof(end_time));
+	info("Update reservation %s accounts=%s users=%s "
+	     "nodes=%s start=%s end=%s",
+	     resv_ptr->name, resv_ptr->accounts, resv_ptr->users, 
+	     resv_ptr->node_list, start_time, end_time);
+
+	_post_resv_update(resv_ptr, resv_backup);
+	_del_resv_rec(resv_backup);
+	last_resv_update = now;
+	schedule_resv_save();
+	return error_code;
+
+update_failure:
+	_swap_resv(resv_backup, resv_ptr);
+	_del_resv_rec(resv_backup);
+	return error_code;
+}
+
+/* Determine if a running or pending job is using a reservation */
+static bool _is_resv_used(slurmctld_resv_t *resv_ptr)
+{
+	ListIterator job_iterator;
+	struct job_record *job_ptr;
+	bool match = false;
+
+	job_iterator = list_iterator_create(job_list);
+	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
+		if ((!IS_JOB_FINISHED(job_ptr)) &&
+		    (job_ptr->resv_id == resv_ptr->resv_id)) {
+			match = true;
+			break;
+		}
+	}
+	list_iterator_destroy(job_iterator);
+
+	return match;
+}
+
+/* Clear the reservation points for jobs referencing a defunct reservation */
+static void _clear_job_resv(slurmctld_resv_t *resv_ptr)
+{
+	ListIterator job_iterator;
+	struct job_record *job_ptr;
+
+	job_iterator = list_iterator_create(job_list);
+	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
+		if (job_ptr->resv_ptr != resv_ptr)
+			continue;
+		if (!IS_JOB_FINISHED(job_ptr)) {
+			info("Job %u linked to defunct reservation %s, "
+			     "clearing that reservation",
+			     job_ptr->job_id, job_ptr->resv_name);
+		}
+		job_ptr->resv_id = 0;
+		job_ptr->resv_ptr = NULL;
+		xfree(job_ptr->resv_name);
+	}
+	list_iterator_destroy(job_iterator);
+}
+
+/* Delete an exiting resource reservation */
+extern int delete_resv(reservation_name_msg_t *resv_desc_ptr)
+{
+	ListIterator iter;
+	slurmctld_resv_t *resv_ptr;
+	int rc = SLURM_SUCCESS;
+	time_t now = time(NULL);
+
+#ifdef _RESV_DEBUG
+	info("delete_resv: Name=%s", resv_desc_ptr->name);
+#endif
+
+	iter = list_iterator_create(resv_list);
+	if (!iter)
+		fatal("malloc: list_iterator_create");
+	while ((resv_ptr = (slurmctld_resv_t *) list_next(iter))) {
+		if (strcmp(resv_ptr->name, resv_desc_ptr->name))
+			continue;
+		if (_is_resv_used(resv_ptr)) {
+			rc = ESLURM_RESERVATION_BUSY;
+			break;
+		}
+
+		if (resv_ptr->maint_set_node) {
+			resv_ptr->maint_set_node = false;
+			_set_nodes_maint(resv_ptr, now);
+			last_node_update = now;
+		}
+
+		rc = _post_resv_delete(resv_ptr);
+		_clear_job_resv(resv_ptr);
+		list_delete_item(iter);
+		break;
+	}
+	list_iterator_destroy(iter);
+
+	if (!resv_ptr) {
+		info("Reservation %s not found for deletion",
+		     resv_desc_ptr->name);
+		return ESLURM_RESERVATION_INVALID;
+	}
+
+	last_resv_update = time(NULL);
+	schedule_resv_save();
+	return rc;
+}
+
+/* Dump the reservation records to a buffer */
+extern void show_resv(char **buffer_ptr, int *buffer_size, uid_t uid)
+{
+	ListIterator iter;
+	slurmctld_resv_t *resv_ptr;
+	uint32_t resv_packed;
+	int tmp_offset;
+	Buf buffer;
+	time_t now = time(NULL);
+	DEF_TIMERS;
+
+	START_TIMER;
+	if (!resv_list)
+		resv_list = list_create(_del_resv_rec);
+
+	buffer_ptr[0] = NULL;
+	*buffer_size = 0;
+
+	buffer = init_buf(BUF_SIZE);
+
+	/* write header: version and time */
+	resv_packed = 0;
+	pack32(resv_packed, buffer);
+	pack_time(now, buffer);
+
+	/* write individual reservation records */
+	iter = list_iterator_create(resv_list);
+	if (!iter)
+		fatal("malloc: list_iterator_create");
+	while ((resv_ptr = (slurmctld_resv_t *) list_next(iter))) {
+		if ((slurmctld_conf.private_data & PRIVATE_DATA_RESERVATIONS)
+		    && !validate_super_user(uid)) {
+			int i = 0;
+			for(i=0; i<resv_ptr->user_cnt; i++) {
+				if(resv_ptr->user_list[i] == uid)
+					break;
+			}
+
+			if(i >= resv_ptr->user_cnt)
+				continue;
+		}
+
+		_pack_resv(resv_ptr, buffer, false);
+		resv_packed++;
+	}
+	list_iterator_destroy(iter);
+
+	/* put the real record count in the message body header */
+	tmp_offset = get_buf_offset(buffer);
+	set_buf_offset(buffer, 0);
+	pack32(resv_packed, buffer);
+	set_buf_offset(buffer, tmp_offset);
+
+	*buffer_size = get_buf_offset(buffer);
+	buffer_ptr[0] = xfer_buf_data(buffer);
+	END_TIMER2("show_resv");
+}
+
+/* Save the state of all reservations to file */
+extern int dump_all_resv_state(void)
+{
+	ListIterator iter;
+	slurmctld_resv_t *resv_ptr;
+	int error_code = 0, log_fd;
+	char *old_file, *new_file, *reg_file;
+	/* Locks: Read node */
+	slurmctld_lock_t resv_read_lock =
+	    { READ_LOCK, NO_LOCK, READ_LOCK, NO_LOCK };
+	Buf buffer = init_buf(BUF_SIZE);
+	DEF_TIMERS;
+
+	START_TIMER;
+	if (!resv_list)
+		resv_list = list_create(_del_resv_rec);
+
+	/* write header: time */
+	packstr(RESV_STATE_VERSION, buffer);
+	pack_time(time(NULL), buffer);
+	pack32(top_suffix, buffer);
+
+	/* write reservation records to buffer */
+	lock_slurmctld(resv_read_lock);
+	iter = list_iterator_create(resv_list);
+	if (!iter)
+		fatal("malloc: list_iterator_create");
+	while ((resv_ptr = (slurmctld_resv_t *) list_next(iter)))
+		_pack_resv(resv_ptr, buffer, true);
+	list_iterator_destroy(iter);
+	/* Maintain config read lock until we copy state_save_location *\
+	\* unlock_slurmctld(resv_read_lock);          - see below      */
+
+	/* write the buffer to file */
+	old_file = xstrdup(slurmctld_conf.state_save_location);
+	xstrcat(old_file, "/resv_state.old");
+	reg_file = xstrdup(slurmctld_conf.state_save_location);
+	xstrcat(reg_file, "/resv_state");
+	new_file = xstrdup(slurmctld_conf.state_save_location);
+	xstrcat(new_file, "/resv_state.new");
+	unlock_slurmctld(resv_read_lock);
+	lock_state_files();
+	log_fd = creat(new_file, 0600);
+	if (log_fd == 0) {
+		error("Can't save state, error creating file %s, %m",
+		      new_file);
+		error_code = errno;
+	} else {
+		int pos = 0, nwrite = get_buf_offset(buffer), amount;
+		char *data = (char *)get_buf_data(buffer);
+
+		while (nwrite > 0) {
+			amount = write(log_fd, &data[pos], nwrite);
+			if ((amount < 0) && (errno != EINTR)) {
+				error("Error writing file %s, %m", new_file);
+				error_code = errno;
+				break;
+			}
+			nwrite -= amount;
+			pos    += amount;
+		}
+		fsync(log_fd);
+		close(log_fd);
+	}
+	if (error_code)
+		(void) unlink(new_file);
+	else {			/* file shuffle */
+		(void) unlink(old_file);
+		(void) link(reg_file, old_file);
+		(void) unlink(reg_file);
+		(void) link(new_file, reg_file);
+		(void) unlink(new_file);
+	}
+	xfree(old_file);
+	xfree(reg_file);
+	xfree(new_file);
+	unlock_state_files();
+
+	free_buf(buffer);
+	END_TIMER2("dump_all_resv_state");
+	return 0;
+}
+
+/* Validate one reservation record, return true if good */
+static bool _validate_one_reservation(slurmctld_resv_t *resv_ptr)
+{
+	if ((resv_ptr->name == NULL) || (resv_ptr->name[0] == '\0')) {
+		error("Read reservation without name");
+		return false;
+	}
+	if (resv_ptr->partition) {
+		struct part_record *part_ptr = NULL;
+		part_ptr = find_part_record(resv_ptr->partition);
+		if (!part_ptr) {
+			error("Reservation %s has invalid partition (%s)",
+			      resv_ptr->name, resv_ptr->partition);
+			return false;
+		}
+		resv_ptr->part_ptr	= part_ptr;
+	}
+	if (resv_ptr->accounts) {
+		int account_cnt = 0, i, rc;
+		char **account_list;
+		rc = _build_account_list(resv_ptr->accounts, 
+					 &account_cnt, &account_list);
+		if (rc) {
+			error("Reservation %s has invalid accounts (%s)",
+			      resv_ptr->name, resv_ptr->accounts);
+			return false;
+		}
+		for (i=0; i<resv_ptr->account_cnt; i++)
+			xfree(resv_ptr->account_list[i]);
+		xfree(resv_ptr->account_list);
+		resv_ptr->account_cnt  = account_cnt;
+		resv_ptr->account_list = account_list;
+	}
+	if (resv_ptr->users) {
+		int rc, user_cnt = 0;
+		uid_t *user_list = NULL;
+		rc = _build_uid_list(resv_ptr->users, 
+				     &user_cnt, &user_list);
+		if (rc) {
+			error("Reservation %s has invalid users (%s)",
+			      resv_ptr->name, resv_ptr->users);
+			return false;
+		}
+		xfree(resv_ptr->user_list);
+		resv_ptr->user_cnt  = user_cnt;
+		resv_ptr->user_list = user_list;
+	}
+	if (resv_ptr->node_list) {		/* Change bitmap last */
+		bitstr_t *node_bitmap;
+		if (strcasecmp(resv_ptr->node_list, "ALL") == 0) {
+			node_bitmap = bit_alloc(node_record_count);
+			bit_nset(node_bitmap, 0, (node_record_count - 1));
+		} else if (node_name2bitmap(resv_ptr->node_list,
+					    false, &node_bitmap)) {
+			error("Reservation %s has invalid nodes (%s)",
+			      resv_ptr->name, resv_ptr->node_list);
+			return false;
+		}
+		FREE_NULL_BITMAP(resv_ptr->node_bitmap);
+		resv_ptr->node_bitmap = node_bitmap;
+	}
+	return true;
+}
+
+/*
+ * Validate all reservation records, reset bitmaps, etc.
+ * Purge any invalid reservation.
+ */
+static void _validate_all_reservations(void)
+{
+	ListIterator iter;
+	slurmctld_resv_t *resv_ptr;
+	struct job_record *job_ptr;
+	char *tmp;
+	uint32_t res_num;
+
+	iter = list_iterator_create(resv_list);
+	if (!iter)
+		fatal("malloc: list_iterator_create");
+	while ((resv_ptr = (slurmctld_resv_t *) list_next(iter))) {
+		if (!_validate_one_reservation(resv_ptr)) {
+			error("Purging invalid reservation record %s",
+			      resv_ptr->name);
+			_post_resv_delete(resv_ptr);
+			_clear_job_resv(resv_ptr);
+			list_delete_item(iter);
+		} else {
+			_set_assoc_list(resv_ptr);
+			tmp = strrchr(resv_ptr->name, '_');
+			if (tmp) {
+				res_num = atoi(tmp + 1);
+				top_suffix = MAX(top_suffix, res_num);
+			}
+		}
+	}
+	list_iterator_destroy(iter);
+
+	/* Validate all job reservation pointers */
+	iter = list_iterator_create(job_list);
+	while ((job_ptr = (struct job_record *) list_next(iter))) {
+		if (job_ptr->resv_name == NULL)
+			continue;
+
+		if ((job_ptr->resv_ptr == NULL) ||
+		    (job_ptr->resv_ptr->magic != RESV_MAGIC)) {
+			job_ptr->resv_ptr = (slurmctld_resv_t *) 
+					list_find_first(resv_list,
+							_find_resv_name,
+							job_ptr->resv_name);
+		}
+		if (!job_ptr->resv_ptr) {
+			error("JobId %u linked to defunct reservation %s",
+			       job_ptr->job_id, job_ptr->resv_name);
+			job_ptr->resv_id = 0;
+			xfree(job_ptr->resv_name);
+		}
+	}
+	list_iterator_destroy(iter);
+
+}
+
+/*
+ * Validate the the reserved nodes are not DOWN or DRAINED and 
+ *	select different nodes as needed.
+ */
+static void _validate_node_choice(slurmctld_resv_t *resv_ptr)
+{
+	bitstr_t *tmp_bitmap = NULL;
+	int i;
+	resv_desc_msg_t resv_desc;
+
+	if (resv_ptr->flags & RESERVE_FLAG_SPEC_NODES)
+		return;
+
+	i = bit_overlap(resv_ptr->node_bitmap, avail_node_bitmap);
+	if (i == resv_ptr->node_cnt)
+		return;
+
+	/* Reservation includes DOWN, DRAINED/DRAINING, FAILING or 
+	 * NO_RESPOND nodes. Generate new request using _select_nodes()
+	 * in attempt to replace this nodes */
+	memset(&resv_desc, 0, sizeof(resv_desc_msg_t));
+	resv_desc.start_time = resv_ptr->start_time;
+	resv_desc.end_time   = resv_ptr->end_time;
+	resv_desc.features   = resv_ptr->features;
+	resv_desc.node_cnt   = resv_ptr->node_cnt - i;
+	i = _select_nodes(&resv_desc, &resv_ptr->part_ptr, &tmp_bitmap);
+	xfree(resv_desc.node_list);
+	xfree(resv_desc.partition);
+	if (i == SLURM_SUCCESS) {
+		bit_and(resv_ptr->node_bitmap, avail_node_bitmap);
+		bit_or(resv_ptr->node_bitmap, tmp_bitmap);
+		bit_free(tmp_bitmap);
+		xfree(resv_ptr->node_list);
+		resv_ptr->node_list = bitmap2node_name(resv_ptr->node_bitmap);
+		info("modified reservation %s due to unusable nodes, "
+		     "new nodes: %s", resv_ptr->name, resv_ptr->node_list);
+	} else if (difftime(resv_ptr->start_time, time(NULL)) < 600) {
+		info("reservation %s contains unusable nodes, "
+		     "can't reallocate now", resv_ptr->name);
+	} else {
+		debug("reservation %s contains unusable nodes, "
+		      "can't reallocate now", resv_ptr->name);
+	}
+}
+
+/*
+ * Load the reservation state from file, recover on slurmctld restart. 
+ *	Reset reservation pointers for all jobs.
+ *	Execute this after loading the configuration file data.
+ * IN recover - 0 = validate current reservations ONLY if already recovered, 
+ *                  otherwise recover from disk
+ *              1+ = recover all reservation state from disk
+ * RET SLURM_SUCCESS or error code
+ * NOTE: READ lock_slurmctld config before entry
+ */
+extern int load_all_resv_state(int recover)
+{
+	char *state_file, *data = NULL, *ver_str = NULL;
+	time_t now;
+	uint32_t data_size = 0, uint32_tmp;
+	int data_allocated, data_read = 0, error_code = 0, state_fd;
+	Buf buffer;
+	slurmctld_resv_t *resv_ptr = NULL;
+
+	last_resv_update = time(NULL);
+	if ((recover == 0) && resv_list) {
+		_validate_all_reservations();
+		return SLURM_SUCCESS;
+	}
+
+	/* Read state file and validate */
+	if (resv_list)
+		list_flush(resv_list);
+	else
+		resv_list = list_create(_del_resv_rec);
+
+	/* read the file */
+	state_file = xstrdup(slurmctld_conf.state_save_location);
+	xstrcat(state_file, "/resv_state");
+	lock_state_files();
+	state_fd = open(state_file, O_RDONLY);
+	if (state_fd < 0) {
+		info("No reservation state file (%s) to recover",
+		     state_file);
+		error_code = ENOENT;
+	} else {
+		data_allocated = BUF_SIZE;
+		data = xmalloc(data_allocated);
+		while (1) {
+			data_read = read(state_fd, &data[data_size], 
+					BUF_SIZE);
+			if (data_read < 0) {
+				if  (errno == EINTR)
+					continue;
+				else {
+					error("Read error on %s: %m", 
+						state_file);
+					break;
+				}
+			} else if (data_read == 0)     /* eof */
+				break;
+			data_size      += data_read;
+			data_allocated += data_read;
+			xrealloc(data, data_allocated);
+		}
+		close(state_fd);
+	}
+	xfree(state_file);
+	unlock_state_files();
+
+	buffer = create_buf(data, data_size);
+
+	safe_unpackstr_xmalloc( &ver_str, &uint32_tmp, buffer);
+	debug3("Version string in resv_state header is %s", ver_str);
+	if ((!ver_str) || (strcmp(ver_str, RESV_STATE_VERSION) != 0)) {
+		error("************************************************************");
+		error("Can not recover reservation state, data version incompatable");
+		error("************************************************************");
+		xfree(ver_str);
+		free_buf(buffer);
+		schedule_resv_save();	/* Schedule save with new format */
+		return EFAULT;
+	}
+	xfree(ver_str);
+	safe_unpack_time(&now, buffer);
+	safe_unpack32(&top_suffix, buffer);
+
+	while (remaining_buf(buffer) > 0) {
+		resv_ptr = xmalloc(sizeof(slurmctld_resv_t));
+		xassert(resv_ptr->magic = RESV_MAGIC);	/* Sets value */
+		safe_unpackstr_xmalloc(&resv_ptr->accounts,	
+				       &uint32_tmp,	buffer);
+		safe_unpack_time(&resv_ptr->end_time,	buffer);
+		safe_unpackstr_xmalloc(&resv_ptr->features,
+				       &uint32_tmp, 	buffer);
+		safe_unpackstr_xmalloc(&resv_ptr->name,	&uint32_tmp, buffer);
+		safe_unpack32(&resv_ptr->node_cnt,	buffer);
+		safe_unpackstr_xmalloc(&resv_ptr->node_list,
+				       &uint32_tmp,	buffer);
+		safe_unpackstr_xmalloc(&resv_ptr->partition,
+				       &uint32_tmp, 	buffer);
+		safe_unpack_time(&resv_ptr->start_time_first,	buffer);
+		safe_unpack16(&resv_ptr->flags,		buffer);
+		safe_unpackstr_xmalloc(&resv_ptr->users,&uint32_tmp, buffer);
+
+		/* Fields saved for internal use only (save state) */
+		safe_unpackstr_xmalloc(&resv_ptr->assoc_list,	
+				       &uint32_tmp,	buffer);
+		safe_unpack32(&resv_ptr->cpu_cnt,	buffer);
+		safe_unpack32(&resv_ptr->resv_id,	buffer);
+		safe_unpack_time(&resv_ptr->start_time_prev, buffer);
+		safe_unpack_time(&resv_ptr->start_time, buffer);
+		safe_unpack32(&resv_ptr->duration,	buffer);
+
+		list_append(resv_list, resv_ptr);
+		info("Recovered state of reservation %s", resv_ptr->name);
+	}
+
+	_validate_all_reservations();
+	info("Recovered state of %d reservations", list_count(resv_list));
+	free_buf(buffer);
+	return error_code;
+
+      unpack_error:
+	_validate_all_reservations();
+	if (state_fd >= 0)
+		error("Incomplete reservation data checkpoint file");
+	info("Recovered state of %d reservations", list_count(resv_list));
+	if (resv_ptr)
+		_del_resv_rec(resv_ptr);
+	free_buf(buffer);
+	return EFAULT;
+}
+
+/*
+ * Determine if a job request can use the specified reservations
+ * IN/OUT job_ptr - job to validate, set its resv_id and resv_flags
+ * RET SLURM_SUCCESS or error code (not found or access denied)
+*/
+extern int validate_job_resv(struct job_record *job_ptr)
+{
+	slurmctld_resv_t *resv_ptr = NULL;
+	int rc;
+
+	xassert(job_ptr);
+
+	if ((job_ptr->resv_name == NULL) || (job_ptr->resv_name[0] == '\0')) {
+		xfree(job_ptr->resv_name);
+		job_ptr->resv_id    = 0;
+		job_ptr->resv_flags = 0;
+		return SLURM_SUCCESS;
+	}
+
+	if (!resv_list)
+		return ESLURM_RESERVATION_INVALID;
+
+	/* Find the named reservation */
+	resv_ptr = (slurmctld_resv_t *) list_find_first (resv_list, 
+			_find_resv_name, job_ptr->resv_name);
+	if (!resv_ptr) {
+		info("Reservation name not found (%s)", job_ptr->resv_name);
+		return ESLURM_RESERVATION_INVALID;
+	}
+
+	rc = _valid_job_access_resv(job_ptr, resv_ptr);
+	if (rc == SLURM_SUCCESS) {
+		job_ptr->resv_id    = resv_ptr->resv_id;
+		job_ptr->resv_flags = resv_ptr->flags;
+	}
+	return rc;
+}
+
+static int  _resize_resv(slurmctld_resv_t *resv_ptr, uint32_t node_cnt)
+{
+	bitstr_t *tmp1_bitmap = NULL, *tmp2_bitmap = NULL;
+	int delta_node_cnt, i;
+	resv_desc_msg_t resv_desc;
+
+	delta_node_cnt = resv_ptr->node_cnt - node_cnt;
+	if (delta_node_cnt == 0)	/* Already correct node count */
+		return SLURM_SUCCESS;
+
+	if (delta_node_cnt > 0) {	/* Must decrease node count */
+		if (bit_overlap(resv_ptr->node_bitmap, idle_node_bitmap)) {
+			/* Start by eliminating idle nodes from reservation */
+			tmp1_bitmap = bit_copy(resv_ptr->node_bitmap);
+			bit_and(tmp1_bitmap, idle_node_bitmap);
+			i = bit_set_count(tmp1_bitmap);
+			if (i > delta_node_cnt) {
+				tmp2_bitmap = bit_pick_cnt(tmp1_bitmap, 
+							   delta_node_cnt);
+				bit_not(tmp2_bitmap);
+				bit_and(resv_ptr->node_bitmap, tmp2_bitmap);
+				FREE_NULL_BITMAP(tmp1_bitmap);
+				FREE_NULL_BITMAP(tmp2_bitmap);
+				delta_node_cnt = 0;	/* ALL DONE */
+			} else if (i) {
+				bit_not(idle_node_bitmap);
+				bit_and(resv_ptr->node_bitmap, 
+					idle_node_bitmap);
+				bit_not(idle_node_bitmap);
+				resv_ptr->node_cnt = bit_set_count(
+						resv_ptr->node_bitmap);
+				delta_node_cnt = resv_ptr->node_cnt - 
+						 node_cnt;
+			}
+			FREE_NULL_BITMAP(tmp1_bitmap);
+		}
+		if (delta_node_cnt > 0) {
+			/* Now eliminate allocated nodes from reservation */
+			tmp1_bitmap = bit_pick_cnt(resv_ptr->node_bitmap,
+						   node_cnt);
+			bit_free(resv_ptr->node_bitmap);
+			resv_ptr->node_bitmap = tmp1_bitmap;
+		}
+		xfree(resv_ptr->node_list);
+		resv_ptr->node_list = bitmap2node_name(resv_ptr->node_bitmap);
+		resv_ptr->node_cnt = node_cnt;
+		return SLURM_SUCCESS;
+	}
+
+	/* Must increase node count. Make this look like new request so 
+	 * we can use _select_nodes() for selecting the nodes */
+	memset(&resv_desc, 0, sizeof(resv_desc_msg_t));
+	resv_desc.start_time = resv_ptr->start_time;
+	resv_desc.end_time   = resv_ptr->end_time;
+	resv_desc.features   = resv_ptr->features;
+	resv_desc.node_cnt   = 0 - delta_node_cnt;
+	i = _select_nodes(&resv_desc, &resv_ptr->part_ptr, &tmp1_bitmap);
+	xfree(resv_desc.node_list);
+	xfree(resv_desc.partition);
+	if (i == SLURM_SUCCESS) {
+		bit_or(resv_ptr->node_bitmap, tmp1_bitmap);
+		bit_free(tmp1_bitmap);
+		xfree(resv_ptr->node_list);
+		resv_ptr->node_list = bitmap2node_name(resv_ptr->node_bitmap);
+		resv_ptr->node_cnt = node_cnt;
+	}
+	return i;
+}
+
+/* Given a reservation create request, select appropriate nodes for use */
+static int  _select_nodes(resv_desc_msg_t *resv_desc_ptr, 
+			  struct part_record **part_ptr,
+			  bitstr_t **resv_bitmap)
+{
+	slurmctld_resv_t *resv_ptr;
+	bitstr_t *node_bitmap;
+	struct node_record *node_ptr;
+	ListIterator iter;
+	int i, j;
+
+	if (*part_ptr == NULL) {
+		*part_ptr = default_part_loc;
+		if (*part_ptr == NULL)
+			return ESLURM_DEFAULT_PARTITION_NOT_SET;
+		xfree(resv_desc_ptr->partition);	/* should be no-op */
+		resv_desc_ptr->partition = xstrdup((*part_ptr)->name);
+	}
+
+	/* Start with all nodes in the partition */
+	node_bitmap = bit_copy((*part_ptr)->node_bitmap);
+
+	/* Don't use node already reserved */
+	if ((resv_desc_ptr->flags & RESERVE_FLAG_MAINT) == 0) {
+		iter = list_iterator_create(resv_list);
+		if (!iter)
+			fatal("malloc: list_iterator_create");
+		while ((resv_ptr = (slurmctld_resv_t *) list_next(iter))) {
+			if ((resv_ptr->node_bitmap == NULL) ||
+			    (resv_ptr->start_time >= resv_desc_ptr->end_time) ||
+			    (resv_ptr->end_time   <= resv_desc_ptr->start_time))
+				continue;
+			bit_not(resv_ptr->node_bitmap);
+			bit_and(node_bitmap, resv_ptr->node_bitmap);
+			bit_not(resv_ptr->node_bitmap);
+		}
+		list_iterator_destroy(iter);
+	}
+
+	/* Satisfy feature specification */
+	if (resv_desc_ptr->features) {
+		/* FIXME: Just support a single feature name for now */
+		node_ptr = node_record_table_ptr;
+		for (i=0; i<node_record_count; i++, node_ptr++) {
+			if (!bit_test(node_bitmap, i))
+				continue;
+			if (!node_ptr->config_ptr->feature_array) {
+				bit_clear(node_bitmap, i);
+				continue;
+			}
+			for (j=0; node_ptr->config_ptr->feature_array[j]; j++){
+				if (!strcmp(resv_desc_ptr->features,
+					    node_ptr->config_ptr->
+					    feature_array[j]))
+					break;
+			}
+			if (!node_ptr->config_ptr->feature_array[j]) {
+				bit_clear(node_bitmap, i);
+				continue;
+			}
+		}
+	}
+
+	if ((resv_desc_ptr->flags & RESERVE_FLAG_MAINT) == 0) {
+		/* Nodes must be available */
+		bit_and(node_bitmap, avail_node_bitmap);
+	}
+	*resv_bitmap = NULL;
+	if (bit_set_count(node_bitmap) < resv_desc_ptr->node_cnt)
+		verbose("reservation requests more nodes than are available");
+	else if ((i = bit_overlap(node_bitmap, idle_node_bitmap)) >=
+		 resv_desc_ptr->node_cnt) {	/* Reserve idle nodes */
+		bit_and(node_bitmap, idle_node_bitmap);
+		*resv_bitmap = bit_pick_cnt(node_bitmap, 
+					    resv_desc_ptr->node_cnt);
+	} else {
+		/* Reserve nodes that are or will be idle.
+		 * This algorithm is slower than above logic that just 
+		 * selects from the idle nodes. */
+		*resv_bitmap = _pick_idle_nodes(node_bitmap, resv_desc_ptr);
+	}
+
+	bit_free(node_bitmap);
+	if (*resv_bitmap == NULL)
+		return ESLURM_TOO_MANY_REQUESTED_NODES;
+	resv_desc_ptr->node_list = bitmap2node_name(*resv_bitmap);
+	return SLURM_SUCCESS;
+}
+
+/*
+ * Select nodes for a reservation to use
+ * IN,OUT avail_nodes - nodes to choose from with proper features, partition
+ *                      destructively modified by this function
+ * IN resv_desc_ptr - reservation request
+ * RET bitmap of selected nodes or NULL if request can not be satisfied
+ */
+static bitstr_t *_pick_idle_nodes(bitstr_t *avail_nodes, 
+				  resv_desc_msg_t *resv_desc_ptr)
+{
+	ListIterator job_iterator;
+	struct job_record *job_ptr;
+
+	job_iterator = list_iterator_create(job_list);
+	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
+		if ((job_ptr->job_state != JOB_RUNNING) &&
+		    (job_ptr->job_state != JOB_SUSPENDED))
+			continue;
+		if (job_ptr->end_time < resv_desc_ptr->start_time)
+			continue;
+		bit_not(job_ptr->node_bitmap);
+		bit_and(avail_nodes, job_ptr->node_bitmap);
+		bit_not(job_ptr->node_bitmap);
+	}
+	list_iterator_destroy(job_iterator);
+
+	return bit_pick_cnt(avail_nodes, resv_desc_ptr->node_cnt);
+}
+
+/* Determine if a job has access to a reservation
+ * RET SLURM_SUCCESS if true, ESLURM_RESERVATION_ACCESS otherwise */
+static int _valid_job_access_resv(struct job_record *job_ptr,
+				  slurmctld_resv_t *resv_ptr)
+{
+	int i;
+
+	/* Determine if we have access */
+	if (/*association_enforced*/ 0) {
+		/* FIXME: add association checks
+		if (job_ptr->assoc_id in reservation association list)
+			return SLURM_SUCCESS;
+		*/
+	} else {
+		for (i=0; i<resv_ptr->user_cnt; i++) {
+			if (job_ptr->user_id == resv_ptr->user_list[i])
+				return SLURM_SUCCESS;
+		}
+		for (i=0; (i<resv_ptr->account_cnt) && job_ptr->account; i++) {
+			if (resv_ptr->account_list[i] &&
+			    (strcmp(job_ptr->account, 
+				    resv_ptr->account_list[i]) == 0)) {
+				return SLURM_SUCCESS;
+			}
+		}
+	}
+	info("Security violation, uid=%u attempt to use reservation %s",
+	     job_ptr->user_id, resv_ptr->name);
+	return ESLURM_RESERVATION_ACCESS;
+}
+
+/*
+ * Determine if a job can start now based only upon reservations
+ * IN job_ptr      - job to test
+ * RET	SLURM_SUCCESS if runable now, otherwise an error code
+ */
+extern int job_test_resv_now(struct job_record *job_ptr)
+{
+	slurmctld_resv_t * resv_ptr;
+	time_t now;
+
+	if (job_ptr->resv_name == NULL)
+		return SLURM_SUCCESS;
+
+	resv_ptr = (slurmctld_resv_t *) list_find_first (resv_list, 
+			_find_resv_name, job_ptr->resv_name);
+	job_ptr->resv_ptr = resv_ptr;
+	if (!resv_ptr)
+		return ESLURM_RESERVATION_INVALID;
+
+	if (_valid_job_access_resv(job_ptr, resv_ptr) != SLURM_SUCCESS)
+		return ESLURM_RESERVATION_ACCESS;
+	now = time(NULL);
+	if (now < resv_ptr->start_time) {
+		/* reservation starts later */
+		return ESLURM_INVALID_TIME_VALUE;
+	}
+	if (now > resv_ptr->end_time) {
+		/* reservation ended earlier */
+		return ESLURM_RESERVATION_INVALID;
+	}
+
+	return SLURM_SUCCESS;
+}
+
+/*
+ * Determine which nodes a job can use based upon reservations
+ * IN job_ptr      - job to test
+ * IN/OUT when     - when we want the job to start (IN)
+ *                   when the reservation is available (OUT)
+ * IN move_time    - if true, then permit the start time to advance from
+ *                   "when" as needed IF job has no reservervation
+ * OUT node_bitmap - nodes which the job can use, caller must free unless error
+ * RET	SLURM_SUCCESS if runable now
+ *	ESLURM_RESERVATION_ACCESS access to reservation denied
+ *	ESLURM_RESERVATION_INVALID reservation invalid
+ *	ESLURM_INVALID_TIME_VALUE reservation invalid at time "when"
+ *	ESLURM_NODES_BUSY job has no reservation, but required nodes are
+ *			  reserved
+ */
+extern int job_test_resv(struct job_record *job_ptr, time_t *when,
+			 bool move_time, bitstr_t **node_bitmap)
+{
+	slurmctld_resv_t * resv_ptr;
+	time_t job_start_time, job_end_time;
+	uint32_t duration;
+	ListIterator iter;
+	int i, rc = SLURM_SUCCESS;
+
+	*node_bitmap = (bitstr_t *) NULL;
+
+	if (job_ptr->resv_name) {
+		resv_ptr = (slurmctld_resv_t *) list_find_first (resv_list, 
+				_find_resv_name, job_ptr->resv_name);
+		job_ptr->resv_ptr = resv_ptr;
+		if (!resv_ptr)
+			return ESLURM_RESERVATION_INVALID;
+		if (_valid_job_access_resv(job_ptr, resv_ptr) != SLURM_SUCCESS)
+			return ESLURM_RESERVATION_ACCESS;
+		if (*when < resv_ptr->start_time) {
+			/* reservation starts later */
+			*when = resv_ptr->start_time;
+			return ESLURM_INVALID_TIME_VALUE;
+		}
+		if (*when > resv_ptr->end_time) {
+			/* reservation ended earlier */
+			*when = resv_ptr->end_time;
+			job_ptr->priority = 0;	/* administrative hold */
+			return ESLURM_RESERVATION_INVALID;
+		}
+		*node_bitmap = bit_copy(resv_ptr->node_bitmap);
+		return SLURM_SUCCESS;
+	}
+
+	job_ptr->resv_ptr = NULL;	/* should be redundant */
+	*node_bitmap = bit_alloc(node_record_count);
+	bit_nset(*node_bitmap, 0, (node_record_count - 1));
+	if (list_count(resv_list) == 0)
+		return SLURM_SUCCESS;
+
+	/* Job has no reservation, try to find time when this can
+	 * run and get it's required nodes (if any) */
+	if (job_ptr->time_limit == INFINITE)
+		duration = 365 * 24 * 60 * 60;
+	else if (job_ptr->time_limit != NO_VAL)
+		duration = (job_ptr->time_limit * 60);
+	else {	/* partition time limit */
+		if (job_ptr->part_ptr->max_time == INFINITE)
+			duration = 365 * 24 * 60 * 60;
+		else
+			duration = (job_ptr->part_ptr->max_time * 60);
+	}
+	for (i=0; ; i++) {
+		job_start_time = job_end_time = *when;
+		job_end_time += duration;
+
+		iter = list_iterator_create(resv_list);
+		if (!iter)
+			fatal("malloc: list_iterator_create");
+		while ((resv_ptr = (slurmctld_resv_t *) list_next(iter))) {
+			if ((resv_ptr->node_bitmap == NULL) ||
+			    (resv_ptr->start_time >= job_end_time) ||
+			    (resv_ptr->end_time   <= job_start_time))
+				continue;
+			if (job_ptr->details->req_node_bitmap &&
+			    bit_overlap(job_ptr->details->req_node_bitmap,
+					resv_ptr->node_bitmap)) {
+				*when = resv_ptr->end_time;
+				rc = ESLURM_NODES_BUSY;
+				break;
+			}
+			bit_not(resv_ptr->node_bitmap);
+			bit_and(*node_bitmap, resv_ptr->node_bitmap);
+			bit_not(resv_ptr->node_bitmap);
+		}
+		list_iterator_destroy(iter);
+
+		if (rc == SLURM_SUCCESS)
+			break;
+		/* rc == ESLURM_NODES_BUSY here from above break */
+		if (move_time && (i<10)) {  /* Retry for later start time */
+			bit_nset(*node_bitmap, 0, (node_record_count - 1));
+			rc = SLURM_SUCCESS;
+			continue;
+		}
+		FREE_NULL_BITMAP(*node_bitmap);
+		break;	/* Give up */
+	}
+
+	return rc;
+}
+
+/* Begin scan of all jobs for valid reservations */
+extern void begin_job_resv_check(void)
+{
+	ListIterator iter;
+	slurmctld_resv_t *resv_ptr;
+	slurm_ctl_conf_t *conf;
+
+	if (!resv_list)
+		return;
+
+	conf = slurm_conf_lock();
+	resv_over_run = conf->resv_over_run;
+	slurm_conf_unlock();
+	if (resv_over_run == (uint16_t) INFINITE)
+		resv_over_run = 365 * 24 * 60 * 60;
+	else
+		resv_over_run *= 60;
+
+	iter = list_iterator_create(resv_list);
+	if (!iter)
+		fatal("malloc: list_iterator_create");
+	while ((resv_ptr = (slurmctld_resv_t *) list_next(iter))) {
+		resv_ptr->job_pend_cnt = 0;
+		resv_ptr->job_run_cnt  = 0;
+	}
+	list_iterator_destroy(iter);
+}
+
+/* Test a particular job for valid reservation
+ * RET ESLURM_INVALID_TIME_VALUE if reservation is terminated
+ *     SLURM_SUCCESS if reservation is still valid */
+extern int job_resv_check(struct job_record *job_ptr)
+{
+	bool run_flag = false;
+
+	if (!job_ptr->resv_name)
+		return SLURM_SUCCESS;
+
+	if ((job_ptr->job_state == JOB_RUNNING) ||
+	    (job_ptr->job_state == JOB_SUSPENDED))
+		run_flag = true;
+	else if (job_ptr->job_state == JOB_PENDING)
+		run_flag = false;
+	else
+		return SLURM_SUCCESS;
+
+	xassert(job_ptr->resv_ptr->magic == RESV_MAGIC);
+	if (run_flag)
+		job_ptr->resv_ptr->job_run_cnt++;
+	else
+		job_ptr->resv_ptr->job_pend_cnt++;
+
+	if (job_ptr->resv_ptr->end_time < (time(NULL) + resv_over_run))
+		return ESLURM_INVALID_TIME_VALUE;
+	return SLURM_SUCCESS;
+}
+
+/* Finish scan of all jobs for valid reservations */
+extern void fini_job_resv_check(void)
+{
+	ListIterator iter;
+	slurmctld_resv_t *resv_ptr;
+	time_t now = time(NULL);
+
+	if (!resv_list)
+		return;
+
+	iter = list_iterator_create(resv_list);
+	if (!iter)
+		fatal("malloc: list_iterator_create");
+	while ((resv_ptr = (slurmctld_resv_t *) list_next(iter))) {
+		if (resv_ptr->end_time > now) { /* reservation not over */
+			_validate_node_choice(resv_ptr);
+			continue;
+		}
+
+		if ((resv_ptr->job_run_cnt  == 0) &&
+		    (resv_ptr->flags & RESERVE_FLAG_DAILY)) {
+			verbose("Advance reservation %s one day",
+			resv_ptr->name);
+			resv_ptr->start_time += 24 * 60 * 60;
+			resv_ptr->start_time_prev = resv_ptr->start_time;
+			resv_ptr->start_time_first = resv_ptr->start_time;
+			resv_ptr->end_time   += 24 * 60 * 60;
+			_post_resv_create(resv_ptr);
+			last_resv_update = now;
+			schedule_resv_save();
+			continue;
+		}
+		if ((resv_ptr->job_run_cnt  == 0) &&
+		    (resv_ptr->flags & RESERVE_FLAG_WEEKLY)) {
+			verbose("Advance reservation %s one week",
+				resv_ptr->name);
+			resv_ptr->start_time += 7 * 24 * 60 * 60;
+			resv_ptr->start_time_prev = resv_ptr->start_time;
+			resv_ptr->start_time_first = resv_ptr->start_time;
+			resv_ptr->end_time   += 7 * 24 * 60 * 60;
+			_post_resv_create(resv_ptr);
+			last_resv_update = now;
+			schedule_resv_save();
+			continue;
+		}
+		if ((resv_ptr->job_pend_cnt   == 0) &&
+		    (resv_ptr->job_run_cnt    == 0) &&
+		    (resv_ptr->maint_set_node == 0) &&
+		    ((resv_ptr->flags & RESERVE_FLAG_DAILY ) == 0) &&
+		    ((resv_ptr->flags & RESERVE_FLAG_WEEKLY) == 0)) {
+			debug("Purging vestigial reservation record %s",
+			      resv_ptr->name);
+			_clear_job_resv(resv_ptr);
+			list_delete_item(iter);
+			last_resv_update = now;
+			schedule_resv_save();
+		}
+
+	}
+	list_iterator_destroy(iter);
+}
+
+/* send all reservations to accounting.  Only needed at
+ * first registration
+ */
+extern int send_resvs_to_accounting()
+{
+	ListIterator itr = NULL;
+	slurmctld_resv_t *resv_ptr;
+
+	if(!resv_list)
+		return SLURM_SUCCESS;
+	
+	itr = list_iterator_create(resv_list);
+	while ((resv_ptr = list_next(itr))) {
+		_post_resv_create(resv_ptr);
+	}
+	list_iterator_destroy(itr);
+
+	return SLURM_SUCCESS;
+}
+
+
+/* Set or clear NODE_STATE_MAINT for node_state as needed */
+extern void set_node_maint_mode(void)
+{
+	ListIterator iter;
+	slurmctld_resv_t *resv_ptr;
+	time_t now = time(NULL);
+
+	if (!resv_list)
+		return;
+
+	iter = list_iterator_create(resv_list);
+	if (!iter)
+		fatal("malloc: list_iterator_create");
+	while ((resv_ptr = (slurmctld_resv_t *) list_next(iter))) {
+		if ((resv_ptr->flags & RESERVE_FLAG_MAINT) == 0)
+			continue;
+		if ((now >= resv_ptr->start_time) &&
+		    (now <  resv_ptr->end_time  )) {
+			if (!resv_ptr->maint_set_node) {
+				resv_ptr->maint_set_node = true;
+				_set_nodes_maint(resv_ptr, now);
+				last_node_update = now;
+			}
+		} else if (resv_ptr->maint_set_node) {
+			resv_ptr->maint_set_node = false;
+			_set_nodes_maint(resv_ptr, now);
+			last_node_update = now;
+		}
+	}
+	list_iterator_destroy(iter);
+}
+
+static void _set_nodes_maint(slurmctld_resv_t *resv_ptr, time_t now)
+{
+	int i, i_first, i_last;
+	struct node_record *node_ptr;
+
+	if (!resv_ptr->node_bitmap) {
+		error("reservation %s lacks a bitmap", resv_ptr->name);
+		return;
+	}
+
+	i_first = bit_ffs(resv_ptr->node_bitmap);
+	i_last  = bit_fls(resv_ptr->node_bitmap);
+	for (i=i_first; i<=i_last; i++) {
+		if (!bit_test(resv_ptr->node_bitmap, i))
+			continue;
+
+		node_ptr = node_record_table_ptr + i;
+		if (resv_ptr->maint_set_node)
+			node_ptr->node_state |= NODE_STATE_MAINT;
+		else
+			node_ptr->node_state &= (~NODE_STATE_MAINT);
+		/* mark that this node is now down and in maint mode
+		   or was removed from maint mode 
+		*/
+		if(((node_ptr->node_state & NODE_STATE_BASE) 
+		    == NODE_STATE_DOWN) ||
+		   (node_ptr->node_state & NODE_STATE_DRAIN) ||
+		   (node_ptr->node_state & NODE_STATE_FAIL)) {
+			clusteracct_storage_g_node_down(
+				acct_db_conn, 
+				slurmctld_cluster_name,
+				node_ptr, now, NULL);
+		}
+	}
+}
diff --git a/src/slurmctld/reservation.h b/src/slurmctld/reservation.h
new file mode 100644
index 000000000..d05ee8ee0
--- /dev/null
+++ b/src/slurmctld/reservation.h
@@ -0,0 +1,131 @@
+/*****************************************************************************\
+ *  reservation.h - resource reservation management
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Morris Jette <jette1@llnl.gov> et. al.
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _RESERVATION_H
+#define _RESERVATION_H
+
+#include <time.h>
+#include <unistd.h>
+#include <slurm/slurm.h>
+#include "src/common/bitstring.h"
+#include "src/slurmctld/slurmctld.h"
+
+extern time_t last_resv_update;
+
+/* Create a resource reservation */
+extern int create_resv(resv_desc_msg_t *resv_desc_ptr);
+
+/* Update an existing resource reservation */
+extern int update_resv(resv_desc_msg_t *resv_desc_ptr);
+
+/* Delete an existing resource reservation */
+extern int delete_resv(reservation_name_msg_t *resv_desc_ptr);
+
+/* Dump the reservation records to a buffer */
+extern void show_resv(char **buffer_ptr, int *buffer_size, uid_t uid);
+
+/* Save the state of all reservations to file */
+extern int dump_all_resv_state(void);
+
+/* Purge all reservation data structures */
+extern void resv_fini(void);
+
+/* send all reservations to accounting.  Only needed at
+ * first registration
+ */
+extern int send_resvs_to_accounting();
+
+/* Set or clear NODE_STATE_MAINT for node_state as needed */
+extern void set_node_maint_mode(void);
+
+/*
+ * Load the reservation state from file, recover on slurmctld restart. 
+ *	Reset reservation pointers for all jobs.
+ *	Execute this after loading the configuration file data.
+ * IN recover - 0 = validate current reservations ONLY if already recovered, 
+ *                  otherwise recover from disk
+ *              1+ = recover all reservation state from disk
+ * RET SLURM_SUCCESS or error code
+ * NOTE: READ lock_slurmctld config before entry
+ */
+extern int load_all_resv_state(int recover);
+
+/*
+ * Determine if a job request can use the specified reservations
+ * IN/OUT job_ptr - job to validate, set its resv_id and resv_type
+ * RET SLURM_SUCCESS or error code (not found or access denied)
+*/
+extern int validate_job_resv(struct job_record *job_ptr);
+
+/*
+ * Determine which nodes a job can use based upon reservations
+ * IN job_ptr      - job to test
+ * IN/OUT when     - when we want the job to start (IN)
+ *                   when the reservation is available (OUT)
+ * IN move_time    - if true, then permit the start time to advance from
+ *                   "when" as needed IF job has no reservervation
+ * OUT node_bitmap - nodes which the job can use, caller must free
+ * RET	SLURM_SUCCESS if runable now
+ *	ESLURM_RESERVATION_ACCESS access to reservation denied
+ *	ESLURM_RESERVATION_INVALID reservation invalid
+ *	ESLURM_INVALID_TIME_VALUE reservation invalid at time "when"
+ *	ESLURM_NODES_BUSY job has no reservation, but required nodes are
+ *			  reserved
+ */
+extern int job_test_resv(struct job_record *job_ptr, time_t *when,
+			 bool move_time, bitstr_t **node_bitmap);
+
+/*
+ * Determine if a job can start now based only upon reservations
+ * IN job_ptr      - job to test
+ * RET	SLURM_SUCCESS if runable now, otherwise an error code
+ */
+extern int job_test_resv_now(struct job_record *job_ptr);
+
+/* Begin scan of all jobs for valid reservations */
+extern void begin_job_resv_check(void);
+
+/* Test a particular job for valid reservation
+ * RET ESLURM_INVALID_TIME_VALUE if reservation is terminated
+ *     SLURM_SUCCESS if reservation is still valid */
+extern int job_resv_check(struct job_record *job_ptr);
+
+/* Finish scan of all jobs for valid reservations */
+extern void fini_job_resv_check(void);
+
+#endif /* !_RESERVATION_H */
diff --git a/src/slurmctld/sched_plugin.c b/src/slurmctld/sched_plugin.c
index 4f86d83ab..722beb123 100644
--- a/src/slurmctld/sched_plugin.c
+++ b/src/slurmctld/sched_plugin.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jay Windley <jwindley@lnxi.com>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/sched_plugin.h b/src/slurmctld/sched_plugin.h
index de16bb451..69f368e48 100644
--- a/src/slurmctld/sched_plugin.h
+++ b/src/slurmctld/sched_plugin.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Jay Windley <jwindley@lnxi.com>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmctld/slurmctld.h b/src/slurmctld/slurmctld.h
index bb1cd87b2..8c8aa2d2b 100644
--- a/src/slurmctld/slurmctld.h
+++ b/src/slurmctld/slurmctld.h
@@ -2,13 +2,14 @@
  *  slurmctld.h - definitions of functions and structures for slurmcltd use
  *****************************************************************************
  *  Copyright (C) 2002-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> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -70,13 +71,14 @@
 #include "src/common/log.h"
 #include "src/common/macros.h"
 #include "src/common/pack.h"
+#include "src/common/read_config.h" /* location of slurmctld_conf */
+#include "src/common/select_job_res.h"
 #include "src/common/slurm_cred.h"
 #include "src/common/slurm_protocol_api.h"
 #include "src/common/slurm_protocol_defs.h"
 #include "src/common/switch.h"
 #include "src/common/timers.h"
 #include "src/common/xmalloc.h"
-#include "src/common/read_config.h" /* location of slurmctld_conf */
 
 #define FREE_NULL_BITMAP(_X)		\
 	do {				\
@@ -85,6 +87,8 @@
 	} while (0)
 #define IS_JOB_FINISHED(_X)		\
 	((_X->job_state & (~JOB_COMPLETING)) >  JOB_SUSPENDED)
+#define IS_JOB_COMPLETED(_X)		\
+	(IS_JOB_FINISHED(_X) && ((_X->job_state & JOB_COMPLETING) == 0))
 #define IS_JOB_PENDING(_X)		\
 	((_X->job_state & (~JOB_COMPLETING)) == JOB_PENDING)
 
@@ -162,11 +166,12 @@ typedef struct slurmctld_config {
 } slurmctld_config_t;
 
 extern slurmctld_config_t slurmctld_config;
-extern int bg_recover;		/* state recovery mode */
-extern char *slurmctld_cluster_name; /* name of cluster */
+extern int   bg_recover;		/* state recovery mode */
+extern char *slurmctld_cluster_name;	/* name of cluster */
 extern void *acct_db_conn;
-extern int accounting_enforce;
-extern int association_based_accounting;
+extern int   accounting_enforce;
+extern int   association_based_accounting;
+extern int   cluster_procs;
 
 /*****************************************************************************\
  *  NODE parameters and data structures
@@ -226,7 +231,12 @@ struct node_record {
 	char *arch;			/* computer architecture */
 	char *os;			/* operating system currently running */
 	struct node_record *node_next;	/* next entry with same hash index */
-	uint32_t hilbert_integer;	/* Hilbert number based on node name */
+	uint32_t hilbert_integer;	/* Hilbert number based on node name,
+					 * no need to save/restore */
+#ifdef APBASIL_LOC
+	uint32_t basil_node_id;		/* Cray/BASIL node ID,
+					 * no need to save/restore */
+#endif	/* APBASIL_LOC */
 };
 
 extern struct node_record *node_record_table_ptr;  /* ptr to node records */
@@ -243,6 +253,7 @@ extern bool ping_nodes_now;		/* if set, ping nodes immediately */
  *  avail_node_bitmap       Set if node's state is not DOWN, DRAINING/DRAINED, 
  *                          FAILING or NO_RESPOND (i.e. available to run a job)
  *  idle_node_bitmap        Set if node has no jobs allocated to it
+ *  power_node_bitmap       Set for nodes which are powered down
  *  share_node_bitmap       Set if any job allocated resources on that node
  *                          is configured to not share the node with other 
  *                          jobs (--exclusive option specified by job or
@@ -252,9 +263,26 @@ extern bool ping_nodes_now;		/* if set, ping nodes immediately */
 extern bitstr_t *avail_node_bitmap;	/* bitmap of available nodes, 
 					 * state not DOWN, DRAIN or FAILING */
 extern bitstr_t *idle_node_bitmap;	/* bitmap of idle nodes */
+extern bitstr_t *power_node_bitmap;	/* Powered down nodes */
 extern bitstr_t *share_node_bitmap;	/* bitmap of sharable nodes */
 extern bitstr_t *up_node_bitmap;	/* bitmap of up nodes, not DOWN */
 
+/*****************************************************************************\
+ *  SWITCH topology data structures
+\*****************************************************************************/
+struct switch_record {
+	int level;			/* level in hierarchy, leaf=0 */
+	uint32_t link_speed;		/* link speed, arbitrary units */
+	char *name;			/* switch name */
+	bitstr_t *node_bitmap;		/* bitmap of all nodes descended from 
+					 * this switch */
+	char *nodes;			/* name if direct descendent nodes */
+	char *switches;			/* name if direct descendent switches */
+};
+
+extern struct switch_record *switch_record_table;  /* ptr to switch records */
+extern int switch_record_cnt;		/* size of switch_record_table */
+
 /*****************************************************************************\
  *  PARTITION parameters and data structures
 \*****************************************************************************/
@@ -266,6 +294,7 @@ struct part_record {
 	char *name;		/* name of the partition */
 	uint16_t hidden;	/* 1 if hidden by default */
 	uint32_t max_time;	/* minutes or INFINITE */
+	uint32_t default_time;	/* minutes, NO_VAL or INFINITE */
 	uint32_t max_nodes;	/* per job or INFINITE */
 	uint32_t max_nodes_orig;/* unscaled value (c-nodes on BlueGene) */
 	uint32_t min_nodes;	/* per job */
@@ -277,11 +306,17 @@ struct part_record {
 	uint16_t root_only;	/* 1 if allocate/submit RPC can only be 
 				   issued by user root */
 	uint16_t max_share;	/* number of jobs to gang schedule */
+	double   norm_priority;	/* normalized scheduling priority for
+				 * jobs (DON'T PACK) */
 	uint16_t priority;	/* scheduling priority for jobs */
 	uint16_t state_up;	/* 1 if state is up, 0 if down */
 	char *nodes;		/* comma delimited list names of nodes */
 	char *allow_groups;	/* comma delimited list of groups, 
 				 * NULL indicates all */
+	char *allow_alloc_nodes;/* comma delimited list of allowed 
+				 * allocating nodes
+				 * NULL indicates all */
+
 	uid_t *allow_uids;	/* zero terminated list of allowed users */
 	bitstr_t *node_bitmap;	/* bitmap of nodes in partition */
 };
@@ -291,20 +326,49 @@ extern time_t last_part_update;		/* time of last part_list update */
 extern struct part_record default_part;	/* default configuration values */
 extern char *default_part_name;		/* name of default partition */
 extern struct part_record *default_part_loc;	/* default partition ptr */
+extern uint16_t part_max_priority;      /* max priority in all partitions */
+
+/*****************************************************************************\
+ *  RESERVATION parameters and data structures
+\*****************************************************************************/
+
+typedef struct slurmctld_resv {
+	char *accounts;		/* names of accounts permitted to use	*/
+	int account_cnt;	/* count of accounts permitted to use	*/
+	char **account_list;	/* list of accounts permitted to use	*/
+	char *assoc_list;	/* list of associations			*/
+	uint32_t cpu_cnt;	/* number of reserved CPUs		*/
+	uint32_t duration;	/* time in seconds for this
+				 * reservation to last                  */
+	time_t end_time;	/* end time of reservation		*/
+	char *features;		/* required node features		*/
+	uint16_t flags;		/* see RESERVE_FLAG_* in slurm.h	*/
+	uint32_t job_pend_cnt;	/* number of pending jobs		*/
+	uint32_t job_run_cnt;	/* number of running jobs		*/
+	uint16_t magic;		/* magic cookie, RESV_MAGIC		*/
+	bool maint_set_node;	/* NODE_STATE_MAINT set for nodes	*/
+	char *name;		/* name of reservation			*/
+	bitstr_t *node_bitmap;	/* bitmap of reserved nodes		*/
+	uint32_t node_cnt;	/* count of nodes required		*/
+	char *node_list;	/* list of reserved nodes or ALL	*/
+	char *partition;	/* name of partition to be used		*/
+	struct part_record *part_ptr;	/* pointer to partition used	*/
+	uint32_t resv_id;	/* unique reservation ID, internal use	*/
+	time_t start_time;	/* start time of reservation		*/
+	time_t start_time_first;/* when the reservation first started	*/
+	time_t start_time_prev;	/* If start time was changed this is
+				 * the pervious start time.  Needed
+				 * for accounting */
+	char *users;		/* names of users permitted to use	*/
+	int user_cnt;		/* count of users permitted to use	*/
+	uid_t *user_list;	/* array of users permitted to use	*/
+} slurmctld_resv_t;
 
 /*****************************************************************************\
  *  JOB parameters and data structures
 \*****************************************************************************/
 extern time_t last_job_update;	/* time of last update to part records */
 
-/* Used for Moab
- * These QOS values only apply to LLNL's configuration
- * Other values may apply at other sites,
- * These may be mapped to partition priorities in the future */
-#define QOS_EXPEDITE	300
-#define QOS_NORMAL 	200
-#define	QOS_STANDBY	100
-
 #define DETAILS_MAGIC 0xdea84e7
 #define JOB_MAGIC 0xf0b7392c
 #define STEP_MAGIC 0xce593bc1
@@ -318,57 +382,71 @@ struct feature_record {
 	char *name;			/* name of feature */
 	uint16_t count;			/* count of nodes with this feature */
 	uint8_t op_code;		/* separator, see FEATURE_OP_ above */
+	uint16_t tmp_cnt;		/* temporary, allocated node counter */
 };
 
 /* job_details - specification of a job's constraints, 
  * can be purged after initiation */
 struct job_details {
+	uint16_t acctg_freq;		/* accounting polling interval */
+	uint16_t argc;			/* count of argv elements */
+	char **argv;			/* arguments for a batch job script */
+	time_t begin_time;		/* start at this time (srun --begin), 
+					 * resets to time first eligible
+					 * (all dependencies satisfied) */
+	char *ckpt_dir;		        /* directory to store checkpoint images */
+	uint16_t contiguous;		/* set if requires contiguous nodes */
+	char *cpu_bind;			/* binding map for map/mask_cpu */
+	uint16_t cpu_bind_type;		/* see cpu_bind_type_t */
+	uint16_t cpus_per_task;		/* number of processors required for 
+					 * each task */
+	List depend_list;		/* list of job_ptr:state pairs */
+	char *dependency;		/* wait for other jobs */
+	char *err;			/* pathname of job's stderr file */
+	bitstr_t *exc_node_bitmap;	/* bitmap of excluded nodes */
+	char *exc_nodes;		/* excluded nodes */
+	List feature_list;		/* required features with node counts */
+	char *features;			/* required features */
+	char *in;			/* pathname of job's stdin file */
+	/* job constraints: */
+	uint32_t job_min_procs;		/* minimum processors per node */
+	uint32_t job_min_memory;	/* minimum memory per node (MB) OR
+					 * memory per allocated 
+					 * CPU | MEM_PER_CPU */
+	uint32_t job_min_tmp_disk;	/* minimum tempdisk per node, MB */
 	uint32_t magic;			/* magic cookie for data integrity */
-	uint32_t min_nodes;		/* minimum number of nodes */
 	uint32_t max_nodes;		/* maximum number of nodes */
-	char *req_nodes;		/* required nodes */
-	char *exc_nodes;		/* excluded nodes */
+	multi_core_data_t *mc_ptr;	/* multi-core specific data */
+	char *mem_bind;			/* binding map for map/mask_cpu */
+	uint16_t mem_bind_type;		/* see mem_bind_type_t */
+	uint32_t min_nodes;		/* minimum number of nodes */
+	uint16_t nice;		        /* requested priority change, 
+					 * NICE_OFFSET == no change */
+	uint16_t ntasks_per_node;	/* number of tasks on each node */
+	uint32_t num_tasks;		/* number of tasks to start */
+	uint8_t open_mode;		/* stdout/err append or trunctate */
+	char *out;			/* pathname of job's stdout file */
+	uint8_t overcommit;		/* processors being over subscribed */
+	uint16_t plane_size;		/* plane size when task_dist =
+					 * SLURM_DIST_PLANE */
+	uint8_t prolog_running;		/* set while prolog_slurmctld is 
+					 * running */
+	uint32_t reserved_resources;	/* CPU minutes of resources reserved
+					 * for this job while it was pending */
 	bitstr_t *req_node_bitmap;	/* bitmap of required nodes */
 	uint16_t *req_node_layout;	/* task layout for required nodes */
-	bitstr_t *exc_node_bitmap;	/* bitmap of excluded nodes */
-	char *features;			/* required features */
-	List feature_list;		/* required features with node counts */
+	char *req_nodes;		/* required nodes */
+	uint16_t requeue;		/* controls ability requeue job */
+	char *restart_dir;	        /* restart execution from ckpt images in this dir */
 	uint16_t shared;		/* 1 if job can share nodes,
 					 * 0 if job cannot share nodes,
 					 * any other value accepts the default
 					 * sharing policy. */
-	uint16_t contiguous;		/* set if requires contiguous nodes */
+	time_t submit_time;		/* time of submission */
 	uint16_t task_dist;		/* task layout for this job. Only
 					 * useful when Consumable Resources
                                          * is enabled */
-	uint32_t num_tasks;		/* number of tasks to start */
-	uint8_t open_mode;		/* stdout/err append or trunctate */
-	uint8_t overcommit;		/* processors being over subscribed */
-	uint16_t acctg_freq;		/* accounting polling interval */
-	uint16_t cpus_per_task;		/* number of processors required for 
-					 * each task */
-	uint16_t ntasks_per_node;	/* number of tasks on each node */
-	/* job constraints: */
-	uint32_t job_min_procs;		/* minimum processors per node */
-	uint32_t job_min_memory;	/* minimum memory per node (MB) OR
-					 * memory per allocated CPU | MEM_PER_CPU */
-	uint32_t job_min_tmp_disk;	/* minimum tempdisk per node, MB */
-	char *err;			/* pathname of job's stderr file */
-	char *in;			/* pathname of job's stdin file */
-	char *out;			/* pathname of job's stdout file */
-	time_t submit_time;		/* time of submission */
-	time_t begin_time;		/* start at this time (srun --being), 
-					 * resets to time first eligible
-					 * (all dependencies satisfied) */
-	uint32_t reserved_resources;	/* CPU minutes of resources reserved
-					 * for this job while it was pending */
 	char *work_dir;			/* pathname of working directory */
-	char **argv;			/* arguments for a batch job script */
-	uint16_t argc;			/* count of argv elements */
-	uint16_t requeue;		/* controls ability requeue job */
-	multi_core_data_t *mc_ptr;	/* multi-core specific data */
-	char *dependency;		/* wait for other jobs */
-	List depend_list;		/* list of job_ptr:state pairs */
 };
 
 struct job_record {
@@ -383,8 +461,11 @@ struct job_record {
 					 * value before use */
 	uint16_t batch_flag;		/* 1 or 2 if batch job (with script),
 					 * 2 indicates retry mode (one retry) */
+	check_jobinfo_t check_job;      /* checkpoint context, opaque */
+	uint16_t ckpt_interval;	        /* checkpoint interval in minutes */
+	time_t ckpt_time;	        /* last time job was periodically checkpointed */
 	char *comment;			/* arbitrary comment */
-        uint16_t cr_enabled;            /* specify if if Consumable Resources
+	uint16_t cr_enabled;            /* specify if if Consumable Resources
                                          * is enabled. Needed since CR deals
                                          * with a finer granularity in its
                                          * node/cpu scheduling (available cpus
@@ -395,6 +476,9 @@ struct job_record {
 	uint32_t db_index;              /* used only for database
 					 * plugins */
 	struct job_details *details;	/* job details */
+	uint16_t direct_set_prio;	/* Priority set directly if
+					 * set the system will not
+					 * change the priority any further. */
 	time_t end_time;		/* time of termination, 
 					 * actual or expected */
 	uint32_t exit_code;		/* exit code for job (status from 
@@ -415,7 +499,7 @@ struct job_record {
 	uint32_t magic;			/* magic cookie for data integrity */
 	char *name;			/* name of the job */
 	char *network;			/* network/switch requirement spec */
-	uint16_t next_step_id;		/* next step id to be used */
+	uint32_t next_step_id;		/* next step id to be used */
 	char *nodes;			/* list of nodes allocated to job */
 	slurm_addr *node_addr;		/* addresses of the nodes allocated to 
 					 * job */
@@ -432,12 +516,27 @@ struct job_record {
 	time_t pre_sus_time;		/* time job ran prior to last suspend */
 	uint32_t priority;		/* relative priority of the job,
 					 * zero == held (don't initiate) */
-	uint16_t qos;			/* quality of service, used only by Moab */
+	double priority_fs;		/* cached value used by sprio command */
+	uint16_t qos;			/* quality of service, 
+					 * used only by Moab */
+	void *qos_ptr;	                /* pointer to the quality of
+					 * service record used for this job, 
+					 * used only by Moab, it is
+					 * void* because of interdependencies
+					 * in the header files, confirm the 
+					 * value before use */
+	uint16_t restart_cnt;		/* count of restarts */
+	uint32_t resv_id;		/* reservation ID */
+	char *resv_name;		/* reservation name */
+	struct slurmctld_resv *resv_ptr;/* reservation structure pointer */
+	uint16_t resv_flags;		/* see RESERVE_FLAG_* in slurm.h */
 	uint32_t requid;            	/* requester user ID */
 	char *resp_host;		/* host for srun communications */
-	select_jobinfo_t select_jobinfo;/* opaque data */
+	select_jobinfo_t select_jobinfo;/* opaque data, BlueGene */
+	select_job_res_t select_job;	/* details of allocated cores */
 	time_t start_time;		/* time execution begins, 
 					 * actual or expected */
+	char *state_desc;		/* optional details for state_reason */
 	uint16_t state_reason;		/* reason job still pending or failed
 					 * see slurm.h:enum job_wait_reason */
 	List step_list;			/* list of job's steps */
@@ -449,21 +548,7 @@ struct job_record {
 	uint32_t total_procs;		/* number of allocated processors, 
 					 * for accounting */
 	uint32_t user_id;		/* user the job runs as */
-
-	/* Per node allocation details */
-	uint16_t num_cpu_groups;	/* record count in cpus_per_node and 
-					 * cpu_count_reps */
-	uint32_t *cpus_per_node;	/* array of cpus per node allocated */
-	uint32_t *cpu_count_reps;	/* array of consecutive nodes with 
-					 * same cpu count */
-
-        uint32_t alloc_lps_cnt;		/* number of hosts in alloc_lps
-					 * or 0 if alloc_lps is not needed
-					 * for the credentials */
-        uint32_t *alloc_lps;		/* number of logical processors
-					 * allocated for this job */
-	uint32_t *used_lps;		/* number of logical processors
-					 * already allocated to job steps */
+	char *wckey;		        /* optional wckey */
 };
 
 /* Job dependency specification, used in "depend_list" within job_record */
@@ -479,37 +564,46 @@ struct	depend_spec {
 };
 
 struct 	step_record {
-	struct job_record* job_ptr; 	/* ptr to the job that owns the step */
-	uint16_t step_id;		/* step number */
-	uint16_t cyclic_alloc;		/* set for cyclic task allocation 
-					   across nodes */
-	time_t start_time;      	/* step allocation time */
-/*	time_t suspend_time;		 * time step last suspended or resumed
-					 * implicitly the same as suspend_time
-					 * in the job record */
-	time_t pre_sus_time;		/* time step ran prior to last suspend */
-	time_t tot_sus_time;		/* total time in suspended state */
-	bitstr_t *step_node_bitmap;	/* bitmap of nodes allocated to job 
-					 * step */
-	uint16_t port;			/* port for srun communications */
-	char *host;			/* host for srun communications */
 	uint16_t batch_step;		/* 1 if batch job step, 0 otherwise */
-	uint16_t mem_per_task;		/* MB memory per task, 0=no limit */
 	uint16_t ckpt_interval;		/* checkpoint interval in minutes */
-	char *ckpt_path;	        /* path to store checkpoint image files */
-	uint16_t exclusive;		/* dedicated resources for the step */
-	time_t ckpt_time;		/* time of last checkpoint */
-	switch_jobinfo_t switch_job;	/* switch context, opaque */
 	check_jobinfo_t check_job;	/* checkpoint context, opaque */
-	char *name;			/* name of job step */
-	char *network;			/* step's network specification */
+	char *ckpt_dir;	                /* path to checkpoint image files */
+	time_t ckpt_time;		/* time of last checkpoint */
+	bitstr_t *core_bitmap_job;	/* bitmap of cores allocated to this
+					 * step relative to job's nodes, 
+					 * see src/common/select_job_res.h */
+	uint32_t cpu_count;		/* count of step's CPUs */
 	uint16_t cpus_per_task;		/* cpus per task initiated */
+	uint16_t cyclic_alloc;		/* set for cyclic task allocation 
+					 * across nodes */
+	uint16_t exclusive;		/* dedicated resources for the step */
 	uint32_t exit_code;		/* highest exit code from any task */
 	bitstr_t *exit_node_bitmap;	/* bitmap of exited nodes */
+	char *host;			/* host for srun communications */
+	struct job_record* job_ptr; 	/* ptr to the job that owns the step */
 	jobacctinfo_t *jobacct;         /* keep track of process info in the 
 					 * step */
+	uint32_t mem_per_task;		/* MB memory per task, 0=no limit */
+	char *name;			/* name of job step */
+	char *network;			/* step's network specification */
+	uint8_t no_kill;		/* 1 if no kill on node failure */
+	uint16_t port;			/* port for srun communications */
+	time_t pre_sus_time;		/* time step ran prior to last suspend */
+	int *resv_port_array;		/* reserved port indexes */
+	uint16_t resv_port_cnt;		/* count of ports reserved per node */
+	char *resv_ports;		/* ports reserved for job */
+	time_t start_time;      	/* step allocation time */
+	uint32_t step_id;		/* step number */
 	slurm_step_layout_t *step_layout;/* info about how tasks are laid out
 					  * in the step */
+	bitstr_t *step_node_bitmap;	/* bitmap of nodes allocated to job 
+					 * step */
+/*	time_t suspend_time;		 * time step last suspended or resumed
+					 * implicitly the same as suspend_time
+					 * in the job record */
+	switch_jobinfo_t switch_job;	/* switch context, opaque */
+	time_t time_last_active;	/* time step was last found on node */
+	time_t tot_sus_time;		/* total time in suspended state */
 };
 
 extern List job_list;			/* list of job_record entries */
@@ -529,8 +623,9 @@ enum select_data_info {
 	SELECT_BITMAP,       /* data-> partially_idle_bitmap (CR support) */
 	SELECT_ALLOC_CPUS,   /* data-> uint16 alloc cpus (CR support) */
 	SELECT_ALLOC_LPS,    /* data-> uint32 alloc lps  (CR support) */
-	SELECT_AVAIL_CPUS,   /* data-> uint16 avail cpus (CR support) */ 
-	SELECT_AVAIL_MEMORY  /* data-> uint32 avail mem  (CR support) */ 
+	SELECT_AVAIL_MEMORY, /* data-> uint32 avail mem  (CR support) */
+	SELECT_STATIC_PART   /* data-> uint16, 1 if static partitioning 
+			      * BlueGene support */
 } ;
 
 /*****************************************************************************\
@@ -615,14 +710,6 @@ extern struct node_record *create_node_record (struct config_record
  */
 extern struct part_record *create_part_record (void);
 
-/* 
- * create_step_record - create an empty step_record for the specified job.
- * IN job_ptr - pointer to job table entry to have step record added
- * RET a pointer to the record or NULL if error
- * NOTE: allocates memory that should be xfreed with delete_step_record
- */
-extern struct step_record * create_step_record (struct job_record *job_ptr);
-
 /* 
  * delete_step_records - delete step record for specified job_ptr
  * IN job_ptr - pointer to job table entry to have step records removed
@@ -697,6 +784,10 @@ extern void dump_job_step_state(struct step_record *step_ptr, Buf buffer);
  */
 extern void dump_step_desc(job_step_create_request_msg_t *step_spec);
 
+/* Remove one node from a job's allocation */
+extern void excise_node_from_job(struct job_record *job_ptr,
+                                 struct node_record *node_ptr);
+
 /* 
  * find_job_record - return a pointer to the job record with the given job_id
  * IN job_id - requested job's id
@@ -724,6 +815,16 @@ extern struct node_record *find_node_record (char *name);
  */
 extern struct part_record *find_part_record (char *name);
 
+/* 
+ * find_step_record - return a pointer to the step record with the given 
+ *	job_id and step_id
+ * IN job_ptr - pointer to job table entry to have step record added
+ * IN step_id - id of the desired job step
+ * RET pointer to the job step's record, NULL on error
+ */
+extern struct step_record * find_step_record(struct job_record *job_ptr, 
+					     uint32_t step_id);
+
 /*
  * get_job_env - return the environment variables and their count for a 
  *	given job
@@ -746,16 +847,6 @@ extern char *get_job_script (struct job_record *job_ptr);
  */
 extern uint32_t get_next_job_id(void);
 
-/* 
- * find_step_record - return a pointer to the step record with the given 
- *	job_id and step_id
- * IN job_ptr - pointer to job table entry to have step record added
- * IN step_id - id of the desired job step
- * RET pointer to the job step's record, NULL on error
- */
-extern struct step_record * find_step_record(struct job_record *job_ptr, 
-					     uint16_t step_id);
-
 /* 
  * init_job_conf - initialize the job configuration tables and values. 
  *	this should be called after creating node information, but 
@@ -844,6 +935,10 @@ extern int job_allocate(job_desc_msg_t * job_specs, int immediate,
  */
 extern int job_cancel_by_assoc_id(uint32_t assoc_id);
 
+/* Perform checkpoint operation on a job */
+extern int job_checkpoint(checkpoint_msg_t *ckpt_ptr, uid_t uid, 
+			  slurm_fd conn_fd);
+
 /* log the completion of the specified job */
 extern void job_completion_logger(struct job_record  *job_ptr);
 
@@ -885,6 +980,21 @@ extern int job_fail(uint32_t job_id);
  */
 extern int job_node_ready(uint32_t job_id, int *ready);
 
+/*
+ * job_restart - Restart a batch job from checkpointed state
+ *
+ * Restart a job is similar to submit a new job, except that
+ * the job requirements is load from the checkpoint file and
+ * the job id is restored.
+ *
+ * IN ckpt_ptr - checkpoint request message 
+ * IN uid - user id of the user issuing the RPC
+ * IN conn_fd - file descriptor on which to send reply
+ * RET 0 on success, otherwise ESLURM error code
+ */
+extern int job_restart(checkpoint_msg_t *ckpt_ptr, uid_t uid, 
+		       slurm_fd conn_fd);
+
 /* 
  * job_signal - signal the specified job
  * IN job_id - id of the job to be signaled
@@ -1043,13 +1153,23 @@ extern void kill_job_on_node(uint32_t job_id, struct job_record *job_ptr,
 			     struct node_record *node_ptr);
 
 /*
- * kill_running_job_by_node_name - Given a node name, deallocate jobs 
- *	from the node or kill them 
+ * kill_running_job_by_node_name - Given a node name, deallocate RUNNING 
+ *	or COMPLETING jobs from the node or kill them 
  * IN node_name - name of a node
- * IN step_test - if true, only kill the job if a step is running on the node
  * RET number of killed jobs
  */
-extern int kill_running_job_by_node_name(char *node_name, bool step_test);
+extern int kill_running_job_by_node_name(char *node_name);
+
+/* 
+ * kill_step_on_node - determine if the specified job has any job steps
+ *	allocated to the specified node and kill them unless no_kill flag
+ *	is set on the step
+ * IN job_ptr - pointer to an active job record
+ * IN node_ptr - pointer to a node record
+ * RET count of killed job steps
+ */
+extern int kill_step_on_node(struct job_record  *job_ptr, 
+			     struct node_record *node_ptr);
 
 /* list_compare_config - compare two entry from the config list based upon 
  *	weight, see common/list.h for documentation */
@@ -1080,6 +1200,12 @@ extern int load_all_job_state ( void );
  */
 extern int load_all_node_state ( bool state_only );
 
+/*
+ * load_last_job_id - load only the last job ID from state save file.
+ * RET 0 or error code
+ */
+extern int load_last_job_id( void );
+
 /*
  * load_part_uid_allow_list - reload the allow_uid list of partitions
  *	if required (updated group file or force set)
@@ -1135,7 +1261,7 @@ extern void node_fini(void);
  *	representation
  * IN node_names  - list of nodes
  * IN best_effort - if set don't return an error on invalid node name entries 
- * OUT bitmap     - set to bitmap or NULL on error 
+ * OUT bitmap     - set to bitmap, may not have all bits set on error 
  * RET 0 if no error, otherwise EINVAL
  * global: node_record_table_ptr - pointer to global node table
  * NOTE: the caller must bit_free() memory at bitmap when no longer required
@@ -1158,11 +1284,6 @@ extern void node_not_resp (char *name, time_t msg_time);
  * and log that the node is not responding using a hostlist expression */
 extern void node_no_resp_msg(void);
 
-/* Using the node record table, generate a Hilbert integer for each node
- * based upon its coordinates and sort the records in that order. This must
- * be called once, immediately after reading the slurm.conf file. */
-extern void nodes_to_hilbert_curve(void);
-
 /*
  * job_alloc_info - get details about an existing job allocation
  * IN uid - job issuing the code
@@ -1406,8 +1527,9 @@ extern int step_create ( job_step_create_request_msg_t *step_specs,
 
 /*
  * step_layout_create - creates a step_layout according to the inputs.
- * IN job_ptr - job record step belongs to
+ * IN step_ptr - step having tasks layed out
  * IN step_node_list - node list of hosts in step
+ * IN node_count - count of nodes in step allocation
  * IN num_tasks - number of tasks in step
  * IN cpus_per_task - number of cpus per task
  * IN task_dist - type of task distribution
@@ -1418,7 +1540,7 @@ extern int step_create ( job_step_create_request_msg_t *step_specs,
  */
 extern slurm_step_layout_t *step_layout_create(struct step_record *step_ptr,
 					       char *step_node_list,
-					       uint16_t node_count,
+					       uint32_t node_count,
 					       uint32_t num_tasks,
 					       uint16_t cpus_per_task,
 					       uint16_t task_dist,
@@ -1433,26 +1555,17 @@ extern slurm_step_layout_t *step_layout_create(struct step_record *step_ptr,
 extern int step_epilog_complete(struct job_record  *job_ptr, 
 	char *node_name);
 
-/* 
- * step_on_node - determine if the specified job has any job steps allocated to 
- * 	the specified node 
- * IN job_ptr - pointer to an active job record
- * IN node_ptr - pointer to a node record
- * RET true of job has step on the node, false otherwise 
- */
-extern bool step_on_node(struct job_record  *job_ptr, 
-			 struct node_record *node_ptr);
-
 /*
  * step_partial_comp - Note the completion of a job step on at least
  *	some of its nodes
  * IN req     - step_completion_msg RPC from slurmstepd
+ * IN uid     - UID issuing the request
  * OUT rem    - count of nodes for which responses are still pending
  * OUT max_rc - highest return code for any step thus far
  * RET 0 on success, otherwise ESLURM error code
  */
-extern int step_partial_comp(step_complete_msg_t *req, int *rem,
-			     uint32_t *max_rc);
+extern int step_partial_comp(step_complete_msg_t *req, uid_t uid, 
+			     int *rem, uint32_t *max_rc);
 
 /* Update time stamps for job step suspend */
 extern void suspend_job_step(struct job_record *job_ptr);
@@ -1510,13 +1623,23 @@ extern void update_logging(void);
 extern int update_node ( update_node_msg_t * update_node_msg )  ;
 
 /* 
- * update_part - update a partition's configuration data
+ * update_part - create or update a partition's configuration data
  * IN part_desc - description of partition changes
+ * IN create_flag - create a new partition
  * RET 0 or an error code
  * global: part_list - list of partition entries
  *	last_part_update - update time of partition records
  */
-extern int update_part (update_part_msg_t * part_desc );
+extern int update_part (update_part_msg_t * part_desc, bool create_flag);
+
+/*
+ * validate_alloc_node - validate that the allocating node
+ * is allowed to use this partition
+ * IN part_ptr - pointer to a partition
+ * IN alloc_node - allocting node of the request
+ * RET 1 if permitted to run, 0 otherwise
+ */
+extern int validate_alloc_node(struct part_record *part_ptr, char* alloc_node);
 
 /*
  * validate_group - validate that the submit uid is authorized to run in 
diff --git a/src/slurmctld/srun_comm.c b/src/slurmctld/srun_comm.c
index 8bcfb519b..b09ddbcce 100644
--- a/src/slurmctld/srun_comm.c
+++ b/src/slurmctld/srun_comm.c
@@ -2,12 +2,14 @@
  *  srun_comm.c - srun communications
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -78,10 +80,12 @@ extern void srun_allocate (uint32_t job_id)
 	struct job_record *job_ptr = find_job_record (job_id);
 
 	xassert(job_ptr);
-	if (job_ptr && job_ptr->alloc_resp_port && job_ptr->alloc_node
-	&&  job_ptr->resp_host) {
+	if (job_ptr && job_ptr->alloc_resp_port && job_ptr->alloc_node &&
+	    job_ptr->resp_host && job_ptr->select_job && 
+	    job_ptr->select_job->cpu_array_cnt) {
 		slurm_addr * addr;
 		resource_allocation_response_msg_t *msg_arg;
+		select_job_res_t select_ptr = job_ptr->select_job;
 
 		addr = xmalloc(sizeof(struct sockaddr_in));
 		slurm_set_addr(addr, job_ptr->alloc_resp_port, 
@@ -89,15 +93,17 @@ extern void srun_allocate (uint32_t job_id)
 		msg_arg = xmalloc(sizeof(resource_allocation_response_msg_t));
 		msg_arg->job_id 	= job_ptr->job_id;
 		msg_arg->node_list	= xstrdup(job_ptr->nodes);
-		msg_arg->num_cpu_groups	= job_ptr->num_cpu_groups;
-		msg_arg->cpus_per_node  = xmalloc(sizeof(uint32_t) *
-				job_ptr->num_cpu_groups);
-		memcpy(msg_arg->cpus_per_node, job_ptr->cpus_per_node,
-				(sizeof(uint32_t) * job_ptr->num_cpu_groups));
+		msg_arg->num_cpu_groups	= select_ptr->cpu_array_cnt;
+		msg_arg->cpus_per_node  = xmalloc(sizeof(uint16_t) *
+					  select_ptr->cpu_array_cnt);
+		memcpy(msg_arg->cpus_per_node, 
+		       select_ptr->cpu_array_value,
+		       (sizeof(uint16_t) * select_ptr->cpu_array_cnt));
 		msg_arg->cpu_count_reps  = xmalloc(sizeof(uint32_t) *
-				job_ptr->num_cpu_groups);
-		memcpy(msg_arg->cpu_count_reps, job_ptr->cpu_count_reps,
-				(sizeof(uint32_t) * job_ptr->num_cpu_groups));
+					   select_ptr->cpu_array_cnt);
+		memcpy(msg_arg->cpu_count_reps, 
+		       select_ptr->cpu_array_reps,
+		       (sizeof(uint32_t) * select_ptr->cpu_array_cnt));
 		msg_arg->node_cnt	= job_ptr->node_cnt;
 		msg_arg->select_jobinfo = select_g_copy_jobinfo(
 				job_ptr->select_jobinfo);
@@ -346,6 +352,31 @@ extern void srun_step_complete (struct step_record *step_ptr)
 	}
 }
 
+/*
+ * srun_step_missing - notify srun that a job step is missing from
+ *		       a node we expect to find it on
+ * IN step_ptr  - pointer to the slurmctld job step record
+ * IN node_list - name of nodes we did not find the step on
+ */
+extern void srun_step_missing (struct step_record *step_ptr,
+			       char *node_list)
+{
+	slurm_addr * addr;
+	srun_step_missing_msg_t *msg_arg;
+
+	xassert(step_ptr);
+	if (step_ptr->port && step_ptr->host && step_ptr->host[0]) {
+		addr = xmalloc(sizeof(struct sockaddr_in));
+		slurm_set_addr(addr, step_ptr->port, step_ptr->host);
+		msg_arg = xmalloc(sizeof(srun_step_missing_msg_t));
+		msg_arg->job_id   = step_ptr->job_ptr->job_id;
+		msg_arg->step_id  = step_ptr->step_id;
+		msg_arg->nodelist = xstrdup(node_list);
+		_srun_agent_launch(addr, step_ptr->host, SRUN_STEP_MISSING,
+				   msg_arg);
+	}
+}
+
 /*
  * srun_exec - request that srun execute a specific command
  *	and route it's output to stdout
diff --git a/src/slurmctld/srun_comm.h b/src/slurmctld/srun_comm.h
index 7858e5a2b..70e06d31d 100644
--- a/src/slurmctld/srun_comm.h
+++ b/src/slurmctld/srun_comm.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -76,6 +77,15 @@ extern void srun_job_complete (struct job_record *job_ptr);
  */
 extern void srun_step_complete (struct step_record *step_ptr);
 
+/*
+ * srun_step_missing - notify srun that a job step is missing from
+ *		       a node we expect to find it on
+ * IN step_ptr  - pointer to the slurmctld job step record
+ * IN node_list - name of nodes we did not find the step on
+ */
+extern void srun_step_missing (struct step_record *step_ptr,
+			       char *node_list);
+
 /*
  * srun_node_fail - notify srun of a node's failure
  * IN job_id    - id of job to notify
diff --git a/src/slurmctld/state_save.c b/src/slurmctld/state_save.c
index 105b624bf..4e49ddc7c 100644
--- a/src/slurmctld/state_save.c
+++ b/src/slurmctld/state_save.c
@@ -2,12 +2,14 @@
  *  state_save.c - Keep saved slurmctld state current 
  *****************************************************************************
  *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -44,12 +46,14 @@
 #endif                          /* WITH_PTHREADS */
 
 #include "src/common/macros.h"
+#include "src/slurmctld/reservation.h"
 #include "src/slurmctld/slurmctld.h"
 #include "src/slurmctld/trigger_mgr.h"
 
 static pthread_mutex_t state_save_lock = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t  state_save_cond = PTHREAD_COND_INITIALIZER;
-static int save_jobs = 0, save_nodes = 0, save_parts = 0, save_triggers = 0;
+static int save_jobs = 0, save_nodes = 0, save_parts = 0;
+static int save_triggers = 0, save_resv = 0;
 static bool run_save_thread = true;
 
 /* Queue saving of job state information */
@@ -79,6 +83,15 @@ extern void schedule_part_save(void)
 	pthread_cond_broadcast(&state_save_cond);
 }
 
+/* Queue saving of reservation state information */
+extern void schedule_resv_save(void)
+{
+	slurm_mutex_lock(&state_save_lock);
+	save_resv++;
+	slurm_mutex_unlock(&state_save_lock);
+	pthread_cond_broadcast(&state_save_cond);
+}
+
 /* Queue saving of trigger state information */
 extern void schedule_trigger_save(void)
 {
@@ -113,7 +126,7 @@ extern void *slurmctld_state_save(void *no_data)
 		slurm_mutex_lock(&state_save_lock);
 		while (1) {
 			if (save_jobs + save_nodes + save_parts + 
-			    save_triggers)
+			    save_resv + save_triggers)
 				break;		/* do the work */
 			else if (!run_save_thread) {
 				run_save_thread = true;
@@ -157,6 +170,17 @@ extern void *slurmctld_state_save(void *no_data)
 		if (run_save)
 			(void)dump_all_part_state();
 
+		/* save reservation info if necessary */
+		run_save = false;
+		slurm_mutex_lock(&state_save_lock);
+		if (save_resv) {
+			run_save = true;
+			save_resv = 0;
+		}
+		slurm_mutex_unlock(&state_save_lock);
+		if (run_save)
+			(void)dump_all_resv_state();
+
 		/* save trigger info if necessary */
 		run_save = false;
 		slurm_mutex_lock(&state_save_lock);
diff --git a/src/slurmctld/state_save.h b/src/slurmctld/state_save.h
index d800752ad..6eea01549 100644
--- a/src/slurmctld/state_save.h
+++ b/src/slurmctld/state_save.h
@@ -2,12 +2,14 @@
  *  state_save.h - Definitions for keeping saved slurmctld state current 
  *****************************************************************************
  *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -15,7 +17,7 @@
  *  any later version.
  *
  *  In addition, as a special exception, the copyright holders give permission 
- *  to link the code of portions of this program with the OpenSSL library under 
+ *  to link the code of portions of this program with the OpenSSL library under
  *  certain conditions as described in each individual source file, and 
  *  distribute linked combinations including the two. You must obey the GNU 
  *  General Public License in all respects for all of the code used other than 
@@ -47,6 +49,9 @@ extern void schedule_node_save(void);
 /* Queue saving of partition state information */
 extern void schedule_part_save(void);
 
+/* Queue saving of reservation state information */
+extern void schedule_resv_save(void);
+
 /* Queue saving of trigger state information */
 extern void schedule_trigger_save(void);
 
diff --git a/src/slurmctld/step_mgr.c b/src/slurmctld/step_mgr.c
index d796ebd2e..f6d3b92d7 100644
--- a/src/slurmctld/step_mgr.c
+++ b/src/slurmctld/step_mgr.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  step_mgr.c - manage the job step information of slurm
- *  $Id: step_mgr.c 16584 2009-02-18 19:03:40Z jette $
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -55,27 +56,31 @@
 
 #include "src/common/bitstring.h"
 #include "src/common/checkpoint.h"
-#include "src/common/slurm_protocol_interface.h"
-#include "src/common/switch.h"
-#include "src/common/xstring.h"
 #include "src/common/forward.h"
 #include "src/common/slurm_accounting_storage.h"
 #include "src/common/slurm_jobacct_gather.h"
+#include "src/common/slurm_protocol_interface.h"
+#include "src/common/switch.h"
+#include "src/common/xstring.h"
 
 #include "src/slurmctld/agent.h"
 #include "src/slurmctld/locks.h"
 #include "src/slurmctld/node_scheduler.h"
+#include "src/slurmctld/port_mgr.h"
 #include "src/slurmctld/slurmctld.h"
 #include "src/slurmctld/srun_comm.h"
 
-#define STEP_DEBUG 0
 #define MAX_RETRIES 10
 
 static int  _count_cpus(bitstr_t *bitmap);
+static struct step_record * _create_step_record (struct job_record *job_ptr);
+static void _dump_step_layout(struct step_record *step_ptr);
+static void _free_step_rec(struct step_record *step_ptr);
 static void _pack_ctld_job_step_info(struct step_record *step, Buf buffer);
 static bitstr_t * _pick_step_nodes (struct job_record  *job_ptr, 
 				    job_step_create_request_msg_t *step_spec,
-				    bool batch_step, int *return_code);
+				    int cpus_per_task, bool batch_step,
+				    int *return_code);
 static hostlist_t _step_range_to_hostlist(struct step_record *step_ptr,
 				uint32_t range_first, uint32_t range_last);
 static int _step_hostname_to_inx(struct step_record *step_ptr,
@@ -84,27 +89,33 @@ static void _step_dealloc_lps(struct step_record *step_ptr);
 
 
 /* 
- * create_step_record - create an empty step_record for the specified job.
+ * _create_step_record - create an empty step_record for the specified job.
  * IN job_ptr - pointer to job table entry to have step record added
  * RET a pointer to the record or NULL if error
  * NOTE: allocates memory that should be xfreed with delete_step_record
  */
-struct step_record * 
-create_step_record (struct job_record *job_ptr) 
+static struct step_record * _create_step_record(struct job_record *job_ptr)
 {
 	struct step_record *step_ptr;
 
 	xassert(job_ptr);
+	/* NOTE: Reserve highest step ID values for NO_VAL and
+	 * SLURM_BATCH_SCRIPT */
+	if (job_ptr->next_step_id >= 0xfffffff0) {
+		/* avoid step records in the accounting database */
+		info("job %u has reached step id limit", job_ptr->job_id);
+		return NULL;
+	}
+
 	step_ptr = (struct step_record *) xmalloc(sizeof (struct step_record));
 
 	last_job_update = time(NULL);
-	step_ptr->job_ptr = job_ptr; 
-	step_ptr->step_id = (job_ptr->next_step_id)++;
+	step_ptr->job_ptr = job_ptr;
 	step_ptr->start_time = time(NULL) ;
 	step_ptr->jobacct = jobacct_gather_g_create(NULL);
-	step_ptr->ckpt_path = NULL;
+	step_ptr->ckpt_dir = NULL;
 	if (list_append (job_ptr->step_list, step_ptr) == NULL)
-		fatal ("create_step_record: unable to allocate memory");
+		fatal ("_create_step_record: unable to allocate memory");
 
 	return step_ptr;
 }
@@ -139,21 +150,28 @@ delete_step_records (struct job_record *job_ptr, int filter)
 			switch_free_jobinfo(step_ptr->switch_job);
 		}
 		checkpoint_free_jobinfo(step_ptr->check_job);
-		xfree(step_ptr->host);
-		xfree(step_ptr->name);
-		slurm_step_layout_destroy(step_ptr->step_layout);
-		jobacct_gather_g_destroy(step_ptr->jobacct);
-		FREE_NULL_BITMAP(step_ptr->step_node_bitmap);
-		FREE_NULL_BITMAP(step_ptr->exit_node_bitmap);
-		if (step_ptr->network)
-			xfree(step_ptr->network);
-		xfree(step_ptr->ckpt_path);
-		xfree(step_ptr);
+		_free_step_rec(step_ptr);
 	}		
 
 	list_iterator_destroy (step_iterator);
 }
 
+/* _free_step_rec - delete a step record's data structures */
+static void _free_step_rec(struct step_record *step_ptr)
+{
+	xfree(step_ptr->host);
+	xfree(step_ptr->name);
+	slurm_step_layout_destroy(step_ptr->step_layout);
+	jobacct_gather_g_destroy(step_ptr->jobacct);
+	FREE_NULL_BITMAP(step_ptr->core_bitmap_job);
+	FREE_NULL_BITMAP(step_ptr->exit_node_bitmap);
+	FREE_NULL_BITMAP(step_ptr->step_node_bitmap);
+	xfree(step_ptr->resv_port_array);
+	xfree(step_ptr->resv_ports);
+	xfree(step_ptr->network);
+	xfree(step_ptr->ckpt_dir);
+	xfree(step_ptr);
+}
 
 /* 
  * delete_step_record - delete record for job step for specified job_ptr 
@@ -186,21 +204,9 @@ delete_step_record (struct job_record *job_ptr, uint32_t step_id)
 					step_ptr->step_layout->node_list);
 				switch_free_jobinfo (step_ptr->switch_job);
 			}
+			resv_port_free(step_ptr);
 			checkpoint_free_jobinfo (step_ptr->check_job);
-
-			if (step_ptr->mem_per_task)
-				select_g_step_fini(step_ptr);
-
-			xfree(step_ptr->host);
-			xfree(step_ptr->name);
-			slurm_step_layout_destroy(step_ptr->step_layout);
-			jobacct_gather_g_destroy(step_ptr->jobacct);
-			FREE_NULL_BITMAP(step_ptr->step_node_bitmap);
-			FREE_NULL_BITMAP(step_ptr->exit_node_bitmap);
-			if (step_ptr->network)
-				xfree(step_ptr->network);
-			xfree(step_ptr->ckpt_path);
-			xfree(step_ptr);
+			_free_step_rec(step_ptr);
 			error_code = 0;
 			break;
 		}
@@ -218,21 +224,22 @@ delete_step_record (struct job_record *job_ptr, uint32_t step_id)
 void
 dump_step_desc(job_step_create_request_msg_t *step_spec)
 {
-	if (step_spec == NULL) 
-		return;
-
-	debug3("StepDesc: user_id=%u job_id=%u node_count=%u, cpu_count=%u", 
-		step_spec->user_id, step_spec->job_id, 
-		step_spec->node_count, step_spec->cpu_count);
+	debug3("StepDesc: user_id=%u job_id=%u node_count=%u cpu_count=%u", 
+	       step_spec->user_id, step_spec->job_id, 
+	       step_spec->node_count, step_spec->cpu_count);
 	debug3("   num_tasks=%u relative=%u task_dist=%u node_list=%s", 
-		step_spec->num_tasks, step_spec->relative, 
-		step_spec->task_dist, step_spec->node_list);
-	debug3("   host=%s port=%u name=%s network=%s checkpoint=%u", 
-		step_spec->host, step_spec->port, step_spec->name,
-		step_spec->network, step_spec->ckpt_interval);
-	debug3("   checkpoint-path=%s exclusive=%u immediate=%u mem_per_task=%u",
-	        step_spec->ckpt_path, step_spec->exclusive, 
-		step_spec->immediate, step_spec->mem_per_task);
+	       step_spec->num_tasks, step_spec->relative, 
+	       step_spec->task_dist, step_spec->node_list);
+	debug3("   host=%s port=%u name=%s network=%s exclusive=%u", 
+	       step_spec->host, step_spec->port, step_spec->name,
+	       step_spec->network, step_spec->exclusive);
+	debug3("   checkpoint-dir=%s checkpoint_int=%u",
+	       step_spec->ckpt_dir, step_spec->ckpt_interval);
+	debug3("   mem_per_task=%u resv_port_cnt=%u immediate=%u no_kill=%u",
+	       step_spec->mem_per_task, step_spec->resv_port_cnt,
+	       step_spec->immediate, step_spec->no_kill);
+	debug3("   overcommit=%d",
+	       step_spec->overcommit);
 }
 
 
@@ -244,7 +251,7 @@ dump_step_desc(job_step_create_request_msg_t *step_spec)
  * RET pointer to the job step's record, NULL on error
  */
 struct step_record *
-find_step_record(struct job_record *job_ptr, uint16_t step_id) 
+find_step_record(struct job_record *job_ptr, uint32_t step_id) 
 {
 	ListIterator step_iterator;
 	struct step_record *step_ptr;
@@ -254,10 +261,8 @@ find_step_record(struct job_record *job_ptr, uint16_t step_id)
 
 	step_iterator = list_iterator_create (job_ptr->step_list);
 	while ((step_ptr = (struct step_record *) list_next (step_iterator))) {
-		if ((step_ptr->step_id == step_id)
-		||  ((uint16_t) step_id == (uint16_t) NO_VAL)) {
+		if ((step_ptr->step_id == step_id) || (step_id == NO_VAL))
 			break;
-		}
 	}		
 	list_iterator_destroy (step_iterator);
 
@@ -424,6 +429,7 @@ int job_step_complete(uint32_t job_id, uint32_t step_id, uid_t uid,
  *	we satisfy the super-set of constraints.
  * IN job_ptr - pointer to job to have new step started
  * IN step_spec - job step specification
+ * IN cpus_per_task - NOTE could be zero
  * IN batch_step - if set then step is a batch script
  * OUT return_code - exit code or SLURM_SUCCESS
  * global: node_record_table_ptr - pointer to global node table
@@ -433,17 +439,19 @@ int job_step_complete(uint32_t job_id, uint32_t step_id, uid_t uid,
 static bitstr_t *
 _pick_step_nodes (struct job_record  *job_ptr, 
 		  job_step_create_request_msg_t *step_spec,
+		  int cpus_per_task,
 		  bool batch_step, int *return_code)
 {
-
 	bitstr_t *nodes_avail = NULL, *nodes_idle = NULL;
 	bitstr_t *nodes_picked = NULL, *node_tmp = NULL;
 	int error_code, nodes_picked_cnt=0, cpus_picked_cnt = 0, i;
 	ListIterator step_iterator;
 	struct step_record *step_p;
-#if STEP_DEBUG
-	char *temp;
-#endif
+	select_job_res_t select_ptr = job_ptr->select_job;
+
+	xassert(select_ptr);
+	xassert(select_ptr->cpus);
+	xassert(select_ptr->cpus_used);
 
 	*return_code = SLURM_SUCCESS;
 	if (job_ptr->node_bitmap == NULL) {
@@ -456,10 +464,51 @@ _pick_step_nodes (struct job_record  *job_ptr,
 		fatal("bit_copy malloc failure");
 	bit_and (nodes_avail, up_node_bitmap);
 
-	/* In exclusive mode, satisfy the processor count.
-	 * Do not use nodes that have no unused CPUs */
+	if (step_spec->mem_per_task &&
+	    ((select_ptr->memory_allocated == NULL) ||
+	     (select_ptr->memory_used == NULL))) {
+		error("_pick_step_nodes: lack memory allocation details "
+		      "to enforce memory limits for job %u", job_ptr->job_id);
+		step_spec->mem_per_task = 0;
+	}
+
+	if (job_ptr->next_step_id == 0) {
+		if (job_ptr->details && job_ptr->details->prolog_running) {
+			*return_code = ESLURM_PROLOG_RUNNING;
+			return NULL;
+		}
+		for (i=bit_ffs(job_ptr->node_bitmap); i<node_record_count; 
+		     i++) {
+			if (!bit_test(job_ptr->node_bitmap, i))
+				continue;
+			if ((node_record_table_ptr[i].node_state &
+			     NODE_STATE_POWER_SAVE) ||
+			    (node_record_table_ptr[i].node_state &
+			     NODE_STATE_NO_RESPOND)) {
+				/* Node is/was powered down. Need to wait 
+				 * for it to start responding again. */
+				FREE_NULL_BITMAP(nodes_avail);
+				*return_code = ESLURM_NODES_BUSY;
+				/* Update job's end-time to allow for node
+				 * boot time. */
+				if (job_ptr->time_limit != INFINITE) {
+					job_ptr->end_time = time(NULL) + 
+						(job_ptr->time_limit * 60);
+				}
+				return NULL;
+			}
+		}
+	}
+
+	/* In exclusive mode, just satisfy the processor count.
+	 * Do not use nodes that have no unused CPUs or insufficient 
+	 * unused memory */
 	if (step_spec->exclusive) {
-		int i, j=0, avail, tot_cpus = 0;
+		int avail_cpus, avail_tasks, total_cpus, total_tasks, node_inx;
+		int i_first, i_last;
+		uint32_t avail_mem, total_mem;
+		uint32_t nodes_picked_cnt = 0;
+		uint32_t tasks_picked_cnt = 0, total_task_cnt = 0;
 		bitstr_t *selected_nodes = NULL;
 
 		if (step_spec->node_list) {
@@ -487,54 +536,99 @@ _pick_step_nodes (struct job_record  *job_ptr,
 				goto cleanup;
 			}
 		}
-		for (i=bit_ffs(job_ptr->node_bitmap); i<node_record_count;
-		     i++) {
-			if (!bit_test(job_ptr->node_bitmap, i))
+
+		node_inx = -1;
+		i_first = bit_ffs(select_ptr->node_bitmap);
+		i_last  = bit_fls(select_ptr->node_bitmap);
+		for (i=i_first; i<=i_last; i++) {
+			if (!bit_test(select_ptr->node_bitmap, i))
 				continue;
-			if (selected_nodes && (!bit_test(selected_nodes, i)))
-				avail = 0;
-			else {
-				avail = job_ptr->alloc_lps[j] - 
-					job_ptr->used_lps[j];
-				tot_cpus += job_ptr->alloc_lps[j];
+			node_inx++;
+			if (!bit_test(nodes_avail, i))
+				continue;	/* node now DOWN */
+			avail_cpus = select_ptr->cpus[node_inx] - 
+				     select_ptr->cpus_used[node_inx];
+			total_cpus = select_ptr->cpus[node_inx];
+			if (cpus_per_task > 0) {
+				avail_tasks = avail_cpus / cpus_per_task;
+				total_tasks = total_cpus / cpus_per_task;
+			} else {
+				avail_tasks = step_spec->num_tasks;
+				total_tasks = step_spec->num_tasks;
 			}
-			if ((avail <= 0) ||
+			if (step_spec->mem_per_task) {
+				avail_mem = select_ptr->
+					    memory_allocated[node_inx] -
+					    select_ptr->memory_used[node_inx];
+				avail_mem /= step_spec->mem_per_task;
+				avail_tasks = MIN(avail_tasks, avail_mem);
+				total_mem = select_ptr->
+					    memory_allocated[node_inx];
+				total_mem /= step_spec->mem_per_task;
+				total_tasks = MIN(total_tasks, total_mem);
+			}
+			if ((avail_tasks <= 0) ||
 			    ((selected_nodes == NULL) &&
-			     (cpus_picked_cnt > 0) &&
-			     (cpus_picked_cnt >= step_spec->cpu_count)))
+			     (nodes_picked_cnt >= step_spec->node_count) &&
+			     (tasks_picked_cnt > 0) &&
+			     (tasks_picked_cnt >= step_spec->num_tasks)))
 				bit_clear(nodes_avail, i);
-			else
-				cpus_picked_cnt += avail;
-			if (++j >= job_ptr->node_cnt)
-				break;
+			else {
+				nodes_picked_cnt++;
+				tasks_picked_cnt += avail_tasks;
+			}
+			total_task_cnt += total_tasks;
 		}
+
 		if (selected_nodes) {
 			if (!bit_equal(selected_nodes, nodes_avail)) {
 				/* some required nodes have no available
 				 * processors, defer request */
-				cpus_picked_cnt = 0;
+				tasks_picked_cnt = 0;
 			}
 			bit_free(selected_nodes);
 		}
-		if (cpus_picked_cnt >= step_spec->cpu_count)
-			return nodes_avail;
 
+		if (tasks_picked_cnt >= step_spec->num_tasks)
+			return nodes_avail;
 		FREE_NULL_BITMAP(nodes_avail);
-		if (tot_cpus >= step_spec->cpu_count)
+		if (total_task_cnt >= step_spec->num_tasks)
 			*return_code = ESLURM_NODES_BUSY;
 		else
 			*return_code = ESLURM_REQUESTED_NODE_CONFIG_UNAVAILABLE;
 		return NULL;
 	}
 
-	if ( step_spec->node_count == INFINITE)	/* use all nodes */
+	if (step_spec->mem_per_task) {
+		int node_inx = 0, usable_mem;
+		for (i=bit_ffs(select_ptr->node_bitmap); i<node_record_count; 
+		     i++) {
+			if (!bit_test(select_ptr->node_bitmap, i))
+				continue;
+			usable_mem = select_ptr->memory_allocated[node_inx] -
+				     select_ptr->memory_used[node_inx];
+			usable_mem /= step_spec->mem_per_task;
+			if (usable_mem <= 0) {
+				if (step_spec->node_count == INFINITE) {
+					FREE_NULL_BITMAP(nodes_avail);
+					*return_code = 
+						ESLURM_INVALID_TASK_MEMORY;
+					return NULL;
+				}
+				bit_clear(nodes_avail, i);
+			}
+			if (++node_inx >= select_ptr->nhosts)
+				break;
+		}
+	}
+
+	if (step_spec->node_count == INFINITE)	/* use all nodes */
 		return nodes_avail;
 
 	if (step_spec->node_list) {
 		bitstr_t *selected_nodes = NULL;
-#if STEP_DEBUG
-		info("selected nodelist is %s", step_spec->node_list);
-#endif
+		if (slurm_get_debug_flags() & DEBUG_FLAG_STEPS)
+			info("selected nodelist is %s", step_spec->node_list);
 		error_code = node_name2bitmap(step_spec->node_list, false, 
 					      &selected_nodes);
 		
@@ -552,12 +646,13 @@ _pick_step_nodes (struct job_record  *job_ptr,
 			goto cleanup;
 		}
 		if (!bit_super_set(selected_nodes, nodes_avail)) {
-			info ("_pick_step_nodes: requested nodes %s are DOWN",
-			      step_spec->node_list);
+			info ("_pick_step_nodes: requested nodes %s "
+			      "have inadequate memory",
+			       step_spec->node_list);
 			bit_free(selected_nodes);
 			goto cleanup;
 		}
-		if(step_spec->task_dist == SLURM_DIST_ARBITRARY) {
+		if (step_spec->task_dist == SLURM_DIST_ARBITRARY) {
 			/* if we are in arbitrary mode we need to make
 			 * sure we aren't running on an elan switch.
 			 * If we aren't change the number of nodes
@@ -636,42 +731,50 @@ _pick_step_nodes (struct job_record  *job_ptr,
 		while ((step_p = (struct step_record *)
 			list_next(step_iterator))) {
 			bit_or(nodes_idle, step_p->step_node_bitmap);
-#if STEP_DEBUG
-			temp = bitmap2node_name(step_p->step_node_bitmap);
-			info("step %d has nodes %s", step_p->step_id, temp);
-			xfree(temp);
-#endif
+			if (slurm_get_debug_flags() & DEBUG_FLAG_STEPS) {
+				char *temp;
+				temp = bitmap2node_name(step_p->
+							step_node_bitmap);
+				info("step %u.%u has nodes %s", 
+				     job_ptr->job_id, step_p->step_id, temp);
+				xfree(temp);
+			}
 		} 
 		list_iterator_destroy (step_iterator);
 		bit_not(nodes_idle);
 		bit_and(nodes_idle, nodes_avail);
 	}
-#if STEP_DEBUG
-	temp = bitmap2node_name(nodes_avail);
-	info("can pick from %s %d", temp, step_spec->node_count);
-	xfree(temp);
-	temp = bitmap2node_name(nodes_idle);
-	info("can pick from %s", temp);
-	xfree(temp);
-#endif
+
+	if (slurm_get_debug_flags() & DEBUG_FLAG_STEPS) {
+		char *temp1, *temp2;
+		temp1 = bitmap2node_name(nodes_avail);
+		temp2 = bitmap2node_name(nodes_idle);
+		info("step pick %u nodes, avail:%s idle:%s", 
+		     step_spec->node_count, temp1, temp2);
+		xfree(temp1);
+		xfree(temp2);
+	}
 
 	/* if user specifies step needs a specific processor count and 
 	 * all nodes have the same processor count, just translate this to
 	 * a node count */
-	if (step_spec->cpu_count && (job_ptr->num_cpu_groups == 1) && 
-	    job_ptr->cpus_per_node[0]) {
-		i = (step_spec->cpu_count + (job_ptr->cpus_per_node[0] - 1) ) 
-				/ job_ptr->cpus_per_node[0];
+	if (step_spec->cpu_count && job_ptr->select_job && 
+	    (job_ptr->select_job->cpu_array_cnt == 1) &&
+	    job_ptr->select_job->cpu_array_value) {
+		i = (step_spec->cpu_count + 
+		     (job_ptr->select_job->cpu_array_value[0] - 1)) /
+		    job_ptr->select_job->cpu_array_value[0];
 		step_spec->node_count = (i > step_spec->node_count) ? 
-						i : step_spec->node_count ;
+					 i : step_spec->node_count ;
 		//step_spec->cpu_count = 0;
 	}
 
 	if (step_spec->node_count) {
 		nodes_picked_cnt = bit_set_count(nodes_picked);
-#if STEP_DEBUG
-		info("got %u %d", step_spec->node_count, nodes_picked_cnt);
-#endif
+		if (slurm_get_debug_flags() & DEBUG_FLAG_STEPS) {
+			verbose("got %u %d", step_spec->node_count, 
+			        nodes_picked_cnt);
+		}
 		if (nodes_idle 
 		    && (bit_set_count(nodes_idle) >= step_spec->node_count)
 		    && (step_spec->node_count > nodes_picked_cnt)) {
@@ -708,7 +811,7 @@ _pick_step_nodes (struct job_record  *job_ptr,
 		cpus_picked_cnt = _count_cpus(nodes_picked);
 		/* user is requesting more cpus than we got from the
 		 * picked nodes we should return with an error */
-		if(step_spec->cpu_count > cpus_picked_cnt) {
+		if (step_spec->cpu_count > cpus_picked_cnt) {
 			debug2("Have %d nodes with %d cpus which is less "
 			       "than what the user is asking for (%d cpus) "
 			       "aborting.",
@@ -753,84 +856,290 @@ static int _count_cpus(bitstr_t *bitmap)
 	return sum;
 }
 
+/* Update the step's core bitmaps, create as needed.
+ *	Add the specified task count for a specific node in the job's 
+ *	and step's allocation */
+static void _pick_step_cores(struct step_record *step_ptr, 
+			     select_job_res_t select_ptr, 
+			     int job_node_inx, uint16_t task_cnt)
+{
+	int bit_offset, core_inx, i, sock_inx;
+	uint16_t sockets, cores;
+	int cpu_cnt = (int) task_cnt;
+	bool use_all_cores;
+	static int last_core_inx;
+
+	if (!step_ptr->core_bitmap_job) {
+		step_ptr->core_bitmap_job = bit_alloc(bit_size(select_ptr->
+							       core_bitmap));
+	}
+	if (get_select_job_res_cnt(select_ptr, job_node_inx, &sockets, &cores))
+		fatal("get_select_job_res_cnt");
+
+	if (task_cnt == (cores * sockets))
+		use_all_cores = true;
+	else
+		use_all_cores = false;
+	if (step_ptr->cpus_per_task > 0)
+		cpu_cnt *= step_ptr->cpus_per_task;
+
+	/* select idle cores first */
+	for (core_inx=0; core_inx<cores; core_inx++) {
+		for (sock_inx=0; sock_inx<sockets; sock_inx++) {
+			bit_offset = get_select_job_res_offset(select_ptr,
+							       job_node_inx,
+							       sock_inx, 
+							       core_inx);
+			if (bit_offset < 0)
+				fatal("get_select_job_res_offset");
+			if (!bit_test(select_ptr->core_bitmap, bit_offset))
+				continue;
+			if ((use_all_cores == false) &&
+			    bit_test(select_ptr->core_bitmap_used, bit_offset))
+				continue;
+			bit_set(select_ptr->core_bitmap_used, bit_offset);
+			bit_set(step_ptr->core_bitmap_job, bit_offset);
+#if 0
+			info("step alloc N:%d S:%dC :%d", 
+			     job_node_inx, sock_inx, core_inx);
+#endif
+			if (--cpu_cnt == 0)
+				return;
+		}
+	}
+	if (use_all_cores)
+		return;
+
+	/* We need to over-subscribe one or more cores.
+	 * Use last_core_inx to avoid putting all of the extra
+	 * work onto core zero */
+	verbose("job step needs to over-subscribe cores");
+	last_core_inx = (last_core_inx + 1) % cores;
+	for (i=0; i<cores; i++) {
+		core_inx = (last_core_inx + i) % cores;
+		for (sock_inx=0; sock_inx<sockets; sock_inx++) {
+			bit_offset = get_select_job_res_offset(select_ptr,
+							       job_node_inx,
+							       sock_inx, 
+							       core_inx);
+			if (bit_offset < 0)
+				fatal("get_select_job_res_offset");
+			if (!bit_test(select_ptr->core_bitmap, bit_offset))
+				continue;
+			if (bit_test(step_ptr->core_bitmap_job, bit_offset))
+				continue;   /* already taken by this step */
+			bit_set(step_ptr->core_bitmap_job, bit_offset);
+#if 0
+			info("step alloc N:%d S:%dC :%d", 
+			     job_node_inx, sock_inx, core_inx);
+#endif
+			if (--cpu_cnt == 0)
+				return;
+		}
+	}
+}
+
+
 /* Update a job's record of allocated CPUs when a job step gets scheduled */
 extern void step_alloc_lps(struct step_record *step_ptr)
 {
 	struct job_record  *job_ptr = step_ptr->job_ptr;
+	select_job_res_t select_ptr = job_ptr->select_job;
+	int cpus_alloc;
 	int i_node, i_first, i_last;
 	int job_node_inx = -1, step_node_inx = -1;
+	bool pick_step_cores = true;
+
+	xassert(select_ptr);
+	xassert(select_ptr->core_bitmap);
+	xassert(select_ptr->core_bitmap_used);
+	xassert(select_ptr->cpus);
+	xassert(select_ptr->cpus_used);
 
 	if (step_ptr->step_layout == NULL)	/* batch step */
 		return;
 
-	i_first = bit_ffs(job_ptr->node_bitmap);
-	i_last  = bit_fls(job_ptr->node_bitmap);
+	i_first = bit_ffs(select_ptr->node_bitmap);
+	i_last  = bit_fls(select_ptr->node_bitmap);
 	if (i_first == -1)	/* empty bitmap */
 		return;
+
+	if (step_ptr->core_bitmap_job) {
+		/* "scontrol reconfig" of live system */
+		pick_step_cores = false;
+	} else if ((step_ptr->exclusive == 0) ||
+		   (step_ptr->cpu_count == job_ptr->total_procs)) {
+		/* Step uses all of job's cores
+		 * Just copy the bitmap to save time */
+		step_ptr->core_bitmap_job = bit_copy(select_ptr->core_bitmap);
+		pick_step_cores = false;
+	}
+
+	if (step_ptr->mem_per_task &&
+	    ((select_ptr->memory_allocated == NULL) ||
+	     (select_ptr->memory_used == NULL))) {
+		error("step_alloc_lps: lack memory allocation details "
+		      "to enforce memory limits for job %u", job_ptr->job_id);
+		step_ptr->mem_per_task = 0;
+	}
+
 	for (i_node = i_first; i_node <= i_last; i_node++) {
-		if (!bit_test(job_ptr->node_bitmap, i_node))
+		if (!bit_test(select_ptr->node_bitmap, i_node))
 			continue;
 		job_node_inx++;
 		if (!bit_test(step_ptr->step_node_bitmap, i_node))
 			continue;
 		step_node_inx++;
-		if (step_ptr->cpus_per_task) {
-			job_ptr->used_lps[job_node_inx] +=
-				step_ptr->step_layout->tasks[step_node_inx];
+		if (job_node_inx >= select_ptr->nhosts)
+			fatal("step_alloc_lps: node index bad");
+		/* NOTE: The --overcommit option can result in
+		 * cpus_used[] having a higher value than cpus[] */
+		cpus_alloc = step_ptr->step_layout->tasks[step_node_inx] *
+			     step_ptr->cpus_per_task;
+		select_ptr->cpus_used[job_node_inx] += cpus_alloc; 
+		if (step_ptr->mem_per_task) {
+			select_ptr->memory_used[job_node_inx] += 
+				(step_ptr->mem_per_task *
+				 step_ptr->step_layout->tasks[step_node_inx]);
+		}
+		if (pick_step_cores) {
+			_pick_step_cores(step_ptr, select_ptr, 
+					 job_node_inx,
+					 step_ptr->step_layout->
+					 tasks[step_node_inx]);
+		}
+		if (slurm_get_debug_flags() & DEBUG_FLAG_CPU_BIND)
+			_dump_step_layout(step_ptr);
+		if (slurm_get_debug_flags() & DEBUG_FLAG_STEPS) {
+			info("step alloc of %s procs: %u of %u", 
+			     node_record_table_ptr[i_node].name,
+			     select_ptr->cpus_used[job_node_inx],
+			     select_ptr->cpus[job_node_inx]);
 		}
-#if 0
-		info("step alloc of %s procs: %u of %u", 
-			node_record_table_ptr[i_node].name,
-			job_ptr->used_lps[job_node_inx],
-			job_ptr->alloc_lps[job_node_inx]);
-#endif
 		if (step_node_inx == (step_ptr->step_layout->node_cnt - 1))
 			break;
 	}
 	
 }
 
+/* Dump a job step's CPU binding information.
+ * NOTE: The core_bitmap_job and node index are based upon 
+ * the _job_ allocation */
+static void _dump_step_layout(struct step_record *step_ptr)
+{
+	struct job_record* job_ptr = step_ptr->job_ptr;
+	select_job_res_t select_ptr = job_ptr->select_job;
+	int i, bit_inx, core_inx, node_inx, rep, sock_inx;
+
+	if ((step_ptr->core_bitmap_job == NULL) ||
+	    (select_ptr == NULL) || (select_ptr->cores_per_socket == NULL))
+		return;
+
+	info("====================");
+	info("step_id:%u.%u", job_ptr->job_id, step_ptr->step_id);
+	for (i=0, bit_inx= 0, node_inx=0; node_inx<select_ptr->nhosts; i++) {
+		for (rep=0; rep<select_ptr->sock_core_rep_count[i]; rep++) {
+			for (sock_inx=0; 
+			     sock_inx<select_ptr->sockets_per_node[i]; 
+			     sock_inx++) {
+				for (core_inx=0; 
+			 	     core_inx<select_ptr->cores_per_socket[i]; 
+			 	     core_inx++) {
+					if (bit_test(step_ptr->
+						     core_bitmap_job, 
+						     bit_inx++)) {
+						info("JobNode[%d] Socket[%d] "
+						     "Core[%d] is allocated",
+						     node_inx, sock_inx, 
+						     core_inx);
+					}
+				}
+			}
+			node_inx++;
+		}
+	}
+	info("====================");
+}
+
 static void _step_dealloc_lps(struct step_record *step_ptr)
 {
 	struct job_record  *job_ptr = step_ptr->job_ptr;
+	select_job_res_t select_ptr = job_ptr->select_job;
+	int cpus_alloc;
 	int i_node, i_first, i_last;
 	int job_node_inx = -1, step_node_inx = -1;
 
+	xassert(select_ptr);
+	xassert(select_ptr->core_bitmap);
+	xassert(select_ptr->core_bitmap_used);
+	xassert(select_ptr->cpus);
+	xassert(select_ptr->cpus_used);
+
 	if (step_ptr->step_layout == NULL)	/* batch step */
 		return;
 
-	i_first = bit_ffs(job_ptr->node_bitmap);
-	i_last  = bit_fls(job_ptr->node_bitmap);
+	i_first = bit_ffs(select_ptr->node_bitmap);
+	i_last  = bit_fls(select_ptr->node_bitmap);
 	if (i_first == -1)	/* empty bitmap */
 		return;
+
+	if (step_ptr->mem_per_task &&
+	    ((select_ptr->memory_allocated == NULL) ||
+	     (select_ptr->memory_used == NULL))) {
+		error("_step_dealloc_lps: lack memory allocation details "
+		      "to enforce memory limits for job %u", job_ptr->job_id);
+		step_ptr->mem_per_task = 0;
+	}
+
 	for (i_node = i_first; i_node <= i_last; i_node++) {
-		if (!bit_test(job_ptr->node_bitmap, i_node))
+		if (!bit_test(select_ptr->node_bitmap, i_node))
 			continue;
 		job_node_inx++;
 		if (!bit_test(step_ptr->step_node_bitmap, i_node))
 			continue;
 		step_node_inx++;
-		if (step_ptr->cpus_per_task == 0)
-			;	/* no CPUs allocated */
-		else if (job_ptr->used_lps[job_node_inx] >=
-		    step_ptr->step_layout->tasks[step_node_inx]) {
-			job_ptr->used_lps[job_node_inx] -= 
-				step_ptr->step_layout->tasks[step_node_inx];
-		} else {
-			error("_step_dealloc_lps: underflow for %u.%u",
+		if (job_node_inx >= select_ptr->nhosts)
+			fatal("_step_dealloc_lps: node index bad");
+		cpus_alloc = step_ptr->step_layout->tasks[step_node_inx] *
+			     step_ptr->cpus_per_task;
+		if (select_ptr->cpus_used[job_node_inx] >= cpus_alloc)
+			select_ptr->cpus_used[job_node_inx] -= cpus_alloc;
+		else {
+			error("_step_dealloc_lps: cpu underflow for %u.%u",
 				job_ptr->job_id, step_ptr->step_id);
-			job_ptr->used_lps[job_node_inx] = 0;
+			select_ptr->cpus_used[job_node_inx] = 0;
+		}
+		if (step_ptr->mem_per_task) {
+			uint32_t mem_use = step_ptr->mem_per_task *
+					   step_ptr->step_layout->
+					   tasks[step_node_inx];
+			if (select_ptr->memory_used[job_node_inx] >= mem_use) {
+				select_ptr->memory_used[job_node_inx] -= 
+						mem_use;
+			} else {
+				error("_step_dealloc_lps: "
+				      "mem underflow for %u.%u",
+				      job_ptr->job_id, step_ptr->step_id);
+				select_ptr->memory_used[job_node_inx] = 0;
+			}
+		}
+		if (slurm_get_debug_flags() & DEBUG_FLAG_STEPS) {
+			info("step dealloc of %s procs: %u of %u", 
+			     node_record_table_ptr[i_node].name,
+			     select_ptr->cpus_used[job_node_inx],
+			     select_ptr->cpus[job_node_inx]);
 		}
-#if 0
-		info("step dealloc of %s procs: %u of %u", 
-			node_record_table_ptr[i_node].name,
-			job_ptr->used_lps[job_node_inx],
-			job_ptr->alloc_lps[job_node_inx]);
-#endif
 		if (step_node_inx == (step_ptr->step_layout->node_cnt - 1))
 			break;
 	}
-	
+	if (step_ptr->core_bitmap_job) {
+		/* Mark the job's cores as no longer in use */
+		bit_not(step_ptr->core_bitmap_job);
+		bit_and(select_ptr->core_bitmap_used,
+			step_ptr->core_bitmap_job);
+		/* no need for bit_not(step_ptr->core_bitmap_job); */
+		FREE_NULL_BITMAP(step_ptr->core_bitmap_job);
+	}
 }
 
 /*
@@ -852,9 +1161,10 @@ step_create(job_step_create_request_msg_t *step_specs,
 	struct step_record *step_ptr;
 	struct job_record  *job_ptr;
 	bitstr_t *nodeset;
-	int cpus_per_task, node_count, ret_code;
+	int cpus_per_task, node_count, ret_code, i;
 	time_t now = time(NULL);
 	char *step_node_list = NULL;
+	uint32_t orig_cpu_count;
 
 	*new_step_record = NULL;
 	job_ptr = find_job_record (step_specs->job_id);
@@ -890,17 +1200,6 @@ step_create(job_step_create_request_msg_t *step_specs,
 	    (job_ptr->end_time <= time(NULL)))
 		return ESLURM_ALREADY_DONE;
 
-	if (job_ptr->details->job_min_memory) {
-		/* use memory reserved by job, no limit on steps */
-		step_specs->mem_per_task = 0;
-	} else if (step_specs->mem_per_task) {
-		if (slurmctld_conf.max_mem_per_task &&
-		    (step_specs->mem_per_task > 
-		     slurmctld_conf.max_mem_per_task))
-			return ESLURM_INVALID_TASK_MEMORY;
-	} else
-		step_specs->mem_per_task = slurmctld_conf.def_mem_per_task;
-
 	if ((step_specs->task_dist != SLURM_DIST_CYCLIC) &&
 	    (step_specs->task_dist != SLURM_DIST_BLOCK) &&
 	    (step_specs->task_dist != SLURM_DIST_CYCLIC_CYCLIC) &&
@@ -911,8 +1210,8 @@ step_create(job_step_create_request_msg_t *step_specs,
 	    (step_specs->task_dist != SLURM_DIST_ARBITRARY))
 		return ESLURM_BAD_DIST;
 
-	if (step_specs->task_dist == SLURM_DIST_ARBITRARY
-	    && (!strcmp(slurmctld_conf.switch_type, "switch/elan"))) {
+	if ((step_specs->task_dist == SLURM_DIST_ARBITRARY) &&
+	    (!strcmp(slurmctld_conf.switch_type, "switch/elan"))) {
 		return ESLURM_TASKDIST_ARBITRARY_UNSUPPORTED;
 	}
 
@@ -924,27 +1223,37 @@ step_create(job_step_create_request_msg_t *step_specs,
 	     (strlen(step_specs->network)   > MAX_STR_LEN)) ||
 	    (step_specs->name      && 
 	     (strlen(step_specs->name)      > MAX_STR_LEN)) ||
-	    (step_specs->ckpt_path && 
-	     (strlen(step_specs->ckpt_path) > MAX_STR_LEN)))
+	    (step_specs->ckpt_dir && 
+	     (strlen(step_specs->ckpt_dir) > MAX_STR_LEN)))
 		return ESLURM_PATHNAME_TOO_LONG;
 
-	/* we can figure out the cpus_per_task here by reversing what happens
-	 * in srun, record argument, plus save/restore in slurm v1.4 */
+	/* if the overcommit flag is checked, we 0 set cpu_count=0
+	 * which makes it so we don't check to see the available cpus
+	 */
+	orig_cpu_count =  step_specs->cpu_count;
+	if (step_specs->overcommit) {
+		if (step_specs->exclusive) {
+			/* Not really a legitimate combination, try to 
+			 * exclusively allocate one CPU per task */
+			step_specs->overcommit = 0;
+			step_specs->cpu_count = step_specs->num_tasks;
+		} else
+			step_specs->cpu_count = 0;
+	}
+
+	/* determine cpus_per_task value by reversing what srun does */
+	if (step_specs->num_tasks < 1)
+		return ESLURM_BAD_TASK_COUNT;
 	if (step_specs->cpu_count == 0)
 		cpus_per_task = 0;
-	else if (step_specs->num_tasks < 1)
-		cpus_per_task = 1;
 	else {
 		cpus_per_task = step_specs->cpu_count / step_specs->num_tasks;
 		if (cpus_per_task < 1)
 			cpus_per_task = 1;
 	}
 
-	/* if the overcommit flag is checked we 0 out the cpu_count
-	 * which makes it so we don't check to see the available cpus
-	 */	 
-	if (step_specs->overcommit)
-		step_specs->cpu_count = 0;
+	if (step_specs->no_kill > 1)
+		step_specs->no_kill = 1;
 
 	if (job_ptr->kill_on_step_done)
 		/* Don't start more steps, job already being cancelled */
@@ -952,7 +1261,8 @@ step_create(job_step_create_request_msg_t *step_specs,
 	job_ptr->kill_on_step_done = kill_job_when_step_done;
 
 	job_ptr->time_last_active = now;
-	nodeset = _pick_step_nodes(job_ptr, step_specs, batch_step, &ret_code);
+	nodeset = _pick_step_nodes(job_ptr, step_specs,
+				   cpus_per_task, batch_step, &ret_code);
 	if (nodeset == NULL)
 		return ret_code;
 	node_count = bit_set_count(nodeset);
@@ -964,17 +1274,19 @@ step_create(job_step_create_request_msg_t *step_specs,
 			step_specs->num_tasks = node_count;
 	}
 	
-	if ((step_specs->num_tasks < 1)
-	||  (step_specs->num_tasks > (node_count*MAX_TASKS_PER_NODE))) {
+	if (step_specs->num_tasks > (node_count*MAX_TASKS_PER_NODE)) {
 		error("step has invalid task count: %u", 
 		      step_specs->num_tasks);
 		bit_free(nodeset);
 		return ESLURM_BAD_TASK_COUNT;
 	}
 
-	step_ptr = create_step_record (job_ptr);
-	if (step_ptr == NULL)
-		fatal ("create_step_record failed with no memory");
+	step_ptr = _create_step_record (job_ptr);
+	if (step_ptr == NULL) {
+		bit_free(nodeset);
+		return ESLURMD_TOOMANYSTEPS;
+	}
+	step_ptr->step_id = job_ptr->next_step_id++;
 
 	/* set the step_record values */
 
@@ -989,10 +1301,10 @@ step_create(job_step_create_request_msg_t *step_specs,
 		xfree(step_specs->node_list);
 		step_specs->node_list = xstrdup(step_node_list);
 	}
-#if STEP_DEBUG
-	info("got %s and %s looking for %d nodes", step_node_list,
-	     step_specs->node_list, step_specs->node_count);
-#endif
+	if (slurm_get_debug_flags() & DEBUG_FLAG_STEPS) {
+		verbose("got %s and %s looking for %d nodes", step_node_list,
+		        step_specs->node_list, step_specs->node_count);
+	}
 	step_ptr->step_node_bitmap = nodeset;
 	
 	switch(step_specs->task_dist) {
@@ -1013,9 +1325,11 @@ step_create(job_step_create_request_msg_t *step_specs,
 	step_ptr->mem_per_task = step_specs->mem_per_task;
 	step_ptr->ckpt_interval = step_specs->ckpt_interval;
 	step_ptr->ckpt_time = now;
+	step_ptr->cpu_count = orig_cpu_count;
 	step_ptr->exit_code = NO_VAL;
 	step_ptr->exclusive = step_specs->exclusive;
-	step_ptr->ckpt_path = xstrdup(step_specs->ckpt_path);
+	step_ptr->ckpt_dir  = xstrdup(step_specs->ckpt_dir);
+	step_ptr->no_kill   = step_specs->no_kill;
 
 	/* step's name and network default to job's values if not 
 	 * specified in the step specification */
@@ -1038,8 +1352,30 @@ step_create(job_step_create_request_msg_t *step_specs,
 					   (uint16_t)cpus_per_task,
 					   step_specs->task_dist,
 					   step_specs->plane_size);
-		if (!step_ptr->step_layout)
+		xfree(step_node_list);
+		if (!step_ptr->step_layout) {
+			delete_step_record (job_ptr, step_ptr->step_id);
 			return SLURM_ERROR;
+		}
+
+		if ((step_specs->resv_port_cnt != (uint16_t) NO_VAL) &&
+		    (step_specs->resv_port_cnt == 0)) {
+			/* reserved port count set to max task count any node */
+			for (i=0; i<step_ptr->step_layout->node_cnt; i++) {
+				step_specs->resv_port_cnt = 
+					MAX(step_specs->resv_port_cnt,
+					    step_ptr->step_layout->tasks[i]);
+			}
+		}
+		if (step_specs->resv_port_cnt != (uint16_t) NO_VAL) {
+			step_ptr->resv_port_cnt = step_specs->resv_port_cnt;
+			i = resv_port_alloc(step_ptr);
+			if (i != SLURM_SUCCESS) {
+				delete_step_record (job_ptr, step_ptr->step_id);
+				return i;
+			}
+		}
+
 		if (switch_alloc_jobinfo (&step_ptr->switch_job) < 0)
 			fatal ("step_create: switch_alloc_jobinfo error");
 		
@@ -1053,17 +1389,10 @@ step_create(job_step_create_request_msg_t *step_specs,
 			return ESLURM_INTERCONNECT_FAILURE;
 		}
 		step_alloc_lps(step_ptr);
-	}
+	} else
+		xfree(step_node_list);
 	if (checkpoint_alloc_jobinfo (&step_ptr->check_job) < 0)
 		fatal ("step_create: checkpoint_alloc_jobinfo error");
-	xfree(step_node_list);
-	if (step_ptr->mem_per_task &&
-	    (select_g_step_begin(step_ptr) != SLURM_SUCCESS)) {
-		error("No memory to allocate step for job %u", job_ptr->job_id);
-		step_ptr->mem_per_task = 0;	/* no memory to be freed */
-		delete_step_record (job_ptr, step_ptr->step_id);
-		return ESLURM_INVALID_TASK_MEMORY;
-	}
 	*new_step_record = step_ptr;
 	jobacct_storage_g_step_start(acct_db_conn, step_ptr);
 	return SLURM_SUCCESS;
@@ -1071,39 +1400,63 @@ step_create(job_step_create_request_msg_t *step_specs,
 
 extern slurm_step_layout_t *step_layout_create(struct step_record *step_ptr,
 					       char *step_node_list,
-					       uint16_t node_count,
+					       uint32_t node_count,
 					       uint32_t num_tasks,
 					       uint16_t cpus_per_task,
 					       uint16_t task_dist,
 					       uint32_t plane_size)
 {
-	uint32_t cpus_per_node[node_count];
+	uint16_t cpus_per_node[node_count];
 	uint32_t cpu_count_reps[node_count];
 	int cpu_inx = -1;
-	int usable_cpus = 0, i;
-	int set_nodes = 0, set_cpus = 0;
+	int i, usable_cpus, usable_mem;
+	int set_cpus = 0, set_nodes = 0, set_tasks = 0;
 	int pos = -1;
+	int first_bit, last_bit;
 	struct job_record *job_ptr = step_ptr->job_ptr;
+	select_job_res_t select_ptr = job_ptr->select_job;
+
+	xassert(select_ptr);
+	xassert(select_ptr->cpus);
+	xassert(select_ptr->cpus_used);
+
+	if (step_ptr->mem_per_task &&
+	    ((select_ptr->memory_allocated == NULL) ||
+	     (select_ptr->memory_used == NULL))) {
+		error("step_layout_create: lack memory allocation details "
+		      "to enforce memory limits for job %u", job_ptr->job_id);
+		step_ptr->mem_per_task = 0;
+	}
 
 	/* build the cpus-per-node arrays for the subset of nodes
-	   used by this job step */
-	for (i = 0; i < node_record_count; i++) {
+	 * used by this job step */
+	first_bit = bit_ffs(step_ptr->step_node_bitmap);
+	last_bit  = bit_fls(step_ptr->step_node_bitmap);
+	for (i = first_bit; i <= last_bit; i++) {
 		if (bit_test(step_ptr->step_node_bitmap, i)) {
 			/* find out the position in the job */
-			pos = bit_get_pos_num(job_ptr->node_bitmap, i);
+			pos = bit_get_pos_num(select_ptr->node_bitmap, i);
 			if (pos == -1)
 				return NULL;
+			if (pos >= select_ptr->nhosts)
+				fatal("step_layout_create: node index bad");
 			if (step_ptr->exclusive) {
-				usable_cpus = job_ptr->alloc_lps[pos] -
-					      job_ptr->used_lps[pos];
-				if (usable_cpus < 0) {
-					error("step_layout_create exclusive");
-					return NULL;
-				}
-				usable_cpus = MIN(usable_cpus, 
-						  (num_tasks - set_cpus));
+				usable_cpus = select_ptr->cpus[pos] -
+					      select_ptr->cpus_used[pos];
 			} else
-				usable_cpus = job_ptr->alloc_lps[pos];
+				usable_cpus = select_ptr->cpus[pos];
+			if (step_ptr->mem_per_task) {
+				usable_mem = select_ptr->memory_allocated[pos] -
+					     select_ptr->memory_used[pos];
+				usable_mem /= step_ptr->mem_per_task;
+				if (cpus_per_task > 0)
+					usable_mem *= cpus_per_task;
+				usable_cpus = MIN(usable_cpus, usable_mem);
+			}
+			if (usable_cpus <= 0) {
+				error("step_layout_create no usable cpus");
+				return NULL;
+			}
 			debug3("step_layout cpus = %d pos = %d", 
 			       usable_cpus, pos);
 			
@@ -1117,11 +1470,15 @@ extern slurm_step_layout_t *step_layout_create(struct step_record *step_ptr,
 				cpu_count_reps[cpu_inx]++;
 			set_nodes++;
 			set_cpus += usable_cpus;
+			if (cpus_per_task > 0)
+				set_tasks += usable_cpus / cpus_per_task;
+			else
+				set_tasks = num_tasks;
 			if (set_nodes == node_count)
 				break;
 		}
 	}
-	
+
 	/* layout the tasks on the nodes */
 	return slurm_step_layout_create(step_node_list,
 					cpus_per_node, cpu_count_reps, 
@@ -1149,7 +1506,7 @@ static void _pack_ctld_job_step_info(struct step_record *step_ptr, Buf buffer)
 		node_list = step_ptr->job_ptr->nodes;	
 	}
 	pack32(step_ptr->job_ptr->job_id, buffer);
-	pack16(step_ptr->step_id, buffer);
+	pack32(step_ptr->step_id, buffer);
 	pack16(step_ptr->ckpt_interval, buffer);
 	pack32(step_ptr->job_ptr->user_id, buffer);
 	pack32(task_cnt, buffer);
@@ -1165,11 +1522,12 @@ static void _pack_ctld_job_step_info(struct step_record *step_ptr, Buf buffer)
 	}
 	pack_time(run_time, buffer);
 	packstr(step_ptr->job_ptr->partition, buffer);
+	packstr(step_ptr->resv_ports, buffer);
 	packstr(node_list, buffer);
 	packstr(step_ptr->name, buffer);
 	packstr(step_ptr->network, buffer);
 	pack_bit_fmt(step_ptr->step_node_bitmap, buffer);
-	packstr(step_ptr->ckpt_path, buffer);
+	packstr(step_ptr->ckpt_dir, buffer);
 	
 }
 
@@ -1283,29 +1641,35 @@ extern int pack_ctld_job_step_info_response_msg(uint32_t job_id,
 }
 
 /* 
- * step_on_node - determine if the specified job has any job steps allocated to 
- * 	the specified node 
+ * kill_step_on_node - determine if the specified job has any job steps
+ *	allocated to the specified node and kill them unless no_kill flag
+ *	is set on the step
  * IN job_ptr - pointer to an active job record
  * IN node_ptr - pointer to a node record
- * RET true of job has step on the node, false otherwise 
+ * RET count of killed job steps
  */
-bool step_on_node(struct job_record  *job_ptr, struct node_record *node_ptr)
+extern int kill_step_on_node(struct job_record  *job_ptr, 
+			     struct node_record *node_ptr)
 {
 	ListIterator step_iterator;
 	struct step_record *step_ptr;
-	bool found = false;
+	int found = 0;
 	int bit_position;
 
 	if ((job_ptr == NULL) || (node_ptr == NULL))
-		return false;
+		return found;
 
 	bit_position = node_ptr - node_record_table_ptr;
 	step_iterator = list_iterator_create (job_ptr->step_list);	
 	while ((step_ptr = (struct step_record *) list_next (step_iterator))) {
-		if (bit_test(step_ptr->step_node_bitmap, bit_position)) {
-			found = true;
-			break;
-		}
+		if (step_ptr->no_kill ||
+		    (bit_test(step_ptr->step_node_bitmap, bit_position) == 0))
+			continue;
+		info("killing step %u.%u on down node %s", 
+		     job_ptr->job_id, step_ptr->step_id, node_ptr->name);
+		srun_step_complete(step_ptr);
+		signal_step_tasks(step_ptr, SIGKILL);
+		found++;
 	}		
 
 	list_iterator_destroy (step_iterator);
@@ -1353,40 +1717,23 @@ extern int job_step_checkpoint(checkpoint_msg_t *ckpt_ptr,
 		goto reply;
 	}
 
-	bzero((void *)&resp_data, sizeof(checkpoint_resp_msg_t));
-	/* find the individual job step */
-	if (ckpt_ptr->step_id != NO_VAL) {
-		step_ptr = find_step_record(job_ptr, ckpt_ptr->step_id);
-		if (step_ptr == NULL) {
-			rc = ESLURM_INVALID_JOB_ID;
-			goto reply;
-		} else {
-			rc = checkpoint_op(ckpt_ptr->op, ckpt_ptr->data, 
-				(void *)step_ptr, &resp_data.event_time, 
-				&resp_data.error_code, &resp_data.error_msg);
-			last_job_update = time(NULL);
-		}
-	}
-
-	/* operate on all of a job's steps */
-	else {
-		int update_rc = -2;
-		ListIterator step_iterator;
-
-		step_iterator = list_iterator_create (job_ptr->step_list);
-		while ((step_ptr = (struct step_record *) 
-					list_next (step_iterator))) {
-			update_rc = checkpoint_op(ckpt_ptr->op, 
-						  ckpt_ptr->data,
-						  (void *)step_ptr,
-						  &resp_data.event_time,
-						  &resp_data.error_code,
-						  &resp_data.error_msg);
-			rc = MAX(rc, update_rc);
+	memset((void *)&resp_data, 0, sizeof(checkpoint_resp_msg_t));
+	step_ptr = find_step_record(job_ptr, ckpt_ptr->step_id);
+	if (step_ptr == NULL) {
+		rc = ESLURM_INVALID_JOB_ID;
+	} else {
+		if (ckpt_ptr->image_dir == NULL) {
+			ckpt_ptr->image_dir = xstrdup(step_ptr->ckpt_dir);
 		}
-		if (update_rc != -2)	/* some work done */
-			last_job_update = time(NULL);
-		list_iterator_destroy (step_iterator);
+		xstrfmtcat(ckpt_ptr->image_dir, "/%u.%u", job_ptr->job_id, 
+			   step_ptr->step_id);
+
+		rc = checkpoint_op(ckpt_ptr->job_id, ckpt_ptr->step_id, 
+				   step_ptr, ckpt_ptr->op, ckpt_ptr->data,
+				   ckpt_ptr->image_dir, &resp_data.event_time, 
+				   &resp_data.error_code, 
+				   &resp_data.error_msg);
+		last_job_update = time(NULL);
 	}
 
     reply:
@@ -1520,12 +1867,13 @@ extern int job_step_checkpoint_task_comp(checkpoint_task_comp_msg_t *ckpt_ptr,
  * step_partial_comp - Note the completion of a job step on at least
  *	some of its nodes
  * IN req     - step_completion_msg RPC from slurmstepd
+ * IN uid     - UID issuing the request
  * OUT rem    - count of nodes for which responses are still pending
  * OUT max_rc - highest return code for any step thus far
  * RET 0 on success, otherwise ESLURM error code
  */
-extern int step_partial_comp(step_complete_msg_t *req, int *rem, 
-			     uint32_t *max_rc)
+extern int step_partial_comp(step_complete_msg_t *req, uid_t uid, 
+			     int *rem, uint32_t *max_rc)
 {
 	struct job_record *job_ptr;
 	struct step_record *step_ptr;
@@ -1533,13 +1881,29 @@ extern int step_partial_comp(step_complete_msg_t *req, int *rem,
 
 	/* find the job, step, and validate input */
 	job_ptr = find_job_record (req->job_id);
-	if (job_ptr == NULL)
+	if (job_ptr == NULL) {
+		info("step_partial_comp: JobID=%u invalid", req->job_id);
 		return ESLURM_INVALID_JOB_ID;
-	if (job_ptr->job_state == JOB_PENDING)
+	}
+	if (job_ptr->job_state == JOB_PENDING) {
+		info("step_partial_comp: JobID=%u pending", req->job_id);
 		return ESLURM_JOB_PENDING;
+	}
+
+	if ((!validate_super_user(uid)) && (uid != job_ptr->user_id)) {
+		/* Normally from slurmstepd, from srun on some failures */
+		error("Security violation: "
+		      "REQUEST_STEP_COMPLETE RPC for job %u from uid=%u",
+		      job_ptr->job_id, (unsigned int) uid);
+		return ESLURM_USER_ID_MISSING;
+	}
+
 	step_ptr = find_step_record(job_ptr, req->job_step_id);
-	if (step_ptr == NULL)
+	if (step_ptr == NULL) {
+		info("step_partial_comp: StepID=%u.%u invalid", 
+		     req->job_id, req->job_step_id);
 		return ESLURM_INVALID_JOB_ID;
+	}
 	if (step_ptr->batch_step) {
 		if(rem)
 			*rem = 0;
@@ -1555,8 +1919,8 @@ extern int step_partial_comp(step_complete_msg_t *req, int *rem,
 		return SLURM_SUCCESS;
 	}
 	if (req->range_last < req->range_first) {
-		error("step_partial_comp: range: %u-%u", req->range_first, 
-			req->range_last);
+		error("step_partial_comp: JobID=%u range=%u-%u", 
+		      req->job_id, req->range_first, req->range_last);
 		return EINVAL;
 	}
 
@@ -1566,8 +1930,8 @@ extern int step_partial_comp(step_complete_msg_t *req, int *rem,
 		/* initialize the node bitmap for exited nodes */
 		nodes = bit_set_count(step_ptr->step_node_bitmap);
 		if (req->range_last >= nodes) {	/* range is zero origin */
-			error("step_partial_comp: last=%u, nodes=%d",
-				req->range_last, nodes);
+			error("step_partial_comp: JobID=%u last=%u, nodes=%d",
+			      req->job_id, req->range_last, nodes);
 			return EINVAL;
 		}
 		step_ptr->exit_node_bitmap = bit_alloc(nodes);
@@ -1577,8 +1941,8 @@ extern int step_partial_comp(step_complete_msg_t *req, int *rem,
 	} else {
 		nodes = _bitstr_bits(step_ptr->exit_node_bitmap);
 		if (req->range_last >= nodes) {	/* range is zero origin */
-			error("step_partial_comp: last=%u, nodes=%d",
-				req->range_last, nodes);
+			error("step_partial_comp: JobID=%u last=%u, nodes=%d",
+			      req->job_id, req->range_last, nodes);
 			return EINVAL;
 		}
 		step_ptr->exit_code = MAX(step_ptr->exit_code, req->step_rc);
@@ -1784,18 +2148,29 @@ resume_job_step(struct job_record *job_ptr)
  */
 extern void dump_job_step_state(struct step_record *step_ptr, Buf buffer)
 {
-	pack16(step_ptr->step_id, buffer);
+	pack32(step_ptr->step_id, buffer);
 	pack16(step_ptr->cyclic_alloc, buffer);
 	pack16(step_ptr->port, buffer);
 	pack16(step_ptr->ckpt_interval, buffer);
-	pack16(step_ptr->mem_per_task, buffer);
+	pack16(step_ptr->cpus_per_task, buffer);
+	pack16(step_ptr->resv_port_cnt, buffer);
+
+	pack8(step_ptr->no_kill, buffer);
 
+	pack32(step_ptr->cpu_count, buffer);
+	pack32(step_ptr->mem_per_task, buffer);
 	pack32(step_ptr->exit_code, buffer);
 	if (step_ptr->exit_code != NO_VAL) {
 		pack_bit_fmt(step_ptr->exit_node_bitmap, buffer);
 		pack16((uint16_t) _bitstr_bits(step_ptr->exit_node_bitmap), 
 			buffer);
 	}
+	if (step_ptr->core_bitmap_job) {
+		uint32_t core_size = bit_size(step_ptr->core_bitmap_job);
+		pack32(core_size, buffer);
+		pack_bit_fmt(step_ptr->core_bitmap_job, buffer);
+	} else
+		pack32((uint32_t) 0, buffer);
 
 	pack_time(step_ptr->start_time, buffer);
 	pack_time(step_ptr->pre_sus_time, buffer);
@@ -1803,9 +2178,10 @@ extern void dump_job_step_state(struct step_record *step_ptr, Buf buffer)
 	pack_time(step_ptr->ckpt_time, buffer);
 
 	packstr(step_ptr->host,  buffer);
+	packstr(step_ptr->resv_ports, buffer);
 	packstr(step_ptr->name, buffer);
 	packstr(step_ptr->network, buffer);
-	packstr(step_ptr->ckpt_path, buffer);
+	packstr(step_ptr->ckpt_dir, buffer);
 	pack16(step_ptr->batch_step, buffer);
 	if (!step_ptr->batch_step) {
 		pack_slurm_step_layout(step_ptr->step_layout, buffer);
@@ -1815,44 +2191,56 @@ extern void dump_job_step_state(struct step_record *step_ptr, Buf buffer)
 }
 
 /*
- * Create a new job step from data in a buffer (as created by dump_job_step_state)
+ * Create a new job step from data in a buffer (as created by 
+ *	dump_job_step_state)
  * IN/OUT - job_ptr - point to a job for which the step is to be loaded.
- * IN/OUT buffer - location from which to get data, pointers automatically advanced
+ * IN/OUT buffer - location to get data from, pointers advanced
  */
 extern int load_step_state(struct job_record *job_ptr, Buf buffer)
 {
 	struct step_record *step_ptr = NULL;
-	uint16_t step_id, cyclic_alloc, port, batch_step, bit_cnt;
-	uint16_t ckpt_interval, mem_per_task;
-	uint32_t exit_code, name_len;
+	uint8_t no_kill;
+	uint16_t cyclic_alloc, port, batch_step, bit_cnt;
+	uint16_t ckpt_interval, cpus_per_task, resv_port_cnt;
+	uint32_t core_size, cpu_count, exit_code, mem_per_task, name_len;
+	uint32_t step_id;
 	time_t start_time, pre_sus_time, tot_sus_time, ckpt_time;
-	char *host = NULL, *ckpt_path = NULL;
-	char *name = NULL, *network = NULL, *bit_fmt = NULL;
+	char *host = NULL, *ckpt_dir = NULL, *core_job = NULL;
+	char *resv_ports = NULL, *name = NULL, *network = NULL, *bit_fmt = NULL;
 	switch_jobinfo_t switch_tmp = NULL;
 	check_jobinfo_t check_tmp = NULL;
 	slurm_step_layout_t *step_layout = NULL;
 	
-	safe_unpack16(&step_id, buffer);
+	safe_unpack32(&step_id, buffer);
 	safe_unpack16(&cyclic_alloc, buffer);
 	safe_unpack16(&port, buffer);
 	safe_unpack16(&ckpt_interval, buffer);
-	safe_unpack16(&mem_per_task, buffer);
+	safe_unpack16(&cpus_per_task, buffer);
+	safe_unpack16(&resv_port_cnt, buffer);
 
+	safe_unpack8(&no_kill, buffer);
+
+	safe_unpack32(&cpu_count, buffer);
+	safe_unpack32(&mem_per_task, buffer);
 	safe_unpack32(&exit_code, buffer);
 	if (exit_code != NO_VAL) {
 		safe_unpackstr_xmalloc(&bit_fmt, &name_len, buffer);
 		safe_unpack16(&bit_cnt, buffer);
 	}
-	
+	safe_unpack32(&core_size, buffer);
+	if (core_size)
+		safe_unpackstr_xmalloc(&core_job, &name_len, buffer);
+
 	safe_unpack_time(&start_time, buffer);
 	safe_unpack_time(&pre_sus_time, buffer);
 	safe_unpack_time(&tot_sus_time, buffer);
 	safe_unpack_time(&ckpt_time, buffer);
 
 	safe_unpackstr_xmalloc(&host, &name_len, buffer);
+	safe_unpackstr_xmalloc(&resv_ports, &name_len, buffer);
 	safe_unpackstr_xmalloc(&name, &name_len, buffer);
 	safe_unpackstr_xmalloc(&network, &name_len, buffer);
-	safe_unpackstr_xmalloc(&ckpt_path, &name_len, buffer);
+	safe_unpackstr_xmalloc(&ckpt_dir, &name_len, buffer);
 	safe_unpack16(&batch_step, buffer);
 	if (!batch_step) {
 		if (unpack_slurm_step_layout(&step_layout, buffer))
@@ -1871,30 +2259,39 @@ extern int load_step_state(struct job_record *job_ptr, Buf buffer)
 		      job_ptr->job_id, step_id, cyclic_alloc);
 		goto unpack_error;
 	}
+	if (no_kill > 1) {
+		error("Invalid data for job %u.%u: no_kill=%u",
+		      job_ptr->job_id, step_id, no_kill);
+		goto unpack_error;
+	}
 
 	step_ptr = find_step_record(job_ptr, step_id);
 	if (step_ptr == NULL)
-		step_ptr = create_step_record(job_ptr);
+		step_ptr = _create_step_record(job_ptr);
 	if (step_ptr == NULL)
 		goto unpack_error;
 
 	/* set new values */
 	step_ptr->step_id      = step_id;
+	step_ptr->cpu_count    = cpu_count;
+	step_ptr->cpus_per_task= cpus_per_task;
 	step_ptr->cyclic_alloc = cyclic_alloc;
+	step_ptr->resv_port_cnt= resv_port_cnt;
+	step_ptr->resv_ports   = resv_ports;
 	step_ptr->name         = name;
 	step_ptr->network      = network;
-	step_ptr->ckpt_path    = ckpt_path;
+	step_ptr->no_kill      = no_kill;
+	step_ptr->ckpt_dir     = ckpt_dir;
 	step_ptr->port         = port;
 	step_ptr->ckpt_interval= ckpt_interval;
 	step_ptr->mem_per_task = mem_per_task;
 	step_ptr->host         = host;
-	step_ptr->batch_step   = batch_step;
 	host                   = NULL;  /* re-used, nothing left to free */
+	step_ptr->batch_step   = batch_step;
 	step_ptr->start_time   = start_time;
 	step_ptr->pre_sus_time = pre_sus_time;
 	step_ptr->tot_sus_time = tot_sus_time;
 	step_ptr->ckpt_time    = ckpt_time;
-	step_ptr->cpus_per_task = 1;	/* Need to save/restore in v1.4 */
 
 	slurm_step_layout_destroy(step_ptr->step_layout);
 	step_ptr->step_layout  = step_layout;
@@ -1916,6 +2313,14 @@ extern int load_step_state(struct job_record *job_ptr, Buf buffer)
 		}
 		xfree(bit_fmt);
 	}
+	if (core_size) {
+		step_ptr->core_bitmap_job = bit_alloc(core_size);
+		if (bit_unfmt(step_ptr->core_bitmap_job, core_job)) {
+			error("error recovering core_bitmap_job from %s",
+			      core_job);
+		}
+		xfree(core_job);
+	}
 
 	if (step_ptr->step_layout && step_ptr->step_layout->node_list) {
 		switch_g_job_step_allocated(switch_tmp, 
@@ -1928,10 +2333,12 @@ extern int load_step_state(struct job_record *job_ptr, Buf buffer)
 
       unpack_error:
 	xfree(host);
+	xfree(resv_ports);
 	xfree(name);
 	xfree(network);
-	xfree(ckpt_path);
+	xfree(ckpt_dir);
 	xfree(bit_fmt);
+	xfree(core_job);
 	if (switch_tmp)
 		switch_free_jobinfo(switch_tmp);
 	slurm_step_layout_destroy(step_layout);
@@ -1950,6 +2357,7 @@ extern void step_checkpoint(void)
 	time_t event_time;
 	uint32_t error_code;
 	char *error_msg;
+	checkpoint_msg_t ckpt_req;
 
 	/* Exit if "checkpoint/none" is configured */
 	if (ckpt_run == -1) {
@@ -1967,20 +2375,62 @@ extern void step_checkpoint(void)
 	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
 		if (job_ptr->job_state != JOB_RUNNING)
 			continue;
+		if (job_ptr->batch_flag &&
+		    (job_ptr->ckpt_interval != 0)) { /* periodic job ckpt */
+			ckpt_due = job_ptr->ckpt_time +
+				   (job_ptr->ckpt_interval * 60);
+			if (ckpt_due > now)
+				continue;
+			/* 
+			 * DO NOT initiate a checkpoint request if the job is
+			 * started just now, in case it is restarting from checkpoint.
+			 */
+			ckpt_due = job_ptr->start_time +
+				   (job_ptr->ckpt_interval * 60);
+			if (ckpt_due > now)
+				continue;
+
+			ckpt_req.op = CHECK_CREATE;
+			ckpt_req.data = 0;
+			ckpt_req.job_id = job_ptr->job_id;
+			ckpt_req.step_id = SLURM_BATCH_SCRIPT;
+			ckpt_req.image_dir = NULL;
+			job_checkpoint(&ckpt_req, getuid(), -1);
+			job_ptr->ckpt_time = now;
+			last_job_update = now;
+			continue; /* ignore periodic step ckpt */
+		}
 		step_iterator = list_iterator_create (job_ptr->step_list);
 		while ((step_ptr = (struct step_record *) 
 				list_next (step_iterator))) {
+			char *image_dir = NULL;
 			if (step_ptr->ckpt_interval == 0)
 				continue;
 			ckpt_due = step_ptr->ckpt_time +
-				(step_ptr->ckpt_interval * 60);
+				   (step_ptr->ckpt_interval * 60);
 			if (ckpt_due > now) 
 				continue;
+			/* 
+			 * DO NOT initiate a checkpoint request if the step is
+			 * started just now, in case it is restarting from 
+			 * checkpoint.
+			 */
+			ckpt_due = step_ptr->start_time + 
+				   (step_ptr->ckpt_interval * 60);
+			if (ckpt_due > now)
+				continue;
+
 			step_ptr->ckpt_time = now;
 			last_job_update = now;
-			(void) checkpoint_op(CHECK_CREATE, 0, 
-				(void *)step_ptr, &event_time, 
-				&error_code, &error_msg);
+			image_dir = xstrdup(step_ptr->ckpt_dir);
+			xstrfmtcat(image_dir, "/%u.%u", job_ptr->job_id, 
+				   step_ptr->step_id);
+			(void) checkpoint_op(job_ptr->job_id, 
+					     step_ptr->step_id,
+					     step_ptr, CHECK_CREATE, 0, 
+					     image_dir, &event_time,
+					     &error_code, &error_msg);
+			xfree(image_dir);
 		}
 		list_iterator_destroy (step_iterator);
 	}
diff --git a/src/slurmctld/topo_plugin.c b/src/slurmctld/topo_plugin.c
new file mode 100644
index 000000000..9d8837595
--- /dev/null
+++ b/src/slurmctld/topo_plugin.c
@@ -0,0 +1,251 @@
+/*****************************************************************************\
+ *  topo_plugin.c - Topology plugin function stup.
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include <pthread.h>
+
+#include "src/common/log.h"
+#include "src/common/plugrack.h"
+#include "src/common/slurm_protocol_api.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
+#if 0
+#include "src/slurmctld/slurmctld.h"
+#endif
+
+
+/* ************************************************************************ */
+/*  TAG(                        slurm_topo_ops_t                         )  */
+/* ************************************************************************ */
+typedef struct slurm_topo_ops {
+	int		(*build_config)		( void );
+} slurm_topo_ops_t;
+
+
+/* ************************************************************************ */
+/*  TAG(                        slurm_topo_contex_t                      )  */
+/* ************************************************************************ */
+typedef struct slurm_topo_context {
+	char	       	*topo_type;
+	plugrack_t     	plugin_list;
+	plugin_handle_t	cur_plugin;
+	int		topo_errno;
+	slurm_topo_ops_t ops;
+} slurm_topo_context_t;
+
+static slurm_topo_context_t	*g_topo_context = NULL;
+static pthread_mutex_t		g_topo_context_lock = PTHREAD_MUTEX_INITIALIZER;
+
+
+/* ************************************************************************ */
+/*  TAG(                       slurm_topo_get_ops                        )  */
+/* ************************************************************************ */
+static slurm_topo_ops_t *
+slurm_topo_get_ops( slurm_topo_context_t *c )
+{
+	/*
+	 * Must be synchronized with slurm_topo_ops_t above.
+	 */
+	static const char *syms[] = {
+		"topo_build_config",
+	};
+	int n_syms = sizeof( syms ) / sizeof( char * );
+
+	/* Find the correct plugin. */
+        c->cur_plugin = plugin_load_and_link(c->topo_type, n_syms, syms,
+					     (void **) &c->ops);
+        if ( c->cur_plugin != PLUGIN_INVALID_HANDLE ) 
+        	return &c->ops;
+
+	error("Couldn't find the specified plugin name for %s "
+	      "looking at all files",
+	      c->topo_type);
+	
+	/* Get plugin list. */
+	if ( c->plugin_list == NULL ) {
+		char *plugin_dir;
+		c->plugin_list = plugrack_create();
+		if ( c->plugin_list == NULL ) {
+			error( "cannot create plugin manager" );
+			return NULL;
+		}
+		plugrack_set_major_type( c->plugin_list, "topo" );
+		plugrack_set_paranoia( c->plugin_list,
+				       PLUGRACK_PARANOIA_NONE,
+				       0 );
+		plugin_dir = slurm_get_plugin_dir();
+		plugrack_read_dir( c->plugin_list, plugin_dir );
+		xfree(plugin_dir);
+	}
+
+	c->cur_plugin = plugrack_use_by_type( c->plugin_list, c->topo_type );
+	if ( c->cur_plugin == PLUGIN_INVALID_HANDLE ) {
+		error( "cannot find topology plugin for %s", c->topo_type );
+		return NULL;
+	}
+
+	/* Dereference the API. */
+	if ( plugin_get_syms( c->cur_plugin,
+			      n_syms,
+			      syms,
+			      (void **) &c->ops ) < n_syms ) {
+		error( "incomplete topology plugin detected" );
+		return NULL;
+	}
+
+	return &c->ops;
+}
+
+
+/* ************************************************************************ */
+/*  TAG(                  slurm_topo_context_create                      )  */
+/* ************************************************************************ */
+static slurm_topo_context_t *
+slurm_topo_context_create( const char *topo_type )
+{
+	slurm_topo_context_t *c;
+
+	if ( topo_type == NULL ) {
+		debug3( "slurm_topo_context:  no topology type" );
+		return NULL;
+	}
+
+	c = xmalloc( sizeof( slurm_topo_context_t ) );
+	c->topo_type	= xstrdup( topo_type );
+	c->plugin_list	= NULL;
+	c->cur_plugin	= PLUGIN_INVALID_HANDLE;
+	c->topo_errno 	= SLURM_SUCCESS;
+
+	return c;
+}
+
+
+/* ************************************************************************ */
+/*  TAG(                  slurm_topo_context_destroy                     )  */
+/* ************************************************************************ */
+static int
+slurm_topo_context_destroy( slurm_topo_context_t *c )
+{
+	/*
+	 * Must check return code here because plugins might still
+	 * be loaded and active.
+	 */
+	if ( c->plugin_list ) {
+		if ( plugrack_destroy( c->plugin_list ) != SLURM_SUCCESS ) {
+			return SLURM_ERROR;
+		}
+	} else {
+		plugin_unload(c->cur_plugin);
+	}
+
+	xfree( c->topo_type );
+	xfree( c );
+
+	return SLURM_SUCCESS;
+}
+
+
+/* *********************************************************************** */
+/*  TAG(                        slurm_topo_init                         )  */
+/*                                                                         */
+/*  NOTE: The topology plugin can not be changed via reconfiguration       */
+/*        due to background threads, job priorities, etc. Slurmctld must   */
+/*        be restarted  and job priority changes may be required to change */
+/*        the topology type.                                               */
+/* *********************************************************************** */
+extern int
+slurm_topo_init( void )
+{
+	int retval = SLURM_SUCCESS;
+	char *topo_type = NULL;
+	
+	slurm_mutex_lock( &g_topo_context_lock );
+
+	if ( g_topo_context )
+		goto done;
+
+	topo_type = slurm_get_topology_plugin();
+	g_topo_context = slurm_topo_context_create( topo_type );
+	if ( g_topo_context == NULL ) {
+		error( "cannot create topology context for %s",
+			 topo_type );
+		retval = SLURM_ERROR;
+		goto done;
+	}
+
+	if ( slurm_topo_get_ops( g_topo_context ) == NULL ) {
+		error( "cannot resolve topology plugin operations" );
+		slurm_topo_context_destroy( g_topo_context );
+		g_topo_context = NULL;
+		retval = SLURM_ERROR;
+	}
+
+ done:
+	slurm_mutex_unlock( &g_topo_context_lock );
+	xfree(topo_type);
+	return retval;
+}
+
+/* *********************************************************************** */
+/*  TAG(                        slurm_topo_fini                         )  */
+/* *********************************************************************** */
+extern int
+slurm_topo_fini( void )
+{
+	int rc;
+
+	if (!g_topo_context)
+		return SLURM_SUCCESS;
+
+	rc = slurm_topo_context_destroy(g_topo_context);
+	g_topo_context = NULL;
+	return rc;
+}
+
+
+/* *********************************************************************** */
+/*  TAG(                      slurm_topo_build_config                   )  */
+/* *********************************************************************** */
+extern int
+slurm_topo_build_config( void )
+{
+	if ( slurm_topo_init() < 0 )
+		return SLURM_ERROR;
+
+	return (*(g_topo_context->ops.build_config))();
+}
+
diff --git a/src/slurmctld/topo_plugin.h b/src/slurmctld/topo_plugin.h
new file mode 100644
index 000000000..aab14d5c5
--- /dev/null
+++ b/src/slurmctld/topo_plugin.h
@@ -0,0 +1,71 @@
+/*****************************************************************************\
+ *  topo_plugin.h - Define topology plugin functions.
+ *****************************************************************************
+ *  Copyright (C) 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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef __SLURM_CONTROLLER_TOPO_PLUGIN_API_H__
+#define __SLURM_CONTROLLER_TOPO_PLUGIN_API_H__
+
+#include <slurm/slurm.h>
+#include <src/slurmctld/slurmctld.h>
+
+/*
+ * Initialize the topology plugin.
+ *
+ * Returns a SLURM errno.
+ */
+int slurm_topo_init( void );
+
+/*
+ * Terminate the topology plugin.
+ * 
+ * Returns a SLURM errno.
+ */
+extern int slurm_topo_fini(void);
+
+/*
+ **************************************************************************
+ *                          P L U G I N   C A L L S                       *
+ **************************************************************************
+ */
+
+/*
+ * slurm_topo_build_config - build or rebuild system topology information
+ *	after a system startup or reconfiguration.
+ */
+int slurm_topo_build_config( void );
+
+#endif /*__SLURM_CONTROLLER_TOPO_PLUGIN_API_H__*/
diff --git a/src/slurmctld/trigger_mgr.c b/src/slurmctld/trigger_mgr.c
index f9ae9f399..142e4eeb2 100644
--- a/src/slurmctld/trigger_mgr.c
+++ b/src/slurmctld/trigger_mgr.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -61,17 +62,11 @@
 #include "src/slurmctld/state_save.h"
 #include "src/slurmctld/trigger_mgr.h"
 
-#define _DEBUG 0
 #define MAX_PROG_TIME 300	/* maximum run time for program */
 
 /* Change TRIGGER_STATE_VERSION value when changing the state save format */
 #define TRIGGER_STATE_VERSION      "VER002"
 
-/* TRIG_IS_JOB_FINI differs from IS_JOB_FINISHED by considering 
- * completing jobs as not really finished */
-#define TRIG_IS_JOB_FINI(_X)             \
-        (IS_JOB_FINISHED(_X) && ((_X->job_state & JOB_COMPLETING) == 0))
-
 List trigger_list;
 uint32_t next_trigger_id = 1;
 static pthread_mutex_t trigger_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -140,7 +135,6 @@ static char *_trig_type(uint16_t trig_type)
 		return "unknown";
 }
 
-#if _DEBUG
 static int _trig_offset(uint16_t offset)
 {
 	static int rc;
@@ -153,6 +147,9 @@ static void _dump_trigger_msg(char *header, trigger_info_msg_t *msg)
 {
 	int i;
 
+	if ((slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) == 0)
+		return;
+
 	info(header);
 	if ((msg == NULL) || (msg->record_count == 0)) {
 		info("Trigger has no entries");
@@ -171,11 +168,6 @@ static void _dump_trigger_msg(char *header, trigger_info_msg_t *msg)
 			msg->trigger_array[i].program);
 	}
 }
-#else
-static void _dump_trigger_msg(char *header, trigger_info_msg_t *msg)
-{
-}
-#endif
 
 /* Validate trigger program */
 static bool _validate_trigger(trig_mgr_info_t *trig_in)
@@ -495,16 +487,16 @@ static int _load_trigger_state(Buf buffer)
 	if (trig_ptr->res_type == TRIGGER_RES_TYPE_JOB) {
 		trig_ptr->job_id = (uint32_t) atol(trig_ptr->res_id);
 		trig_ptr->job_ptr = find_job_record(trig_ptr->job_id);
-		if ((trig_ptr->job_id == 0)
-		||  (trig_ptr->job_ptr == NULL)
-		||  (TRIG_IS_JOB_FINI(trig_ptr->job_ptr)))
+		if ((trig_ptr->job_id == 0)     ||
+		    (trig_ptr->job_ptr == NULL) ||
+		    (IS_JOB_COMPLETED(trig_ptr->job_ptr)))
 			goto unpack_error;
 	} else {
 		trig_ptr->job_id = 0;
 		trig_ptr->job_ptr = NULL;
-		if ((trig_ptr->res_id != NULL)
-		&&  (trig_ptr->res_id[0] != '*')
-		&&  (node_name2bitmap(trig_ptr->res_id, false,
+		if ((trig_ptr->res_id != NULL)   &&
+		    (trig_ptr->res_id[0] != '*') &&
+		    (node_name2bitmap(trig_ptr->res_id, false,
 				&trig_ptr->nodes_bitmap) != 0))
 			goto unpack_error;
 	}
@@ -528,6 +520,7 @@ unpack_error:
 }
 extern int trigger_state_save(void)
 {
+	/* Save high-water mark to avoid buffer growth with copies */
 	static int high_buffer_size = (1024 * 1024);
 	int error_code = 0, log_fd;
 	char *old_file, *new_file, *reg_file;
@@ -684,21 +677,21 @@ static void _trigger_job_event(trig_mgr_info_t *trig_in, time_t now)
 
 	if ((trig_in->trig_type & TRIGGER_TYPE_FINI)
 	&&  ((trig_in->job_ptr == NULL) ||
-	     (TRIG_IS_JOB_FINI(trig_in->job_ptr)))) {
+	     (IS_JOB_COMPLETED(trig_in->job_ptr)))) {
 		trig_in->state = 1;
 		trig_in->trig_time = now + (trig_in->trig_time - 0x8000);
-#if _DEBUG
-		info("trigger[%u] event for job %u fini",
-			trig_in->trig_id, trig_in->job_id);
-#endif
+		if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+			info("trigger[%u] event for job %u fini",
+				trig_in->trig_id, trig_in->job_id);
+		}
 		return;
 	}
 
 	if (trig_in->job_ptr == NULL) {
-#if _DEBUG
-		info("trigger[%u] for defunct job %u",
-			trig_in->trig_id, trig_in->job_id);
-#endif
+		if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+			info("trigger[%u] for defunct job %u",
+				trig_in->trig_id, trig_in->job_id);
+		}
 		trig_in->state = 2;
 		trig_in->trig_time = now;
 		return;
@@ -709,10 +702,10 @@ static void _trigger_job_event(trig_mgr_info_t *trig_in, time_t now)
 		if (rem_time <= (0x8000 - trig_in->trig_time)) {
 			trig_in->state = 1;
 			trig_in->trig_time = now;
-#if _DEBUG
-			info("trigger[%u] for job %u time",
-				trig_in->trig_id, trig_in->job_id);
-#endif
+			if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+				info("trigger[%u] for job %u time",
+					trig_in->trig_id, trig_in->job_id);
+			}
 			return;
 		}
 	}
@@ -721,10 +714,10 @@ static void _trigger_job_event(trig_mgr_info_t *trig_in, time_t now)
 		if (trigger_down_nodes_bitmap
 		&&  bit_overlap(trig_in->job_ptr->node_bitmap, 
 				trigger_down_nodes_bitmap)) {
-#if _DEBUG
-			info("trigger[%u] for job %u down",
-				trig_in->trig_id, trig_in->job_id);
-#endif
+			if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+				info("trigger[%u] for job %u down",
+					trig_in->trig_id, trig_in->job_id);
+			}
 			trig_in->state = 1;
 			trig_in->trig_time = now + 
 					(trig_in->trig_time - 0x8000);
@@ -736,10 +729,10 @@ static void _trigger_job_event(trig_mgr_info_t *trig_in, time_t now)
 		if (trigger_fail_nodes_bitmap
 		&&  bit_overlap(trig_in->job_ptr->node_bitmap, 
 				trigger_fail_nodes_bitmap)) {
-#if _DEBUG
-			info("trigger[%u] for job %u node fail",
-				trig_in->trig_id, trig_in->job_id);
-#endif
+			if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+				info("trigger[%u] for job %u node fail",
+					trig_in->trig_id, trig_in->job_id);
+			}
 			trig_in->state = 1;
 			trig_in->trig_time = now + 
 					(trig_in->trig_time - 0x8000);
@@ -754,10 +747,10 @@ static void _trigger_job_event(trig_mgr_info_t *trig_in, time_t now)
 			trig_in->state = 1;
 			trig_in->trig_time = now + 
 					(0x8000 - trig_in->trig_time);
-#if _DEBUG
-			info("trigger[%u] for job %u up",
-				trig_in->trig_id, trig_in->job_id);
-#endif
+			if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+				info("trigger[%u] for job %u up",
+					trig_in->trig_id, trig_in->job_id);
+			}
 			return;
 		}
 	}
@@ -769,9 +762,8 @@ static void _trigger_node_event(trig_mgr_info_t *trig_in, time_t now)
 	&&   trigger_block_err) {
 		trig_in->state = 1;
 		trig_in->trig_time = now + (trig_in->trig_time - 0x8000);
-#if _DEBUG
-		info("trigger[%u] for block_err", trig_in->trig_id);
-#endif
+		if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS)
+			info("trigger[%u] for block_err", trig_in->trig_id);
 		return;
 	}
 
@@ -795,10 +787,10 @@ static void _trigger_node_event(trig_mgr_info_t *trig_in, time_t now)
 		if (trig_in->state == 1) {
 			trig_in->trig_time = now + 
 					(trig_in->trig_time - 0x8000);
-#if _DEBUG
-			info("trigger[%u] for node %s down",
-				trig_in->trig_id, trig_in->res_id);
-#endif
+			if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+				info("trigger[%u] for node %s down",
+					trig_in->trig_id, trig_in->res_id);
+			}
 			return;
 		}
 	}
@@ -823,10 +815,10 @@ static void _trigger_node_event(trig_mgr_info_t *trig_in, time_t now)
 		if (trig_in->state == 1) {
 			trig_in->trig_time = now + 
 					(trig_in->trig_time - 0x8000);
-#if _DEBUG
-			info("trigger[%u] for node %s drained",
-				trig_in->trig_id, trig_in->res_id);
-#endif
+			if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+				info("trigger[%u] for node %s drained",
+					trig_in->trig_id, trig_in->res_id);
+			}
 			return;
 		}
 	}
@@ -851,10 +843,10 @@ static void _trigger_node_event(trig_mgr_info_t *trig_in, time_t now)
 		if (trig_in->state == 1) {
 			trig_in->trig_time = now + 
 					(trig_in->trig_time - 0x8000);
-#if _DEBUG
-			info("trigger[%u] for node %s fail",
-				trig_in->trig_id, trig_in->res_id);
-#endif
+			if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+				info("trigger[%u] for node %s fail",
+					trig_in->trig_id, trig_in->res_id);
+			}
 			return;
 		}
 	}
@@ -893,10 +885,10 @@ static void _trigger_node_event(trig_mgr_info_t *trig_in, time_t now)
 		bit_free(trigger_idle_node_bitmap);
 		if (trig_in->state == 1) {
 			trig_in->trig_time = now;
-#if _DEBUG
-			info("trigger[%u] for node %s idle",
-				trig_in->trig_id, trig_in->res_id);
-#endif
+			if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+				info("trigger[%u] for node %s idle",
+					trig_in->trig_id, trig_in->res_id);
+			}
 			return;
 		}
 	}
@@ -921,10 +913,10 @@ static void _trigger_node_event(trig_mgr_info_t *trig_in, time_t now)
 		if (trig_in->state == 1) {
 			trig_in->trig_time = now + 
 					(trig_in->trig_time - 0x8000);
-#if _DEBUG
-			info("trigger[%u] for node %s up",
-				trig_in->trig_id, trig_in->res_id);
-#endif
+			if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+				info("trigger[%u] for node %s up",
+					trig_in->trig_id, trig_in->res_id);
+			}
 			return;
 		}
 	}
@@ -935,9 +927,8 @@ static void _trigger_node_event(trig_mgr_info_t *trig_in, time_t now)
 		trig_in->trig_time = now + (trig_in->trig_time - 0x8000);
 		xfree(trig_in->res_id);
 		trig_in->res_id = xstrdup("reconfig");
-#if _DEBUG
-		info("trigger[%u] for reconfig", trig_in->trig_id);
-#endif
+		if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS)
+			info("trigger[%u] for reconfig", trig_in->trig_id);
 		return;
 	}
 }
@@ -1049,13 +1040,13 @@ extern void trigger_process(void)
 		}
 		if ((trig_in->state == 1) &&
 		    (trig_in->trig_time <= now)) {
-#if _DEBUG
-			info("launching program for trigger[%u]",
-				trig_in->trig_id);
-			info("  uid=%u gid=%u program=%s arg=%s", 
-				trig_in->user_id, trig_in->group_id,
-				trig_in->program, trig_in->res_id);
-#endif
+			if (slurm_get_debug_flags() & DEBUG_FLAG_TRIGGERS) {
+				info("launching program for trigger[%u]",
+					trig_in->trig_id);
+				info("  uid=%u gid=%u program=%s arg=%s", 
+					trig_in->user_id, trig_in->group_id,
+					trig_in->program, trig_in->res_id);
+			}
 			trig_in->state = 2;
 			trig_in->trig_time = now;
 			state_change = true;
@@ -1082,9 +1073,11 @@ extern void trigger_process(void)
 			}
 
 			if (trig_in->group_id == 0) {
-#if _DEBUG
-				info("purging trigger[%u]", trig_in->trig_id);
-#endif
+				if (slurm_get_debug_flags() & 
+				    DEBUG_FLAG_TRIGGERS) {
+					info("purging trigger[%u]", 
+					     trig_in->trig_id);
+				}
 				list_delete_item(trig_iter);
 				state_change = true;
 			}
diff --git a/src/slurmctld/trigger_mgr.h b/src/slurmctld/trigger_mgr.h
index 69986d143..f9a61cccd 100644
--- a/src/slurmctld/trigger_mgr.h
+++ b/src/slurmctld/trigger_mgr.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/Makefile.in b/src/slurmd/Makefile.in
index 6e8612644..2af123cc5 100644
--- a/src/slurmd/Makefile.in
+++ b/src/slurmd/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -89,6 +93,10 @@ 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@
diff --git a/src/slurmd/common/proctrack.c b/src/slurmd/common/proctrack.c
index ec47637f3..796f4aec4 100644
--- a/src/slurmd/common/proctrack.c
+++ b/src/slurmd/common/proctrack.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/common/proctrack.h b/src/slurmd/common/proctrack.h
index 35325770e..61ac54ab0 100644
--- a/src/slurmd/common/proctrack.h
+++ b/src/slurmd/common/proctrack.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/common/reverse_tree.h b/src/slurmd/common/reverse_tree.h
index a406db9a3..7703c9044 100644
--- a/src/slurmd/common/reverse_tree.h
+++ b/src/slurmd/common/reverse_tree.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/common/run_script.c b/src/slurmd/common/run_script.c
index 7e848ff50..05d139b3e 100644
--- a/src/slurmd/common/run_script.c
+++ b/src/slurmd/common/run_script.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/common/run_script.h b/src/slurmd/common/run_script.h
index 837d4dce6..dbab911af 100644
--- a/src/slurmd/common/run_script.h
+++ b/src/slurmd/common/run_script.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/common/set_oomadj.c b/src/slurmd/common/set_oomadj.c
new file mode 100644
index 000000000..26d0a87cd
--- /dev/null
+++ b/src/slurmd/common/set_oomadj.c
@@ -0,0 +1,70 @@
+/*****************************************************************************\
+ *  set_oomadj.c - prevent slurmd/slurmstepd from being killed by the
+ *	kernel OOM killer
+ *****************************************************************************
+ *  Written by Hongjia Cao, National University of Defense Technology, China.
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "src/common/log.h"
+
+extern int set_oom_adj(int adj)
+{
+	int fd;
+	char oom_adj[16];
+
+	fd = open("/proc/self/oom_adj", O_WRONLY);
+	if (fd < 0) {
+		if (errno == ENOENT)
+			debug("failed to open /proc/self/oom_adj: %m");
+		else
+			error("failed to open /proc/self/oom_adj: %m");
+		return -1;
+	}
+	if (snprintf(oom_adj, 16, "%d", adj) >= 16) {
+		return -1;
+	}
+	while ((write(fd, oom_adj, strlen(oom_adj)) < 0) && (errno == EINTR))
+		;
+	close(fd);
+
+	return 0;
+}
+
+
diff --git a/src/slurmd/common/set_oomadj.h b/src/slurmd/common/set_oomadj.h
new file mode 100644
index 000000000..c725900b4
--- /dev/null
+++ b/src/slurmd/common/set_oomadj.h
@@ -0,0 +1,47 @@
+/*****************************************************************************\
+ *  set_oomadj.h - prevent slurmd/slurmstepd from being killed by the
+ *	kernel OOM killer
+ *****************************************************************************
+ *  Written by Hongjia Cao, National University of Defense Technology, China.
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _SET_OOMADJ_H
+#define _SET_OOMADJ_H
+
+/* from linux/mm.h */
+#define OOM_DISABLE (-17)
+
+extern int set_oom_adj(int adj);
+
+#endif /* _SET_OOMADJ_H */
+
diff --git a/src/slurmd/common/setproctitle.c b/src/slurmd/common/setproctitle.c
index 646e9e558..441ee6f30 100644
--- a/src/slurmd/common/setproctitle.c
+++ b/src/slurmd/common/setproctitle.c
@@ -1,14 +1,16 @@
 /*****************************************************************************\
  * src/slurmd/common/setproctitle.c - argv manipulation 
- * $Id: setproctitle.c 13672 2008-03-19 23:10:58Z jette $
+ * $Id: setproctitle.c 17276 2009-04-17 17:03:49Z jette $
  *****************************************************************************
- *  Copyright (C) 2002 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -307,3 +309,18 @@ init_setproctitle(int argc, char *argv[])
 #endif /* PS_USE_CLOBBER_ARGV */
 }
 
+/* Free memory allocated by init_setproctitle.
+ * Used to verify that all allocated memory gets freed */
+void fini_setproctitle(void)
+{
+#if SETPROCTITLE_STRATEGY == PS_USE_CLOBBER_ARGV
+	int i;
+
+	for (i = 0; environ[i] != NULL; i++) {
+		free(environ[i]);
+	}
+	free(environ);
+	environ = (char **) NULL;
+#endif /* PS_USE_CLOBBER_ARGV */
+}
+
diff --git a/src/slurmd/common/setproctitle.h b/src/slurmd/common/setproctitle.h
index 30caef886..a9e20a7f2 100644
--- a/src/slurmd/common/setproctitle.h
+++ b/src/slurmd/common/setproctitle.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/slurmd/common/setproctitle.h - Emulation of BSD setproctitle()
- * $Id: setproctitle.h 13672 2008-03-19 23:10:58Z jette $
+ * $Id: setproctitle.h 17276 2009-04-17 17:03:49Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -46,6 +47,7 @@
 #ifndef HAVE_SETPROCTITLE
 void setproctitle(const char *fmt, ...);
 void init_setproctitle(int argc, char *argv[]);
+void fini_setproctitle(void);
 #endif
 
 #endif /* _BSD_SETPROCTITLE_H */
diff --git a/src/slurmd/common/slurmstepd_init.c b/src/slurmd/common/slurmstepd_init.c
index 81cfd21be..463241c46 100644
--- a/src/slurmd/common/slurmstepd_init.c
+++ b/src/slurmd/common/slurmstepd_init.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -55,7 +56,7 @@ extern void pack_slurmd_conf_lite(slurmd_conf_t *conf, Buf buffer)
 	pack32(conf->daemonize, buffer);
 	pack32((uint32_t)conf->slurm_user_id, buffer);
 	pack16(conf->use_pam, buffer);
-	pack16(conf->use_cpusets, buffer);
+	pack16(conf->task_plugin_param, buffer);
 }
 
 extern int unpack_slurmd_conf_lite_no_alloc(slurmd_conf_t *conf, Buf buffer)
@@ -80,7 +81,7 @@ extern int unpack_slurmd_conf_lite_no_alloc(slurmd_conf_t *conf, Buf buffer)
 	safe_unpack32(&uint32_tmp, buffer);
 	conf->slurm_user_id = (uid_t)uint32_tmp;
 	safe_unpack16(&conf->use_pam, buffer);
-	safe_unpack16(&conf->use_cpusets, buffer);
+	safe_unpack16(&conf->task_plugin_param, buffer);
 	return SLURM_SUCCESS;
 
 unpack_error:
diff --git a/src/slurmd/common/slurmstepd_init.h b/src/slurmd/common/slurmstepd_init.h
index 0499d17a0..046dd34f5 100644
--- a/src/slurmd/common/slurmstepd_init.h
+++ b/src/slurmd/common/slurmstepd_init.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/common/task_plugin.c b/src/slurmd/common/task_plugin.c
index 63ec388a6..6fd9a09df 100644
--- a/src/slurmd/common/task_plugin.c
+++ b/src/slurmd/common/task_plugin.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
- *  task_plugin.h - task launch plugin stub.
+ *  task_plugin.c - task launch plugin stub.
  *****************************************************************************
  *  Copyright (C) 2005-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>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -47,6 +48,8 @@
 #include "src/slurmd/slurmstepd/slurmstepd_job.h"
 
 typedef struct slurmd_task_ops {
+	int	(*slurmd_batch_request)		(uint32_t job_id, 
+						 batch_job_launch_msg_t *req);
 	int	(*slurmd_launch_request)	(uint32_t job_id, 
 						 launch_tasks_request_msg_t *req,
 						 uint32_t node_id);
@@ -81,6 +84,7 @@ _slurmd_task_get_ops(slurmd_task_context_t *c)
 	 * Must be synchronized with slurmd_task_ops_t above.
 	 */
 	static const char *syms[] = {
+		"task_slurmd_batch_request",
 		"task_slurmd_launch_request",
 		"task_slurmd_reserve_resources",
 		"task_slurmd_suspend_job",
@@ -232,6 +236,19 @@ extern int slurmd_task_fini(void)
 	return rc;
 }
 
+/*
+ * Slurmd has received a batch job launch request.
+ *
+ * RET - slurm error code
+ */
+extern int slurmd_batch_request(uint32_t job_id, batch_job_launch_msg_t *req)
+{
+	if (slurmd_task_init())
+		return SLURM_ERROR;
+
+	return (*(g_task_context->ops.slurmd_batch_request))(job_id, req);
+}
+
 /*
  * Slurmd has received a launch request.
  *
diff --git a/src/slurmd/common/task_plugin.h b/src/slurmd/common/task_plugin.h
index 121876569..228fdf276 100644
--- a/src/slurmd/common/task_plugin.h
+++ b/src/slurmd/common/task_plugin.h
@@ -2,13 +2,14 @@
  *  task_plugin.h - Define plugin functions for task pre_launch and post_term.
  *****************************************************************************
  *  Copyright (C) 2005-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>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -61,6 +62,13 @@ extern int slurmd_task_fini(void);
  **************************************************************************
  */
 
+/*
+ * Slurmd has received a batch job launch request.
+ *
+ * RET - slurm error code
+ */
+extern int slurmd_batch_request(uint32_t job_id, batch_job_launch_msg_t *req);
+
 /*
  * Slurmd has received a launch request.
  *
diff --git a/src/slurmd/slurmd/Makefile.am b/src/slurmd/slurmd/Makefile.am
index 0e1a14502..26c533f91 100644
--- a/src/slurmd/slurmd/Makefile.am
+++ b/src/slurmd/slurmd/Makefile.am
@@ -30,6 +30,8 @@ SLURMD_SOURCES = \
 	$(top_builddir)/src/slurmd/common/run_script.h \
 	$(top_builddir)/src/slurmd/common/task_plugin.c \
 	$(top_builddir)/src/slurmd/common/task_plugin.h \
+	$(top_builddir)/src/slurmd/common/set_oomadj.c \
+	$(top_builddir)/src/slurmd/common/set_oomadj.h \
 	$(top_builddir)/src/slurmd/common/reverse_tree.h
 
 slurmd_SOURCES = $(SLURMD_SOURCES)
diff --git a/src/slurmd/slurmd/Makefile.in b/src/slurmd/slurmd/Makefile.in
index aac7cbffa..9d171ba24 100644
--- a/src/slurmd/slurmd/Makefile.in
+++ b/src/slurmd/slurmd/Makefile.in
@@ -45,14 +45,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -76,7 +80,7 @@ am__objects_1 = slurmd.$(OBJEXT) req.$(OBJEXT) get_mach_stat.$(OBJEXT) \
 	read_proc.$(OBJEXT) reverse_tree_math.$(OBJEXT) xcpu.$(OBJEXT) \
 	proctrack.$(OBJEXT) setproctitle.$(OBJEXT) \
 	slurmstepd_init.$(OBJEXT) run_script.$(OBJEXT) \
-	task_plugin.$(OBJEXT)
+	task_plugin.$(OBJEXT) set_oomadj.$(OBJEXT)
 am_slurmd_OBJECTS = $(am__objects_1)
 slurmd_OBJECTS = $(am_slurmd_OBJECTS)
 am__DEPENDENCIES_1 =
@@ -112,6 +116,10 @@ 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@
@@ -295,6 +303,8 @@ SLURMD_SOURCES = \
 	$(top_builddir)/src/slurmd/common/run_script.h \
 	$(top_builddir)/src/slurmd/common/task_plugin.c \
 	$(top_builddir)/src/slurmd/common/task_plugin.h \
+	$(top_builddir)/src/slurmd/common/set_oomadj.c \
+	$(top_builddir)/src/slurmd/common/set_oomadj.h \
 	$(top_builddir)/src/slurmd/common/reverse_tree.h
 
 slurmd_SOURCES = $(SLURMD_SOURCES)
@@ -380,6 +390,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/req.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reverse_tree_math.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_script.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_oomadj.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setproctitle.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurmd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurmstepd_init.Po@am__quote@
@@ -477,6 +488,20 @@ task_plugin.obj: $(top_builddir)/src/slurmd/common/task_plugin.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o task_plugin.obj `if test -f '$(top_builddir)/src/slurmd/common/task_plugin.c'; then $(CYGPATH_W) '$(top_builddir)/src/slurmd/common/task_plugin.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/src/slurmd/common/task_plugin.c'; fi`
 
+set_oomadj.o: $(top_builddir)/src/slurmd/common/set_oomadj.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_oomadj.o -MD -MP -MF $(DEPDIR)/set_oomadj.Tpo -c -o set_oomadj.o `test -f '$(top_builddir)/src/slurmd/common/set_oomadj.c' || echo '$(srcdir)/'`$(top_builddir)/src/slurmd/common/set_oomadj.c
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/set_oomadj.Tpo $(DEPDIR)/set_oomadj.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(top_builddir)/src/slurmd/common/set_oomadj.c' object='set_oomadj.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_oomadj.o `test -f '$(top_builddir)/src/slurmd/common/set_oomadj.c' || echo '$(srcdir)/'`$(top_builddir)/src/slurmd/common/set_oomadj.c
+
+set_oomadj.obj: $(top_builddir)/src/slurmd/common/set_oomadj.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_oomadj.obj -MD -MP -MF $(DEPDIR)/set_oomadj.Tpo -c -o set_oomadj.obj `if test -f '$(top_builddir)/src/slurmd/common/set_oomadj.c'; then $(CYGPATH_W) '$(top_builddir)/src/slurmd/common/set_oomadj.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/src/slurmd/common/set_oomadj.c'; fi`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/set_oomadj.Tpo $(DEPDIR)/set_oomadj.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(top_builddir)/src/slurmd/common/set_oomadj.c' object='set_oomadj.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_oomadj.obj `if test -f '$(top_builddir)/src/slurmd/common/set_oomadj.c'; then $(CYGPATH_W) '$(top_builddir)/src/slurmd/common/set_oomadj.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/src/slurmd/common/set_oomadj.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/src/slurmd/slurmd/get_mach_stat.c b/src/slurmd/slurmd/get_mach_stat.c
index a082be7a2..c5c83f145 100644
--- a/src/slurmd/slurmd/get_mach_stat.c
+++ b/src/slurmd/slurmd/get_mach_stat.c
@@ -10,10 +10,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmd/get_mach_stat.h b/src/slurmd/slurmd/get_mach_stat.h
index 586c7e534..1fcb78121 100644
--- a/src/slurmd/slurmd/get_mach_stat.h
+++ b/src/slurmd/slurmd/get_mach_stat.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmd/read_proc.c b/src/slurmd/slurmd/read_proc.c
index a0169fef5..2d46a8c77 100644
--- a/src/slurmd/slurmd/read_proc.c
+++ b/src/slurmd/slurmd/read_proc.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmd/req.c b/src/slurmd/slurmd/req.c
index cadf2417e..ff8c8dc92 100644
--- a/src/slurmd/slurmd/req.c
+++ b/src/slurmd/slurmd/req.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  src/slurmd/slurmd/req.c - slurmd request handling
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -101,7 +102,7 @@ typedef struct {
 
 static int  _abort_job(uint32_t job_id);
 static int  _abort_step(uint32_t job_id, uint32_t step_id);
-static char ** _build_env(uint32_t jobid, uid_t uid, char *bg_part_id);
+static char ** _build_env(uint32_t jobid, uid_t uid, char *resv_id);
 static void _delay_rpc(int host_inx, int host_cnt, int usec_per_rpc);
 static void _destroy_env(char **env);
 static bool _slurm_authorized_user(uid_t uid);
@@ -132,8 +133,8 @@ static int  _rpc_health_check(slurm_msg_t *);
 static int  _rpc_step_complete(slurm_msg_t *msg);
 static int  _rpc_stat_jobacct(slurm_msg_t *msg);
 static int  _rpc_daemon_status(slurm_msg_t *msg);
-static int  _run_prolog(uint32_t jobid, uid_t uid, char *bg_part_id);
-static int  _run_epilog(uint32_t jobid, uid_t uid, char *bg_part_id);
+static int  _run_prolog(uint32_t jobid, uid_t uid, char *resv_id);
+static int  _run_epilog(uint32_t jobid, uid_t uid, char *resv_id);
 
 static bool _pause_for_job_completion(uint32_t jobid, char *nodes, 
 		int maxtime);
@@ -543,7 +544,7 @@ _forkexec_slurmstepd(slurmd_step_type_t type, void *req,
 		}
 		if (read(to_slurmd[0], &rc, sizeof(int)) != sizeof(int)) {
 			error("Error reading return code message "
-			      " from slurmstepd: %m");
+			      "from slurmstepd: %m");
 			rc = SLURM_FAILURE;
 		}
 
@@ -560,8 +561,14 @@ _forkexec_slurmstepd(slurmd_step_type_t type, void *req,
 		char slurm_stepd_path[MAXPATHLEN];
 		char *const argv[2] = { slurm_stepd_path, NULL};
 		int failed = 0;
-		snprintf(slurm_stepd_path, sizeof(slurm_stepd_path),
-			 "%s/sbin/slurmstepd", SLURM_PREFIX);
+		if (conf->stepd_loc) {
+			snprintf(slurm_stepd_path, sizeof(slurm_stepd_path),
+				 "%s", conf->stepd_loc);
+		} else {
+			snprintf(slurm_stepd_path, sizeof(slurm_stepd_path),
+				 "%s/sbin/slurmstepd", SLURM_PREFIX);
+		}
+
 		/*
 		 * Child forks and exits
 		 */
@@ -615,7 +622,7 @@ _forkexec_slurmstepd(slurmd_step_type_t type, void *req,
  * The job(step) credential is the only place to get a definitive
  * list of the nodes allocated to a job step.  We need to return
  * a hostset_t of the nodes. Validate the incoming RPC, updating 
- * job_mem and task_mem as needed.
+ * job_mem needed.
  */
 static int
 _check_job_credential(launch_tasks_request_msg_t *req, uid_t uid,
@@ -631,6 +638,8 @@ _check_job_credential(launch_tasks_request_msg_t *req, uid_t uid,
 	uint32_t         jobid = req->job_id;
 	uint32_t         stepid = req->job_step_id;
 	int              tasks_to_launch = req->tasks_to_launch[node_id];
+	uint32_t         alloc_lps = 0;
+
 	/*
 	 * First call slurm_cred_verify() so that all valid
 	 * credentials are checked
@@ -684,56 +693,72 @@ _check_job_credential(launch_tasks_request_msg_t *req, uid_t uid,
 		goto fail;
 	}
 
-        if ((arg.alloc_lps_cnt > 0) && (tasks_to_launch > 0)) {
-                host_index = hostset_find(hset, conf->node_name);
-
-#if(0)
-		/* Left for debugging purposes */
-                if (host_index >= 0)
-                  info(" cons_res %u alloc_lps_cnt %u "
-			"task[%d] = %u = task_to_launch %d host %s ", 
-			arg.jobid, arg.alloc_lps_cnt, host_index, 
-			arg.alloc_lps[host_index], 
-			tasks_to_launch, conf->node_name);
-#endif
-
-                if (host_index < 0) { 
+        if ((arg.job_nhosts > 0) && (tasks_to_launch > 0)) {
+		uint32_t i, i_first_bit=0, i_last_bit=0;
+		host_index = hostset_find(hset, conf->node_name);
+		if ((host_index < 0) || (host_index >= arg.job_nhosts)) { 
                         error("job cr credential invalid host_index %d for "
 			      "job %u", host_index, arg.jobid);
                         goto fail; 
                 }
-		if (host_index > arg.alloc_lps_cnt)
-			error("host_index > alloc_lps_cnt in credential");
-                else if (arg.alloc_lps[host_index] == 0)
+		host_index++;	/* change from 0-origin to 1-origin */
+		for (i=0; host_index; i++) {
+			if (host_index > arg.sock_core_rep_count[i]) {
+				i_first_bit += arg.sockets_per_node[i] *
+					       arg.cores_per_socket[i] *
+					       arg.sock_core_rep_count[i];
+				host_index -= arg.sock_core_rep_count[i];
+			} else {
+				i_first_bit += arg.sockets_per_node[i] *
+					       arg.cores_per_socket[i] *
+					       (host_index - 1);
+				i_last_bit = i_first_bit +
+					     arg.sockets_per_node[i] *
+					     arg.cores_per_socket[i];
+				break;
+			}
+		}
+		/* Now count the allocated processors */
+		for (i = i_first_bit; i < i_last_bit; i++) {
+			if (bit_test(arg.core_bitmap, i))
+				alloc_lps++;
+		}
+                if (alloc_lps == 0) {
 			error("cons_res: zero processors allocated to step");
-                if (tasks_to_launch > arg.alloc_lps[host_index]) {
-			/* This is expected with the --overcommit option */
-			verbose("cons_res: More than one tasks per logical "
-				"processor (%d > %u) on host [%u.%u %ld %s] ",
-				tasks_to_launch, arg.alloc_lps[host_index], 
-				arg.jobid, arg.stepid, (long) arg.uid, 
-				arg.hostlist);
-			verbose("cons_res: Use task/affinity plug-in to bind "
-				"the tasks to the allocated resources");
-		}
-        }
+			alloc_lps = 1;
+		}
+		if (tasks_to_launch > alloc_lps) {
+			/* This is expected with the --overcommit option
+			 * or hyperthreads */
+			debug("cons_res: More than one tasks per logical "
+			      "processor (%d > %u) on host [%u.%u %ld %s] ",
+			      tasks_to_launch, alloc_lps, arg.jobid,
+			      arg.stepid, (long) arg.uid, arg.hostlist);
+		}
+		/* NOTE: alloc_lps is the count of allocated resources
+		 * (typically cores). Convert to CPU count as needed */
+		if (i_last_bit <= i_first_bit)
+			error("step credential has no CPUs selected");
+		else {
+			i = conf->conf_cpus / (i_last_bit - i_first_bit);
+			if (i > 1)
+				alloc_lps *= i;
+		}
+	} else
+		alloc_lps = 1;
 
 	/* Overwrite any memory limits in the RPC with contents of the 
 	 * memory limit within the credential. 
 	 * Reset the CPU count on this node to correct value. */
 	if (arg.job_mem & MEM_PER_CPU) {
 		req->job_mem = arg.job_mem & (~MEM_PER_CPU);
-		if ((host_index >= 0) && (host_index < arg.alloc_lps_cnt) &&
-		    (arg.alloc_lps[host_index] > 0))
-			req->job_mem *= arg.alloc_lps[host_index];
+		req->job_mem *= alloc_lps;
 	} else
 		req->job_mem = arg.job_mem;
-	req->task_mem = arg.task_mem;	/* Defunct */
-	if ((host_index >= 0) && (host_index < arg.alloc_lps_cnt))
-		req->cpus_allocated[node_id] = arg.alloc_lps[host_index];
+	req->cpus_allocated[node_id] = alloc_lps;
 #if 0
 	info("mem orig:%u cpus:%u limit:%u", 
-	     arg.job_mem, arg.alloc_lps[host_index], req->job_mem);
+	     arg.job_mem, alloc_lps, req->job_mem);
 #endif
 
 	*step_hset = hset;
@@ -949,11 +974,35 @@ _set_batch_job_limits(slurm_msg_t *msg)
 
 	if (slurm_cred_get_args(req->cred, &arg) != SLURM_SUCCESS)
 		return;
-
+		
 	if (arg.job_mem & MEM_PER_CPU) {
+		int i;
+		uint32_t alloc_lps = 0, last_bit = 0;   
+		if (arg.job_nhosts > 0) {
+			last_bit = arg.sockets_per_node[0] * 
+				   arg.cores_per_socket[0];
+			for (i=0; i<last_bit; i++) {
+				if (bit_test(arg.core_bitmap, i))
+					alloc_lps++;
+			}
+		}
+		if (alloc_lps == 0) {
+			error("_set_batch_job_limit: alloc_lps is zero");
+			alloc_lps = 1;
+		}
+
+		/* NOTE: alloc_lps is the count of allocated resources
+		 * (typically cores). Convert to CPU count as needed */
+		if (last_bit < 1)
+			error("Batch job credential allocates no CPUs");
+		else {
+			i = conf->conf_cpus / last_bit;
+			if (i > 1)
+				alloc_lps *= i;
+		}
+
 		req->job_mem = arg.job_mem & (~MEM_PER_CPU);
-		if (arg.alloc_lps_cnt > 1)
-			req->job_mem *= arg.alloc_lps_cnt;
+		req->job_mem *= alloc_lps;
 	} else
 		req->job_mem = arg.job_mem;
 
@@ -967,7 +1016,7 @@ _rpc_batch_job(slurm_msg_t *msg)
 	bool     first_job_run = true;
 	int      rc = SLURM_SUCCESS;
 	uid_t    req_uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
-	char    *bg_part_id = NULL;
+	char    *resv_id = NULL;
 	bool	 replied = false;
 	slurm_addr *cli = &msg->orig_addr;
 	
@@ -985,6 +1034,8 @@ _rpc_batch_job(slurm_msg_t *msg)
 		goto done;
 	}
 
+	slurmd_batch_request(req->job_id, req);	/* determine task affinity */
+
 	if ((req->step_id != SLURM_BATCH_SCRIPT) && (req->step_id != 0))
 		first_job_run = false;
 
@@ -1015,12 +1066,16 @@ _rpc_batch_job(slurm_msg_t *msg)
 		/* 
 	 	 * Run job prolog on this node
 	 	 */
+#ifdef HAVE_BG
 		select_g_get_jobinfo(req->select_jobinfo, 
-				     SELECT_DATA_BLOCK_ID, 
-				     &bg_part_id);
-
-		rc = _run_prolog(req->job_id, req->uid, bg_part_id);
-		xfree(bg_part_id);
+				     SELECT_DATA_BLOCK_ID, &resv_id);
+#endif
+#ifdef HAVE_CRAY_XT
+		select_g_get_jobinfo(req->select_jobinfo, 
+				     SELECT_DATA_RESV_ID, &resv_id);
+#endif
+		rc = _run_prolog(req->job_id, req->uid, resv_id);
+		xfree(resv_id);
 		if (rc) {
 			int term_sig, exit_status;
 			if (WIFSIGNALED(rc)) {
@@ -1356,12 +1411,18 @@ _rpc_ping(slurm_msg_t *msg)
 {
 	int        rc = SLURM_SUCCESS;
 	uid_t req_uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
+	static bool first_msg = true;
 
 	if (!_slurm_authorized_user(req_uid)) {
 		error("Security violation, ping RPC from uid %u",
 		      (unsigned int) req_uid);
+		if (first_msg) {
+			error("Do you have SlurmUser configured as uid %u?",
+			     (unsigned int) req_uid);
+		}
 		rc = ESLURM_USER_ID_MISSING;	/* or bad in this case */
 	}
+	first_msg = false;
 
 	/* Return result. If the reply can't be sent this indicates that
 	 * 1. The network is broken OR
@@ -1387,7 +1448,7 @@ _rpc_health_check(slurm_msg_t *msg)
 	uid_t req_uid = g_slurm_auth_get_uid(msg->auth_cred, NULL);
 
 	if (!_slurm_authorized_user(req_uid)) {
-		error("Security violation, ping RPC from uid %u",
+		error("Security violation, health check RPC from uid %u",
 		      (unsigned int) req_uid);
 		rc = ESLURM_USER_ID_MISSING;	/* or bad in this case */
 	}
@@ -1513,7 +1574,7 @@ _rpc_checkpoint_tasks(slurm_msg_t *msg)
 		goto done3;
 	}
 
-	rc = stepd_checkpoint(fd, req->signal, req->timestamp);
+	rc = stepd_checkpoint(fd, req->timestamp, req->image_dir);
 	if (rc == -1)
 		rc = ESLURMD_JOB_NOTRUNNING;
 
@@ -2565,7 +2626,8 @@ _rpc_suspend_job(slurm_msg_t *msg)
 		while ((stepd = list_next(i))) {
 			if (stepd->jobid != req->job_id) {
 				/* multiple jobs expected on shared nodes */
-				debug3("Step from other job: jobid=%u (this jobid=%u)",
+				debug3("Step from other job: jobid=%u "
+				       "(this jobid=%u)",
 				      stepd->jobid, req->job_id);
 				continue;
 			}
@@ -2625,7 +2687,7 @@ _rpc_abort_job(slurm_msg_t *msg)
 {
 	kill_job_msg_t *req    = msg->data;
 	uid_t           uid    = g_slurm_auth_get_uid(msg->auth_cred, NULL);
-	char           *bg_part_id = NULL;
+	char           *resv_id = NULL;
 
 	debug("_rpc_abort_job, uid = %d", uid);
 	/* 
@@ -2682,11 +2744,16 @@ _rpc_abort_job(slurm_msg_t *msg)
 	}
 
 	save_cred_state(conf->vctx);
-
+#ifdef HAVE_BG
 	select_g_get_jobinfo(req->select_jobinfo, SELECT_DATA_BLOCK_ID,
-		&bg_part_id);
-	_run_epilog(req->job_id, req->job_uid, bg_part_id);
-	xfree(bg_part_id);
+			     &resv_id);
+#endif
+#ifdef HAVE_CRAY_XT
+	select_g_get_jobinfo(req->select_jobinfo, SELECT_DATA_RESV_ID,
+			     &resv_id);
+#endif
+	_run_epilog(req->job_id, req->job_uid, resv_id);
+	xfree(resv_id);
 }
 
 static void 
@@ -2697,7 +2764,7 @@ _rpc_terminate_job(slurm_msg_t *msg)
 	uid_t           uid    = g_slurm_auth_get_uid(msg->auth_cred, NULL);
 	int             nsteps = 0;
 	int		delay;
-	char           *bg_part_id = NULL;
+	char           *resv_id = NULL;
 	uint16_t	base_job_state = req->job_state & (~JOB_COMPLETING);
 	slurm_ctl_conf_t *cf;
 
@@ -2824,10 +2891,16 @@ _rpc_terminate_job(slurm_msg_t *msg)
 
 	save_cred_state(conf->vctx);
 
+#ifdef HAVE_BG
 	select_g_get_jobinfo(req->select_jobinfo, SELECT_DATA_BLOCK_ID,
-		&bg_part_id);
-	rc = _run_epilog(req->job_id, req->job_uid, bg_part_id);
-	xfree(bg_part_id);
+			     &resv_id);
+#endif
+#ifdef HAVE_CRAY_XT
+	select_g_get_jobinfo(req->select_jobinfo, SELECT_DATA_RESV_ID,
+			     &resv_id);
+#endif
+	rc = _run_epilog(req->job_id, req->job_uid, resv_id);
+	xfree(resv_id);
 	
 	if (rc) {
 		int term_sig, exit_status;
@@ -3035,17 +3108,28 @@ _rpc_update_time(slurm_msg_t *msg)
 	slurm_send_rc_msg(msg, rc);
 }
 
-/* NOTE: xfree returned value */
+/* NOTE: call _destroy_env() to free returned value */
 static char **
-_build_env(uint32_t jobid, uid_t uid, char *bg_part_id)
+_build_env(uint32_t jobid, uid_t uid, char *resv_id)
 {
+	char *name;
 	char **env = xmalloc(sizeof(char *));
+
 	env[0]  = NULL;
+	setenvf(&env, "SLURM_JOB_ID", "%u", jobid);
+	setenvf(&env, "SLURM_JOB_UID",   "%u", uid);
+	name = uid_to_string(uid);
+	setenvf(&env, "SLURM_JOB_USER", "%s", name);
+	xfree(name);
 	setenvf(&env, "SLURM_JOBID", "%u", jobid);
 	setenvf(&env, "SLURM_UID",   "%u", uid);
-	if (bg_part_id) {
-		setenvf(&env, "MPIRUN_PARTITION",
-			"%s", bg_part_id);
+	if (resv_id) {
+#ifdef HAVE_BG
+		setenvf(&env, "MPIRUN_PARTITION", "%s", resv_id);
+#endif
+#ifdef HAVE_CRAY_XT
+		setenvf(&env, "BASIL_RESERVATION_ID", "%s", resv_id);
+#endif
 	}
 	return env;
 }
@@ -3066,11 +3150,13 @@ _destroy_env(char **env)
 }
 
 static int 
-_run_prolog(uint32_t jobid, uid_t uid, char *bg_part_id)
+_run_prolog(uint32_t jobid, uid_t uid, char *resv_id)
 {
 	int error_code;
 	char *my_prolog;
-	char **my_env = _build_env(jobid, uid, bg_part_id);
+	char **my_env = _build_env(jobid, uid, resv_id);
+	time_t start_time = time(NULL), diff_time;
+	static uint16_t msg_timeout = 0;
 
 	slurm_mutex_lock(&conf->config_mutex);
 	my_prolog = xstrdup(conf->prolog);
@@ -3080,15 +3166,23 @@ _run_prolog(uint32_t jobid, uid_t uid, char *bg_part_id)
 	xfree(my_prolog);
 	_destroy_env(my_env);
 
+	diff_time = difftime(time(NULL), start_time);
+	if (msg_timeout == 0)
+		msg_timeout = slurm_get_msg_timeout();
+	if (diff_time >= msg_timeout) {
+		error("prolog for job %u ran for %d seconds", 
+		      jobid, diff_time);
+	}
+
 	return error_code;
 }
 
 static int 
-_run_epilog(uint32_t jobid, uid_t uid, char *bg_part_id)
+_run_epilog(uint32_t jobid, uid_t uid, char *resv_id)
 {
 	int error_code;
 	char *my_epilog;
-	char **my_env = _build_env(jobid, uid, bg_part_id);
+	char **my_env = _build_env(jobid, uid, resv_id);
 
 	slurm_mutex_lock(&conf->config_mutex);
 	my_epilog = xstrdup(conf->epilog);
diff --git a/src/slurmd/slurmd/req.h b/src/slurmd/slurmd/req.h
index 211c90ac7..1fff983c7 100644
--- a/src/slurmd/slurmd/req.h
+++ b/src/slurmd/slurmd/req.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/slurmd/slurmd/req.h - slurmd request handling
- * $Id: req.h 13672 2008-03-19 23:10:58Z jette $
+ * $Id: req.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmd/reverse_tree_math.c b/src/slurmd/slurmd/reverse_tree_math.c
index 9cb03b9f6..c7d627b97 100644
--- a/src/slurmd/slurmd/reverse_tree_math.c
+++ b/src/slurmd/slurmd/reverse_tree_math.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmd/reverse_tree_math.h b/src/slurmd/slurmd/reverse_tree_math.h
index 6896db8ac..b65e9537d 100644
--- a/src/slurmd/slurmd/reverse_tree_math.h
+++ b/src/slurmd/slurmd/reverse_tree_math.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmd/slurmd.c b/src/slurmd/slurmd/slurmd.c
index 600ace4bb..63d450d52 100644
--- a/src/slurmd/slurmd/slurmd.c
+++ b/src/slurmd/slurmd/slurmd.c
@@ -1,16 +1,17 @@
 /*****************************************************************************\
  *  src/slurmd/slurmd/slurmd.c - main slurm node server daemon
- *  $Id: slurmd.c 17177 2009-04-07 18:09:43Z jette $
+ *  $Id: slurmd.c 17397 2009-05-04 16:07:42Z da $
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Portions Copyright (C) 2008 Vijay Ramasubramanian.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -84,8 +85,9 @@
 #include "src/slurmd/common/setproctitle.h"
 #include "src/slurmd/common/proctrack.h"
 #include "src/slurmd/common/task_plugin.h"
+#include "src/slurmd/common/set_oomadj.h"
 
-#define GETOPT_ARGS	"L:Dvhcf:MN:V"
+#define GETOPT_ARGS	"cd:Df:hL:MN:vV"
 
 #ifndef MAXHOSTNAMELEN
 #  define MAXHOSTNAMELEN	64
@@ -152,6 +154,9 @@ main (int argc, char *argv[])
 {
 	int i, pidfd;
 	int blocked_signals[] = {SIGPIPE, 0};
+	char *oom_value;
+	uint32_t slurmd_uid = 0;
+	uint32_t curr_uid = 0;
 
 	/*
 	 * Make sure we have no extra open files which 
@@ -180,7 +185,30 @@ main (int argc, char *argv[])
 	_init_conf();
 	conf->argv = &argv;
 	conf->argc = &argc;
-
+	slurmd_uid = slurm_get_slurmd_user_id();
+	curr_uid = getuid();
+	if(curr_uid != slurmd_uid) {
+		struct passwd *pw = NULL;
+		char *slurmd_user = NULL;
+		char *curr_user = NULL;
+
+		/* since when you do a getpwuid you get a pointer to a
+		   structure you have to do a xstrdup on the first
+		   call or your information will just get over
+		   written.  This is a memory leak, but a fatal is
+		   called right after so it isn't that big of a deal.
+		*/
+		if ((pw=getpwuid(slurmd_uid)))
+			slurmd_user = xstrdup(pw->pw_name);	
+		if ((pw=getpwuid(curr_uid)))
+			curr_user = pw->pw_name;	
+
+		fatal("You are running slurmd as something "
+		      "other than user %s(%d).  If you want to "
+		      "run as this user add SlurmdUser=%s "
+		      "to the slurm.conf file.",
+		      slurmd_user, slurmd_uid, curr_user);
+	}
 	init_setproctitle(argc, argv);
 
 	/* NOTE: conf->logfile always NULL at this point */
@@ -212,6 +240,12 @@ main (int argc, char *argv[])
 	info("slurmd version %s started", SLURM_VERSION);
 	debug3("finished daemonize");
 
+	if ((oom_value = getenv("SLURMD_OOM_ADJ"))) {
+		i = atoi(oom_value);
+		debug("Setting slurmd oom_adj to %d", i);
+		set_oom_adj(i);
+	}
+
 	_kill_old_slurmd();
 
 	if (conf->mlock_pages) {
@@ -467,6 +501,7 @@ _fill_registration_msg(slurm_node_registration_status_msg_t *msg)
 	int  n;
 	char *arch, *os;
 	struct utsname buf;
+	static bool first_msg = true;
 
 	msg->node_name  = xstrdup (conf->node_name);
 	msg->cpus	 = conf->cpus;
@@ -476,10 +511,18 @@ _fill_registration_msg(slurm_node_registration_status_msg_t *msg)
 	msg->real_memory = conf->real_memory_size;
 	msg->tmp_disk    = conf->tmp_disk_space;
 
-	debug3("Procs=%u Sockets=%u Cores=%u Threads=%u Memory=%u TmpDisk=%u",
-	       msg->cpus, msg->sockets, msg->cores, msg->threads,
-	       msg->real_memory, msg->tmp_disk);
-
+	if (first_msg) {
+		first_msg = false;
+		info("Procs=%u Sockets=%u Cores=%u Threads=%u "
+		     "Memory=%u TmpDisk=%u",
+		     msg->cpus, msg->sockets, msg->cores, msg->threads,
+		     msg->real_memory, msg->tmp_disk);
+	} else {
+		debug3("Procs=%u Sockets=%u Cores=%u Threads=%u "
+		       "Memory=%u TmpDisk=%u",
+		       msg->cpus, msg->sockets, msg->cores, msg->threads,
+		       msg->real_memory, msg->tmp_disk);
+	}
 	uname(&buf);
 	if ((arch = getenv("SLURM_ARCH")))
 		msg->arch = xstrdup(arch);
@@ -605,6 +648,11 @@ _read_config()
 
 	_massage_pathname(&conf->logfile);
 
+	/* set node_addr if relevant */
+	if((conf->node_addr = slurm_conf_get_nodeaddr(conf->hostname)))
+		if (strcmp(conf->node_addr, conf->hostname) == 0)
+			xfree(conf->node_addr);	/* Sets to NULL */
+
 	conf->port = slurm_conf_get_port(conf->node_name);
 	slurm_conf_get_cpus_sct(conf->node_name,
 				&conf->conf_cpus,  &conf->conf_sockets,
@@ -659,9 +707,7 @@ _read_config()
 	if (cf->slurmctld_port == 0)
 		fatal("Unable to establish controller port");
 	conf->use_pam = cf->use_pam;
-
-	if (cf->task_plugin_param & TASK_PARAM_CPUSETS)
-		conf->use_cpusets = 1;
+	conf->task_plugin_param = cf->task_plugin_param;
 
 	slurm_mutex_unlock(&conf->config_mutex);
 	slurm_conf_unlock();
@@ -746,20 +792,24 @@ _print_conf()
 	debug3("Logfile     = `%s'",     cf->slurmd_logfile);
 	debug3("HealthCheck = `%s'",     conf->health_check_program);
 	debug3("NodeName    = %s",       conf->node_name);
+	debug3("NodeAddr    = %s",       conf->node_addr);
 	debug3("Port        = %u",       conf->port);
 	debug3("Prolog      = `%s'",     conf->prolog);
 	debug3("TmpFS       = `%s'",     conf->tmpfs);
 	debug3("Public Cert = `%s'",     conf->pubkey);
+	debug3("Slurmstepd  = `%s'",     conf->stepd_loc);
 	debug3("Spool Dir   = `%s'",     conf->spooldir);
 	debug3("Pid File    = `%s'",     conf->pidfile);
 	debug3("Slurm UID   = %u",       conf->slurm_user_id);
 	debug3("TaskProlog  = `%s'",     conf->task_prolog);
 	debug3("TaskEpilog  = `%s'",     conf->task_epilog);
-	debug3("Use CPUSETS = %u",       conf->use_cpusets);
+	debug3("TaskPluginParam = %u",   conf->task_plugin_param);
 	debug3("Use PAM     = %u",       conf->use_pam);
 	slurm_conf_unlock();
 }
 
+/* Initialize slurmd configuration table.
+ * Everything is already NULL/zero filled when called */
 static void
 _init_conf()
 {
@@ -771,33 +821,12 @@ _init_conf()
 		exit(1);
 	}
 	conf->hostname    = xstrdup(host);
-	conf->node_name   = NULL;
-	conf->sockets     = 0;
-	conf->cores       = 0;
-	conf->threads     = 0;
-	conf->block_map_size = 0;
-	conf->block_map   = NULL;
-	conf->block_map_inv = NULL;
-	conf->conffile    = NULL;
-	conf->epilog      = NULL;
-	conf->health_check_program = NULL;
-	conf->logfile     = NULL;
-	conf->pubkey      = NULL;
-	conf->prolog      = NULL;
-	conf->task_prolog = NULL;
-	conf->task_epilog = NULL;
-
-	conf->port        =  0;
 	conf->daemonize   =  1;
 	conf->lfd         = -1;
-	conf->cleanstart  =  0;
-	conf->mlock_pages =  0;
 	conf->log_opts    = lopts;
 	conf->debug_level = LOG_LEVEL_INFO;
 	conf->pidfile     = xstrdup(DEFAULT_SLURMD_PIDFILE);
 	conf->spooldir	  = xstrdup(DEFAULT_SPOOLDIR);
-	conf->use_pam	  =  0;
-	conf->use_cpusets =  0;
 
 	slurm_mutex_init(&conf->config_mutex);
 	return;
@@ -812,6 +841,7 @@ _destroy_conf()
 		xfree(conf->health_check_program);
 		xfree(conf->hostname);
 		xfree(conf->node_name);
+		xfree(conf->node_addr);
 		xfree(conf->conffile);
 		xfree(conf->prolog);
 		xfree(conf->epilog);
@@ -821,6 +851,7 @@ _destroy_conf()
 		xfree(conf->task_epilog);
 		xfree(conf->pidfile);
 		xfree(conf->spooldir);
+		xfree(conf->stepd_loc);
 		xfree(conf->tmpfs);
 		slurm_mutex_destroy(&conf->config_mutex);
 		slurm_cred_ctx_destroy(conf->vctx);
@@ -838,12 +869,15 @@ _process_cmdline(int ac, char **av)
 
 	while ((c = getopt(ac, av, GETOPT_ARGS)) > 0) {
 		switch (c) {
+		case 'c':
+			conf->cleanstart = 1;
+			break;
+		case 'd':
+			conf->stepd_loc = xstrdup(optarg);
+			break;
 		case 'D': 
 			conf->daemonize = 0;
 			break;
-		case 'v':
-			conf->debug_level++;
-			break;
 		case 'f':
 			conf->conffile = xstrdup(optarg);
 			break;
@@ -854,15 +888,15 @@ _process_cmdline(int ac, char **av)
 		case 'L':
 			conf->logfile = xstrdup(optarg);
 			break;
-		case 'c':
-			conf->cleanstart = 1;
-			break;
 		case 'M':
 			conf->mlock_pages = 1;
 			break;
 		case 'N':
 			conf->node_name = xstrdup(optarg);
 			break;
+		case 'v':
+			conf->debug_level++;
+			break;
 		case 'V':
 			printf("%s %s\n", PACKAGE, SLURM_VERSION);
 			exit(0);
@@ -879,10 +913,18 @@ _process_cmdline(int ac, char **av)
 static void
 _create_msg_socket()
 {
-	slurm_fd ld = slurm_init_msg_engine_port(conf->port);
+	char* node_addr;
+
+	slurm_fd ld = slurm_init_msg_engine_addrname_port(conf->node_addr,
+							  conf->port);
+	if (conf->node_addr == NULL)
+		node_addr = "*";
+	else
+		node_addr = conf->node_addr;
 
 	if (ld < 0) {
-		error("Unable to bind listen port (%d): %m", conf->port);
+		error("Unable to bind listen port (%s:%d): %m",
+		      node_addr, conf->port);
 		exit(1);
 	}
 
@@ -890,7 +932,8 @@ _create_msg_socket()
 
 	conf->lfd = ld;
 
-	debug3("succesfully opened slurm listen port %d", conf->port);
+	debug3("succesfully opened slurm listen port %s:%d",
+	       node_addr, conf->port);
 
 	return;
 }
@@ -984,8 +1027,13 @@ _slurmd_init()
 	fd_set_close_on_exec(devnull);
 
 	/* make sure we have slurmstepd installed */
-	snprintf(slurm_stepd_path, sizeof(slurm_stepd_path),
-		 "%s/sbin/slurmstepd", SLURM_PREFIX);
+	if (conf->stepd_loc) {
+		snprintf(slurm_stepd_path, sizeof(slurm_stepd_path),
+			 "%s", conf->stepd_loc);
+	} else {
+		snprintf(slurm_stepd_path, sizeof(slurm_stepd_path),
+			 "%s/sbin/slurmstepd", SLURM_PREFIX);
+	}
 	if (stat(slurm_stepd_path, &stat_buf)) {
 		fatal("Unable to find slurmstepd file at %s",
 			slurm_stepd_path);
@@ -1046,9 +1094,7 @@ cleanup:
  * Then exercise the slurmd functionality before executing
  * > scontrol shutdown
  *
- * There should be some definitely lost records from 
- * init_setproctitle (setproctitle.c), but it should otherwise account 
- * for all memory.
+ * All allocated memory should be freed
 \**************************************************************************/
 static int
 _slurmd_fini()
@@ -1061,6 +1107,7 @@ _slurmd_fini()
 	slurm_proctrack_fini();
 	slurm_auth_fini();
 	slurmd_req(NULL);	/* purge memory allocated by slurmd_req() */
+	fini_setproctitle();
 	return SLURM_SUCCESS;
 }
 
@@ -1141,6 +1188,7 @@ _usage()
 	fprintf(stderr, "\
 Usage: %s [OPTIONS]\n\
    -c          Force cleanup of slurmd shared memory.\n\
+   -d stepd    Pathname to the slurmstepd program.\n\
    -D          Run daemon in foreground.\n\
    -M          Use mlock() to lock slurmd pages into memory.\n\
    -h          Print this help message.\n\
diff --git a/src/slurmd/slurmd/slurmd.h b/src/slurmd/slurmd/slurmd.h
index 1723f9d4d..deda34360 100644
--- a/src/slurmd/slurmd/slurmd.h
+++ b/src/slurmd/slurmd/slurmd.h
@@ -1,14 +1,16 @@
 /*****************************************************************************\
  * src/slurmd/slurmd/slurmd.h - header for slurmd
- * $Id: slurmd.h 13690 2008-03-21 18:17:38Z jette $
+ * $Id: slurmd.h 17386 2009-05-01 19:40:09Z jette $
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -94,7 +96,8 @@ typedef struct slurmd_config {
 	uint16_t      cr_type;           /* Consumable Resource Type:       *
 					 * CR_SOCKET, CR_CORE, CR_MEMORY,  *
 					 * CR_DEFAULT, etc.                */
-        char         *node_name;        /* node name                       */
+	char         *node_name;	/* node name                       */
+	char         *node_addr;	/* node's address                  */
 	char         *conffile;		/* config filename                 */
 	char         *logfile;		/* slurmd logfile, if any          */
 	char         *spooldir;		/* SlurmdSpoolDir	           */
@@ -104,6 +107,7 @@ typedef struct slurmd_config {
 	char         *pubkey;		/* location of job cred public key */
 	char         *epilog;		/* Path to Epilog script	   */
 	char         *prolog;		/* Path to prolog script           */
+	char         *stepd_loc;	/* Non-standard slurmstepd path    */
 	char         *task_prolog;	/* per-task prolog script          */
 	char         *task_epilog;	/* per-task epilog script          */
 	int           port;	        /* local slurmd port               */
@@ -121,7 +125,8 @@ typedef struct slurmd_config {
 	pthread_mutex_t config_mutex;	/* lock for slurmd_config access   */
 	uint16_t        job_acct_gather_freq;
 	uint16_t	use_pam;
-	uint16_t	use_cpusets;	/* Use cpusets, if available       */
+	uint16_t	task_plugin_param; /* TaskPluginParams, expressed
+					 * using cpu_bind_type_t flags */
 	uint16_t	propagate_prio;	/* PropagatePrioProcess flag       */
 } slurmd_conf_t;
 
diff --git a/src/slurmd/slurmd/xcpu.c b/src/slurmd/slurmd/xcpu.c
index 6bc5d330e..698713d19 100644
--- a/src/slurmd/slurmd/xcpu.c
+++ b/src/slurmd/slurmd/xcpu.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/slurmd/slurmd/xcpu.h b/src/slurmd/slurmd/xcpu.h
index b98ba58d7..ec91503ec 100644
--- a/src/slurmd/slurmd/xcpu.h
+++ b/src/slurmd/slurmd/xcpu.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/Makefile.am b/src/slurmd/slurmstepd/Makefile.am
index 4c090b9bb..21f2e4a70 100644
--- a/src/slurmd/slurmstepd/Makefile.am
+++ b/src/slurmd/slurmstepd/Makefile.am
@@ -35,6 +35,8 @@ slurmstepd_SOURCES = 	        	\
 	$(top_builddir)/src/slurmd/common/run_script.h \
 	$(top_builddir)/src/slurmd/common/task_plugin.c \
 	$(top_builddir)/src/slurmd/common/task_plugin.h \
+	$(top_builddir)/src/slurmd/common/set_oomadj.c \
+	$(top_builddir)/src/slurmd/common/set_oomadj.h \
 	$(top_builddir)/src/slurmd/common/reverse_tree.h
 
 if HAVE_AIX
diff --git a/src/slurmd/slurmstepd/Makefile.in b/src/slurmd/slurmstepd/Makefile.in
index da2e59b7c..916a6ab8e 100644
--- a/src/slurmd/slurmstepd/Makefile.in
+++ b/src/slurmd/slurmstepd/Makefile.in
@@ -45,14 +45,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -78,7 +82,8 @@ am_slurmstepd_OBJECTS = slurmstepd.$(OBJEXT) mgr.$(OBJEXT) \
 	pam_ses.$(OBJEXT) req.$(OBJEXT) multi_prog.$(OBJEXT) \
 	step_terminate_monitor.$(OBJEXT) proctrack.$(OBJEXT) \
 	setproctitle.$(OBJEXT) slurmstepd_init.$(OBJEXT) \
-	run_script.$(OBJEXT) task_plugin.$(OBJEXT)
+	run_script.$(OBJEXT) task_plugin.$(OBJEXT) \
+	set_oomadj.$(OBJEXT)
 slurmstepd_OBJECTS = $(am_slurmstepd_OBJECTS)
 am__DEPENDENCIES_1 =
 slurmstepd_DEPENDENCIES = $(top_builddir)/src/common/libdaemonize.la \
@@ -114,6 +119,10 @@ 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@
@@ -303,6 +312,8 @@ slurmstepd_SOURCES = \
 	$(top_builddir)/src/slurmd/common/run_script.h \
 	$(top_builddir)/src/slurmd/common/task_plugin.c \
 	$(top_builddir)/src/slurmd/common/task_plugin.h \
+	$(top_builddir)/src/slurmd/common/set_oomadj.c \
+	$(top_builddir)/src/slurmd/common/set_oomadj.h \
 	$(top_builddir)/src/slurmd/common/reverse_tree.h
 
 @HAVE_AIX_FALSE@slurmstepd_LDFLAGS = -export-dynamic $(CMD_LDFLAGS)
@@ -390,6 +401,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proctrack.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/req.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_script.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_oomadj.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setproctitle.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurmstepd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurmstepd_init.Po@am__quote@
@@ -490,6 +502,20 @@ task_plugin.obj: $(top_builddir)/src/slurmd/common/task_plugin.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o task_plugin.obj `if test -f '$(top_builddir)/src/slurmd/common/task_plugin.c'; then $(CYGPATH_W) '$(top_builddir)/src/slurmd/common/task_plugin.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/src/slurmd/common/task_plugin.c'; fi`
 
+set_oomadj.o: $(top_builddir)/src/slurmd/common/set_oomadj.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_oomadj.o -MD -MP -MF $(DEPDIR)/set_oomadj.Tpo -c -o set_oomadj.o `test -f '$(top_builddir)/src/slurmd/common/set_oomadj.c' || echo '$(srcdir)/'`$(top_builddir)/src/slurmd/common/set_oomadj.c
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/set_oomadj.Tpo $(DEPDIR)/set_oomadj.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(top_builddir)/src/slurmd/common/set_oomadj.c' object='set_oomadj.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_oomadj.o `test -f '$(top_builddir)/src/slurmd/common/set_oomadj.c' || echo '$(srcdir)/'`$(top_builddir)/src/slurmd/common/set_oomadj.c
+
+set_oomadj.obj: $(top_builddir)/src/slurmd/common/set_oomadj.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_oomadj.obj -MD -MP -MF $(DEPDIR)/set_oomadj.Tpo -c -o set_oomadj.obj `if test -f '$(top_builddir)/src/slurmd/common/set_oomadj.c'; then $(CYGPATH_W) '$(top_builddir)/src/slurmd/common/set_oomadj.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/src/slurmd/common/set_oomadj.c'; fi`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/set_oomadj.Tpo $(DEPDIR)/set_oomadj.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(top_builddir)/src/slurmd/common/set_oomadj.c' object='set_oomadj.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_oomadj.obj `if test -f '$(top_builddir)/src/slurmd/common/set_oomadj.c'; then $(CYGPATH_W) '$(top_builddir)/src/slurmd/common/set_oomadj.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/src/slurmd/common/set_oomadj.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/src/slurmd/slurmstepd/fname.c b/src/slurmd/slurmstepd/fname.c
index 6c639a970..13b1ca369 100644
--- a/src/slurmd/slurmstepd/fname.c
+++ b/src/slurmd/slurmstepd/fname.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/fname.h b/src/slurmd/slurmstepd/fname.h
index 156423b57..31c3e7ff1 100644
--- a/src/slurmd/slurmstepd/fname.h
+++ b/src/slurmd/slurmstepd/fname.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/io.c b/src/slurmd/slurmstepd/io.c
index bc0128130..d4ff3c45a 100644
--- a/src/slurmd/slurmstepd/io.c
+++ b/src/slurmd/slurmstepd/io.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/slurmd/slurmstepd/io.c - Standard I/O handling routines for slurmstepd
- * $Id: io.c 13672 2008-03-19 23:10:58Z jette $
+ * $Id: io.c 17803 2009-06-10 22:06:56Z da $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -79,6 +80,7 @@
 #include "src/common/xmalloc.h"
 #include "src/common/xsignal.h"
 #include "src/common/xstring.h"
+#include "src/common/write_labelled_message.h"
 
 #include "src/slurmd/slurmd/slurmd.h"
 #include "src/slurmd/slurmstepd/io.h"
@@ -118,8 +120,27 @@ struct client_io_info {
 	struct io_buf *out_msg;
 	int32_t out_remaining;
 	bool out_eof;
+
+	/* For clients that only write stdout or stderr, and/or only
+	   write for one task. -1 means accept output from any task. */
+	int  ltaskid_stdout, ltaskid_stderr;
+	bool labelio;
+	int  label_width;
+
+	/* true if writing to a file, false if writing to a socket */
+	bool is_local_file;
 };
 
+
+static bool _local_file_writable(eio_obj_t *);
+static int  _local_file_write(eio_obj_t *, List);
+
+struct io_operations local_file_ops = {
+	writable:	&_local_file_writable,
+	handle_write:	&_local_file_write,
+};
+
+
 /**********************************************************************
  * Task write declarations
  **********************************************************************/
@@ -452,6 +473,90 @@ again:
 	return SLURM_SUCCESS;
 }
 
+
+static bool 
+_local_file_writable(eio_obj_t *obj)
+{
+	struct client_io_info *client = (struct client_io_info *) obj->arg;
+
+	xassert(client->magic == CLIENT_IO_MAGIC);
+
+	if (client->out_eof == true)
+		return false;
+
+	if (client->out_msg != NULL || !list_is_empty(client->msg_queue))
+		return true;
+
+	return false;
+}
+
+
+/*
+ * The slurmstepd writes I/O to a file, possibly adding a label.
+ */
+static int
+_local_file_write(eio_obj_t *obj, List objs)
+{
+	struct client_io_info *client = (struct client_io_info *) obj->arg;
+	void *buf;
+	int n;
+	struct slurm_io_header header;
+	Buf header_tmp_buf;
+
+	xassert(client->magic == CLIENT_IO_MAGIC);
+	/*
+	 * If we aren't already in the middle of sending a message, get the
+	 * next message from the queue.
+	 */
+	if (client->out_msg == NULL) {
+		client->out_msg = list_dequeue(client->msg_queue);
+		if (client->out_msg == NULL) {
+			return SLURM_SUCCESS;
+		}
+		client->out_remaining = client->out_msg->length - 
+					io_hdr_packed_size();
+	}
+
+	/* This code to make a buffer, fill it, unpack its contents, and free
+	   it is just used to read the header to get the global task id. */
+	header_tmp_buf = create_buf(client->out_msg->data, 
+				    client->out_msg->length);
+	io_hdr_unpack(&header, header_tmp_buf);
+	header_tmp_buf->head = NULL;
+	free_buf(header_tmp_buf);
+
+	/* A zero-length message indicates the end of a stream from one
+	   of the tasks.  Just free the message and return. */
+	if (header.length == 0) {
+		_free_outgoing_msg(client->out_msg, client->job);
+		client->out_msg = NULL;
+		return SLURM_SUCCESS;
+	}
+
+	/* Write the message to the file. */
+	buf = client->out_msg->data + 
+		(client->out_msg->length - client->out_remaining);
+
+	n = write_labelled_message(obj->fd, buf, client->out_remaining, 
+				   header.gtaskid, client->labelio, 
+				   client->label_width);
+	if (n < 0) {
+		client->out_eof = true;
+		_free_all_outgoing_msgs(client->msg_queue, client->job);
+		return SLURM_ERROR;
+	}
+
+	client->out_remaining -= n;
+	if (client->out_remaining == 0) {
+		_free_outgoing_msg(client->out_msg, client->job);
+		client->out_msg = NULL;
+	}
+	return SLURM_SUCCESS;
+}
+
+
+
+
 /**********************************************************************
  * Task write functions
  **********************************************************************/
@@ -541,7 +646,7 @@ _task_write(eio_obj_t *obj, List objs)
 	}
 
 	/*
-	 * Write message to socket.
+	 * Write message to pipe.
 	 */
 	buf = in->msg->data + (in->msg->length - in->remaining);
 again:
@@ -798,22 +903,7 @@ _spawn_window_manager(slurmd_task_info_t *task, slurmd_job_t *job)
 static int
 _init_task_stdio_fds(slurmd_task_info_t *task, slurmd_job_t *job)
 {
-	slurm_ctl_conf_t *conf;
-	int file_flags;
-
-	/* set files for opening stdout/err */
-	if (job->open_mode == OPEN_MODE_APPEND)
-		file_flags = O_CREAT|O_WRONLY|O_APPEND;
-	else if (job->open_mode == OPEN_MODE_TRUNCATE)
-		file_flags = O_CREAT|O_WRONLY|O_APPEND|O_TRUNC;
-	else {
-		conf = slurm_conf_lock();
-		if (conf->job_file_append)
-			file_flags = O_CREAT|O_WRONLY|O_APPEND;
-		else
-			file_flags = O_CREAT|O_WRONLY|O_APPEND|O_TRUNC;
-		slurm_conf_unlock();
-	}
+	int file_flags = io_get_file_flags(job);
 
 	/*
 	 *  Initialize stdin
@@ -899,20 +989,17 @@ _init_task_stdio_fds(slurmd_task_info_t *task, slurmd_job_t *job)
 			fd_set_close_on_exec(task->stdout_fd);
 			task->from_stdout = -1;  /* not used */
 		}
-	} else if (task->ofname != NULL) {
+	} else if (task->ofname != NULL && 
+		   (!job->labelio || strcmp(task->ofname, "/dev/null")==0)) {
 #else
-	if (task->ofname != NULL) {
+	if (task->ofname != NULL && 
+	    (!job->labelio || strcmp(task->ofname, "/dev/null")==0) ) {
 #endif
 		/* open file on task's stdout */
 		debug5("  stdout file name = %s", task->ofname);
 		task->stdout_fd = open(task->ofname, file_flags, 0666);
 		if (task->stdout_fd == -1) {
-			error("Could not open stdout file: %m");
-			xfree(task->ofname);
-			task->ofname = fname_create(job, "slurm-%J.out", 0);
-			task->stdout_fd = open(task->ofname, file_flags, 0666);
-			if (task->stdout_fd == -1)
-				return SLURM_ERROR;
+			return SLURM_ERROR;
 		}
 		fd_set_close_on_exec(task->stdout_fd);
 		task->from_stdout = -1; /* not used */
@@ -957,20 +1044,17 @@ _init_task_stdio_fds(slurmd_task_info_t *task, slurmd_job_t *job)
 			fd_set_close_on_exec(task->stderr_fd);
 			task->from_stderr = -1;  /* not used */
 		}
-	} else if (task->efname != NULL) {
+	} else if (task->efname != NULL && 
+		   (!job->labelio || strcmp(task->efname, "/dev/null")==0)) {
 #else
-	if (task->efname != NULL) {
+	if (task->efname != NULL && 
+	    (!job->labelio || strcmp(task->efname, "/dev/null")==0) ) {
 #endif
 		/* open file on task's stdout */
 		debug5("  stderr file name = %s", task->efname);
 		task->stderr_fd = open(task->efname, file_flags, 0666);
 		if (task->stderr_fd == -1) {
-			error("Could not open stderr file: %m");
-			xfree(task->efname);
-			task->efname = fname_create(job, "slurm-%J.err", 0);
-			task->stderr_fd = open(task->efname, file_flags, 0666);
-			if (task->stderr_fd == -1)
-				return SLURM_ERROR;
+			return SLURM_ERROR;
 		}
 		fd_set_close_on_exec(task->stderr_fd);
 		task->from_stderr = -1; /* not used */
@@ -999,13 +1083,15 @@ _init_task_stdio_fds(slurmd_task_info_t *task, slurmd_job_t *job)
 int
 io_init_tasks_stdio(slurmd_job_t *job)
 {
-	int i;
+	int i, rc = SLURM_SUCCESS, tmprc;
 
 	for (i = 0; i < job->ntasks; i++) {
-		_init_task_stdio_fds(job->task[i], job);
+		tmprc = _init_task_stdio_fds(job->task[i], job);
+		if (tmprc != SLURM_SUCCESS)
+			rc = tmprc;
 	}
 
-	return 0;
+	return rc;
 }
 
 int
@@ -1070,14 +1156,25 @@ _route_msg_task_to_client(eio_obj_t *obj)
 		if (msg == NULL)
 			return;
 
-/* 		debug5("\"%s\"", msg->data + io_hdr_packed_size()); */
-
 		/* Add message to the msg_queue of all clients */
 		clients = list_iterator_create(out->job->clients);
 		while((eio = list_next(clients))) {
 			client = (struct client_io_info *)eio->arg;
 			if (client->out_eof == true)
 				continue;
+
+			/* Some clients only take certain I/O streams */
+			if (out->type==SLURM_IO_STDOUT) {
+				if (client->ltaskid_stdout != -1 && 
+				    client->ltaskid_stdout != out->ltaskid)
+					continue;
+			}
+			if (out->type==SLURM_IO_STDERR) {
+				if (client->ltaskid_stderr != -1 && 
+				    client->ltaskid_stderr != out->ltaskid)
+					continue;
+			}
+
 			debug5("======================== Enqueued message");
 			xassert(client->magic == CLIENT_IO_MAGIC);
 			if (list_enqueue(client->msg_queue, msg))
@@ -1192,11 +1289,39 @@ io_close_all(slurmd_job_t *job)
 	eio_signal_shutdown(job->eio);
 }
 
+void 
+io_close_local_fds(slurmd_job_t *job)
+{
+	ListIterator clients;
+	eio_obj_t *eio;
+	int rc;
+	struct client_io_info *client;
+
+	if (job == NULL || job->clients == NULL)
+		return;
+
+	clients = list_iterator_create(job->clients);
+	while((eio = list_next(clients))) {
+		client = (struct client_io_info *)eio->arg;
+		if (client->is_local_file) {
+			if (eio->fd >= 0) {
+				do {
+					rc = close(eio->fd);
+				} while (rc == -1 && errno == EINTR);
+				eio->fd = -1;
+			}
+		}
+	}
+}
+
+
+
 static void *
 _io_thr(void *arg)
 {
 	slurmd_job_t *job = (slurmd_job_t *) arg;
 	sigset_t set;
+	int rc;
 
 	/* A SIGHUP signal signals a reattach to the mgr thread.  We need
 	 * to block SIGHUP from being delivered to this thread so the mgr
@@ -1208,11 +1333,60 @@ _io_thr(void *arg)
 	pthread_sigmask(SIG_BLOCK, &set, NULL);
 
 	debug("IO handler started pid=%lu", (unsigned long) getpid());
-	eio_handle_mainloop(job->eio);
-	debug("IO handler exited");
+	rc = eio_handle_mainloop(job->eio);
+	debug("IO handler exited, rc=%d", rc);
 	return (void *)1;
 }
 
+/*
+ *  Add a client to the job's client list that will write stdout and/or
+ *  stderr from the slurmstepd.  The slurmstepd handles the write when
+ *  a file is created per node or per task, and the output needs to be
+ *  modified in some way, like labelling lines with the task number.
+ */
+int
+io_create_local_client(const char *filename, int file_flags, 
+		       slurmd_job_t *job, bool labelio,
+		       int stdout_tasks, int stderr_tasks)
+{
+	int fd = -1;
+	struct client_io_info *client;
+	eio_obj_t *obj;
+	int tmp;
+
+	fd = open(filename, file_flags, 0666);
+	if (fd == -1) {
+		return ESLURMD_IO_ERROR;
+	}
+	fd_set_close_on_exec(fd);
+
+	/* Now set up the eio object */
+	client = xmalloc(sizeof(struct client_io_info));
+#ifndef NDEBUG
+	client->magic = CLIENT_IO_MAGIC;
+#endif
+	client->job = job;
+	client->msg_queue = list_create(NULL); /* FIXME - destructor */
+
+	client->ltaskid_stdout = stdout_tasks;
+	client->ltaskid_stderr = stderr_tasks;
+	client->labelio = labelio;
+	client->is_local_file = true;
+
+	client->label_width = 1;
+	tmp = job->ntasks-1;
+	while ((tmp /= 10) > 0)
+		client->label_width++;
+
+
+	obj = eio_obj_create(fd, &local_file_ops, (void *)client);
+	list_append(job->clients, (void *)obj);
+	eio_new_initial_obj(job->eio, (void *)obj);
+	debug5("Now handling %d IO Client object(s)", list_count(job->clients));
+
+	return SLURM_SUCCESS;
+}
+
 /* 
  * Create the initial TCP connection back to a waiting client (e.g. srun).
  *
@@ -1224,7 +1398,8 @@ _io_thr(void *arg)
  * an IO stream.
  */
 int
-io_initial_client_connect(srun_info_t *srun, slurmd_job_t *job)
+io_initial_client_connect(srun_info_t *srun, slurmd_job_t *job, 
+			  int stdout_tasks, int stderr_tasks)
 {
 	int sock = -1;
 	struct client_io_info *client;
@@ -1267,6 +1442,12 @@ io_initial_client_connect(srun_info_t *srun, slurmd_job_t *job)
 	client->job = job;
 	client->msg_queue = list_create(NULL); /* FIXME - destructor */
 
+	client->ltaskid_stdout = stdout_tasks;
+	client->ltaskid_stderr = stderr_tasks;
+	client->labelio = false;
+	client->label_width = 0;
+	client->is_local_file = false;
+
 	obj = eio_obj_create(sock, &client_ops, (void *)client);
 	list_append(job->clients, (void *)obj);
 	eio_new_initial_obj(job->eio, (void *)obj);
@@ -1320,6 +1501,13 @@ io_client_connect(srun_info_t *srun, slurmd_job_t *job)
 #endif
 	client->job = job;
 	client->msg_queue = NULL; /* initialized in _client_writable */
+
+	client->ltaskid_stdout = -1;     /* accept from all tasks */
+	client->ltaskid_stderr = -1;     /* accept from all tasks */
+	client->labelio = false;
+	client->label_width = 0;
+	client->is_local_file = false;
+
 	/* client object adds itself to job->clients in _client_writable */
 
 	obj = eio_obj_create(sock, &client_ops, (void *)client);
@@ -1426,6 +1614,19 @@ _send_eof_msg(struct task_read_info *out)
 		client = (struct client_io_info *)eio->arg;
 		debug5("======================== Enqueued eof message");
 		xassert(client->magic == CLIENT_IO_MAGIC);
+
+		/* Some clients only take certain I/O streams */
+		if (out->type==SLURM_IO_STDOUT) {
+			if (client->ltaskid_stdout != -1 && 
+			    client->ltaskid_stdout != out->ltaskid)
+				continue;
+		}
+		if (out->type==SLURM_IO_STDERR) {
+			if (client->ltaskid_stderr != -1 && 
+			    client->ltaskid_stderr != out->ltaskid)
+				continue;
+		}
+
 		if (list_enqueue(client->msg_queue, msg))
 			msg->ref_count++;
 	}
@@ -1624,3 +1825,141 @@ user_managed_io_client_connect(int ntasks, srun_info_t *srun,
 	return SLURM_SUCCESS;
 }
 
+
+void
+io_find_filename_pattern( slurmd_job_t *job, 
+			  slurmd_filename_pattern_t *outpattern, 
+			  slurmd_filename_pattern_t *errpattern,
+			  bool *same_out_err_files )
+{
+	int ii, jj;
+	int of_num_null = 0, ef_num_null = 0;
+	int of_num_devnull = 0, ef_num_devnull = 0;
+	int of_lastnull = -1, ef_lastnull = -1;
+	bool of_all_same = true, ef_all_same = true;
+	bool of_all_unique = true, ef_all_unique = true;
+
+	*outpattern = SLURMD_UNKNOWN;
+	*errpattern = SLURMD_UNKNOWN;
+	*same_out_err_files = false;
+
+	for (ii = 0; ii < job->ntasks; ii++) {
+		if (job->task[ii]->ofname == NULL) {
+			of_num_null++;
+			of_lastnull = ii;
+		} else if (strcmp(job->task[ii]->ofname, "/dev/null")==0) {
+			of_num_devnull++;
+		}
+
+		if (job->task[ii]->efname == NULL) {
+			ef_num_null++;
+			ef_lastnull = ii;
+		} else if (strcmp(job->task[ii]->efname, "/dev/null")==0) {
+			ef_num_devnull++;
+		}
+	}
+	if (of_num_null == job->ntasks)
+		*outpattern = SLURMD_ALL_NULL;
+
+	if (ef_num_null == job->ntasks)
+		*errpattern = SLURMD_ALL_NULL;
+
+	if (of_num_null == 1 && of_num_devnull == job->ntasks-1)
+		*outpattern = SLURMD_ONE_NULL;
+
+	if (ef_num_null == 1 && ef_num_devnull == job->ntasks-1)
+		*errpattern = SLURMD_ONE_NULL;
+
+	if (*outpattern == SLURMD_ALL_NULL && *errpattern == SLURMD_ALL_NULL)
+		*same_out_err_files = true;
+
+	if (*outpattern == SLURMD_ONE_NULL && *errpattern == SLURMD_ONE_NULL &&
+	    of_lastnull == ef_lastnull)
+		*same_out_err_files = true;
+
+	if (*outpattern != SLURMD_UNKNOWN && *errpattern != SLURMD_UNKNOWN)
+		return;
+
+	for (ii = 1; ii < job->ntasks; ii++) {
+		if (!job->task[ii]->ofname || !job->task[0]->ofname ||
+		    strcmp(job->task[ii]->ofname, job->task[0]->ofname) != 0)
+			of_all_same = false;
+
+		if (!job->task[ii]->efname || !job->task[0]->efname ||
+		    strcmp(job->task[ii]->efname, job->task[0]->efname) != 0)
+			ef_all_same = false;
+	}
+
+	if (of_all_same && *outpattern == SLURMD_UNKNOWN)
+		*outpattern = SLURMD_ALL_SAME;
+
+	if (ef_all_same && *errpattern == SLURMD_UNKNOWN)
+		*errpattern = SLURMD_ALL_SAME;
+
+	if (job->task[0]->ofname && job->task[0]->efname &&
+	    strcmp(job->task[0]->ofname, job->task[0]->efname)==0)
+		*same_out_err_files = true;
+
+	if (*outpattern != SLURMD_UNKNOWN && *errpattern != SLURMD_UNKNOWN)
+		return;
+
+	for (ii = 0; ii < job->ntasks-1; ii++) {
+		for (jj = ii+1; jj < job->ntasks; jj++) {
+
+			if (!job->task[ii]->ofname || !job->task[jj]->ofname ||
+			    strcmp(job->task[ii]->ofname, 
+				   job->task[jj]->ofname) == 0)
+				of_all_unique = false;
+
+			if (!job->task[ii]->efname || !job->task[jj]->efname ||
+			    strcmp(job->task[ii]->efname, 
+				   job->task[jj]->efname) == 0)
+				ef_all_unique = false;
+		}
+	}
+
+	if (of_all_unique)
+		*outpattern = SLURMD_ALL_UNIQUE;
+
+	if (ef_all_unique)
+		*errpattern = SLURMD_ALL_UNIQUE;
+
+	if (of_all_unique && ef_all_unique) {
+		*same_out_err_files = true;
+		for (ii = 0; ii < job->ntasks; ii++) {
+			if (job->task[ii]->ofname && 
+			    job->task[ii]->efname &&
+			    strcmp(job->task[ii]->ofname,
+				   job->task[ii]->efname) != 0) {
+				*same_out_err_files = false;
+				break;
+			}
+		}
+	}
+}
+
+
+int
+io_get_file_flags(slurmd_job_t *job)
+{
+	slurm_ctl_conf_t *conf;
+	int file_flags;
+
+	/* set files for opening stdout/err */
+	if (job->open_mode == OPEN_MODE_APPEND)
+		file_flags = O_CREAT|O_WRONLY|O_APPEND;
+	else if (job->open_mode == OPEN_MODE_TRUNCATE)
+		file_flags = O_CREAT|O_WRONLY|O_APPEND|O_TRUNC;
+	else {
+		conf = slurm_conf_lock();
+		if (conf->job_file_append)
+			file_flags = O_CREAT|O_WRONLY|O_APPEND;
+		else
+			file_flags = O_CREAT|O_WRONLY|O_APPEND|O_TRUNC;
+		slurm_conf_unlock();
+	}
+	return file_flags;
+}
+
+
+
diff --git a/src/slurmd/slurmstepd/io.h b/src/slurmd/slurmstepd/io.h
index e1adb77f0..9bf9c2f47 100644
--- a/src/slurmd/slurmstepd/io.h
+++ b/src/slurmd/slurmstepd/io.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/slurmd/slurmstepd/io.h - slurmstepd standard IO routines
- * $Id: io.h 13672 2008-03-19 23:10:58Z jette $
+ * $Id: io.h 17803 2009-06-10 22:06:56Z da $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -56,6 +57,23 @@ struct io_buf {
 	void *data;
 };
 
+/* For each task's ofname and efname, are all the names NULL, 
+   one null and the others "/dev/null", all non-null and unique,
+   or all non-null and identical. */
+typedef enum {
+	SLURMD_ALL_NULL,   /* output from all tasks goes to the client (srun) */
+	SLURMD_ONE_NULL,   /* output from one task goes to the client, output
+			      from other tasks is discarded */
+	SLURMD_ALL_UNIQUE, /* separate output files per task.  written from 
+			      tasks unless slurmd_job_t->labelio == true, in 
+			      which case the slurmstepd does the write */
+	SLURMD_ALL_SAME,   /* all tasks write to the same file.  written from 
+			      tasks unless slurmd_job_t->labelio == true, in 
+			      which case the slurmstepd does the write */
+	SLURMD_UNKNOWN
+} slurmd_filename_pattern_t;
+
+
 struct io_buf *alloc_io_buf(void);
 void free_io_buf(struct io_buf *buf);
 
@@ -66,7 +84,8 @@ void free_io_buf(struct io_buf *buf);
  * yet started, we initialize the msg_queue as an empty list and
  * directly add the eio_obj_t to the eio handle with eio_new_initial_handle.
  */
-int io_initial_client_connect(srun_info_t *srun, slurmd_job_t *job);
+int io_initial_client_connect(srun_info_t *srun, slurmd_job_t *job, 
+			      int stdout_tasks, int stderr_tasks);
 
 /* 
  * Initiate a TCP connection back to a waiting client (e.g. srun).
@@ -76,6 +95,16 @@ int io_initial_client_connect(srun_info_t *srun, slurmd_job_t *job);
  */
 int io_client_connect(srun_info_t *srun, slurmd_job_t *job);
 
+
+/* 
+ * Open a local file and create and eio object for files written
+ * from the slurmstepd, probably with labelled output.
+ */
+int
+io_create_local_client(const char *filename, int file_flags, 
+		       slurmd_job_t *job, bool labelio,
+		       int stdout_tasks, int stderr_tasks);
+
 /*
  * Initialize each task's standard I/O file descriptors.  The file descriptors
  * may be files, or may be the end of a pipe which is handled by an eio_obj_t.
@@ -101,6 +130,24 @@ void io_close_task_fds(slurmd_job_t *job);
 
 void io_close_all(slurmd_job_t *job);
 
+void io_close_local_fds(slurmd_job_t *job);
+
+
+/* 
+ *  Look for a pattern in the stdout and stderr file names, and see
+ *  if stdout and stderr point to the same file(s).
+ *  See comments above for slurmd_filename_pattern_t.
+ */
+void io_find_filename_pattern(  slurmd_job_t *job, 
+				slurmd_filename_pattern_t *outpattern, 
+				slurmd_filename_pattern_t *errpattern,
+				bool *same_out_err_files );
+
+/* 
+ *  Get the flags to be used with the open call to create output files.
+ */
+int io_get_file_flags(slurmd_job_t *job);
+
 /*
  *  Initialize "user managed" IO, where each task has a single TCP
  *  socket end point shared on stdin, stdout, and stderr.
diff --git a/src/slurmd/slurmstepd/mgr.c b/src/slurmd/slurmstepd/mgr.c
index 3ad0e1d36..cd09599ba 100644
--- a/src/slurmd/slurmstepd/mgr.c
+++ b/src/slurmd/slurmstepd/mgr.c
@@ -1,15 +1,16 @@
 /*****************************************************************************\
  *  src/slurmd/slurmstepd/mgr.c - job manager functions for slurmstepd
- *  $Id: mgr.c 17040 2009-03-26 15:03:18Z jette $
+ *  $Id: mgr.c 17803 2009-06-10 22:06:56Z da $
  *****************************************************************************
  *  Copyright (C) 2002-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 Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -76,22 +77,23 @@
 
 #include <slurm/slurm_errno.h>
 
+#include "src/common/basil_resv_conf.h"
 #include "src/common/cbuf.h"
 #include "src/common/env.h"
+#include "src/common/fd.h"
+#include "src/common/forward.h"
 #include "src/common/hostlist.h"
 #include "src/common/log.h"
+#include "src/common/mpi.h"
 #include "src/common/node_select.h"
-#include "src/common/fd.h"
+#include "src/common/plugstack.h"
 #include "src/common/safeopen.h"
 #include "src/common/slurm_jobacct_gather.h"
 #include "src/common/switch.h"
+#include "src/common/util-net.h"
+#include "src/common/xmalloc.h"
 #include "src/common/xsignal.h"
 #include "src/common/xstring.h"
-#include "src/common/xmalloc.h"
-#include "src/common/util-net.h"
-#include "src/common/forward.h"
-#include "src/common/plugstack.h"
-#include "src/common/mpi.h"
 
 #include "src/slurmd/slurmd/slurmd.h"
 
@@ -100,6 +102,7 @@
 #include "src/slurmd/common/task_plugin.h"
 #include "src/slurmd/common/run_script.h"
 #include "src/slurmd/common/reverse_tree.h"
+#include "src/slurmd/common/set_oomadj.h"
 
 #include "src/slurmd/slurmstepd/slurmstepd.h"
 #include "src/slurmd/slurmstepd/mgr.h"
@@ -124,11 +127,11 @@ static int mgr_sigarray[] = {
 };
 
 struct priv_state {
-	uid_t           saved_uid;
-	gid_t           saved_gid;
-	gid_t *         gid_list;
-	int             ngids;
-	char            saved_cwd [4096];
+	uid_t	saved_uid;
+	gid_t	saved_gid;
+	gid_t *	gid_list;
+	int	ngids;
+	char	saved_cwd [4096];
 };
 
 step_complete_t step_complete = {
@@ -143,7 +146,7 @@ step_complete_t step_complete = {
 	true,
 	(bitstr_t *)NULL,
 	0,
-        NULL
+	NULL
 };
 
 typedef struct kill_thread {
@@ -161,20 +164,20 @@ typedef struct kill_thread {
  */
 static int  _access(const char *path, int modes, uid_t uid, gid_t gid);
 static void _send_launch_failure(launch_tasks_request_msg_t *, 
-                                 slurm_addr *, int);
+				 slurm_addr *, int);
 static int  _fork_all_tasks(slurmd_job_t *job);
 static int  _become_user(slurmd_job_t *job, struct priv_state *ps);
 static void  _set_prio_process (slurmd_job_t *job);
 static void _set_job_log_prefix(slurmd_job_t *job);
 static int  _setup_normal_io(slurmd_job_t *job);
 static int  _drop_privileges(slurmd_job_t *job, bool do_setuid,
-				struct priv_state *state);
+			     struct priv_state *state);
 static int  _reclaim_privileges(struct priv_state *state);
 static void _send_launch_resp(slurmd_job_t *job, int rc);
 static void _slurmd_job_log_init(slurmd_job_t *job);
 static void _wait_for_io(slurmd_job_t *job);
 static int  _send_exit_msg(slurmd_job_t *job, uint32_t *tid, int n, 
-		int status);
+			   int status);
 static void _wait_for_children_slurmstepd(slurmd_job_t *job);
 static int  _send_pending_exit_msgs(slurmd_job_t *job);
 static void _send_step_complete_msgs(slurmd_job_t *job);
@@ -356,7 +359,7 @@ _set_job_log_prefix(slurmd_job_t *job)
 static int
 _setup_normal_io(slurmd_job_t *job)
 {
-	int            rc   = 0;
+	int rc = 0, ii = 0;
 	struct priv_state sprivs;
 
 	debug2("Entering _setup_normal_io");
@@ -369,12 +372,8 @@ _setup_normal_io(slurmd_job_t *job)
 	if (_drop_privileges(job, true, &sprivs) < 0)
 		return ESLURMD_SET_UID_OR_GID_ERROR;
 
-	/* FIXME - need to check a return code for failures */
-	io_init_tasks_stdio(job);
-
-	if (_reclaim_privileges(&sprivs) < 0)
-		error("sete{u/g}id(%lu/%lu): %m", 
-		      (u_long) sprivs.saved_uid, (u_long) sprivs.saved_gid);
+	if (io_init_tasks_stdio(job) != SLURM_SUCCESS)
+		return ESLURMD_IO_ERROR;
 
 	/*
 	 * MUST create the initial client object before starting
@@ -382,15 +381,102 @@ _setup_normal_io(slurmd_job_t *job)
 	 */
 	if (!job->batch) {
 		srun_info_t *srun = list_peek(job->sruns);
+
+		/* local id of task that sends to srun, -1 for all tasks,
+		   any other value for no tasks */
+		int srun_stdout_tasks = -1;
+		int srun_stderr_tasks = -1;
+
 		xassert(srun != NULL);
-		rc = io_initial_client_connect(srun, job);
+
+		/* If I/O is labelled with task num, and if a separate file is
+		   written per node or per task, the I/O needs to be sent 
+		   back to the stepd, get a label appended, and written from
+		   the stepd rather than sent back to srun or written directly
+		   from the node.  When a task has ofname or efname == NULL, it
+		   means data gets sent back to the client. */
+
+		if (job->labelio) {
+			slurmd_filename_pattern_t outpattern, errpattern;
+			bool same = false;
+			int file_flags;
+
+			io_find_filename_pattern(job, &outpattern, &errpattern,
+						 &same);
+			file_flags = io_get_file_flags(job);
+
+			/* Make eio objects to write from the slurmstepd */
+			if (outpattern == SLURMD_ALL_UNIQUE) {
+				/* Open a separate file per task */
+				for (ii = 0; ii < job->ntasks; ii++) {
+					rc = io_create_local_client( 
+						job->task[ii]->ofname, 
+						file_flags, job, job->labelio,
+						job->task[ii]->id,
+						same ? job->task[ii]->id : -2);
+					if (rc != SLURM_SUCCESS)
+						return ESLURMD_IO_ERROR;
+				}
+				srun_stdout_tasks = -2;
+				if (same)
+					srun_stderr_tasks = -2;
+			} else if (outpattern == SLURMD_ALL_SAME) {
+				/* Open a file for all tasks */
+				rc = io_create_local_client( 
+					job->task[0]->ofname, 
+					file_flags, job, job->labelio,
+					-1, same ? -1 : -2);
+				if (rc != SLURM_SUCCESS)
+					return ESLURMD_IO_ERROR;
+
+				srun_stdout_tasks = -2;
+				if (same)
+					srun_stderr_tasks = -2;
+			}
+
+			if (!same) {
+				if (errpattern == SLURMD_ALL_UNIQUE) {
+					/* Open a separate file per task */
+					for (ii = 0; ii < job->ntasks; ii++) {
+						rc = io_create_local_client( 
+							job->task[ii]->efname, 
+							file_flags, job, 
+							job->labelio,
+							-2, job->task[ii]->id);
+						if (rc != SLURM_SUCCESS)
+							return ESLURMD_IO_ERROR;
+					}
+					srun_stderr_tasks = -2;
+				} else if (errpattern == SLURMD_ALL_SAME) {
+					/* Open a file for all tasks */
+					rc = io_create_local_client( 
+						job->task[0]->efname, 
+						file_flags, job, job->labelio,
+						-2, -1);
+					if (rc != SLURM_SUCCESS)
+						return ESLURMD_IO_ERROR;
+
+					srun_stderr_tasks = -2;
+				}
+			}
+		}
+
+		rc = io_initial_client_connect(srun, job, srun_stdout_tasks, 
+					       srun_stderr_tasks);
 		if (rc < 0) 
 			return ESLURMD_IO_ERROR;
 	}
 
-	if (!job->batch)
+	if (_reclaim_privileges(&sprivs) < 0) {
+		error("sete{u/g}id(%lu/%lu): %m",
+		      (u_long) sprivs.saved_uid, (u_long) sprivs.saved_gid);
+	}
+
+	if (!job->batch) {
 		if (io_thread_start(job) < 0)
 			return ESLURMD_IO_ERROR;
+	}
+
 	debug2("Leaving  _setup_normal_io");
 	return SLURM_SUCCESS;
 }
@@ -436,14 +522,14 @@ _send_exit_msg(slurmd_job_t *job, uint32_t *tid, int n, int status)
 
 	debug3("sending task exit msg for %d tasks", n);
 
-	msg.task_id_list = tid;
-	msg.num_tasks    = n;
-	msg.return_code  = status;
-	msg.job_id       = job->jobid;
-	msg.step_id      = job->stepid;
+	msg.task_id_list	= tid;
+	msg.num_tasks		= n;
+	msg.return_code		= status;
+	msg.job_id		= job->jobid;
+	msg.step_id		= job->stepid;
 	slurm_msg_t_init(&resp);
-	resp.data        = &msg;
-	resp.msg_type    = MESSAGE_TASK_EXIT;
+	resp.data		= &msg;
+	resp.msg_type		= MESSAGE_TASK_EXIT;
 	
 	/*
 	 *  XXX Hack for TCP timeouts on exit of large, synchronized
@@ -544,6 +630,8 @@ _one_step_complete_msg(slurmd_job_t *job, int first, int last)
 	static bool acct_sent = false;
 
 	debug2("_one_step_complete_msg: first=%d, last=%d", first, last);
+
+	memset(&msg, 0, sizeof(step_complete_msg_t));
 	msg.job_id = job->jobid;
 	msg.job_step_id = job->stepid;
 	msg.range_first = first;
@@ -697,6 +785,7 @@ job_manager(slurmd_job_t *job)
 {
 	int  rc = 0;
 	bool io_initialized = false;
+	char *ckpt_type = slurm_get_checkpoint_type();
 
 	debug3("Entered job_manager for %u.%u pid=%lu",
 	       job->jobid, job->stepid, (unsigned long) job->jmgr_pid);
@@ -706,6 +795,7 @@ job_manager(slurmd_job_t *job)
 	if (switch_init() != SLURM_SUCCESS
 	    || slurmd_task_init() != SLURM_SUCCESS
 	    || slurm_proctrack_init() != SLURM_SUCCESS
+	    || checkpoint_init(ckpt_type) != SLURM_SUCCESS
 	    || slurm_jobacct_gather_init() != SLURM_SUCCESS) {
 		rc = SLURM_PLUGIN_NAME_INVALID;
 		goto fail1;
@@ -736,10 +826,11 @@ job_manager(slurmd_job_t *job)
 	if (prctl(PR_SET_DUMPABLE, 1) < 0)
 		debug ("Unable to set dumpable to 1");
 #  endif /* PR_SET_DUMPABLE */
-#endif   /* !NDEBUG         */
+#endif   /* !NDEBUG	 */
 
 	if (rc) {
 		error("IO setup failed: %m");
+		rc = SLURM_SUCCESS;	/* drains node otherwise */
 		goto fail2;
 	} else {
 		io_initialized = true;
@@ -754,6 +845,14 @@ job_manager(slurmd_job_t *job)
 		goto fail2;
 	}
 
+	/* fork necessary threads for checkpoint */
+	if (checkpoint_stepd_prefork(job) != SLURM_SUCCESS) {
+		error("Failed checkpoint_stepd_prefork");
+		rc = SLURM_FAILURE;
+		io_close_task_fds(job);
+		goto fail2;
+	}
+	
 	/* calls pam_setup() and requires pam_finish() if successful */
 	if (_fork_all_tasks(job) < 0) {
 		debug("_fork_all_tasks failed");
@@ -820,11 +919,9 @@ job_manager(slurmd_job_t *job)
 	/*
 	 * Wait for io thread to complete (if there is one)
 	 */
-	if (!job->batch && !job->user_managed_io && io_initialized) {
-		eio_signal_shutdown(job->eio);
+	if (!job->batch && !job->user_managed_io && io_initialized) 
 		_wait_for_io(job);
-	}
-
+	
 	debug2("Before call to spank_fini()");
 	if (spank_fini (job)  < 0) {
 		error ("spank_fini failed\n");
@@ -847,9 +944,22 @@ job_manager(slurmd_job_t *job)
 		_send_step_complete_msgs(job);
 	}
 
+	xfree(ckpt_type);
 	return(rc);
 }
 
+static int
+_spank_task_privileged(slurmd_job_t *job, int taskid, struct priv_state *sp)
+{
+	if (_reclaim_privileges(sp) < 0)
+		return SLURM_ERROR;
+
+	if (spank_task_privileged (job, taskid) < 0)
+		return error("spank_task_init_privileged failed");
+
+	return(_drop_privileges (job, true, sp));
+}
+
 
 /* fork and exec N tasks
  */ 
@@ -863,6 +973,7 @@ _fork_all_tasks(slurmd_job_t *job)
 	int fdpair[2];
 	struct priv_state sprivs;
 	jobacct_id_t jobacct_id;
+	char *oom_value;
 
 	xassert(job != NULL);
 
@@ -871,6 +982,13 @@ _fork_all_tasks(slurmd_job_t *job)
 		return SLURM_ERROR;
 	}
 
+#ifdef HAVE_CRAY_XT
+	if (basil_resv_conf(job->resv_id, job->jobid)) {
+		error("could not confirm reservation");
+		return SLURM_ERROR;
+	}
+#endif
+
 	debug2("Before call to spank_init()");
 	if (spank_init (job) < 0) {
 		error ("Plugin stack initialization failed.\n");
@@ -908,6 +1026,12 @@ _fork_all_tasks(slurmd_job_t *job)
 		writefds[i] = fdpair[1];
 	}
 
+	set_oom_adj(0);	/* the tasks may be killed by OOM */
+	if (pre_setuid(job)) {
+		error("Failed task affinity setup");
+		return SLURM_ERROR;
+	}
+
 	/* Temporarily drop effective privileges, except for the euid.
 	 * We need to wait until after pam_setup() to drop euid.
 	 */
@@ -965,7 +1089,13 @@ _fork_all_tasks(slurmd_job_t *job)
 			if (conf->propagate_prio == 1)
 				_set_prio_process(job);
 
-			(void) pre_setuid(job);
+			/*
+			 *  Reclaim privileges and call any plugin hooks
+			 *   that may require elevated privs
+			 */
+			if (_spank_task_privileged(job, i, &sprivs) < 0)
+				exit(1);
+
  			if (_become_user(job, &sprivs) < 0) {
  				error("_become_user failed: %m");
 				/* child process, should not return */
@@ -1006,6 +1136,12 @@ _fork_all_tasks(slurmd_job_t *job)
 		/* Don't bother erroring out here */
 	}
 
+	if ((oom_value = getenv("SLURMSTEPD_OOM_ADJ"))) {
+		int i = atoi(oom_value);
+		debug("Setting slurmstepd oom_adj to %d", i);
+		set_oom_adj(i);
+	}
+
 	if (chdir (sprivs.saved_cwd) < 0) {
 		error ("Unable to return to working directory");
 	}
@@ -1024,11 +1160,11 @@ _fork_all_tasks(slurmd_job_t *job)
 				i, job->task[i]->pid, job->pgid);
 		}
 
-                if (slurm_container_add(job, job->task[i]->pid)
+		if (slurm_container_add(job, job->task[i]->pid)
 		    == SLURM_ERROR) {
-                        error("slurm_container_add: %m");
+			error("slurm_container_add: %m");
 			goto fail1;
-                }
+		}
 		jobacct_id.nodeid = job->nodeid;
 		jobacct_id.taskid = job->task[i]->gtid;
 		jobacct_gather_g_add_task(job->task[i]->pid, 
@@ -1121,6 +1257,35 @@ _send_pending_exit_msgs(slurmd_job_t *job)
 	return nsent;
 }
 
+static inline void
+_log_task_exit(unsigned long taskid, unsigned long pid, int status)
+{
+	/*
+	 *  Print a nice message to the log describing the task exit status.
+	 *
+	 *  The final else is there just in case there is ever an exit status
+	 *   that isn't WIFEXITED || WIFSIGNALED. We'll probably never reach
+	 *   that code, but it is better than dropping a potentially useful
+	 *   exit status.
+	 */
+	if (WIFEXITED(status))
+		verbose("task %lu (%lu) exited with exit code %d.",
+		        taskid, pid, WEXITSTATUS(status));
+	else if (WIFSIGNALED(status))
+		/* WCOREDUMP isn't available on AIX */
+		verbose("task %lu (%lu) exited. Killed by signal %d%s.",
+		        taskid, pid, WTERMSIG(status),
+#ifdef WCOREDUMP
+		        WCOREDUMP(status) ? " (core dumped)" : ""
+#else
+			""
+#endif
+			);
+	else
+		verbose("task %lu (%lu) exited with status 0x%04x.",
+		        taskid, pid, status);
+}
+
 /*
  * If waitflag is true, perform a blocking wait for a single process
  * and then return.
@@ -1179,9 +1344,8 @@ _wait_for_any_task(slurmd_job_t *job, bool waitflag)
 			}
 		}
 		if (t != NULL) {
-			verbose("task %lu (%lu) exited status 0x%04x %M",
-				(unsigned long)job->task[i]->gtid,
-				(unsigned long)pid, status);
+			_log_task_exit(job->task[i]->gtid, pid, status);
+
 			t->exited  = true;
 			t->estatus = status;
 			job->envtp->env = job->env;
@@ -1189,6 +1353,7 @@ _wait_for_any_task(slurmd_job_t *job, bool waitflag)
 			job->envtp->localid = job->task[i]->id;
 			
 			job->envtp->distribution = -1;
+			job->envtp->batch_flag = job->batch;
 			setup_env(job->envtp);
 			job->env = job->envtp->env;
 			if (job->task_epilog) {
@@ -1305,6 +1470,9 @@ _wait_for_io(slurmd_job_t *job)
 	} else
 		info("_wait_for_io: ioid==0");
 
+	/* Close any files for stdout/stderr opened by the stepd */
+	io_close_local_fds(job);
+
 	return;
 }
 
@@ -1431,13 +1599,13 @@ _send_launch_resp(slurmd_job_t *job, int rc)
 	debug("Sending launch resp rc=%d", rc);
 
 	slurm_msg_t_init(&resp_msg);
-        resp_msg.address      = srun->resp_addr;
-	resp_msg.data         = &resp;
-	resp_msg.msg_type     = RESPONSE_LAUNCH_TASKS;
+	resp_msg.address	= srun->resp_addr;
+	resp_msg.data		= &resp;
+	resp_msg.msg_type	= RESPONSE_LAUNCH_TASKS;
 	
-	resp.node_name        = xstrdup(job->node_name);
-	resp.return_code      = rc;
-	resp.count_of_pids    = job->ntasks;
+	resp.node_name		= xstrdup(job->node_name);
+	resp.return_code	= rc;
+	resp.count_of_pids	= job->ntasks;
 
 	resp.local_pids = xmalloc(job->ntasks * sizeof(*resp.local_pids));
 	resp.task_ids = xmalloc(job->ntasks * sizeof(*resp.task_ids));
@@ -1457,9 +1625,9 @@ _send_launch_resp(slurmd_job_t *job, int rc)
 static int
 _send_complete_batch_script_msg(slurmd_job_t *job, int err, int status)
 {
-	int                      rc, i;
-	slurm_msg_t              req_msg;
-	complete_batch_script_msg_t  req;
+	int		rc, i;
+	slurm_msg_t	req_msg;
+	complete_batch_script_msg_t req;
 
 	req.job_id	= job->jobid;
 	req.job_rc      = status;
diff --git a/src/slurmd/slurmstepd/mgr.h b/src/slurmd/slurmstepd/mgr.h
index 1f9a52b9a..c1867a622 100644
--- a/src/slurmd/slurmstepd/mgr.h
+++ b/src/slurmd/slurmstepd/mgr.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/multi_prog.c b/src/slurmd/slurmstepd/multi_prog.c
index 3dfd090f8..4603d8f1c 100644
--- a/src/slurmd/slurmstepd/multi_prog.c
+++ b/src/slurmd/slurmstepd/multi_prog.c
@@ -11,10 +11,11 @@
  *  and
  *  Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>,
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/multi_prog.h b/src/slurmd/slurmstepd/multi_prog.h
index a36256b6f..7444002a1 100644
--- a/src/slurmd/slurmstepd/multi_prog.h
+++ b/src/slurmd/slurmstepd/multi_prog.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/pam_ses.c b/src/slurmd/slurmstepd/pam_ses.c
index c754492fe..d4ab3c7ad 100644
--- a/src/slurmd/slurmstepd/pam_ses.c
+++ b/src/slurmd/slurmstepd/pam_ses.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Donna Mecozzi <dmecozzi@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/pam_ses.h b/src/slurmd/slurmstepd/pam_ses.h
index f933cc277..4a42db309 100644
--- a/src/slurmd/slurmstepd/pam_ses.h
+++ b/src/slurmd/slurmstepd/pam_ses.h
@@ -6,10 +6,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Donna Mecozzi <dmecozzi@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/pdebug.c b/src/slurmd/slurmstepd/pdebug.c
index c4a91e3f4..0a47a3f02 100644
--- a/src/slurmd/slurmstepd/pdebug.c
+++ b/src/slurmd/slurmstepd/pdebug.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/pdebug.h b/src/slurmd/slurmstepd/pdebug.h
index 228dcfb02..6cfbd30d6 100644
--- a/src/slurmd/slurmstepd/pdebug.h
+++ b/src/slurmd/slurmstepd/pdebug.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/req.c b/src/slurmd/slurmstepd/req.c
index 4b28183a4..445ac0588 100644
--- a/src/slurmd/slurmstepd/req.c
+++ b/src/slurmd/slurmstepd/req.c
@@ -2,13 +2,14 @@
  *  src/slurmd/slurmstepd/req.c - slurmstepd domain socket request handling
  *****************************************************************************
  *  Copyright (C) 2005-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 Christopher Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -798,27 +799,34 @@ rwfail:
 static int
 _handle_checkpoint_tasks(int fd, slurmd_job_t *job, uid_t uid)
 {
-	static time_t last_timestamp = 0;
 	int rc = SLURM_SUCCESS;
-	int signal;
 	time_t timestamp;
+	int len;
+	char *image_dir = NULL;
 
 	debug3("_handle_checkpoint_tasks for job %u.%u",
 	       job->jobid, job->stepid);
 
-	safe_read(fd, &signal, sizeof(int));
 	safe_read(fd, &timestamp, sizeof(time_t));
+	safe_read(fd, &len, sizeof(int));
+	if (len) {
+		image_dir = xmalloc (len);
+		safe_read(fd, image_dir, len); /* '\0' terminated */
+	}
 
 	debug3("  uid = %d", uid);
 	if (uid != job->uid && !_slurm_authorized_user(uid)) {
-		debug("checkpoint req from uid %ld for job %u.%u owned by uid %ld",
+		debug("checkpoint req from uid %ld for job %u.%u "
+		      "owned by uid %ld",
 		      (long)uid, job->jobid, job->stepid, (long)job->uid);
 		rc = EPERM;
 		goto done;
 	}
 
-	if (timestamp == last_timestamp) {
-		debug("duplicate checkpoint req for job %u.%u, timestamp %ld. discarded.",
+	if (job->ckpt_timestamp &&
+	    timestamp == job->ckpt_timestamp) {
+		debug("duplicate checkpoint req for job %u.%u, "
+		      "timestamp %ld. discarded.",
 		      job->jobid, job->stepid, (long)timestamp);
 		rc = ESLURM_ALREADY_DONE; /* EINPROGRESS? */
 		goto done;
@@ -844,17 +852,24 @@ _handle_checkpoint_tasks(int fd, slurmd_job_t *job, uid_t uid)
                goto done;
        }
 
-       /* TODO: send timestamp with signal */
-       if (killpg(job->pgid, signal) == -1) {
-               rc = -1;        /* Most probable ESRCH, resulting in ESLURMD_JOB_NOTRUNNING */
-               verbose("Error sending signal %d to %u.%u, pgid %d, errno: %d: %s",
-                       signal, job->jobid, job->stepid, job->pgid,
-                       errno, slurm_strerror(rc));
+       /* set timestamp in case another request comes */
+       job->ckpt_timestamp = timestamp;
+
+       /* TODO: do we need job->ckpt_dir any more, except for checkpoint/xlch? */
+/*	if (! image_dir) { */
+/*		image_dir = xstrdup(job->ckpt_dir); */
+/*	} */
+       
+       /* call the plugin to send the request */
+       if (checkpoint_signal_tasks(job, image_dir) != SLURM_SUCCESS) {
+               rc = -1;
+               verbose("Error sending checkpoint request to %u.%u: %s",
+                     job->jobid, job->stepid, slurm_strerror(rc));
        } else {
-               last_timestamp = timestamp;
-               verbose("Sent signal %d to %u.%u, pgid %d",
-                       signal, job->jobid, job->stepid, job->pgid);
+               verbose("Sent checkpoint request to %u.%u",
+                       job->jobid, job->stepid);
        }
+
        pthread_mutex_unlock(&suspend_mutex);
 
 done:
diff --git a/src/slurmd/slurmstepd/req.h b/src/slurmd/slurmstepd/req.h
index cc63c6fdb..3f528b311 100644
--- a/src/slurmd/slurmstepd/req.h
+++ b/src/slurmd/slurmstepd/req.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  *  src/slurmd/slurmstepd/req.h - slurmstepd request handling
- *  $Id: req.h 13672 2008-03-19 23:10:58Z jette $
+ *  $Id: req.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/slurmstepd.c b/src/slurmd/slurmstepd/slurmstepd.c
index 3142bd71c..10737eebd 100644
--- a/src/slurmd/slurmstepd/slurmstepd.c
+++ b/src/slurmd/slurmstepd/slurmstepd.c
@@ -1,15 +1,17 @@
 /*****************************************************************************\
  *  src/slurmd/slurmstepd/slurmstepd.c - SLURM job-step manager.
- *  $Id: slurmstepd.c 17040 2009-03-26 15:03:18Z jette $
+ *  $Id: slurmstepd.c 17056 2009-03-26 23:35:52Z dbremer $
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov> 
  *  and Christopher Morrone <morrone2@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -98,12 +100,13 @@ main (int argc, char *argv[])
 		_dump_user_env();
 		exit(0);
 	}
-
 	xsignal_block(slurmstepd_blocked_signals);
 	conf = xmalloc(sizeof(*conf));
 	conf->argv = &argv;
 	conf->argc = &argc;
 	init_setproctitle(argc, argv);
+
+	/* Receive job parameters from the slurmd */
 	_init_from_slurmd(STDIN_FILENO, argv, &cli, &self, &msg,
 			  &ngids, &gids);
 
@@ -112,12 +115,17 @@ main (int argc, char *argv[])
 	 * on STDERR_FILENO for us. */
 	dup2(STDERR_FILENO, STDIN_FILENO);
 
+	/* Create the slurmd_job_t, mostly from info in a 
+	   launch_tasks_request_msg_t or a batch_job_launch_msg_t */
 	job = _step_setup(cli, self, msg);
 	job->ngids = ngids;
 	job->gids = gids;
 
+	/* fork handlers cause mutexes on some global data structures 
+	   to be re-initialized after the fork. */
 	list_install_fork_handlers();
 	slurm_conf_install_fork_handlers();
+
 	/* sets job->msg_handle and job->msgid */
 	if (msg_thr_create(job) == SLURM_ERROR) {
 		_send_fail_to_slurmd(STDOUT_FILENO);
@@ -132,7 +140,9 @@ main (int argc, char *argv[])
 	 * on STDERR_FILENO for us. */
 	dup2(STDERR_FILENO, STDOUT_FILENO);
 
-	rc = job_manager(job); /* blocks until step is complete */
+	/* This does most of the stdio setup, then launches all the tasks,
+	   and blocks until the step is complete */
+	rc = job_manager(job); 
 
 	/* signal the message thread to shutdown, and wait for it */
 	eio_signal_shutdown(job->msg_handle);
diff --git a/src/slurmd/slurmstepd/slurmstepd.h b/src/slurmd/slurmstepd/slurmstepd.h
index d053aeb3c..1aaf100bf 100644
--- a/src/slurmd/slurmstepd/slurmstepd.h
+++ b/src/slurmd/slurmstepd/slurmstepd.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/slurmd/slurmstepd/slurmstepd.h - slurmstepd general header file
- * $Id: slurmstepd.h 13672 2008-03-19 23:10:58Z jette $
+ * $Id: slurmstepd.h 16867 2009-03-12 16:35:42Z jette $
  *****************************************************************************
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -63,4 +64,6 @@ typedef struct {
 
 extern step_complete_t step_complete;
 
+extern slurmd_conf_t *conf;
+
 #endif /* !_SLURMSTEPD_H */
diff --git a/src/slurmd/slurmstepd/slurmstepd_job.c b/src/slurmd/slurmstepd/slurmstepd_job.c
index 14de1ec02..d55e06191 100644
--- a/src/slurmd/slurmstepd/slurmstepd_job.c
+++ b/src/slurmd/slurmstepd/slurmstepd_job.c
@@ -1,14 +1,16 @@
 /*****************************************************************************\
- * src/slurmd/slurmstepd/slurmstepd_job.c - slurmd_job_t routines
- * $Id: slurmstepd_job.c 15043 2008-09-09 23:45:19Z jette $
+ *  src/slurmd/slurmstepd/slurmstepd_job.c - slurmd_job_t routines
+ *  $Id: slurmstepd_job.c 16867 2009-03-12 16:35:42Z jette $
  *****************************************************************************
- *  Copyright (C) 2002 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -44,24 +46,25 @@
 #  include <string.h>
 #endif
 
+#include <grp.h>
 #include <signal.h>
 #include <sys/types.h>
-#include <grp.h>
 
-#include "src/common/xmalloc.h"
-#include "src/common/xassert.h"
-#include "src/common/xstring.h"
+#include "src/common/eio.h"
 #include "src/common/fd.h"
 #include "src/common/log.h"
-#include "src/common/eio.h"
+#include "src/common/node_select.h"
 #include "src/common/slurm_jobacct_gather.h"
 #include "src/common/slurm_protocol_api.h"
+#include "src/common/xassert.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
 
 #include "src/slurmd/slurmd/slurmd.h"
-#include "src/slurmd/slurmstepd/slurmstepd_job.h"
 #include "src/slurmd/slurmstepd/io.h"
 #include "src/slurmd/slurmstepd/fname.h"
 #include "src/slurmd/slurmstepd/multi_prog.h"
+#include "src/slurmd/slurmstepd/slurmstepd_job.h"
 
 static char ** _array_copy(int n, char **src);
 static void _array_free(char ***array);
@@ -196,25 +199,20 @@ job_create(launch_tasks_request_msg_t *msg)
 	job->stepid	= msg->job_step_id;
 
 	job->job_mem	= msg->job_mem;
-	job->task_mem	= msg->task_mem;
 	if (job->job_mem)
 		jobacct_common_set_mem_limit(job->jobid, job->job_mem);
-	else if (job->task_mem && job->ntasks) {
-		jobacct_common_set_mem_limit(job->jobid, 
-					     (job->task_mem * job->ntasks));
-	}
 	
 	job->uid	= (uid_t) msg->uid;
 	job->gid	= (gid_t) msg->gid;
 	job->cwd	= xstrdup(msg->cwd);
 	job->task_dist	= msg->task_dist;
-	job->plane_size	= msg->plane_size;
 	
 	job->cpu_bind_type = msg->cpu_bind_type;
 	job->cpu_bind = xstrdup(msg->cpu_bind);
 	job->mem_bind_type = msg->mem_bind_type;
 	job->mem_bind = xstrdup(msg->mem_bind);
-	job->ckpt_path = xstrdup(msg->ckpt_path);
+	job->ckpt_dir = xstrdup(msg->ckpt_dir);
+	job->restart_dir = xstrdup(msg->restart_dir);
 	job->cpus_per_task = msg->cpus_per_task;
 
 	job->env     = _array_copy(msg->envc, msg->env);
@@ -237,13 +235,11 @@ job_create(launch_tasks_request_msg_t *msg)
 	job->envtp->nodeid = -1;
 
 	job->envtp->distribution = 0;
-	job->envtp->plane_size = 0;
-
 	job->envtp->cpu_bind_type = 0;
 	job->envtp->cpu_bind = NULL;
 	job->envtp->mem_bind_type = 0;
 	job->envtp->mem_bind = NULL;
-	job->envtp->ckpt_path = NULL;
+	job->envtp->ckpt_dir = NULL;
 	
 	memcpy(&resp_addr, &msg->orig_addr, sizeof(slurm_addr));
 	slurm_set_addr(&resp_addr,
@@ -260,6 +256,7 @@ job_create(launch_tasks_request_msg_t *msg)
 	srun = srun_info_create(msg->cred, &resp_addr, &io_addr);
 
 	job->buffered_stdio = msg->buffered_stdio;
+	job->labelio = msg->labelio;
 
 	job->task_prolog = xstrdup(msg->task_prolog);
 	job->task_epilog = xstrdup(msg->task_epilog);
@@ -350,6 +347,9 @@ job_batch_job_create(batch_job_launch_msg_t *msg)
 	job->gid     = (gid_t) msg->gid;
 	job->cwd     = xstrdup(msg->work_dir);
 
+	job->ckpt_dir = xstrdup(msg->ckpt_dir);
+	job->restart_dir = xstrdup(msg->restart_dir);
+
 	job->env     = _array_copy(msg->envc, msg->environment);
 	job->eio     = eio_handle_create();
 	job->sruns   = list_create((ListDelF) _srun_info_destructor);
@@ -361,13 +361,13 @@ job_batch_job_create(batch_job_launch_msg_t *msg)
 	job->envtp->nodeid = -1;
 
 	job->envtp->distribution = 0;
-	job->envtp->plane_size = 0;
-
-	job->envtp->cpu_bind_type = 0;
-	job->envtp->cpu_bind = NULL;
+	job->cpu_bind_type = msg->cpu_bind_type;
+	job->cpu_bind = xstrdup(msg->cpu_bind);
 	job->envtp->mem_bind_type = 0;
 	job->envtp->mem_bind = NULL;
-	job->envtp->ckpt_path = NULL;
+	job->envtp->ckpt_dir = NULL;
+	job->envtp->restart_cnt = msg->restart_cnt;
+
 	job->cpus_per_task = msg->cpus_per_node[0];
 
 	srun = srun_info_create(NULL, NULL, NULL);
@@ -402,6 +402,11 @@ job_batch_job_create(batch_job_launch_msg_t *msg)
 	job->task[0]->argc = job->argc;
 	job->task[0]->argv = job->argv;
 
+#ifdef HAVE_CRAY_XT
+	select_g_get_jobinfo(msg->select_jobinfo, SELECT_DATA_RESV_ID,
+			     &job->resv_id);
+#endif
+
 	return job;
 }
 
diff --git a/src/slurmd/slurmstepd/slurmstepd_job.h b/src/slurmd/slurmstepd/slurmstepd_job.h
index 2bdbb46bd..37f9b9f34 100644
--- a/src/slurmd/slurmstepd/slurmstepd_job.h
+++ b/src/slurmd/slurmstepd/slurmstepd_job.h
@@ -1,14 +1,16 @@
 /*****************************************************************************\
  *  src/slurmd/slurmstepd/slurmstepd_job.h  slurmd_job_t definition
- *  $Id: slurmstepd_job.h 14702 2008-08-05 22:18:13Z jette $
+ *  $Id: slurmstepd_job.h 17056 2009-03-26 23:35:52Z dbremer $
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -119,14 +121,12 @@ typedef struct slurmd_job {
 	uint32_t       cpus_per_task;	/* number of cpus desired per task  */
 	uint32_t       debug;  /* debug level for job slurmd                */
 	uint32_t       job_mem;  /* MB of memory reserved for the job       */
-	uint32_t       task_mem; /* MB of memory reserved for each task     */ 
 	uint16_t       cpus;   /* number of cpus to use for this job        */
 	uint16_t       argc;   /* number of commandline arguments           */
 	char         **env;    /* job environment                           */
 	char         **argv;   /* job argument vector                       */
 	char          *cwd;    /* path to current working directory         */
-       	task_dist_states_t task_dist;/* -m distribution                     */
-        uint32_t       plane_size; /* -m plane=plane_size                   */
+	task_dist_states_t task_dist;/* -m distribution                     */
 	char          *node_name; /* node name of node running job
 				   * needed for front-end systems           */
 	cpu_bind_type_t cpu_bind_type; /* --cpu_bind=                       */
@@ -150,8 +150,8 @@ typedef struct slurmd_job {
 	eio_handle_t  *eio;
 	List 	       sruns; /* List of srun_info_t pointers               */
 	List           clients; /* List of struct client_io_info pointers   */
-	List stdout_eio_objs;
-	List stderr_eio_objs;
+	List stdout_eio_objs; /* List of objs that gather stdout from tasks */
+	List stderr_eio_objs; /* List of objs that gather stderr from tasks */
 	List free_incoming;   /* List of free struct io_buf * for incoming
 			       * traffic. "incoming" means traffic from srun
 			       * to the tasks.
@@ -164,8 +164,8 @@ typedef struct slurmd_job {
 			       * including free_incoming buffers and
 			       * buffers in use.
 			       */
-	int outgoing_count;   /* Count of total incoming message buffers
-			       * including free_incoming buffers and
+	int outgoing_count;   /* Count of total outgoing message buffers
+			       * including free_outgoing buffers and
 			       * buffers in use.
 			       */
 
@@ -176,6 +176,7 @@ typedef struct slurmd_job {
 	uint8_t	buffered_stdio; /* stdio buffering flag, 1 for line-buffering,
 				 * 0 for no buffering
 				 */
+	uint8_t labelio;	/* 1 for labelling output with the task id */
 
 	pthread_t      ioid;  /* pthread id of IO thread                    */
 	pthread_t      msgid; /* pthread id of message thread               */
@@ -193,9 +194,13 @@ typedef struct slurmd_job {
 	char          *batchdir;
 	jobacctinfo_t *jobacct;
 	uint8_t        open_mode;	/* stdout/err append or truncate */
-	uint8_t        pty;		/* set if creating pseudo tty       */
+	uint8_t        pty;		/* set if creating pseudo tty	*/
 	job_options_t  options;
-	char          *ckpt_path;
+	char          *ckpt_dir;
+	time_t         ckpt_timestamp;
+	char          *restart_dir;	/* restart from context */
+	char          *resv_id;		/* Cray/BASIL reservation ID	*/
+	uint16_t       restart_cnt;	/* batch job restart count	*/
 } slurmd_job_t;
 
 
diff --git a/src/slurmd/slurmstepd/step_terminate_monitor.c b/src/slurmd/slurmstepd/step_terminate_monitor.c
index 3438374f8..6e46fb75a 100644
--- a/src/slurmd/slurmstepd/step_terminate_monitor.c
+++ b/src/slurmd/slurmstepd/step_terminate_monitor.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/step_terminate_monitor.h b/src/slurmd/slurmstepd/step_terminate_monitor.h
index ee2caf4be..fcda666ae 100644
--- a/src/slurmd/slurmstepd/step_terminate_monitor.h
+++ b/src/slurmd/slurmstepd/step_terminate_monitor.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Christopher J. Morrone <morrone2@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/task.c b/src/slurmd/slurmstepd/task.c
index dc0a6f1e3..8493d7322 100644
--- a/src/slurmd/slurmstepd/task.c
+++ b/src/slurmd/slurmstepd/task.c
@@ -2,13 +2,14 @@
  *  slurmd/slurmstepd/task.c - task launching functions for slurmstepd
  *****************************************************************************
  *  Copyright (C) 2002-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 Mark A. Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -76,23 +77,24 @@
 
 #include <slurm/slurm_errno.h>
 
+#include "src/common/checkpoint.h"
 #include "src/common/env.h"
 #include "src/common/fd.h"
 #include "src/common/log.h"
+#include "src/common/mpi.h"
+#include "src/common/plugstack.h"
+#include "src/slurmd/common/proctrack.h"
 #include "src/common/switch.h"
+#include "src/slurmd/common/task_plugin.h"
 #include "src/common/xsignal.h"
 #include "src/common/xstring.h"
-#include "src/common/mpi.h"
 #include "src/common/xmalloc.h"
-#include "src/common/plugstack.h"
 
 #include "src/slurmd/slurmd/slurmd.h"
-#include "src/slurmd/common/proctrack.h"
-#include "src/slurmd/common/task_plugin.h"
-#include "src/slurmd/slurmstepd/task.h"
-#include "src/slurmd/slurmstepd/ulimits.h"
 #include "src/slurmd/slurmstepd/io.h"
 #include "src/slurmd/slurmstepd/pdebug.h"
+#include "src/slurmd/slurmstepd/task.h"
+#include "src/slurmd/slurmstepd/ulimits.h"
 
 /*
  * Static prototype definitions.
@@ -345,11 +347,11 @@ exec_task(slurmd_job_t *job, int i, int waitfd)
 	if (i == 0)
 		_make_tmpdir(job);
 
-        /*
+	/*
 	 * Stall exec until all tasks have joined the same process group
 	 */
-        if ((rc = read (waitfd, &c, sizeof (c))) != 1) {
-	        error ("_exec_task read failed, fd = %d, rc=%d: %m", waitfd, rc);
+	if ((rc = read (waitfd, &c, sizeof (c))) != 1) {
+		error ("_exec_task read failed, fd = %d, rc=%d: %m", waitfd, rc);
 		log_fini();
 		exit(1);
 	}
@@ -370,13 +372,13 @@ exec_task(slurmd_job_t *job, int i, int waitfd)
 	job->envtp->localid = task->id;
 	job->envtp->task_pid = getpid();
 	job->envtp->distribution = job->task_dist;
-	job->envtp->plane_size   = job->plane_size;
 	job->envtp->cpu_bind = xstrdup(job->cpu_bind);
 	job->envtp->cpu_bind_type = job->cpu_bind_type;
 	job->envtp->mem_bind = xstrdup(job->mem_bind);
 	job->envtp->mem_bind_type = job->mem_bind_type;
 	job->envtp->distribution = -1;
-	job->envtp->ckpt_path = xstrdup(job->ckpt_path);
+	job->envtp->ckpt_dir = xstrdup(job->ckpt_dir);
+	job->envtp->batch_flag = job->batch;
 	setup_env(job->envtp);
 	setenvf(&job->envtp->env, "SLURMD_NODENAME", "%s", conf->node_name);
 	job->env = job->envtp->env;
@@ -426,7 +428,11 @@ exec_task(slurmd_job_t *job, int i, int waitfd)
 	}
 
 	/* task plugin hook */
-	pre_launch(job);
+	if (pre_launch(job)) {
+		error ("Failed task affinity setup");
+		exit (1);
+	}
+
 	if (conf->task_prolog) {
 		char *my_prolog;
 		slurm_mutex_lock(&conf->config_mutex);
@@ -449,6 +455,14 @@ exec_task(slurmd_job_t *job, int i, int waitfd)
 		job->env[0] = (char *)NULL;
 	}
 
+	if (job->restart_dir) {
+		info("restart from %s", job->restart_dir);
+		/* no return on success */
+		checkpoint_restart_task(job, job->restart_dir, task->gtid); 
+		error("Restart task failed: %m");
+		exit(errno);
+	}
+
 	if (task->argv[0] == NULL) {
 		error("No executable program specified for this task");
 		exit(2);
diff --git a/src/slurmd/slurmstepd/task.h b/src/slurmd/slurmstepd/task.h
index 9daa80dfa..94fca7402 100644
--- a/src/slurmd/slurmstepd/task.h
+++ b/src/slurmd/slurmstepd/task.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/slurmd/slurmstepd/task.h - task launching functions for slurmstepd
- * $Id: task.h 13672 2008-03-19 23:10:58Z jette $
+ * $Id: task.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmd/slurmstepd/ulimits.c b/src/slurmd/slurmstepd/ulimits.c
index a46d0c605..66b14ce2c 100644
--- a/src/slurmd/slurmstepd/ulimits.c
+++ b/src/slurmd/slurmstepd/ulimits.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/slurmd/slurmstepd/ulimits.c - set user limits for job
- * $Id: ulimits.c 15505 2008-10-27 17:39:44Z jette $
+ * $Id: ulimits.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -83,8 +84,8 @@ int set_user_limits(slurmd_job_t *job)
 		_set_limit( job->env, rli );
 
 	/* Set soft and hard memory and data size limit for this process, 
-	 * try to handle job and task limit (all spawned processes) in slurmd */
-	task_mem_bytes  = job->task_mem;	/* MB */
+	 * handle job limit (for all spawned processes) in slurmd */
+	task_mem_bytes  = job->job_mem;	/* MB */
 	task_mem_bytes *= (1024 * 1024);
 #ifdef RLIMIT_AS
 	if ((task_mem_bytes) && (getrlimit(RLIMIT_AS, &r) == 0) &&
@@ -92,9 +93,9 @@ int set_user_limits(slurmd_job_t *job)
 		r.rlim_max =  r.rlim_cur = task_mem_bytes;
 		if (setrlimit(RLIMIT_AS, &r)) {
 			/* Indicates that limit has already been exceeded */
-			fatal("setrlimit(RLIMIT_AS, %u MB): %m", job->task_mem);
+			fatal("setrlimit(RLIMIT_AS, %u MB): %m", job->job_mem);
 		} else
-			info("Set task_mem(%u MB)", job->task_mem);
+			info("Set task_mem(%u MB)", job->job_mem);
 #if 0
 		getrlimit(RLIMIT_AS, &r);
 		info("task memory limits: %u %u", r.rlim_cur, r.rlim_max);
@@ -107,9 +108,9 @@ int set_user_limits(slurmd_job_t *job)
 		r.rlim_max =  r.rlim_cur = task_mem_bytes;
 		if (setrlimit(RLIMIT_DATA, &r)) {
 			/* Indicates that limit has already been exceeded */
-			fatal("setrlimit(RLIMIT_DATA, %u MB): %m", job->task_mem);
+			fatal("setrlimit(RLIMIT_DATA, %u MB): %m", job->job_mem);
 		} else
-			info("Set task_data(%u MB)", job->task_mem);
+			info("Set task_data(%u MB)", job->job_mem);
 #if 0
 		getrlimit(RLIMIT_DATA, &r);
 		info("task DATA limits: %u %u", r.rlim_cur, r.rlim_max);
diff --git a/src/slurmd/slurmstepd/ulimits.h b/src/slurmd/slurmstepd/ulimits.h
index 6a1656b60..1d35faaa7 100644
--- a/src/slurmd/slurmstepd/ulimits.h
+++ b/src/slurmd/slurmstepd/ulimits.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmdbd/Makefile.am b/src/slurmdbd/Makefile.am
index e2f99b404..76308e094 100644
--- a/src/slurmdbd/Makefile.am
+++ b/src/slurmdbd/Makefile.am
@@ -16,6 +16,8 @@ slurmdbd_LDADD = 					\
 slurmdbd_SOURCES = 		\
 	agent.c			\
 	agent.h			\
+	backup.c		\
+	backup.h		\
 	proc_req.c		\
 	proc_req.h		\
 	read_config.c		\
diff --git a/src/slurmdbd/Makefile.in b/src/slurmdbd/Makefile.in
index a8dd62a79..af33d72fc 100644
--- a/src/slurmdbd/Makefile.in
+++ b/src/slurmdbd/Makefile.in
@@ -45,14 +45,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -72,8 +76,9 @@ CONFIG_CLEAN_FILES =
 am__installdirs = "$(DESTDIR)$(sbindir)"
 sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(sbin_PROGRAMS)
-am_slurmdbd_OBJECTS = agent.$(OBJEXT) proc_req.$(OBJEXT) \
-	read_config.$(OBJEXT) rpc_mgr.$(OBJEXT) slurmdbd.$(OBJEXT)
+am_slurmdbd_OBJECTS = agent.$(OBJEXT) backup.$(OBJEXT) \
+	proc_req.$(OBJEXT) read_config.$(OBJEXT) rpc_mgr.$(OBJEXT) \
+	slurmdbd.$(OBJEXT)
 slurmdbd_OBJECTS = $(am_slurmdbd_OBJECTS)
 slurmdbd_DEPENDENCIES = $(top_builddir)/src/common/libdaemonize.la \
 	$(top_builddir)/src/api/libslurm.o
@@ -107,6 +112,10 @@ 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@
@@ -276,6 +285,8 @@ slurmdbd_LDADD = \
 slurmdbd_SOURCES = \
 	agent.c			\
 	agent.h			\
+	backup.c		\
+	backup.h		\
 	proc_req.c		\
 	proc_req.h		\
 	read_config.c		\
@@ -358,6 +369,7 @@ distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/agent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backup.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proc_req.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read_config.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpc_mgr.Po@am__quote@
diff --git a/src/slurmdbd/agent.c b/src/slurmdbd/agent.c
index 006160d49..3ce1111d5 100644
--- a/src/slurmdbd/agent.c
+++ b/src/slurmdbd/agent.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmdbd/agent.h b/src/slurmdbd/agent.h
index 70c133abf..c6c394128 100644
--- a/src/slurmdbd/agent.h
+++ b/src/slurmdbd/agent.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmdbd/backup.c b/src/slurmdbd/backup.c
new file mode 100644
index 000000000..1aac5b1c5
--- /dev/null
+++ b/src/slurmdbd/backup.c
@@ -0,0 +1,129 @@
+/*****************************************************************************\
+ *  backup.c - backup slurm dbd
+ *****************************************************************************
+ *  Copyright (C) 2009  Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include <sys/poll.h>
+
+#include "src/common/xmalloc.h"
+#include "src/common/slurm_protocol_defs.h"
+#include "src/common/fd.h"
+#include "src/common/log.h"
+#include "src/common/slurmdbd_defs.h"
+
+#include "src/slurmdbd/backup.h"
+
+bool primary_resumed = false;
+bool backup = false;
+bool have_control = false;
+
+static slurm_fd  slurmdbd_fd         = -1;
+
+/* Open a connection to the Slurm DBD and set slurmdbd_fd */
+static void _open_slurmdbd_fd(slurm_addr dbd_addr)
+{
+	if(dbd_addr.sin_port == 0) {
+		error("sin_port == 0 in the slurmdbd backup");
+		return;
+	}
+
+       	slurmdbd_fd = slurm_open_msg_conn(&dbd_addr);
+	
+	if (slurmdbd_fd >= 0)
+		fd_set_nonblocking(slurmdbd_fd);
+}
+
+/* Close the SlurmDbd connection */
+static void _close_slurmdbd_fd(void)
+{
+	if (slurmdbd_fd >= 0) {
+		close(slurmdbd_fd);
+		slurmdbd_fd = -1;
+	}
+}
+
+/* Reopen the Slurm DBD connection due to some error */
+static void _reopen_slurmdbd_fd(slurm_addr dbd_addr)
+{
+	_close_slurmdbd_fd();
+	_open_slurmdbd_fd(dbd_addr);
+}
+
+/* run_backup - this is the backup controller, it should run in standby 
+ *	mode, assuming control when the primary controller stops responding */
+extern void run_backup(void)
+{
+	slurm_addr dbd_addr;
+		
+	primary_resumed = false;
+
+	/* get a connection */
+	slurm_set_addr(&dbd_addr, slurmdbd_conf->dbd_port,
+		       slurmdbd_conf->dbd_host);
+
+	if (dbd_addr.sin_port == 0)
+		error("Unable to locate SlurmDBD host %s:%u", 
+		      slurmdbd_conf->dbd_host, slurmdbd_conf->dbd_port);
+	else 
+		_open_slurmdbd_fd(dbd_addr);
+	
+
+	/* repeatedly ping Primary */
+	while (!shutdown_time) {
+		bool writeable = fd_writeable(slurmdbd_fd);
+		//info("%d %d", have_control, writeable);
+
+		if (have_control && writeable) {
+			info("Primary has come back");
+			primary_resumed = true;
+			shutdown_threads();
+			have_control = false;
+			break;
+		} else if(!have_control && !writeable) {
+			have_control = true;
+			info("Taking Control");
+			break;
+		}
+		
+		sleep(1);
+		if(!writeable) 
+			_reopen_slurmdbd_fd(dbd_addr);
+	}
+
+	_close_slurmdbd_fd();
+
+	return;
+}
diff --git a/src/slurmdbd/backup.h b/src/slurmdbd/backup.h
new file mode 100644
index 000000000..9980f3e96
--- /dev/null
+++ b/src/slurmdbd/backup.h
@@ -0,0 +1,55 @@
+/*****************************************************************************\
+ *  backup.h - backup slurm dbd
+ *****************************************************************************
+ *  Copyright (C) 2009  Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _DBDBACKUP_H
+#define _DBDBACKUP_H
+
+#include "src/slurmdbd/read_config.h"
+#include "src/slurmdbd/rpc_mgr.h"
+#include "src/slurmdbd/slurmdbd.h"
+
+extern bool primary_resumed;
+extern bool backup;
+extern bool have_control;
+
+/* run_backup - this is the backup dbd, it should run in standby 
+ *	mode, assuming control when the primary dbd stops responding */
+extern void run_backup(void);
+
+
+#endif
diff --git a/src/slurmdbd/proc_req.c b/src/slurmdbd/proc_req.c
index 4fba01334..a052d5397 100644
--- a/src/slurmdbd/proc_req.c
+++ b/src/slurmdbd/proc_req.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -63,6 +64,8 @@ static int   _add_users(slurmdbd_conn_t *slurmdbd_conn,
 			Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _add_wckeys(slurmdbd_conn_t *slurmdbd_conn,
 			 Buf in_buffer, Buf *out_buffer, uint32_t *uid);
+static int   _add_reservation(slurmdbd_conn_t *slurmdbd_conn,
+			      Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _archive_dump(slurmdbd_conn_t *slurmdbd_conn,
 			   Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _archive_load(slurmdbd_conn_t *slurmdbd_conn,
@@ -75,6 +78,8 @@ static int   _get_assocs(slurmdbd_conn_t *slurmdbd_conn,
 			 Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _get_clusters(slurmdbd_conn_t *slurmdbd_conn,
 			   Buf in_buffer, Buf *out_buffer, uint32_t *uid);
+static int   _get_config(slurmdbd_conn_t *slurmdbd_conn,
+			 Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _get_jobs(slurmdbd_conn_t *slurmdbd_conn,
 		       Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _get_jobs_cond(slurmdbd_conn_t *slurmdbd_conn,
@@ -89,6 +94,8 @@ static int   _get_users(slurmdbd_conn_t *slurmdbd_conn,
 			Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _get_wckeys(slurmdbd_conn_t *slurmdbd_conn,
 			 Buf in_buffer, Buf *out_buffer, uint32_t *uid);
+static int   _get_reservations(slurmdbd_conn_t *slurmdbd_conn,
+			       Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _flush_jobs(slurmdbd_conn_t *slurmdbd_conn,
 			 Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _init_conn(slurmdbd_conn_t *slurmdbd_conn, 
@@ -113,6 +120,8 @@ static int   _modify_users(slurmdbd_conn_t *slurmdbd_conn,
 			   Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _modify_wckeys(slurmdbd_conn_t *slurmdbd_conn,
 			    Buf in_buffer, Buf *out_buffer, uint32_t *uid);
+static int   _modify_reservation(slurmdbd_conn_t *slurmdbd_conn,
+				 Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _node_state(slurmdbd_conn_t *slurmdbd_conn,
 			 Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static char *_node_state_string(uint16_t node_state);
@@ -133,14 +142,14 @@ static int   _remove_users(slurmdbd_conn_t *slurmdbd_conn,
 			   Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _remove_wckeys(slurmdbd_conn_t *slurmdbd_conn,
 			    Buf in_buffer, Buf *out_buffer, uint32_t *uid);
+static int   _remove_reservation(slurmdbd_conn_t *slurmdbd_conn,
+				 Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _roll_usage(slurmdbd_conn_t *slurmdbd_conn,
 			 Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _step_complete(slurmdbd_conn_t *slurmdbd_conn,
 			    Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 static int   _step_start(slurmdbd_conn_t *slurmdbd_conn,
 			 Buf in_buffer, Buf *out_buffer, uint32_t *uid);
-static int   _update_shares_used(slurmdbd_conn_t *slurmdbd_conn,
-				 Buf in_buffer, Buf *out_buffer, uint32_t *uid);
 
 /* Process an incoming RPC
  * slurmdbd_conn IN/OUT - in will that the newsockfd set before
@@ -200,6 +209,10 @@ proc_req(slurmdbd_conn_t *slurmdbd_conn,
 			rc = _add_wckeys(slurmdbd_conn, 
 					 in_buffer, out_buffer, uid);
 			break;
+		case DBD_ADD_RESV:
+			rc = _add_reservation(slurmdbd_conn,
+					      in_buffer, out_buffer, uid);
+			break;
 		case DBD_ARCHIVE_DUMP:
 			rc = _archive_dump(slurmdbd_conn, 
 					   in_buffer, out_buffer, uid);
@@ -229,6 +242,10 @@ proc_req(slurmdbd_conn_t *slurmdbd_conn,
 			rc = _get_clusters(slurmdbd_conn,
 					   in_buffer, out_buffer, uid);
 			break;
+		case DBD_GET_CONFIG:
+			rc = _get_config(slurmdbd_conn,
+					 in_buffer, out_buffer, uid);
+			break;
 		case DBD_GET_JOBS:
 			rc = _get_jobs(slurmdbd_conn,
 				       in_buffer, out_buffer, uid);
@@ -249,6 +266,10 @@ proc_req(slurmdbd_conn_t *slurmdbd_conn,
 			rc = _get_wckeys(slurmdbd_conn, 
 					 in_buffer, out_buffer, uid);
 			break;
+		case DBD_GET_RESVS:
+			rc = _get_reservations(slurmdbd_conn, 
+					       in_buffer, out_buffer, uid);
+			break;
 		case DBD_GET_USERS:
 			rc = _get_users(slurmdbd_conn,
 					in_buffer, out_buffer, uid);
@@ -307,7 +328,11 @@ proc_req(slurmdbd_conn_t *slurmdbd_conn,
 			break;
 		case DBD_MODIFY_WCKEYS:
 			rc = _modify_wckeys(slurmdbd_conn, 
-					 in_buffer, out_buffer, uid);
+					    in_buffer, out_buffer, uid);
+			break;
+		case DBD_MODIFY_RESV:
+			rc = _modify_reservation(slurmdbd_conn,
+						 in_buffer, out_buffer, uid);
 			break;
 		case DBD_NODE_STATE:
 			rc = _node_state(slurmdbd_conn,
@@ -345,6 +370,10 @@ proc_req(slurmdbd_conn_t *slurmdbd_conn,
 			rc = _remove_wckeys(slurmdbd_conn, 
 					    in_buffer, out_buffer, uid);
 			break;
+		case DBD_REMOVE_RESV:
+			rc = _remove_reservation(slurmdbd_conn,
+						 in_buffer, out_buffer, uid);
+			break;
 		case DBD_ROLL_USAGE:
 			rc = _roll_usage(slurmdbd_conn, 
 					 in_buffer, out_buffer, uid);
@@ -357,10 +386,6 @@ proc_req(slurmdbd_conn_t *slurmdbd_conn,
 			rc = _step_start(slurmdbd_conn,
 					 in_buffer, out_buffer, uid);
 			break;
-		case DBD_UPDATE_SHARES_USED:
-			rc = _update_shares_used(slurmdbd_conn,
-						 in_buffer, out_buffer, uid);
-			break;
 		default:
 			comment = "Invalid RPC";
 			error("%s msg_type=%d", comment, msg_type);
@@ -384,6 +409,23 @@ unpack_error:
 	return SLURM_ERROR;
 }
 
+/* replace \" with \` return is the same as what is given */
+static char * _replace_double_quotes(char *option)
+{
+	int i=0;
+
+	if(!option)
+		return NULL;
+
+	while(option[i]) {
+		if(option[i] == '\"')
+			option[i] = '`';
+		i++;
+	}
+	return option;
+}
+
+
 static int _add_accounts(slurmdbd_conn_t *slurmdbd_conn,
 			 Buf in_buffer, Buf *out_buffer, uint32_t *uid)
 {
@@ -399,7 +441,8 @@ static int _add_accounts(slurmdbd_conn_t *slurmdbd_conn,
 
 		memset(&user, 0, sizeof(acct_user_rec_t));
 		user.uid = *uid;
-		if(assoc_mgr_fill_in_user(slurmdbd_conn->db_conn, &user, 1)
+		if(assoc_mgr_fill_in_user(
+			   slurmdbd_conn->db_conn, &user, 1, NULL)
 		   != SLURM_SUCCESS) {
 			comment = "Your user has not been added to the accounting system yet.";
 			error("%s", comment);
@@ -466,7 +509,8 @@ static int _add_account_coords(slurmdbd_conn_t *slurmdbd_conn,
 
 		memset(&user, 0, sizeof(acct_user_rec_t));
 		user.uid = *uid;
-		if(assoc_mgr_fill_in_user(slurmdbd_conn->db_conn, &user, 1) 
+		if(assoc_mgr_fill_in_user(
+			   slurmdbd_conn->db_conn, &user, 1, NULL) 
 		   != SLURM_SUCCESS) {
 			comment = "Your user has not been added to the accounting system yet.";
 			error("%s", comment);
@@ -542,7 +586,8 @@ static int _add_assocs(slurmdbd_conn_t *slurmdbd_conn,
 
 		memset(&user, 0, sizeof(acct_user_rec_t));
 		user.uid = *uid;
-		if(assoc_mgr_fill_in_user(slurmdbd_conn->db_conn, &user, 1)
+		if(assoc_mgr_fill_in_user(
+			   slurmdbd_conn->db_conn, &user, 1, NULL)
 		   != SLURM_SUCCESS) {
 			comment = "Your user has not been added to the accounting system yet.";
 			error("%s", comment);
@@ -683,7 +728,8 @@ static int _add_users(slurmdbd_conn_t *slurmdbd_conn,
 
 		memset(&user, 0, sizeof(acct_user_rec_t));
 		user.uid = *uid;
-		if(assoc_mgr_fill_in_user(slurmdbd_conn->db_conn, &user, 1) 
+		if(assoc_mgr_fill_in_user(
+			   slurmdbd_conn->db_conn, &user, 1, NULL) 
 		   != SLURM_SUCCESS) {
 			comment = "Your user has not been added to the accounting system yet.";
 			error("%s", comment);
@@ -760,6 +806,39 @@ end_it:
 	return rc;
 }
 
+static int _add_reservation(slurmdbd_conn_t *slurmdbd_conn,
+			     Buf in_buffer, Buf *out_buffer, uint32_t *uid)
+{
+	int rc = SLURM_SUCCESS;
+	dbd_rec_msg_t *rec_msg = NULL;
+	char *comment = NULL;
+
+	if ((*uid != slurmdbd_conf->slurm_user_id && *uid != 0)) {
+		comment = "DBD_ADD_RESV message from invalid uid";
+		error("DBD_ADD_RESV message from invalid uid %u", *uid);
+		rc = ESLURM_ACCESS_DENIED;
+		goto end_it;
+	}
+	if (slurmdbd_unpack_rec_msg(slurmdbd_conn->rpc_version, DBD_ADD_RESV,
+				    &rec_msg, in_buffer) != SLURM_SUCCESS) {
+		comment = "Failed to unpack DBD_ADD_RESV message";
+		error("%s", comment);
+		rc = SLURM_ERROR;
+		goto end_it;
+	}
+	debug2("DBD_ADD_RESV: called");
+
+	rc = acct_storage_g_add_reservation(slurmdbd_conn->db_conn,
+					     rec_msg->rec);
+
+end_it:
+	slurmdbd_free_rec_msg(slurmdbd_conn->rpc_version,
+			      DBD_ADD_RESV, rec_msg);
+	*out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, 
+				      rc, comment, DBD_ADD_RESV);
+	return rc;
+}
+
 static int _archive_dump(slurmdbd_conn_t *slurmdbd_conn,
 			 Buf in_buffer, Buf *out_buffer, uint32_t *uid)
 {
@@ -790,6 +869,8 @@ static int _archive_dump(slurmdbd_conn_t *slurmdbd_conn,
 	/* set up some defaults */
 	if(!arch_cond->archive_dir)
 		arch_cond->archive_dir = xstrdup(slurmdbd_conf->archive_dir);
+	if(arch_cond->archive_events == (uint16_t)NO_VAL)
+		arch_cond->archive_events = slurmdbd_conf->archive_events;
 	if(arch_cond->archive_jobs == (uint16_t)NO_VAL)
 		arch_cond->archive_jobs = slurmdbd_conf->archive_jobs;
 	if(!arch_cond->archive_script)
@@ -797,10 +878,16 @@ static int _archive_dump(slurmdbd_conn_t *slurmdbd_conn,
 			xstrdup(slurmdbd_conf->archive_script);
 	if(arch_cond->archive_steps == (uint16_t)NO_VAL)
 		arch_cond->archive_steps = slurmdbd_conf->archive_steps;
-	if(arch_cond->job_purge == (uint16_t)NO_VAL)
-		arch_cond->job_purge = slurmdbd_conf->job_purge;
-	if(arch_cond->step_purge == (uint16_t)NO_VAL)
-		arch_cond->step_purge = slurmdbd_conf->step_purge;
+	if(arch_cond->archive_suspend == (uint16_t)NO_VAL)
+		arch_cond->archive_suspend = slurmdbd_conf->archive_suspend;
+	if(arch_cond->purge_event == (uint16_t)NO_VAL)
+		arch_cond->purge_event = slurmdbd_conf->purge_event;
+	if(arch_cond->purge_job == (uint16_t)NO_VAL)
+		arch_cond->purge_job = slurmdbd_conf->purge_job;
+	if(arch_cond->purge_step == (uint16_t)NO_VAL)
+		arch_cond->purge_step = slurmdbd_conf->purge_step;
+	if(arch_cond->purge_suspend == (uint16_t)NO_VAL)
+		arch_cond->purge_suspend = slurmdbd_conf->purge_suspend;
 
 	rc = jobacct_storage_g_archive(slurmdbd_conn->db_conn, arch_cond);
 	if(rc != SLURM_SUCCESS) {
@@ -844,10 +931,12 @@ static int _archive_load(slurmdbd_conn_t *slurmdbd_conn,
 	}
 	
 	rc = jobacct_storage_g_archive_load(slurmdbd_conn->db_conn, arch_rec);
+
 	if(rc == ENOENT) 
 		comment = "No archive file given to recover.";
 	else if(rc != SLURM_SUCCESS)
 		comment = "Error with request.";
+	
 end_it:
 	destroy_acct_archive_rec(arch_rec);
 	*out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, 
@@ -883,6 +972,7 @@ static int _cluster_procs(slurmdbd_conn_t *slurmdbd_conn,
 	rc = clusteracct_storage_g_cluster_procs(
 		slurmdbd_conn->db_conn,
 		cluster_procs_msg->cluster_name,
+		cluster_procs_msg->cluster_nodes,
 		cluster_procs_msg->proc_count,
 		cluster_procs_msg->event_time);
 end_it:
@@ -1004,6 +1094,25 @@ static int _get_clusters(slurmdbd_conn_t *slurmdbd_conn,
 	return SLURM_SUCCESS;
 }
 
+static int _get_config(slurmdbd_conn_t *slurmdbd_conn, 
+			 Buf in_buffer, Buf *out_buffer, uint32_t *uid)
+{
+	dbd_list_msg_t list_msg = { NULL };
+
+	debug2("DBD_GET_CONFIG: called");
+	/* No message body to unpack */
+
+	list_msg.my_list = dump_config();
+	*out_buffer = init_buf(1024);
+	pack16((uint16_t) DBD_GOT_CONFIG, *out_buffer);
+	slurmdbd_pack_list_msg(slurmdbd_conn->rpc_version, 
+			       DBD_GOT_CONFIG, &list_msg, *out_buffer);
+	if(list_msg.my_list)
+		list_destroy(list_msg.my_list);
+
+	return SLURM_SUCCESS;
+}
+
 static int _get_jobs(slurmdbd_conn_t *slurmdbd_conn, 
 		     Buf in_buffer, Buf *out_buffer, uint32_t *uid)
 {
@@ -1342,6 +1451,44 @@ static int _get_wckeys(slurmdbd_conn_t *slurmdbd_conn,
 	return SLURM_SUCCESS;
 }
 
+static int _get_reservations(slurmdbd_conn_t *slurmdbd_conn, 
+			     Buf in_buffer, Buf *out_buffer, uint32_t *uid)
+{
+	dbd_cond_msg_t *get_msg = NULL;
+	dbd_list_msg_t list_msg;
+	char *comment = NULL;
+
+	debug2("DBD_GET_RESVS: called");
+
+	if (slurmdbd_unpack_cond_msg(slurmdbd_conn->rpc_version, 
+				     DBD_GET_RESVS, &get_msg, in_buffer) !=
+	    SLURM_SUCCESS) {
+		comment = "Failed to unpack DBD_GET_RESVS message";
+		error("%s", comment);
+		*out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, 
+					      SLURM_ERROR, comment,
+					      DBD_GET_RESVS);
+		return SLURM_ERROR;
+	}
+	
+	list_msg.my_list = acct_storage_g_get_reservations(
+		slurmdbd_conn->db_conn, *uid, get_msg->cond);
+	slurmdbd_free_cond_msg(slurmdbd_conn->rpc_version, 
+			       DBD_GET_RESVS, get_msg);
+
+	if(errno == ESLURM_ACCESS_DENIED && !list_msg.my_list)
+		list_msg.my_list = list_create(NULL);
+
+	*out_buffer = init_buf(1024);
+	pack16((uint16_t) DBD_GOT_RESVS, *out_buffer);
+	slurmdbd_pack_list_msg(slurmdbd_conn->rpc_version, 
+			       DBD_GOT_RESVS, &list_msg, *out_buffer);
+	if(list_msg.my_list)
+		list_destroy(list_msg.my_list);
+	
+	return SLURM_SUCCESS;
+}
+
 static int _flush_jobs(slurmdbd_conn_t *slurmdbd_conn,
 		       Buf in_buffer, Buf *out_buffer, uint32_t *uid)
 {
@@ -1497,6 +1644,9 @@ static int  _job_complete(slurmdbd_conn_t *slurmdbd_conn,
 
 	if(rc && errno == 740) /* meaning data is already there */
 		rc = SLURM_SUCCESS;
+
+	/* just incase this gets set we need to clear it */
+	xfree(job.wckey);
 end_it:
 	slurmdbd_free_job_complete_msg(slurmdbd_conn->rpc_version, 
 				       job_comp_msg);
@@ -1509,7 +1659,7 @@ static int  _job_start(slurmdbd_conn_t *slurmdbd_conn,
 		       Buf in_buffer, Buf *out_buffer, uint32_t *uid)
 {
 	dbd_job_start_msg_t *job_start_msg = NULL;
-	dbd_job_start_rc_msg_t job_start_rc_msg;
+	dbd_id_rc_msg_t id_rc_msg;
 	struct job_record job;
 	struct job_details details;
 	char *comment = NULL;
@@ -1534,10 +1684,11 @@ static int  _job_start(slurmdbd_conn_t *slurmdbd_conn,
 	}
 	memset(&job, 0, sizeof(struct job_record));
 	memset(&details, 0, sizeof(struct job_details));
-	memset(&job_start_rc_msg, 0, sizeof(dbd_job_start_rc_msg_t));
+	memset(&id_rc_msg, 0, sizeof(dbd_id_rc_msg_t));
 
 	job.total_procs = job_start_msg->alloc_cpus;
-	job.account = job_start_msg->account;
+	job.node_cnt = job_start_msg->alloc_nodes;
+	job.account = _replace_double_quotes(job_start_msg->account);
 	job.assoc_id = job_start_msg->assoc_id;
 	job.comment = job_start_msg->block_id;
 	job.db_index = job_start_msg->db_index;
@@ -1546,12 +1697,16 @@ static int  _job_start(slurmdbd_conn_t *slurmdbd_conn,
 	job.group_id = job_start_msg->gid;
 	job.job_id = job_start_msg->job_id;
 	job.job_state = job_start_msg->job_state;
-	job.name = job_start_msg->name;
+	job.name = _replace_double_quotes(job_start_msg->name);
 	job.nodes = job_start_msg->nodes;
+	job.network = job_start_msg->node_inx;
 	job.partition = job_start_msg->partition;
 	job.num_procs = job_start_msg->req_cpus;
+	job.resv_id = job_start_msg->resv_id;
 	job.priority = job_start_msg->priority;
 	job.start_time = job_start_msg->start_time;
+	job.time_limit = job_start_msg->timelimit;
+	job.wckey = _replace_double_quotes(job_start_msg->wckey);
 	details.submit_time = job_start_msg->submit_time;
 
 	job.details = &details;
@@ -1564,16 +1719,20 @@ static int  _job_start(slurmdbd_conn_t *slurmdbd_conn,
 		debug2("DBD_JOB_START: ELIGIBLE CALL ID:%u NAME:%s", 
 		       job_start_msg->job_id, job_start_msg->name);
 	}
-	job_start_rc_msg.return_code = jobacct_storage_g_job_start(
+	id_rc_msg.return_code = jobacct_storage_g_job_start(
 		slurmdbd_conn->db_conn, job_start_msg->cluster, &job);
-	job_start_rc_msg.db_index = job.db_index;
+	id_rc_msg.id = job.db_index;
+
+	/* just incase job.wckey was set because we didn't send one */
+	if(!job_start_msg->wckey)
+		xfree(job.wckey);
 
 	slurmdbd_free_job_start_msg(slurmdbd_conn->rpc_version, 
 				    job_start_msg);
 	*out_buffer = init_buf(1024);
-	pack16((uint16_t) DBD_JOB_START_RC, *out_buffer);
-	slurmdbd_pack_job_start_rc_msg(slurmdbd_conn->rpc_version, 
-				       &job_start_rc_msg, *out_buffer);
+	pack16((uint16_t) DBD_ID_RC, *out_buffer);
+	slurmdbd_pack_id_rc_msg(slurmdbd_conn->rpc_version, 
+				       &id_rc_msg, *out_buffer);
 	return SLURM_SUCCESS;
 }
 
@@ -1620,6 +1779,9 @@ static int  _job_suspend(slurmdbd_conn_t *slurmdbd_conn,
 
 	if(rc && errno == 740) /* meaning data is already there */
 		rc = SLURM_SUCCESS;
+
+	/* just incase this gets set we need to clear it */
+	xfree(job.wckey);
 end_it:
 	slurmdbd_free_job_suspend_msg(slurmdbd_conn->rpc_version, 
 				      job_suspend_msg);
@@ -2078,6 +2240,39 @@ static int   _modify_wckeys(slurmdbd_conn_t *slurmdbd_conn,
 	return rc;
 }
 
+static int _modify_reservation(slurmdbd_conn_t *slurmdbd_conn,
+			     Buf in_buffer, Buf *out_buffer, uint32_t *uid)
+{
+	int rc = SLURM_SUCCESS;
+	dbd_rec_msg_t *rec_msg = NULL;
+	char *comment = NULL;
+
+	if ((*uid != slurmdbd_conf->slurm_user_id && *uid != 0)) {
+		comment = "DBD_MODIFY_RESV message from invalid uid";
+		error("DBD_MODIFY_RESV message from invalid uid %u", *uid);
+		rc = ESLURM_ACCESS_DENIED;
+		goto end_it;
+	}
+	if (slurmdbd_unpack_rec_msg(slurmdbd_conn->rpc_version, DBD_MODIFY_RESV,
+				    &rec_msg, in_buffer) != SLURM_SUCCESS) {
+		comment = "Failed to unpack DBD_MODIFY_RESV message";
+		error("%s", comment);
+		rc = SLURM_ERROR;
+		goto end_it;
+	}
+	debug2("DBD_MODIFY_RESV: called");
+
+	rc = acct_storage_g_modify_reservation(slurmdbd_conn->db_conn,
+					       rec_msg->rec);
+
+end_it:
+	slurmdbd_free_rec_msg(slurmdbd_conn->rpc_version,
+			      DBD_MODIFY_RESV, rec_msg);
+	*out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, 
+				      rc, comment, DBD_MODIFY_RESV);
+	return rc;
+}
+
 static int _node_state(slurmdbd_conn_t *slurmdbd_conn,
 		       Buf in_buffer, Buf *out_buffer, uint32_t *uid)
 {
@@ -2086,7 +2281,6 @@ static int _node_state(slurmdbd_conn_t *slurmdbd_conn,
 	int rc = SLURM_SUCCESS;
 	char *comment = NULL;
 
-	memset(&node_ptr, 0, sizeof(struct node_record));
 
 	if (*uid != slurmdbd_conf->slurm_user_id) {
 		comment = "DBD_NODE_STATE message from invalid uid";
@@ -2103,38 +2297,37 @@ static int _node_state(slurmdbd_conn_t *slurmdbd_conn,
 		goto end_it;
 	}
 
-	if(node_state_msg->new_state == DBD_NODE_STATE_UP)
+	memset(&node_ptr, 0, sizeof(struct node_record));
+	node_ptr.name = node_state_msg->hostlist;
+	node_ptr.cpus = node_state_msg->cpu_count;
+	node_ptr.node_state = node_state_msg->state;
+
+	slurmctld_conf.fast_schedule = 0;
+
+	if(node_state_msg->new_state == DBD_NODE_STATE_UP) {
 		debug3("DBD_NODE_STATE: NODE:%s STATE:%s REASON:%s TIME:%u", 
 		       node_state_msg->hostlist,
 		       _node_state_string(node_state_msg->new_state),
 		       node_state_msg->reason, 
 		       node_state_msg->event_time);
-	else
+		rc = clusteracct_storage_g_node_up(
+			slurmdbd_conn->db_conn,
+			node_state_msg->cluster_name,
+			&node_ptr,
+			node_state_msg->event_time);
+	} else {
 		debug2("DBD_NODE_STATE: NODE:%s STATE:%s REASON:%s TIME:%u", 
 		       node_state_msg->hostlist,
 		       _node_state_string(node_state_msg->new_state),
 		       node_state_msg->reason, 
 		       node_state_msg->event_time);
-	node_ptr.name = node_state_msg->hostlist;
-	node_ptr.cpus = node_state_msg->cpu_count;
-
-	slurmctld_conf.fast_schedule = 0;
-
-	if(node_state_msg->new_state == DBD_NODE_STATE_DOWN)
 		rc = clusteracct_storage_g_node_down(
 			slurmdbd_conn->db_conn,
 			node_state_msg->cluster_name,
 			&node_ptr,
 			node_state_msg->event_time,
 			node_state_msg->reason);
-	else
-		rc = clusteracct_storage_g_node_up(slurmdbd_conn->db_conn,
-						   node_state_msg->cluster_name,
-						   &node_ptr,
-						   node_state_msg->event_time);
-	
-	if(rc && errno == 740) /* meaning data is already there */
-		rc = SLURM_SUCCESS;
+	}
 
 end_it:
 	slurmdbd_free_node_state_msg(slurmdbd_conn->rpc_version, 
@@ -2707,6 +2900,39 @@ static int   _remove_wckeys(slurmdbd_conn_t *slurmdbd_conn,
 	return rc;
 }
 
+static int _remove_reservation(slurmdbd_conn_t *slurmdbd_conn,
+			     Buf in_buffer, Buf *out_buffer, uint32_t *uid)
+{
+	int rc = SLURM_SUCCESS;
+	dbd_rec_msg_t *rec_msg = NULL;
+	char *comment = NULL;
+
+	if ((*uid != slurmdbd_conf->slurm_user_id && *uid != 0)) {
+		comment = "DBD_REMOVE_RESV message from invalid uid";
+		error("DBD_REMOVE_RESV message from invalid uid %u", *uid);
+		rc = ESLURM_ACCESS_DENIED;
+		goto end_it;
+	}
+	if (slurmdbd_unpack_rec_msg(slurmdbd_conn->rpc_version, DBD_REMOVE_RESV,
+				    &rec_msg, in_buffer) != SLURM_SUCCESS) {
+		comment = "Failed to unpack DBD_REMOVE_RESV message";
+		error("%s", comment);
+		rc = SLURM_ERROR;
+		goto end_it;
+	}
+	debug2("DBD_REMOVE_RESV: called");
+
+	rc = acct_storage_g_remove_reservation(slurmdbd_conn->db_conn,
+					     rec_msg->rec);
+
+end_it:
+	slurmdbd_free_rec_msg(slurmdbd_conn->rpc_version,
+			      DBD_REMOVE_RESV, rec_msg);
+	*out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, 
+				      rc, comment, DBD_REMOVE_RESV);
+	return rc;
+}
+
 static int   _roll_usage(slurmdbd_conn_t *slurmdbd_conn,
 			 Buf in_buffer, Buf *out_buffer, uint32_t *uid)
 {
@@ -2734,7 +2960,9 @@ static int   _roll_usage(slurmdbd_conn_t *slurmdbd_conn,
 		goto end_it;
 	}
 
-	rc = acct_storage_g_roll_usage(slurmdbd_conn->db_conn, get_msg->start);
+	rc = acct_storage_g_roll_usage(slurmdbd_conn->db_conn,
+				       get_msg->start, get_msg->end,
+				       get_msg->archive_data);
 
 end_it:
 	slurmdbd_free_roll_usage_msg(slurmdbd_conn->rpc_version, 
@@ -2787,7 +3015,8 @@ static int  _step_complete(slurmdbd_conn_t *slurmdbd_conn,
 	job.start_time = step_comp_msg->start_time;
 	details.submit_time = step_comp_msg->job_submit_time;
 	step.step_id = step_comp_msg->step_id;
-	job.total_procs = step_comp_msg->total_procs;
+	step.cpu_count = step_comp_msg->total_procs;
+	details.num_tasks = step_comp_msg->total_tasks;
 
 	job.details = &details;
 	step.job_ptr = &job;
@@ -2796,7 +3025,8 @@ static int  _step_complete(slurmdbd_conn_t *slurmdbd_conn,
 
 	if(rc && errno == 740) /* meaning data is already there */
 		rc = SLURM_SUCCESS;
-
+	/* just incase this gets set we need to clear it */
+	xfree(job.wckey);
 end_it:
 	slurmdbd_free_step_complete_msg(slurmdbd_conn->rpc_version, 
 					step_comp_msg);
@@ -2812,6 +3042,7 @@ static int  _step_start(slurmdbd_conn_t *slurmdbd_conn,
 	struct step_record step;
 	struct job_record job;
 	struct job_details details;
+	slurm_step_layout_t layout;
 	int rc = SLURM_SUCCESS;
 	char *comment = NULL;
 
@@ -2837,24 +3068,34 @@ static int  _step_start(slurmdbd_conn_t *slurmdbd_conn,
 	memset(&step, 0, sizeof(struct step_record));
 	memset(&job, 0, sizeof(struct job_record));
 	memset(&details, 0, sizeof(struct job_details));
+	memset(&layout, 0, sizeof(slurm_step_layout_t));
 
 	job.assoc_id = step_start_msg->assoc_id;
 	job.db_index = step_start_msg->db_index;
 	job.job_id = step_start_msg->job_id;
 	step.name = step_start_msg->name;
 	job.nodes = step_start_msg->nodes;
+	step.network = step_start_msg->node_inx;
 	step.start_time = step_start_msg->start_time;
 	details.submit_time = step_start_msg->job_submit_time;
 	step.step_id = step_start_msg->step_id;
-	job.total_procs = step_start_msg->total_procs;
+	step.cpu_count = step_start_msg->total_procs;
+	details.num_tasks = step_start_msg->total_tasks;
+
+	layout.node_cnt = step_start_msg->node_cnt;
+	layout.task_dist = step_start_msg->task_dist;
 
 	job.details = &details;
 	step.job_ptr = &job;
+	step.step_layout = &layout;
 
 	rc = jobacct_storage_g_step_start(slurmdbd_conn->db_conn, &step);
 
 	if(rc && errno == 740) /* meaning data is already there */
 		rc = SLURM_SUCCESS;
+
+	/* just incase this gets set we need to clear it */
+	xfree(job.wckey);
 end_it:
 	slurmdbd_free_step_start_msg(slurmdbd_conn->rpc_version, 
 				     step_start_msg);
@@ -2863,49 +3104,3 @@ end_it:
 	return rc;
 }
 
-static int  _update_shares_used(slurmdbd_conn_t *slurmdbd_conn,
-				Buf in_buffer, Buf *out_buffer, uint32_t *uid)
-{
-	int rc = SLURM_SUCCESS;
-	dbd_list_msg_t *used_shares_msg = NULL;
-	char *comment = NULL;
-
-	if (*uid != slurmdbd_conf->slurm_user_id) {
-		comment = "DBD_UPDATE_SHARES_USED message from invalid uid";
-		error("%s %u", comment, *uid);
-		rc = ESLURM_ACCESS_DENIED;
-		goto end_it;
-	}
-	debug2("DBD_UPDATE_SHARES_USED");
-	if (slurmdbd_unpack_list_msg(slurmdbd_conn->rpc_version, 
-				     DBD_UPDATE_SHARES_USED, &used_shares_msg, 
-				     in_buffer) != SLURM_SUCCESS) {
-		comment = "Failed to unpack DBD_UPDATE_SHARES_USED message";
-		error("%s", comment);
-		rc = SLURM_ERROR;
-		goto end_it;
-	} else {
-#if 0
-		/* This was only added to verify the logic. 
-		 * It is not useful for production use */
-		ListIterator itr = NULL;
-		shares_used_object_t *usage;
-		itr = list_iterator_create(used_shares_msg->my_list);
-		while((usage = list_next(itr))) {
-			debug2("assoc_id:%u shares_used:%u", 
-			       usage->assoc_id, usage->shares_used);
-		}
-		list_iterator_destroy(itr);
-#endif
-	}
-
-	rc = acct_storage_g_update_shares_used(slurmdbd_conn->db_conn, 
-					       used_shares_msg->my_list);
-
-end_it:
-	slurmdbd_free_list_msg(slurmdbd_conn->rpc_version, 
-			       used_shares_msg);
-	*out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, 
-				      rc, comment, DBD_UPDATE_SHARES_USED);
-	return rc;
-}
diff --git a/src/slurmdbd/proc_req.h b/src/slurmdbd/proc_req.h
index faca952d0..82c831b75 100644
--- a/src/slurmdbd/proc_req.h
+++ b/src/slurmdbd/proc_req.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/slurmdbd/read_config.c b/src/slurmdbd/read_config.c
index aaa1c213d..e5819561f 100644
--- a/src/slurmdbd/read_config.c
+++ b/src/slurmdbd/read_config.c
@@ -2,13 +2,14 @@
  *  read_config.c - functions for reading slurmdbd.conf
  *****************************************************************************
  *  Copyright (C) 2003-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>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -39,15 +40,19 @@
 #include <pwd.h>
 #include <stdlib.h>
 #include <string.h>
+#include <time.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
 #include <slurm/slurm_errno.h>
 
-#include "src/common/macros.h"
 #include "src/common/log.h"
+#include "src/common/list.h"
+#include "src/common/macros.h"
 #include "src/common/parse_config.h"
+#include "src/common/parse_time.h"
 #include "src/common/read_config.h"
+#include "src/common/slurm_accounting_storage.h"
 #include "src/common/uid.h"
 #include "src/common/xmalloc.h"
 #include "src/common/xstring.h"
@@ -61,6 +66,8 @@ pthread_mutex_t conf_mutex = PTHREAD_MUTEX_INITIALIZER;
 static void _clear_slurmdbd_conf(void);
 static char * _get_conf_path(void);
 
+static time_t boot_time;
+
 /*
  * free_slurmdbd_conf - free storage associated with the global variable 
  *	slurmdbd_conf
@@ -77,24 +84,30 @@ static void _clear_slurmdbd_conf(void)
 {
 	if (slurmdbd_conf) {
 		xfree(slurmdbd_conf->archive_dir);
+		slurmdbd_conf->archive_events = 0;
 		slurmdbd_conf->archive_jobs = 0;
 		xfree(slurmdbd_conf->archive_script);
 		slurmdbd_conf->archive_steps = 0;
+		slurmdbd_conf->archive_suspend = 0;
 		xfree(slurmdbd_conf->auth_info);
 		xfree(slurmdbd_conf->auth_type);
 		xfree(slurmdbd_conf->dbd_addr);
+		xfree(slurmdbd_conf->dbd_backup);
 		xfree(slurmdbd_conf->dbd_host);
 		slurmdbd_conf->dbd_port = 0;
 		slurmdbd_conf->debug_level = 0;
 		xfree(slurmdbd_conf->default_qos);
-		slurmdbd_conf->job_purge = 0;
 		xfree(slurmdbd_conf->log_file);
 		xfree(slurmdbd_conf->pid_file);
 		xfree(slurmdbd_conf->plugindir);
 		slurmdbd_conf->private_data = 0;
+		slurmdbd_conf->purge_event = 0;
+		slurmdbd_conf->purge_job = 0;
+		slurmdbd_conf->purge_step = 0;
+		slurmdbd_conf->purge_suspend = 0;
 		slurmdbd_conf->slurm_user_id = NO_VAL;
 		xfree(slurmdbd_conf->slurm_user_name);
-		slurmdbd_conf->step_purge = 0;
+		xfree(slurmdbd_conf->storage_backup_host);
 		xfree(slurmdbd_conf->storage_host);
 		xfree(slurmdbd_conf->storage_loc);
 		xfree(slurmdbd_conf->storage_pass);
@@ -115,12 +128,15 @@ extern int read_slurmdbd_conf(void)
 {
 	s_p_options_t options[] = {
 		{"ArchiveDir", S_P_STRING},
+		{"ArchiveEvents", S_P_BOOLEAN},
 		{"ArchiveJobs", S_P_BOOLEAN},
 		{"ArchiveScript", S_P_STRING},
 		{"ArchiveSteps", S_P_BOOLEAN},
+		{"ArchiveSuspend", S_P_BOOLEAN},
 		{"AuthInfo", S_P_STRING},
 		{"AuthType", S_P_STRING},
 		{"DbdAddr", S_P_STRING},
+		{"DbdBackupHost", S_P_STRING},
 		{"DbdHost", S_P_STRING},
 		{"DbdPort", S_P_UINT16},
 		{"DebugLevel", S_P_UINT16},
@@ -131,8 +147,13 @@ extern int read_slurmdbd_conf(void)
 		{"PidFile", S_P_STRING},
 		{"PluginDir", S_P_STRING},
 		{"PrivateData", S_P_STRING},
+		{"PurgeEventMonths", S_P_UINT16},
+		{"PurgeJobMonths", S_P_UINT16},
+		{"PurgeStepMonths", S_P_UINT16},
+		{"PurgeSuspendMonths", S_P_UINT16},
 		{"SlurmUser", S_P_STRING},
 		{"StepPurge", S_P_UINT16},
+		{"StorageBackupHost", S_P_STRING},
 		{"StorageHost", S_P_STRING},
 		{"StorageLoc", S_P_STRING},
 		{"StoragePass", S_P_STRING},
@@ -148,8 +169,10 @@ extern int read_slurmdbd_conf(void)
 
 	/* Set initial values */
 	slurm_mutex_lock(&conf_mutex);
-	if (slurmdbd_conf == NULL)
+	if (slurmdbd_conf == NULL) {
 		slurmdbd_conf = xmalloc(sizeof(slurm_dbd_conf_t));
+		boot_time = time(NULL);
+	}
 	slurmdbd_conf->debug_level = LOG_LEVEL_INFO;
 	_clear_slurmdbd_conf();
 
@@ -163,13 +186,15 @@ extern int read_slurmdbd_conf(void)
 		tbl = s_p_hashtbl_create(options);
 		if (s_p_parse_file(tbl, conf_path) == SLURM_ERROR) {
 			fatal("Could not open/read/parse slurmdbd.conf file %s",
-		 	     conf_path);
+			      conf_path);
 		}
 
 		if(!s_p_get_string(&slurmdbd_conf->archive_dir, "ArchiveDir",
 				   tbl))
 			slurmdbd_conf->archive_dir =
 				xstrdup(DEFAULT_SLURMDBD_ARCHIVE_DIR);
+		s_p_get_boolean((bool *)&slurmdbd_conf->archive_events,
+				"ArchiveEvents", tbl);
 		s_p_get_boolean((bool *)&slurmdbd_conf->archive_jobs,
 				"ArchiveJobs", tbl);
 		s_p_get_string(&slurmdbd_conf->archive_script, "ArchiveScript",
@@ -178,12 +203,14 @@ extern int read_slurmdbd_conf(void)
 				"ArchiveSteps", tbl);
 		s_p_get_string(&slurmdbd_conf->auth_info, "AuthInfo", tbl);
 		s_p_get_string(&slurmdbd_conf->auth_type, "AuthType", tbl);
+		s_p_get_string(&slurmdbd_conf->dbd_backup,
+			       "DbdBackupHost", tbl);
 		s_p_get_string(&slurmdbd_conf->dbd_host, "DbdHost", tbl);
 		s_p_get_string(&slurmdbd_conf->dbd_addr, "DbdAddr", tbl);
 		s_p_get_uint16(&slurmdbd_conf->dbd_port, "DbdPort", tbl);
 		s_p_get_uint16(&slurmdbd_conf->debug_level, "DebugLevel", tbl);
 		s_p_get_string(&slurmdbd_conf->default_qos, "DefaultQOS", tbl);
-		s_p_get_uint16(&slurmdbd_conf->job_purge, "JobPurge", tbl);
+		s_p_get_uint16(&slurmdbd_conf->purge_job, "JobPurge", tbl);
 		s_p_get_string(&slurmdbd_conf->log_file, "LogFile", tbl);
 		if (!s_p_get_uint16(&slurmdbd_conf->msg_timeout,
 				    "MessageTimeout", tbl))
@@ -195,6 +222,9 @@ extern int read_slurmdbd_conf(void)
 		s_p_get_string(&slurmdbd_conf->pid_file, "PidFile", tbl);
 		s_p_get_string(&slurmdbd_conf->plugindir, "PluginDir", tbl);
 		if (s_p_get_string(&temp_str, "PrivateData", tbl)) {
+			if (strstr(temp_str, "account"))
+				slurmdbd_conf->private_data 
+					|= PRIVATE_DATA_ACCOUNTS;
 			if (strstr(temp_str, "job"))
 				slurmdbd_conf->private_data 
 					|= PRIVATE_DATA_JOBS;
@@ -204,37 +234,48 @@ extern int read_slurmdbd_conf(void)
 			if (strstr(temp_str, "partition"))
 				slurmdbd_conf->private_data 
 					|= PRIVATE_DATA_PARTITIONS;
+			if (strstr(temp_str, "reservation"))
+				slurmdbd_conf->private_data
+					|= PRIVATE_DATA_RESERVATIONS;
 			if (strstr(temp_str, "usage"))
 				slurmdbd_conf->private_data
 					|= PRIVATE_DATA_USAGE;
-			if (strstr(temp_str, "users"))
+			if (strstr(temp_str, "user"))
 				slurmdbd_conf->private_data 
 					|= PRIVATE_DATA_USERS;
-			if (strstr(temp_str, "accounts"))
-				slurmdbd_conf->private_data 
-					|= PRIVATE_DATA_ACCOUNTS;
 			if (strstr(temp_str, "all"))
 				slurmdbd_conf->private_data = 0xffff;
 			xfree(temp_str);
 		}
 
+		s_p_get_uint16(&slurmdbd_conf->purge_event,
+			       "PurgeEventMonths", tbl);
+		s_p_get_uint16(&slurmdbd_conf->purge_job,
+			       "PurgeJobMonths", tbl);
+		s_p_get_uint16(&slurmdbd_conf->purge_step,
+			       "PurgeStepMonths", tbl);
+		s_p_get_uint16(&slurmdbd_conf->purge_suspend,
+			       "PurgeSuspendMonths", tbl);
+
 		s_p_get_string(&slurmdbd_conf->slurm_user_name, "SlurmUser",
 			       tbl);
-		s_p_get_uint16(&slurmdbd_conf->step_purge, "StepPurge", tbl);
+		s_p_get_uint16(&slurmdbd_conf->purge_step, "StepPurge", tbl);
 
+		s_p_get_string(&slurmdbd_conf->storage_backup_host,
+			       "StorageBackupHost", tbl);
 		s_p_get_string(&slurmdbd_conf->storage_host,
-				"StorageHost", tbl);
+			       "StorageHost", tbl);
 		s_p_get_string(&slurmdbd_conf->storage_loc,
-				"StorageLoc", tbl);
+			       "StorageLoc", tbl);
 		s_p_get_string(&slurmdbd_conf->storage_pass,
-				"StoragePass", tbl);
+			       "StoragePass", tbl);
 		s_p_get_uint16(&slurmdbd_conf->storage_port,
 			       "StoragePort", tbl);
 		s_p_get_string(&slurmdbd_conf->storage_type,
 			       "StorageType", tbl);
 		s_p_get_string(&slurmdbd_conf->storage_user,
-				"StorageUser", tbl);
-
+			       "StorageUser", tbl);
+		
 		if(!s_p_get_boolean((bool *)&slurmdbd_conf->track_wckey, 
 				    "TrackWCKey", tbl))
 			slurmdbd_conf->track_wckey = false;
@@ -269,9 +310,38 @@ extern int read_slurmdbd_conf(void)
 		slurmdbd_conf->slurm_user_name = xstrdup("root");
 		slurmdbd_conf->slurm_user_id = 0;
 	}
+	
 	if (slurmdbd_conf->storage_type == NULL)
 		fatal("StorageType must be specified");
+
+	if (!slurmdbd_conf->storage_host)
+		slurmdbd_conf->storage_host = xstrdup(DEFAULT_STORAGE_HOST);
+
+	if (!slurmdbd_conf->storage_user) 		
+		slurmdbd_conf->storage_user = xstrdup(getlogin());
 	
+	if(!strcmp(slurmdbd_conf->storage_type, 
+			  "accounting_storage/mysql")) {
+		if(!slurmdbd_conf->storage_port)
+			slurmdbd_conf->storage_port = DEFAULT_MYSQL_PORT;
+		if(!slurmdbd_conf->storage_loc)
+			slurmdbd_conf->storage_loc =
+				xstrdup(DEFAULT_ACCOUNTING_DB);
+	} else if(!strcmp(slurmdbd_conf->storage_type,
+			  "accounting_storage/pgsql")) {
+		if(!slurmdbd_conf->storage_port)
+			slurmdbd_conf->storage_port = DEFAULT_PGSQL_PORT;
+		if(!slurmdbd_conf->storage_loc)
+			slurmdbd_conf->storage_loc =
+				xstrdup(DEFAULT_ACCOUNTING_DB);
+	} else {
+		if(!slurmdbd_conf->storage_port)
+			slurmdbd_conf->storage_port = DEFAULT_STORAGE_PORT;
+		if(!slurmdbd_conf->storage_loc)
+			slurmdbd_conf->storage_loc =
+				xstrdup(DEFAULT_STORAGE_LOC);
+	}
+
 	if (slurmdbd_conf->archive_dir) {
 		if(stat(slurmdbd_conf->archive_dir, &buf) < 0) 
 			fatal("Failed to stat the archive directory %s: %m",
@@ -309,21 +379,20 @@ extern void log_config(void)
 	char tmp_str[128];
 
 	debug2("ArchiveDir        = %s", slurmdbd_conf->archive_dir);
+	debug2("ArchiveEvents     = %u", slurmdbd_conf->archive_events);
+	debug2("ArchiveJobs       = %u", slurmdbd_conf->archive_jobs);
 	debug2("ArchiveScript     = %s", slurmdbd_conf->archive_script);
+	debug2("ArchiveSteps      = %u", slurmdbd_conf->archive_steps);
+	debug2("ArchiveSuspend    = %u", slurmdbd_conf->archive_suspend);
 	debug2("AuthInfo          = %s", slurmdbd_conf->auth_info);
 	debug2("AuthType          = %s", slurmdbd_conf->auth_type);
 	debug2("DbdAddr           = %s", slurmdbd_conf->dbd_addr);
+	debug2("DbdBackupHost     = %s", slurmdbd_conf->dbd_backup);
 	debug2("DbdHost           = %s", slurmdbd_conf->dbd_host);
 	debug2("DbdPort           = %u", slurmdbd_conf->dbd_port);
 	debug2("DebugLevel        = %u", slurmdbd_conf->debug_level);
 	debug2("DefaultQOS        = %s", slurmdbd_conf->default_qos);
 
-	if(slurmdbd_conf->job_purge)
-		debug2("JobPurge          = %u months",
-		       slurmdbd_conf->job_purge);
-	else
-		debug2("JobPurge          = NONE");
-		
 	debug2("LogFile           = %s", slurmdbd_conf->log_file);
 	debug2("MessageTimeout    = %u", slurmdbd_conf->msg_timeout);
 	debug2("PidFile           = %s", slurmdbd_conf->pid_file);
@@ -333,21 +402,42 @@ extern void log_config(void)
 			    tmp_str, sizeof(tmp_str));
 
 	debug2("PrivateData       = %s", tmp_str);
-	debug2("SlurmUser         = %s(%u)", 
-		slurmdbd_conf->slurm_user_name, slurmdbd_conf->slurm_user_id);
 
-	if(slurmdbd_conf->step_purge)
-		debug2("StepPurge         = %u months", 
-		       slurmdbd_conf->step_purge); 
+	if(slurmdbd_conf->purge_job)
+		debug2("PurgeJobMonths    = %u months",
+		       slurmdbd_conf->purge_job);
 	else
-		debug2("StepPurge         = NONE"); 
+		debug2("PurgeJobMonths    = NONE");
 		
+	if(slurmdbd_conf->purge_event)
+		debug2("PurgeEventMonths  = %u months",
+		       slurmdbd_conf->purge_event);
+	else
+		debug2("PurgeEventMonths  = NONE");
+		
+	if(slurmdbd_conf->purge_step)
+		debug2("PurgeStepMonths   = %u months",
+		       slurmdbd_conf->purge_step);
+	else
+		debug2("PurgeStepMonths   = NONE");
+		
+	if(slurmdbd_conf->purge_suspend)
+		debug2("PurgeSuspendMonths= %u months",
+		       slurmdbd_conf->purge_suspend);
+	else
+		debug2("PurgeSuspendMonths= NONE");
+		
+	debug2("SlurmUser         = %s(%u)", 
+	       slurmdbd_conf->slurm_user_name, slurmdbd_conf->slurm_user_id);
+
+	debug2("StorageBackupHost = %s", slurmdbd_conf->storage_backup_host);
 	debug2("StorageHost       = %s", slurmdbd_conf->storage_host);
 	debug2("StorageLoc        = %s", slurmdbd_conf->storage_loc);
 	debug2("StoragePass       = %s", slurmdbd_conf->storage_pass);
 	debug2("StoragePort       = %u", slurmdbd_conf->storage_port);
 	debug2("StorageType       = %s", slurmdbd_conf->storage_type);
 	debug2("StorageUser       = %s", slurmdbd_conf->storage_user);
+
 	debug2("TrackWCKey        = %u", slurmdbd_conf->track_wckey);
 }
 
@@ -397,3 +487,222 @@ static char * _get_conf_path(void)
 
 	return path;
 }
+
+/* Dump the configuration in name,value pairs for output to 
+ *	"sacctmgr show config", caller must call list_destroy() */
+extern List dump_config(void)
+{
+	config_key_pair_t *key_pair;
+	List my_list = list_create(destroy_config_key_pair);
+
+	if (!my_list)
+		fatal("malloc failure on list_create");
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("ArchiveDir");
+	key_pair->value = xstrdup(slurmdbd_conf->archive_dir);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("ArchiveEvents");
+	key_pair->value = xmalloc(16);
+	snprintf(key_pair->value, 16, "%u", slurmdbd_conf->archive_events);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("ArchiveJobs");
+	key_pair->value = xmalloc(16);
+	snprintf(key_pair->value, 16, "%u", slurmdbd_conf->archive_jobs);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("ArchiveScript");
+	key_pair->value = xstrdup(slurmdbd_conf->archive_script);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("ArchiveSteps");
+	key_pair->value = xmalloc(16);
+	snprintf(key_pair->value, 16, "%u", slurmdbd_conf->archive_steps);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("ArchiveSupend");
+	key_pair->value = xmalloc(16);
+	snprintf(key_pair->value, 16, "%u", slurmdbd_conf->archive_suspend);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("AuthInfo");
+	key_pair->value = xstrdup(slurmdbd_conf->auth_info);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("AuthType");
+	key_pair->value = xstrdup(slurmdbd_conf->auth_type);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("BOOT_TIME");
+	key_pair->value = xmalloc(128);
+	slurm_make_time_str ((time_t *)&boot_time, key_pair->value, 128);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("DbdAddr");
+	key_pair->value = xstrdup(slurmdbd_conf->dbd_addr);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("DbdBackupHost");
+	key_pair->value = xstrdup(slurmdbd_conf->dbd_backup);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("DbdHost");
+	key_pair->value = xstrdup(slurmdbd_conf->dbd_host);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("DbdPort");
+	key_pair->value = xmalloc(32);
+	snprintf(key_pair->value, 32, "%u", slurmdbd_conf->dbd_port);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("DebugLevel");
+	key_pair->value = xmalloc(32);
+	snprintf(key_pair->value, 32, "%u", slurmdbd_conf->debug_level);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("DefaultQOS");
+	key_pair->value = xstrdup(slurmdbd_conf->default_qos);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("LogFile");
+	key_pair->value = xstrdup(slurmdbd_conf->log_file);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("MessageTimeout");
+	key_pair->value = xmalloc(32);
+	snprintf(key_pair->value, 32, "%u secs", slurmdbd_conf->msg_timeout);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("PidFile");
+	key_pair->value = xstrdup(slurmdbd_conf->pid_file);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("PluginDir");
+	key_pair->value = xstrdup(slurmdbd_conf->plugindir);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("PrivateData");
+	key_pair->value = xmalloc(128);
+	private_data_string(slurmdbd_conf->private_data,
+			    key_pair->value, 128);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("PurgeEventMonths");
+	if(slurmdbd_conf->purge_event) {
+		key_pair->value = xmalloc(32);
+		snprintf(key_pair->value, 32, "%u months", 
+			 slurmdbd_conf->purge_event);
+	} else
+		key_pair->value = xstrdup("NONE");
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("PurgeJobMonths");
+	if(slurmdbd_conf->purge_job) {
+		key_pair->value = xmalloc(32);
+		snprintf(key_pair->value, 32, "%u months", 
+			 slurmdbd_conf->purge_job);
+	} else
+		key_pair->value = xstrdup("NONE");
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("PurgeStepMonths");
+	if(slurmdbd_conf->purge_step) {
+		key_pair->value = xmalloc(32);
+		snprintf(key_pair->value, 32, "%u months", 
+			 slurmdbd_conf->purge_step);
+	} else
+		key_pair->value = xstrdup("NONE");
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("PurgeSuspendMonths");
+	if(slurmdbd_conf->purge_suspend) {
+		key_pair->value = xmalloc(32);
+		snprintf(key_pair->value, 32, "%u months", 
+			 slurmdbd_conf->purge_suspend);
+	} else
+		key_pair->value = xstrdup("NONE");
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("SLURMDBD_CONF");
+	key_pair->value = _get_conf_path();
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("SLURMDBD_VERSION");
+	key_pair->value = xstrdup(SLURM_VERSION);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("SlurmUser");
+	key_pair->value = xmalloc(128);
+	snprintf(key_pair->value, 128, "%s(%u)",
+		 slurmdbd_conf->slurm_user_name, slurmdbd_conf->slurm_user_id);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("StorageBackupHost");
+	key_pair->value = xstrdup(slurmdbd_conf->storage_backup_host);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("StorageHost");
+	key_pair->value = xstrdup(slurmdbd_conf->storage_host);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("StorageLoc");
+	key_pair->value = xstrdup(slurmdbd_conf->storage_loc);
+	list_append(my_list, key_pair);
+
+	/* StoragePass should NOT be passed due to security reasons */
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("StoragePort");
+	key_pair->value = xmalloc(32);
+	snprintf(key_pair->value, 32, "%u", slurmdbd_conf->storage_port);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("StorageType");
+	key_pair->value = xstrdup(slurmdbd_conf->storage_type);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("StorageUser");
+	key_pair->value = xstrdup(slurmdbd_conf->storage_user);
+	list_append(my_list, key_pair);
+
+	key_pair = xmalloc(sizeof(config_key_pair_t));
+	key_pair->name = xstrdup("TrackWCKey");
+	key_pair->value = xmalloc(32);
+	snprintf(key_pair->value, 32, "%u", slurmdbd_conf->track_wckey);
+	list_append(my_list, key_pair);
+
+	return my_list;
+}
diff --git a/src/slurmdbd/read_config.h b/src/slurmdbd/read_config.h
index 20d4c27de..9f198eb64 100644
--- a/src/slurmdbd/read_config.h
+++ b/src/slurmdbd/read_config.h
@@ -2,13 +2,14 @@
  *  read_config.h - functions and declarations for reading slurmdbd.conf
  *****************************************************************************
  *  Copyright (C) 2003-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>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -53,6 +54,7 @@
 #endif  /* HAVE_CONFIG_H */
 
 #include <time.h>
+#include "src/common/list.h"
 
 #define DEFAULT_SLURMDBD_AUTHTYPE	"auth/none"
 //#define DEFAULT_SLURMDBD_JOB_PURGE	12
@@ -63,6 +65,8 @@
 /* SlurmDBD configuration parameters */
 typedef struct slurm_dbd_conf {
 	time_t		last_update;	/* time slurmdbd.conf read	*/
+	uint16_t	archive_events;	/* flag if we are to
+					 * archive events */
 	uint16_t	archive_jobs;	/* flag if we are to
 					 * archive jobs	*/
 	char *		archive_dir;    /* location to localy
@@ -71,23 +75,34 @@ typedef struct slurm_dbd_conf {
 	char *		archive_script;	/* script to archive old data	*/
 	uint16_t	archive_steps;	/* flag if we are to
 					 * archive steps	        */
+	uint16_t	archive_suspend;/* flag if we are to
+					 * archive suspend data         */
 	char *		auth_info;	/* authentication info		*/
 	char *		auth_type;	/* authentication mechanism	*/
+	uint16_t        control_timeout;/* how long to wait before
+					 * backup takes control         */   
 	char *		dbd_addr;	/* network address of Slurm DBD	*/
+	char *		dbd_backup;	/* hostname of Slurm DBD backup */
 	char *		dbd_host;	/* hostname of Slurm DBD	*/
 	uint16_t	dbd_port;	/* port number for RPCs to DBD	*/
 	uint16_t	debug_level;	/* Debug level, default=3	*/
 	char *   	default_qos;	/* default qos setting when
 					 * adding clusters              */
-	uint16_t	job_purge;	/* purge time for job info	*/ 
 	char *		log_file;	/* Log file			*/
 	uint16_t        msg_timeout;    /* message timeout		*/   
 	char *		pid_file;	/* where to store current PID	*/
 	char *		plugindir;	/* dir to look for plugins	*/
 	uint16_t        private_data;   /* restrict information         */
+	uint16_t        purge_event;    /* purge events older than
+					 * this in months */
+	uint16_t	purge_job;	/* purge time for job info	*/ 
+	uint16_t	purge_step;	/* purge time for step info	*/
+	uint16_t        purge_suspend;  /* purge suspend data older than this
+					 * in months */
 	uint32_t	slurm_user_id;	/* uid of slurm_user_name	*/
 	char *		slurm_user_name;/* user that slurmcdtld runs as	*/
-	uint16_t	step_purge;	/* purge time for step info	*/
+	char *		storage_backup_host;/* backup host where DB is
+					     * running */
 	char *		storage_host;	/* host where DB is running	*/
 	char *		storage_loc;	/* database name		*/
 	char *		storage_pass;   /* password for DB write	*/
@@ -124,4 +139,8 @@ extern void log_config(void);
  */
 extern int read_slurmdbd_conf(void);
 
+/* Dump the configuration in name,value pairs for output to 
+ *	"sacctmgr show config", caller must call list_destroy() */
+extern List dump_config(void);
+
 #endif /* !_DBD_READ_CONFIG_H */
diff --git a/src/slurmdbd/rpc_mgr.c b/src/slurmdbd/rpc_mgr.c
index c487f3d00..18f7a882f 100644
--- a/src/slurmdbd/rpc_mgr.c
+++ b/src/slurmdbd/rpc_mgr.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -62,7 +63,6 @@
 
 /* Local functions */
 static bool   _fd_readable(slurm_fd fd);
-static bool   _fd_writeable(slurm_fd fd);
 static void   _free_server_thread(pthread_t my_tid);
 static int    _send_resp(slurm_fd fd, Buf buffer);
 static void * _service_connection(void *arg);
@@ -273,12 +273,12 @@ static int _send_resp(slurm_fd fd, Buf buffer)
 	ssize_t msg_wrote;
 	char *out_buf;
 
-	if ((fd < 0) || (!_fd_writeable(fd)))
+	if ((fd < 0) || (!fd_writeable(fd)))
 		goto io_err;
 
 	msg_size = get_buf_offset(buffer);
 	nw_size = htonl(msg_size);
-	if (!_fd_writeable(fd))
+	if (!fd_writeable(fd))
 		goto io_err;
 	msg_wrote = write(fd, &nw_size, sizeof(nw_size));
 	if (msg_wrote != sizeof(nw_size))
@@ -286,7 +286,7 @@ static int _send_resp(slurm_fd fd, Buf buffer)
 
 	out_buf = get_buf_data(buffer);
 	while (msg_size > 0) {
-		if (!_fd_writeable(fd))
+		if (!fd_writeable(fd))
 			goto io_err;
 		msg_wrote = write(fd, out_buf, msg_size);
 		if (msg_wrote <= 0)
@@ -355,17 +355,18 @@ static bool _fd_readable(slurm_fd fd)
 
 /* Wait until a file is writeable, 
  * RET false if can not be written to within 5 seconds */
-static bool _fd_writeable(slurm_fd fd)
+extern bool fd_writeable(slurm_fd fd)
 {
 	struct pollfd ufds;
 	int msg_timeout = 5000;
 	int rc, time_left;
 	struct timeval tstart;
+	char temp[2];
 
 	ufds.fd     = fd;
 	ufds.events = POLLOUT;
 	gettimeofday(&tstart, NULL);
-	while (1) {
+	while (shutdown_time == 0) {
 		time_left = msg_timeout - _tot_wait(&tstart);
 		rc = poll(&ufds, 1, time_left);
 		if (shutdown_time)
@@ -377,10 +378,18 @@ static bool _fd_writeable(slurm_fd fd)
 			return false;
 		}
 		if (rc == 0) {
-			error("write timeout");
+			debug2("write timeout");
 			return false;
 		}
-		if (ufds.revents & POLLHUP) {
+
+		/*
+		 * Check here to make sure the socket really is there.
+		 * If not then exit out and notify the sender.  This
+ 		 * is here since a write doesn't always tell you the
+		 * socket is gone, but getting 0 back from a
+		 * nonblocking read means just that. 
+		 */
+		if (ufds.revents & POLLHUP || (recv(fd, &temp, 1, 0) == 0)) {
 			debug3("Write connection %d closed", fd);
 			return false;
 		}
diff --git a/src/slurmdbd/rpc_mgr.h b/src/slurmdbd/rpc_mgr.h
index b91dcca0f..3fc62c66f 100644
--- a/src/slurmdbd/rpc_mgr.h
+++ b/src/slurmdbd/rpc_mgr.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -41,6 +42,8 @@
 #include "src/common/pack.h"
 #include "src/common/assoc_mgr.h"
 
+extern bool fd_writeable(slurm_fd fd);
+
 /* Return a buffer containing a DBD_RC (return code) message
  * caller must free returned buffer */
 extern Buf make_dbd_rc_msg(uint16_t rpc_version, 
diff --git a/src/slurmdbd/slurmdbd.c b/src/slurmdbd/slurmdbd.c
index 9ee4fcc36..ead780afd 100644
--- a/src/slurmdbd/slurmdbd.c
+++ b/src/slurmdbd/slurmdbd.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -59,6 +60,7 @@
 #include "src/common/xstring.h"
 #include "src/slurmdbd/read_config.h"
 #include "src/slurmdbd/rpc_mgr.h"
+#include "src/slurmdbd/backup.h"
 
 /* Global variables */
 time_t shutdown_time = 0;		/* when shutdown request arrived */
@@ -85,7 +87,7 @@ static void  _init_config(void);
 static void  _init_pidfile(void);
 static void  _kill_old_slurmdbd(void);
 static void  _parse_commandline(int argc, char *argv[]);
-static void _rollup_handler_cancel();
+static void  _rollup_handler_cancel();
 static void *_rollup_handler(void *no_data);
 static void *_signal_handler(void *no_data);
 static void  _update_logging(void);
@@ -106,14 +108,6 @@ int main(int argc, char *argv[])
 	_parse_commandline(argc, argv);
 	_update_logging();
 
-	if (gethostname_short(node_name, sizeof(node_name)))
-		fatal("getnodename: %m");
-	if (slurmdbd_conf->dbd_host &&
-	    strcmp(slurmdbd_conf->dbd_host, node_name) &&
-	    strcmp(slurmdbd_conf->dbd_host, "localhost")) {
-		fatal("This host not configured to run SlurmDBD (%s != %s)",
-		      node_name, slurmdbd_conf->dbd_host);
-	}
 	if (slurm_auth_init(NULL) != SLURM_SUCCESS) {
 		fatal("Unable to initialize %s authentication plugin",
 			slurmdbd_conf->auth_type);
@@ -147,53 +141,93 @@ int main(int argc, char *argv[])
 	assoc_init_arg.cache_level = ASSOC_MGR_CACHE_USER;
 	if(slurmdbd_conf->track_wckey)
 		assoc_init_arg.cache_level |= ASSOC_MGR_CACHE_WCKEY;
-
+	
 	if(assoc_mgr_init(db_conn, &assoc_init_arg) == SLURM_ERROR) {
 		error("Problem getting cache of data");
 		acct_storage_g_close_connection(&db_conn);
 		goto end_it;
 	}
 
-	if(!shutdown_time) {
-		/* Create attached thread to process incoming RPCs */
-		slurm_attr_init(&thread_attr);
-		if (pthread_create(&rpc_handler_thread, &thread_attr, 
-				   rpc_mgr, NULL))
-			fatal("pthread_create error %m");
-		slurm_attr_destroy(&thread_attr);
-	}
+	if (gethostname_short(node_name, sizeof(node_name)))
+		fatal("getnodename: %m");
 
-	if(!shutdown_time) {
-		/* Create attached thread to do usage rollup */
-		slurm_attr_init(&thread_attr);
-		if (pthread_create(&rollup_handler_thread, &thread_attr,
-				   _rollup_handler, db_conn))
-			fatal("pthread_create error %m");
-		slurm_attr_destroy(&thread_attr);
-	}
+	while(1) {
+		if (slurmdbd_conf->dbd_backup &&
+		    (!strcmp(node_name, slurmdbd_conf->dbd_backup) ||
+		     !strcmp(slurmdbd_conf->dbd_backup, "localhost"))) {
+			info("slurmdbd running in background mode");
+			have_control = false;
+			backup = true;
+			run_backup();
+			if(!shutdown_time)
+				assoc_mgr_refresh_lists(db_conn, NULL);		
+		} else if (slurmdbd_conf->dbd_host &&
+			   (!strcmp(slurmdbd_conf->dbd_host, node_name) ||
+			    !strcmp(slurmdbd_conf->dbd_host, "localhost"))) {
+			backup = false;
+			have_control = true;
+		} else {
+			fatal("This host not configured to run SlurmDBD "
+			      "(%s != %s | (backup) %s)",
+			      node_name, slurmdbd_conf->dbd_host,
+			      slurmdbd_conf->dbd_backup);
+		}
+		
+		if(!shutdown_time) {
+			/* Create attached thread to process incoming RPCs */
+			slurm_attr_init(&thread_attr);
+			if (pthread_create(&rpc_handler_thread, &thread_attr, 
+					   rpc_mgr, NULL))
+				fatal("pthread_create error %m");
+			slurm_attr_destroy(&thread_attr);
+		}
 
-	/* Daemon is fully operational here */
-	info("slurmdbd version %s started", SLURM_VERSION);
+		if(!shutdown_time) {
+			/* Create attached thread to do usage rollup */
+			slurm_attr_init(&thread_attr);
+			if (pthread_create(&rollup_handler_thread,
+					   &thread_attr,
+					   _rollup_handler, db_conn))
+				fatal("pthread_create error %m");
+			slurm_attr_destroy(&thread_attr);
+		}
 
-	/* Daemon termination handled here */
-	if(rollup_handler_thread)
-		pthread_join(rollup_handler_thread, NULL);
+		/* Daemon is fully operational here */
+		if(!shutdown_time || primary_resumed) {
+			shutdown_time = 0;
+			info("slurmdbd version %s started", SLURM_VERSION);
+			if(backup)
+				run_backup();
+		}
 
-	if(rpc_handler_thread)
-		pthread_join(rpc_handler_thread, NULL);
+		/* this is only ran if not backup */
+		if(rollup_handler_thread)
+			pthread_join(rollup_handler_thread, NULL);
+		if(rpc_handler_thread)
+			pthread_join(rpc_handler_thread, NULL);
 
+		if(backup && primary_resumed) { 
+			shutdown_time = 0;
+			info("Backup has given up control");
+		}
+
+		if(shutdown_time)
+			break;
+	}
+	/* Daemon termination handled here */
+	
 	if(signal_handler_thread)
 		pthread_join(signal_handler_thread, NULL);
-
+	
 end_it:
 	acct_storage_g_close_connection(&db_conn);
-
+	
 	if (slurmdbd_conf->pid_file &&
 	    (unlink(slurmdbd_conf->pid_file) < 0)) {
 		verbose("Unable to remove pidfile '%s': %m",
 			slurmdbd_conf->pid_file);
 	}
-
+	
 	assoc_mgr_fini(NULL);
 	slurm_acct_storage_fini();
 	slurm_auth_fini();
@@ -202,6 +236,13 @@ end_it:
 	exit(0);
 }
 
+extern void shutdown_threads()
+{
+	shutdown_time = time(NULL);
+	rpc_mgr_wake();
+	_rollup_handler_cancel();
+}
+
 /* Reset some of the processes resource limits to the hard limits */
 static void  _init_config(void)
 {
@@ -398,7 +439,7 @@ static void *_rollup_handler(void *db_conn)
 		slurm_mutex_lock(&rollup_lock);
 		running_rollup = 1;
 		debug2("running rollup at %s", ctime(&start_time));
-		acct_storage_g_roll_usage(db_conn, 0);
+		acct_storage_g_roll_usage(db_conn, 0, 0, 1);
 		running_rollup = 0;
 		slurm_mutex_unlock(&rollup_lock);	
 
@@ -457,17 +498,12 @@ static void *_signal_handler(void *no_data)
 		case SIGINT:	/* kill -2  or <CTRL-C> */
 		case SIGTERM:	/* kill -15 */
 			info("Terminate signal (SIGINT or SIGTERM) received");
-			shutdown_time = time(NULL);
-			rpc_mgr_wake();
-			_rollup_handler_cancel();
-
+			shutdown_threads();
 			return NULL;	/* Normal termination */
 		case SIGABRT:	/* abort */
 			info("SIGABRT received");
 			abort();	/* Should terminate here */
-			shutdown_time = time(NULL);
-			rpc_mgr_wake();
-			_rollup_handler_cancel();
+			shutdown_threads();
 			return NULL;
 		default:
 			error("Invalid signal (%d) received", sig);
diff --git a/src/slurmdbd/slurmdbd.h b/src/slurmdbd/slurmdbd.h
index a5fb94502..0ad104f1c 100644
--- a/src/slurmdbd/slurmdbd.h
+++ b/src/slurmdbd/slurmdbd.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -41,4 +42,6 @@
 
 extern time_t shutdown_time;		/* when shutdown request arrived */
 
+extern void shutdown_threads();
+
 #endif /* !_SLURM_DBD_H */
diff --git a/src/smap/Makefile.am b/src/smap/Makefile.am
index 24f328c3d..cb5115a52 100644
--- a/src/smap/Makefile.am
+++ b/src/smap/Makefile.am
@@ -20,7 +20,8 @@ smap_LDADD = \
 noinst_HEADERS = smap.h 
 smap_SOURCES = smap.c \
 	job_functions.c partition_functions.c \
-	configure_functions.c grid_functions.c opts.c
+	configure_functions.c grid_functions.c \
+	reservation_functions.c opts.c
 
 force:
 $(smap_LDADD) : force
@@ -32,7 +33,8 @@ else
 
 EXTRA_smap_SOURCES = smap.h smap.c \
 	job_functions.c partition_functions.c \
-	configure_functions.c grid_functions.c opts.c
+	configure_functions.c grid_functions.c \
+	reservation_functions.c opts.c
 
 endif
 
diff --git a/src/smap/Makefile.in b/src/smap/Makefile.in
index 5b0c51a3e..bba9c44ed 100644
--- a/src/smap/Makefile.in
+++ b/src/smap/Makefile.in
@@ -50,14 +50,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -78,15 +82,18 @@ am__installdirs = "$(DESTDIR)$(bindir)"
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
 am__smap_SOURCES_DIST = smap.c job_functions.c partition_functions.c \
-	configure_functions.c grid_functions.c opts.c
+	configure_functions.c grid_functions.c reservation_functions.c \
+	opts.c
 @HAVE_SOME_CURSES_TRUE@am_smap_OBJECTS = smap.$(OBJEXT) \
 @HAVE_SOME_CURSES_TRUE@	job_functions.$(OBJEXT) \
 @HAVE_SOME_CURSES_TRUE@	partition_functions.$(OBJEXT) \
 @HAVE_SOME_CURSES_TRUE@	configure_functions.$(OBJEXT) \
-@HAVE_SOME_CURSES_TRUE@	grid_functions.$(OBJEXT) opts.$(OBJEXT)
+@HAVE_SOME_CURSES_TRUE@	grid_functions.$(OBJEXT) \
+@HAVE_SOME_CURSES_TRUE@	reservation_functions.$(OBJEXT) \
+@HAVE_SOME_CURSES_TRUE@	opts.$(OBJEXT)
 am__EXTRA_smap_SOURCES_DIST = smap.h smap.c job_functions.c \
 	partition_functions.c configure_functions.c grid_functions.c \
-	opts.c
+	reservation_functions.c opts.c
 smap_OBJECTS = $(am_smap_OBJECTS)
 @HAVE_SOME_CURSES_TRUE@smap_DEPENDENCIES = $(top_builddir)/src/plugins/select/bluegene/block_allocator/libbluegene_block_allocator.la \
 @HAVE_SOME_CURSES_TRUE@	$(top_builddir)/src/api/libslurm.o
@@ -122,6 +129,10 @@ 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@
@@ -290,12 +301,14 @@ INCLUDES = -I$(top_srcdir) $(BG_INCLUDES)
 @HAVE_SOME_CURSES_TRUE@noinst_HEADERS = smap.h 
 @HAVE_SOME_CURSES_TRUE@smap_SOURCES = smap.c \
 @HAVE_SOME_CURSES_TRUE@	job_functions.c partition_functions.c \
-@HAVE_SOME_CURSES_TRUE@	configure_functions.c grid_functions.c opts.c
+@HAVE_SOME_CURSES_TRUE@	configure_functions.c grid_functions.c \
+@HAVE_SOME_CURSES_TRUE@	reservation_functions.c opts.c
 
 @HAVE_SOME_CURSES_TRUE@smap_LDFLAGS = -export-dynamic $(CMD_LDFLAGS)
 @HAVE_SOME_CURSES_FALSE@EXTRA_smap_SOURCES = smap.h smap.c \
 @HAVE_SOME_CURSES_FALSE@	job_functions.c partition_functions.c \
-@HAVE_SOME_CURSES_FALSE@	configure_functions.c grid_functions.c opts.c
+@HAVE_SOME_CURSES_FALSE@	configure_functions.c grid_functions.c \
+@HAVE_SOME_CURSES_FALSE@	reservation_functions.c opts.c
 
 all: all-am
 
@@ -373,6 +386,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job_functions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opts.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/partition_functions.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reservation_functions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smap.Po@am__quote@
 
 .c.o:
diff --git a/src/smap/configure_functions.c b/src/smap/configure_functions.c
index 7e0807f7a..b098c5297 100644
--- a/src/smap/configure_functions.c
+++ b/src/smap/configure_functions.c
@@ -6,10 +6,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -1599,6 +1600,6 @@ void get_command(void)
 	main_xcord = 1;
 	main_ycord = 1;
 	print_date();
-	get_job(0);
+	get_job();
 	return;
 }
diff --git a/src/smap/grid_functions.c b/src/smap/grid_functions.c
index 8698330aa..12ac8380a 100644
--- a/src/smap/grid_functions.c
+++ b/src/smap/grid_functions.c
@@ -6,10 +6,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/smap/job_functions.c b/src/smap/job_functions.c
index 459ed82b1..3ac60f7db 100644
--- a/src/smap/job_functions.c
+++ b/src/smap/job_functions.c
@@ -2,14 +2,15 @@
  *  job_functions.c - Functions related to job display mode of smap.
  *****************************************************************************
  *  Copyright (C) 2002-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 Danny Auble <da@llnl.gov>
  *
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -48,7 +49,7 @@ static int  _nodes_in_list(char *node_list);
 static void _print_header_job(void);
 static int  _print_text_job(job_info_t * job_ptr);
 
-extern void get_job()
+extern void get_job(void)
 {
 	int error_code = -1, i, recs;
 	static int printed_jobs = 0;
@@ -203,6 +204,11 @@ static void _print_header_job(void)
 		mvwprintw(text_win, main_ycord,
 			  main_xcord, "BG_BLOCK");
 		main_xcord += 18;
+#endif
+#ifdef HAVE_CRAY_XT
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "RESV_ID");
+		main_xcord += 18;
 #endif
 		mvwprintw(text_win, main_ycord,
 			  main_xcord, "USER");
@@ -260,18 +266,7 @@ static int _print_text_job(job_info_t * job_ptr)
 	uint32_t node_cnt = 0;
 	char *ionodes = NULL, *uname;
 	time_t now_time = time(NULL);
-	char *temp = NULL;
-	/* first set the jname to the job_ptr->name */
-	char *jname = NULL;
-
-	if(job_ptr->name) {
-		jname = xstrdup(job_ptr->name);
-		/* then grep for " since that is the delimiter for
-		   the wckey */
-		if((temp = strchr(jname, '\"')))
-			temp[0] = '\0';
-	}
-
+	
 #ifdef HAVE_BG
 	select_g_get_jobinfo(job_ptr->select_jobinfo, 
 			     SELECT_DATA_IONODES, 
@@ -309,6 +304,15 @@ static int _print_text_job(job_info_t * job_ptr)
 						  sizeof(time_buf), 
 						  SELECT_PRINT_BG_ID));
 		main_xcord += 18;
+#endif
+#ifdef HAVE_CRAY_XT
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%.16s", 
+			  select_g_sprint_jobinfo(job_ptr->select_jobinfo, 
+						  time_buf, 
+						  sizeof(time_buf), 
+						  SELECT_PRINT_RESV_ID));
+		main_xcord += 18;
 #endif
 		uname = uid_to_string((uid_t) job_ptr->user_id);
 		mvwprintw(text_win, main_ycord,
@@ -316,7 +320,7 @@ static int _print_text_job(job_info_t * job_ptr)
 		xfree(uname);
 		main_xcord += 9;
 		mvwprintw(text_win, main_ycord,
-			  main_xcord, "%.9s", jname);
+			  main_xcord, "%.9s", job_ptr->name);
 		main_xcord += 10;
 		mvwprintw(text_win, main_ycord,
 			  main_xcord, "%.2s",
@@ -383,11 +387,18 @@ static int _print_text_job(job_info_t * job_ptr)
 					       time_buf, 
 					       sizeof(time_buf), 
 					       SELECT_PRINT_BG_ID));
+#endif
+#ifdef HAVE_CRAY_XT
+		printf("%16.16s ", 
+		       select_g_sprint_jobinfo(job_ptr->select_jobinfo, 
+					       time_buf, 
+					       sizeof(time_buf), 
+					       SELECT_PRINT_RESV_ID));
 #endif
 		uname = uid_to_string((uid_t) job_ptr->user_id);
 		printf("%8.8s ", uname);
 		xfree(uname);
-		printf("%6.6s ", jname);
+		printf("%6.6s ", job_ptr->name);
 		printf("%2.2s ",
 		       job_state_string_compact(job_ptr->job_state));
 		if(!strcasecmp(job_ptr->nodes,"waiting...")) {
@@ -410,7 +421,6 @@ static int _print_text_job(job_info_t * job_ptr)
 		printf("\n");
 		
 	}
-	xfree(jname);
 
 	return printed;
 }
diff --git a/src/smap/opts.c b/src/smap/opts.c
index 40a73dbc5..6c7b39571 100644
--- a/src/smap/opts.c
+++ b/src/smap/opts.c
@@ -1,13 +1,15 @@
 /****************************************************************************\
  *  opts.c - smap command line option processing functions
  *****************************************************************************
- *  Copyright (C) 2002 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -82,6 +84,8 @@ extern void parse_command_line(int argc, char *argv[])
 				tmp = BGPART;
 			else if (!strcmp(optarg, "c"))
 				tmp = COMMANDS;
+			else if (!strcmp(optarg, "r"))
+				tmp = RESERVATIONS;
 
 			params.display = tmp;
 			break;
@@ -154,29 +158,33 @@ static void _print_version(void)
 
 static void _usage(void)
 {
-	printf("\
-Usage: smap [-hVcp] [-D jsbc] [-i seconds]\n");
+#ifdef HAVE_BG
+	printf("Usage: smap [-chVp] [-D bcjrs] [-i seconds]\n");
+#else
+	printf("Usage: smap [-chVp] [-D jrs] [-i seconds]\n");
+#endif
 }
 
 static void _help(void)
 {
 	printf("\
 Usage: smap [OPTIONS]\n\
-  -D, --display              set which Display mode to use\n\
-      j=jobs\n\
-      s=slurm partitions\n\
-      b=Bluegene blocks\n\
-      c=set configuration\n\
+  -c, --commandline          output written with straight to the\n\
+                             commandline.\n\
+  -D, --display              set which display mode to use\n\
+                             b=bluegene blocks\n\
+                             c=set bluegene configuration\n\
+                             j=jobs\n\
+                             r=reservations\n\
+                             s=slurm partitions\n\
   -h, --noheader             no headers on output\n\
   -i, --iterate=seconds      specify an interation period\n\
-  -V, --version              output version information and exit\n\
-  -c, --commandline          output written with straight to the \
-commandline.\n\
-  -p, --parse                used with -c to not format output, but use \
-single tab delimitation.\n\
-  -R, --resolve              resolve an XYZ coord from a Rack/Midplane id \
-or vice versa.\n\
+  -p, --parse                used with -c to not format output, but use\n\
+                             single tab delimitation.\n\
+  -R, --resolve              resolve an XYZ coord from a Rack/Midplane id \n\
+                             or vice versa.\n\
                              (i.e. -R R101 for R/M input -R 101 for XYZ).\n\
+  -V, --version              output version information and exit\n\
 \nHelp options:\n\
   --help                     show this help message\n\
   --usage                    display brief usage message\n");
diff --git a/src/smap/partition_functions.c b/src/smap/partition_functions.c
index 7850adf62..9477f8003 100644
--- a/src/smap/partition_functions.c
+++ b/src/smap/partition_functions.c
@@ -7,10 +7,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  * 
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -303,7 +304,7 @@ extern void get_bg_part()
 			_marknodes(block_ptr, last_count);
 		}
 		
-		if(block_ptr->bg_conn_type == SELECT_SMALL)
+		if(block_ptr->bg_conn_type >= SELECT_SMALL)
 			block_ptr->size = 0;
 
 		list_append(block_list, block_ptr);
diff --git a/src/smap/reservation_functions.c b/src/smap/reservation_functions.c
new file mode 100644
index 000000000..7d0d48e04
--- /dev/null
+++ b/src/smap/reservation_functions.c
@@ -0,0 +1,255 @@
+/*****************************************************************************\
+ *  reservation_functions.c - Functions related to reservation display mode 
+ *  of smap.
+ *****************************************************************************
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  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.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include "src/common/parse_time.h"
+#include "src/smap/smap.h"
+
+static void _print_header_resv(void);
+static void _print_text_resv(reserve_info_t * resv_ptr);
+
+extern void get_reservation(void)
+{
+	int error_code = -1, active, i, recs;
+	reserve_info_t resv;
+	time_t now = time(NULL);
+	static int printed_resv = 0;
+	static int count = 0;
+	static reserve_info_msg_t *resv_info_ptr = NULL, *new_resv_ptr = NULL;
+
+	if (resv_info_ptr) {
+		error_code = slurm_load_reservations(resv_info_ptr->last_update,
+						     &new_resv_ptr);
+		if (error_code == SLURM_SUCCESS)
+			 slurm_free_reservation_info_msg(resv_info_ptr);
+		else if (slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) {
+			error_code = SLURM_SUCCESS;
+			new_resv_ptr = resv_info_ptr;
+		}
+	} else
+		error_code = slurm_load_reservations((time_t) NULL,
+						     &new_resv_ptr);
+
+	if (error_code) {
+		if (quiet_flag != 1) {
+			if(!params.commandline) {
+				mvwprintw(text_win,
+					  main_ycord, 1,
+					  "slurm_load_reservations: %s", 
+					  slurm_strerror(slurm_get_errno()));
+				main_ycord++;
+			} else {
+				printf("slurm_load_reservations: %s\n",
+				       slurm_strerror(slurm_get_errno()));
+			}
+		}
+	}
+
+	if (!params.no_header)
+		_print_header_resv();
+
+	if (new_resv_ptr)
+		recs = new_resv_ptr->record_count;
+	else
+		recs = 0;
+
+	if (!params.commandline) {
+		if((text_line_cnt+printed_resv) > count) 
+			text_line_cnt--;
+	}
+	printed_resv = 0;
+	count = 0;
+	for (i = 0; i < recs; i++) {
+		resv = new_resv_ptr->reservation_array[i];
+		if ((resv.start_time <= now) && (resv.end_time >= now))
+			active = 1;
+		else
+			active = 0;
+
+		if (active && (resv.node_inx[0] != -1)) {
+#ifdef HAVE_SUN_CONST
+			set_grid_name(resv.node_list, count);
+#else
+			int j = 0;
+			resv.node_cnt = 0;
+			while (resv.node_inx[j] >= 0) {
+				resv.node_cnt +=
+				    (resv.node_inx[j + 1] + 1) -
+				    resv.node_inx[j];
+				set_grid_inx(resv.node_inx[j],
+					     resv.node_inx[j + 1], count);
+				j += 2;
+			}
+#endif
+		}
+
+		if (resv.node_inx[0] != -1) {
+			if (!params.commandline) {
+				if ((count >= text_line_cnt) &&
+				    (printed_resv  < (text_win->_maxy-3))) {
+					resv.flags = (int)letters[count%62];
+					wattron(text_win,
+						COLOR_PAIR(colors[count%6]));
+					_print_text_resv(&resv);
+					wattroff(text_win,
+						 COLOR_PAIR(colors[count%6]));
+					printed_resv++;
+				} 
+			} else {
+				/* put the letter code into "flags" field */
+				resv.flags = (int)letters[count%62];
+				_print_text_resv(&resv);
+			}
+			count++;			
+		}
+		if (count==128)
+			count=0;
+	}
+
+	if (params.commandline && params.iterate)
+		printf("\n");
+
+	if (!params.commandline)
+		main_ycord++;
+	
+	resv_info_ptr = new_resv_ptr;
+	return;
+}
+
+static void _print_header_resv(void)
+{
+	if (!params.commandline) {
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "ID ");
+		main_xcord += 3;
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%12.12s  ", "NAME");
+		main_xcord += 14;
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%19.19s  ", "START_TIME");
+		main_xcord += 21;
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%19.19s  ", "END_TIME");
+		main_xcord += 21;
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%5.5s  ", "NODES");
+		main_xcord += 7;
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%30.30s  ", 
+			  "ACCESS_CONTROL(Accounts,Users)");
+		main_xcord += 32;
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%s",    "NODELIST");
+		main_xcord = 1;
+		main_ycord++;
+	} else {
+		printf("%12.12s  ", "NAME");
+		printf("%19.19s  ", "START_TIME");
+		printf("%19.19s  ", "END_TIME");
+		printf("%5.5s  ",   "NODES");
+		printf("%30.30s  ", "ACCESS_CONTROL(Accounts,Users)");
+		printf("%s",        "NODELIST\n");
+	}
+}
+
+static void _print_text_resv(reserve_info_t * resv_ptr)
+{
+	char start_str[32], end_str[32], acl[32];
+
+	slurm_make_time_str(&resv_ptr->start_time, start_str, 
+			    sizeof(start_str));
+	slurm_make_time_str(&resv_ptr->end_time, end_str, 
+			    sizeof(end_str));
+
+	if (resv_ptr->accounts && resv_ptr->accounts[0] &&
+	    resv_ptr->users && resv_ptr->users[0])
+		snprintf(acl, sizeof(acl), "A:%s,U:%s", resv_ptr->accounts,
+			 resv_ptr->users);
+	else if (resv_ptr->accounts && resv_ptr->accounts[0])
+		snprintf(acl, sizeof(acl), "A:%s", resv_ptr->accounts);
+	else if (resv_ptr->users && resv_ptr->users[0])
+		snprintf(acl, sizeof(acl), "U:%s", resv_ptr->users);
+	else
+		snprintf(acl, sizeof(acl), "NONE");
+
+
+	if (!params.commandline) {
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%c", resv_ptr->flags);
+		main_xcord += 3;
+
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%12.12s  ", resv_ptr->name);
+		main_xcord += 14;
+
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%19.19s  ", start_str);
+		main_xcord += 21;
+
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%19.19s  ", end_str);
+		main_xcord += 21;
+
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%5.d  ", resv_ptr->node_cnt);
+		main_xcord += 7;
+
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%30.30s  ", acl);
+		main_xcord += 33;
+
+		mvwprintw(text_win, main_ycord,
+			  main_xcord, "%s", resv_ptr->node_list);
+
+		main_xcord = 1;
+		main_ycord++;
+	} else {
+		printf("%12.12s  ", resv_ptr->name);
+		printf("%19.19s  ", start_str);
+		printf("%19.19s  ", end_str);
+		printf("%5.d  ",    resv_ptr->node_cnt);
+		printf("%30.30s  ", acl);
+		printf("%s ",       resv_ptr->node_list);
+
+		printf("\n");
+		
+	}
+}
+
+
diff --git a/src/smap/smap.c b/src/smap/smap.c
index 0516274e8..c238509ca 100644
--- a/src/smap/smap.c
+++ b/src/smap/smap.c
@@ -2,14 +2,15 @@
  *  smap.c - Report overall state the system
  *****************************************************************************
  *  Copyright (C) 2004-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 Danny Auble <da@llnl.gov>
  *
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -230,6 +231,9 @@ part_fini:
 		case JOBS:
 			get_job();
 			break;
+		case RESERVATIONS:
+			get_reservation();
+			break;
 		case SLURMPART:
 			get_slurm_part();
 			break;
@@ -247,7 +251,8 @@ part_fini:
 			get_bg_part();
 			break;
 #else
-		default:
+		case COMMANDS:
+		case BGPART:
 			error("Must be on a BG SYSTEM to run this command");
 			if(!params.commandline)
 				endwin();
@@ -367,6 +372,12 @@ static int _get_option()
 		params.display = JOBS;
 		return 1;
 		break;
+	case 'r':
+		text_line_cnt = 0;
+		grid_line_cnt = 0;
+		params.display = RESERVATIONS;
+		return 1;
+		break;
 #ifdef HAVE_BG
 	case 'b':
 		text_line_cnt = 0;
@@ -474,6 +485,9 @@ static void *_resize_handler(int sig)
 	case JOBS:
 		get_job();
 		break;
+	case RESERVATIONS:
+		get_reservation();
+		break;
 	case SLURMPART:
 		get_slurm_part();
 		break;
diff --git a/src/smap/smap.h b/src/smap/smap.h
index 7bb97e87d..158d12f16 100644
--- a/src/smap/smap.h
+++ b/src/smap/smap.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -102,7 +103,7 @@
 #define OPT_LONG_USAGE	0x101
 #define OPT_LONG_HIDE	0x102
 
-enum { JOBS, SLURMPART, BGPART, COMMANDS };
+enum { JOBS, RESERVATIONS, SLURMPART, BGPART, COMMANDS };
 
 //typedef void (*sighandler_t) (int);
 
@@ -152,12 +153,13 @@ extern int set_grid_bg(int *start, int *end, int count, int set);
 extern void print_grid(int dir);
 
 extern void parse_command_line(int argc, char *argv[]);
-extern void print_date();
+extern void print_date(void);
 extern void clear_window(WINDOW *win);
 
-extern void get_slurm_part();
-extern void get_bg_part();
-extern void get_job();
-extern void get_command();
+extern void get_slurm_part(void);
+extern void get_bg_part(void);
+extern void get_job(void);
+extern void get_command(void);
+extern void get_reservation(void);
 
 #endif
diff --git a/src/sprio/Makefile.am b/src/sprio/Makefile.am
new file mode 100644
index 000000000..abadc1aa1
--- /dev/null
+++ b/src/sprio/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Makefile for sprio
+
+AUTOMAKE_OPTIONS = foreign
+
+INCLUDES = -I$(top_srcdir)
+
+bin_PROGRAMS = sprio
+
+sprio_LDADD = 	$(top_builddir)/src/api/libslurm.o -ldl
+
+noinst_HEADERS = sprio.h print.h
+sprio_SOURCES = sprio.c print.c opts.c
+
+force:
+$(sprio_LDADD) : force
+	@cd `dirname $@` && $(MAKE) `basename $@`
+
+sprio_LDFLAGS = -export-dynamic $(CMD_LDFLAGS)
+
diff --git a/src/sprio/Makefile.in b/src/sprio/Makefile.in
new file mode 100644
index 000000000..6c1bbbe40
--- /dev/null
+++ b/src/sprio/Makefile.in
@@ -0,0 +1,570 @@
+# Makefile.in generated by automake 1.10.1 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@
+
+#
+# Makefile for sprio
+
+
+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@
+bin_PROGRAMS = sprio$(EXEEXT)
+subdir = src/sprio
+DIST_COMMON = $(noinst_HEADERS) $(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/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 =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_sprio_OBJECTS = sprio.$(OBJEXT) print.$(OBJEXT) opts.$(OBJEXT)
+sprio_OBJECTS = $(am_sprio_OBJECTS)
+sprio_DEPENDENCIES = $(top_builddir)/src/api/libslurm.o
+sprio_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(sprio_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
+depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(sprio_SOURCES)
+DIST_SOURCES = $(sprio_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+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@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELAN_LIBS = @ELAN_LIBS@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
+FFLAGS = @FFLAGS@
+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@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_LDFLAGS = @LIB_LDFLAGS@
+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@
+NMEDIT = @NMEDIT@
+NUMA_LIBS = @NUMA_LIBS@
+OBJEXT = @OBJEXT@
+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_F77 = @ac_ct_F77@
+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@
+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_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+INCLUDES = -I$(top_srcdir)
+sprio_LDADD = $(top_builddir)/src/api/libslurm.o -ldl
+noinst_HEADERS = sprio.h print.h
+sprio_SOURCES = sprio.c print.c opts.c
+sprio_LDFLAGS = -export-dynamic $(CMD_LDFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/sprio/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/sprio/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
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	     || test -f $$p1 \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+sprio$(EXEEXT): $(sprio_OBJECTS) $(sprio_DEPENDENCIES) 
+	@rm -f sprio$(EXEEXT)
+	$(sprio_LINK) $(sprio_OBJECTS) $(sprio_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opts.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sprio.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+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; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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:  $(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
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+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-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+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-binPROGRAMS
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS 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-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-binPROGRAMS
+
+
+force:
+$(sprio_LDADD) : force
+	@cd `dirname $@` && $(MAKE) `basename $@`
+# 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/src/sprio/opts.c b/src/sprio/opts.c
new file mode 100644
index 000000000..f4c0c9276
--- /dev/null
+++ b/src/sprio/opts.c
@@ -0,0 +1,475 @@
+/****************************************************************************\
+ *  opts.c - sprio command line option parsing
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Don Lipari <lipari1@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _GNU_SOURCE
+#  define _GNU_SOURCE
+#endif
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#if HAVE_GETOPT_H
+#  include <getopt.h>
+#else
+#  include "src/common/getopt.h"
+#endif
+
+#include <pwd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "src/common/read_config.h"
+#include "src/common/uid.h"
+#include "src/common/xstring.h"
+#include "src/sprio/sprio.h"
+
+/* getopt_long options, integers but not characters */
+#define OPT_LONG_HELP  0x100
+#define OPT_LONG_USAGE 0x101
+
+/* FUNCTIONS */
+static List  _build_job_list( char* str );
+static List  _build_user_list( char* str );
+static char *_get_prefix(char *token);
+static void  _help( void );
+static void  _parse_token( char *token, char *field, int *field_size, 
+                           bool *right_justify, char **suffix);
+static void  _print_options( void );
+static void  _print_version( void );
+static void  _usage( void );
+
+/*
+ * parse_command_line
+ */
+extern void
+parse_command_line( int argc, char* argv[] )
+{
+	int opt_char;
+	int option_index;
+	static struct option long_options[] = {
+		{"noheader",   no_argument,       0, 'h'},
+		{"jobs",       optional_argument, 0, 'j'},
+		{"long",       no_argument,       0, 'l'},
+		{"norm",       no_argument,       0, 'n'},
+		{"format",     required_argument, 0, 'o'},
+		{"user",       required_argument, 0, 'u'},
+		{"users",      required_argument, 0, 'u'},
+		{"verbose",    no_argument,       0, 'v'},
+		{"version",    no_argument,       0, 'V'},
+		{"weights",    no_argument,       0, 'w'},
+		{"help",       no_argument,       0, OPT_LONG_HELP},
+		{"usage",      no_argument,       0, OPT_LONG_USAGE},
+		{NULL,         0,                 0, 0}
+	};
+
+	while((opt_char = getopt_long(argc, argv, "hj::lno:u:vVw",
+				      long_options, &option_index)) != -1) {
+		switch (opt_char) {
+		case (int)'?':
+			fprintf(stderr, "Try \"sprio --help\" "
+				"for more information\n");
+			exit(1);
+		case (int)'h':
+			params.no_header = true;
+			break;
+		case (int) 'j':
+			if (optarg) {
+				params.jobs = xstrdup(optarg);
+				params.job_list = _build_job_list(params.jobs);
+			}
+			params.job_flag = true;
+			break;
+		case (int) 'l':
+			params.long_list = true;
+			break;
+		case (int) 'n':
+			params.normalized = true;
+			break;
+		case (int) 'o':
+			xfree(params.format);
+			params.format = xstrdup(optarg);
+			break;
+		case (int) 'u':
+			xfree(params.users);
+			params.users = xstrdup(optarg);
+			params.user_list = _build_user_list(params.users);
+			break;
+		case (int) 'v':
+			params.verbose++;
+			break;
+		case (int) 'V':
+			_print_version();
+			exit(0);
+		case (int) 'w':
+			params.weights = true;
+			break;
+		case OPT_LONG_HELP:
+			_help();
+			exit(0);
+		case OPT_LONG_USAGE:
+			_usage();
+			exit(0);
+		}
+	}
+
+	if (optind < argc) {
+		if (params.job_flag) {
+			params.jobs = xstrdup(argv[optind++]);
+			params.job_list = _build_job_list(params.jobs);
+		}
+		if (optind < argc) {
+			error("Unrecognized option: %s",argv[optind]);
+			_usage();
+			exit(1);
+		}
+	}
+
+	if ( params.verbose )
+		_print_options();
+}
+
+/*
+ * parse_format - Take the user's format specification and use it to build
+ *	build the format specifications (internalize it to print.c data
+ *	structures)
+ * IN format - user's format specification
+ * RET zero or error code
+ */
+extern int parse_format( char* format )
+{
+	int field_size;
+	bool right_justify;
+	char *prefix = NULL, *suffix = NULL, *token = NULL;
+	char *tmp_char = NULL, *tmp_format = NULL;
+	char field[1];
+
+	if (format == NULL) {
+		error ("Format option lacks specification.");
+		exit( 1 );
+	}
+
+	params.format_list = list_create( NULL );
+	if ((prefix = _get_prefix(format))) {
+		job_format_add_prefix( params.format_list, 0, 0, prefix);
+	}
+
+	field_size = strlen( format );
+	tmp_format = xmalloc( field_size + 1 );
+	strcpy( tmp_format, format );
+
+	token = strtok_r( tmp_format, "%", &tmp_char);
+	if (token && (format[0] != '%'))	/* toss header */
+		token = strtok_r( NULL, "%", &tmp_char );
+	while (token) {
+		_parse_token( token, field, &field_size, &right_justify,
+			      &suffix);
+		if (field[0] == 'a')
+			job_format_add_age_priority_normalized(params.format_list,
+							       field_size,
+							       right_justify,
+							       suffix );
+		else if (field[0] == 'A')
+			job_format_add_age_priority_weighted(params.format_list,
+							     field_size,
+							     right_justify,
+							     suffix );
+		else if (field[0] == 'f')
+			job_format_add_fs_priority_normalized(params.format_list,
+							      field_size,
+							      right_justify,
+							      suffix );
+		else if (field[0] == 'F')
+			job_format_add_fs_priority_weighted(params.format_list,
+							    field_size,
+							    right_justify,
+							    suffix );
+		else if (field[0] == 'i')
+			job_format_add_job_id(params.format_list,
+					      field_size,
+					      right_justify,
+					      suffix );
+		else if (field[0] == 'j')
+			job_format_add_js_priority_normalized(params.format_list,
+							      field_size,
+							      right_justify,
+							      suffix );
+		else if (field[0] == 'J')
+			job_format_add_js_priority_weighted(params.format_list,
+							    field_size,
+							    right_justify,
+							    suffix );
+		else if (field[0] == 'N')
+			job_format_add_job_nice(params.format_list,
+						field_size,
+						right_justify,
+						suffix );
+		else if (field[0] == 'p')
+			job_format_add_part_priority_normalized(params.format_list,
+								field_size,
+								right_justify,
+								suffix );
+		else if (field[0] == 'P')
+			job_format_add_part_priority_weighted(params.format_list,
+							      field_size,
+							      right_justify,
+							      suffix );
+		else if (field[0] == 'q')
+			job_format_add_qos_priority_normalized(params.format_list,
+							       field_size,
+							       right_justify,
+							       suffix );
+		else if (field[0] == 'Q')
+			job_format_add_qos_priority_weighted(params.format_list,
+							     field_size,
+							     right_justify,
+							     suffix );
+		else if (field[0] == 'u')
+			job_format_add_user_name(params.format_list,
+						 field_size,
+						 right_justify,
+						 suffix );
+		else if (field[0] == 'y')
+			job_format_add_job_priority_normalized(params.format_list,
+							       field_size,
+							       right_justify,
+							       suffix );
+		else if (field[0] == 'Y')
+			job_format_add_job_priority_weighted(params.format_list,
+							     field_size,
+							     right_justify,
+							     suffix );
+		else
+			error( "Invalid job format specification: %c",
+			       field[0] );
+
+		token = strtok_r( NULL, "%", &tmp_char);
+	}
+
+	xfree( tmp_format );
+	return SLURM_SUCCESS;
+}
+
+/* Take a format specification and copy out it's prefix
+ * IN/OUT token - input specification, everything before "%" is removed
+ * RET - everything before "%" in the token
+ */
+static char *
+_get_prefix( char *token )
+{
+	char *pos, *prefix;
+
+	if (token == NULL)
+		return NULL;
+
+	pos = strchr(token, (int) '%');
+	if (pos == NULL)	/* everything is prefix */
+		return xstrdup(token);
+	if (pos == token)	/* no prefix */
+		return NULL;
+
+	pos[0] = '\0';		/* some prefix */
+	prefix = xstrdup(token);
+	pos[0] = '%';
+	memmove(token, pos, (strlen(pos)+1));
+	return prefix;
+}
+
+/* Take a format specification and break it into its components
+ * IN token - input specification without leading "%", eg. ".5u"
+ * OUT field - the letter code for the data type
+ * OUT field_size - byte count
+ * OUT right_justify - true of field to be right justified
+ * OUT suffix - string containing everthing after the field specification
+ */
+static void
+_parse_token( char *token, char *field, int *field_size, bool *right_justify, 
+	      char **suffix)
+{
+	int i = 0;
+
+	assert (token != NULL);
+
+	if (token[i] == '.') {
+		*right_justify = true;
+		i++;
+	} else
+		*right_justify = false;
+
+	*field_size = 0;
+	while ((token[i] >= '0') && (token[i] <= '9'))
+		*field_size = (*field_size * 10) + (token[i++] - '0');
+
+	field[0] = token[i++];
+
+	*suffix = xstrdup(&token[i]);
+}
+
+/* print the parameters specified */
+static void
+_print_options()
+{
+	ListIterator iterator;
+	int i;
+	uint32_t *job_id;
+	uint32_t *user;
+
+	printf( "-----------------------------\n" );
+	printf( "format     = %s\n", params.format );
+	printf( "job_flag   = %d\n", params.job_flag );
+	printf( "jobs       = %s\n", params.jobs );
+	printf( "users      = %s\n", params.users );
+	printf( "verbose    = %d\n", params.verbose );
+
+	if ((params.verbose > 1) && params.job_list) {
+		i = 0;
+		iterator = list_iterator_create( params.job_list );
+		while ( (job_id = list_next( iterator )) ) {
+			printf( "job_list[%d] = %u\n", i++, *job_id);
+		}
+		list_iterator_destroy( iterator );
+	}
+
+	if ((params.verbose > 1) && params.user_list) {
+		i = 0;
+		iterator = list_iterator_create( params.user_list );
+		while ( (user = list_next( iterator )) ) {
+			printf( "user_list[%d] = %u\n", i++, *user);
+		}
+		list_iterator_destroy( iterator );
+	}
+
+	printf( "-----------------------------\n\n\n" );
+} ;
+
+
+/*
+ * _build_job_list- build a list of job_ids
+ * IN str - comma separated list of job_ids
+ * RET List of job_ids (uint32_t)
+ */
+static List
+_build_job_list( char* str )
+{
+	List my_list;
+	char *job = NULL, *tmp_char = NULL, *my_job_list = NULL;
+	int i;
+	uint32_t *job_id = NULL;
+
+	if ( str == NULL)
+		return NULL;
+	my_list = list_create( NULL );
+	my_job_list = xstrdup( str );
+	job = strtok_r( my_job_list, ",", &tmp_char );
+	while (job)
+	{
+		i = strtol( job, (char **) NULL, 10 );
+		if (i <= 0) {
+			error( "Invalid job id: %s", job );
+			exit( 1 );
+		}
+		job_id = xmalloc( sizeof( uint32_t ) );
+		*job_id = (uint32_t) i;
+		list_append( my_list, job_id );
+		job = strtok_r (NULL, ",", &tmp_char);
+	}
+	return my_list;
+}
+
+/*
+ * _build_user_list- build a list of UIDs
+ * IN str - comma separated list of user names
+ * RET List of UIDs (uint32_t)
+ */
+static List
+_build_user_list( char* str )
+{
+	List my_list;
+	char *user = NULL;
+	char *tmp_char = NULL, *my_user_list = NULL;
+	uint32_t *uid = NULL;
+
+	if ( str == NULL)
+		return NULL;
+	my_list = list_create( NULL );
+	my_user_list = xstrdup( str );
+	user = strtok_r( my_user_list, ",", &tmp_char );
+	while (user) {
+		uid = xmalloc( sizeof( uint32_t ));
+		*uid = uid_from_string(user);
+		if (*uid == -1) {
+			error( "Invalid user: %s\n", user);
+			xfree(uid);
+		} else {
+			list_append( my_list, uid );
+		}
+		user = strtok_r (NULL, ",", &tmp_char);
+	}
+	return my_list;
+}
+
+static void _print_version(void)
+{
+	printf("%s %s\n", PACKAGE, SLURM_VERSION);
+}
+
+static void _usage(void)
+{
+	printf("Usage: sprio [-j jid[s]] [-u user_name[s]] [-o format] [--usage] [-hlnvVw]\n");
+}
+
+static void _help(void)
+{
+	printf("\
+Usage: sprio [OPTIONS]\n\
+  -h, --noheader                  no headers on output\n\
+  -j, --jobs                      comma separated list of jobs\n\
+                                  to view, default is all\n\
+  -l, --long                      long report\n\
+  -n, --norm                      display normalized values\n\
+  -o, --format=format             format specification\n\
+  -u, --user=user_name            comma separated list of users to view\n\
+  -v, --verbose                   verbosity level\n\
+  -V, --version                   output version information and exit\n\
+  -w, --weights                   show the weights for each priority factor\n\
+\nHelp options:\n\
+  --help                          show this help message\n\
+  --usage                         display a brief summary of sprio options\n");
+}
diff --git a/src/sprio/print.c b/src/sprio/print.c
new file mode 100644
index 000000000..c46789ed4
--- /dev/null
+++ b/src/sprio/print.c
@@ -0,0 +1,438 @@
+/*****************************************************************************\
+ *  print.c - sprio print job functions
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Don Lipari <lipari1@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *    
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and
+ *  distribute linked combinations including the two. You must obey the GNU
+ *  General Public License in all respects for all of the code used other than
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this
+ *  exception to your version of the file(s), but you are not obligated to do
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in
+ *  the program, then also delete it here.
+ *
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <sys/types.h>
+
+#include "src/common/list.h"
+#include "src/common/macros.h"
+#include "src/slurmctld/slurmctld.h"
+#include "src/sprio/print.h"
+#include "src/sprio/sprio.h"
+#include "src/common/uid.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
+
+static int	_print_str(char *str, int width, bool right, bool cut_output);
+
+/********************
+ * Global Variables *
+ ********************/
+extern uint32_t max_age; /* time when not to add any more */
+extern uint32_t weight_age; /* weight for age factor */
+extern uint32_t weight_fs; /* weight for Fairshare factor */
+extern uint32_t weight_js; /* weight for Job Size factor */
+extern uint32_t weight_part; /* weight for Partition factor */
+extern uint32_t weight_qos; /* weight for QOS factor */
+
+
+/*****************************************************************************
+ * Global Print Functions
+ *****************************************************************************/
+
+int print_jobs_array(List jobs, List format)
+{
+	if (!params.no_header)
+		print_job_from_format(NULL, format);
+
+	if (params.weights) {
+		print_job_from_format((priority_factors_object_t *) -1, format);
+		return SLURM_SUCCESS;
+	}
+
+	/* Print the jobs of interest */
+	if (jobs)
+		list_for_each (jobs, (ListForF) print_job_from_format,
+			       (void *) format);
+
+	return SLURM_SUCCESS;
+}
+
+static int _print_str(char *str, int width, bool right, bool cut_output)
+{
+	char format[64];
+	int printed = 0;
+
+	if (right == true && width != 0)
+		snprintf(format, 64, "%%%ds", width);
+	else if (width != 0)
+		snprintf(format, 64, "%%.%ds", width);
+	else {
+		format[0] = '%';
+		format[1] = 's';
+		format[2] = '\0';
+	}
+
+	if ((width == 0) || (cut_output == false)) {
+		if ((printed = printf(format, str)) < 0)
+			return printed;
+	} else {
+		char temp[width + 1];
+		snprintf(temp, width + 1, format, str);
+		if ((printed = printf("%s",temp)) < 0)
+			return printed;
+	}
+
+	while (printed++ < width)
+		printf(" ");
+
+	return printed;
+}
+
+int _print_int(int number, int width, bool right, bool cut_output)
+{
+	char buf[32];
+
+	snprintf(buf, 32, "%d", number);
+	return _print_str(buf, width, right, cut_output);
+}
+
+int _print_norm(double number, int width, bool right, bool cut_output)
+{
+	char buf[32];
+
+	snprintf(buf, 32, "%.7lf", number);
+	return _print_str(buf, width, right, cut_output);
+}
+
+
+/*****************************************************************************
+ * Job Print Functions
+ *****************************************************************************/
+int print_job_from_format(priority_factors_object_t * job, List list)
+{
+	ListIterator i = list_iterator_create(list);
+	job_format_t *current;
+	int total_width = 0;
+
+	while ((current = (job_format_t *) list_next(i)) != NULL) {
+		if (current->
+		    function(job, current->width, current->right_justify,
+			     current->suffix)
+		    != SLURM_SUCCESS)
+			return SLURM_ERROR;
+		if (current->width)
+			total_width += (current->width + 1);
+		else
+			total_width += 10;
+	}
+	list_iterator_destroy(i);
+
+	printf("\n");
+
+	return SLURM_SUCCESS;
+}
+
+int job_format_add_function(List list, int width, bool right, char *suffix,
+			    int (*function) (priority_factors_object_t *,
+			    int, bool, char*))
+{
+	job_format_t *tmp = (job_format_t *) xmalloc(sizeof(job_format_t));
+	tmp->function = function;
+	tmp->width = width;
+	tmp->right_justify = right;
+	tmp->suffix = suffix;
+
+	if (list_append(list, tmp) == NULL) {
+		fprintf(stderr, "Memory exhausted\n");
+		exit(1);
+	}
+	return SLURM_SUCCESS;
+}
+
+
+int _print_job_job_id(priority_factors_object_t * job, int width,
+		      bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("JOBID", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_str("Weights", width, right, true);
+	else {
+		char id[FORMAT_STRING_SIZE];
+		snprintf(id, FORMAT_STRING_SIZE, "%u", job->job_id);
+		_print_str(id, width, right, true);
+	}
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_job_prefix(priority_factors_object_t * job, int width,
+		      bool right, char* suffix)
+{
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_age_priority_normalized(priority_factors_object_t * job, int width,
+				   bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("AGE", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_int(weight_age, width, right, true);
+	else
+		_print_norm(job->priority_age, width, right, true);
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_age_priority_weighted(priority_factors_object_t * job, int width,
+				 bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("AGE", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_int(weight_age, width, right, true);
+	else
+		_print_int(job->priority_age * weight_age, width, right, true);
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_fs_priority_normalized(priority_factors_object_t * job, int width,
+				  bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("FAIRSHARE", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_int(weight_fs, width, right, true);
+	else
+		_print_norm(job->priority_fs, width, right, true);
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_fs_priority_weighted(priority_factors_object_t * job, int width,
+				bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("FAIRSHARE", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_int(weight_fs, width, right, true);
+	else
+		_print_int(job->priority_fs * weight_fs, width, right, true);
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_job_priority_normalized(priority_factors_object_t * job, int width,
+				   bool right, char* suffix)
+{
+	char temp[FORMAT_STRING_SIZE];
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("PRIORITY", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_str("", width, right, true);
+	else {
+		double age_priority = job->priority_age * (double)weight_age;
+		double fs_priority = job->priority_fs * (double)weight_fs;
+		double js_priority = job->priority_js * (double)weight_js;
+		double part_priority = job->priority_part * (double)weight_part;
+		double qos_priority = job->priority_qos * (double)weight_qos;
+		double priority = age_priority + fs_priority + js_priority +
+				  part_priority + qos_priority;
+		priority -= (double)(job->nice - NICE_OFFSET);
+		double prio = priority / (double) ((uint32_t) 0xffffffff);
+
+		sprintf(temp, "%16.14f", prio);
+		_print_str(temp, width, right, true);
+	}
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_job_priority_weighted(priority_factors_object_t * job, int width,
+				 bool right, char* suffix)
+{
+	char temp[FORMAT_STRING_SIZE];
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("PRIORITY", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_str("", width, right, true);
+	else {
+		double age_priority = job->priority_age * (double)weight_age;
+		double fs_priority = job->priority_fs * (double)weight_fs;
+		double js_priority = job->priority_js * (double)weight_js;
+		double part_priority = job->priority_part * (double)weight_part;
+		double qos_priority = job->priority_qos * (double)weight_qos;
+		uint32_t priority = (uint32_t) (age_priority + fs_priority +
+						js_priority + part_priority +
+						qos_priority);
+		priority -= (uint32_t)(job->nice - NICE_OFFSET);
+
+		sprintf(temp, "%u", priority);
+		_print_str(temp, width, right, true);
+	}
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_js_priority_normalized(priority_factors_object_t * job, int width,
+				  bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("JOBSIZE", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_int(weight_js, width, right, true);
+	else {
+		_print_norm(job->priority_js, width, right, true);
+	}
+	if (suffix)
+		printf("%s", suffix);
+
+	return SLURM_SUCCESS;
+}
+
+int _print_js_priority_weighted(priority_factors_object_t * job, int width,
+				bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("JOBSIZE", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_int(weight_js, width, right, true);
+	else {
+		_print_int(job->priority_js * weight_js, width, right, true);
+	}
+	if (suffix)
+		printf("%s", suffix);
+
+	return SLURM_SUCCESS;
+}
+
+int _print_part_priority_normalized(priority_factors_object_t * job, int width,
+				    bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("PARTITION", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_int(weight_part, width, right, true);
+	else
+		_print_norm(job->priority_part, width, right, true);
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_part_priority_weighted(priority_factors_object_t * job, int width,
+				  bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("PARTITION", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_int(weight_part, width, right, true);
+	else
+		_print_int(job->priority_part * weight_part, width, right, true);
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_qos_priority_normalized(priority_factors_object_t * job, int width,
+				   bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("QOS", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_int(weight_qos, width, right, true);
+	else
+		_print_norm(job->priority_qos, width, right, true);
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_qos_priority_weighted(priority_factors_object_t * job, int width,
+				 bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("QOS", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_int(weight_qos, width, right, true);
+	else
+		_print_int(job->priority_qos * weight_qos, width, right, true);
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_job_nice(priority_factors_object_t * job, int width,
+				bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("NICE", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_str("", width, right, true);
+	else
+		_print_int(job->nice - NICE_OFFSET, width, right, true);
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
+int _print_job_user_name(priority_factors_object_t * job, int width,
+			 bool right, char* suffix)
+{
+	if (job == NULL)	/* Print the Header instead */
+		_print_str("USER", width, right, true);
+	else if (job == (priority_factors_object_t *) -1)
+		_print_str("", width, right, true);
+	else {
+		char *uname = uid_to_string((uid_t) job->user_id);
+		_print_str(uname, width, right, true);
+		xfree(uname);
+	}
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
diff --git a/src/sprio/print.h b/src/sprio/print.h
new file mode 100644
index 000000000..fa3342688
--- /dev/null
+++ b/src/sprio/print.h
@@ -0,0 +1,138 @@
+/*****************************************************************************\
+ *  print.h - sprio print job definitions
+ *****************************************************************************
+ *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Joey Ekstrom <ekstrom1@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _SPRIO_PRINT_H_
+#define _SPRIO_PRINT_H_
+
+#include <slurm/slurm.h>
+
+#include "src/common/list.h"
+
+#define FORMAT_STRING_SIZE 32
+
+/*****************************************************************************
+ * Format Structures
+ *****************************************************************************/
+typedef struct job_format {
+	int (*function) (priority_factors_object_t *, int, bool, char*);
+	uint32_t width;
+	bool right_justify;
+	char *suffix;
+} job_format_t;
+
+int print_jobs_array(List factors, List format);
+int print_job_from_format(priority_factors_object_t * job, List list);
+
+/*****************************************************************************
+ * Job Line Format Options
+ *****************************************************************************/
+int job_format_add_function(List list, int width, bool right_justify,
+			    char *suffix,
+			    int (*function) (priority_factors_object_t *,
+			    int, bool, char*));
+
+#define job_format_add_job_id(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_job_job_id)
+#define job_format_add_prefix(list,wid,right,suffix) \
+	job_format_add_function(list,0,0,suffix,_print_job_prefix)
+#define job_format_add_age_priority_normalized(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_age_priority_normalized)
+#define job_format_add_age_priority_weighted(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_age_priority_weighted)
+#define job_format_add_fs_priority_normalized(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_fs_priority_normalized)
+#define job_format_add_fs_priority_weighted(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_fs_priority_weighted)
+#define job_format_add_job_priority_normalized(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_job_priority_normalized)
+#define job_format_add_job_priority_weighted(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_job_priority_weighted)
+#define job_format_add_js_priority_normalized(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_js_priority_normalized)
+#define job_format_add_js_priority_weighted(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_js_priority_weighted)
+#define job_format_add_part_priority_normalized(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_part_priority_normalized)
+#define job_format_add_part_priority_weighted(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_part_priority_weighted)
+#define job_format_add_qos_priority_normalized(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_qos_priority_normalized)
+#define job_format_add_qos_priority_weighted(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_qos_priority_weighted)
+#define job_format_add_job_nice(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_job_nice)
+#define job_format_add_user_name(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_job_user_name)
+
+/*****************************************************************************
+ * Job Line Print Functions
+ *****************************************************************************/
+int _print_job_job_id(priority_factors_object_t * job, int width,
+		      bool right_justify, char* suffix);
+int _print_job_prefix(priority_factors_object_t * job, int width,
+		      bool right_justify, char* suffix);
+int _print_age_priority_normalized(priority_factors_object_t * job, int width,
+				   bool right_justify, char* suffix);
+int _print_age_priority_weighted(priority_factors_object_t * job, int width,
+				 bool right_justify, char* suffix);
+int _print_fs_priority_normalized(priority_factors_object_t * job, int width,
+				  bool right_justify, char* suffix);
+int _print_fs_priority_weighted(priority_factors_object_t * job, int width,
+				bool right_justify, char* suffix);
+int _print_job_priority_normalized(priority_factors_object_t * job, int width,
+				   bool right_justify, char* suffix);
+int _print_job_priority_weighted(priority_factors_object_t * job, int width,
+				 bool right_justify, char* suffix);
+int _print_js_priority_normalized(priority_factors_object_t * job, int width,
+				  bool right_justify, char* suffix);
+int _print_js_priority_weighted(priority_factors_object_t * job, int width,
+				bool right_justify, char* suffix);
+int _print_part_priority_normalized(priority_factors_object_t * job, int width,
+				    bool right_justify,	char* suffix);
+int _print_part_priority_weighted(priority_factors_object_t * job, int width,
+				  bool right_justify, char* suffix);
+int _print_qos_priority_normalized(priority_factors_object_t * job, int width,
+				   bool right_justify, char* suffix);
+int _print_qos_priority_weighted(priority_factors_object_t * job, int width,
+				 bool right_justify, char* suffix);
+int _print_job_nice(priority_factors_object_t * job, int width,
+		    bool right_justify, char* suffix);
+int _print_job_user_name(priority_factors_object_t * job, int width,
+			 bool right_justify, char* suffix);
+
+#endif
diff --git a/src/sprio/sprio.c b/src/sprio/sprio.c
new file mode 100644
index 000000000..f2e7f7549
--- /dev/null
+++ b/src/sprio/sprio.c
@@ -0,0 +1,227 @@
+/*****************************************************************************\
+ *  sprio.c - Display the priority components of jobs in the slurm system
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Don Lipari <lipari1@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#if HAVE_STDINT_H
+#  include <stdint.h>
+#endif
+
+#if HAVE_INTTYPES_H
+#  include <inttypes.h>
+#endif
+
+#ifdef HAVE_TERMCAP_H
+#  include <termcap.h>
+#endif
+
+#include <sys/ioctl.h>
+#include <termios.h>
+
+#include "src/common/slurm_priority.h"
+#include "src/common/xstring.h"
+#include "src/sprio/sprio.h"
+
+
+/********************
+ * Global Variables *
+ ********************/
+struct sprio_parameters params;
+uint32_t weight_age; /* weight for age factor */
+uint32_t weight_fs; /* weight for Fairshare factor */
+uint32_t weight_js; /* weight for Job Size factor */
+uint32_t weight_part; /* weight for Partition factor */
+uint32_t weight_qos; /* weight for QOS factor */
+
+static int _get_info(priority_factors_request_msg_t *factors_req,
+		     priority_factors_response_msg_t **factors_resp);
+
+int main (int argc, char *argv[])
+{
+	char *temp = NULL;
+	int error_code = SLURM_SUCCESS;
+	priority_factors_request_msg_t req_msg;
+	priority_factors_response_msg_t *resp_msg = NULL;
+	log_options_t opts = LOG_OPTS_STDERR_ONLY ;
+
+	/* Check to see if we are running a supported accounting plugin */
+	temp = slurm_get_priority_type();
+	if(strcasecmp(temp, "priority/multifactor")) {
+		fprintf (stderr, "You are not running a supported "
+			 "priority plugin\n(%s).\n"
+			 "Only 'priority/multifactor' is supported.\n",
+			temp);
+		xfree(temp);
+		exit(1);
+	}
+	xfree(temp);
+
+	log_init(xbasename(argv[0]), opts, SYSLOG_FACILITY_USER, NULL);
+
+	weight_age  = slurm_get_priority_weight_age();
+	weight_fs   = slurm_get_priority_weight_fairshare();
+	weight_js   = slurm_get_priority_weight_job_size();
+	weight_part = slurm_get_priority_weight_partition();
+	weight_qos  = slurm_get_priority_weight_qos();
+
+	parse_command_line( argc, argv );
+	if (params.verbose) {
+		opts.stderr_level += params.verbose;
+		log_alter(opts, SYSLOG_FACILITY_USER, NULL);
+	}
+
+	memset(&req_msg, 0, sizeof(priority_factors_request_msg_t));
+
+	if (params.jobs)
+		req_msg.job_id_list = params.job_list;
+	else
+		req_msg.job_id_list = NULL;
+
+	if (params.users)
+		req_msg.uid_list = params.user_list;
+	else
+		req_msg.uid_list = NULL;
+
+	error_code = _get_info(&req_msg, &resp_msg);
+
+	if (error_code) {
+		slurm_perror("Couldn't get priority factors from controller");
+		exit(error_code);
+	}
+
+	if (params.format == NULL) {
+		if (params.normalized) {
+			if (params.long_list)
+				params.format = "%.7i %.8u %10y %10a %10f %10j "
+					"%10p %10q";
+			else{
+				params.format = xstrdup("%.7i");
+				if (params.users)
+					xstrcat(params.format, " %.8u");
+				xstrcat(params.format, " %10y");
+				if (weight_age)
+					xstrcat(params.format, " %10a");
+				if (weight_fs)
+					xstrcat(params.format, " %10f");
+				if (weight_js)
+					xstrcat(params.format, " %10j");
+				if (weight_part)
+					xstrcat(params.format, " %10p");
+				if (weight_qos)
+					xstrcat(params.format, " %10q");
+			}
+		} else {
+			if (params.long_list)
+				params.format = "%.7i %.8u %.10Y %.10A %.10F "
+					"%.10J %.10P %.10Q %.6N";
+			else{
+				params.format = xstrdup("%.7i");
+				if (params.users)
+					xstrcat(params.format, " %.8u");
+				xstrcat(params.format, " %.10Y");
+				if (weight_age)
+					xstrcat(params.format, " %.10A");
+				if (weight_fs)
+					xstrcat(params.format, " %.10F");
+				if (weight_js)
+					xstrcat(params.format, " %.10J");
+				if (weight_part)
+					xstrcat(params.format, " %.10P");
+				if (weight_qos)
+					xstrcat(params.format, " %.10Q");
+			}
+		}
+	}
+
+	/* create the format list from the format */
+	parse_format(params.format);
+
+	if (params.jobs && (!resp_msg->priority_factors_list ||
+			    !list_count(resp_msg->priority_factors_list)))
+		printf("Unable to find jobs matching user/id(s) specified\n");
+	else
+		print_jobs_array(resp_msg->priority_factors_list,
+				 params.format_list);
+
+#if 0
+	/* Free storage here if we want to verify that logic.
+	 * Since we exit next, this is not important */
+ 	list_destroy(params.format_list);
+	slurm_free_priority_factors_response_msg(resp_msg);
+#endif
+
+	exit (error_code);
+}
+
+static int _get_info(priority_factors_request_msg_t *factors_req,
+		     priority_factors_response_msg_t **factors_resp)
+{
+	int rc;
+        slurm_msg_t req_msg;
+        slurm_msg_t resp_msg;
+
+	slurm_msg_t_init(&req_msg);
+	slurm_msg_t_init(&resp_msg);
+
+        req_msg.msg_type = REQUEST_PRIORITY_FACTORS;
+        req_msg.data     = factors_req;
+
+	if (slurm_send_recv_controller_msg(&req_msg, &resp_msg) < 0)
+		return SLURM_ERROR;
+
+	switch (resp_msg.msg_type) {
+	case RESPONSE_PRIORITY_FACTORS:
+		*factors_resp =
+			(priority_factors_response_msg_t *) resp_msg.data;
+		break;
+	case RESPONSE_SLURM_RC:
+		rc = ((return_code_msg_t *) resp_msg.data)->return_code;
+		slurm_free_return_code_msg(resp_msg.data);
+		if (rc)
+			slurm_seterrno_ret(rc);
+		*factors_resp = NULL;
+		break;
+	default:
+		slurm_seterrno_ret(SLURM_UNEXPECTED_MSG_ERROR);
+		break;
+	}
+
+	return SLURM_PROTOCOL_SUCCESS;
+}
diff --git a/src/sprio/sprio.h b/src/sprio/sprio.h
new file mode 100644
index 000000000..d98503f60
--- /dev/null
+++ b/src/sprio/sprio.h
@@ -0,0 +1,94 @@
+/****************************************************************************\
+ *  sprio.h - definitions used for printing job queue state
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Don Lipari <lipari1@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under 
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef __SPRIO_H__
+#define __SPRIO_H__
+
+#if HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+
+#if HAVE_INTTYPES_H
+#  include <inttypes.h>
+#else  /* !HAVE_INTTYPES_H */
+#  if HAVE_STDINT_H
+#    include <stdint.h>
+#  endif
+#endif  /* HAVE_INTTYPES_H */
+
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <slurm/slurm.h>
+
+#include "src/common/hostlist.h"
+#include "src/common/list.h"
+#include "src/common/log.h"
+#include "src/common/slurm_protocol_api.h"
+#include "src/common/xmalloc.h"
+#include "src/sprio/print.h"
+
+struct sprio_parameters {
+	bool job_flag;
+	bool long_list;
+	bool no_header;
+	bool normalized;
+	bool weights;
+
+	int  verbose;
+
+	char* format;
+	char* jobs;
+	char* users;
+
+	List  format_list;
+	List  job_list;
+	List  user_list;
+};
+
+extern struct sprio_parameters params;
+
+extern void parse_command_line( int argc, char* argv[] );
+extern int  parse_format( char* format );
+
+#endif
diff --git a/src/squeue/Makefile.in b/src/squeue/Makefile.in
index e085dcc4b..0e969cf23 100644
--- a/src/squeue/Makefile.in
+++ b/src/squeue/Makefile.in
@@ -47,14 +47,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/src/squeue/opts.c b/src/squeue/opts.c
index 1d38df6c7..e8552e8e7 100644
--- a/src/squeue/opts.c
+++ b/src/squeue/opts.c
@@ -1,15 +1,16 @@
 /****************************************************************************\
  *  opts.c - srun command line option parsing
  *
- *  $Id: opts.c 16350 2009-01-29 18:16:08Z jette $
+ *  $Id: opts.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Joey Ekstrom <ekstrom1@llnl.gov>, Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -635,6 +636,11 @@ extern int parse_format( char* format )
 				                          field_size, 
 				                          right_justify, 
 				                          suffix );
+			else if (field[0] == 'v')
+				job_format_add_reservation( params.format_list, 
+				                        field_size, 
+				                        right_justify, 
+				                        suffix );
 			else if (field[0] == 'w')
 				job_format_add_wckey( params.format_list, 
 						      field_size, 
diff --git a/src/squeue/print.c b/src/squeue/print.c
index 2d86c61e9..2a222df3f 100644
--- a/src/squeue/print.c
+++ b/src/squeue/print.c
@@ -6,10 +6,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Joey Ekstrom <ekstrom1@llnl.gov>, 
  *             Morris Jette <jette1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *    
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -37,11 +38,11 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
 \*****************************************************************************/
 
-#include <time.h>
+#include <grp.h>
+#include <pwd.h>
 #include <stdio.h>
 #include <string.h>
-#include <pwd.h>
-#include <grp.h>
+#include <time.h>
 #include <sys/types.h>
 
 #include "src/common/hostlist.h"
@@ -49,11 +50,11 @@
 #include "src/common/macros.h"
 #include "src/common/node_select.h"
 #include "src/common/parse_time.h"
+#include "src/squeue/print.h"
+#include "src/squeue/squeue.h"
 #include "src/common/uid.h"
 #include "src/common/xmalloc.h"
 #include "src/common/xstring.h"
-#include "src/squeue/print.h"
-#include "src/squeue/squeue.h"
 
 static int	_adjust_completing (job_info_t *j, node_info_msg_t **ni);
 static int	_filter_job(job_info_t * job);
@@ -333,9 +334,12 @@ int _print_job_reason(job_info_t * job, int width, bool right, char* suffix)
 	if (job == NULL)        /* Print the Header instead */
 		_print_str("REASON", width, right, true);
 	else {
-		char id[FORMAT_STRING_SIZE];
-		snprintf(id, FORMAT_STRING_SIZE, "%s", 
-			job_reason_string(job->state_reason));
+		char id[FORMAT_STRING_SIZE], *reason;
+		if (job->state_desc)
+			reason = job->state_desc;
+		else
+			reason = job_reason_string(job->state_reason);
+		snprintf(id, FORMAT_STRING_SIZE, "%s", reason);
 		_print_str(id, width, right, true);
 	}
 	if (suffix)
@@ -347,20 +351,9 @@ int _print_job_name(job_info_t * job, int width, bool right, char* suffix)
 {
 	if (job == NULL)	/* Print the Header instead */
 		_print_str("NAME", width, right, true);
-	else {
-		char *temp = NULL, *jname = NULL;
-		if (job->name) {
-			/* first set the jname to the job_ptr->name */
-			jname = xstrdup(job->name);
-			/* then grep for " since that is the delimiter
-			 * for the wckey and set to NULL */
-			if((temp = strchr(jname, '\"')))
-				temp[0] = '\0';
-		}
+	else 
+		_print_str(job->name, width, right, true);
 		
-		_print_str(jname, width, right, true);
-		xfree(jname);
-	}
 	if (suffix)
 		printf("%s", suffix);
 	return SLURM_SUCCESS;
@@ -370,16 +363,9 @@ int _print_job_wckey(job_info_t * job, int width, bool right, char* suffix)
 {
 	if (job == NULL)	/* Print the Header instead */
 		_print_str("WCKEY", width, right, true);
-	else {
-		char *temp = NULL;
-		/* grep for " since that is the delimiter for
-		   the wckey */
-		temp = strchr(job->name, '\"');
-		if(temp) 
-			temp++;
-				
-		_print_str(temp, width, right, true);
-	}
+	else				
+		_print_str(job->wckey, width, right, true);
+	
 	if (suffix)
 		printf("%s", suffix);
 	return SLURM_SUCCESS;
@@ -602,9 +588,12 @@ int _print_job_reason_list(job_info_t * job, int width, bool right,
 	} else if ((job->job_state == JOB_PENDING)
 	||         (job->job_state == JOB_TIMEOUT)
 	||         (job->job_state == JOB_FAILED)) {
-		char id[FORMAT_STRING_SIZE];
-		snprintf(id, FORMAT_STRING_SIZE, "(%s)", 
-			job_reason_string(job->state_reason));
+		char id[FORMAT_STRING_SIZE], *reason;
+		if (job->state_desc)
+			reason = job->state_desc;
+		else
+			reason = job_reason_string(job->state_reason);
+		snprintf(id, FORMAT_STRING_SIZE, "(%s)", reason);
 		_print_str(id, width, right, true);
 	} else {
 #ifdef HAVE_BG
@@ -1081,6 +1070,18 @@ int _print_job_select_jobinfo(job_info_t * job, int width, bool right_justify,
 	return SLURM_SUCCESS;
 }
 
+int _print_job_reservation(job_info_t * job, int width, bool right_justify,
+			char* suffix)
+{
+	if (job == NULL)	 /* Print the Header instead */
+		_print_str("RESERVATION", width, right_justify, true);
+	else
+		_print_str(job->resv_name, width, right_justify, true);
+	if (suffix)
+		printf("%s", suffix);
+	return SLURM_SUCCESS;
+}
+
 /*****************************************************************************
  * Job Step Print Functions
  *****************************************************************************/
diff --git a/src/squeue/print.h b/src/squeue/print.h
index d183b0085..932648872 100644
--- a/src/squeue/print.h
+++ b/src/squeue/print.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Joey Ekstrom <ekstrom1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -169,6 +170,8 @@ int job_format_add_function(List list, int width, bool right_justify,
 	job_format_add_function(list,wid,right,suffix,_print_job_select_jobinfo)
 #define job_format_add_comment(list,wid,right,suffix) \
 	job_format_add_function(list,wid,right,suffix,_print_job_comment)
+#define job_format_add_reservation(list,wid,right,suffix) \
+	job_format_add_function(list,wid,right,suffix,_print_job_reservation)
 
 /*****************************************************************************
  * Job Line Print Functions
@@ -263,6 +266,8 @@ int _print_job_select_jobinfo(job_info_t * job, int width, bool right_justify,
 			char* suffix);
 int _print_job_comment(job_info_t * job, int width, bool right_justify,
 			char* suffix);
+int _print_job_reservation(job_info_t * job, int width, bool right_justify,
+			char* suffix);
 
 /*****************************************************************************
  * Step Print Format Functions
diff --git a/src/squeue/sort.c b/src/squeue/sort.c
index cc52e0b3b..1deeb837b 100644
--- a/src/squeue/sort.c
+++ b/src/squeue/sort.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -75,6 +76,7 @@ static int _sort_job_by_partition(void *void1, void *void2);
 static int _sort_job_by_priority(void *void1, void *void2);
 static int _sort_job_by_user_id(void *void1, void *void2);
 static int _sort_job_by_user_name(void *void1, void *void2);
+static int _sort_job_by_reservation(void *void1, void *void2);
 
 static int _sort_step_by_id(void *void1, void *void2);
 static int _sort_step_by_node_list(void *void1, void *void2);
@@ -157,6 +159,8 @@ void sort_job_list(List job_list)
 			list_sort(job_list, _sort_job_by_user_name);
 		else if (params.sort[i] == 'U')
 			list_sort(job_list, _sort_job_by_user_id);
+		else if (params.sort[i] == 'v')
+			list_sort(job_list, _sort_job_by_reservation);
 		else if (params.sort[i] == 'X')
 			list_sort(job_list, _sort_job_by_num_sockets);
 		else if (params.sort[i] == 'Y')
@@ -627,6 +631,24 @@ static int _sort_job_by_user_name(void *void1, void *void2)
 	return diff;
 }
 
+static int _sort_job_by_reservation(void *void1, void *void2)
+{
+	int diff;
+	job_info_t *job1 = (job_info_t *) void1;
+	job_info_t *job2 = (job_info_t *) void2;
+	char *val1 = "", *val2 = "";
+
+	if (job1->resv_name)
+		val1 = job1->resv_name;
+	if (job2->resv_name)
+		val2 = job2->resv_name;
+	diff = strcmp(val1, val2);
+
+	if (reverse_order)
+		diff = -diff;
+	return diff;
+}
+
 /*****************************************************************************
  * Local Step Sort Functions
  *****************************************************************************/
diff --git a/src/squeue/squeue.c b/src/squeue/squeue.c
index 5bedfbaaa..9937c2d7e 100644
--- a/src/squeue/squeue.c
+++ b/src/squeue/squeue.c
@@ -6,10 +6,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Joey Ekstrom <ekstrom1@llnl.gov>, 
  *             Morris Jette <jette1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -210,7 +211,9 @@ _print_job_steps( void )
 		show_flags |= SHOW_ALL;
 
 	if (old_step_ptr) {
-		error_code = slurm_get_job_steps (old_step_ptr->last_update, 
+		/* Use a last_update time of 0 so that we can get an updated
+		 * run_time for jobs rather than just its start_time */
+		error_code = slurm_get_job_steps ((time_t) 0, 
 				0, 0, &new_step_ptr, show_flags);
 		if (error_code ==  SLURM_SUCCESS)
 			slurm_free_job_step_info_response_msg( old_step_ptr );
@@ -220,7 +223,7 @@ _print_job_steps( void )
 		}
 	}
 	else
-		error_code = slurm_get_job_steps ((time_t) NULL, 0, 0, 
+		error_code = slurm_get_job_steps ((time_t) 0, 0, 0, 
 				&new_step_ptr, show_flags);
 	if (error_code) {
 		slurm_perror ("slurm_get_job_steps error");
diff --git a/src/squeue/squeue.h b/src/squeue/squeue.h
index b3aef322f..a4c9bb285 100644
--- a/src/squeue/squeue.h
+++ b/src/squeue/squeue.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Joey Ekstrom <ekstrom1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/sreport/Makefile.am b/src/sreport/Makefile.am
index fd6611ed7..e0bf3acf3 100644
--- a/src/sreport/Makefile.am
+++ b/src/sreport/Makefile.am
@@ -13,6 +13,7 @@ sreport_SOURCES =	\
 	assoc_reports.c assoc_reports.h	\
 	job_reports.c job_reports.h	\
 	user_reports.c user_reports.h	\
+	resv_reports.c resv_reports.h	\
 	common.c
 
 sreport_LDADD =  \
diff --git a/src/sreport/Makefile.in b/src/sreport/Makefile.in
index c5cf69888..daef919e3 100644
--- a/src/sreport/Makefile.in
+++ b/src/sreport/Makefile.in
@@ -44,14 +44,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -73,7 +77,7 @@ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
 am_sreport_OBJECTS = sreport.$(OBJEXT) cluster_reports.$(OBJEXT) \
 	assoc_reports.$(OBJEXT) job_reports.$(OBJEXT) \
-	user_reports.$(OBJEXT) common.$(OBJEXT)
+	user_reports.$(OBJEXT) resv_reports.$(OBJEXT) common.$(OBJEXT)
 sreport_OBJECTS = $(am_sreport_OBJECTS)
 am__DEPENDENCIES_1 =
 sreport_DEPENDENCIES = $(top_builddir)/src/api/libslurm.o \
@@ -108,6 +112,10 @@ 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@
@@ -276,6 +284,7 @@ sreport_SOURCES = \
 	assoc_reports.c assoc_reports.h	\
 	job_reports.c job_reports.h	\
 	user_reports.c user_reports.h	\
+	resv_reports.c resv_reports.h	\
 	common.c
 
 sreport_LDADD = \
@@ -358,6 +367,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cluster_reports.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job_reports.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resv_reports.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sreport.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/user_reports.Po@am__quote@
 
diff --git a/src/sreport/assoc_reports.c b/src/sreport/assoc_reports.c
index 40d718f1a..5cfa93f00 100644
--- a/src/sreport/assoc_reports.c
+++ b/src/sreport/assoc_reports.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/sreport/assoc_reports.h b/src/sreport/assoc_reports.h
index 702d96e9e..7ba023cd5 100644
--- a/src/sreport/assoc_reports.h
+++ b/src/sreport/assoc_reports.h
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/sreport/cluster_reports.c b/src/sreport/cluster_reports.c
index 54e9c0672..c38cabab4 100644
--- a/src/sreport/cluster_reports.c
+++ b/src/sreport/cluster_reports.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -46,6 +47,7 @@ enum {
 	PRINT_CLUSTER_ACPU,
 	PRINT_CLUSTER_DCPU,
 	PRINT_CLUSTER_ICPU,
+	PRINT_CLUSTER_PDCPU,
 	PRINT_CLUSTER_OCPU,
 	PRINT_CLUSTER_RCPU,
 	PRINT_CLUSTER_TOTAL,
@@ -390,7 +392,7 @@ static int _setup_print_fields_list(List format_list)
 			field->type = PRINT_CLUSTER_ACCT;
 			field->name = xstrdup("Account");
 			if(tree_display)
-				field->len = 20;
+				field->len = -20;
 			else
 				field->len = 15;
 			field->print_routine = print_fields_str;
@@ -411,7 +413,7 @@ static int _setup_print_fields_list(List format_list)
 			field->name = xstrdup("Cluster");
 			field->len = 9;
 			field->print_routine = print_fields_str;
-		} else if(!strncasecmp("cpu_count", object, 
+		} else if(!strncasecmp("cpucount", object, 
 				       MAX(command_len, 2))) {
 			field->type = PRINT_CLUSTER_CPUS;
 			field->name = xstrdup("CPU count");
@@ -453,7 +455,18 @@ static int _setup_print_fields_list(List format_list)
 			else
 				field->len = 9;
 			field->print_routine = sreport_print_time;
-		} else if(!strncasecmp("Proper", object, MAX(command_len, 1))) {
+		} else if(!strncasecmp("PlannedDown", object,
+				       MAX(command_len, 2))) {
+			field->type = PRINT_CLUSTER_PDCPU;
+			field->name = xstrdup("PLND Down");
+			if(time_format == SREPORT_TIME_SECS_PER
+			   || time_format == SREPORT_TIME_MINS_PER
+			   || time_format == SREPORT_TIME_HOURS_PER)
+				field->len = 18;
+			else
+				field->len = 10;
+			field->print_routine = sreport_print_time;
+		} else if(!strncasecmp("Proper", object, MAX(command_len, 2))) {
 			field->type = PRINT_CLUSTER_USER_PROPER;
 			field->name = xstrdup("Proper Name");
 			field->len = 15;
@@ -505,7 +518,7 @@ static int _setup_print_fields_list(List format_list)
 			continue;
 		}
 
-		if(newlen > 0) 
+		if(newlen) 
 			field->len = newlen;
 		
 		list_append(print_fields_list, field);		
@@ -550,7 +563,8 @@ static List _get_cluster_list(int argc, char *argv[], uint32_t *total_time,
 		       "----------------------------------------\n");
 		printf("%s %s - %s (%d*cpus secs)\n", 
 		       report_name, start_char, end_char, 
-		       (cluster_cond->usage_end - cluster_cond->usage_start));
+		       (int)(cluster_cond->usage_end
+			     - cluster_cond->usage_start));
 		switch(time_format) {
 		case SREPORT_TIME_PERCENT:
 			printf("Time reported in %s\n", time_format_string);
@@ -596,14 +610,15 @@ extern int cluster_account_by_user(int argc, char *argv[])
 
 	print_fields_list = list_create(destroy_print_field);
 
-	bzero(&cluster_cond, sizeof(acct_cluster_cond_t));
+	memset(&cluster_cond, 0, sizeof(acct_cluster_cond_t));
 
 	assoc_cond->with_sub_accts = 1;
 
 	_set_assoc_cond(&i, argc, argv, assoc_cond, format_list);
 
 	if(!list_count(format_list)) 
-		slurm_addto_char_list(format_list, "Cluster,Ac,L,P,Used");
+		slurm_addto_char_list(format_list, 
+				      "Cluster,Ac,Login,Proper,Used");
 
 	_setup_print_fields_list(format_list);
 	list_destroy(format_list);
@@ -723,7 +738,7 @@ extern int cluster_account_by_user(int argc, char *argv[])
 		       "----------------------------------------\n");
 		printf("Cluster/Account/User Utilization %s - %s (%d secs)\n", 
 		       start_char, end_char, 
-		       (assoc_cond->usage_end - assoc_cond->usage_start));
+		       (int)(assoc_cond->usage_end - assoc_cond->usage_start));
 		
 		switch(time_format) {
 		case SREPORT_TIME_PERCENT:
@@ -782,7 +797,6 @@ extern int cluster_account_by_user(int argc, char *argv[])
 						print_acct = get_tree_acct_name(
 							local_acct,
 							parent_acct,
-							sreport_cluster->name,
 							tree_list);
 						xfree(local_acct);
 					} else {
@@ -900,12 +914,13 @@ extern int cluster_user_by_account(int argc, char *argv[])
 
 	print_fields_list = list_create(destroy_print_field);
 
-	bzero(&cluster_cond, sizeof(acct_cluster_cond_t));
+	memset(&cluster_cond, 0, sizeof(acct_cluster_cond_t));
 
 	_set_assoc_cond(&i, argc, argv, assoc_cond, format_list);
 
 	if(!list_count(format_list)) 
-		slurm_addto_char_list(format_list, "Cluster,L,P,Ac,Used");
+		slurm_addto_char_list(format_list,
+				      "Cluster,Login,Proper,Ac,Used");
 
 	_setup_print_fields_list(format_list);
 	list_destroy(format_list);
@@ -1047,7 +1062,7 @@ extern int cluster_user_by_account(int argc, char *argv[])
 		       "----------------------------------------\n");
 		printf("Cluster/User/Account Utilization %s - %s (%d secs)\n", 
 		       start_char, end_char, 
-		       (assoc_cond->usage_end - assoc_cond->usage_start));
+		       (int)(assoc_cond->usage_end - assoc_cond->usage_start));
 		
 		switch(time_format) {
 		case SREPORT_TIME_PERCENT:
@@ -1186,12 +1201,13 @@ extern int cluster_user_by_wckey(int argc, char *argv[])
 
 	print_fields_list = list_create(destroy_print_field);
 
-	bzero(&cluster_cond, sizeof(acct_cluster_cond_t));
+	memset(&cluster_cond, 0, sizeof(acct_cluster_cond_t));
 
 	_set_wckey_cond(&i, argc, argv, wckey_cond, format_list);
 
 	if(!list_count(format_list)) 
-		slurm_addto_char_list(format_list, "Cluster,L,P,WCkey,Used");
+		slurm_addto_char_list(format_list, 
+				      "Cluster,Login,Proper,WCkey,Used");
 
 	_setup_print_fields_list(format_list);
 	list_destroy(format_list);
@@ -1315,7 +1331,7 @@ extern int cluster_user_by_wckey(int argc, char *argv[])
 		       "----------------------------------------\n");
 		printf("Cluster/User/WCKey Utilization %s - %s (%d secs)\n", 
 		       start_char, end_char, 
-		       (wckey_cond->usage_end - wckey_cond->usage_start));
+		       (int)(wckey_cond->usage_end - wckey_cond->usage_start));
 		
 		switch(time_format) {
 		case SREPORT_TIME_PERCENT:
@@ -1455,7 +1471,7 @@ extern int cluster_utilization(int argc, char *argv[])
 		goto end_it;
 
 	if(!list_count(format_list)) 
-		slurm_addto_char_list(format_list, "Cl,al,d,i,res,rep");
+		slurm_addto_char_list(format_list, "Cl,al,d,planned,i,res,rep");
 
 	_setup_print_fields_list(format_list);
 	list_destroy(format_list);
@@ -1484,6 +1500,7 @@ extern int cluster_utilization(int argc, char *argv[])
 		while((accting = list_next(itr3))) {
 			total_acct.alloc_secs += accting->alloc_secs;
 			total_acct.down_secs += accting->down_secs;
+			total_acct.pdown_secs += accting->pdown_secs;
 			total_acct.idle_secs += accting->idle_secs;
 			total_acct.resv_secs += accting->resv_secs;
 			total_acct.over_secs += accting->over_secs;
@@ -1496,7 +1513,8 @@ extern int cluster_utilization(int argc, char *argv[])
 		local_total_time =
 			(uint64_t)total_time * (uint64_t)total_acct.cpu_count;
 		total_reported = total_acct.alloc_secs + total_acct.down_secs 
-			+ total_acct.idle_secs + total_acct.resv_secs;
+			+ total_acct.pdown_secs + total_acct.idle_secs
+			+ total_acct.resv_secs;
 
 		while((field = list_next(itr2))) {
 			switch(field->type) {
@@ -1547,6 +1565,13 @@ extern int cluster_utilization(int argc, char *argv[])
 						     (curr_inx == 
 						      field_count));
 				break;
+			case PRINT_CLUSTER_PDCPU:
+					field->print_routine(field,
+						     total_acct.pdown_secs,
+						     total_reported,
+						     (curr_inx == 
+						      field_count));
+				break;
 			case PRINT_CLUSTER_TOTAL:
 				field->print_routine(field,
 						     total_reported,
@@ -1605,7 +1630,6 @@ extern int cluster_wckey_by_user(int argc, char *argv[])
 	sreport_cluster_rec_t *sreport_cluster = NULL;
 	print_field_t *field = NULL;
 	int field_count = 0;
-	char *print_acct = NULL;
 
 	print_fields_list = list_create(destroy_print_field);
 
@@ -1614,7 +1638,8 @@ extern int cluster_wckey_by_user(int argc, char *argv[])
 	_set_wckey_cond(&i, argc, argv, wckey_cond, format_list);
 
 	if(!list_count(format_list)) 
-		slurm_addto_char_list(format_list, "Cluster,WCKey,L,P,Used");
+		slurm_addto_char_list(format_list, 
+				      "Cluster,WCKey,Login,Proper,Used");
 
 	_setup_print_fields_list(format_list);
 	list_destroy(format_list);
@@ -1748,7 +1773,7 @@ extern int cluster_wckey_by_user(int argc, char *argv[])
 		       "----------------------------------------\n");
 		printf("Cluster/WCKey/User Utilization %s - %s (%d secs)\n", 
 		       start_char, end_char, 
-		       (wckey_cond->usage_end - wckey_cond->usage_start));
+		       (int)(wckey_cond->usage_end - wckey_cond->usage_start));
 		
 		switch(time_format) {
 		case SREPORT_TIME_PERCENT:
@@ -1788,35 +1813,9 @@ extern int cluster_wckey_by_user(int argc, char *argv[])
 				struct passwd *pwd = NULL;
 				switch(field->type) {
 				case PRINT_CLUSTER_WCKEY:
-					if(tree_display) {
-						char *local_acct = NULL;
-						char *parent_acct = NULL;
-						if(sreport_assoc->user) {
-							local_acct =
-								xstrdup_printf(
-									"|%s", 
-									sreport_assoc->acct);
-							parent_acct =
-								sreport_assoc->acct;
-						} else {
-							local_acct = xstrdup(
-								sreport_assoc->acct);
-							parent_acct = sreport_assoc->
-								parent_acct;
-						}
-						print_acct = get_tree_acct_name(
-							local_acct,
-							parent_acct,
-							sreport_cluster->name,
-							tree_list);
-						xfree(local_acct);
-					} else {
-						print_acct =
-							sreport_assoc->acct;
-					}
 					field->print_routine(
 						field, 
-						print_acct,
+						sreport_assoc->acct,
 						(curr_inx == field_count));
 					
 					break;
diff --git a/src/sreport/cluster_reports.h b/src/sreport/cluster_reports.h
index 868cfe5f9..2efbffe99 100644
--- a/src/sreport/cluster_reports.h
+++ b/src/sreport/cluster_reports.h
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/sreport/common.c b/src/sreport/common.c
index 4a3c691e4..faaf4c423 100644
--- a/src/sreport/common.c
+++ b/src/sreport/common.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -42,6 +43,8 @@
 extern void sreport_print_time(print_field_t *field,
 			       uint64_t value, uint64_t total_time, int last)
 {
+	int abs_len = abs(field->len);
+
 	if(!total_time) 
 		total_time = 1;
 
@@ -54,7 +57,7 @@ extern void sreport_print_time(print_field_t *field,
 		else if(print_fields_parsable_print)
 			printf("|");	
 		else				
-			printf("%-*s ", field->len, " ");
+			printf("%-*s ", abs_len, " ");
 	} else {
 		char *output = NULL;
 		double percent = (double)value;
@@ -109,8 +112,11 @@ extern void sreport_print_time(print_field_t *field,
 			printf("%s", output);
 		else if(print_fields_parsable_print)
 			printf("%s|", output);	
+		else if(field->len == abs_len)
+			printf("%*.*s ", abs_len, abs_len, output);
 		else
-			printf("%*.*s ", field->len, field->len, output);
+			printf("%-*.*s ", abs_len, abs_len, output);
+
 		xfree(output);
 	}
 }
@@ -433,6 +439,45 @@ extern int sort_assoc_dec(sreport_assoc_rec_t *assoc_a,
 	return 0;
 }
 
+/* 
+ * Comparator used for sorting resvs largest cpu to smallest cpu
+ * 
+ * returns: 1: resv_a > resv_b   0: resv_a == resv_b   -1: resv_a < resv_b
+ * 
+ */
+extern int sort_reservations_dec(acct_reservation_rec_t *resv_a, 
+				 acct_reservation_rec_t *resv_b)
+{
+	int diff = 0;
+
+	if(!resv_a->cluster || !resv_b->cluster)
+		return 0;
+
+	diff = strcmp(resv_a->cluster, resv_b->cluster);
+
+	if (diff > 0)
+		return 1;
+	else if (diff < 0)
+		return -1;
+
+	if(!resv_a->name || !resv_b->name)
+		return 0;
+
+	diff = strcmp(resv_a->name, resv_b->name);
+
+	if (diff > 0)
+		return 1;
+	else if (diff < 0)
+		return -1;
+	
+	if(resv_a->time_start < resv_b->time_start)
+		return 1;
+	else if(resv_a->time_start > resv_b->time_start)
+		return -1;
+
+	return 0;
+}
+
 extern int get_uint(char *in_value, uint32_t *out_value, char *type)
 {
 	char *ptr = NULL, *meat = NULL;
diff --git a/src/sreport/job_reports.c b/src/sreport/job_reports.c
index 0a2aac6e7..94a059dfa 100644
--- a/src/sreport/job_reports.c
+++ b/src/sreport/job_reports.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -376,6 +377,17 @@ static int _set_cond(int *start, int argc, char *argv[],
 				start_char = end_char + 1;
 			}
 			
+			set = 1;
+		} else if(!strncasecmp (argv[i], "Nodes", 
+					 MAX(command_len, 1))) {
+			if(job_cond->used_nodes) {
+				error("You already specified nodes '%s' "
+				      " combine your request into 1 nodes=.",
+				      job_cond->used_nodes);
+				exit_code = 1;
+				break;
+			}
+			job_cond->used_nodes = xstrdup(argv[i]+end);
 			set = 1;
 		} else if (!strncasecmp (argv[i], "Partitions",
 					 MAX(command_len, 2))) {
@@ -517,7 +529,7 @@ static int _setup_print_fields_list(List format_list)
 			continue;
 		}
 
-		if(newlen > 0) 
+		if(newlen) 
 			field->len = newlen;
 		
 		list_append(print_fields_list, field);		
@@ -571,7 +583,7 @@ static int _setup_grouping_print_fields_list(List grouping_list)
 		last_object = object;
 		if((tmp_char = strstr(object, "\%"))) {
 			int newlen = atoi(tmp_char+1);
-			if(newlen > 0) 
+			if(newlen) 
 				field->len = newlen;
 		}
 		list_append(grouping_print_fields_list, field);		
@@ -584,7 +596,7 @@ static int _setup_grouping_print_fields_list(List grouping_list)
 			field->type = PRINT_JOB_COUNT;
 		else
 			field->type = PRINT_JOB_SIZE;
-		field->name = xstrdup_printf("> %u cpus", last_size);
+		field->name = xstrdup_printf(">= %u cpus", last_size);
 		if(time_format == SREPORT_TIME_SECS_PER
 		   || time_format == SREPORT_TIME_MINS_PER
 		   || time_format == SREPORT_TIME_HOURS_PER)
@@ -597,7 +609,7 @@ static int _setup_grouping_print_fields_list(List grouping_list)
 			field->print_routine = sreport_print_time;
 		if((tmp_char = strstr(last_object, "\%"))) {
 			int newlen = atoi(tmp_char+1);
-			if(newlen > 0) 
+			if(newlen) 
 				field->len = newlen;
 		}
 		list_append(grouping_print_fields_list, field);		
@@ -688,7 +700,7 @@ extern int job_sizes_grouped_by_top_acct(int argc, char *argv[])
 		       "----------------------------------------\n");
 		printf("Job Sizes %s - %s (%d secs)\n", 
 		       start_char, end_char, 
-		       (job_cond->usage_end - job_cond->usage_start));
+		       (int)(job_cond->usage_end - job_cond->usage_start));
 		if(print_job_count)
 			printf("Units are in number of jobs ran\n");
 		else
@@ -1083,7 +1095,7 @@ extern int job_sizes_grouped_by_wckey(int argc, char *argv[])
 		       "----------------------------------------\n");
 		printf("Job Sizes by Wckey %s - %s (%d secs)\n", 
 		       start_char, end_char, 
-		       (job_cond->usage_end - job_cond->usage_start));
+		       (int)(job_cond->usage_end - job_cond->usage_start));
 		if(print_job_count)
 			printf("Units are in number of jobs ran\n");
 		else
diff --git a/src/sreport/job_reports.h b/src/sreport/job_reports.h
index 81bd19235..249e9cd00 100644
--- a/src/sreport/job_reports.h
+++ b/src/sreport/job_reports.h
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/sreport/resv_reports.c b/src/sreport/resv_reports.c
new file mode 100644
index 000000000..338bed0b5
--- /dev/null
+++ b/src/sreport/resv_reports.c
@@ -0,0 +1,562 @@
+/*****************************************************************************\
+ *  resv_reports.c - functions for generating reservation reports
+ *                       from accounting infrastructure.
+ *****************************************************************************
+ *
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include "cluster_reports.h"
+
+enum {
+	PRINT_RESV_NAME,
+	PRINT_RESV_CLUSTER,
+	PRINT_RESV_CPUS,
+	PRINT_RESV_ACPU,
+	PRINT_RESV_DCPU,
+	PRINT_RESV_ICPU,
+	PRINT_RESV_NODES,
+	PRINT_RESV_ASSOCS,
+	PRINT_RESV_START,
+	PRINT_RESV_END,
+	PRINT_RESV_FLAGS,
+	PRINT_RESV_TIME,
+	PRINT_RESV_CPUTIME,
+};
+
+typedef enum {
+	GROUP_BY_ACCOUNT,
+	GROUP_BY_ACCOUNT_JOB_SIZE,
+	GROUP_BY_ACCOUNT_JOB_SIZE_DURATION,
+	GROUP_BY_USER,
+	GROUP_BY_USER_JOB_SIZE,
+	GROUP_BY_USER_JOB_SIZE_DURATION,
+	GROUP_BY_NONE
+} report_grouping_t;
+
+static List print_fields_list = NULL; /* types are of print_field_t */
+
+static int _set_resv_cond(int *start, int argc, char *argv[],
+			  acct_reservation_cond_t *resv_cond,
+			  List format_list)
+{
+	int i;
+	int set = 0;
+	int end = 0;
+	int local_cluster_flag = all_clusters_flag;
+	time_t start_time, end_time;
+	int command_len = 0;
+	int option = 0;
+
+	if(!resv_cond) {
+		error("We need an acct_reservation_cond to call this");
+		return SLURM_ERROR;
+	}
+
+	resv_cond->with_usage = 1;
+
+	if(!resv_cond->cluster_list)
+		resv_cond->cluster_list = list_create(slurm_destroy_char);
+	for (i=(*start); i<argc; i++) {
+		end = parse_option_end(argv[i]);
+		if(!end)
+			command_len=strlen(argv[i]);
+		else {
+			command_len=end-1;
+			if(argv[i][end] == '=') {
+				option = (int)argv[i][end-1];
+				end++;
+			}
+		}
+
+		if(!end && !strncasecmp(argv[i], "all_clusters",
+					       MAX(command_len, 1))) {
+			local_cluster_flag = 1;
+		} else if(!end
+			  || !strncasecmp (argv[i], "Names", 
+					 MAX(command_len, 1))) {
+			if(!resv_cond->name_list)
+				resv_cond->name_list = 
+					list_create(slurm_destroy_char);
+			slurm_addto_char_list(resv_cond->name_list, 
+					      argv[i]+end);
+			set = 1;
+		} else if (!strncasecmp (argv[i], "Clusters",
+					 MAX(command_len, 1))) {
+			slurm_addto_char_list(resv_cond->cluster_list,
+					      argv[i]+end);
+			set = 1;
+		} else if (!strncasecmp (argv[i], "End", MAX(command_len, 1))) {
+			resv_cond->time_end = parse_time(argv[i]+end, 1);
+			set = 1;
+		} else if (!strncasecmp (argv[i], "Flags",
+					 MAX(command_len, 2))) {
+			/* FIX ME: make flags work here */
+			//resv_cond->flags = parse_resv_flags(argv[i]+end);
+			set = 1;
+		} else if (!strncasecmp (argv[i], "Format", 
+					 MAX(command_len, 2))) {
+			if(format_list)
+				slurm_addto_char_list(format_list,
+						      argv[i]+end);
+		} else if (!strncasecmp (argv[i], "Ids", 
+					 MAX(command_len, 1))) {
+			if(!resv_cond->id_list)
+				resv_cond->id_list = 
+					list_create(slurm_destroy_char);
+			slurm_addto_char_list(resv_cond->id_list, argv[i]+end);
+			set = 1;
+		} else if(!strncasecmp (argv[i], "Nodes", 
+					 MAX(command_len, 1))) {
+			if(resv_cond->nodes) {
+				error("You already specified nodes '%s' "
+				      " combine your request into 1 nodes=.",
+				      resv_cond->nodes);
+				exit_code = 1;
+				break;
+			}
+			resv_cond->nodes = xstrdup(argv[i]+end);
+			set = 1;
+		} else if (!strncasecmp (argv[i], "Start",
+					 MAX(command_len, 1))) {
+			resv_cond->time_start = parse_time(argv[i]+end, 1);
+			set = 1;
+		} else {
+			exit_code=1;
+			fprintf(stderr," Unknown condition: %s\n"
+			       "Use keyword set to modify value\n", argv[i]);
+		}
+	}
+	(*start) = i;
+
+	if(!local_cluster_flag && !list_count(resv_cond->cluster_list)) {
+		char *temp = slurm_get_cluster_name();
+		if(temp)
+			list_append(resv_cond->cluster_list, temp);
+	}
+
+	/* This needs to be done on some systems to make sure
+	   cluster_cond isn't messed.  This has happened on some 64
+	   bit machines and this is here to be on the safe side.
+	*/
+	start_time = resv_cond->time_start;
+	end_time = resv_cond->time_end;
+	set_start_end_time(&start_time, &end_time);
+	resv_cond->time_start = start_time;
+	resv_cond->time_end = end_time;
+
+	return set;
+}
+
+static int _setup_print_fields_list(List format_list)
+{
+	ListIterator itr = NULL;
+	print_field_t *field = NULL;
+	char *object = NULL;
+
+	if(!format_list || !list_count(format_list)) {
+		exit_code=1;
+			fprintf(stderr, " we need a format list "
+				"to set up the print.\n");
+		return SLURM_ERROR;
+	}
+
+	if(!print_fields_list)
+		print_fields_list = list_create(destroy_print_field);
+
+	itr = list_iterator_create(format_list);
+	while((object = list_next(itr))) {
+		char *tmp_char = NULL;
+		int command_len = 0;
+		int newlen = 0;
+		
+		if((tmp_char = strstr(object, "\%"))) {
+			newlen = atoi(tmp_char+1);
+			tmp_char[0] = '\0';
+		} 
+
+		command_len = strlen(object);
+
+		field = xmalloc(sizeof(print_field_t));
+		if(!strncasecmp("allocated", object, 
+				MAX(command_len, 2))) {
+			field->type = PRINT_RESV_ACPU;
+			field->name = xstrdup("Allocated");
+			if(time_format == SREPORT_TIME_SECS_PER
+			   || time_format == SREPORT_TIME_MINS_PER
+			   || time_format == SREPORT_TIME_HOURS_PER)
+				field->len = 20;
+			else
+				field->len = 9;
+			field->print_routine = sreport_print_time;
+		} else if(!strncasecmp("Associations",
+				       object, MAX(command_len, 2))) {
+			field->type = PRINT_RESV_ASSOCS;
+			field->name = xstrdup("Associations");
+			field->len = 15;
+			field->print_routine = print_fields_str;
+		} else if(!strncasecmp("Cluster", object, 
+				       MAX(command_len, 2))) {
+			field->type = PRINT_RESV_CLUSTER;
+			field->name = xstrdup("Cluster");
+			field->len = 9;
+			field->print_routine = print_fields_str;
+		} else if(!strncasecmp("cpucount", object, 
+				       MAX(command_len, 2))) {
+			field->type = PRINT_RESV_CPUS;
+			field->name = xstrdup("CPU count");
+			field->len = 9;
+			field->print_routine = print_fields_uint;
+		} else if(!strncasecmp("down", object, MAX(command_len, 1))) {
+			field->type = PRINT_RESV_DCPU;
+			field->name = xstrdup("Down");
+			if(time_format == SREPORT_TIME_SECS_PER
+			   || time_format == SREPORT_TIME_MINS_PER
+			   || time_format == SREPORT_TIME_HOURS_PER)
+				field->len = 20;
+			else
+				field->len = 9;
+			field->print_routine = sreport_print_time;
+		} else if(!strncasecmp("idle", object, MAX(command_len, 1))) {
+			field->type = PRINT_RESV_ICPU;
+			field->name = xstrdup("Idle");
+			if(time_format == SREPORT_TIME_SECS_PER
+			   || time_format == SREPORT_TIME_MINS_PER
+			   || time_format == SREPORT_TIME_HOURS_PER)
+				field->len = 20;
+			else
+				field->len = 9;
+			field->print_routine = sreport_print_time;
+		} else if(!strncasecmp("Nodes", object, MAX(command_len, 2))) {
+			field->type = PRINT_RESV_NODES;
+			field->name = xstrdup("Nodes");
+			field->len = 15;
+			field->print_routine = print_fields_str;
+		} else if(!strncasecmp("Name", object, 
+				       MAX(command_len, 2))) {
+			field->type = PRINT_RESV_NAME;
+			field->name = xstrdup("Name");
+			field->len = 9;
+			field->print_routine = print_fields_str;
+		} else if(!strncasecmp("Start", object, 
+				       MAX(command_len, 2))) {
+			field->type = PRINT_RESV_START;
+			field->name = xstrdup("Start");
+			field->len = 19;
+			field->print_routine = print_fields_date;
+		} else if(!strncasecmp("End", object, 
+				       MAX(command_len, 2))) {
+			field->type = PRINT_RESV_END;
+			field->name = xstrdup("End");
+			field->len = 19;
+			field->print_routine = print_fields_date;
+		} else if(!strncasecmp("TotalTime", object, 
+				       MAX(command_len, 2))) {
+			field->type = PRINT_RESV_TIME;
+			field->name = xstrdup("TotalTime");
+			field->len = 9;
+			field->print_routine = print_fields_time_from_secs;
+		} else if(!strncasecmp("CPUTime", object, 
+				       MAX(command_len, 2))) {
+			field->type = PRINT_RESV_CPUTIME;
+			field->name = xstrdup("CPUTime");
+			field->len = 9;
+			field->print_routine = print_fields_time_from_secs;
+		} else {
+			exit_code=1;
+			fprintf(stderr, " Unknown field '%s'\n", object);
+			xfree(field);
+			continue;
+		}
+
+		if(newlen) 
+			field->len = newlen;
+		
+		list_append(print_fields_list, field);		
+	}
+	list_iterator_destroy(itr);
+
+	return SLURM_SUCCESS;
+}
+
+static List _get_resv_list(int argc, char *argv[],
+			   char *report_name, List format_list)
+{
+	acct_reservation_cond_t *resv_cond =
+		xmalloc(sizeof(acct_reservation_cond_t));
+	int i=0;
+	List resv_list = NULL;
+
+	resv_cond->with_usage = 1;
+
+	_set_resv_cond(&i, argc, argv, resv_cond, format_list);
+	
+	resv_list = acct_storage_g_get_reservations(db_conn, my_uid,
+						    resv_cond);
+	if(!resv_list) {
+		exit_code=1;
+		fprintf(stderr, " Problem with resv query.\n");
+		return NULL;
+	}
+
+	if(print_fields_have_header) {
+		char start_char[20];
+		char end_char[20];
+		time_t my_start = resv_cond->time_start;
+		time_t my_end = resv_cond->time_end-1;
+
+		slurm_make_time_str(&my_start, 
+				    start_char, sizeof(start_char));
+		slurm_make_time_str(&my_end,
+				    end_char, sizeof(end_char));
+		printf("----------------------------------------"
+		       "----------------------------------------\n");
+		printf("%s %s - %s\n", 
+		       report_name, start_char, end_char);
+		switch(time_format) {
+		case SREPORT_TIME_PERCENT:
+			printf("Time reported in %s\n", time_format_string);
+			break; 
+		default:
+			printf("Time reported in CPU %s\n", time_format_string);
+			break;
+		}
+		printf("----------------------------------------"
+		       "----------------------------------------\n");
+	}
+
+	destroy_acct_reservation_cond(resv_cond);
+	
+	return resv_list;
+}
+
+extern int resv_utilization(int argc, char *argv[])
+{
+	int rc = SLURM_SUCCESS;
+	ListIterator itr = NULL;
+	ListIterator tot_itr = NULL;
+	ListIterator itr2 = NULL;
+	acct_reservation_rec_t *resv = NULL;
+	acct_reservation_rec_t *tot_resv = NULL;
+
+	print_field_t *field = NULL;
+	int32_t total_time = 0;
+
+	List resv_list = NULL; 
+	List tot_resv_list = NULL; 
+
+	List format_list = list_create(slurm_destroy_char);
+	int field_count = 0;
+
+	print_fields_list = list_create(destroy_print_field);
+
+
+	if(!(resv_list = _get_resv_list(argc, argv,
+					"Reservation Utilization",
+					format_list))) 
+		goto end_it;
+
+	if(!list_count(format_list)) 
+		slurm_addto_char_list(format_list,
+				      "Cl,name,start,end,al,i");
+
+	_setup_print_fields_list(format_list);
+	list_destroy(format_list);
+
+	/* we will just use the pointers returned from the
+	   get_resv_list here, so don't remove them 
+	*/
+	tot_resv_list = list_create(NULL);
+
+	itr = list_iterator_create(resv_list);
+	tot_itr = list_iterator_create(tot_resv_list);
+	itr2 = list_iterator_create(print_fields_list);
+
+	print_fields_header(print_fields_list);
+
+	field_count = list_count(print_fields_list);
+
+	/* compress all the reservations into a single reservation.
+	   Since reservations can have multiple entries like if the
+	   node count changes or something after the reservation
+	   starts.  Here we colapse them into 1 record.
+	*/
+	while((resv = list_next(itr))) {
+		while((tot_resv = list_next(tot_itr))) {
+			if(tot_resv->id == resv->id) {
+				/* get an average of cpus if the
+				   reservation changes we will just
+				   get an average.
+				*/
+				tot_resv->cpus += resv->cpus;
+				tot_resv->cpus /= 2;
+				tot_resv->alloc_secs += resv->alloc_secs;
+				tot_resv->down_secs += resv->down_secs;
+				if(resv->time_start < tot_resv->time_start)
+					tot_resv->time_start = resv->time_start;
+				if(resv->time_end > tot_resv->time_end)
+					tot_resv->time_end = resv->time_end;
+				break;
+			}
+		}
+		if(!tot_resv) 
+			list_append(tot_resv_list, resv);
+		
+		list_iterator_reset(tot_itr);
+	}
+	
+	list_sort(tot_resv_list, (ListCmpF)sort_reservations_dec);
+	list_iterator_reset(tot_itr);
+	while((tot_resv = list_next(tot_itr))) {
+		uint64_t idle_secs = 0, total_reported = 0;
+		int curr_inx = 1;
+	
+		total_time = tot_resv->time_end - tot_resv->time_start;
+		if(total_time <= 0)
+			continue;
+		total_reported = (uint64_t)(total_time * tot_resv->cpus);
+
+		idle_secs = total_reported
+			- tot_resv->alloc_secs - tot_resv->down_secs;
+
+		while((field = list_next(itr2))) {
+			switch(field->type) {
+			case PRINT_RESV_NAME:
+				field->print_routine(field,
+						     tot_resv->name,
+						     (curr_inx == 
+						      field_count));
+				break;
+			case PRINT_RESV_CLUSTER:
+				field->print_routine(field,
+						     tot_resv->cluster,
+						     (curr_inx == 
+						      field_count));
+				break;
+			case PRINT_RESV_CPUS:
+				field->print_routine(field,
+						     tot_resv->cpus,
+						     (curr_inx == 
+						      field_count));
+				break;
+			case PRINT_RESV_ACPU:
+				field->print_routine(field,
+						     tot_resv->alloc_secs,
+						     total_reported,
+						     (curr_inx == 
+						      field_count));
+				break;
+			case PRINT_RESV_DCPU:
+				field->print_routine(field,
+						     tot_resv->down_secs,
+						     total_reported,
+						     (curr_inx == 
+						      field_count));
+				break;
+			case PRINT_RESV_ICPU:
+				field->print_routine(field,
+						     idle_secs,
+						     total_reported,
+						     (curr_inx == 
+						      field_count));
+				break;
+			case PRINT_RESV_NODES:
+				field->print_routine(field,
+						     tot_resv->nodes,
+						     (curr_inx == 
+						      field_count));
+				break;
+			case PRINT_RESV_ASSOCS:
+				field->print_routine(field,
+						     tot_resv->assocs,
+						     (curr_inx == 
+						      field_count));
+				break;
+			case PRINT_RESV_START:
+				field->print_routine(field,
+						     tot_resv->time_start,
+						     (curr_inx == 
+						      field_count));
+				break;
+			case PRINT_RESV_END:
+				field->print_routine(field,
+						     tot_resv->time_end,
+						     (curr_inx == 
+						      field_count));
+				break;
+			case PRINT_RESV_TIME:
+				field->print_routine(field,
+						     total_time,
+						     (curr_inx == 
+						      field_count));
+				break;
+			case PRINT_RESV_CPUTIME:
+				field->print_routine(field,
+						     total_reported,
+						     (curr_inx == 
+						      field_count));
+				break;
+			default:
+				field->print_routine(
+					field, NULL,
+					(curr_inx == field_count));
+				break;
+			}
+			curr_inx++;
+		}
+		list_iterator_reset(itr2);
+		printf("\n");
+	}
+
+	list_iterator_destroy(tot_itr);
+	list_iterator_destroy(itr2);
+	list_iterator_destroy(itr);
+
+end_it:
+	if(resv_list) {
+		list_destroy(resv_list);
+		resv_list = NULL;
+	}
+	if(tot_resv_list) {
+		list_destroy(tot_resv_list);
+		tot_resv_list = NULL;
+	}
+	if(print_fields_list) {
+		list_destroy(print_fields_list);
+		print_fields_list = NULL;
+	}
+
+	return rc;
+}
diff --git a/src/sreport/resv_reports.h b/src/sreport/resv_reports.h
new file mode 100644
index 000000000..50d674a47
--- /dev/null
+++ b/src/sreport/resv_reports.h
@@ -0,0 +1,52 @@
+/*****************************************************************************\
+ *  resv_reports.h - functions for generating reservation reports
+ *                       from accounting infrastructure.
+ *****************************************************************************
+ *
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef __SREPORT_RESV_REPORTS_H
+#define __SREPORT_RESV_REPORTS_H
+
+#include "sreport.h"
+
+//extern int cluster_account_by_user(int argc, char *argv[]);
+//extern int cluster_user_by_account(int argc, char *argv[]);
+//extern int cluster_user_by_wckey(int argc, char *argv[]);
+extern int resv_utilization(int argc, char *argv[]);
+//extern int cluster_wckey_by_user(int argc, char *argv[]);
+
+#endif
diff --git a/src/sreport/sreport.c b/src/sreport/sreport.c
index 858be26d4..f04d6025a 100644
--- a/src/sreport/sreport.c
+++ b/src/sreport/sreport.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -40,6 +41,7 @@
 #include "src/sreport/assoc_reports.h"
 #include "src/sreport/cluster_reports.h"
 #include "src/sreport/job_reports.h"
+#include "src/sreport/resv_reports.h"
 #include "src/sreport/user_reports.h"
 #include "src/common/xsignal.h"
 
@@ -60,6 +62,7 @@ sreport_sort_t sort_flag = SREPORT_SORT_TIME;
 
 static void	_job_rep (int argc, char *argv[]);
 static void	_user_rep (int argc, char *argv[]);
+static void	_resv_rep (int argc, char *argv[]);
 static void	_cluster_rep (int argc, char *argv[]);
 static void	_assoc_rep (int argc, char *argv[]);
 static int	_get_command (int *argc, char *argv[]);
@@ -81,11 +84,11 @@ main (int argc, char *argv[])
 		{"all_clusters", 0, 0, 'a'},
 		{"help",     0, 0, 'h'},
 		{"immediate",0, 0, 'i'},
-		{"no_header", 0, 0, 'n'},
+		{"noheader", 0, 0, 'n'},
 		{"parsable", 0, 0, 'p'},
-		{"parsable2", 0, 0, 'P'},
+		{"parsable2",0, 0, 'P'},
 		{"quiet",    0, 0, 'q'},
-		{"sort",    0, 0, 's'},
+		{"sort",     0, 0, 's'},
 		{"usage",    0, 0, 'h'},
 		{"verbose",  0, 0, 'v'},
 		{"version",  0, 0, 'V'},
@@ -249,7 +252,7 @@ static void _job_rep (int argc, char *argv[])
 }
 
 /* 
- * _user_rep - Reports having to do with jobs 
+ * _user_rep - Reports having to do with users 
  * IN argc - count of arguments
  * IN argv - list of arguments
  */
@@ -272,7 +275,30 @@ static void _user_rep (int argc, char *argv[])
 }
 
 /* 
- * _cluster_rep - Reports having to do with jobs 
+ * _resv_rep - Reports having to do with reservations 
+ * IN argc - count of arguments
+ * IN argv - list of arguments
+ */
+static void _resv_rep (int argc, char *argv[]) 
+{
+	int error_code = SLURM_SUCCESS;
+
+	if (strncasecmp (argv[0], "Utilization", 1) == 0) {
+		error_code = resv_utilization((argc - 1), &argv[1]);
+	} else {
+		exit_code = 1;
+		fprintf(stderr, "Not valid report %s\n", argv[0]);
+		fprintf(stderr, "Valid reservation reports are, ");
+		fprintf(stderr, "\"Utilization\"\n");
+	}	
+	
+	if (error_code) {
+		exit_code = 1;
+	}
+}
+
+/* 
+ * _cluster_rep - Reports having to do with clusters 
  * IN argc - count of arguments
  * IN argv - list of arguments
  */
@@ -484,6 +510,18 @@ _process_command (int argc, char *argv[])
 				 argv[0]);
 		}
 		exit_flag = 1;
+	} else if ((strncasecmp (argv[0], "reservation",
+				 MAX(command_len, 2)) == 0)
+		   || (strncasecmp (argv[0], "resv",
+				    MAX(command_len, 2)) == 0)) {
+		if (argc < 2) {
+			exit_code = 1;
+			if (quiet_flag != 1)
+				fprintf(stderr, 
+				        "too few arguments for keyword:%s\n", 
+				        argv[0]);
+		} else 
+			_resv_rep((argc - 1), &argv[1]);
 	} else if (strncasecmp (argv[0], "sort", MAX(command_len, 1)) == 0) {
 		if (argc < 2) {
 			exit_code = 1;
@@ -590,7 +628,7 @@ sreport [<OPTION>] [<COMMAND>]                                             \n\
     Valid <OPTION> values are:                                             \n\
      -a or --all_clusters: Use all clusters instead of current             \n\
      -h or --help: equivalent to \"help\" command                          \n\
-     -n or --no_header: equivalent to \"no_header\" command                \n\
+     -n or --noheader: equivalent to \"noheader\" command                \n\
      -p or --parsable: output will be '|' delimited with a '|' at the end  \n\
      -P or --parsable2: output will be '|' delimited without a '|' at the end\n\
      -q or --quiet: equivalent to \"quiet\" command                        \n\
@@ -623,6 +661,8 @@ sreport [<OPTION>] [<COMMAND>]                                             \n\
      cluster - AccountUtilizationByUser, UserUtilizationByAccount,         \n\
                UserUtilizationByWckey, Utilization, WCKeyUtilizationByUser \n\
      job     - SizesByAccount, SizesByWckey                                \n\
+     reservation                                                           \n\
+             - Utilization                                                 \n\
      user    - TopUsage                                                    \n\
                                                                            \n\
   <OPTIONS> are different for each report type.                            \n\
@@ -674,6 +714,8 @@ sreport [<OPTION>] [<COMMAND>]                                             \n\
                                    1-49, 50-99, 100-149, > 150).           \n\
              - Jobs=<OPT>       - List of jobs/steps to include in report. \n\
                                   Default is all.                          \n\
+             - Nodes=<OPT>      - Only show jobs that ran on these nodes.  \n\
+                                  Default is all.                          \n\
              - Partitions=<OPT> - List of partitions jobs ran on to include\n\
                                   in report.  Default is all.              \n\
              - PrintJobCount    - When used with the any Sizes report      \n\
@@ -687,6 +729,12 @@ sreport [<OPTION>] [<COMMAND>]                                             \n\
                                   you want only certain users specify them \n\
                                   them with the Users= option.             \n\
                                                                            \n\
+     reservation                                                           \n\
+             - Names=<OPT>      - List of reservations to use for the report\n\
+                                  Default is all.                          \n\
+             - Nodes=<OPT>      - Only show reservations that used these   \n\
+                                  nodes.  Default is all.                  \n\
+                                                                           \n\
      user    - Accounts=<OPT>   - List of accounts to use for the report   \n\
                                   Default is all.                          \n\
              - Group            - Group all accounts together for each user.\n\
@@ -697,7 +745,6 @@ sreport [<OPTION>] [<COMMAND>]                                             \n\
              - Users=<OPT>      - List of users jobs to include in report. \n\
                                   Default is all.                          \n\
                                                                            \n\
-                                                                           \n\
   Below are the format options for each report.                            \n\
                                                                            \n\
        Cluster                                                             \n\
@@ -709,22 +756,27 @@ sreport [<OPTION>] [<COMMAND>]                                             \n\
              - Cluster, CPUCount, Login, Proper, Used, Wckey               \n\
        - Utilization                                                       \n\
              - Allocated, Cluster, CPUCount, Down, Idle, Overcommited,     \n\
-               Reported, Reserved                                          \n\
+               PlannedDown, Reported, Reserved                             \n\
                                                                            \n\
        Job                                                                 \n\
        - Sizes                                                             \n\
              - Account, Cluster                                            \n\
                                                                            \n\
+       Reservation                                                         \n\
+       - Utilization                                                       \n\
+             - Allocated, Associations, Cluster, CPUCount, CPUTime,        \n\
+               End, Idle, Name, Nodes, Start, TotalTime                    \n\
+                                                                           \n\
        User                                                                \n\
        - TopUsage                                                          \n\
              - Account, Cluster, Login, Proper, Used                       \n\
                                                                            \n\
                                                                            \n\
-                                                                           \n\
   Note, valid start/end time formats are...                                \n\
        HH:MM[:SS] [AM|PM]                                                  \n\
        MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]                                \n\
        MM/DD[/YY]-HH:MM[:SS]                                               \n\
+       YYYY-MM-DD[THH[:MM[:SS]]]                                           \n\
                                                                            \n\
                                                                            \n\
   All commands and options are case-insensitive.                         \n\n");
diff --git a/src/sreport/sreport.h b/src/sreport/sreport.h
index a1f2dc617..656f10176 100644
--- a/src/sreport/sreport.h
+++ b/src/sreport/sreport.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -152,6 +153,8 @@ extern int sort_cluster_dec(sreport_cluster_rec_t *cluster_a,
 			    sreport_cluster_rec_t *cluster_b);
 extern int sort_assoc_dec(sreport_assoc_rec_t *assoc_a,
 			  sreport_assoc_rec_t *assoc_b);
+extern int sort_reservations_dec(acct_reservation_rec_t *resv_a, 
+				 acct_reservation_rec_t *resv_b);
 
 extern int get_uint(char *in_value, uint32_t *out_value, char *type);
 
diff --git a/src/sreport/user_reports.c b/src/sreport/user_reports.c
index 09537f117..27d8e77e7 100644
--- a/src/sreport/user_reports.c
+++ b/src/sreport/user_reports.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -225,7 +226,7 @@ static int _setup_print_fields_list(List format_list)
 			continue;
 		}
 
-		if(newlen > 0) 
+		if(newlen) 
 			field->len = newlen;
 		
 		list_append(print_fields_list, field);		
@@ -343,7 +344,7 @@ extern int user_top(int argc, char *argv[])
 		       "----------------------------------------\n");
 		printf("Top %u Users %s - %s (%d secs)\n", 
 		       top_limit, start_char, end_char, 
-		       (user_cond->assoc_cond->usage_end 
+		       (int)(user_cond->assoc_cond->usage_end 
 			- user_cond->assoc_cond->usage_start));
 		
 		switch(time_format) {
diff --git a/src/sreport/user_reports.h b/src/sreport/user_reports.h
index 534c4eca1..a4288780a 100644
--- a/src/sreport/user_reports.h
+++ b/src/sreport/user_reports.h
@@ -6,10 +6,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/srun/Makefile.am b/src/srun/Makefile.am
index f16818e2a..7a39a597d 100644
--- a/src/srun/Makefile.am
+++ b/src/srun/Makefile.am
@@ -3,7 +3,7 @@
 AUTOMAKE_OPTIONS = foreign
 CLEANFILES = core.*
 
-INCLUDES = -I$(top_srcdir) 
+INCLUDES = -I$(top_srcdir) $(BG_INCLUDES)
 
 bin_PROGRAMS = srun
 
@@ -21,6 +21,7 @@ srun_SOURCES = \
 	core-format.c \
 	core-format.h \
 	multi_prog.c multi_prog.h \
+	task_state.c task_state.h \
 	srun.wrapper.c
 
 convenience_libs = \
diff --git a/src/srun/Makefile.in b/src/srun/Makefile.in
index 7eda34bde..7bb62883c 100644
--- a/src/srun/Makefile.in
+++ b/src/srun/Makefile.in
@@ -44,14 +44,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -74,7 +78,7 @@ PROGRAMS = $(bin_PROGRAMS)
 am_srun_OBJECTS = srun.$(OBJEXT) opt.$(OBJEXT) srun_job.$(OBJEXT) \
 	srun_pty.$(OBJEXT) debugger.$(OBJEXT) fname.$(OBJEXT) \
 	allocate.$(OBJEXT) core-format.$(OBJEXT) multi_prog.$(OBJEXT) \
-	srun.wrapper.$(OBJEXT)
+	task_state.$(OBJEXT) srun.wrapper.$(OBJEXT)
 srun_OBJECTS = $(am_srun_OBJECTS)
 am__DEPENDENCIES_1 = $(top_builddir)/src/api/libslurm.o
 srun_DEPENDENCIES = $(am__DEPENDENCIES_1)
@@ -108,6 +112,10 @@ 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@
@@ -269,7 +277,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 CLEANFILES = core.*
-INCLUDES = -I$(top_srcdir) 
+INCLUDES = -I$(top_srcdir) $(BG_INCLUDES)
 srun_SOURCES = \
 	srun.c srun.h \
 	opt.c opt.h \
@@ -284,6 +292,7 @@ srun_SOURCES = \
 	core-format.c \
 	core-format.h \
 	multi_prog.c multi_prog.h \
+	task_state.c task_state.h \
 	srun.wrapper.c
 
 convenience_libs = \
@@ -374,6 +383,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srun.wrapper.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srun_job.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srun_pty.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task_state.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
diff --git a/src/srun/allocate.c b/src/srun/allocate.c
index 70bfc6d63..5a84a35b8 100644
--- a/src/srun/allocate.c
+++ b/src/srun/allocate.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
- * src/srun/allocate.c - srun functions for managing node allocations
- * $Id: allocate.c 15808 2008-12-02 23:38:47Z da $
+ *  src/srun/allocate.c - srun functions for managing node allocations
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -61,6 +62,19 @@
 #include "src/srun/opt.h"
 #include "src/srun/debugger.h"
 
+#ifdef HAVE_BG
+#include "src/api/job_info.h"
+#include "src/api/node_select_info.h"
+#include "src/common/node_select.h"
+#include "src/plugins/select/bluegene/plugin/bg_boot_time.h"
+#include "src/plugins/select/bluegene/wrap_rm_api.h"
+#endif
+
+#ifdef HAVE_CRAY_XT
+#include "src/common/node_select.h"
+#endif
+
+
 #define MAX_ALLOC_WAIT 60	/* seconds */
 #define MIN_ALLOC_WAIT  5	/* seconds */
 #define MAX_RETRIES    10
@@ -84,6 +98,18 @@ static void _exit_on_signal(int signo);
 static void _signal_while_allocating(int signo);
 static void  _intr_handler(int signo);
 
+#ifdef HAVE_BG
+#define POLL_SLEEP 3			/* retry interval in seconds  */
+static int _wait_bluegene_block_ready(
+			resource_allocation_response_msg_t *alloc);
+static int _blocks_dealloc();
+#endif
+
+#ifdef HAVE_CRAY_XT
+static int  _claim_reservation(resource_allocation_response_msg_t *alloc);
+#endif
+
+
 static sig_atomic_t destroy_job = 0;
 
 static void _set_pending_job_id(uint32_t job_id)
@@ -165,6 +191,13 @@ static bool _retry()
 		else
 			return false;
 		sleep (++retries);
+	} else if (errno == EINTR) {
+		/* srun may be interrupted by the BLCR checkpoint signal */
+		/*
+		 * XXX: this will cause the old job cancelled and a new job allocated
+		 */
+		debug("Syscall interrupted while allocating resources, retrying.");
+		return true;
 	} else {
 		error("Unable to allocate resources: %m");
 		return false;
@@ -182,6 +215,120 @@ _intr_handler(int signo)
 	destroy_job = 1;
 }
 
+#ifdef HAVE_BG
+/* returns 1 if job and nodes are ready for job to begin, 0 otherwise */
+static int _wait_bluegene_block_ready(resource_allocation_response_msg_t *alloc)
+{
+	int is_ready = 0, i, rc;
+	char *block_id = NULL;
+	int cur_delay = 0;
+	int max_delay = BG_FREE_PREVIOUS_BLOCK + BG_MIN_BLOCK_BOOT +
+		(BG_INCR_BLOCK_BOOT * alloc->node_cnt);
+
+	pending_job_id = alloc->job_id;
+	select_g_get_jobinfo(alloc->select_jobinfo, SELECT_DATA_BLOCK_ID,
+			     &block_id);
+
+	for (i=0; (cur_delay < max_delay); i++) {
+		if(i == 1)
+			debug("Waiting for block %s to become ready for job",
+			     block_id);
+		if (i) {
+			sleep(POLL_SLEEP);
+			rc = _blocks_dealloc();
+			if ((rc == 0) || (rc == -1)) 
+				cur_delay += POLL_SLEEP;
+			debug2("still waiting");
+		}
+
+		rc = slurm_job_node_ready(alloc->job_id);
+
+		if (rc == READY_JOB_FATAL)
+			break;				/* fatal error */
+		if (rc == READY_JOB_ERROR)		/* error */
+			continue;			/* retry */
+		if ((rc & READY_JOB_STATE) == 0)	/* job killed */
+			break;
+		if (rc & READY_NODE_STATE) {		/* job and node ready */
+			is_ready = 1;
+			break;
+		}
+	}
+	if (is_ready)
+     		debug("Block %s is ready for job", block_id);
+	else if(!destroy_job)
+		error("Block %s still not ready", block_id);
+	else /* this should never happen, but if destroy_job
+		send back not ready */
+		is_ready = 0;
+
+	xfree(block_id);
+	pending_job_id = 0;
+
+	return is_ready;
+}
+
+/*
+ * Test if any BG blocks are in deallocating state since they are
+ * probably related to this job we will want to sleep longer
+ * RET	1:  deallocate in progress
+ *	0:  no deallocate in progress
+ *     -1: error occurred
+ */
+static int _blocks_dealloc()
+{
+	static node_select_info_msg_t *bg_info_ptr = NULL, *new_bg_ptr = NULL;
+	int rc = 0, error_code = 0, i;
+	
+	if (bg_info_ptr) {
+		error_code = slurm_load_node_select(bg_info_ptr->last_update, 
+						   &new_bg_ptr);
+		if (error_code == SLURM_SUCCESS)
+			select_g_free_node_info(&bg_info_ptr);
+		else if (slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) {
+			error_code = SLURM_SUCCESS;
+			new_bg_ptr = bg_info_ptr;
+		}
+	} else {
+		error_code = slurm_load_node_select((time_t) NULL, &new_bg_ptr);
+	}
+
+	if (error_code) {
+		error("slurm_load_partitions: %s\n",
+		      slurm_strerror(slurm_get_errno()));
+		return -1;
+	}
+	for (i=0; i<new_bg_ptr->record_count; i++) {
+		if(new_bg_ptr->bg_info_array[i].state 
+		   == RM_PARTITION_DEALLOCATING) {
+			rc = 1;
+			break;
+		}
+	}
+	bg_info_ptr = new_bg_ptr;
+	return rc;
+}
+#endif	/* HAVE_BG */
+
+#ifdef HAVE_CRAY_XT
+/* returns 1 if job and nodes are ready for job to begin, 0 otherwise */
+static int _claim_reservation(resource_allocation_response_msg_t *alloc)
+{
+	int rc = 0;
+	char *resv_id = NULL;
+
+	select_g_get_jobinfo(alloc->select_jobinfo, SELECT_DATA_RESV_ID,
+			     &resv_id);
+	if (resv_id == NULL)
+		return rc;
+	if (basil_resv_conf(resv_id, alloc->job_id) == SLURM_SUCCESS)
+		rc = 1;
+	xfree(resv_id);
+	return rc;
+}
+#endif
+
+
 int
 allocate_test(void)
 {
@@ -242,6 +389,30 @@ allocate_nodes(void)
 		}
 	}
 	
+	if(resp && !destroy_job) {
+		/*
+		 * Allocation granted!
+		 */
+#ifdef HAVE_BG
+		if (!_wait_bluegene_block_ready(resp)) {
+			if(!destroy_job)
+				error("Something is wrong with the "
+				      "boot of the block.");
+			goto relinquish;
+		}
+#endif
+#ifdef HAVE_CRAY_XT
+		if (!_claim_reservation(resp)) {
+			if(!destroy_job)
+				error("Something is wrong with the ALPS "
+				      "resource reservation.");
+			goto relinquish;
+		}
+#endif
+	} else if (destroy_job) {
+		goto relinquish;
+	}
+
 	xsignal(SIGHUP, _exit_on_signal);
 	xsignal(SIGINT, ignore_signal);
 	xsignal(SIGQUIT, ignore_signal);
@@ -253,6 +424,14 @@ allocate_nodes(void)
 	job_desc_msg_destroy(j);
 
 	return resp;
+
+relinquish:
+
+	slurm_free_resource_allocation_response_msg(resp);
+	if(!destroy_job)
+		slurm_complete_job(resp->job_id, 1);
+	exit(1);
+	return NULL;
 }
 
 void
@@ -287,7 +466,7 @@ existing_allocation(void)
                 else
                         error ("Unable to confirm allocation for job %u: %m",
                               old_job_id);
-                info ("Check SLURM_JOBID environment variable "
+                info ("Check SLURM_JOB_ID environment variable "
                       "for expired or invalid job.");
                 exit(1);
         }
@@ -307,7 +486,6 @@ slurmctld_msg_init(void)
 		return slurmctld_fd;
 
 	slurmctld_fd = -1;
-	slurmctld_comm_addr.hostname = NULL;
 	slurmctld_comm_addr.port = 0;
 
 	if ((slurmctld_fd = slurm_init_msg_engine_port(0)) < 0)
@@ -318,11 +496,8 @@ slurmctld_msg_init(void)
 	/* hostname is not set,  so slurm_get_addr fails
 	   slurm_get_addr(&slurm_address, &port, hostname, sizeof(hostname)); */
 	port = ntohs(slurm_address.sin_port);
-	slurmctld_comm_addr.hostname = xstrdup(opt.ctrl_comm_ifhn);
 	slurmctld_comm_addr.port     = port;
-	debug2("slurmctld messages to host=%s,port=%u", 
-	       slurmctld_comm_addr.hostname, 
-	       slurmctld_comm_addr.port);
+	debug2("srun PMI messages to port=%u", slurmctld_comm_addr.port);
 
 	return slurmctld_fd;
 }
@@ -347,9 +522,8 @@ job_desc_msg_create_from_opts ()
 		j->name   = xstrdup(opt.job_name);
 	else
 		j->name   = xstrdup(opt.cmd_name);
-
-	if (opt.wckey) 
-		xstrfmtcat(j->name, "\"%s", opt.wckey);
+	j->reservation    = xstrdup(opt.reservation);
+	j->wckey          = xstrdup(opt.wckey);
 	
 	j->req_nodes      = xstrdup(opt.nodelist);
 	
@@ -387,9 +561,19 @@ job_desc_msg_create_from_opts ()
 	j->dependency     = opt.dependency;
 	if (opt.nice)
 		j->nice   = NICE_OFFSET + opt.nice;
-	j->task_dist      = opt.distribution;
+
+	if (opt.cpu_bind)
+		j->cpu_bind       = opt.cpu_bind;
+	if (opt.cpu_bind_type)
+		j->cpu_bind_type  = opt.cpu_bind_type;
+	if (opt.mem_bind)
+		j->mem_bind       = opt.mem_bind;
+	if (opt.mem_bind_type)
+		j->mem_bind_type  = opt.mem_bind_type;
 	if (opt.plane_size != NO_VAL)
 		j->plane_size     = opt.plane_size;
+	j->task_dist      = opt.distribution;
+
 	j->group_id       = opt.gid;
 	j->mail_type      = opt.mail_type;
 
@@ -500,8 +684,8 @@ job_desc_msg_destroy(job_desc_msg_t *j)
 	}
 }
 
-int
-create_job_step(srun_job_t *job)
+extern int
+create_job_step(srun_job_t *job, bool use_all_cpus)
 {
 	int i, rc;
 	SigFunc *oquitf = NULL, *ointf = NULL, *otermf = NULL;
@@ -518,16 +702,23 @@ create_job_step(srun_job_t *job)
 	if (!opt.nprocs_set && (opt.ntasks_per_node != NO_VAL))
 		job->ntasks = opt.nprocs = job->nhosts * opt.ntasks_per_node;
 	job->ctx_params.task_count = opt.nprocs;
-	
-	job->ctx_params.cpu_count = opt.overcommit ? job->ctx_params.node_count
-		: (opt.nprocs*opt.cpus_per_task);
+
+	if (use_all_cpus)
+		job->ctx_params.cpu_count = job->cpu_count;
+	else if (opt.overcommit)
+		job->ctx_params.cpu_count = job->ctx_params.node_count;
+	else
+		job->ctx_params.cpu_count = opt.nprocs*opt.cpus_per_task;
 	
 	job->ctx_params.relative = (uint16_t)opt.relative;
 	job->ctx_params.ckpt_interval = (uint16_t)opt.ckpt_interval;
-	job->ctx_params.ckpt_path = opt.ckpt_path;
+	job->ctx_params.ckpt_dir = opt.ckpt_dir;
 	job->ctx_params.exclusive = (uint16_t)opt.exclusive;
 	job->ctx_params.immediate = (uint16_t)opt.immediate;
 	job->ctx_params.verbose_level = (uint16_t)_verbose;
+	if (opt.resv_port_cnt != NO_VAL)
+		job->ctx_params.resv_port_cnt = (uint16_t) opt.resv_port_cnt;
+
 	switch (opt.distribution) {
 	case SLURM_DIST_BLOCK:
 	case SLURM_DIST_ARBITRARY:
@@ -546,6 +737,7 @@ create_job_step(srun_job_t *job)
 		job->ctx_params.task_dist = (job->ctx_params.task_count <= 
 			job->ctx_params.node_count) 
 			? SLURM_DIST_CYCLIC : SLURM_DIST_BLOCK;
+		opt.distribution = job->ctx_params.task_dist;
 		break;
 
 	}
@@ -583,19 +775,22 @@ create_job_step(srun_job_t *job)
 		rc = slurm_get_errno();
 
 		if (opt.immediate ||
-		    ((rc != ESLURM_NODES_BUSY) && (rc != ESLURM_DISABLED))) {
+		    ((rc != ESLURM_NODES_BUSY) && (rc != ESLURM_PORTS_BUSY) &&
+		     (rc != ESLURM_PROLOG_RUNNING) && 
+		     (rc != ESLURM_DISABLED))) {
 			error ("Unable to create job step: %m");
 			return -1;
 		}
 		
 		if (i == 0) {
-			info("Job step creation temporarily disabled, retrying");
+			info("Job step creation temporarily disabled, "
+			     "retrying");
 			ointf  = xsignal(SIGINT,  _intr_handler);
 			otermf  = xsignal(SIGTERM, _intr_handler);
 			oquitf  = xsignal(SIGQUIT, _intr_handler);
 		} else
 			verbose("Job step creation still disabled, retrying");
-		sleep(MIN((i*10), 60));
+		sleep(MIN((i*10+1), 60));
 	}
 	if (i > 0) {
 		xsignal(SIGINT,  ointf);
@@ -609,7 +804,7 @@ create_job_step(srun_job_t *job)
 
 	slurm_step_ctx_get(job->step_ctx, SLURM_STEP_CTX_STEPID, &job->stepid);
 	/*  Number of hosts in job may not have been initialized yet if 
-	 *    --jobid was used or only SLURM_JOBID was set in user env.
+	 *    --jobid was used or only SLURM_JOB_ID was set in user env.
 	 *    Reset the value here just in case.
 	 */
 	slurm_step_ctx_get(job->step_ctx, SLURM_STEP_CTX_NUM_HOSTS,
@@ -623,3 +818,4 @@ create_job_step(srun_job_t *job)
 	return 0;
 }
 
+
diff --git a/src/srun/allocate.h b/src/srun/allocate.h
index 85672c552..6b830e6e5 100644
--- a/src/srun/allocate.h
+++ b/src/srun/allocate.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/srun/allocate.h - node allocation functions for srun
- * $Id: allocate.h 14570 2008-07-18 22:06:26Z da $
+ * $Id: allocate.h 17313 2009-04-21 20:28:06Z lipari $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -44,7 +45,6 @@
 #include "src/srun/srun_job.h"
 
 typedef struct slurmctld_communication_addr {
-	char *hostname;
 	uint16_t port;
 } slurmctld_comm_addr_t;
 
@@ -89,28 +89,21 @@ job_desc_msg_t * job_desc_msg_create_from_opts ();
 void job_desc_msg_destroy (job_desc_msg_t *j);
 
 /*
- * Check for SLURM_JOBID environment variable, and if it is a valid
+ * Check for SLURM_JOB_ID environment variable, and if it is a valid
  * jobid, return a pseudo allocation response pointer.
  *
- * Returns NULL if SLURM_JOBID is not present or is invalid.
+ * Returns NULL if SLURM_JOB_ID is not present or is invalid.
  */
 resource_allocation_response_msg_t * existing_allocation(void);
 
-/*
- * Return the jobid number stored in SLURM_JOBID env var
- *
- * Returns 0 if SLURM_JOBID is not set in current environment, or
- * is invalid.
- */
-uint32_t jobid_from_env(void);
-
 /*
  * Create a job step given the job information stored in 'j'
  * After returning, 'j' is filled in with information for job step.
+ * IN use_all_cpus - true to use every CPU allocated to the job
  *
  * Returns -1 if job step creation failure, 0 otherwise
  */
-int create_job_step(srun_job_t *j);
+int create_job_step(srun_job_t *j, bool use_all_cpus);
 
 /* set the job for debugging purpose */
 void set_allocate_job(srun_job_t *job);
diff --git a/src/srun/core-format.c b/src/srun/core-format.c
index 1edf3fe6a..2677c903d 100644
--- a/src/srun/core-format.c
+++ b/src/srun/core-format.c
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/srun/core-format.c - Change corefile characteristics for job
- * $Id: core-format.c 13672 2008-03-19 23:10:58Z jette $
+ * $Id: core-format.c 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/srun/core-format.h b/src/srun/core-format.h
index 696e522f3..f4cf5c9fe 100644
--- a/src/srun/core-format.h
+++ b/src/srun/core-format.h
@@ -1,14 +1,15 @@
 /*****************************************************************************\
  * src/srun/core-format.h - Change corefile characteristics for job
- * $Id: core-format.h 13672 2008-03-19 23:10:58Z jette $
+ * $Id: core-format.h 16616 2009-02-20 17:00:27Z jette $
  *****************************************************************************
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/srun/debugger.c b/src/srun/debugger.c
index e27b37e3c..77adfd68e 100644
--- a/src/srun/debugger.c
+++ b/src/srun/debugger.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/srun/debugger.h b/src/srun/debugger.h
index 6c34800df..d401d6851 100644
--- a/src/srun/debugger.h
+++ b/src/srun/debugger.h
@@ -29,6 +29,11 @@
 #define VOLATILE
 #endif
 #endif
+
+#if HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
 #include "src/srun/srun_job.h"
 /*****************************************************************************
 *                                DEBUGGING SUPPORT                           *
@@ -42,11 +47,20 @@
  * DO NOT change the name of this structure or its fields. The debugger knows
  * them, and will be confused if you change them.
  */
+
+#ifdef HAVE_BG_FILES
+/* On bluegene systems the below structure is defined here.  So as to
+ * not confict with allocate.c including this file we will just use the
+ * definition there instead of defining it here. 
+ */
+# include "src/plugins/select/bluegene/wrap_rm_api.h"
+#else
 typedef struct {
   char * host_name;           /* Something we can pass to inet_addr */
   char * executable_name;     /* The name of the image */
   int    pid;		      /* The pid of the process */
 } MPIR_PROCDESC;
+#endif
 
 /* Array of procdescs for debugging purposes */
 extern MPIR_PROCDESC *MPIR_proctable;
diff --git a/src/srun/fname.c b/src/srun/fname.c
index 2b4093234..47e6ecc5a 100644
--- a/src/srun/fname.c
+++ b/src/srun/fname.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/srun/fname.h b/src/srun/fname.h
index ff5114553..574fb6852 100644
--- a/src/srun/fname.h
+++ b/src/srun/fname.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/srun/multi_prog.c b/src/srun/multi_prog.c
index 91d09ce0e..4c3e6fbca 100644
--- a/src/srun/multi_prog.c
+++ b/src/srun/multi_prog.c
@@ -11,10 +11,11 @@
  *  and
  *  Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/srun/multi_prog.h b/src/srun/multi_prog.h
index e32d98efb..1405a14da 100644
--- a/src/srun/multi_prog.h
+++ b/src/srun/multi_prog.h
@@ -7,10 +7,11 @@
  *  and
  *  Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/srun/opt.c b/src/srun/opt.c
index 9a0f04460..c7ae97a64 100644
--- a/src/srun/opt.c
+++ b/src/srun/opt.c
@@ -2,13 +2,14 @@
  *  opt.c - options processing for srun
  *****************************************************************************
  *  Copyright (C) 2002-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 Mark Grondona <grondona1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -61,7 +62,6 @@
 #include <stdio.h>
 #include <stdlib.h>		/* getenv     */
 #include <pwd.h>		/* getpwuid   */
-#include <ctype.h>		/* isdigit    */
 #include <sys/param.h>		/* MAXPATHLEN */
 #include <sys/stat.h>
 #include <unistd.h>
@@ -71,22 +71,24 @@
 
 #include "src/common/list.h"
 #include "src/common/log.h"
+#include "src/common/mpi.h"
+#include "src/common/optz.h"
 #include "src/common/parse_time.h"
+#include "src/common/plugstack.h"
 #include "src/common/proc_args.h"
 #include "src/common/slurm_protocol_api.h"
 #include "src/common/slurm_protocol_interface.h"
+#include "src/common/slurm_rlimits_info.h"
+#include "src/common/slurm_resource_info.h"
 #include "src/common/uid.h"
 #include "src/common/xmalloc.h"
 #include "src/common/xstring.h"
-#include "src/common/slurm_rlimits_info.h"
-#include "src/common/plugstack.h"
-#include "src/common/optz.h"
+
 #include "src/api/pmi_server.h"
 
 #include "src/srun/multi_prog.h"
 #include "src/srun/opt.h"
 #include "src/srun/debugger.h"
-#include "src/common/mpi.h"
 
 /* generic OPT_ definitions -- mainly for use with env vars  */
 #define OPT_NONE        0x00
@@ -97,6 +99,7 @@
 #define OPT_OVERCOMMIT  0x06
 #define OPT_CORE        0x07
 #define OPT_CONN_TYPE	0x08
+#define OPT_RESV_PORTS	0x09
 #define OPT_NO_ROTATE	0x0a
 #define OPT_GEOMETRY	0x0b
 #define OPT_MPI         0x0c
@@ -125,7 +128,8 @@
 #define LONG_OPT_UID         0x10a
 #define LONG_OPT_GID         0x10b
 #define LONG_OPT_MPI         0x10c
-#define LONG_OPT_CORE	     0x10e
+#define LONG_OPT_RESV_PORTS  0x10d
+#define LONG_OPT_CORE        0x10e
 #define LONG_OPT_DEBUG_TS    0x110
 #define LONG_OPT_CONNTYPE    0x111
 #define LONG_OPT_TEST_ONLY   0x113
@@ -142,7 +146,6 @@
 #define LONG_OPT_NICE        0x11e
 #define LONG_OPT_CPU_BIND    0x11f
 #define LONG_OPT_MEM_BIND    0x120
-#define LONG_OPT_CTRL_COMM_IFHN 0x121
 #define LONG_OPT_MULTI       0x122
 #define LONG_OPT_COMMENT     0x124
 #define LONG_OPT_SOCKETSPERNODE  0x130
@@ -164,10 +167,12 @@
 #define LONG_OPT_GET_USER_ENV    0x145
 #define LONG_OPT_PTY             0x146
 #define LONG_OPT_CHECKPOINT      0x147
-#define LONG_OPT_CHECKPOINT_PATH 0x148
+#define LONG_OPT_CHECKPOINT_DIR  0x148
 #define LONG_OPT_OPEN_MODE       0x149
 #define LONG_OPT_ACCTG_FREQ      0x14a
 #define LONG_OPT_WCKEY           0x14b
+#define LONG_OPT_RESERVATION     0x14c
+#define LONG_OPT_RESTART_DIR     0x14d
 
 /*---- global variables, defined in opt.h ----*/
 int _verbose;
@@ -203,13 +208,8 @@ static bool _opt_verify(void);
 static void _process_env_var(env_vars_t *e, const char *val);
 
 static bool  _under_parallel_debugger(void);
-
 static void  _usage(void);
 static bool  _valid_node_list(char **node_list_pptr);
-static int   _verify_cpu_bind(const char *arg, char **cpu_bind,
-			      cpu_bind_type_t *flags);
-static int   _verify_mem_bind(const char *arg, char **mem_bind,
-			      mem_bind_type_t *flags);
 
 /*---[ end forward declarations of static functions ]---------------------*/
 
@@ -271,273 +271,6 @@ static bool _valid_node_list(char **node_list_pptr)
 	return true;
 }
 
-/*
- * _isvalue
- * returns 1 is the argument appears to be a value, 0 otherwise
- */
-static int _isvalue(char *arg) {
-    	if (isdigit(*arg)) {	 /* decimal values and 0x... hex values */
-	    	return 1;
-	}
-
-	while (isxdigit(*arg)) { /* hex values not preceded by 0x */
-		arg++;
-	}
-	if (*arg == ',' || *arg == '\0') { /* end of field or string */
-	    	return 1;
-	}
-
-	return 0;	/* not a value */
-}
-
-/*
- * First clear all of the bits in "*data" which are set in "clear_mask".
- * Then set all of the bits in "*data" that are set in "set_mask".
- */
-static void clear_then_set(int *data, int clear_mask, int set_mask)
-{
-	*data &= ~clear_mask;
-	*data |= set_mask;
-}
-
-static void _print_cpu_bind_help()
-{
-	printf(
-"CPU bind options:\n"
-"    --cpu_bind=         Bind tasks to CPUs\n"
-"        q[uiet]         quietly bind before task runs (default)\n"
-"        v[erbose]       verbosely report binding before task runs\n"
-"        no[ne]          don't bind tasks to CPUs (default)\n"
-"        rank            bind by task rank\n"
-"        map_cpu:<list>  specify a CPU ID binding for each task\n"
-"                        where <list> is <cpuid1>,<cpuid2>,...<cpuidN>\n"
-"        mask_cpu:<list> specify a CPU ID binding mask for each task\n"
-"                        where <list> is <mask1>,<mask2>,...<maskN>\n"
-"        sockets         auto-generated masks bind to sockets\n"
-"        cores           auto-generated masks bind to cores\n"
-"        threads         auto-generated masks bind to threads\n"
-"        help            show this help message\n");
-}
-
-/*
- * verify cpu_bind arguments
- *
- * we support different launch policy names
- * we also allow a verbose setting to be specified
- *     --cpu_bind=threads
- *     --cpu_bind=cores
- *     --cpu_bind=sockets
- *     --cpu_bind=v
- *     --cpu_bind=rank,v
- *     --cpu_bind=rank
- *     --cpu_bind={MAP_CPU|MASK_CPU}:0,1,2,3,4
- *
- *
- * returns -1 on error, 0 otherwise
- */
-static int _verify_cpu_bind(const char *arg, char **cpu_bind, 
-			    cpu_bind_type_t *flags)
-{
-	char *buf, *p, *tok;
-	int bind_bits =
-		CPU_BIND_NONE|CPU_BIND_RANK|CPU_BIND_MAP|CPU_BIND_MASK;
-	int bind_to_bits =
-		CPU_BIND_TO_SOCKETS|CPU_BIND_TO_CORES|CPU_BIND_TO_THREADS;
-
-	if (arg == NULL) {
-	    	return 0;
-	}
-
-    	buf = xstrdup(arg);
-    	p = buf;
-	/* change all ',' delimiters not followed by a digit to ';'  */
-	/* simplifies parsing tokens while keeping map/mask together */
-	while (p[0] != '\0') {
-	    	if ((p[0] == ',') && (!_isvalue(&(p[1]))))
-			p[0] = ';';
-		p++;
-	}
-
-	p = buf;
-	while ((tok = strsep(&p, ";"))) {
-		if (strcasecmp(tok, "help") == 0) {
-			_print_cpu_bind_help();
-			return 1;
-		} else if ((strcasecmp(tok, "q") == 0) ||
-			   (strcasecmp(tok, "quiet") == 0)) {
-		        *flags &= ~CPU_BIND_VERBOSE;
-		} else if ((strcasecmp(tok, "v") == 0) ||
-			   (strcasecmp(tok, "verbose") == 0)) {
-		        *flags |= CPU_BIND_VERBOSE;
-		} else if ((strcasecmp(tok, "no") == 0) ||
-			   (strcasecmp(tok, "none") == 0)) {
-			clear_then_set((int *)flags, bind_bits, CPU_BIND_NONE);
-			xfree(*cpu_bind);
-		} else if (strcasecmp(tok, "rank") == 0) {
-			clear_then_set((int *)flags, bind_bits, CPU_BIND_RANK);
-			xfree(*cpu_bind);
-		} else if ((strncasecmp(tok, "map_cpu", 7) == 0) ||
-		           (strncasecmp(tok, "mapcpu", 6) == 0)) {
-			char *list;
-			list = strsep(&tok, ":=");
-			list = strsep(&tok, ":=");
-			clear_then_set((int *)flags, bind_bits, CPU_BIND_MAP);
-			xfree(*cpu_bind);
-			if (list && *list) {
-				*cpu_bind = xstrdup(list);
-			} else {
-				error("missing list for \"--cpu_bind=map_cpu:<list>\"");
-				xfree(buf);
-				return 1;
-			}
-		} else if ((strncasecmp(tok, "mask_cpu", 8) == 0) ||
-		           (strncasecmp(tok, "maskcpu", 7) == 0)) {
-			char *list;
-			list = strsep(&tok, ":=");
-			list = strsep(&tok, ":=");
-			clear_then_set((int *)flags, bind_bits, CPU_BIND_MASK);
-			xfree(*cpu_bind);
-			if (list && *list) {
-				*cpu_bind = xstrdup(list);
-			} else {
-				error("missing list for \"--cpu_bind=mask_cpu:<list>\"");
-				xfree(buf);
-				return 1;
-			}
-		} else if ((strcasecmp(tok, "socket") == 0) ||
-		           (strcasecmp(tok, "sockets") == 0)) {
-			clear_then_set((int *)flags, bind_to_bits,
-				       CPU_BIND_TO_SOCKETS);
-		} else if ((strcasecmp(tok, "core") == 0) ||
-		           (strcasecmp(tok, "cores") == 0)) {
-			clear_then_set((int *)flags, bind_to_bits,
-				       CPU_BIND_TO_CORES);
-		} else if ((strcasecmp(tok, "thread") == 0) ||
-		           (strcasecmp(tok, "threads") == 0)) {
-			clear_then_set((int *)flags, bind_to_bits,
-				       CPU_BIND_TO_THREADS);
-		} else {
-			error("unrecognized --cpu_bind argument \"%s\"", tok);
-			xfree(buf);
-			return 1;
-		}
-	}
-
-	xfree(buf);
-	return 0;
-}
-
-static void _print_mem_bind_help()
-{
-			printf(
-"Memory bind options:\n"
-"    --mem_bind=         Bind memory to locality domains (ldom)\n"
-"        q[uiet]         quietly bind before task runs (default)\n"
-"        v[erbose]       verbosely report binding before task runs\n"
-"        no[ne]          don't bind tasks to memory (default)\n"
-"        rank            bind by task rank\n"
-"        local           bind to memory local to processor\n"
-"        map_mem:<list>  specify a memory binding for each task\n"
-"                        where <list> is <cpuid1>,<cpuid2>,...<cpuidN>\n"
-"        mask_mem:<list> specify a memory binding mask for each tasks\n"
-"                        where <list> is <mask1>,<mask2>,...<maskN>\n"
-"        help            show this help message\n");
-}
-
-/*
- * verify mem_bind arguments
- *
- * we support different memory binding names
- * we also allow a verbose setting to be specified
- *     --mem_bind=v
- *     --mem_bind=rank,v
- *     --mem_bind=rank
- *     --mem_bind={MAP_MEM|MASK_MEM}:0,1,2,3,4
- *
- * returns -1 on error, 0 otherwise
- */
-static int _verify_mem_bind(const char *arg, char **mem_bind, 
-			    mem_bind_type_t *flags)
-{
-	char *buf, *p, *tok;
-	int bind_bits = MEM_BIND_NONE|MEM_BIND_RANK|MEM_BIND_LOCAL|
-		MEM_BIND_MAP|MEM_BIND_MASK;
-
-	if (arg == NULL) {
-	    	return 0;
-	}
-
-    	buf = xstrdup(arg);
-    	p = buf;
-	/* change all ',' delimiters not followed by a digit to ';'  */
-	/* simplifies parsing tokens while keeping map/mask together */
-	while (p[0] != '\0') {
-	    	if ((p[0] == ',') && (!_isvalue(&(p[1]))))
-			p[0] = ';';
-		p++;
-	}
-
-	p = buf;
-	while ((tok = strsep(&p, ";"))) {
-		if (strcasecmp(tok, "help") == 0) {
-			_print_mem_bind_help();
-			return 1;
-			
-		} else if ((strcasecmp(tok, "q") == 0) ||
-			   (strcasecmp(tok, "quiet") == 0)) {
-		        *flags &= ~MEM_BIND_VERBOSE;
-		} else if ((strcasecmp(tok, "v") == 0) ||
-			   (strcasecmp(tok, "verbose") == 0)) {
-		        *flags |= MEM_BIND_VERBOSE;
-		} else if ((strcasecmp(tok, "no") == 0) ||
-			   (strcasecmp(tok, "none") == 0)) {
-			clear_then_set((int *)flags, bind_bits, MEM_BIND_NONE);
-			xfree(*mem_bind);
-		} else if (strcasecmp(tok, "rank") == 0) {
-			clear_then_set((int *)flags, bind_bits, MEM_BIND_RANK);
-			xfree(*mem_bind);
-		} else if (strcasecmp(tok, "local") == 0) {
-			clear_then_set((int *)flags, bind_bits, MEM_BIND_LOCAL);
-			xfree(*mem_bind);
-		} else if ((strncasecmp(tok, "map_mem", 7) == 0) ||
-		           (strncasecmp(tok, "mapmem", 6) == 0)) {
-			char *list;
-			list = strsep(&tok, ":=");
-			list = strsep(&tok, ":=");
-			clear_then_set((int *)flags, bind_bits, MEM_BIND_MAP);
-			xfree(*mem_bind);
-			if (list && *list) {
-				*mem_bind = xstrdup(list);
-			} else {
-				error("missing list for \"--mem_bind=map_mem:<list>\"");
-				xfree(buf);
-				return 1;
-			}
-		} else if ((strncasecmp(tok, "mask_mem", 8) == 0) ||
-		           (strncasecmp(tok, "maskmem", 7) == 0)) {
-			char *list;
-			list = strsep(&tok, ":=");
-			list = strsep(&tok, ":=");
-			clear_then_set((int *)flags, bind_bits, MEM_BIND_MASK);
-			xfree(*mem_bind);
-			if (list && *list) {
-				*mem_bind = xstrdup(list);
-			} else {
-				error("missing list for \"--mem_bind=mask_mem:<list>\"");
-				xfree(buf);
-				return 1;
-			}
-		} else {
-			error("unrecognized --mem_bind argument \"%s\"", tok);
-			xfree(buf);
-			return 1;
-		}
-	}
-
-	xfree(buf);
-	return 0;
-}
-
 /*
  * print error message to stderr with opt.progname prepended
  */
@@ -607,13 +340,15 @@ static void _opt_default()
 	opt.time_limit_str = NULL;
 	opt.ckpt_interval = 0;
 	opt.ckpt_interval_str = NULL;
-	opt.ckpt_path = NULL;
+	opt.ckpt_dir = NULL;
+	opt.restart_dir = NULL;
 	opt.partition = NULL;
 	opt.max_threads = MAX_THREADS;
 	pmi_server_max_threads(opt.max_threads);
 
 	opt.relative = NO_VAL;
 	opt.relative_set = false;
+	opt.resv_port_cnt = NO_VAL;
 	opt.cmd_name = NULL;
 	opt.job_name = NULL;
 	opt.job_name_set_cmd = false;
@@ -649,6 +384,7 @@ static void _opt_default()
 	opt.quit_on_intr = false;
 	opt.disable_status = false;
 	opt.test_only   = false;
+	opt.preserve_env = false;
 
 	opt.quiet = 0;
 	_verbose = 0;
@@ -689,12 +425,11 @@ static void _opt_default()
 
 	opt.prolog = slurm_get_srun_prolog();
 	opt.epilog = slurm_get_srun_epilog();
+	opt.begin = (time_t)0;
 
 	opt.task_prolog     = NULL;
 	opt.task_epilog     = NULL;
 
-	opt.ctrl_comm_ifhn  = NULL;
-
 	/*
 	 * Reset some default values if running under a parallel debugger
 	 */
@@ -708,6 +443,7 @@ static void _opt_default()
 	opt.pty = false;
 	opt.open_mode = 0;
 	opt.acctg_freq = -1;
+	opt.reservation = NULL;
 	opt.wckey = NULL;
 }
 
@@ -744,7 +480,7 @@ env_vars_t env_vars[] = {
 {"SLURM_IMMEDIATE",     OPT_INT,        &opt.immediate,     NULL             },
 {"SLURM_JOB_NAME",      OPT_STRING,     &opt.job_name,      
 					&opt.job_name_set_env},
-{"SLURM_JOBID",         OPT_INT,        &opt.jobid,         NULL             },
+{"SLURM_JOB_ID",        OPT_INT,        &opt.jobid,         NULL             },
 {"SLURM_KILL_BAD_EXIT", OPT_INT,        &opt.kill_bad_exit, NULL             },
 {"SLURM_LABELIO",       OPT_INT,        &opt.labelio,       NULL             },
 {"SLURM_LINUX_IMAGE",   OPT_STRING,     &opt.linuximage,    NULL             },
@@ -754,6 +490,7 @@ env_vars_t env_vars[] = {
 {"SLURM_NSOCKETS_PER_NODE",OPT_NSOCKETS,NULL,               NULL             },
 {"SLURM_NCORES_PER_SOCKET",OPT_NCORES,  NULL,               NULL             },
 {"SLURM_NTHREADS_PER_CORE",OPT_NTHREADS,NULL,               NULL             },
+{"SLURM_NTASKS_PER_NODE", OPT_INT,      &opt.ntasks_per_node, NULL           },
 {"SLURM_NO_ROTATE",     OPT_NO_ROTATE,  NULL,               NULL             },
 {"SLURM_NPROCS",        OPT_INT,        &opt.nprocs,        &opt.nprocs_set  },
 {"SLURM_OVERCOMMIT",    OPT_OVERCOMMIT, NULL,               NULL             },
@@ -761,17 +498,18 @@ env_vars_t env_vars[] = {
 {"SLURM_RAMDISK_IMAGE", OPT_STRING,     &opt.ramdiskimage,  NULL             },
 {"SLURM_IOLOAD_IMAGE",  OPT_STRING,     &opt.ramdiskimage,  NULL             },
 {"SLURM_REMOTE_CWD",    OPT_STRING,     &opt.cwd,           NULL             },
+{"SLURM_RESV_PORTS",    OPT_RESV_PORTS, NULL,               NULL             },
 {"SLURM_STDERRMODE",    OPT_STRING,     &opt.efname,        NULL             },
 {"SLURM_STDINMODE",     OPT_STRING,     &opt.ifname,        NULL             },
 {"SLURM_STDOUTMODE",    OPT_STRING,     &opt.ofname,        NULL             },
 {"SLURM_THREADS",       OPT_INT,        &opt.max_threads,   NULL             },
 {"SLURM_TIMELIMIT",     OPT_STRING,     &opt.time_limit_str,NULL             },
 {"SLURM_CHECKPOINT",    OPT_STRING,     &opt.ckpt_interval_str, NULL         },
-{"SLURM_CHECKPOINT_PATH",OPT_STRING,    &opt.ckpt_path,     NULL             },
+{"SLURM_CHECKPOINT_DIR",OPT_STRING,     &opt.ckpt_dir,      NULL             },
+{"SLURM_RESTART_DIR",   OPT_STRING,     &opt.restart_dir ,  NULL             },
 {"SLURM_WAIT",          OPT_INT,        &opt.max_wait,      NULL             },
 {"SLURM_DISABLE_STATUS",OPT_INT,        &opt.disable_status,NULL             },
 {"SLURM_MPI_TYPE",      OPT_MPI,        NULL,               NULL             },
-{"SLURM_SRUN_COMM_IFHN",OPT_STRING,     &opt.ctrl_comm_ifhn,NULL             },
 {"SLURM_SRUN_MULTI",    OPT_MULTI,      NULL,               NULL             },
 {"SLURM_UNBUFFEREDIO",  OPT_INT,        &opt.unbuffered,    NULL             },
 {"SLURM_NODELIST",      OPT_STRING,     &opt.alloc_nodelist,NULL             },
@@ -826,8 +564,10 @@ _process_env_var(env_vars_t *e, const char *val)
 	case OPT_INT:
 		if (val != NULL) {
 			*((int *) e->arg) = (int) strtol(val, &end, 10);
-			if (!(end && *end == '\0')) 
-				error("%s=%s invalid. ignoring...", e->var, val);
+			if (!(end && *end == '\0')) {
+				error("%s=%s invalid. ignoring...", 
+				      e->var, val);
+			}
 		}
 		break;
 
@@ -843,14 +583,14 @@ _process_env_var(env_vars_t *e, const char *val)
 		break;
 
 	case OPT_CPU_BIND:
-		if (_verify_cpu_bind(val, &opt.cpu_bind,
-				     &opt.cpu_bind_type))
+		if (slurm_verify_cpu_bind(val, &opt.cpu_bind,
+					  &opt.cpu_bind_type))
 			exit(1);
 		break;
 
 	case OPT_MEM_BIND:
-		if (_verify_mem_bind(val, &opt.mem_bind,
-				     &opt.mem_bind_type))
+		if (slurm_verify_mem_bind(val, &opt.mem_bind,
+					  &opt.mem_bind_type))
 			exit(1);
 		break;
 
@@ -873,6 +613,13 @@ _process_env_var(env_vars_t *e, const char *val)
 		opt.shared = 0;
 		break;
 
+	case OPT_RESV_PORTS:
+		if (val)
+			opt.resv_port_cnt = strtol(val, NULL, 10);
+		else
+			opt.resv_port_cnt = 0;
+		break;
+
 	case OPT_OPEN_MODE:
 		if ((val[0] == 'a') || (val[0] == 'A'))
 			opt.open_mode = OPEN_MODE_APPEND;
@@ -954,6 +701,8 @@ static void set_options(const int argc, char **argv)
 		{"slurmd-debug",  required_argument, 0, 'd'},
 		{"chdir",         required_argument, 0, 'D'},
 		{"error",         required_argument, 0, 'e'},
+		{"preserve-env",  no_argument,       0, 'E'},
+		{"preserve-slurm-env", no_argument,  0, 'E'},
 		{"geometry",      required_argument, 0, 'g'},
 		{"hold",          no_argument,       0, 'H'},
 		{"input",         required_argument, 0, 'i'},
@@ -997,11 +746,10 @@ static void set_options(const int argc, char **argv)
 		{"mincores",         required_argument, 0, LONG_OPT_MINCORES},
 		{"minthreads",       required_argument, 0, LONG_OPT_MINTHREADS},
 		{"mem",              required_argument, 0, LONG_OPT_MEM},
-		{"job-mem",          required_argument, 0, LONG_OPT_MEM_PER_CPU},
-		{"task-mem",         required_argument, 0, LONG_OPT_MEM_PER_CPU},
 		{"mem-per-cpu",      required_argument, 0, LONG_OPT_MEM_PER_CPU},
 		{"hint",             required_argument, 0, LONG_OPT_HINT},
 		{"mpi",              required_argument, 0, LONG_OPT_MPI},
+		{"resv-ports",       optional_argument, 0, LONG_OPT_RESV_PORTS},
 		{"tmp",              required_argument, 0, LONG_OPT_TMP},
 		{"jobid",            required_argument, 0, LONG_OPT_JOBID},
 		{"msg-timeout",      required_argument, 0, LONG_OPT_TIMEO},
@@ -1024,7 +772,6 @@ static void set_options(const int argc, char **argv)
 		{"task-prolog",      required_argument, 0, LONG_OPT_TASK_PROLOG},
 		{"task-epilog",      required_argument, 0, LONG_OPT_TASK_EPILOG},
 		{"nice",             optional_argument, 0, LONG_OPT_NICE},
-		{"ctrl-comm-ifhn",   required_argument, 0, LONG_OPT_CTRL_COMM_IFHN},
 		{"multi-prog",       no_argument,       0, LONG_OPT_MULTI},
 		{"comment",          required_argument, 0, LONG_OPT_COMMENT},
 		{"sockets-per-node", required_argument, 0, LONG_OPT_SOCKETSPERNODE},
@@ -1044,14 +791,16 @@ static void set_options(const int argc, char **argv)
 		{"get-user-env",     optional_argument, 0, LONG_OPT_GET_USER_ENV},
 		{"pty",              no_argument,       0, LONG_OPT_PTY},
 		{"checkpoint",       required_argument, 0, LONG_OPT_CHECKPOINT},
-		{"checkpoint-path",  required_argument, 0, LONG_OPT_CHECKPOINT_PATH},
+		{"checkpoint-dir",   required_argument, 0, LONG_OPT_CHECKPOINT_DIR},
 		{"open-mode",        required_argument, 0, LONG_OPT_OPEN_MODE},
 		{"acctg-freq",       required_argument, 0, LONG_OPT_ACCTG_FREQ},
 		{"wckey",            required_argument, 0, LONG_OPT_WCKEY},
+		{"reservation",      required_argument, 0, LONG_OPT_RESERVATION},
+		{"restart-dir",      required_argument, 0, LONG_OPT_RESTART_DIR},
 		{NULL,               0,                 0, 0}
 	};
-	char *opt_string = "+aAbB:c:C:d:D:e:g:Hi:IjJ:kKlL:m:n:N:"
-		"o:Op:P:qQr:R:st:T:uU:vVw:W:x:XZ";
+	char *opt_string = "+aAbB:c:C:d:D:e:Eg:Hi:IjJ:kKlL:m:n:N:"
+		"o:Op:P:qQr:Rst:T:uU:vVw:W:x:XZ";
 
 	struct option *optz = spank_option_table_create (long_options);
 
@@ -1131,6 +880,9 @@ static void set_options(const int argc, char **argv)
 			else
 				opt.efname = xstrdup(optarg);
 			break;
+		case (int)'E':
+			opt.preserve_env = true;
+			break;
 		case (int)'g':
 			if (verify_geometry(optarg, opt.geometry))
 				exit(1);
@@ -1287,13 +1039,13 @@ static void set_options(const int argc, char **argv)
                         opt.shared = 0;
                         break;
                 case LONG_OPT_CPU_BIND:
-			if (_verify_cpu_bind(optarg, &opt.cpu_bind,
-					     &opt.cpu_bind_type))
+			if (slurm_verify_cpu_bind(optarg, &opt.cpu_bind,
+						  &opt.cpu_bind_type))
 				exit(1);
 			break;
 		case LONG_OPT_MEM_BIND:
-			if (_verify_mem_bind(optarg, &opt.mem_bind,
-					     &opt.mem_bind_type))
+			if (slurm_verify_mem_bind(optarg, &opt.mem_bind,
+						  &opt.mem_bind_type))
 				exit(1);
 			break;
 		case LONG_OPT_CORE:
@@ -1340,6 +1092,12 @@ static void set_options(const int argc, char **argv)
 				      optarg);
 			}
 			break;
+		case LONG_OPT_RESV_PORTS:
+			if (optarg)
+				opt.resv_port_cnt = strtol(optarg, NULL, 10);
+			else
+				opt.resv_port_cnt = 0;
+			break;
 		case LONG_OPT_TMP:
 			opt.job_min_tmp_disk = str_to_bytes(optarg);
 			if (opt.job_min_tmp_disk < 0) {
@@ -1464,10 +1222,6 @@ static void set_options(const int argc, char **argv)
 				}
 			}
 			break;
-		case LONG_OPT_CTRL_COMM_IFHN:
-			xfree(opt.ctrl_comm_ifhn);
-			opt.ctrl_comm_ifhn = xstrdup(optarg);
-			break;
 		case LONG_OPT_MULTI:
 			opt.multi_prog = true;
 			break;
@@ -1537,7 +1291,8 @@ static void set_options(const int argc, char **argv)
 			opt.reboot = true;
 			break;
 		case LONG_OPT_GET_USER_ENV:
-			error("--get-user-env is no longer supported in srun, use sbatch");
+			error("--get-user-env is no longer supported in srun, "
+			      "use sbatch");
 			break;
 		case LONG_OPT_PTY:
 #ifdef HAVE_PTY_H
@@ -1575,9 +1330,17 @@ static void set_options(const int argc, char **argv)
 			xfree(opt.wckey);
 			opt.wckey = xstrdup(optarg);
 			break;
-		case LONG_OPT_CHECKPOINT_PATH:
-			xfree(opt.ckpt_path);
-			opt.ckpt_path = xstrdup(optarg);
+		case LONG_OPT_RESERVATION:
+			xfree(opt.reservation);
+			opt.reservation = xstrdup(optarg);
+			break;
+		case LONG_OPT_CHECKPOINT_DIR:
+			xfree(opt.ckpt_dir);
+			opt.ckpt_dir = xstrdup(optarg);
+			break;
+		case LONG_OPT_RESTART_DIR:
+			xfree(opt.restart_dir);
+			opt.restart_dir = xstrdup(optarg);
 			break;
 		default:
 			if (spank_process_option (opt_char, optarg) < 0) {
@@ -1741,8 +1504,10 @@ static bool _opt_verify(void)
 	 *   these debug messages cause the generation of more
 	 *   debug messages ad infinitum)
 	 */
-	if (opt.slurmd_debug + LOG_LEVEL_ERROR > LOG_LEVEL_DEBUG2)
+	if (opt.slurmd_debug + LOG_LEVEL_ERROR > LOG_LEVEL_DEBUG2) {
 		opt.slurmd_debug = LOG_LEVEL_DEBUG2 - LOG_LEVEL_ERROR;
+		info("Using srun's max debug increment of %d", opt.slurmd_debug);
+	}
 
 	if (opt.quiet && _verbose) {
 		error ("don't specify both --verbose (-v) and --quiet (-Q)");
@@ -1837,21 +1602,50 @@ static bool _opt_verify(void)
 
 	/* check for realistic arguments */
 	if (opt.nprocs <= 0) {
-		error("%s: invalid number of processes (-n %d)",
-		      opt.progname, opt.nprocs);
+		error("invalid number of processes (-n %d)", opt.nprocs);
 		verified = false;
 	}
 
 	if (opt.cpus_per_task < 0) {
-		error("%s: invalid number of cpus per task (-c %d)\n",
-		      opt.progname, opt.cpus_per_task);
+		error("invalid number of cpus per task (-c %d)\n",
+		      opt.cpus_per_task);
 		verified = false;
 	}
 
 	if ((opt.min_nodes <= 0) || (opt.max_nodes < 0) || 
 	    (opt.max_nodes && (opt.min_nodes > opt.max_nodes))) {
-		error("%s: invalid number of nodes (-N %d-%d)\n",
-		      opt.progname, opt.min_nodes, opt.max_nodes);
+		error("invalid number of nodes (-N %d-%d)\n",
+		      opt.min_nodes, opt.max_nodes);
+		verified = false;
+	}
+
+#ifdef HAVE_BGL
+	if (opt.blrtsimage && strchr(opt.blrtsimage, ' ')) {
+		error("invalid BlrtsImage given '%s'", opt.blrtsimage);
+		verified = false;
+	}
+#endif
+
+	if (opt.linuximage && strchr(opt.linuximage, ' ')) {
+#ifdef HAVE_BGL
+		error("invalid LinuxImage given '%s'", opt.linuximage);
+#else
+		error("invalid CnloadImage given '%s'", opt.linuximage);
+#endif
+		verified = false;
+	}
+
+	if (opt.mloaderimage && strchr(opt.mloaderimage, ' ')) {
+		error("invalid MloaderImage given '%s'", opt.mloaderimage);
+		verified = false;
+	}
+
+	if (opt.ramdiskimage && strchr(opt.ramdiskimage, ' ')) {
+#ifdef HAVE_BGL
+		error("invalid RamDiskImage given '%s'", opt.ramdiskimage);
+#else
+		error("invalid IoloadImage given '%s'", opt.ramdiskimage);
+#endif
 		verified = false;
 	}
 
@@ -1864,7 +1658,8 @@ static bool _opt_verify(void)
 		 */
 		if (!(opt.cpu_bind_type & (CPU_BIND_TO_SOCKETS |
 					   CPU_BIND_TO_CORES |
-					   CPU_BIND_TO_THREADS))) {
+					   CPU_BIND_TO_THREADS |
+					   CPU_BIND_TO_LDOMS))) {
 			opt.cpu_bind_type |= CPU_BIND_TO_CORES;
 		}
 	}
@@ -1876,7 +1671,8 @@ static bool _opt_verify(void)
 		 */
 		if (!(opt.cpu_bind_type & (CPU_BIND_TO_SOCKETS |
 					   CPU_BIND_TO_CORES |
-					   CPU_BIND_TO_THREADS))) {
+					   CPU_BIND_TO_THREADS |
+					   CPU_BIND_TO_LDOMS))) {
 			opt.cpu_bind_type |= CPU_BIND_TO_SOCKETS;
 		}
 	}
@@ -2018,8 +1814,8 @@ static bool _opt_verify(void)
 		}
 	}
 
-	if (! opt.ckpt_path)
-		opt.ckpt_path = xstrdup(opt.cwd);
+	if (! opt.ckpt_dir)
+		opt.ckpt_dir = xstrdup(opt.cwd);
 
 	if ((opt.euid != (uid_t) -1) && (opt.euid != opt.uid)) 
 		opt.uid = opt.euid;
@@ -2037,6 +1833,10 @@ static bool _opt_verify(void)
 		xfree(sched_name);
 	}
 
+	 if (slurm_verify_cpu_bind(NULL, &opt.cpu_bind,
+				   &opt.cpu_bind_type))
+		exit(1);
+
 	return verified;
 }
 
@@ -2112,6 +1912,7 @@ static void _opt_list()
 	info("partition      : %s",
 	     opt.partition == NULL ? "default" : opt.partition);
 	info("job name       : `%s'", opt.job_name);
+	info("reservation    : `%s'", opt.reservation);
 	info("wckey          : `%s'", opt.wckey);
 	info("distribution   : %s", format_task_dist_states(opt.distribution));
 	if(opt.distribution == SLURM_DIST_PLANE)
@@ -2134,7 +1935,9 @@ static void _opt_list()
 		info("time_limit     : %d", opt.time_limit);
 	if (opt.ckpt_interval)
 		info("checkpoint     : %d secs", opt.ckpt_interval);
-	info("checkpoint_path: %s", opt.ckpt_path);
+	info("checkpoint_dir : %s", opt.ckpt_dir);
+	if (opt.restart_dir)
+		info("restart_dir    : %s", opt.restart_dir);
 	info("wait           : %d", opt.max_wait);
 	if (opt.nice)
 		info("nice           : %d", opt.nice);
@@ -2155,6 +1958,7 @@ static void _opt_list()
 	xfree(str);
 	info("reboot         : %s", opt.reboot ? "no" : "yes");
 	info("rotate         : %s", opt.no_rotate ? "yes" : "no");
+	info("preserve_env   : %s", tf_(opt.preserve_env));
 	
 #ifdef HAVE_BGL
 	if (opt.blrtsimage)
@@ -2189,7 +1993,6 @@ static void _opt_list()
 	info("mail_user      : %s", opt.mail_user);
 	info("task_prolog    : %s", opt.task_prolog);
 	info("task_epilog    : %s", opt.task_epilog);
-	info("ctrl_comm_ifhn : %s", opt.ctrl_comm_ifhn);
 	info("multi_prog     : %s", opt.multi_prog ? "yes" : "no");
 	info("sockets-per-node  : %d - %d", opt.min_sockets_per_node,
 					    opt.max_sockets_per_node);
@@ -2201,6 +2004,8 @@ static void _opt_list()
 	info("ntasks-per-socket : %d", opt.ntasks_per_socket);
 	info("ntasks-per-core   : %d", opt.ntasks_per_core);
 	info("plane_size        : %u", opt.plane_size);
+	if (opt.resv_port_cnt != NO_VAL)
+		info("resv_port_cnt     : %d", opt.resv_port_cnt);
 	str = print_commandline(opt.argc, opt.argv);
 	info("remote command    : `%s'", str);
 	xfree(str);
@@ -2213,6 +2018,7 @@ static bool _under_parallel_debugger (void)
 	return (MPIR_being_debugged != 0);
 }
 
+
 static void _usage(void)
 {
  	printf(
@@ -2222,13 +2028,14 @@ static void _usage(void)
 "            [--share] [--label] [--unbuffered] [-m dist] [-J jobname]\n"
 "            [--jobid=id] [--verbose] [--slurmd_debug=#]\n"
 "            [--core=type] [-T threads] [-W sec] [--checkpoint=time]\n"
-"            [--checkpoint-path=dir]  [--licenses=names]\n"
+"            [--checkpoint-dir=dir]  [--licenses=names]\n"
+"            [--restart-dir=dir]\n"
 "            [--contiguous] [--mincpus=n] [--mem=MB] [--tmp=MB] [-C list]\n"
 "            [--mpi=type] [--account=name] [--dependency=type:jobid]\n"
 "            [--kill-on-bad-exit] [--propagate[=rlimits] [--comment=name]\n"
 "            [--cpu_bind=...] [--mem_bind=...] [--network=type]\n"
-"            [--ntasks-per-node=n] [--ntasks-per-socket=n]\n"
-"            [--ntasks-per-core=n] [--mem-per-cpu=MB]\n"
+"            [--ntasks-per-node=n] [--ntasks-per-socket=n] [reservation=name]\n"
+"            [--ntasks-per-core=n] [--mem-per-cpu=MB] [--preserve-env]\n"
 #ifdef HAVE_BG		/* Blue gene specific options */
 "            [--geometry=XxYxZ] [--conn-type=type] [--no-rotate] [--reboot]\n"
 #ifdef HAVE_BGL
@@ -2254,75 +2061,80 @@ static void _help(void)
 "Usage: srun [OPTIONS...] executable [args...]\n"
 "\n"
 "Parallel run options:\n"
-"  -n, --ntasks=ntasks         number of tasks to run\n"
-"  -N, --nodes=N               number of nodes on which to run (N = min[-max])\n"
+"  -b, --batch                 submit as batch job for later execution\n"
+"      --begin=time            defer job until HH:MM DD/MM/YY\n"
 "  -c, --cpus-per-task=ncpus   number of cpus required per task\n"
-"      --ntasks-per-node=n     number of tasks to invoke on each node\n"
-"  -i, --input=in              location of stdin redirection\n"
-"  -o, --output=out            location of stdout redirection\n"
+"      --checkpoint=time       job step checkpoint interval\n"
+"      --checkpoint-dir=dir    directory to store job step checkpoint image \n"
+"                              files\n"
+"      --comment=name          arbitrary comment\n"
+"      --core=type             change default corefile format type\n"
+"                              (type=\"list\" to list of valid formats)\n"
+"  -d, --slurmd-debug=level    slurmd debug level\n"
+"  -D, --chdir=path            change remote current working directory\n"
 "  -e, --error=err             location of stderr redirection\n"
-"  -r, --relative=n            run job step relative to node n of allocation\n"
-"  -p, --partition=partition   partition requested\n"
+"      --epilog=program        run \"program\" after launching job step\n"
+"  -E, --preserve-env          env vars for node and task counts override\n"
+"                              command-line flags\n"
+"      --get-user-env          used by Moab.  See srun man page.\n"
 "  -H, --hold                  submit job in held state\n"
-"  -t, --time=minutes          time limit\n"
-"  -D, --chdir=path            change remote current working directory\n"
+"  -i, --input=in              location of stdin redirection\n"
 "  -I, --immediate             exit if resources are not immediately available\n"
-"  -O, --overcommit            overcommit resources\n"
+"      --jobid=id              run under already allocated job\n"
+"  -J, --job-name=jobname      name of job\n"
 "  -k, --no-kill               do not kill job on node failure\n"
 "  -K, --kill-on-bad-exit      kill the job if any task terminates with a\n"
 "                              non-zero exit code\n"
-"  -s, --share                 share nodes with other jobs\n"
 "  -l, --label                 prepend task number to lines of stdout/err\n"
-"  -u, --unbuffered            do not line-buffer stdout/err\n"
+"  -L, --licenses=names        required license, comma separated\n"
 "  -m, --distribution=type     distribution method for processes to nodes\n"
 "                              (type = block|cyclic|arbitrary)\n"
-"  -J, --job-name=jobname      name of job\n"
-"      --jobid=id              run under already allocated job\n"
-"      --mpi=type              type of MPI being used\n"
-"  -b, --batch                 submit as batch job for later execution\n"
-"  -T, --threads=threads       set srun launch fanout\n"
-"  -W, --wait=sec              seconds to wait after first task exits\n"
-"                              before killing job\n"
-"  -q, --quit-on-interrupt     quit on single Ctrl-C\n"
-"  -X, --disable-status        Disable Ctrl-C status feature\n"
-"  -v, --verbose               verbose mode (multiple -v's increase verbosity)\n"
-"  -Q, --quiet                 quiet mode (suppress informational messages)\n"
-"  -d, --slurmd-debug=level    slurmd debug level\n"
-"      --core=type             change default corefile format type\n"
-"                              (type=\"list\" to list of valid formats)\n"
-"  -P, --dependency=type:jobid defer job until condition on jobid is satisfied\n"
-"      --nice[=value]          decrease secheduling priority by value\n"
-"  -U, --account=name          charge job to specified account\n"
-"      --comment=name          arbitrary comment\n"
-"      --propagate[=rlimits]   propagate all [or specific list of] rlimits\n"
-"      --mpi=type              specifies version of MPI to use\n"
-"      --prolog=program        run \"program\" before launching job step\n"
-"      --epilog=program        run \"program\" after launching job step\n"
-"      --task-prolog=program   run \"program\" before launching task\n"
-"      --task-epilog=program   run \"program\" after launching task\n"
-"      --begin=time            defer job until HH:MM DD/MM/YY\n"
 "      --mail-type=type        notify on state change: BEGIN, END, FAIL or ALL\n"
-"      --mail-user=user        who to send email notification for job state changes\n"
-"      --ctrl-comm-ifhn=addr   interface hostname for PMI communications from srun\n"
+"      --mail-user=user        who to send email notification for job state\n"
+"                              changes\n"
+"      --mpi=type              type of MPI being used\n"
 "      --multi-prog            if set the program name specified is the\n"
 "                              configuration specification for multiple programs\n"
-"      --get-user-env          used by Moab.  See srun man page.\n"
-"  -L, --licenses=names        required license, comma separated\n"
-"      --checkpoint=time       job step checkpoint interval\n"
-"      --checkpoint-path=dir   path to store job step checkpoint image files\n"
+"  -n, --ntasks=ntasks         number of tasks to run\n"
+"      --nice[=value]          decrease secheduling priority by value\n"
+"      --ntasks-per-node=n     number of tasks to invoke on each node\n"
+"  -N, --nodes=N               number of nodes on which to run (N = min[-max])\n"
+"  -o, --output=out            location of stdout redirection\n"
+"  -O, --overcommit            overcommit resources\n"
+"  -p, --partition=partition   partition requested\n"
+"      --prolog=program        run \"program\" before launching job step\n"
+"      --propagate[=rlimits]   propagate all [or specific list of] rlimits\n"
 #ifdef HAVE_PTY_H
 "      --pty                   run task zero in pseudo terminal\n"
 #endif
+"  -P, --dependency=type:jobid defer job until condition on jobid is satisfied\n"
+"  -q, --quit-on-interrupt     quit on single Ctrl-C\n"
+"  -Q, --quiet                 quiet mode (suppress informational messages)\n"
+"  -r, --relative=n            run job step relative to node n of allocation\n"
+"      --restart-dir=dir       directory of checkpoint image files to restart\n"
+"                              from\n"
+"  -s, --share                 share nodes with other jobs\n"
+"  -t, --time=minutes          time limit\n"
+"      --task-epilog=program   run \"program\" after launching task\n"
+"      --task-prolog=program   run \"program\" before launching task\n"
+"  -T, --threads=threads       set srun launch fanout\n"
+"  -u, --unbuffered            do not line-buffer stdout/err\n"
+"  -U, --account=name          charge job to specified account\n"
+"  -v, --verbose               verbose mode (multiple -v's increase verbosity)\n"
+"  -W, --wait=sec              seconds to wait after first task exits\n"
+"                              before killing job\n"
+"  -X, --disable-status        Disable Ctrl-C status feature\n"
 "\n"
 "Constraint options:\n"
+"  -C, --constraint=list       specify a list of constraints\n"
+"      --contiguous            demand a contiguous range of nodes\n"
 "      --mincpus=n             minimum number of cpus per node\n"
-"      --minsockets=n          minimum number of sockets per node\n"
 "      --mincores=n            minimum number of cores per cpu\n"
+"      --minsockets=n          minimum number of sockets per node\n"
 "      --minthreads=n          minimum number of threads per core\n"
 "      --mem=MB                minimum amount of real memory\n"
+"      --reservation=name      allocate resources from named reservation\n"
 "      --tmp=MB                minimum amount of temporary disk\n"
-"      --contiguous            demand a contiguous range of nodes\n"
-"  -C, --constraint=list       specify a list of constraints\n"
 "  -w, --nodelist=hosts...     request a specific list of hosts\n"
 "  -x, --exclude=hosts...      exclude a specific list of hosts\n"
 "  -Z, --no-allocate           don't allocate nodes (must supply -w)\n"
@@ -2333,74 +2145,73 @@ static void _help(void)
 "                              or don't share CPUs for job steps\n"
 "      --mem-per-cpu=MB        maximum amount of real memory per allocated\n"
 "                              CPU required by the job.\n" 
-"                              --mem >= --job-mem if --mem is specified.\n" 
+"                              --mem >= --mem-per-cpu if --mem is specified.\n" 
+"      --resv-ports            reserve communication ports\n" 
 "\n"
 "Affinity/Multi-core options: (when the task/affinity plugin is enabled)\n" 
-"  -B --extra-node-info=S[:C[:T]]            Expands to:\n"
-"      --sockets-per-node=S    number of sockets per node to allocate\n"
-"      --cores-per-socket=C    number of cores per socket to allocate\n"
-"      --threads-per-core=T    number of threads per core to allocate\n"
+"  -B  --extra-node-info=S[:C[:T]]            Expands to:\n"
+"       --sockets-per-node=S   number of sockets per node to allocate\n"
+"       --cores-per-socket=C   number of cores per socket to allocate\n"
+"       --threads-per-core=T   number of threads per core to allocate\n"
 "                              each field can be 'min[-max]' or wildcard '*'\n"
 "                              total cpus requested = (N x S x C x T)\n"
-"\n"
 "      --ntasks-per-socket=n   number of tasks to invoke on each socket\n"
 "      --ntasks-per-core=n     number of tasks to invoke on each core\n"
+"\n"
 "\n");
 	conf = slurm_conf_lock();
 	if (conf->task_plugin != NULL
 	    && strcasecmp(conf->task_plugin, "task/affinity") == 0) {
 		printf(
-"      --hint=                 Bind tasks according to application hints\n"
-"                              (see \"--hint=help\" for options)\n"
 "      --cpu_bind=             Bind tasks to CPUs\n"
 "                              (see \"--cpu_bind=help\" for options)\n"
+"      --hint=                 Bind tasks according to application hints\n"
+"                              (see \"--hint=help\" for options)\n"
 "      --mem_bind=             Bind memory to locality domains (ldom)\n"
 "                              (see \"--mem_bind=help\" for options)\n"
 			);
 	}
 	slurm_conf_unlock();
-	printf("\n");
 	spank_print_options (stdout, 6, 30);
-	printf("\n");
 
-        printf(
+	printf("\n"
 #ifdef HAVE_AIX				/* AIX/Federation specific options */
-		"AIX related options:\n"
-		"  --network=type              communication protocol to be used\n"
-		"\n"
+"AIX related options:\n"
+"  --network=type              communication protocol to be used\n"
+"\n"
 #endif
 
 #ifdef HAVE_BG				/* Blue gene specific options */
-		"Blue Gene related options:\n"
-		"  -g, --geometry=XxYxZ        geometry constraints of the job\n"
-		"  -R, --no-rotate             disable geometry rotation\n"
-		"      --reboot                reboot block before starting job\n"
-		"      --conn-type=type        constraint on type of connection, MESH or TORUS\n"
-		"                              if not set, then tries to fit TORUS else MESH\n"
+"Blue Gene related options:\n"
+"  -g, --geometry=XxYxZ        geometry constraints of the job\n"
+"  -R, --no-rotate             disable geometry rotation\n"
+"      --reboot                reboot block before starting job\n"
+"      --conn-type=type        constraint on type of connection, MESH or TORUS\n"
+"                              if not set, then tries to fit TORUS else MESH\n"
 #ifndef HAVE_BGL
-		"                              If wanting to run in HTC mode (only for 1\n"
-		"                              midplane and below).  You can use HTC_S for\n"
-		"                              SMP, HTC_D for Dual, HTC_V for\n"
-		"                              virtual node mode, and HTC_L for Linux mode.\n" 
-                "      --cnload-image=path     path to compute node image for bluegene block.  Default if not set\n"
-                "      --mloader-image=path    path to mloader image for bluegene block.  Default if not set\n"
-                "      --ioload-image=path     path to ioload image for bluegene block.  Default if not set\n"
+"                              If wanting to run in HTC mode (only for 1\n"
+"                              midplane and below).  You can use HTC_S for\n"
+"                              SMP, HTC_D for Dual, HTC_V for\n"
+"                              virtual node mode, and HTC_L for Linux mode.\n" 
+"      --cnload-image=path     path to compute node image for bluegene block.  Default if not set\n"
+"      --mloader-image=path    path to mloader image for bluegene block.  Default if not set\n"
+"      --ioload-image=path     path to ioload image for bluegene block.  Default if not set\n"
 #else
-                "      --blrts-image=path      path to blrts image for bluegene block.  Default if not set\n"
-                "      --linux-image=path      path to linux image for bluegene block.  Default if not set\n"
-                "      --mloader-image=path    path to mloader image for bluegene block.  Default if not set\n"
-                "      --ramdisk-image=path    path to ramdisk image for bluegene block.  Default if not set\n"
+"      --blrts-image=path      path to blrts image for bluegene block.  Default if not set\n"
+"      --linux-image=path      path to linux image for bluegene block.  Default if not set\n"
+"      --mloader-image=path    path to mloader image for bluegene block.  Default if not set\n"
+"      --ramdisk-image=path    path to ramdisk image for bluegene block.  Default if not set\n"
 #endif
 #endif
-		"\n"
-		"Help options:\n"
-		"      --help                  show this help message\n"
-		"      --usage                 display brief usage message\n"
-		"      --print-request         Display job's layout without scheduling it\n"
-		"\n"
-		"Other options:\n"
-		"  -V, --version               output version information and exit\n"
-		"\n"
+"\n"
+"Help options:\n"
+"      --help                  show this help message\n"
+"      --usage                 display brief usage message\n"
+"      --print-request         Display job's layout without scheduling it\n"
+"\n"
+"Other options:\n"
+"  -V, --version               output version information and exit\n"
+"\n"
 		);
 
 }
diff --git a/src/srun/opt.h b/src/srun/opt.h
index daca2b85c..01dcfde44 100644
--- a/src/srun/opt.h
+++ b/src/srun/opt.h
@@ -1,14 +1,16 @@
 /*****************************************************************************\
  *  opt.h - definitions for srun option processing
- *  $Id: opt.h 15808 2008-12-02 23:38:47Z da $
+ *  $Id: opt.h 16867 2009-03-12 16:35:42Z jette $
  *****************************************************************************
- *  Copyright (C) 2002-2006 The Regents of the University of California.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona1@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -111,8 +113,9 @@ typedef struct srun_options {
 	char *time_limit_str;	/* --time,   -t (string)	*/
 	int  ckpt_interval;	/* --checkpoint (int minutes)	*/
 	char *ckpt_interval_str;/* --checkpoint (string)	*/
-	char *ckpt_path;	/* --checkpoint-path (string)   */
+	char *ckpt_dir;  	/* --checkpoint-dir (string)   */
 	bool exclusive;		/* --exclusive			*/
+	int  resv_port_cnt;	/* --resv_ports			*/
 	char *partition;	/* --partition=n,   -p n   	*/
 	enum task_dist_states
 	        distribution;	/* --distribution=, -m dist	*/
@@ -165,6 +168,7 @@ typedef struct srun_options {
 	char *task_epilog;	/* --task-epilog=		*/
 	char *task_prolog;	/* --task-prolog=		*/
 	char *licenses;		/* --licenses, -L		*/
+	bool preserve_env;	/* --preserve-env		*/
 
 	/* constraint options */
 	int32_t job_min_cpus;	/* --mincpus=n			*/
@@ -203,13 +207,14 @@ typedef struct srun_options {
 	time_t begin;		/* --begin			*/
 	uint16_t mail_type;	/* --mail-type			*/
 	char *mail_user;	/* --mail-user			*/
-	char *ctrl_comm_ifhn;	/* --ctrl-comm-ifhn		*/
 	uint8_t open_mode;	/* --open-mode=append|truncate	*/
 	int acctg_freq;		/* --acctg-freq=secs		*/
 	bool pty;		/* --pty			*/
+	char *restart_dir;	/* --restart                    */
 	int argc;		/* length of argv array		*/
 	char **argv;		/* left over on command line	*/
 	char *wckey;            /* --wckey workload characterization key */
+	char *reservation;      /* --reservation		*/
 } opt_t;
 
 extern opt_t opt;
diff --git a/src/srun/srun.c b/src/srun/srun.c
index 1f0fc7f1b..b168cf839 100644
--- a/src/srun/srun.c
+++ b/src/srun/srun.c
@@ -3,13 +3,14 @@
  *	parallel jobs.
  *****************************************************************************
  *  Copyright (C) 2002-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 Mark Grondona <grondona@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -68,7 +69,6 @@
 #include <signal.h>
 #include <termios.h>
 #include <unistd.h>
-#include <fcntl.h>
 #include <grp.h>
 
 
@@ -93,6 +93,7 @@
 #include "src/srun/srun.h"
 #include "src/srun/srun_pty.h"
 #include "src/srun/multi_prog.h"
+#include "src/srun/task_state.h"
 #include "src/api/pmi_server.h"
 #include "src/api/step_launch.h"
 
@@ -102,6 +103,13 @@
 #  endif
 #endif /* defined HAVE_DECL_STRSIGNAL && !HAVE_DECL_STRSIGNAL */
 
+#ifndef OPEN_MPI_PORT_ERROR
+/* This exit code indicates the launched Open MPI tasks could 
+ *	not open the reserved port. It was already open by some
+ *	other process. */
+#define OPEN_MPI_PORT_ERROR 108
+#endif
+
 #define MAX_RETRIES 20
 #define MAX_ENTRIES 50
 
@@ -113,13 +121,12 @@ mpi_plugin_client_info_t mpi_job_info[1];
 static struct termios termdefaults;
 uint32_t global_rc = 0;
 srun_job_t *job = NULL;
+task_state_t task_state;
 
-struct {
-	bitstr_t *start_success;
-	bitstr_t *start_failure;
-	bitstr_t *finish_normal;
-	bitstr_t *finish_abnormal;
-} task_state;
+#define MAX_STEP_RETRIES 4
+time_t launch_start_time;
+bool   retry_step_begin = false;
+int    retry_step_cnt = 0;
 
 /*
  * forward declaration of static funcs
@@ -145,9 +152,6 @@ static int   _set_umask_env(void);
 static int   _slurm_debug_env_val (void);
 static void  _task_start(launch_tasks_response_msg_t *msg);
 static void  _task_finish(task_exit_msg_t *msg);
-static void  _task_state_struct_init(int num_tasks);
-static void  _task_state_struct_print(void);
-static void  _task_state_struct_free(void);
 static char *_uint16_array_to_str(int count, const uint16_t *array);
 
 int srun(int ac, char **av)
@@ -167,7 +171,7 @@ int srun(int ac, char **av)
 	env->nodeid = -1;
 	env->cli = NULL;
 	env->env = NULL;
-	env->ckpt_path = NULL;
+	env->ckpt_dir = NULL;
 
 	debug_level = _slurm_debug_env_val();
 	logopt.stderr_level += debug_level;
@@ -198,6 +202,9 @@ int srun(int ac, char **av)
 		exit (1);
 	}
 	record_ppid();
+
+	if (spank_init_post_opt() < 0)
+		fatal("Plugin stack post-option processing failed.");
 	
 	/* reinit log with new verbosity (if changed by command line)
 	 */
@@ -234,7 +241,7 @@ int srun(int ac, char **av)
 	} else if (opt.no_alloc) {
 		info("do not allocate resources");
 		job = job_create_noalloc(); 
-		if (create_job_step(job) < 0) {
+		if (create_job_step(job, false) < 0) {
 			exit(1);
 		}
 	} else if ((resp = existing_allocation())) {
@@ -248,7 +255,11 @@ int srun(int ac, char **av)
 		job = job_step_create_allocation(resp);
 		slurm_free_resource_allocation_response_msg(resp);
 
-		if (!job || create_job_step(job) < 0)
+		if (opt.begin != 0)
+			error("--begin is ignored because nodes"
+				" are already allocated.");
+
+		if (!job || create_job_step(job, false) < 0)
 			exit(1);
 	} else {
 		/* Combined job allocation and job step launch */
@@ -273,8 +284,8 @@ int srun(int ac, char **av)
 			/* use SLURM_JOB_NAME env var */
 			opt.job_name_set_cmd = true;
 		}
-		if (!job || create_job_step(job) < 0) {
-			slurm_complete_job(job->jobid, 1);
+		if (!job || create_job_step(job, true) < 0) {
+			slurm_complete_job(resp->job_id, 1);
 			exit(1);
 		}
 		
@@ -290,7 +301,6 @@ int srun(int ac, char **av)
 	/*
 	 *  Enhance environment for job
 	 */
-	env->nprocs = opt.nprocs;
 	env->cpus_per_task = opt.cpus_per_task;
 	if (opt.ntasks_per_node != NO_VAL)
 		env->ntasks_per_node = opt.ntasks_per_node;
@@ -309,14 +319,13 @@ int srun(int ac, char **av)
 	env->slurmd_debug = opt.slurmd_debug;
 	env->labelio = opt.labelio;
 	env->comm_port = slurmctld_comm_addr.port;
-	env->comm_hostname = slurmctld_comm_addr.hostname;
+	env->batch_flag = 0;
 	if (job) {
 		uint16_t *tasks = NULL;
 		slurm_step_ctx_get(job->step_ctx, SLURM_STEP_CTX_TASKS, 
 				   &tasks);
 
 		env->select_jobinfo = job->select_jobinfo;
-		env->nhosts = job->nhosts;
 		env->nodelist = job->nodelist;
 		env->task_count = _uint16_array_to_str(
 			job->nhosts, tasks);
@@ -346,7 +355,8 @@ int srun(int ac, char **av)
 	xfree(env->task_count);
 	xfree(env);
 	
-	_task_state_struct_init(opt.nprocs);
+ re_launch:
+	task_state = task_state_create(opt.nprocs);
 	slurm_step_launch_params_t_init(&launch_params);
 	launch_params.gid = opt.gid;
 	launch_params.argc = opt.argc;
@@ -369,15 +379,14 @@ int srun(int ac, char **av)
 	if (opt.acctg_freq >= 0)
 		launch_params.acctg_freq = opt.acctg_freq;
 	launch_params.pty = opt.pty;
-	launch_params.max_sockets     = opt.max_sockets_per_node;
-	launch_params.max_cores       = opt.max_cores_per_socket;
-	launch_params.max_threads     = opt.max_threads_per_core;
-	launch_params.cpus_per_task = opt.cpus_per_task;
-	launch_params.ntasks_per_node   = opt.ntasks_per_node;
-	launch_params.ntasks_per_socket = opt.ntasks_per_socket;
-	launch_params.ntasks_per_core   = opt.ntasks_per_core;
-	launch_params.ckpt_path = xstrdup(opt.ckpt_path);
-
+	launch_params.max_sockets	= opt.max_sockets_per_node;
+	launch_params.max_cores		= opt.max_cores_per_socket;
+	launch_params.max_threads	= opt.max_threads_per_core;
+	launch_params.cpus_per_task	= opt.cpus_per_task;
+	launch_params.task_dist         = opt.distribution;
+	launch_params.ckpt_dir		= opt.ckpt_dir;
+	launch_params.restart_dir       = opt.restart_dir;
+	launch_params.preserve_env      = opt.preserve_env;
 	/* job structure should now be filled in */
 	_setup_signals();
 
@@ -403,8 +412,9 @@ int srun(int ac, char **av)
 	}
 
 	update_job_state(job, SRUN_JOB_LAUNCHING);
-	if (slurm_step_launch(job->step_ctx, slurmctld_comm_addr.hostname, 
-	    &launch_params, &callbacks) != SLURM_SUCCESS) {
+	launch_start_time = time(NULL);
+	if (slurm_step_launch(job->step_ctx, &launch_params, &callbacks) != 
+	    SLURM_SUCCESS) {
 		error("Application launch failed: %m");
 		global_rc = 1;
 		goto cleanup;
@@ -414,7 +424,7 @@ int srun(int ac, char **av)
 	if (slurm_step_launch_wait_start(job->step_ctx) == SLURM_SUCCESS) {
 		update_job_state(job, SRUN_JOB_RUNNING);
 		/* Only set up MPIR structures if the step launched
-		   correctly. */
+		 * correctly. */
 		if (opt.multi_prog)
 			mpir_set_multi_name(job->ctx_params.task_count,
 					    launch_params.argv[0]);
@@ -430,32 +440,65 @@ int srun(int ac, char **av)
 	}
 
 	slurm_step_launch_wait_finish(job->step_ctx);
+	if (retry_step_begin && (retry_step_cnt < MAX_STEP_RETRIES)) {
+		retry_step_begin = false;
+		slurm_step_ctx_destroy(job->step_ctx);
+		if (got_alloc) {
+			if (create_job_step(job, true) < 0)
+				exit(1);
+		} else {
+			if (create_job_step(job, false) < 0)
+				exit(1);
+		}
+		task_state_destroy(task_state);
+		goto re_launch;
+	}
 
 cleanup:
 	if(got_alloc) {
 		cleanup_allocation();
-		slurm_complete_job(job->jobid, global_rc);
+
+		/* send the controller we were cancelled */
+		if (job->state >= SRUN_JOB_CANCELLED)
+			slurm_complete_job(job->jobid, NO_VAL);
+		else
+			slurm_complete_job(job->jobid, global_rc);
 	}
+
 	_run_srun_epilog(job);
 	slurm_step_ctx_destroy(job->step_ctx);
 	mpir_cleanup();
-	_task_state_struct_free();
+	task_state_destroy(task_state);
 	log_fini();
 
+	if (WIFEXITED(global_rc))
+		global_rc = WEXITSTATUS(global_rc);
 	return (int)global_rc;
 }
 
+static slurm_step_layout_t *
+_get_slurm_step_layout(srun_job_t *job)
+{
+	job_step_create_response_msg_t *resp;
+
+	if (!job || !job->step_ctx)
+		return (NULL);
+
+	slurm_step_ctx_get(job->step_ctx, SLURM_STEP_CTX_RESP, &resp);
+	if (!resp)
+	    return (NULL);
+	return (resp->step_layout);
+}
+
 static int _call_spank_local_user (srun_job_t *job)
 {
 	struct spank_launcher_job_info info[1];
-	job_step_create_response_msg_t *step_resp;
 
 	info->uid = opt.uid;
 	info->gid = opt.gid;
 	info->jobid = job->jobid;
 	info->stepid = job->stepid;
-	slurm_step_ctx_get(job->step_ctx, SLURM_STEP_CTX_RESP, &step_resp);
-	info->step_layout = step_resp->step_layout;
+	info->step_layout = _get_slurm_step_layout(job);
 	info->argc = opt.argc;
 	info->argv = opt.argv;
 
@@ -601,7 +644,7 @@ static void _set_cpu_env_var(resource_allocation_response_msg_t *resp)
 	if (getenv("SLURM_JOB_CPUS_PER_NODE"))
 		return;
 
-	tmp = uint32_compressed_to_str((uint32_t)resp->num_cpu_groups,
+	tmp = uint32_compressed_to_str(resp->num_cpu_groups,
 				       resp->cpus_per_node,
 				       resp->cpu_count_reps);
 	if (setenvf(NULL, "SLURM_JOB_CPUS_PER_NODE", "%s", tmp) < 0)
@@ -746,7 +789,7 @@ static int _run_srun_script (srun_job_t *job, char *script)
 		if (waitpid(cpid, &status, 0) < 0) {
 			if (errno == EINTR)
 				continue;
-			error("waidpid: %m");
+			error("waitpid: %m");
 			return 0;
 		} else
 			return status;
@@ -799,14 +842,10 @@ _set_stdio_fds(srun_job_t *job, slurm_step_io_fds_t *cio_fds)
 				fatal("Could not open stdin file: %m");
 		}
 		if (job->ifname->type == IO_ONE) {
-			job_step_create_response_msg_t *step_resp = NULL;
-			
-			slurm_step_ctx_get(job->step_ctx, SLURM_STEP_CTX_RESP,
-					   &step_resp);
-		
 			cio_fds->in.taskid = job->ifname->taskid;
 			cio_fds->in.nodeid = slurm_step_layout_host_id(
-				step_resp->step_layout, job->ifname->taskid);
+				_get_slurm_step_layout(job),
+				job->ifname->taskid);
 		}
 	}
 
@@ -902,9 +941,9 @@ _task_start(launch_tasks_response_msg_t *msg)
 		table->pid = msg->local_pids[i];
 
 		if (msg->return_code == 0) {
-			bit_set(task_state.start_success, taskid);
+			task_state_update(task_state, taskid, TS_START_SUCCESS);
 		} else {
-			bit_set(task_state.start_failure, taskid);
+			task_state_update(task_state, taskid, TS_START_FAILURE);
 		}
 	}
 
@@ -918,6 +957,7 @@ _terminate_job_step(slurm_step_ctx_t *step_ctx)
 	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);
+	update_job_state(job, SRUN_JOB_CANCELLED);
 	slurm_kill_job_step(job_id, step_id, SIGKILL);
 }
 
@@ -925,199 +965,221 @@ static void
 _handle_max_wait(int signo)
 {
 	info("First task exited %ds ago", opt.max_wait);
-	_task_state_struct_print();
+	task_state_print(task_state, (log_f) info);
 	_terminate_job_step(job->step_ctx);
 }
 
 static char *
-_taskids_to_nodelist(bitstr_t *tasks_exited)
+_hostset_to_string(hostset_t hs)
+{
+	size_t n = 1024;
+	size_t maxsize = 1024*64;
+	char *str = NULL;
+
+	do {
+		str = xrealloc(str, n);
+	} while (hostset_ranged_string(hs, n*=2, str) < 0 && (n < maxsize));
+
+	/*
+	 *  If string was truncated, indicate this with a '+' suffix.
+	 */
+	if (n >= maxsize)
+		strcpy(str + (maxsize - 2), "+");
+
+	return str;
+}
+
+/* Convert an array of task IDs into a list of host names
+ * RET: the string, caller must xfree() this value */ 
+static char *
+_task_ids_to_host_list(int ntasks, uint32_t taskids[])
 {
 	int i;
-	char *hostname, *hostlist_str;
-	hostlist_t hostlist;
-	job_step_create_response_msg_t *step_resp;
-	slurm_step_layout_t *step_layout;
-
-	if (!job->step_ctx) {
-		error("No step_ctx");
-		hostlist_str = xstrdup("Unknown");
-		return hostlist_str;
+	hostset_t hs;
+	char *hosts;
+	slurm_step_layout_t *sl;
+
+	if ((sl = _get_slurm_step_layout(job)) == NULL)
+		return (xstrdup("Unknown"));
+
+	hs = hostset_create(NULL);
+	for (i = 0; i < ntasks; i++) {
+		char *host = slurm_step_layout_host_name(sl, taskids[i]);
+		if (host) {
+			hostset_insert(hs, host);
+			free(host);
+		} else {
+			error("Could not identify host name for task %u",
+			      taskids[i]);
+		}
 	}
 
-	slurm_step_ctx_get(job->step_ctx, SLURM_STEP_CTX_RESP, &step_resp);
-	step_layout = step_resp->step_layout;
-	hostlist = hostlist_create(NULL);
-	for (i=0; i<job->ntasks; i++) {
-		if (!bit_test(tasks_exited, i))
-			continue;
-		hostname = slurm_step_layout_host_name(step_layout, i);
-		hostlist_push(hostlist, hostname);
+	hosts = _hostset_to_string(hs);
+	hostset_destroy(hs);
+
+	return (hosts);
+}
+
+/* Convert an array of task IDs into a string.
+ * RET: the string, caller must xfree() this value
+ * NOTE: the taskids array is not necessarily in numeric order, 
+ *       so we use existing bitmap functions to format */
+static char *
+_task_array_to_string(int ntasks, uint32_t taskids[])
+{
+	bitstr_t *tasks_bitmap = NULL;
+	char *str;
+	int i;
+
+	tasks_bitmap = bit_alloc(job->ntasks);
+	if (!tasks_bitmap)
+		fatal("bit_alloc: memory allocation failure");
+	for (i=0; i<ntasks; i++)
+		bit_set(tasks_bitmap, taskids[i]);
+	str = xmalloc(2048);
+	bit_fmt(str, 2048, tasks_bitmap);
+	bit_free(tasks_bitmap);
+
+	return str;
+}
+
+static void
+_update_task_exit_state(uint32_t ntasks, uint32_t taskids[], int abnormal)
+{
+	int i;
+	task_state_type_t t = abnormal ? TS_ABNORMAL_EXIT : TS_NORMAL_EXIT;
+
+	for (i = 0; i < ntasks; i++)
+		task_state_update(task_state, taskids[i], t);
+}
+
+static int _kill_on_bad_exit(void)
+{
+	return (opt.kill_bad_exit || slurm_get_kill_on_bad_exit());
+}
+
+static void _setup_max_wait_timer(void)
+{
+	/*  If these are the first tasks to finish we need to
+	 *   start a timer to kill off the job step if the other
+	 *   tasks don't finish within opt.max_wait seconds.
+	 */
+	verbose("First task exited. Terminating job in %ds.", opt.max_wait);
+	xsignal(SIGALRM, _handle_max_wait);
+	alarm(opt.max_wait);
+}
+
+static const char *
+_taskstr(int n)
+{
+	if (n == 1)
+		return "task";
+	else
+		return "tasks";
+}
+
+static int
+_is_openmpi_port_error(int errcode)
+{
+	if (errcode != OPEN_MPI_PORT_ERROR)
+		return 0;
+	if (opt.resv_port_cnt == NO_VAL)
+		return 0;
+	if (difftime(time(NULL), launch_start_time) > slurm_get_msg_timeout())
+		return 0;
+	return 1;
+}
+
+static void
+_handle_openmpi_port_error(const char *tasks, const char *hosts)
+{
+	char *msg = "retrying";
+
+	if (!retry_step_begin) {
+		retry_step_begin = true;
+		retry_step_cnt++;
+	}
+	if (retry_step_cnt >= MAX_STEP_RETRIES) {
+		msg = "aborting";
+		opt.kill_bad_exit = true;
 	}
-	hostlist_uniq(hostlist);
-	hostlist_str = xmalloc(2048);
-	hostlist_ranged_string(hostlist, 2048, hostlist_str);
-	hostlist_destroy(hostlist);
-	return hostlist_str;
+	error("%s: tasks %s unable to claim reserved port, %s.",
+	      hosts, tasks, msg);
 }
 
 static void
 _task_finish(task_exit_msg_t *msg)
 {
-	bitstr_t *tasks_exited = NULL;
-	char buf[65536], *core_str = "", *msg_str, *node_list = NULL;
-	static bool first_done = true;
-	static bool first_error = true;
+	char *tasks;
+	char *hosts;
 	uint32_t rc = 0;
-	int i;
+	int normal_exit = 0;
+
+	const char *task_str = _taskstr(msg->num_tasks);
+
+	verbose("Received task exit notification for %d %s (status=0x%04x).",
+	      msg->num_tasks, task_str, msg->return_code);
+
+	tasks = _task_array_to_string(msg->num_tasks, msg->task_id_list);
+	hosts = _task_ids_to_host_list(msg->num_tasks, msg->task_id_list);
 
-	verbose("%u tasks finished (rc=%u)",
-		msg->num_tasks, msg->return_code);
-	tasks_exited = bit_alloc(job->ntasks);
-	for (i=0; i<msg->num_tasks; i++)
-		bit_set(tasks_exited,  msg->task_id_list[i]);
-	bit_fmt(buf, sizeof(buf), tasks_exited);
 	if (WIFEXITED(msg->return_code)) {
-		rc = WEXITSTATUS(msg->return_code);
-		if (rc != 0) {
-			bit_or(task_state.finish_abnormal, tasks_exited);
-			node_list = _taskids_to_nodelist(tasks_exited);
-			error("%s: task %s: Exited with exit code %d", 
-			      node_list, buf, rc);
-		} else {
-			bit_or(task_state.finish_normal, tasks_exited);
-			verbose("task %s: Completed", buf);
+		if ((rc = WEXITSTATUS(msg->return_code)) == 0) {
+			verbose("%s: %s %s: Completed", hosts, task_str, tasks);
+			normal_exit = 1;
 		}
-	} else if (WIFSIGNALED(msg->return_code)) {
-		bit_or(task_state.finish_abnormal, tasks_exited);
-		msg_str = strsignal(WTERMSIG(msg->return_code));
+		else if (_is_openmpi_port_error(rc))
+			_handle_openmpi_port_error(tasks, hosts);
+		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;
+	}
+	else if (WIFSIGNALED(msg->return_code)) {
+		const char *signal_str = strsignal(WTERMSIG(msg->return_code));
+		char * core_str = "";
 #ifdef WCOREDUMP
 		if (WCOREDUMP(msg->return_code))
 			core_str = " (core dumped)";
 #endif
-		node_list = _taskids_to_nodelist(tasks_exited);
 		if (job->state >= SRUN_JOB_CANCELLED) {
-			rc = NO_VAL;
-			verbose("%s: task %s: %s%s", 
-				node_list, buf, msg_str, core_str);
+			verbose("%s: %s %s: %s%s",
+				hosts, task_str, tasks, signal_str, core_str);
 		} else {
 			rc = msg->return_code;
-			error("%s: task %s: %s%s", 
-			      node_list, buf, msg_str, core_str);
+			error("%s: %s %s: %s%s",
+			      hosts, task_str, tasks, signal_str, core_str);
 		}
+		if (global_rc == 0)
+			global_rc = msg->return_code;
 	}
-	xfree(node_list);
-	bit_free(tasks_exited);
-	global_rc = MAX(global_rc, rc);
-
-	if (first_error && rc > 0 && opt.kill_bad_exit) {
-		first_error = false;
-		_terminate_job_step(job->step_ctx);
-	} else if (first_done && opt.max_wait > 0) {
-		/* If these are the first tasks to finish we need to
-		 * start a timer to kill off the job step if the other
-		 * tasks don't finish within opt.max_wait seconds.
-		 */
-		first_done = false;
-		debug2("First task has exited");
-		xsignal(SIGALRM, _handle_max_wait);
-		verbose("starting alarm of %d seconds", opt.max_wait);
-		alarm(opt.max_wait);
-	}
-}
 
-static void
-_task_state_struct_init(int num_tasks)
-{
-	task_state.start_success = bit_alloc(num_tasks);
-	task_state.start_failure = bit_alloc(num_tasks);
-	task_state.finish_normal = bit_alloc(num_tasks);
-	task_state.finish_abnormal = bit_alloc(num_tasks);
-}
+	xfree(tasks);
+	xfree(hosts);
 
-/*
- * Tasks will most likely have bits set in multiple of the task_state
- * bit strings (e.g. a task can start normally and then later exit normally)
- * so we ensure that a task is only "seen" once.
- */
-static void
-_task_state_struct_print(void)
-{
-	bitstr_t *tmp, *seen, *not_seen;
-	char buf[65536];
-	int len;
-
-	len = bit_size(task_state.finish_abnormal); /* all the same length */
-	tmp = bit_alloc(len);
-	seen = bit_alloc(len);
-	not_seen = bit_alloc(len);
-	bit_not(not_seen);
-
-	if (bit_set_count(task_state.finish_abnormal) > 0) {
-		bit_copybits(tmp, task_state.finish_abnormal);
-		bit_and(tmp, not_seen);
-		bit_fmt(buf, sizeof(buf), tmp);
-		info("task %s: exited abnormally", buf);
-		bit_or(seen, tmp);
-		bit_copybits(not_seen, seen);
-		bit_not(not_seen);
-	}
-
-	if (bit_set_count(task_state.finish_normal) > 0) {
-		bit_copybits(tmp, task_state.finish_normal);
-		bit_and(tmp, not_seen);
-		bit_fmt(buf, sizeof(buf), tmp);
-		info("task %s: exited", buf);
-		bit_or(seen, tmp);
-		bit_copybits(not_seen, seen);
-		bit_not(not_seen);
-	}
+	_update_task_exit_state(msg->num_tasks, msg->task_id_list,
+			!normal_exit);
 
-	if (bit_set_count(task_state.start_failure) > 0) {
-		bit_copybits(tmp, task_state.start_failure);
-		bit_and(tmp, not_seen);
-		bit_fmt(buf, sizeof(buf), tmp);
-		info("task %s: failed to start", buf);
-		bit_or(seen, tmp);
-		bit_copybits(not_seen, seen);
-		bit_not(not_seen);
-	}
-
-	if (bit_set_count(task_state.start_success) > 0) {
-		bit_copybits(tmp, task_state.start_success);
-		bit_and(tmp, not_seen);
-		bit_fmt(buf, BUFSIZ, tmp);
-		info("task %s: running", buf);
-		bit_or(seen, tmp);
-		bit_copybits(not_seen, seen);
-		bit_not(not_seen);
-	}
-}
+	if (task_state_first_abnormal_exit(task_state) && _kill_on_bad_exit())
+  		_terminate_job_step(job->step_ctx);
 
-static void
-_task_state_struct_free(void)
-{
-	bit_free(task_state.start_success);
-	bit_free(task_state.start_failure);
-	bit_free(task_state.finish_normal);
-	bit_free(task_state.finish_abnormal);
+	if (task_state_first_exit(task_state) && (opt.max_wait > 0))
+		_setup_max_wait_timer();
 }
 
 static void _handle_intr()
 {
 	static time_t last_intr      = 0;
 	static time_t last_intr_sent = 0;
-	if (opt.quit_on_intr) {
-		job_force_termination(job);
-		slurm_step_launch_abort(job->step_ctx);
-		return;
-	}
 
-	if (((time(NULL) - last_intr) > 1) && !opt.disable_status) {
+	if (!opt.quit_on_intr && 
+	    (((time(NULL) - last_intr) > 1) && !opt.disable_status)) {
 		if (job->state < SRUN_JOB_FORCETERM)
 			info("interrupt (one more within 1 sec to abort)");
 		else
 			info("interrupt (abort already in progress)");
-		_task_state_struct_print();
+		task_state_print(task_state, (log_f) info);
 		last_intr = time(NULL);
 	} else  { /* second Ctrl-C in half as many seconds */
 		update_job_state(job, SRUN_JOB_CANCELLED);
diff --git a/src/srun/srun.h b/src/srun/srun.h
index edf3da93b..7822092a5 100644
--- a/src/srun/srun.h
+++ b/src/srun/srun.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/srun/srun_job.c b/src/srun/srun_job.c
index 48f7d5a68..f810f0316 100644
--- a/src/srun/srun_job.c
+++ b/src/srun/srun_job.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <grondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -76,8 +77,8 @@ typedef struct allocation_info {
 	uint32_t                stepid;
 	char                   *nodelist;
 	uint32_t                nnodes;
-	uint16_t                num_cpu_groups;
-	uint32_t               *cpus_per_node;
+	uint32_t                num_cpu_groups;
+	uint16_t               *cpus_per_node;
 	uint32_t               *cpu_count_reps;
 	select_jobinfo_t select_jobinfo;
 } allocation_info_t;
@@ -101,7 +102,7 @@ job_create_noalloc(void)
 {
 	srun_job_t *job = NULL;
 	allocation_info_t *ai = xmalloc(sizeof(*ai));
-	uint32_t cpn = 1;
+	uint16_t cpn = 1;
 	hostlist_t  hl = hostlist_create(opt.nodelist);
 
 	if (!hl) {
@@ -448,7 +449,8 @@ static srun_job_t *
 _job_create_structure(allocation_info_t *ainfo)
 {
 	srun_job_t *job = xmalloc(sizeof(srun_job_t));
-	
+	int i;
+
 	_set_nprocs(ainfo);
 	debug2("creating job with %d tasks", opt.nprocs);
 
@@ -476,12 +478,21 @@ _job_create_structure(allocation_info_t *ainfo)
 			error("Are required nodes explicitly excluded?");
 		}
 		return NULL;
-	}	
+	}
+	if ((ainfo->cpus_per_node == NULL) || 
+	    (ainfo->cpu_count_reps == NULL)) {
+		error("cpus_per_node array is not set");
+		return NULL;
+	}
 #endif
 	job->select_jobinfo = ainfo->select_jobinfo;
 	job->jobid   = ainfo->jobid;
 	
 	job->ntasks  = opt.nprocs;
+	for (i=0; i<ainfo->num_cpu_groups; i++) {
+		job->cpu_count += ainfo->cpus_per_node[i] *
+				  ainfo->cpu_count_reps[i];
+	}
 
 	job->rc       = -1;
 	
diff --git a/src/srun/srun_job.h b/src/srun/srun_job.h
index 200bf9838..a22ca8ada 100644
--- a/src/srun/srun_job.h
+++ b/src/srun/srun_job.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Mark Grondona <mgrondona@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -89,6 +90,7 @@ typedef struct srun_job {
 	uint32_t jobid;		/* assigned job id 	                  */
 	uint32_t stepid;	/* assigned step id 	                  */
 
+	uint32_t cpu_count;	/* allocated CPUs */
 	uint32_t nhosts;	/* node count */
 	uint32_t ntasks;	/* task count */
 	srun_job_state_t state;	/* job state	   	                  */
diff --git a/src/srun/srun_pty.c b/src/srun/srun_pty.c
index 8de090594..34261377e 100644
--- a/src/srun/srun_pty.c
+++ b/src/srun/srun_pty.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette  <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/srun/srun_pty.h b/src/srun/srun_pty.h
index 56e8ded1a..6f473ef5a 100644
--- a/src/srun/srun_pty.h
+++ b/src/srun/srun_pty.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Moe Jette <jette@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/srun/task_state.c b/src/srun/task_state.c
new file mode 100644
index 000000000..d2a1dd9d8
--- /dev/null
+++ b/src/srun/task_state.c
@@ -0,0 +1,193 @@
+/*****************************************************************************\
+ * src/srun/task_state.c - task state container
+ * $Id$
+ *****************************************************************************
+ *  Copyright (C) 2002 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Mark Grondona <mgrondona@llnl.gov>.
+ *  CODE-OCEC-09-009. All rights reserved.
+ *
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and
+ *  distribute linked combinations including the two. You must obey the GNU
+ *  General Public License in all respects for all of the code used other than
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this
+ *  exception to your version of the file(s), but you are not obligated to do
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in
+ *  the program, then also delete it here.
+ *
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <string.h>
+
+#include "src/common/xmalloc.h"
+#include "src/common/bitstring.h"
+#include "src/common/xassert.h"
+
+#include "src/srun/task_state.h"
+
+struct task_state_struct {
+	int n_tasks;
+	int n_started;
+	int n_abnormal;
+	int n_exited;
+	unsigned int first_exit:1;
+	unsigned int first_abnormal_exit:1;
+	bitstr_t *start_failed;
+	bitstr_t *running;
+	bitstr_t *normal_exit;
+	bitstr_t *abnormal_exit;
+};
+
+task_state_t task_state_create (int ntasks)
+{
+	task_state_t ts = xmalloc (sizeof (*ts));
+
+	/* ts is zero filled by xmalloc() */
+	ts->n_tasks = ntasks;
+	ts->running = bit_alloc (ntasks);
+	ts->start_failed = bit_alloc (ntasks);
+	ts->normal_exit = bit_alloc (ntasks);
+	ts->abnormal_exit = bit_alloc (ntasks);
+
+	return (ts);
+}
+
+void task_state_destroy (task_state_t ts)
+{
+	if (ts == NULL)
+		return;
+	if (ts->start_failed)
+		bit_free (ts->start_failed);
+	if (ts->running)
+		bit_free (ts->running);
+	if (ts->normal_exit)
+		bit_free (ts->normal_exit);
+	if (ts->abnormal_exit)
+		bit_free (ts->abnormal_exit);
+	xfree (ts);
+}
+
+static const char *_task_state_type_str (task_state_type_t t)
+{
+	switch (t) {
+	case TS_START_SUCCESS:
+		return ("TS_START_SUCCESS");
+	case TS_START_FAILURE:
+		return ("TS_START_FAILURE");
+	case TS_NORMAL_EXIT:
+		return ("TS_NORMAL_EXIT");
+	case TS_ABNORMAL_EXIT:
+		return ("TS_ABNORMAL_EXIT");
+	}
+	return ("Unknown");
+}
+
+void task_state_update (task_state_t ts, int taskid, task_state_type_t t)
+{
+	xassert (ts != NULL);
+	xassert (taskid >= 0);
+	xassert (taskid < ts->n_tasks);
+
+	debug3("task_state_update(taskid=%d, %s)",
+	       taskid, _task_state_type_str (t));
+
+	switch (t) {
+	case TS_START_SUCCESS:
+		bit_set (ts->running, taskid);
+		ts->n_started++;
+		break;
+	case TS_START_FAILURE:
+		bit_set (ts->start_failed, taskid);
+		break;
+	case TS_NORMAL_EXIT:
+		bit_set (ts->normal_exit, taskid);
+		bit_clear (ts->running, taskid);
+		ts->n_exited++;
+		break;
+	case TS_ABNORMAL_EXIT:
+		bit_clear (ts->running, taskid);
+		bit_set (ts->abnormal_exit, taskid);
+		ts->n_exited++;
+		ts->n_abnormal++;
+		break;
+	}
+
+	xassert ((bit_set_count(ts->abnormal_exit) +
+		  bit_set_count(ts->normal_exit)) == ts->n_exited);
+}
+
+int task_state_first_exit (task_state_t ts)
+{
+	if (!ts->first_exit && ts->n_exited) {
+		ts->first_exit = 1;
+		return (1);
+	}
+	return (0);
+}
+
+int task_state_first_abnormal_exit (task_state_t ts)
+{
+	if (!ts->first_abnormal_exit && ts->n_abnormal) {
+		ts->first_abnormal_exit = 1;
+		return (1);
+	}
+	return (0);
+}
+
+static void _do_log_msg (bitstr_t *b, log_f fn, const char *msg)
+{
+	char buf [65536];
+	char *s = bit_set_count (b) == 1 ? "" : "s";
+	(*fn) ("task%s %s: %s\n", s, bit_fmt (buf, sizeof(buf), b), msg);
+}
+
+void task_state_print (task_state_t ts, log_f fn)
+{
+	bitstr_t *unseen = bit_alloc (ts->n_tasks);
+
+	if (bit_set_count (ts->start_failed)) {
+		_do_log_msg (ts->start_failed, fn, "failed to start");
+		bit_or (unseen, ts->start_failed);
+	}
+	if (bit_set_count (ts->running)) {
+		_do_log_msg (ts->running, fn, "running");
+		bit_or (unseen, ts->running);
+	}
+	if (bit_set_count (ts->abnormal_exit)) {
+		_do_log_msg (ts->abnormal_exit, fn, "exited abnormally");
+		bit_or (unseen, ts->abnormal_exit);
+	}
+	if (bit_set_count (ts->normal_exit)) {
+		_do_log_msg (ts->normal_exit, fn, "exited");
+		bit_or (unseen, ts->normal_exit);
+	}
+	bit_not (unseen);
+	if (bit_set_count (unseen))
+		_do_log_msg (unseen, fn, "unknown");
+	bit_free (unseen);
+}
+
diff --git a/src/srun/task_state.h b/src/srun/task_state.h
new file mode 100644
index 000000000..7309fc9dd
--- /dev/null
+++ b/src/srun/task_state.h
@@ -0,0 +1,66 @@
+/*****************************************************************************\
+ * src/srun/task_state.h - task state container for srun
+ * $Id$
+ *****************************************************************************
+ *  Copyright (C) 2002 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Mark Grondona <mgrondona@llnl.gov>.
+ *  CODE-OCEC-09-009. All rights reserved.
+ *
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and
+ *  distribute linked combinations including the two. You must obey the GNU
+ *  General Public License in all respects for all of the code used other than
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this
+ *  exception to your version of the file(s), but you are not obligated to do
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in
+ *  the program, then also delete it here.
+ *
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef _HAVE_TASK_STATE_H
+#define _HAVE_TASK_STATE_H
+
+typedef struct task_state_struct * task_state_t;
+
+typedef enum {
+	TS_START_SUCCESS,
+	TS_START_FAILURE,
+	TS_NORMAL_EXIT,
+	TS_ABNORMAL_EXIT
+} task_state_type_t;
+
+task_state_t task_state_create (int ntasks);
+
+void task_state_destroy (task_state_t ts);
+
+void task_state_update (task_state_t ts, int taskid, task_state_type_t t);
+
+int task_state_first_exit (task_state_t ts);
+
+int task_state_first_abnormal_exit (task_state_t ts);
+
+typedef void (*log_f) (const char *, ...);
+
+void task_state_print (task_state_t ts, log_f fn);
+
+#endif /* !_HAVE_TASK_STATE_H */
diff --git a/src/srun_cr/Makefile.am b/src/srun_cr/Makefile.am
new file mode 100644
index 000000000..153b01ec9
--- /dev/null
+++ b/src/srun_cr/Makefile.am
@@ -0,0 +1,21 @@
+#
+
+AUTOMAKE_OPTIONS = foreign
+CLEANFILES = core.*
+
+INCLUDES = -I$(top_srcdir) $(BLCR_CPPFLAGS)
+
+bin_PROGRAMS = srun_cr
+
+srun_cr_SOURCES = srun_cr.c
+
+convenience_libs = $(top_builddir)/src/api/libslurm.o -ldl
+
+srun_cr_LDADD = $(convenience_libs) $(BLCR_LIBS)
+
+srun_cr_LDFLAGS = -export-dynamic $(CMD_LDFLAGS) $(BLCR_LDFLAGS)
+
+force:
+$(convenience_libs) : force
+	@cd `dirname $@` && $(MAKE) `basename $@`
+
diff --git a/src/srun_cr/Makefile.in b/src/srun_cr/Makefile.in
new file mode 100644
index 000000000..1daf2da3f
--- /dev/null
+++ b/src/srun_cr/Makefile.in
@@ -0,0 +1,568 @@
+# Makefile.in generated by automake 1.10.1 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@
+bin_PROGRAMS = srun_cr$(EXEEXT)
+subdir = src/srun_cr
+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/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 =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_srun_cr_OBJECTS = srun_cr.$(OBJEXT)
+srun_cr_OBJECTS = $(am_srun_cr_OBJECTS)
+am__DEPENDENCIES_1 = $(top_builddir)/src/api/libslurm.o
+am__DEPENDENCIES_2 =
+srun_cr_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+srun_cr_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(srun_cr_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
+depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(srun_cr_SOURCES)
+DIST_SOURCES = $(srun_cr_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+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@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELAN_LIBS = @ELAN_LIBS@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
+FFLAGS = @FFLAGS@
+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@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_LDFLAGS = @LIB_LDFLAGS@
+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@
+NMEDIT = @NMEDIT@
+NUMA_LIBS = @NUMA_LIBS@
+OBJEXT = @OBJEXT@
+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_F77 = @ac_ct_F77@
+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@
+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_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+CLEANFILES = core.*
+INCLUDES = -I$(top_srcdir) $(BLCR_CPPFLAGS)
+srun_cr_SOURCES = srun_cr.c
+convenience_libs = $(top_builddir)/src/api/libslurm.o -ldl
+srun_cr_LDADD = $(convenience_libs) $(BLCR_LIBS)
+srun_cr_LDFLAGS = -export-dynamic $(CMD_LDFLAGS) $(BLCR_LDFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/srun_cr/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/srun_cr/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
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	     || test -f $$p1 \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+srun_cr$(EXEEXT): $(srun_cr_OBJECTS) $(srun_cr_DEPENDENCIES) 
+	@rm -f srun_cr$(EXEEXT)
+	$(srun_cr_LINK) $(srun_cr_OBJECTS) $(srun_cr_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srun_cr.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+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; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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:  $(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
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+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:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+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-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+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-binPROGRAMS
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS 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-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-binPROGRAMS
+
+
+force:
+$(convenience_libs) : force
+	@cd `dirname $@` && $(MAKE) `basename $@`
+# 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/src/srun_cr/srun_cr.c b/src/srun_cr/srun_cr.c
new file mode 100644
index 000000000..a2a1b0663
--- /dev/null
+++ b/src/srun_cr/srun_cr.c
@@ -0,0 +1,553 @@
+/*****************************************************************************\
+ *  srun_cr.c - Checkpoint/Restart wrapper for srun
+ *****************************************************************************
+ *  Copyright (C) 2009 National University of Defense Technology, China.
+ *  Written by Hongia Cao.
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <stdint.h>
+#include <stdio.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+#include <poll.h>
+#include <pthread.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <sys/wait.h>
+
+#include <libcr.h>
+#include <slurm/slurm.h>
+
+#include "src/common/fd.h"
+#include "src/common/log.h"
+#include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
+
+static char *cr_run_path = BLCR_HOME "/bin/cr_run";
+static char *srun_path = SLURM_PREFIX "/bin/srun";
+
+/* global variables */
+static char **srun_argv = NULL;
+static pid_t srun_pid = 0;
+
+static uint32_t jobid = 0;
+static uint32_t stepid = 0xFFFFFFFF;
+static char *nodelist = NULL;
+
+static char cr_sock_addr[32];
+static int listen_fd = -1;
+
+static int step_launched = 0;
+static pthread_mutex_t step_launch_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t step_launch_cond = PTHREAD_COND_INITIALIZER;
+
+static cr_client_id_t cr_id = -1;
+
+static void remove_listen_socket(void);
+static int  _wait_for_srun_connect(void);
+static void _read_info_from_srun(int srun_fd);
+
+/**************** copied and modified from cr_restart of BLCR ****************/
+static void signal_child (int, siginfo_t *, void *);
+
+static void
+signal_self(int sig)
+{
+	struct sigaction sa;
+
+	/* restore default (in kernel) handler */
+	sa.sa_handler = SIG_DFL;
+	sa.sa_flags = SA_RESTART | SA_NOMASK;
+	sigemptyset(&sa.sa_mask);
+	(void)sigaction(sig, &sa, NULL);
+
+	/* send to self */
+	raise(sig);
+
+	/* restore self as handler */
+	sa.sa_sigaction = &signal_child;
+	sa.sa_flags = SA_RESTART | SA_NOMASK | SA_SIGINFO;
+	(void)sigaction(sig, &sa, NULL);
+}
+
+static void
+signal_child (int sig, siginfo_t *siginfo, void *context)
+{
+	if (srun_pid == 0) {	/* srun not forked yet */
+		signal_self(sig);
+		return;
+	}
+	
+	if ((siginfo->si_code > 0) &&	/* si_code > 0 indicates sent by kernel */
+	    (sig == SIGILL || sig == SIGFPE || 
+	     sig == SIGBUS || sig == SIGSEGV )) {
+		/* This signal is OUR error, so we don't forward */
+		signal_self(sig);
+	} else if (sig == SIGTSTP || sig == SIGTTIN || sig == SIGTTOU) {
+		/* The catchable stop signals go to child AND self */
+		(void)kill(srun_pid, sig);
+		signal_self(sig);
+	} else {
+		/* default case */
+		kill(srun_pid, sig);
+	}
+}
+
+static void
+mimic_exit(int status)
+{
+	if (WIFEXITED(status)) {
+		/* easy to mimic normal return */
+		exit(WEXITSTATUS(status));
+	} else if (WIFSIGNALED(status)) {
+		/* disable generation of a 'core' */
+		struct rlimit r;
+		r.rlim_cur = r.rlim_max = 0;
+		(void)setrlimit(RLIMIT_CORE, &r);
+		
+		/* now raise the signal */
+		signal_self(WTERMSIG(status));
+	} else {
+		error("Unexpected status from child\n");
+		exit(-1);
+	}
+}
+/****************************************************************/
+static void
+on_child_exit(int signum)
+{
+	int status;
+
+	/* 
+  	 * if srun_cr is checkpoint/restart-ed after srun exited, 
+  	 * srun_pid will be the pid of the new srun.
+	 */
+	cr_enter_cs(cr_id);
+	if (waitpid(srun_pid, &status, WNOHANG) == srun_pid) {
+		verbose("srun(%d) exited, status: %d", srun_pid, status);
+		mimic_exit(status);
+	}
+	kill(srun_pid, SIGKILL);
+	cr_leave_cs(cr_id);
+}
+
+static int
+_slurm_debug_env_val (void)
+{
+	long int level = 0;
+	const char *val;
+
+	if ((val = getenv ("SLURM_DEBUG"))) {
+		char *p;
+		if ((level = strtol (val, &p, 10)) < -LOG_LEVEL_INFO)
+			level = -LOG_LEVEL_INFO;
+		if (p && *p != '\0')
+			level = 0;
+	}
+	return ((int) level);
+}
+
+
+static void
+update_env(char *name, char *val)
+{
+	char *buf = NULL;
+
+	xstrfmtcat (buf, "%s=%s", name, val);
+	if (putenv(buf)) {
+		fatal("failed to update env: %m");
+	}
+}
+
+static int
+init_srun_argv(int argc, char **argv)
+{
+	int i;
+	
+	srun_argv = (char **)xmalloc(sizeof(char *) * (argc + 3));
+
+	srun_argv[0] = cr_run_path;
+	srun_argv[1] = "--omit";
+	srun_argv[2] = srun_path;
+	for (i = 1; i < argc; i ++) {
+		srun_argv[i + 2] = argv[i];
+	}
+	srun_argv[argc + 2] = NULL;
+
+	return  0;
+}
+
+/* remove the listen socket file */
+static void
+remove_listen_socket(void)
+{
+	unlink(cr_sock_addr);
+}
+
+/*
+ * create_listen_socket - create a listening UNIX domain socket
+ *     for srun to connect
+ * RETURN: the socket fd on success, -1 on error
+ */
+static int
+create_listen_socket(void)
+{
+	struct sockaddr_un sa;
+	unsigned int sa_len;
+	int re_use_addr = 1;
+
+
+	close (listen_fd);	/* close possible old socket */
+	
+	sprintf(cr_sock_addr, "/tmp/sock.srun_cr.%u", (unsigned int)getpid());
+
+	listen_fd = socket(AF_UNIX, SOCK_STREAM, 0);
+	if (listen_fd < 0) {
+		error("failed to create listen socket: %m");
+		return -1;
+	}
+	
+	sa.sun_family = AF_UNIX;
+	strcpy(sa.sun_path, cr_sock_addr);
+	sa_len = strlen(sa.sun_path) + sizeof(sa.sun_family);
+
+	unlink(sa.sun_path);	/* remove possible old socket */
+
+	setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, 
+		   (void*)&re_use_addr, sizeof(int));
+
+	if (bind(listen_fd, (struct sockaddr *)&sa, sa_len) < 0) {
+		error("failed to bind listen socket: %m");
+		unlink(sa.sun_path);
+		return -1;
+	}
+
+	if (listen(listen_fd, 2) < 0) {
+		error("failed to listen: %m");
+		unlink(sa.sun_path);
+		return -1;
+	}
+
+	fd_set_nonblocking(listen_fd);
+	
+	return listen_fd;
+}
+
+/*
+ * fork_exec_srun - fork and exec srun
+ * GLOBALS cr_argv: arguments for running srun
+ * RETURN: 0 on success, otherwise on error
+ */
+static int
+fork_exec_srun(void)
+{
+	int rc = 0;
+	sigset_t sigset;
+
+	listen_fd = create_listen_socket();
+	if (listen_fd < 0) {
+		return -1;
+	}
+
+	srun_pid = fork();
+	if (srun_pid < 0) {
+		error("failed to fork child process: %m");
+		return -1;
+	} else if (srun_pid == 0) {	/* child */
+		/*
+		 * remove srun from the foreground process group,
+		 * or Ctrl-C will cause SIGINT duplicated
+		 */
+		setpgrp();
+		
+		update_env("SLURM_SRUN_CR_SOCKET", cr_sock_addr);
+
+		/*
+		 * BLCR blocks all signals in thread-context callback functions
+		 */
+		sigemptyset(&sigset);
+		pthread_sigmask(SIG_SETMASK, &sigset, NULL);
+		
+		execv(srun_argv[0], srun_argv);
+		perror("failed execv srun");
+		exit(-1);
+	}
+
+	return rc;
+}
+
+/*
+ * get_step_image_dir - get the dir to store step task images
+ * IN cr: checkpoint/restart
+ * RET image dir on success, NULL on error
+ *
+ * NOTE: only can be called in callbak
+ */
+static char *
+get_step_image_dir(int cr)
+{
+	const struct cr_checkpoint_info *ckpt_info;
+	const struct cr_restart_info *rstrt_info;
+	const char *dest;
+	char *rchar, *dir;
+
+	if (cr) {		/* checkpoint */
+		ckpt_info = cr_get_checkpoint_info();
+		if (!ckpt_info) {
+			error("failed to get checkpoint info: %s", 
+			      cr_strerror(errno));
+			return NULL;
+		}
+		dest = ckpt_info->dest;
+	} else {		/* retart */
+		rstrt_info = cr_get_restart_info();
+		if (!rstrt_info) {
+			error("failed to get restart info: %s", 
+			      cr_strerror(errno));
+			return NULL;
+		}
+		dest = rstrt_info->src;
+	}
+
+	rchar = strrchr(dest, '/');
+	if (rchar) {
+		dir = xstrndup(dest, rchar - dest + 1);
+	}
+	xstrfmtcat(dir, "%u.%u", jobid, stepid);
+
+	return dir;
+}
+
+static int
+cr_callback(void *unused)
+{
+	int rc;
+	char *step_image_dir = NULL;
+
+	rc = CR_CHECKPOINT_READY;
+	if (step_launched) {
+		step_image_dir = get_step_image_dir(1);
+		if (step_image_dir == NULL) {
+			error ("failed to get step image directory");
+			rc = CR_CHECKPOINT_PERM_FAILURE;
+		} else if (slurm_checkpoint_tasks(jobid,
+						  stepid,
+						  time(NULL), /* timestamp */
+						  step_image_dir,
+						  60, /* wait */
+						  nodelist) != SLURM_SUCCESS) {
+			error ("failed to checkpoint step tasks");
+			rc = CR_CHECKPOINT_PERM_FAILURE;
+		}
+		xfree(step_image_dir);
+	}
+	rc = cr_checkpoint(rc);	/* dump */
+	
+	if (rc < 0) {
+		fatal("checkpoint failed: %s", cr_strerror(errno));
+	} else if (rc == 0) {
+		/* continue, nothing to do */
+	} else {
+		/* restarted */
+		if (srun_pid) { /* srun forked */
+			if (step_launched) {
+				step_image_dir = get_step_image_dir(0);
+				if (step_image_dir == NULL) {
+					fatal("failed to get step image directory");
+				}
+				update_env("SLURM_RESTART_DIR", step_image_dir);
+				xfree(step_image_dir);
+			}
+
+			if (fork_exec_srun()) {
+				fatal("failed fork/exec srun");
+			}
+		}
+
+		/* XXX: step_launched => listen_fd valid */
+		step_launched = 0;
+		
+		debug2("step not launched.");
+
+		pthread_cond_broadcast(&step_launch_cond);
+	}
+
+	return 0;
+}
+
+int 
+main(int argc, char **argv)
+{
+	int debug_level, sig, srun_fd;
+	struct sigaction sa;
+	log_options_t logopt = LOG_OPTS_STDERR_ONLY;
+	struct sockaddr_un ca;
+	unsigned int ca_len = sizeof(ca);
+
+	atexit(remove_listen_socket);
+	
+	/* copied from srun */
+	debug_level = _slurm_debug_env_val();
+	logopt.stderr_level += debug_level;
+	log_init(xbasename(argv[0]), logopt, 0, NULL);
+
+	if (init_srun_argv(argc, argv)) {
+		fatal("failed to initialize arguments for running srun");
+	}
+	
+	if ((cr_id = cr_init()) < 0) {
+		fatal("failed to initialize libcr: %s", cr_strerror(errno));
+	}
+	(void)cr_register_callback(cr_callback, NULL, CR_THREAD_CONTEXT);
+	
+	/* forward signals. copied from cr_restart */
+	sa.sa_sigaction = signal_child;
+	sa.sa_flags = SA_RESTART | SA_NODEFER | SA_SIGINFO;
+	sigemptyset(&sa.sa_mask);
+	for (sig = 0;  sig < _NSIG; sig ++) {
+		if (sig == SIGSTOP ||
+		    sig == SIGKILL ||
+		    sig == SIGCHLD)
+			continue;
+		sigaction(sig, &sa, NULL);
+	}
+	sa.sa_sigaction = on_child_exit;
+	sa.sa_flags = SA_RESTART | SA_SIGINFO | SA_NOCLDSTOP;
+	sigaction(SIGCHLD, &sa, NULL);
+
+	cr_enter_cs(cr_id); /* BEGIN CS: avoid race condition of whether srun is forked */
+	if ( fork_exec_srun() ) {
+		fatal("failed fork/exec/wait srun");
+	}
+	cr_leave_cs(cr_id); /* END CS */
+
+	while (1) {
+		pthread_mutex_lock(&step_launch_mutex);
+		while (step_launched) {
+			/* just avoid busy waiting */
+			pthread_cond_wait(&step_launch_cond, 
+					  &step_launch_mutex);
+		}
+		pthread_mutex_unlock(&step_launch_mutex);
+
+		if (_wait_for_srun_connect() < 0)
+			continue;
+
+		cr_enter_cs(cr_id); /* BEGIN CS: checkpoint(callback) will be delayed */
+
+		srun_fd = accept(listen_fd, (struct sockaddr*)&ca, &ca_len);
+		if (srun_fd < 0) {
+			/* restarted before enter CS. socket will not be restored */
+			if (errno == EBADF) { 
+				cr_leave_cs(cr_id);
+				continue;
+			} else {
+				fatal("failed to accept socket: %m");
+			}
+		}
+
+		_read_info_from_srun(srun_fd);
+		close(srun_fd);
+		
+		step_launched = 1;
+		debug2("step launched");
+
+		cr_leave_cs(cr_id); /* END CS */
+	}
+
+	return 0;
+}
+
+static int
+_wait_for_srun_connect(void)
+{
+	struct pollfd fds[1];
+	int rc;
+
+	fds[0].fd = listen_fd;
+	fds[0].events = POLLIN;
+
+	while ((rc = poll(fds, 1, -1)) < 0) {
+		switch (errno) {
+		case EAGAIN:
+		case EINTR:
+			continue;
+		case EBADF:	/* restarted */
+			return -1;
+		case ENOMEM:
+		case EINVAL:
+		case EFAULT:
+			fatal("poll: %m");
+		default:
+			error("poll: %m. Continuing...");
+		}
+	}
+	return 0;
+}
+
+static void
+_read_info_from_srun(int srun_fd)
+{
+	int len;
+	
+	if (read(srun_fd, &jobid, sizeof(uint32_t)) != sizeof(uint32_t)) {
+		fatal("failed to read jobid: %m");
+	}
+
+	if (read(srun_fd, &stepid, sizeof(uint32_t)) != sizeof(uint32_t)) {
+		fatal("failed to read stepid: %m");
+	}
+
+	if (read(srun_fd, &len, sizeof(int)) != sizeof(int)) {
+		fatal("failed to read nodelist length: %m");
+	}
+
+	xfree(nodelist);
+	nodelist = (char *)xmalloc(len + 1);
+	if (!nodelist) {
+		fatal("failed to malloc nodelist: %m");
+	}
+	if (read(srun_fd, nodelist, len + 1) != len + 1) {
+		fatal("failed to read nodelist: %m");
+	}
+}
diff --git a/src/sshare/Makefile.am b/src/sshare/Makefile.am
new file mode 100644
index 000000000..cb7a8feff
--- /dev/null
+++ b/src/sshare/Makefile.am
@@ -0,0 +1,22 @@
+# Makefile for sshare
+
+AUTOMAKE_OPTIONS = foreign
+CLEANFILES = core.*
+
+INCLUDES = -I$(top_srcdir)
+
+bin_PROGRAMS = sshare
+
+sshare_LDADD =  \
+	$(top_builddir)/src/api/libslurm.o -ldl\
+	$(READLINE_LIBS)
+
+sshare_SOURCES =	\
+	process.c               \
+	sshare.c sshare.h	
+
+sshare_LDFLAGS = -export-dynamic $(CMD_LDFLAGS)
+
+force:
+$(sshare_LDADD) : force
+	@cd `dirname $@` && $(MAKE) `basename $@`
diff --git a/src/sshare/Makefile.in b/src/sshare/Makefile.in
new file mode 100644
index 000000000..cd9fbba6f
--- /dev/null
+++ b/src/sshare/Makefile.in
@@ -0,0 +1,574 @@
+# Makefile.in generated by automake 1.10.1 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@
+
+# Makefile for sshare
+
+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@
+bin_PROGRAMS = sshare$(EXEEXT)
+subdir = src/sshare
+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/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 =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_sshare_OBJECTS = process.$(OBJEXT) sshare.$(OBJEXT)
+sshare_OBJECTS = $(am_sshare_OBJECTS)
+am__DEPENDENCIES_1 =
+sshare_DEPENDENCIES = $(top_builddir)/src/api/libslurm.o \
+	$(am__DEPENDENCIES_1)
+sshare_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(sshare_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
+depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(sshare_SOURCES)
+DIST_SOURCES = $(sshare_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+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@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ELAN_LIBS = @ELAN_LIBS@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FEDERATION_LDFLAGS = @FEDERATION_LDFLAGS@
+FFLAGS = @FFLAGS@
+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@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_LDFLAGS = @LIB_LDFLAGS@
+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@
+NMEDIT = @NMEDIT@
+NUMA_LIBS = @NUMA_LIBS@
+OBJEXT = @OBJEXT@
+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_F77 = @ac_ct_F77@
+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@
+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_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign
+CLEANFILES = core.*
+INCLUDES = -I$(top_srcdir)
+sshare_LDADD = \
+	$(top_builddir)/src/api/libslurm.o -ldl\
+	$(READLINE_LIBS)
+
+sshare_SOURCES = \
+	process.c               \
+	sshare.c sshare.h	
+
+sshare_LDFLAGS = -export-dynamic $(CMD_LDFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/sshare/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  src/sshare/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
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	     || test -f $$p1 \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+sshare$(EXEEXT): $(sshare_OBJECTS) $(sshare_DEPENDENCIES) 
+	@rm -f sshare$(EXEEXT)
+	$(sshare_LINK) $(sshare_OBJECTS) $(sshare_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sshare.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+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; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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:  $(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
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+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:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+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-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+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-binPROGRAMS
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS 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-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-binPROGRAMS
+
+
+force:
+$(sshare_LDADD) : force
+	@cd `dirname $@` && $(MAKE) `basename $@`
+# 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/src/sshare/process.c b/src/sshare/process.c
new file mode 100644
index 000000000..c32c4c569
--- /dev/null
+++ b/src/sshare/process.c
@@ -0,0 +1,267 @@
+/*****************************************************************************\
+ *  process.c -  process the return from get_share_info. 
+ *****************************************************************************
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include "src/sshare/sshare.h"
+
+extern int long_flag;
+
+extern int process(shares_response_msg_t *resp)
+{
+	int rc = SLURM_SUCCESS;
+	association_shares_object_t *assoc = NULL;
+	ListIterator itr = NULL;
+	ListIterator itr2 = NULL;
+	char *object = NULL;
+	char *print_acct = NULL;
+	List tree_list = NULL;
+
+	int field_count = 0;
+
+	print_field_t *field = NULL;
+
+	List format_list = list_create(slurm_destroy_char);
+	List print_fields_list; /* types are of print_field_t */
+
+	enum {
+		PRINT_ACCOUNT,
+		PRINT_CLUSTER,
+		PRINT_EUSED,
+		PRINT_FSFACTOR,
+		PRINT_ID,
+		PRINT_NORMS,
+		PRINT_NORMU,
+		PRINT_RAWS,
+		PRINT_RAWU,
+		PRINT_USER,
+	};
+
+	if(!resp)
+		return SLURM_ERROR;
+
+	format_list = list_create(slurm_destroy_char);
+	if (long_flag) {
+		slurm_addto_char_list(format_list,
+				      "A,User,RawShares,NormShares,"
+				      "RawUsage,NormUsage,EffUsage,"
+				      "FSFctr");
+	} else {
+		slurm_addto_char_list(format_list,
+				      "A,User,RawShares,NormShares,"
+				      "RawUsage,EffUsage,FSFctr");
+	}
+
+	print_fields_list = list_create(destroy_print_field);
+
+	itr = list_iterator_create(format_list);
+	while((object = list_next(itr))) {
+		char *tmp_char = NULL;
+		field = xmalloc(sizeof(print_field_t));
+		if(!strncasecmp("Account", object, 1)) {
+			field->type = PRINT_ACCOUNT;
+			field->name = xstrdup("Account");
+			field->len = -20;
+			field->print_routine = print_fields_str;
+		} else if(!strncasecmp("Cluster", object, 1)) {
+			field->type = PRINT_CLUSTER;
+			field->name = xstrdup("Cluster");
+			field->len = 10;
+			field->print_routine = print_fields_str;
+		} else if(!strncasecmp("EffUsage", object, 1)) {
+			field->type = PRINT_EUSED;
+			field->name = xstrdup("Effectv Usage");
+			field->len = 13;
+			field->print_routine = print_fields_double;
+		} else if(!strncasecmp("FSFctr", object, 1)) {
+			field->type = PRINT_FSFACTOR;
+			field->name = xstrdup("Fair-share");
+			field->len = 10;
+			field->print_routine = print_fields_double;
+		} else if(!strncasecmp("ID", object, 1)) {
+			field->type = PRINT_ID;
+			field->name = xstrdup("ID");
+			field->len = 6;
+			field->print_routine = print_fields_uint;
+		} else if(!strncasecmp("NormShares", object, 5)) {
+			field->type = PRINT_NORMS;
+			field->name = xstrdup("Norm Shares");
+			field->len = 11;
+			field->print_routine = print_fields_double;
+		} else if(!strncasecmp("NormUsage", object, 5)) {
+			field->type = PRINT_NORMU;
+			field->name = xstrdup("Norm Usage");
+			field->len = 11;
+			field->print_routine = print_fields_double;
+		} else if(!strncasecmp("RawShares", object, 4)) {
+			field->type = PRINT_RAWS;
+			field->name = xstrdup("Raw Shares");
+			field->len = 10;
+			field->print_routine = print_fields_uint32;
+		} else if(!strncasecmp("RawUsage", object, 4)) {
+			field->type = PRINT_RAWU;
+			field->name = xstrdup("Raw Usage");
+			field->len = 11;
+			field->print_routine = print_fields_uint64;
+		} else if(!strncasecmp("User", object, 1)) {
+			field->type = PRINT_USER;
+			field->name = xstrdup("User");
+			field->len = 10;
+			field->print_routine = print_fields_str;
+		} else {
+			exit_code=1;
+			fprintf(stderr, "Unknown field '%s'\n", object);
+			exit(1);
+			xfree(field);
+			continue;
+		}
+		if((tmp_char = strstr(object, "\%"))) {
+			int newlen = atoi(tmp_char+1);
+			if(newlen) 
+				field->len = newlen;
+		}
+		list_append(print_fields_list, field);
+	}
+	list_iterator_destroy(itr);
+	list_destroy(format_list);
+
+	if(exit_code) {
+		list_destroy(print_fields_list);
+		return SLURM_ERROR;
+	}
+
+	itr2 = list_iterator_create(print_fields_list);
+	print_fields_header(print_fields_list);
+
+	field_count = list_count(print_fields_list);
+
+	if(!resp->assoc_shares_list || !list_count(resp->assoc_shares_list))
+		return SLURM_SUCCESS;
+	tree_list = list_create(destroy_acct_print_tree);
+	itr = list_iterator_create(resp->assoc_shares_list);
+	while((assoc = list_next(itr))) {
+		int curr_inx = 1;
+		char *tmp_char = NULL;
+		char *local_acct = NULL;
+
+		while((field = list_next(itr2))) {
+			switch(field->type) {
+			case PRINT_ACCOUNT:
+				if(assoc->user) 
+					local_acct = xstrdup_printf(
+						"|%s", assoc->name);
+				else 
+					local_acct = xstrdup(assoc->name);
+				
+				print_acct = get_tree_acct_name(
+					local_acct,
+					assoc->parent, tree_list);
+				xfree(local_acct);
+				field->print_routine(
+					field, 
+					print_acct,
+					(curr_inx == field_count));
+				break;
+			case PRINT_CLUSTER:
+				field->print_routine(
+					field,
+					assoc->cluster,
+					(curr_inx == field_count));
+				break;
+			case PRINT_EUSED:
+				field->print_routine(field, 
+						     assoc->usage_efctv,
+						     (curr_inx == field_count));
+				break;
+			case PRINT_FSFACTOR:
+				field->print_routine(field,
+						     (assoc->shares_norm -
+						     (double)assoc->usage_efctv
+						      + 1.0) / 2.0,
+						     (curr_inx == field_count));
+				break;
+			case PRINT_ID:
+				field->print_routine(field, 
+						     assoc->assoc_id,
+						     (curr_inx == field_count));
+				break;
+			case PRINT_NORMS:
+				field->print_routine(field, 
+						     assoc->shares_norm,
+						     (curr_inx == field_count));
+				break;
+			case PRINT_NORMU:
+				field->print_routine(field,
+						     assoc->usage_norm,
+						     (curr_inx == field_count));
+				break;
+			case PRINT_RAWS:
+				field->print_routine(field,
+						     assoc->shares_raw,
+						     (curr_inx == field_count));
+				break;
+			case PRINT_RAWU:
+				field->print_routine(field, 
+						     assoc->usage_raw,
+						     (curr_inx == field_count));
+				break;
+			case PRINT_USER:
+				if(assoc->user)
+					tmp_char = assoc->name;
+				field->print_routine(field, 
+						     tmp_char,
+						     (curr_inx == field_count));
+				break;
+			default:
+				field->print_routine(
+					field, NULL,
+					(curr_inx == field_count));
+				break;
+			}
+			curr_inx++;
+		}
+		list_iterator_reset(itr2);
+		printf("\n");
+	}
+
+	if(tree_list) 
+		list_destroy(tree_list);
+			
+	list_iterator_destroy(itr2);
+	list_iterator_destroy(itr);
+	list_destroy(print_fields_list);
+	return rc;
+}
diff --git a/src/sshare/sshare.c b/src/sshare/sshare.c
new file mode 100644
index 000000000..094deef17
--- /dev/null
+++ b/src/sshare/sshare.c
@@ -0,0 +1,420 @@
+/*****************************************************************************\
+ *  sshare.c -   tool for listing the shares of association in
+ *               relationship to the cluster running on. 
+ *****************************************************************************
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#include "src/sshare/sshare.h"
+#include <grp.h>
+
+
+#define BUFFER_SIZE 4096
+#define OPT_LONG_HELP  0x100
+#define OPT_LONG_USAGE 0x101
+
+int exit_code;		/* sshare's exit code, =1 on any error at any time */
+int quiet_flag;		/* quiet=1, verbose=-1, normal=0 */
+int long_flag;		/* exceeds 80 character limit with more info */
+int verbosity;		/* count of -v options */
+uint32_t my_uid = 0;
+
+static int      _get_info(shares_request_msg_t *shares_req, 
+			  shares_response_msg_t **shares_resp);
+static int      _addto_name_char_list(List char_list, char *names, bool gid);
+static char *   _convert_to_name(int id, bool gid);
+static void     _print_version( void );
+static void	_usage ();
+
+int 
+main (int argc, char *argv[]) 
+{
+	int error_code = SLURM_SUCCESS, opt_char;
+	log_options_t opts = LOG_OPTS_STDERR_ONLY;
+	shares_request_msg_t req_msg;
+	shares_response_msg_t *resp_msg = NULL;
+	char *temp = NULL;
+	int option_index;
+	bool all_users = 0;
+
+	static struct option long_options[] = {
+		{"accounts", 1, 0, 'A'},
+		{"all",      0, 0, 'a'},
+		{"long",     0, 0, 'l'},
+		{"noheader", 0, 0, 'h'},
+		{"parsable", 0, 0, 'p'},
+		{"parsable2",0, 0, 'P'},
+		{"users",    1, 0, 'u'},
+		{"verbose",  0, 0, 'v'},
+		{"version",  0, 0, 'V'},
+		{"help",     0, 0, OPT_LONG_HELP},
+		{"usage",    0, 0, OPT_LONG_USAGE},
+		{NULL,       0, 0, 0}
+	};
+
+	/* Check to see if we are running a supported accounting plugin */
+	temp = slurm_get_priority_type();
+	if(strcasecmp(temp, "priority/multifactor")) {
+		fprintf (stderr, "You are not running a supported "
+			 "priority plugin\n(%s).\n"
+			 "Only 'priority/multifactor' is supported.\n",
+			temp);
+		xfree(temp);
+		exit(1);
+	}
+	xfree(temp);
+
+	exit_code         = 0;
+	long_flag	  = 0;
+	quiet_flag        = 0;
+	verbosity         = 0;
+	memset(&req_msg, 0, sizeof(shares_request_msg_t));
+	log_init("sshare", opts, SYSLOG_FACILITY_DAEMON, NULL);
+
+	while((opt_char = getopt_long(argc, argv, "aA:hlnpPqu:t:vV",
+			long_options, &option_index)) != -1) {
+		switch (opt_char) {
+		case (int)'?':
+			fprintf(stderr, "Try \"sshare --help\" "
+				"for more information\n");
+			exit(1);
+			break;
+		case 'a':
+			all_users = 1;
+			break;
+		case 'A':
+			if(!req_msg.acct_list) 
+				req_msg.acct_list =
+					list_create(slurm_destroy_char);
+			slurm_addto_char_list(req_msg.acct_list, optarg);
+			break;
+		case 'h':
+			print_fields_have_header = 0;
+			break;
+			exit(exit_code);
+			break;
+		case 'l':
+			long_flag = 1;
+			break;
+		case 'n':
+			print_fields_have_header = 0;
+			break;
+		case 'p':
+			print_fields_parsable_print = 
+			PRINT_FIELDS_PARSABLE_ENDING;
+			break;
+		case 'P':
+			print_fields_parsable_print =
+			PRINT_FIELDS_PARSABLE_NO_ENDING;
+			break;
+		case 'u':
+			if(!strcmp(optarg, "-1")) {
+				all_users = 1;
+				break;
+			}
+			all_users = 0;
+			if(!req_msg.user_list)
+				req_msg.user_list = 
+					list_create(slurm_destroy_char);
+			_addto_name_char_list(req_msg.user_list, optarg, 0);
+			break;
+		case 'v':
+			quiet_flag = -1;
+			verbosity++;
+			break;
+		case 'V':
+			_print_version();
+			exit(exit_code);
+			break;
+		case OPT_LONG_HELP:
+		case OPT_LONG_USAGE:
+			_usage();
+			exit(0);
+		default:
+			exit_code = 1;
+			fprintf(stderr, "getopt error, returned %c\n", 
+				opt_char);
+			exit(exit_code);
+		}
+	}
+
+	if (verbosity) {
+		opts.stderr_level += verbosity;
+		opts.prefix_level = 1;
+		log_alter(opts, 0, NULL);
+	}
+
+	if(all_users) {
+		if(req_msg.user_list 
+		   && list_count(req_msg.user_list)) {
+			list_destroy(req_msg.user_list);
+			req_msg.user_list = NULL;
+		}
+		if(verbosity)
+			fprintf(stderr, "Users requested:\n\t: all\n");
+	} else if (verbosity && req_msg.user_list 
+	    && list_count(req_msg.user_list)) {
+		fprintf(stderr, "Users requested:\n");
+		ListIterator itr = list_iterator_create(req_msg.user_list);
+		while((temp = list_next(itr))) 
+			fprintf(stderr, "\t: %s\n", temp);
+		list_iterator_destroy(itr);
+	} else if(!req_msg.user_list || !list_count(req_msg.user_list)) {
+		struct passwd *pwd = getpwuid(getuid());
+		if(!req_msg.user_list)
+			req_msg.user_list = list_create(slurm_destroy_char);
+		temp = xstrdup(pwd->pw_name);
+		list_append(req_msg.user_list, temp);
+		if(verbosity) {
+			fprintf(stderr, "Users requested:\n");
+			fprintf(stderr, "\t: %s\n", temp);
+		}
+	}
+
+	if(req_msg.acct_list && list_count(req_msg.acct_list)) {
+		fprintf(stderr, "Accounts requested:\n");
+		ListIterator itr = list_iterator_create(req_msg.acct_list);
+		while((temp = list_next(itr))) 
+			fprintf(stderr, "\t: %s\n", temp);
+		list_iterator_destroy(itr);
+	} else {
+		if(req_msg.acct_list 
+		   && list_count(req_msg.acct_list)) {
+			list_destroy(req_msg.acct_list);
+			req_msg.acct_list = NULL;
+		}
+		if(verbosity)
+			fprintf(stderr, "Accounts requested:\n\t: all\n");
+
+	}
+
+	error_code = _get_info(&req_msg, &resp_msg);
+
+	if(req_msg.acct_list)
+		list_destroy(req_msg.acct_list);
+	if(req_msg.user_list)
+		list_destroy(req_msg.user_list);
+
+	if (error_code) {
+		slurm_perror("Couldn't get shares from controller");
+		exit(error_code);
+	}
+
+	/* do stuff with it */
+	process(resp_msg);
+
+	slurm_free_shares_response_msg(resp_msg);
+
+	exit(exit_code);
+}
+
+static int _get_info(shares_request_msg_t *shares_req, 
+		     shares_response_msg_t **shares_resp)
+{
+	int rc;
+        slurm_msg_t req_msg;
+        slurm_msg_t resp_msg;
+
+	slurm_msg_t_init(&req_msg);
+	slurm_msg_t_init(&resp_msg);
+
+        req_msg.msg_type = REQUEST_SHARE_INFO;
+        req_msg.data     = shares_req;
+	
+	if (slurm_send_recv_controller_msg(&req_msg, &resp_msg) < 0)
+		return SLURM_ERROR;
+	
+	switch (resp_msg.msg_type) {
+	case RESPONSE_SHARE_INFO:
+		*shares_resp = (shares_response_msg_t *) resp_msg.data;
+		break;
+	case RESPONSE_SLURM_RC:
+		rc = ((return_code_msg_t *) resp_msg.data)->return_code;
+		slurm_free_return_code_msg(resp_msg.data);	
+		if (rc) 
+			slurm_seterrno_ret(rc);
+		*shares_resp = NULL;
+		break;
+	default:
+		slurm_seterrno_ret(SLURM_UNEXPECTED_MSG_ERROR);
+		break;
+	}
+
+	return SLURM_PROTOCOL_SUCCESS;  	
+}
+
+/* returns number of objects added to list */
+static int _addto_name_char_list(List char_list, char *names, bool gid)
+{
+	int i=0, start=0;
+	char *name = NULL, *tmp_char = NULL;
+	ListIterator itr = NULL;
+	char quote_c = '\0';
+	int quote = 0;
+	int count = 0;
+
+	if(!char_list) {
+		error("No list was given to fill in");
+		return 0;
+	}
+
+	itr = list_iterator_create(char_list);
+	if(names) {
+		if (names[i] == '\"' || names[i] == '\'') {
+			quote_c = names[i];
+			quote = 1;
+			i++;
+		}
+		start = i;
+		while(names[i]) {
+			//info("got %d - %d = %d", i, start, i-start);
+			if(quote && names[i] == quote_c)
+				break;
+			else if (names[i] == '\"' || names[i] == '\'')
+				names[i] = '`';
+			else if(names[i] == ',') {
+				if((i-start) > 0) {
+					name = xmalloc((i-start+1));
+					memcpy(name, names+start, (i-start));
+					//info("got %s %d", name, i-start);
+					if (isdigit((int) *name)) {
+						int id = atoi(name);
+						xfree(name);
+						name = _convert_to_name(
+							id, gid);
+					}
+					
+					while((tmp_char = list_next(itr))) {
+						if(!strcasecmp(tmp_char, name))
+							break;
+					}
+
+					if(!tmp_char) {
+						list_append(char_list, name);
+						count++;
+					} else 
+						xfree(name);
+					list_iterator_reset(itr);
+				}
+				i++;
+				start = i;
+				if(!names[i]) {
+					info("There is a problem with "
+					     "your request.  It appears you "
+					     "have spaces inside your list.");
+					break;
+				}
+			}
+			i++;
+		}
+		if((i-start) > 0) {
+			name = xmalloc((i-start)+1);
+			memcpy(name, names+start, (i-start));
+			
+			if (isdigit((int) *name)) {
+				int id = atoi(name);
+				xfree(name);
+				name = _convert_to_name(id, gid);
+			}
+			
+			while((tmp_char = list_next(itr))) {
+				if(!strcasecmp(tmp_char, name))
+					break;
+			}
+			
+			if(!tmp_char) {
+				list_append(char_list, name);
+				count++;
+			} else 
+				xfree(name);
+		}
+	}	
+	list_iterator_destroy(itr);
+	return count;
+} 
+
+static char *_convert_to_name(int id, bool gid)
+{
+	char *name = NULL;
+
+	if(gid) {
+		struct group *grp;
+		if (!(grp=getgrgid(id))) {
+			fprintf(stderr, "Invalid group id: %s\n", name);
+			exit(1);
+		}
+		name = xstrdup(grp->gr_name);
+	} else {
+		struct passwd *pwd;
+		if (!(pwd=getpwuid(id))) {
+			fprintf(stderr, "Invalid user id: %s\n", name);
+			exit(1);
+		}
+		name = xstrdup(pwd->pw_name);
+	}
+	return name;
+}
+
+static void _print_version(void)
+{
+	printf("%s %s\n", PACKAGE, SLURM_VERSION);
+	if (quiet_flag == -1) {
+		long version = slurm_api_version();
+		printf("slurm_api_version: %ld, %ld.%ld.%ld\n", version,
+			SLURM_VERSION_MAJOR(version), 
+			SLURM_VERSION_MINOR(version),
+			SLURM_VERSION_MICRO(version));
+	}
+}
+
+/* _usage - show the valid sshare options */
+void _usage () {
+	printf ("\
+Usage:  sshare [OPTION]                                                    \n\
+  Valid OPTIONs are:                                                       \n\
+    -a or --all            list all users                                  \n\
+    -A or --accounts=      display specific accounts (comma separated list)\n\
+    -h or --noheader       omit header from output                         \n\
+    -l or --long           include normalized usage in output              \n\
+    -p or --parsable       '|' delimited output with a trailing '|'        \n\
+    -P or --parsable2      '|' delimited output without a trailing '|'     \n\
+    -u or --users=         display specific users (comma separated list)   \n\
+    -v or --verbose        display more information                        \n\
+    -V or --version        display tool version number                     \n\
+          --help           display this usage description                  \n\
+          --usage          display this usage description                  \n\
+                                                                           \n\n");
+}
+
diff --git a/src/sshare/sshare.h b/src/sshare/sshare.h
new file mode 100644
index 000000000..2be0a071d
--- /dev/null
+++ b/src/sshare/sshare.h
@@ -0,0 +1,103 @@
+/*****************************************************************************\
+ *  sshare.h - definitions for all sshare modules.
+ *****************************************************************************
+ *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2002-2007 The Regents of the University of California.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *
+ *  In addition, as a special exception, the copyright holders give permission 
+ *  to link the code of portions of this program with the OpenSSL library under
+ *  certain conditions as described in each individual source file, and 
+ *  distribute linked combinations including the two. You must obey the GNU 
+ *  General Public License in all respects for all of the code used other than 
+ *  OpenSSL. If you modify file(s) with this exception, you may extend this 
+ *  exception to your version of the file(s), but you are not obligated to do 
+ *  so. If you do not wish to do so, delete this exception statement from your
+ *  version.  If you delete this exception statement from all source files in 
+ *  the program, then also delete it here.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+
+#ifndef __SSHARE_H__
+#define __SSHARE_H__
+
+#if HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#if HAVE_GETOPT_H
+#  include <getopt.h>
+#else
+#  include "src/common/getopt.h"
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_STRING_H
+#  include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+#  include <strings.h>
+#endif
+#include <time.h>
+#include <unistd.h>
+
+#if HAVE_READLINE
+#  include <readline/readline.h>
+#  include <readline/history.h>
+#endif
+
+#if HAVE_INTTYPES_H
+#  include <inttypes.h>
+#else  /* !HAVE_INTTYPES_H */
+#  if HAVE_STDINT_H
+#    include <stdint.h>
+#  endif
+#endif  /* HAVE_INTTYPES_H */
+
+#include <slurm/slurm.h>
+
+#include "src/common/parse_time.h"
+#include "src/common/slurm_accounting_storage.h"
+#include "src/common/xstring.h"
+#include "src/common/print_fields.h"
+
+#define CKPT_WAIT	10
+#define	MAX_INPUT_FIELDS 128
+
+typedef enum {
+	SSHARE_TIME_SECS,
+	SSHARE_TIME_MINS,
+	SSHARE_TIME_HOURS,
+} sshare_time_format_t;
+
+extern int exit_code;	/* sshare's exit code, =1 on any error at any time */
+extern int quiet_flag;	/* quiet=1, verbose=-1, normal=0 */
+extern uint32_t my_uid;
+extern sshare_time_format_t time_format;
+extern char *time_format_string;
+
+extern int process(shares_response_msg_t *msg);
+
+#endif
diff --git a/src/sstat/Makefile.in b/src/sstat/Makefile.in
index 41bd7d93c..65356e250 100644
--- a/src/sstat/Makefile.in
+++ b/src/sstat/Makefile.in
@@ -46,14 +46,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -108,6 +112,10 @@ 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@
diff --git a/src/sstat/options.c b/src/sstat/options.c
index 531679409..9b116545d 100644
--- a/src/sstat/options.c
+++ b/src/sstat/options.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -53,9 +54,9 @@ void _help_fields_msg(void)
 	for (i = 0; fields[i].name; i++) {
 		if (i & 3)
 			printf("  ");
-		else
+		else if(i)
 			printf("\n");
-		printf("%-10s", fields[i].name);
+		printf("%-12s", fields[i].name);
 	}
 	printf("\n");
 	return;
@@ -63,40 +64,45 @@ void _help_fields_msg(void)
 
 void _help_msg(void)
 {
-	printf("\n"
-	       "By default, sstat displays status data for job/step stated\n"
-	       "Options:\n"
-	       "-a, --allsteps\n"
-	       "-C, --cluster\n"
-	       "    Job is running on this cluster.\n"
-	       "-F <field-list>, --fields=<field-list>\n"
-	       "    Display the specified data (use \"--help-fields\" for a\n"
-	       "    list of available fields). If no field option is specified,\n"
-	       "    we use \"--fields=jobid,vsize,rss,pages,cputime,ntasks,state\".\n"
-	       "-h, --help\n"
-	       "    Print a general help message.\n"
-	       "--help-fields\n"
-	       "    Print a list of fields that can be specified with the\n"
-	       "    \"--fields\" option\n"
-	       "-j <job(.step)>, --jobs=<job(.step)>\n"
-	       "    Display information about this job or comma-separated\n"
-	       "    list of jobs. The default is all jobs. Adding .step will\n"
-	       "    display the specfic job step of that job.\n"
-	       "--noheader\n"
-	       "    Print (or don't print) a header. The default is to print a\n"
-	       "    header; the option has no effect if --dump is specified\n"
-	       "--usage\n"
-	       "    Pointer to this message.\n"
-	       "-v, --verbose\n"
-	       "    Primarily for debugging purposes, report the state of various\n"
-	       "    variables during processing.\n");
+	printf("\
+sstat [<OPTION>] -j <job(.stepid)>                                          \n\
+    Valid <OPTION> values are:                                              \n\
+      -a, --allsteps:                                                       \n\
+                   Print all steps for the given job(s) when no step is     \n\
+                   specified.                                               \n\
+      -e, --helpformat:                                                     \n\
+	           Print a list of fields that can be specified with the    \n\
+	           '--format' option                                        \n\
+     -h, --help:   Print this description of use.                           \n\
+     -j, --jobs:                                                            \n\
+	           Format is <job(.step)>. Stat this job step               \n\
+                   or comma-separated list of job steps. This option is     \n\
+                   required.  The step portion will default to step 0 if not\n\
+                   specified, unless the --allsteps flag is set where not   \n\
+                   specifing a step will result in all running steps to be  \n\
+                   displayed.                                               \n\
+     -n, --noheader:                                                        \n\
+	           No header will be added to the beginning of output.      \n\
+                   The default is to print a header.                        \n\
+     -o, --format:                                                          \n\
+	           Comma seperated list of fields. (use \"--helpformat\"    \n\
+                   for a list of available fields).                         \n\
+     -p, --parsable: output will be '|' delimited with a '|' at the end     \n\
+     -P, --parsable2: output will be '|' delimited without a '|' at the end \n\
+     --usage:      Display brief usage message.                             \n\
+     -v, --verbose:                                                         \n\
+	           Primarily for debugging purposes, report the state of    \n\
+                   various variables during processing.                     \n\
+     -V, --version: Print version.                                          \n\
+\n");
 
 	return;
 }
 
 void _usage(void)
 {
-	printf("\nUsage: sstat [options]\n\tUse --help for help\n");
+	printf("Usage: sstat [options] -j <job(.stepid)>\n"
+	       "\tUse --help for help\n");
 }
 
 
@@ -267,12 +273,14 @@ void parse_command_line(int argc, char **argv)
 
 	static struct option long_options[] = {
 		{"allsteps", 0, 0, 'a'},
-		{"cluster", 1, 0, 'C'},
-		{"fields", 1, 0, 'F'},
-		{"help", 0, &params.opt_help, 1},
-		{"help-fields", 0, &params.opt_help, 2},
+		{"helpformat", 0, 0, 'e'},
+		{"help", 0, 0, 'h'},
 		{"jobs", 1, 0, 'j'},
-		{"noheader", 0, &params.opt_noheader, 1},
+		{"noheader", 0, 0, 'n'},
+		{"fields", 1, 0, 'o'},
+		{"format", 1, 0, 'o'},
+		{"parsable", 0, 0, 'p'},
+		{"parsable2", 0, 0, 'P'},
 		{"usage", 0, &params.opt_help, 3},
 		{"verbose", 0, 0, 'v'},
 		{"version", 0, 0, 'V'},
@@ -285,7 +293,7 @@ void parse_command_line(int argc, char **argv)
 	opterr = 1;		/* Let getopt report problems to the user */
 
 	while (1) {		/* now cycle through the command line */
-		c = getopt_long(argc, argv, "aF:hj:Vv",
+		c = getopt_long(argc, argv, "aehj:no:pPvV",
 				long_options, &optionIndex);
 		if (c == -1)
 			break;
@@ -293,11 +301,8 @@ void parse_command_line(int argc, char **argv)
 		case 'a':
 			params.opt_all_steps = 1;
 			break;
-		case 'F':
-			if(params.opt_field_list)
-				xfree(params.opt_field_list);
-			
-			xstrfmtcat(params.opt_field_list, "%s,", optarg);
+		case 'e':
+			params.opt_help = 2;
 			break;
 		case 'h':
 			params.opt_help = 1;
@@ -315,6 +320,20 @@ void parse_command_line(int argc, char **argv)
 					destroy_jobacct_selected_step);
 			_addto_job_list(params.opt_job_list, optarg);
 			break;
+		case 'n':
+			print_fields_have_header = 0;
+			break;
+		case 'o':
+			xstrfmtcat(params.opt_field_list, "%s,", optarg);
+			break;
+		case 'p':
+			print_fields_parsable_print = 
+				PRINT_FIELDS_PARSABLE_ENDING;
+			break;
+		case 'P':
+			print_fields_parsable_print = 
+				PRINT_FIELDS_PARSABLE_NO_ENDING;
+			break;
 		case 'v':
 			/* Handle -vvv thusly...
 			 * 0 - report only normal messages and errors
@@ -326,19 +345,9 @@ void parse_command_line(int argc, char **argv)
 			break;
 
 		case 'V':
-		{
-			char	obuf[20]; /* should be long enough */
-			char	*rev="$Revision: 7267 $";
-			char	*s;
-
-			s=strstr(rev, " ")+1;
-			for (i=0; s[i]!=' '; i++)
-				obuf[i]=s[i];
-			obuf[i] = 0;
-			printf("%s: %s\n", argv[0], obuf);
+			printf("%s %s\n", PACKAGE, SLURM_VERSION);
 			exit(0);
-		}
-
+			break;
 		case ':':
 		case '?':	/* getopt() has explained it */
 			exit(1); 
@@ -369,32 +378,23 @@ void parse_command_line(int argc, char **argv)
 		xstrfmtcat(params.opt_field_list, "%s,", STAT_FIELDS);
 
 	if (params.opt_verbose) {
-		fprintf(stderr, "Options selected:\n"
-			"\topt_field_list=%s\n"
-			"\topt_noheader=%d\n"
-			"\topt_help=%d\n"
-			"\topt_verbose=%d\n",
-			params.opt_field_list,
-			params.opt_noheader,
-			params.opt_help,
-			params.opt_verbose);
 		logopt.stderr_level += params.opt_verbose;
+		logopt.prefix_level = 1;
 		log_alter(logopt, 0, NULL);
-
 	}
 
 	/* specific jobs requested? */
 	if (params.opt_verbose && params.opt_job_list
 	    && list_count(params.opt_job_list)) { 
-		fprintf(stderr, "Jobs requested:\n");
+		debug("Jobs requested:\n");
 		itr = list_iterator_create(params.opt_job_list);
 		while((selected_step = list_next(itr))) {
 			if(selected_step->stepid != NO_VAL) 
-				fprintf(stderr, "\t: %d.%d\n",
+				debug("\t: %d.%d\n",
 					selected_step->jobid,
 					selected_step->stepid);
 			else	
-				fprintf(stderr, "\t: %d\n", 
+				debug("\t: %d\n", 
 					selected_step->jobid);
 		}
 		list_iterator_destroy(itr);
@@ -411,24 +411,21 @@ void parse_command_line(int argc, char **argv)
 			if (!strcasecmp(fields[i].name, start))
 				goto foundfield;
 		}
-		fprintf(stderr,
-			"Invalid field requested: \"%s\"\n",
-			start);
+		error("Invalid field requested: \"%s\"", start);
 		exit(1);
 	foundfield:
-		printfields[nprintfields++] = i;
+		list_append(print_fields_list, &fields[i]);
 		start = end + 1;
 	}
+	field_count = list_count(print_fields_list);
 
-	if (params.opt_verbose) {
-		fprintf(stderr, "%d field%s selected:\n",
-			nprintfields,
-			(nprintfields==1? "" : "s"));
-		for (i = 0; i < nprintfields; i++)
-			fprintf(stderr,
-				"\t%s\n",
-				fields[printfields[i]].name);
-	} 
+	if (optind < argc) {
+		debug2("Error: Unknown arguments:");
+		for (i=optind; i<argc; i++)
+			debug2(" %s", argv[i]);
+		debug2("\n");
+		exit(1);
+	}
 
 	return;
 }
diff --git a/src/sstat/print.c b/src/sstat/print.c
index 8057f4a12..69f33d1c1 100644
--- a/src/sstat/print.c
+++ b/src/sstat/print.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -42,17 +43,17 @@
 #include "slurm.h"
 #define FORMAT_STRING_SIZE 34
 
-void _elapsed_time(long secs, long usecs, char *str);
+char *_elapsed_time(long secs, long usecs);
 
-void _elapsed_time(long secs, long usecs, char *str)
+char *_elapsed_time(long secs, long usecs)
 {
 	long	days, hours, minutes, seconds;
 	long    subsec = 0;
+	char *str = NULL;
+
+	if(secs < 0 || secs == NO_VAL)
+		return NULL;
 	
-	if(secs < 0) {
-		snprintf(str, FORMAT_STRING_SIZE, "'N/A'");
-		return;
-	}
 	
 	while (usecs >= 1E6) {
 		secs++;
@@ -68,371 +69,191 @@ void _elapsed_time(long secs, long usecs, char *str)
 	days    =  secs / 86400;
 
 	if (days) 
-		snprintf(str, FORMAT_STRING_SIZE,
-			 "%ld-%2.2ld:%2.2ld:%2.2ld",
-		         days, hours, minutes, seconds);
+		str = xstrdup_printf("%ld-%2.2ld:%2.2ld:%2.2ld",
+				     days, hours, minutes, seconds);
 	else if (hours)
-		snprintf(str, FORMAT_STRING_SIZE,
-			 "%ld:%2.2ld:%2.2ld",
-		         hours, minutes, seconds);
+		str = xstrdup_printf("%2.2ld:%2.2ld:%2.2ld",
+				     hours, minutes, seconds);
 	else
-		snprintf(str, FORMAT_STRING_SIZE,
-			 "%ld:%2.2ld.%3.3ld",
-		         minutes, seconds, subsec);
+		str = xstrdup_printf("%2.2ld:%2.2ld.%3.3ld",
+				     minutes, seconds, subsec);
+	return str;
 }
 
-extern void print_fields(type_t type, void *object)
+void print_fields(jobacct_step_rec_t *step)
 {
-	int f, pf;
-	for (f=0; f<nprintfields; f++) {
-		pf = printfields[f];
-		if (f)
-			printf(" ");
-		(fields[pf].print_routine)(type, object);
-	}
-	printf("\n");
-}
-
-/* Field-specific print routines */
-
-extern void print_cputime(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char outbuf[FORMAT_STRING_SIZE];
-	char buf1[FORMAT_STRING_SIZE];
-	char buf2[FORMAT_STRING_SIZE];
-	char buf3[FORMAT_STRING_SIZE];
-	sacct_t sacct;
-	char *nodes = NULL;
-	uint32_t pos;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-37s", "MinCPUtime/Node:Task - Ave");
-		break;
-	case UNDERSCORE:
-		printf("%-37s", "-------------------------------------");
-		break;
-	case JOB:
-		sacct = job->sacct;
-		nodes = job->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		_elapsed_time((int)sacct.min_cpu, 0, buf1);
-		if(job->track_steps)
-			snprintf(outbuf, FORMAT_STRING_SIZE, 
-				 "%s/- - -", buf1);
-		else {
-			_elapsed_time((int)sacct.ave_cpu, 0, buf2);
-			find_hostname(pos, nodes, buf3);
-			snprintf(outbuf, FORMAT_STRING_SIZE, 
-				 "%s/%s:%u - %s", 
-				 buf1,
-				 buf3, 
-				 sacct.min_cpu_id.taskid, 
-				 buf2);
-		}
-		printf("%-37s", outbuf);
-		break;
-	case JOBSTEP:
-		sacct = step->sacct;
-		nodes = step->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		_elapsed_time((int)sacct.min_cpu, 0, buf1);
-		_elapsed_time((int)sacct.ave_cpu, 0, buf2);
-		find_hostname(pos, nodes, buf3);
-		snprintf(outbuf, FORMAT_STRING_SIZE, 
-			 "%s/%s:%u - %s", 
-			 buf1,
-			 buf3, 
-			 sacct.min_cpu_id.taskid, 
-			 buf2);
-		printf("%-37s", outbuf);
-		break;
-	default:
-		printf("%-37s", "n/a");
-		break;
-	} 
-}
-
-extern void print_jobid(type_t type, void *object)
-{
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char outbuf[10];
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-10s", "JobID");
-		break;
-	case UNDERSCORE:
-		printf("%-10s", "----------");
-		break;
-	case JOB:
-		printf("%-10u", job->jobid);
-		break;
-	case JOBCOMP:
-		printf("%-10u", jobcomp->jobid);
-		break;
-	case JOBSTEP:
-		snprintf(outbuf, sizeof(outbuf), "%u.%u",
-			 step->jobid,
-			 step->stepid);
-		printf("%-10s", outbuf);
-		break;
-	default:
-		printf("%-10s", "n/a");
-		break;
-	} 
-
-}
-
-extern void print_ntasks(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-7s", "Ntasks");
-		break;
-	case UNDERSCORE:
-		printf("%-7s", "-------");
-		break;
-	case JOB:
-		printf("%-7u", job->alloc_cpus);
-		break;
-	case JOBSTEP:
-		printf("%-7u", step->ncpus);
-		break;
-	default:
-		printf("%-7s", "n/a");
-		break;
-	} 
-}
-
-extern void print_pages(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char outbuf[FORMAT_STRING_SIZE];
-	char buf1[FORMAT_STRING_SIZE];
-	char buf2[FORMAT_STRING_SIZE];
-	char buf3[FORMAT_STRING_SIZE];
-	sacct_t sacct;
-	char *nodes = NULL;
-	uint32_t pos;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-34s", "MaxPages/Node:Task - Ave");
-		break;
-	case UNDERSCORE:
-		printf("%-34s", "----------------------------------");
-		break;
-	case JOB:
-		sacct = job->sacct;
-		nodes = job->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		convert_num_unit((float)sacct.max_pages, 
-				 buf1, sizeof(buf1), UNIT_NONE);
-
-		if(job->track_steps)
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/- - -", buf1);
-		else {
-			convert_num_unit((float)sacct.ave_pages,
-					 buf2, sizeof(buf2), UNIT_NONE);
-			find_hostname(pos, nodes, buf3);
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-				 buf1,
-				 buf3,
-				 sacct.max_pages_id.taskid, 
-				 buf2);
-		}
-		printf("%-34s", outbuf);
-		break;
-	case JOBSTEP:
-		sacct = step->sacct;
-		nodes = step->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		convert_num_unit((float)sacct.max_pages, buf1, sizeof(buf1),
-				 UNIT_NONE);
-		convert_num_unit((float)sacct.ave_pages, buf2, sizeof(buf2),
-				 UNIT_NONE);
-		find_hostname(pos, nodes, buf3);
-		snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-			 buf1,
-			 buf3,
-			 sacct.max_pages_id.taskid, 
-			 buf2);
-		printf("%-34s", outbuf);
-		break;
-	default:
-		printf("%-34s", "n/a");
-		break;
-	} 
-}
-
-extern void print_rss(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
+	print_field_t *field = NULL;
+	int curr_inx = 1;
 	char outbuf[FORMAT_STRING_SIZE];
-	char buf1[FORMAT_STRING_SIZE];
-	char buf2[FORMAT_STRING_SIZE];
-	char buf3[FORMAT_STRING_SIZE];
-	sacct_t sacct;
-	char *nodes = NULL;
-	uint32_t pos;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-34s", "MaxRSS/Node:Task - Ave");
-		break;
-	case UNDERSCORE:
-		printf("%-34s", "----------------------------------");
-		break;
-	case JOB:
-		sacct = job->sacct;
-		nodes = job->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		convert_num_unit((float)sacct.max_rss, buf1, sizeof(buf1),
-				 UNIT_KILO);
 
-		if(job->track_steps)
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/- - -", buf1);
-		else {
-			convert_num_unit((float)sacct.ave_rss, 
-					 buf2, sizeof(buf2), UNIT_KILO);
-			find_hostname(pos, nodes, buf3);
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-				 buf1,
-				 buf3, 
-				 sacct.max_rss_id.taskid, 
-				 buf2);
-		}
-		printf("%-34s", outbuf);
-		break;
-	case JOBSTEP:
-		sacct = step->sacct;
-		nodes = step->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		convert_num_unit((float)sacct.max_rss, buf1, sizeof(buf1),
-				 UNIT_KILO);
-		convert_num_unit((float)sacct.ave_rss, buf2, sizeof(buf2),
-				 UNIT_KILO);
-		find_hostname(pos, nodes, buf3);
-		snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-			 buf1,
-			 buf3, 
-			 sacct.max_rss_id.taskid, 
-			 buf2);
-		printf("%-34s", outbuf);
-		break;
-	default:
-		printf("%-34s", "n/a");
-		break;
-	} 
-}
+	list_iterator_reset(print_fields_itr);
+	while((field = list_next(print_fields_itr))) {
+		char *tmp_char = NULL;
+		
+		switch(field->type) {
+		case PRINT_AVECPU:
+			
+			tmp_char = _elapsed_time((int)step->sacct.ave_cpu, 0);
+			
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_AVEPAGES:
+			convert_num_unit((float)step->sacct.ave_pages,
+					 outbuf, sizeof(outbuf),
+					 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_AVERSS:
+			convert_num_unit((float)step->sacct.ave_rss,
+					 outbuf, sizeof(outbuf),
+					 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_AVEVSIZE:
+			convert_num_unit((float)step->sacct.ave_vsize,
+					 outbuf, sizeof(outbuf),
+					 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_JOBID:
+			snprintf(outbuf, sizeof(outbuf), "%u.%u",
+				 step->job_ptr->jobid,
+				 step->stepid);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXPAGES:
+			convert_num_unit((float)step->sacct.max_pages,
+					 outbuf, sizeof(outbuf),
+					 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXPAGESNODE:
+			tmp_char = find_hostname(
+					step->sacct.max_pages_id.nodeid,
+					step->nodes);
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_MAXPAGESTASK:
+			field->print_routine(field,
+					     step->sacct.max_pages_id.taskid,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXRSS:
+			convert_num_unit((float)step->sacct.max_rss,
+					 outbuf, sizeof(outbuf),
+					 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXRSSNODE:
+			tmp_char = find_hostname(
+					step->sacct.max_rss_id.nodeid,
+					step->nodes);
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_MAXRSSTASK:
+			field->print_routine(field,
+					     step->sacct.max_rss_id.taskid,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXVSIZE:
+			convert_num_unit((float)step->sacct.max_vsize,
+					 outbuf, sizeof(outbuf),
+					 UNIT_KILO);
+			
+			field->print_routine(field,
+					     outbuf,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MAXVSIZENODE:
+			tmp_char = find_hostname(
+					step->sacct.max_vsize_id.nodeid,
+					step->nodes);
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_MAXVSIZETASK:
+			field->print_routine(field,
+					     step->sacct.max_vsize_id.taskid,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_MINCPU:
+			tmp_char = _elapsed_time((int)step->sacct.min_cpu, 0);
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_MINCPUNODE:
+			tmp_char = find_hostname(
+					step->sacct.min_cpu_id.nodeid,
+					step->nodes);
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_MINCPUTASK:
+			field->print_routine(field,
+					     step->sacct.min_cpu_id.taskid,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_NTASKS:
+			field->print_routine(field,
+					     step->ntasks,
+					     (curr_inx == field_count));
+			break;
+		case PRINT_SYSTEMCPU:
+			tmp_char = _elapsed_time(step->sys_cpu_sec,
+						 step->sys_cpu_usec);
 
-extern void print_state(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobcomp_job_rec_t *jobcomp = (jobcomp_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		case PRINT_TOTALCPU:
+			tmp_char = _elapsed_time(step->tot_cpu_sec, 
+						 step->tot_cpu_usec);
 
-	switch(type) {
-	case HEADLINE:
-		printf("%-20s", "State");
-		break;
-	case UNDERSCORE:
-		printf("%-20s", "--------------------");
-		break;
-	case JOB:
-		if ( job->state == JOB_CANCELLED) {
-			printf ("%-10s by %6d",
-				job_state_string(job->state), job->requid);
+			field->print_routine(field,
+					     tmp_char,
+					     (curr_inx == field_count));
+			xfree(tmp_char);
+			break;
+		default:
+			break;
 		}
-		else {
-			printf("%-20s", job_state_string(job->state));
-		}
-		break;
-	case JOBCOMP:
-		printf("%-20s", jobcomp->state);
-		break;
-	case JOBSTEP:
-		if ( step->state == JOB_CANCELLED) {
-			printf ("%-10s by %6d",
-				job_state_string(step->state), step->requid);
-		}
-		else {
-			printf("%-20s", job_state_string(step->state));
-		}
-		break;
-	default:
-		printf("%-20s", "n/a");
-		break;
-	} 
+		curr_inx++;
+	}
+	printf("\n");
 }
 
-extern void print_vsize(type_t type, void *object)
-{ 
-	jobacct_job_rec_t *job = (jobacct_job_rec_t *)object;
-	jobacct_step_rec_t *step = (jobacct_step_rec_t *)object;
-	char outbuf[FORMAT_STRING_SIZE];
-	char buf1[FORMAT_STRING_SIZE];
-	char buf2[FORMAT_STRING_SIZE];
-	char buf3[FORMAT_STRING_SIZE];
-	sacct_t sacct;
-	char *nodes = NULL;
-	uint32_t pos;
-
-	switch(type) {
-	case HEADLINE:
-		printf("%-34s", "MaxVSIZE/Node:Task - Ave");
-		break;
-	case UNDERSCORE:
-		printf("%-34s", "----------------------------------");
-		break;
-	case JOB:
-		sacct = job->sacct;
-		nodes = job->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		convert_num_unit((float)sacct.max_vsize, 
-				 buf1, sizeof(buf1),UNIT_KILO);
-		if(job->track_steps)
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/- - -", buf1);
-		else {
-			convert_num_unit((float)sacct.ave_vsize,
-					 buf2, sizeof(buf2), UNIT_KILO);
-			find_hostname(pos, nodes, buf3);
-			snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-				 buf1,
-				 buf3, 
-				 sacct.max_vsize_id.taskid, 
-				 buf2);
-		}
-		printf("%-34s", outbuf);
-		break;
-	case JOBSTEP:
-		sacct = step->sacct;
-		nodes = step->nodes;
-		pos = sacct.min_cpu_id.nodeid;				 
-		convert_num_unit((float)sacct.max_vsize, buf1, sizeof(buf1), 
-				 UNIT_KILO);
-		convert_num_unit((float)sacct.ave_vsize, buf2, sizeof(buf2),
-				 UNIT_KILO);
-		find_hostname(pos, nodes, buf3);
-		snprintf(outbuf, FORMAT_STRING_SIZE, "%s/%s:%u - %s", 
-			 buf1,
-			 buf3, 
-			 sacct.max_vsize_id.taskid, 
-			 buf2);
-		printf("%-34s", outbuf);
-		break;
-	default:
-		printf("%-34s", "n/a");
-		break;
-	} 
-}
diff --git a/src/sstat/process.c b/src/sstat/process.c
index 433433519..df11df824 100644
--- a/src/sstat/process.c
+++ b/src/sstat/process.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -40,25 +41,22 @@
 #include "sstat.h"
 
 
-void find_hostname(uint32_t pos, char *hosts, char *host)
+char *find_hostname(uint32_t pos, char *hosts)
 {
 	hostlist_t hostlist = NULL;
-	char *temp = NULL;
+	char *temp = NULL, *host = NULL;
 
-	if(pos == (uint32_t)NO_VAL) {
-		snprintf(host, 50, "'N/A'");
-		return;
-	}
+	if(!hosts || (pos == (uint32_t)NO_VAL))
+		return NULL;
+	
 	hostlist = hostlist_create(hosts);
 	temp = hostlist_nth(hostlist, pos);
 	if(temp) {
-		snprintf(host, 50, "%s", temp);
+		host = xstrdup(temp);
 		free(temp);
-	} else {
-		snprintf(host, 50, "'N/A'");
-	}
+	} 
 	hostlist_destroy(hostlist);
-	return;
+	return host;
 }
 
 void aggregate_sacct(sacct_t *dest, sacct_t *from)
diff --git a/src/sstat/sstat.c b/src/sstat/sstat.c
index 38b76ce09..6bb5eb172 100644
--- a/src/sstat/sstat.c
+++ b/src/sstat/sstat.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -49,39 +50,35 @@ int _do_stat(uint32_t jobid, uint32_t stepid);
  * Globals
  */
 sstat_parameters_t params;
-fields_t fields[] = {{"cputime", print_cputime}, 
-		     {"jobid", print_jobid}, 
-		     {"ntasks", print_ntasks}, 
-		     {"pages", print_pages}, 
-		     {"rss", print_rss},
-		     {"state", print_state}, 
-		     {"vsize", print_vsize}, 
-		     {NULL, NULL}};
+print_field_t fields[] = {
+	{10, "AveCPU", print_fields_str, PRINT_AVECPU}, 
+	{10, "AvePages", print_fields_str, PRINT_AVEPAGES}, 
+	{10, "AveRSS", print_fields_str, PRINT_AVERSS}, 
+	{10, "AveVMSize", print_fields_str, PRINT_AVEVSIZE}, 
+	{10, "JobID", print_fields_str, PRINT_JOBID}, 
+	{8, "MaxPages", print_fields_str, PRINT_MAXPAGES}, 
+	{12, "MaxPagesNode", print_fields_str, PRINT_MAXPAGESNODE}, 
+	{14, "MaxPagesTask", print_fields_int, PRINT_MAXPAGESTASK}, 
+	{10, "MaxRSS", print_fields_str, PRINT_MAXRSS},
+	{10, "MaxRSSNode", print_fields_str, PRINT_MAXRSSNODE},
+	{10, "MaxRSSTask", print_fields_int, PRINT_MAXRSSTASK},
+	{10, "MaxVMSize", print_fields_str, PRINT_MAXVSIZE}, 
+	{14, "MaxVMSizeNode", print_fields_str, PRINT_MAXVSIZENODE}, 
+	{14, "MaxVMSizeTask", print_fields_int, PRINT_MAXVSIZETASK}, 
+	{10, "MinCPU", print_fields_str, PRINT_MINCPU}, 
+	{10, "MinCPUNode", print_fields_str, PRINT_MINCPUNODE}, 
+	{10, "MinCPUTask", print_fields_int, PRINT_MINCPUTASK}, 
+	{8, "NTasks", print_fields_int, PRINT_NTASKS},
+	{10, "SystemCPU", print_fields_str, PRINT_SYSTEMCPU}, 
+	{10, "TotalCPU", print_fields_str, PRINT_TOTALCPU}, 
+	{0, NULL, NULL, 0}};
 
 List jobs = NULL;
+jobacct_job_rec_t job;
 jobacct_step_rec_t step;
-
-int printfields[MAX_PRINTFIELDS],	/* Indexed into fields[] */
-	nprintfields = 0;
-
-void _print_header(void)
-{
-	int	i,j;
-	for (i=0; i<nprintfields; i++) {
-		if (i)
-			printf(" ");
-		j=printfields[i];
-		(fields[j].print_routine)(HEADLINE, 0);
-	}
-	printf("\n");
-	for (i=0; i<nprintfields; i++) {
-		if (i)
-			printf(" ");
-		j=printfields[i];
-		(fields[j].print_routine)(UNDERSCORE, 0);
-	}
-	printf("\n");
-}
+List print_fields_list = NULL;
+ListIterator print_fields_itr = NULL;
+int field_count = 0;
 
 int _sstat_query(slurm_step_layout_t *step_layout, uint32_t job_id,
 		 uint32_t step_id)
@@ -99,12 +96,17 @@ int _sstat_query(slurm_step_layout_t *step_layout, uint32_t job_id,
 	debug("getting the stat of job %d on %d nodes", 
 	      job_id, step_layout->node_cnt);
 
+	memset(&job, 0, sizeof(jobacct_job_rec_t));
+	job.jobid = job_id;
+
+	memset(&step, 0, sizeof(jobacct_step_rec_t));
+	
 	memset(&temp_sacct, 0, sizeof(sacct_t));
 	temp_sacct.min_cpu = (float)NO_VAL;
 	memset(&step.sacct, 0, sizeof(sacct_t));
 	step.sacct.min_cpu = (float)NO_VAL;
 
-	step.jobid = job_id;
+	step.job_ptr = &job;
 	step.stepid = step_id;
 	step.nodes = step_layout->node_list;
 	step.stepname = NULL;
@@ -166,17 +168,12 @@ cleanup:
 		step.sacct.ave_rss /= tot_tasks;
 		step.sacct.ave_vsize /= tot_tasks;
 		step.sacct.ave_pages /= tot_tasks;
+		step.ntasks = tot_tasks;
 	}
 	jobacct_gather_g_destroy(r.jobacct);	
 	return SLURM_SUCCESS;
 }
 
-int _process_results()
-{
-	print_fields(JOBSTEP, &step);
-	return SLURM_SUCCESS;
-}
-
 int _do_stat(uint32_t jobid, uint32_t stepid)
 {
 	slurm_msg_t req_msg;
@@ -219,7 +216,7 @@ int _do_stat(uint32_t jobid, uint32_t stepid)
 
 	_sstat_query(step_layout, jobid, stepid);
 	
-	_process_results();
+	print_fields(&step);
 	
 	slurm_step_layout_destroy(step_layout);	
 	
@@ -232,14 +229,16 @@ int main(int argc, char **argv)
 	uint32_t stepid = 0;
 	jobacct_selected_step_t *selected_step = NULL;
 	
+	print_fields_list = list_create(NULL);
+	print_fields_itr = list_iterator_create(print_fields_list);
+
 	parse_command_line(argc, argv);
 	if(!params.opt_job_list || !list_count(params.opt_job_list)) {
 		error("You didn't give me any jobs to stat.");
 		return 1;
 	}
 
-	if (!params.opt_noheader) 	/* give them something to look */
-		_print_header();/* at while we think...        */
+	print_fields_header(print_fields_list);
 	itr = list_iterator_create(params.opt_job_list);
 	while((selected_step = list_next(itr))) {
 		if(selected_step->stepid != NO_VAL)
@@ -265,8 +264,15 @@ int main(int argc, char **argv)
 		_do_stat(selected_step->jobid, stepid);
 	}
 	list_iterator_destroy(itr);
-		
-	list_destroy(params.opt_job_list);
+
+	xfree(params.opt_field_list);
+	if(params.opt_job_list)	
+		list_destroy(params.opt_job_list);
+
+	if(print_fields_itr)
+		list_iterator_destroy(print_fields_itr);
+	if(print_fields_list)
+		list_destroy(print_fields_list);
 
 	return 0;
 }
diff --git a/src/sstat/sstat.h b/src/sstat/sstat.h
index 21559444b..242e80368 100644
--- a/src/sstat/sstat.h
+++ b/src/sstat/sstat.h
@@ -7,10 +7,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -61,10 +62,11 @@
 #include "src/common/slurm_jobacct_gather.h"
 #include "src/common/slurm_accounting_storage.h"
 #include "src/common/slurm_jobcomp.h"
+#include "src/common/print_fields.h"
 
 #define ERROR 2
 
-#define STAT_FIELDS "jobid,vsize,rss,pages,cputime,ntasks,state"
+#define STAT_FIELDS "jobid,maxvmsize,maxvmsizenode,maxvmsizetask,avevmsize,maxrss,maxrssnode,maxrsstask,averss,maxpages,maxpagesnode,maxpagestask,avepages,mincpu,mincpunode,mincputask,avecpu,ntasks"
 
 #define BUFFER_SIZE 4096
 #define STATE_COUNT 10
@@ -77,12 +79,29 @@
 
 /* On output, use fields 12-37 from JOB_STEP */
 
-typedef enum {	HEADLINE,
-		UNDERSCORE,
-		JOB,
-		JOBSTEP,
-		JOBCOMP
-} type_t;
+typedef enum {
+		PRINT_AVECPU,
+		PRINT_AVEPAGES,
+		PRINT_AVERSS,
+		PRINT_AVEVSIZE,
+		PRINT_JOBID,
+		PRINT_MAXPAGES,
+		PRINT_MAXPAGESNODE,
+		PRINT_MAXPAGESTASK,
+		PRINT_MAXRSS,
+		PRINT_MAXRSSNODE,
+		PRINT_MAXRSSTASK,
+		PRINT_MAXVSIZE,
+		PRINT_MAXVSIZENODE,
+		PRINT_MAXVSIZETASK,
+		PRINT_MINCPU,
+		PRINT_MINCPUNODE,
+		PRINT_MINCPUTASK,
+		PRINT_NTASKS,
+		PRINT_SYSTEMCPU,
+		PRINT_TOTALCPU,
+} sstat_print_types_t;
+
 
 typedef struct {
 	int opt_all_steps;	/* --allsteps */
@@ -93,13 +112,11 @@ typedef struct {
 	int opt_verbose;	/* --verbose */
 } sstat_parameters_t;
 
-typedef struct fields {
-	char *name;		/* Specified in --fields= */
-	void (*print_routine) ();	/* Who gets to print it? */
-} fields_t;
-
-extern fields_t fields[];
+extern List print_fields_list;
+extern ListIterator print_fields_itr;
+extern print_field_t fields[];
 extern sstat_parameters_t params;
+extern int field_count;
 
 extern List jobs;
 
@@ -107,19 +124,11 @@ extern int printfields[MAX_PRINTFIELDS],	/* Indexed into fields[] */
 	nprintfields;
 
 /* process.c */
-void find_hostname(uint32_t pos, char *hosts, char *host);
+char *find_hostname(uint32_t pos, char *hosts);
 void aggregate_sacct(sacct_t *dest, sacct_t *from);
 
 /* print.c */
-void print_cputime(type_t type, void *object);
-void print_fields(type_t type, void *object);
-void print_jobid(type_t type, void *object);
-void print_ntasks(type_t type, void *object);
-void print_pages(type_t type, void *object);
-void print_rss(type_t type, void *object);
-void print_state(type_t type, void *object);
-void print_vsize(type_t type, void *object);
-
+void print_fields(jobacct_step_rec_t *step);
 
 /* options.c */
 void parse_command_line(int argc, char **argv);
diff --git a/src/strigger/Makefile.in b/src/strigger/Makefile.in
index b95d6ecee..d62a72bf4 100644
--- a/src/strigger/Makefile.in
+++ b/src/strigger/Makefile.in
@@ -47,14 +47,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -108,6 +112,10 @@ 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@
diff --git a/src/strigger/opts.c b/src/strigger/opts.c
index 499e3e60f..4b4ec5633 100644
--- a/src/strigger/opts.c
+++ b/src/strigger/opts.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -367,7 +368,8 @@ Usage: strigger [--set | --get | --clear] [OPTIONS]\n\
   -p, --program=path  pathname of program to execute when triggered\n\
   -r, --reconfig      trigger event on configuration changes\n\
   -t, --time          trigger event on job's time limit\n\
-  -u, --up            trigger event when node returned to service from DOWN state\n\
+  -u, --up            trigger event when node returned to service from DOWN \n\
+                      state\n\
       --user          a user name or ID to filter triggers by\n\
   -v, --verbose       print detailed event logging\n\
   -V, --version       print version information and exit\n\
diff --git a/src/strigger/strigger.c b/src/strigger/strigger.c
index 6371787d5..e2ae18228 100644
--- a/src/strigger/strigger.c
+++ b/src/strigger/strigger.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -98,7 +99,7 @@ static int _clear_trigger(void)
 	trigger_info_t ti;
 	char tmp_c[128];
 
-	bzero(&ti, sizeof(trigger_info_t));
+	memset(&ti, 0, sizeof(trigger_info_t));
 	ti.trig_id	= params.trigger_id;
 	ti.user_id	= params.user_id;
 	if (params.job_id) {
@@ -128,7 +129,7 @@ static int _set_trigger(void)
 	trigger_info_t ti;
 	char tmp_c[128];
 
-	bzero(&ti, sizeof(trigger_info_t));
+	memset(&ti, 0, sizeof(trigger_info_t));
 	if (params.job_id) {
 		ti.res_type = TRIGGER_RES_TYPE_JOB;
 		snprintf(tmp_c, sizeof(tmp_c), "%u", params.job_id);
diff --git a/src/strigger/strigger.h b/src/strigger/strigger.h
index a91c08b0f..f973da29b 100644
--- a/src/strigger/strigger.h
+++ b/src/strigger/strigger.h
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/src/sview/Makefile.am b/src/sview/Makefile.am
index ed216cbb7..1a5047c84 100644
--- a/src/sview/Makefile.am
+++ b/src/sview/Makefile.am
@@ -15,7 +15,7 @@ sview_LDADD =					  \
 
 noinst_HEADERS = sview.h
 sview_SOURCES = sview.c popups.c grid.c part_info.c job_info.c \
-	block_info.c node_info.c \
+	block_info.c node_info.c resv_info.c \
 	submit_info.c admin_info.c common.c
 
 force:
@@ -28,7 +28,7 @@ sview_CFLAGS = $(GTK2_CFLAGS)
 else
 
 EXTRA_sview_SOURCES = sview.h sview.c popups.c grid.c part_info.c job_info.c \
-	block_info.c node_info.c \
+	block_info.c node_info.c resv_info.c \
 	submit_info.c admin_info.c common.c
 
 endif
diff --git a/src/sview/Makefile.in b/src/sview/Makefile.in
index 8b76d0d06..f8ae8de48 100644
--- a/src/sview/Makefile.in
+++ b/src/sview/Makefile.in
@@ -48,14 +48,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -76,20 +80,21 @@ am__installdirs = "$(DESTDIR)$(bindir)"
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
 am__sview_SOURCES_DIST = sview.c popups.c grid.c part_info.c \
-	job_info.c block_info.c node_info.c submit_info.c admin_info.c \
-	common.c
+	job_info.c block_info.c node_info.c resv_info.c submit_info.c \
+	admin_info.c common.c
 @HAVE_GTK_TRUE@am_sview_OBJECTS = sview-sview.$(OBJEXT) \
 @HAVE_GTK_TRUE@	sview-popups.$(OBJEXT) sview-grid.$(OBJEXT) \
 @HAVE_GTK_TRUE@	sview-part_info.$(OBJEXT) \
 @HAVE_GTK_TRUE@	sview-job_info.$(OBJEXT) \
 @HAVE_GTK_TRUE@	sview-block_info.$(OBJEXT) \
 @HAVE_GTK_TRUE@	sview-node_info.$(OBJEXT) \
+@HAVE_GTK_TRUE@	sview-resv_info.$(OBJEXT) \
 @HAVE_GTK_TRUE@	sview-submit_info.$(OBJEXT) \
 @HAVE_GTK_TRUE@	sview-admin_info.$(OBJEXT) \
 @HAVE_GTK_TRUE@	sview-common.$(OBJEXT)
 am__EXTRA_sview_SOURCES_DIST = sview.h sview.c popups.c grid.c \
-	part_info.c job_info.c block_info.c node_info.c submit_info.c \
-	admin_info.c common.c
+	part_info.c job_info.c block_info.c node_info.c resv_info.c \
+	submit_info.c admin_info.c common.c
 sview_OBJECTS = $(am_sview_OBJECTS)
 @HAVE_GTK_TRUE@sview_DEPENDENCIES = $(top_builddir)/src/plugins/select/bluegene/block_allocator/libbluegene_block_allocator.la \
 @HAVE_GTK_TRUE@	$(top_builddir)/src/api/libslurm.o
@@ -126,6 +131,10 @@ 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@
@@ -293,13 +302,13 @@ INCLUDES = -I$(top_srcdir) $(BG_INCLUDES)
 
 @HAVE_GTK_TRUE@noinst_HEADERS = sview.h
 @HAVE_GTK_TRUE@sview_SOURCES = sview.c popups.c grid.c part_info.c job_info.c \
-@HAVE_GTK_TRUE@	block_info.c node_info.c \
+@HAVE_GTK_TRUE@	block_info.c node_info.c resv_info.c \
 @HAVE_GTK_TRUE@	submit_info.c admin_info.c common.c
 
 @HAVE_GTK_TRUE@sview_LDFLAGS = -export-dynamic $(CMD_LDFLAGS) $(BG_LDFLAGS) $(GTK2_LIBS) 
 @HAVE_GTK_TRUE@sview_CFLAGS = $(GTK2_CFLAGS)
 @HAVE_GTK_FALSE@EXTRA_sview_SOURCES = sview.h sview.c popups.c grid.c part_info.c job_info.c \
-@HAVE_GTK_FALSE@	block_info.c node_info.c \
+@HAVE_GTK_FALSE@	block_info.c node_info.c resv_info.c \
 @HAVE_GTK_FALSE@	submit_info.c admin_info.c common.c
 
 all: all-am
@@ -381,6 +390,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-node_info.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-part_info.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-popups.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-resv_info.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-submit_info.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-sview.Po@am__quote@
 
@@ -503,6 +513,20 @@ sview-node_info.obj: node_info.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sview_CFLAGS) $(CFLAGS) -c -o sview-node_info.obj `if test -f 'node_info.c'; then $(CYGPATH_W) 'node_info.c'; else $(CYGPATH_W) '$(srcdir)/node_info.c'; fi`
 
+sview-resv_info.o: resv_info.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sview_CFLAGS) $(CFLAGS) -MT sview-resv_info.o -MD -MP -MF $(DEPDIR)/sview-resv_info.Tpo -c -o sview-resv_info.o `test -f 'resv_info.c' || echo '$(srcdir)/'`resv_info.c
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/sview-resv_info.Tpo $(DEPDIR)/sview-resv_info.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='resv_info.c' object='sview-resv_info.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sview_CFLAGS) $(CFLAGS) -c -o sview-resv_info.o `test -f 'resv_info.c' || echo '$(srcdir)/'`resv_info.c
+
+sview-resv_info.obj: resv_info.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sview_CFLAGS) $(CFLAGS) -MT sview-resv_info.obj -MD -MP -MF $(DEPDIR)/sview-resv_info.Tpo -c -o sview-resv_info.obj `if test -f 'resv_info.c'; then $(CYGPATH_W) 'resv_info.c'; else $(CYGPATH_W) '$(srcdir)/resv_info.c'; fi`
+@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/sview-resv_info.Tpo $(DEPDIR)/sview-resv_info.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='resv_info.c' object='sview-resv_info.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sview_CFLAGS) $(CFLAGS) -c -o sview-resv_info.obj `if test -f 'resv_info.c'; then $(CYGPATH_W) 'resv_info.c'; else $(CYGPATH_W) '$(srcdir)/resv_info.c'; fi`
+
 sview-submit_info.o: submit_info.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sview_CFLAGS) $(CFLAGS) -MT sview-submit_info.o -MD -MP -MF $(DEPDIR)/sview-submit_info.Tpo -c -o sview-submit_info.o `test -f 'submit_info.c' || echo '$(srcdir)/'`submit_info.c
 @am__fastdepCC_TRUE@	mv -f $(DEPDIR)/sview-submit_info.Tpo $(DEPDIR)/sview-submit_info.Po
diff --git a/src/sview/admin_info.c b/src/sview/admin_info.c
index cb1cb51ff..8262aa717 100644
--- a/src/sview/admin_info.c
+++ b/src/sview/admin_info.c
@@ -7,10 +7,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/sview/block_info.c b/src/sview/block_info.c
index 1ae5873e8..0ad3790ee 100644
--- a/src/sview/block_info.c
+++ b/src/sview/block_info.c
@@ -7,10 +7,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  * 
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -76,6 +77,7 @@ enum {
 #ifdef HAVE_BGL
 	SORTID_USE,
 #endif
+	SORTID_NODE_INX,
 	SORTID_USER,
 	SORTID_CNT
 };
@@ -117,6 +119,8 @@ static display_data_t display_data_block[] = {
 #endif
 	{G_TYPE_STRING, SORTID_MLOADERIMAGE, "Mloader Image",
 	 FALSE, EDIT_NONE, refresh_block, create_model_block, admin_edit_block},
+	{G_TYPE_POINTER, SORTID_NODE_INX,  NULL, FALSE, EDIT_NONE, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
 	{G_TYPE_INT, SORTID_UPDATED, NULL, FALSE, EDIT_NONE, refresh_block,
 	 create_model_block, admin_edit_block},
 	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
@@ -133,6 +137,7 @@ static display_data_t options_data_block[] = {
 	{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, RESV_PAGE, "Reservation", TRUE, BLOCK_PAGE},
 	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
 
@@ -336,6 +341,9 @@ static void _update_block_record(sview_block_info_t *block_ptr,
 	gtk_tree_store_set(treestore, iter, SORTID_NODELIST,
 			   block_ptr->nodes, -1);
 
+	gtk_tree_store_set(treestore, iter, 
+			   SORTID_NODE_INX, block_ptr->bp_inx, -1);
+
 #ifdef HAVE_BGL
 	gtk_tree_store_set(treestore, iter, SORTID_BLRTSIMAGE,
 			   block_ptr->blrtsimage, -1);
@@ -444,6 +452,27 @@ static void _update_info_block(List block_list,
 	remove_old(model, SORTID_UPDATED);
 }
 
+static int _sview_block_sort_aval_dec(sview_block_info_t* rec_a,
+				      sview_block_info_t* rec_b)
+{
+	int size_a = rec_a->node_cnt;
+	int size_b = rec_b->node_cnt;
+
+	if (size_a > size_b)
+		return -1;
+	else if (size_a < size_b)
+		return 1;
+
+	if(rec_a->nodes && rec_b->nodes) {
+		size_a = strcmp(rec_a->nodes, rec_b->nodes);
+		if (size_a > 0)
+			return -1;
+		else if (size_a < 0)
+			return 1;
+	}
+	return 0;
+}
+
 static List _create_block_list(partition_info_msg_t *part_info_ptr,
 			       node_select_info_msg_t *node_select_ptr,
 			       int changed)
@@ -457,7 +486,7 @@ static List _create_block_list(partition_info_msg_t *part_info_ptr,
 	if(!changed && block_list) {
 		return block_list;
 	}
-	
+
 	if(block_list) {
 		list_destroy(block_list);
 	}
@@ -518,12 +547,16 @@ static List _create_block_list(partition_info_msg_t *part_info_ptr,
 				break;
 			}
 		}
-		if(block_ptr->bg_conn_type == SELECT_SMALL)
+		if(block_ptr->bg_conn_type >= SELECT_SMALL)
 			block_ptr->size = 0;
 
 		list_append(block_list, block_ptr);
 	}
 	
+	list_sort(block_list,
+		  (ListCmpF)_sview_block_sort_aval_dec);
+
+
 	return block_list;
 }
 
@@ -566,7 +599,7 @@ need_refresh:
 				change_grid_color(
 					popup_win->grid_button_list,
 					block_ptr->bp_inx[j],
-					block_ptr->bp_inx[j+1], i);
+					block_ptr->bp_inx[j+1], i, true);
 				j += 2;
 			}
 			_layout_block_record(treeview, block_ptr, update);
@@ -627,6 +660,8 @@ extern int get_new_info_node_select(node_select_info_msg_t **node_select_ptr,
 	static bool changed = 0;
 		
 	if(!force && ((now - last) < global_sleep_time)) {
+		if(*node_select_ptr != bg_info_ptr)
+			error_code = SLURM_SUCCESS;
 		*node_select_ptr = bg_info_ptr;
 		if(changed) 
 			return SLURM_SUCCESS;
@@ -651,6 +686,10 @@ extern int get_new_info_node_select(node_select_info_msg_t **node_select_ptr,
 	}
 
 	bg_info_ptr = new_bg_ptr;
+
+	if(*node_select_ptr != bg_info_ptr) 
+		error_code = SLURM_SUCCESS;
+	
 	*node_select_ptr = new_bg_ptr;
 #endif
 	return error_code;
@@ -839,10 +878,11 @@ extern void get_info_block(GtkTable *table, display_data_t *display_data)
 
 	if((block_error_code = get_new_info_node_select(&node_select_ptr, 
 							force_refresh))
-	   == SLURM_NO_CHANGE_IN_DATA) { 
+	   == SLURM_NO_CHANGE_IN_DATA) {
 		if((!display_widget || view == ERROR_VIEW) 
-		   || (part_error_code != SLURM_NO_CHANGE_IN_DATA))
+		   || (part_error_code != SLURM_NO_CHANGE_IN_DATA)) {
 			goto display_it;
+		}
 		changed = 0;
 	} else if (block_error_code != SLURM_SUCCESS) {
 		if(view == ERROR_VIEW)
@@ -879,7 +919,7 @@ display_it:
 						  bp_inx[j],
 						  sview_block_info_ptr->
 						  bp_inx[j+1],
-						  i);
+						  i, true);
 			j += 2;
 		}
 		i++;
@@ -926,9 +966,7 @@ extern void specific_info_block(popup_info_t *popup_win)
 	int changed = 1;
 	sview_block_info_t *block_ptr = NULL;
 	int j=0, i=-1;
-	char *host = NULL, *host2 = NULL;
-	hostlist_t hostlist = NULL;
-	int found = 0;
+	hostset_t hostset = NULL;
 	ListIterator itr = NULL;
 	
 	if(!spec_info->display_widget) {
@@ -1015,11 +1053,8 @@ display_it:
 				 popup_win->display_data, SORTID_CNT);
 	}
 
-	if(!popup_win->grid_button_list) {
-		popup_win->grid_button_list = copy_main_button_list();
-		put_buttons_in_table(popup_win->grid_table,
-				     popup_win->grid_button_list);
-	}
+	setup_popup_grid_list(popup_win);
+
 	spec_info->view = INFO_VIEW;
 	if(spec_info->type == INFO_PAGE) {
 		_display_info_block(block_list, popup_win);
@@ -1039,29 +1074,18 @@ display_it:
 				  search_info->gchar_data)) 
 				continue;
 			break;
+		case RESV_PAGE:
 		case NODE_PAGE:
 			if(!block_ptr->nodes)
 				continue;
 			
-			hostlist = hostlist_create(search_info->gchar_data);
-			host = hostlist_shift(hostlist);
-			hostlist_destroy(hostlist);
-			if(!host) 
+			if(!(hostset = hostset_create(search_info->gchar_data)))
 				continue;
-
-			hostlist = hostlist_create(block_ptr->nodes);
-			found = 0;
-			while((host2 = hostlist_shift(hostlist))) { 
-				if(!strcmp(host, host2)) {
-					free(host2);
-					found = 1;
-					break; 
-				}
-				free(host2);
-			}
-			hostlist_destroy(hostlist);
-			if(!found)
+			if(!hostset_intersects(hostset, block_ptr->nodes)) {
+				hostset_destroy(hostset);
 				continue;
+			}
+			hostset_destroy(hostset);				
 			break;
 		case BLOCK_PAGE:
 			switch(search_info->search_type) {
@@ -1107,7 +1131,7 @@ display_it:
 			change_grid_color(
 				popup_win->grid_button_list,
 				block_ptr->bp_inx[j],
-				block_ptr->bp_inx[j+1], i);
+				block_ptr->bp_inx[j+1], i, false);
 			j += 2;
 		}
 	}
@@ -1153,6 +1177,7 @@ extern void popup_all_block(GtkTreeModel *model, GtkTreeIter *iter, int id)
 	int i=0;
 
 	gtk_tree_model_get(model, iter, SORTID_BLOCK, &name, -1);
+
 	switch(id) {
 	case JOB_PAGE:
 		snprintf(title, 100, "Jobs(s) in block %s", name);
@@ -1160,6 +1185,10 @@ extern void popup_all_block(GtkTreeModel *model, GtkTreeIter *iter, int id)
 	case PART_PAGE:
 		snprintf(title, 100, "Partition(s) containing block %s", name);
 		break;
+	case RESV_PAGE:
+		snprintf(title, 100, "Reservations(s) containing block %s",
+			 name);
+		break;
 	case NODE_PAGE:
 		snprintf(title, 100, "Base Partition(s) in block %s", name);
 		break;
@@ -1192,6 +1221,14 @@ extern void popup_all_block(GtkTreeModel *model, GtkTreeIter *iter, int id)
 		gtk_window_present(GTK_WINDOW(popup_win->popup));
 		return;
 	}
+
+	/* Pass the model and the structs from the iter so we can always get
+	   the current node_inx.
+	*/
+	popup_win->model = model;
+	popup_win->iter = *iter;
+	popup_win->node_inx_id = SORTID_NODE_INX;
+
 	switch(id) {
 	case JOB_PAGE:
 		popup_win->spec_info->search_info->gchar_data = name;
@@ -1201,6 +1238,7 @@ extern void popup_all_block(GtkTreeModel *model, GtkTreeIter *iter, int id)
 		gtk_tree_model_get(model, iter, SORTID_PARTITION, &name, -1);
 		popup_win->spec_info->search_info->gchar_data = name;
 		break;
+	case RESV_PAGE: 
 	case NODE_PAGE: 
 		g_free(name);
 		gtk_tree_model_get(model, iter, SORTID_NODELIST, &name, -1);
diff --git a/src/sview/common.c b/src/sview/common.c
index 65bba1648..b8b5e9834 100644
--- a/src/sview/common.c
+++ b/src/sview/common.c
@@ -1,14 +1,16 @@
 /*****************************************************************************\
  *  common.c - common functions used by tabs in sview
  *****************************************************************************
- *  Copyright (C) 2004-2006 The Regents of the University of California.
+ *  Copyright (C) 2004-2007 The Regents of the University of California.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -165,6 +167,67 @@ cleanup:
 	return ret;
 }
 
+/* Make a BlueGene node name into a numeric representation of 
+ * its location. 
+ * Value is low_coordinate * 1,000,000 + 
+ *          high_coordinate * 1,000 + I/O node (999 if none)
+ * (e.g. bg123[4] -> 123,123,004, bg[234x235] -> 234,235,999)
+ */
+static int _bp_coordinate(const char *name)
+{
+	int i, io_val = 999, low_val = -1, high_val;
+
+	for (i=0; name[i]; i++) {
+		if (name[i] == '[') {
+			i++;
+			if (low_val < 0) {
+				char *end_ptr;
+				low_val = strtol(name+i, &end_ptr, 10);
+				if ((end_ptr[0] != '\0') &&
+				    (isdigit(end_ptr[1])))
+					high_val = atoi(end_ptr + 1);
+				else
+					high_val = low_val;
+			} else
+				io_val = atoi(name+i);
+			break;
+		} else if ((low_val < 0) && (isdigit(name[i])))
+			low_val = high_val = atoi(name+i);
+	}
+
+	if (low_val < 0)
+		return low_val;
+	return ((low_val * 1000000) + (high_val * 1000) + io_val);
+}
+
+static int _sort_iter_compare_func_bp_list(GtkTreeModel *model,
+					   GtkTreeIter  *a,
+					   GtkTreeIter  *b,
+					   gpointer      userdata)
+{
+	int sortcol = GPOINTER_TO_INT(userdata);
+	int ret = 0;
+	gchar *name1 = NULL, *name2 = NULL;
+	
+	gtk_tree_model_get(model, a, sortcol, &name1, -1);
+	gtk_tree_model_get(model, b, sortcol, &name2, -1);
+	
+	if ((name1 == NULL) || (name2 == NULL)) {
+		if ((name1 == NULL) && (name2 == NULL))
+			goto cleanup; /* both equal => ret = 0 */
+		
+		ret = (name1 == NULL) ? -1 : 1;
+	} else {
+		/* Sort in numeric order based upon coordinates */
+		ret = _bp_coordinate(name1) - _bp_coordinate(name2);
+	}
+cleanup:
+	g_free(name1);
+	g_free(name2);
+	
+	return ret;
+}
+
 static void _editing_started(GtkCellRenderer *cell,
 			     GtkCellEditable *editable,
 			     const gchar     *path,
@@ -287,6 +350,10 @@ static void _selected_page(GtkMenuItem *menuitem,
 		popup_all_block(treedata->model, &treedata->iter, 
 				display_data->id);
 		break;
+	case RESV_PAGE: 
+		popup_all_resv(treedata->model, &treedata->iter, 
+			       display_data->id);
+		break;
 	case ADMIN_PAGE:
 		switch(display_data->id) {
 		case JOB_PAGE:
@@ -301,6 +368,10 @@ static void _selected_page(GtkMenuItem *menuitem,
 			admin_block(treedata->model, &treedata->iter, 
 				    display_data->name);
 			break;
+		case RESV_PAGE:
+			admin_resv(treedata->model, &treedata->iter, 
+				   display_data->name);
+			break;
 		case NODE_PAGE:
 			admin_node(treedata->model, &treedata->iter, 
 				   display_data->name);
@@ -591,7 +662,7 @@ extern GtkTreeStore *create_treestore(GtkTreeView *tree_view,
 	
 	treestore = gtk_tree_store_newv(count, types);
 	if(!treestore) {
-		g_error("Can't create treestore.\n");
+		g_print("Can't create treestore.\n");
 		return NULL;
 	}
 	
@@ -612,7 +683,9 @@ extern GtkTreeStore *create_treestore(GtkTreeView *tree_view,
 			
 			break;
 		case G_TYPE_STRING:
-			if(!strcasecmp(display_data[i].name, "Nodes")) {
+			if(!strcasecmp(display_data[i].name, "Nodes")
+			   || !strcasecmp(display_data[i].name, "Real Memory")
+			   || !strcasecmp(display_data[i].name, "Tmp Disk")) {
 				gtk_tree_sortable_set_sort_func(
 					GTK_TREE_SORTABLE(treestore), 
 					display_data[i].id, 
@@ -620,6 +693,15 @@ extern GtkTreeStore *create_treestore(GtkTreeView *tree_view,
 					GINT_TO_POINTER(display_data[i].id), 
 					NULL); 
 				break;
+			} else if(!strcasecmp(display_data[i].name,
+					      "BP List")) {
+				gtk_tree_sortable_set_sort_func(
+					GTK_TREE_SORTABLE(treestore), 
+					display_data[i].id, 
+					_sort_iter_compare_func_bp_list,
+					GINT_TO_POINTER(display_data[i].id), 
+					NULL); 
+				break;
 			} else {
 				gtk_tree_sortable_set_sort_func(
 					GTK_TREE_SORTABLE(treestore), 
@@ -702,7 +784,7 @@ extern popup_info_t *create_popup_info(int type, int dest_type, char *title)
 	GtkWidget *label = NULL;
 	GtkWidget *table = NULL;
 	popup_info_t *popup_win = xmalloc(sizeof(popup_info_t));
-	
+
 	list_push(popup_list, popup_win);
 	
 	popup_win->spec_info = xmalloc(sizeof(specific_info_t));
@@ -712,7 +794,7 @@ extern popup_info_t *create_popup_info(int type, int dest_type, char *title)
 	popup_win->spec_info->search_info->gchar_data = NULL;
 	popup_win->spec_info->search_info->int_data = NO_VAL;
 	popup_win->spec_info->search_info->int_data2 = NO_VAL;
-	
+
 	popup_win->spec_info->type = type;
 	popup_win->spec_info->title = xstrdup(title);
 	popup_win->popup = gtk_dialog_new_with_buttons(
@@ -760,17 +842,9 @@ extern popup_info_t *create_popup_info(int type, int dest_type, char *title)
 	bin = GTK_BIN(&view->bin);
 	popup_win->grid_table = GTK_TABLE(bin->child);
 	popup_win->grid_button_list = NULL;
-#ifdef HAVE_BG
-	if(dest_type != NODE_PAGE || type != INFO_PAGE) {
-//	gtk_widget_set_size_request(GTK_WIDGET(window), 164, -1);
-		popup_win->grid_button_list = copy_main_button_list();
-		put_buttons_in_table(popup_win->grid_table,
-				     popup_win->grid_button_list);
-	}
-#endif
 
 	table = gtk_table_new(1, 2, FALSE);
-
+	
 	gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(window), 0, 1, 0, 1,
 			 GTK_SHRINK, GTK_EXPAND | GTK_FILL,
 			 0, 0);
@@ -935,6 +1009,9 @@ extern void *popup_thr(popup_info_t *popup_win)
 	case BLOCK_PAGE: 
 		specifc_info = specific_info_block;
 		break;
+	case RESV_PAGE: 
+		specifc_info = specific_info_resv;
+		break;
 	case SUBMIT_PAGE: 
 	default:
 		g_print("thread got unknown type %d\n", popup_win->type);
diff --git a/src/sview/grid.c b/src/sview/grid.c
index d8df36898..663de187a 100644
--- a/src/sview/grid.c
+++ b/src/sview/grid.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -37,6 +38,10 @@
 \*****************************************************************************/
 #include "sview.h"
 
+#ifdef HAVE_BG
+#include "src/plugins/select/bluegene/plugin/bluegene.h"
+#endif
+
 List grid_button_list = NULL;
 List blinking_button_list = NULL;
 
@@ -45,6 +50,8 @@ char *sview_colors[] = {"#0000FF", "#00FF00", "#00FFFF", "#FFFF00",
 			"#715627", "#6A8CA2", "#4C7127", "#25B9B9",
 			"#A020F0", "#8293ED", "#FFA500", "#FFC0CB",
 			"#8B6914", "#18A24E", "#F827FC", "#B8A40C"};
+char *blank_color = "#919191";
+
 int sview_colors_cnt = 20;
 
 GStaticMutex blinking_mutex = G_STATIC_MUTEX_INIT;
@@ -167,6 +174,7 @@ void _put_button_as_down(grid_button_t *grid_button, int state)
 	GdkColor color;
 
 	if(GTK_IS_EVENT_BOX(grid_button->button)) {
+		//gtk_widget_set_sensitive (grid_button->button, TRUE);
 		return;
 	}
 	gtk_widget_destroy(grid_button->button);		
@@ -212,6 +220,7 @@ void _put_button_as_down(grid_button_t *grid_button, int state)
 void _put_button_as_up(grid_button_t *grid_button)
 {
 	if(GTK_IS_BUTTON(grid_button->button)) {
+		//gtk_widget_set_sensitive (grid_button->button, TRUE);
 		return;
 	}
 	gtk_widget_destroy(grid_button->button);		
@@ -237,6 +246,37 @@ void _put_button_as_up(grid_button_t *grid_button)
 	return;
 }
 
+void _put_button_as_inactive(grid_button_t *grid_button)
+{
+	if(GTK_IS_BUTTON(grid_button->button)) {
+		//gtk_widget_set_sensitive (grid_button->button, FALSE);
+		return;
+	}
+	gtk_widget_destroy(grid_button->button);		
+	grid_button->button = gtk_button_new();
+	gtk_widget_set_size_request(grid_button->button, 10, 10);
+	//gtk_widget_set_sensitive (grid_button->button, FALSE);
+
+	gtk_tooltips_set_tip(grid_button->tip,
+			     grid_button->button,
+			     grid_button->node_name,
+			     "click for node stats");
+	g_signal_connect(G_OBJECT(grid_button->button), 
+			 "button-press-event",
+			 G_CALLBACK(_open_node),
+			 grid_button);
+	if(grid_button->table) 
+		gtk_table_attach(grid_button->table, grid_button->button,
+				 grid_button->table_x,
+				 (grid_button->table_x+1), 
+				 grid_button->table_y,
+				 (grid_button->table_y+1),
+				 GTK_SHRINK, GTK_SHRINK,
+				 1, 1);
+	gtk_widget_show_all(grid_button->button);
+	return;
+}
+
 #ifdef HAVE_BG
 static int _block_in_node(int *bp_inx, int inx)
 {
@@ -281,14 +321,20 @@ extern grid_button_t *create_grid_button_from_another(
 		return NULL;
 	if(color_inx >= 0)
 		color_inx %= sview_colors_cnt;
-			
+       			
 	send_grid_button = xmalloc(sizeof(grid_button_t));
 	memcpy(send_grid_button, grid_button, sizeof(grid_button_t));
 	node_base_state = send_grid_button->state & NODE_STATE_BASE;
 	/* need to set the table to empty because we will want to fill
 	   this into the new table later */
 	send_grid_button->table = NULL;
-	if((color_inx >= 0) && node_base_state == NODE_STATE_DOWN) {
+	if(color_inx == MAKE_BLACK) {
+		send_grid_button->button = gtk_button_new();
+		//gtk_widget_set_sensitive (send_grid_button->button, FALSE);
+		gdk_color_parse(blank_color, &color);
+		gtk_widget_modify_bg(send_grid_button->button, 
+				     GTK_STATE_NORMAL, &color);
+	} else if((color_inx >= 0) && node_base_state == NODE_STATE_DOWN) {
 		GtkWidget *image = gtk_image_new_from_stock(
 			GTK_STOCK_CANCEL,
 			GTK_ICON_SIZE_SMALL_TOOLBAR);
@@ -349,8 +395,9 @@ extern grid_button_t *create_grid_button_from_another(
 	return send_grid_button;
 }
 
+/* start == -1 for all */
 extern char *change_grid_color(List button_list, int start, int end,
-			       int color_inx)
+			       int color_inx, bool change_unused)
 {
 	ListIterator itr = NULL;
 	grid_button_t *grid_button = NULL;
@@ -360,21 +407,45 @@ extern char *change_grid_color(List button_list, int start, int end,
 	if(!button_list)
 		return NULL;
 
+	if(color_inx >= 0) {
+		color_inx %= sview_colors_cnt;
+		gdk_color_parse(sview_colors[color_inx], &color);
+	} else if(color_inx == MAKE_BLACK) 
+		gdk_color_parse(blank_color, &color);
+	else 
+		gdk_color_parse("#FFFFFF", &color);
+
 	itr = list_iterator_create(button_list);
-	color_inx %= sview_colors_cnt;
-	gdk_color_parse(sview_colors[color_inx], &color);
 	while((grid_button = list_next(itr))) {
-		if ((grid_button->inx < start)
-		    ||  (grid_button->inx > end)) 
+		if(start != -1)
+			if ((grid_button->inx < start)
+			    ||  (grid_button->inx > end)) 
+				continue;
+		
+		if(!change_unused && !grid_button->used)
 			continue;
+
+		if(color_inx == MAKE_BLACK) {
+			_put_button_as_inactive(grid_button);
+			grid_button->color = blank_color;
+			gtk_widget_modify_bg(grid_button->button, 
+					     GTK_STATE_NORMAL, &color);
+
+			continue;
+		}
+
 		node_base_state = grid_button->state & NODE_STATE_BASE;
+	
 		if (node_base_state == NODE_STATE_DOWN) {
 			_put_button_as_down(grid_button, NODE_STATE_DOWN);
 		} else if (grid_button->state & NODE_STATE_DRAIN) {
 			_put_button_as_down(grid_button, NODE_STATE_DRAIN);
 		} else {
 			_put_button_as_up(grid_button);
-			grid_button->color = sview_colors[color_inx];
+			if(color_inx == MAKE_WHITE) 
+				grid_button->color = "#FFFFFF";
+			else
+				grid_button->color = sview_colors[color_inx];
 			gtk_widget_modify_bg(grid_button->button, 
 					     GTK_STATE_NORMAL, &color);
 		}
@@ -383,6 +454,28 @@ extern char *change_grid_color(List button_list, int start, int end,
 	return sview_colors[color_inx];
 }
 
+extern void set_grid_used(List button_list, int start, int end,
+			  bool used)
+{
+	ListIterator itr = NULL;
+	grid_button_t *grid_button = NULL;
+
+	if(!button_list)
+		return;
+
+	itr = list_iterator_create(button_list);
+	while((grid_button = list_next(itr))) {
+		if(start != -1)
+			if ((grid_button->inx < start)
+			    ||  (grid_button->inx > end)) 
+				continue;
+		grid_button->used = used;
+	}
+	list_iterator_destroy(itr);
+
+	return;
+}
+
 extern void get_button_list_from_main(List *button_list, int start, int end,
 				      int color_inx)
 {
@@ -423,7 +516,7 @@ extern void get_button_list_from_main(List *button_list, int start, int end,
 	return;
 }
 
-extern List copy_main_button_list()
+extern List copy_main_button_list(int initial_color)
 {
 	ListIterator itr = NULL;
 	grid_button_t *grid_button = NULL;
@@ -433,12 +526,13 @@ extern List copy_main_button_list()
 	itr = list_iterator_create(grid_button_list);
 	while((grid_button = list_next(itr))) {
 		send_grid_button = create_grid_button_from_another(
-			grid_button, grid_button->node_name, -1);
+			grid_button, grid_button->node_name, initial_color);
 		if(send_grid_button) {
 			g_signal_connect(G_OBJECT(send_grid_button->button),
 					 "button-press-event",
 					 G_CALLBACK(_open_node),
 					 send_grid_button);
+			send_grid_button->used = false;
 			list_append(button_list, send_grid_button);
 		}
 	}
@@ -785,7 +879,7 @@ end_it:
 
 extern void sview_init_grid()
 {
-	node_info_msg_t *node_info_ptr = NULL;
+	static node_info_msg_t *node_info_ptr = NULL;
 	int error_code = SLURM_SUCCESS;
 	node_info_t *node_ptr = NULL;
 	int i = 0;
@@ -794,20 +888,163 @@ extern void sview_init_grid()
 	grid_button_t *grid_button = NULL;
 	GdkColor color;
 
+#ifdef HAVE_BG
+	int bg_error_code = SLURM_SUCCESS;
+	int part_error_code = SLURM_SUCCESS;
+	bg_info_record_t *bg_info_record = NULL;
+	static partition_info_msg_t *part_info_ptr = NULL;
+	static node_select_info_msg_t *node_select_ptr = NULL;
+	int j = 0;
+	static int node_scaling = 0;
+	int alter = 0;
+#endif
+
 	if((error_code = get_new_info_node(&node_info_ptr, force_refresh))
 	   == SLURM_NO_CHANGE_IN_DATA) { 
+#ifdef HAVE_BG
+		goto get_bg;
+#else
+		/* need to clear out old data */
+		sview_reset_grid();
 		return;
+#endif
 	} else if (error_code != SLURM_SUCCESS) {
 		return;
 	}
 
+#ifdef HAVE_BG
+get_bg:
+	if((part_error_code = get_new_info_part(&part_info_ptr, force_refresh))
+	   == SLURM_NO_CHANGE_IN_DATA) { 
+		// just goto the new info node 
+	} else if(part_error_code != SLURM_SUCCESS) {
+		return;
+	}
+
+	if((bg_error_code = get_new_info_node_select(&node_select_ptr, 
+						     force_refresh))
+	   == SLURM_NO_CHANGE_IN_DATA) {
+		if(error_code == SLURM_NO_CHANGE_IN_DATA
+		   && part_error_code == SLURM_NO_CHANGE_IN_DATA) {
+			/* need to clear out old data */
+			sview_reset_grid();
+			return;		
+		}
+	} else if(bg_error_code != SLURM_SUCCESS) {
+		return;
+	}
+
+	node_scaling = part_info_ptr->partition_array[0].node_scaling;
+
+	/* Here we need to reset the nodes off of what the blocks say */
+	for (i=0; i<node_info_ptr->record_count; i++) {
+		node_ptr = &(node_info_ptr->node_array[i]);
+		/* in each node_ptr we overload the threads var
+		 * with the number of cnodes in the used_cpus var
+		 * will be used to tell how many cnodes are
+		 * allocated and the cores will represent the cnodes
+		 * in an error state. So we can get an idle count by
+		 * subtracting those 2 numbers from the total possible
+		 * cnodes (which are the idle cnodes).
+		 */
+		node_ptr->threads = node_scaling;
+		node_ptr->cores = 0;
+		node_ptr->used_cpus = 0;
+		if((node_ptr->node_state & NODE_STATE_BASE) == NODE_STATE_DOWN) 
+			continue;
+
+		if(node_ptr->node_state & NODE_STATE_DRAIN) {
+			if(node_ptr->node_state & NODE_STATE_FAIL) {
+				node_ptr->node_state &= ~NODE_STATE_DRAIN;
+				node_ptr->node_state &= ~NODE_STATE_FAIL;
+			} else {
+				node_ptr->cores += node_scaling;
+			}
+		}
+		node_ptr->node_state |= NODE_STATE_IDLE;
+	}
+
+	for (i=0; i<node_select_ptr->record_count; i++) {
+		bg_info_record = &(node_select_ptr->bg_info_array[i]);
+
+		/* this block is idle we won't mark it */
+		if (bg_info_record->job_running == NO_JOB_RUNNING)
+			continue;
+
+		if(bg_info_record->conn_type == SELECT_SMALL) 
+			alter = bg_info_record->node_cnt;
+		else
+			alter = node_scaling;
+
+/* 		g_print("Got here for %s with %d and %d\n", */
+/* 			bg_info_record->bg_block_id, */
+/* 			bg_info_record->state, */
+/* 			bg_info_record->job_running); */
+		/*adjust the drained or error blocks and jobs running
+		  on other blocks as explained below. */
+		j = 0;
+		while(bg_info_record->bp_inx[j] >= 0) {
+			int i2 = 0;
+			for(i2 = bg_info_record->bp_inx[j];
+			    i2 <= bg_info_record->bp_inx[j+1];
+			    i2++) {
+				node_ptr = &(node_info_ptr->node_array[i2]);
+				/* cores is overloaded to be the
+				 * cnodes in an error state and
+				 * used_cpus is overloaded to be the nodes in
+				 * use.  No block should be sent in
+				 * here if it isn't in use (that
+				 * doesn't mean in a free state, it means
+				 * the user isn't slurm or the block 
+				 * is in an error state.  
+				 */
+				if((node_ptr->node_state & NODE_STATE_BASE) 
+				   == NODE_STATE_DOWN) 
+					continue;
+				
+				if(bg_info_record->state
+				   == RM_PARTITION_ERROR) {
+					node_ptr->cores += alter;
+					node_ptr->node_state 
+						|= NODE_STATE_DRAIN;
+					node_ptr->node_state
+						|= NODE_STATE_FAIL;
+				} else if(bg_info_record->job_running
+					  > NO_JOB_RUNNING)  
+					node_ptr->used_cpus += alter;
+				else 
+					g_print("Hey we didn't get anything "
+						"here\n");
+			}
+			j += 2;
+		}
+	}
+	
+	/* now set up the extra nodes with the correct
+	   information */
+	/* for (i=0; i<node_info_ptr->record_count; i++) { */
+/* 		node_ptr = &(node_info_ptr->node_array[i]); */
+		
+/* 		if((node_ptr->node_state & NODE_STATE_BASE) == NODE_STATE_DOWN)  */
+/* 			continue; */
+		
+/* 		/\* get the error node count *\/ */
+/* 		if(!node_ptr->cores) { */
+/* 			node_ptr->node_state &= ~NODE_STATE_DRAIN; */
+/* 			continue; */
+/* 		} */
+/* 		/\* just to get this on all the charts we will drain it */
+/* 		   here.  This must be removed in the part info *\/ */
+/* 		node_ptr->node_state |= NODE_STATE_DRAIN; */
+/* 	} */
+#endif
+
 	if(!grid_button_list) {
 		g_print("you need to run get_system_stats() first\n");
 		exit(0);
 	}
 	
 	gdk_color_parse("white", &color);
-	
 	itr = list_iterator_create(grid_button_list);
 	for(i=0; i<node_info_ptr->record_count; i++) {
 		node_ptr = &node_info_ptr->node_array[i];
@@ -861,3 +1098,46 @@ extern void sview_reset_grid()
 	}
 	list_iterator_destroy(itr);
 }
+
+/* clear the grid */
+extern void setup_popup_grid_list(popup_info_t *popup_win)
+{
+	int def_color = MAKE_BLACK;
+
+	if(!popup_win->model) 
+		def_color = MAKE_WHITE;
+
+	if(popup_win->grid_button_list) {
+		change_grid_color(popup_win->grid_button_list, -1, -1,
+				  def_color, true);
+		set_grid_used(popup_win->grid_button_list, -1, -1, false);
+	} else {	     
+		popup_win->grid_button_list =
+			copy_main_button_list(def_color);
+		put_buttons_in_table(popup_win->grid_table,
+				     popup_win->grid_button_list);
+		popup_win->full_grid = 1;
+	}
+
+	/* refresh the pointer */
+	if(popup_win->model) 
+		gtk_tree_model_get(popup_win->model, &popup_win->iter,
+				   popup_win->node_inx_id,
+				   &popup_win->node_inx, -1);
+
+	if(popup_win->node_inx) {
+		int j=0;
+		while(popup_win->node_inx[j] >= 0) {
+			set_grid_used(popup_win->grid_button_list,
+				      popup_win->node_inx[j],
+				      popup_win->node_inx[j+1], true);
+			change_grid_color(
+				popup_win->grid_button_list,
+				popup_win->node_inx[j],
+				popup_win->node_inx[j+1], MAKE_WHITE, true);
+			j += 2;
+		}
+	} else
+		set_grid_used(popup_win->grid_button_list, -1, -1, true);	
+
+}
diff --git a/src/sview/job_info.c b/src/sview/job_info.c
index d6b863331..8e0155615 100644
--- a/src/sview/job_info.c
+++ b/src/sview/job_info.c
@@ -3,14 +3,15 @@
  *  mode of sview.
  *****************************************************************************
  *  Copyright (C) 2004-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 Danny Auble <da@llnl.gov>
  *
- *  LLNL-CODE-402394. 
+ *  CODE-OCEC-09-009. All rights reserved. 
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -62,6 +63,9 @@ enum {
 	SORTID_ACTION,
 	SORTID_ALLOC, 
 	SORTID_ALLOC_NODE,
+#ifdef HAVE_CRAY_XT
+	SORTID_ALPS_RESV_ID,
+#endif
 	SORTID_BATCH,
 #ifdef HAVE_BG
 	SORTID_BLRTSIMAGE,
@@ -122,6 +126,7 @@ enum {
 	SORTID_REASON,
 	SORTID_REQ_NODELIST,
 	SORTID_REQ_PROCS,
+	SORTID_RESV_NAME,
 #ifdef HAVE_BG
 	SORTID_ROTATE,
 #endif
@@ -138,9 +143,10 @@ enum {
 	SORTID_TIME,
 	SORTID_TIMELIMIT,
 	SORTID_TMP_DISK,
-	SORTID_WCKEY,
 	SORTID_UPDATED,
 	SORTID_USER, 
+	SORTID_WCKEY,
+	SORTID_NODE_INX, 
 	SORTID_CNT
 };
 
@@ -179,6 +185,10 @@ static display_data_t display_data_job[] = {
 	 FALSE, EDIT_TEXTBOX, refresh_job, create_model_job, admin_edit_job},
 	{G_TYPE_STRING, SORTID_RAMDISKIMAGE, "Ramdisk Image",
 	 FALSE, EDIT_TEXTBOX, refresh_job, create_model_job, admin_edit_job},
+#endif
+#ifdef HAVE_CRAY_XT
+	{G_TYPE_STRING, SORTID_ALPS_RESV_ID, "ALPS Resv ID", TRUE, EDIT_NONE, 
+	 refresh_job, create_model_job, admin_edit_job},
 #endif
 	{G_TYPE_STRING, SORTID_USER, "User", TRUE, EDIT_NONE, refresh_job,
 	 create_model_job, admin_edit_job},
@@ -242,6 +252,8 @@ static display_data_t display_data_job[] = {
 	 FALSE, EDIT_NONE, refresh_job, create_model_job, admin_edit_job},
 	{G_TYPE_STRING, SORTID_REQ_PROCS, "Requested Procs", 
 	 FALSE, EDIT_TEXTBOX, refresh_job, create_model_job, admin_edit_job},
+	{G_TYPE_STRING, SORTID_RESV_NAME, "Reservation Name",
+	 FALSE, EDIT_TEXTBOX, refresh_job, create_model_job, admin_edit_job},
 	{G_TYPE_STRING, SORTID_MIN_NODES, "Min Nodes", 
 	 FALSE, EDIT_TEXTBOX, refresh_job, create_model_job, admin_edit_job},
 	{G_TYPE_STRING, SORTID_MAX_NODES, "Max Nodes", 
@@ -272,7 +284,7 @@ static display_data_t display_data_job[] = {
 	 FALSE, EDIT_NONE, refresh_job, create_model_job, admin_edit_job},
 	{G_TYPE_STRING, SORTID_ACCOUNT, "Account Charged", 
 	 FALSE, EDIT_NONE, refresh_job, create_model_job, admin_edit_job},
-	{G_TYPE_STRING, SORTID_REASON, "Wait Reason", 
+	{G_TYPE_STRING, SORTID_REASON, "Reason Waiting", 
 	 FALSE, EDIT_NONE, refresh_job, create_model_job, admin_edit_job},
 	{G_TYPE_STRING, SORTID_FEATURES, "Features", 
 	 FALSE, EDIT_TEXTBOX, refresh_job, create_model_job, admin_edit_job},
@@ -290,9 +302,11 @@ static display_data_t display_data_job[] = {
 	 FALSE, EDIT_NONE, refresh_job, create_model_job, admin_edit_job},
 	{G_TYPE_STRING, SORTID_COMMENT, "Comment", 
 	 FALSE, EDIT_NONE, refresh_job, create_model_job, admin_edit_job},
+	{G_TYPE_POINTER, SORTID_NODE_INX,  NULL, FALSE, EDIT_NONE, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
 	{G_TYPE_INT, SORTID_UPDATED, NULL, FALSE, EDIT_NONE, refresh_job,
 	 create_model_job, admin_edit_job},
-	{G_TYPE_NONE, EDIT_NONE, NULL, FALSE, EDIT_NONE}
+	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
 
 static display_data_t options_data_job[] = {
@@ -309,6 +323,7 @@ static display_data_t options_data_job[] = {
 #else
 	{G_TYPE_STRING, NODE_PAGE, "Nodes", TRUE, JOB_PAGE},
 #endif
+	{G_TYPE_STRING, RESV_PAGE, "Reservation", TRUE, JOB_PAGE},
 	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
 
@@ -605,7 +620,6 @@ static const char *_set_job_msg(job_desc_msg_t *job_msg, const char *new_text,
 			goto return_error;
 		}
 		job_msg->nice = NICE_OFFSET + temp_int;
-		
 		break;
 	case SORTID_REQ_PROCS:
 		temp_int = strtol(new_text, (char **)NULL, 10);
@@ -615,6 +629,10 @@ static const char *_set_job_msg(job_desc_msg_t *job_msg, const char *new_text,
 			goto return_error;
 		job_msg->num_procs = (uint32_t)temp_int;
 		break;
+	case SORTID_RESV_NAME:
+		job_msg->reservation = xstrdup(new_text);
+		type = "reservation name";
+		break;
 	case SORTID_MIN_NODES:
 		temp_int = strtol(new_text, (char **)NULL, 10);
 		
@@ -664,27 +682,23 @@ static const char *_set_job_msg(job_desc_msg_t *job_msg, const char *new_text,
 		type = "name";
 		break;
 	case SORTID_WCKEY:		
-		xstrfmtcat(job_msg->name, "\"%s", new_text);
+		job_msg->wckey = xstrdup(new_text);
 		type = "wckey";
 		break;
 	case SORTID_SHARED:
-		if (!strcasecmp(new_text, "yes")) {
+		if (!strcasecmp(new_text, "yes")) 
 			job_msg->shared = 1;
-			
-		} else {
+		else 
 			job_msg->shared = 0;
 			
-		}
 		type = "shared";
 		break;
 	case SORTID_CONTIGUOUS:
-		if (!strcasecmp(new_text, "yes")) {
+		if (!strcasecmp(new_text, "yes")) 
 			job_msg->contiguous = 1;
-			
-		} else {
+		else 
 			job_msg->contiguous = 0;
 			
-		}
 		type = "contiguous";	
 		break;
 	case SORTID_REQ_NODELIST:		
@@ -1039,7 +1053,7 @@ static void _layout_job_record(GtkTreeView *treeview,
 			       sview_job_info_t *sview_job_info_ptr, 
 			       int update)
 {
-	char *nodes = NULL, *uname = NULL, *jname = NULL, *wckey = NULL;
+	char *nodes = NULL, *reason = NULL, *uname = NULL;
 	char tmp_char[50];
 	time_t now_time = time(NULL);
 	job_info_t *job_ptr = sview_job_info_ptr->job_ptr;
@@ -1050,23 +1064,6 @@ static void _layout_job_record(GtkTreeView *treeview,
 	GtkTreeStore *treestore = 
 		GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
 
-	if (job_ptr->name && job_ptr->name[0]) {
-		char *temp = NULL;
-		/* first set the jname to the job_ptr->name */
-		jname = xstrdup(job_ptr->name);
-		/* then grep for " since that is the delimiter for
-		   the wckey */
-		if((temp = strchr(jname, '\"'))) {
-			/* if we have a wckey set the " to NULL to
-			 * end the jname */
-			temp[0] = '\0';
-			/* increment and copy the remainder */
-			temp++;
-			wckey = xstrdup(temp);
-		}
-	}
-	
-
 	if(!treestore)
 		return;
 	if(!job_ptr->nodes || !strcasecmp(job_ptr->nodes,"waiting...")) {
@@ -1155,6 +1152,16 @@ static void _layout_job_record(GtkTreeView *treeview,
 					   tmp_char, 
 					   sizeof(tmp_char), 
 					   SELECT_PRINT_BG_ID));
+#endif
+#ifdef HAVE_CRAY_XT
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_job,
+						 SORTID_ALPS_RESV_ID), 
+				   select_g_sprint_jobinfo(
+					   job_ptr->select_jobinfo, 
+					   tmp_char, 
+					   sizeof(tmp_char), 
+					   SELECT_PRINT_RESV_ID));
 #endif
 	uname = uid_to_string((uid_t)job_ptr->user_id);
 	add_display_treestore_line(update, treestore, &iter, 
@@ -1177,12 +1184,12 @@ static void _layout_job_record(GtkTreeView *treeview,
 	add_display_treestore_line(update, treestore, &iter, 
 				   find_col_name(display_data_job,
 						 SORTID_NAME), 
-				   jname);
+				   job_ptr->name);
 	
 	add_display_treestore_line(update, treestore, &iter, 
 				   find_col_name(display_data_job,
 						 SORTID_WCKEY), 
-				   wckey);
+				   job_ptr->wckey);
 	
 	sprintf(tmp_char, "%u", job_ptr->priority);
 	add_display_treestore_line(update, treestore, &iter, 
@@ -1336,6 +1343,16 @@ static void _layout_job_record(GtkTreeView *treeview,
 					   sizeof(tmp_char), 
 					   SELECT_PRINT_RAMDISK_IMAGE));
 	
+#endif
+#ifdef HAVE_CRAY_XT
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_job,
+						 SORTID_ALPS_RESV_ID), 
+				   select_g_sprint_jobinfo(
+					   job_ptr->select_jobinfo, 
+					   tmp_char, 
+					   sizeof(tmp_char), 
+					   SELECT_PRINT_RESV_ID));
 #endif
 
 	if(job_ptr->contiguous)
@@ -1433,10 +1450,13 @@ static void _layout_job_record(GtkTreeView *treeview,
 						 SORTID_ACCOUNT),
 				   job_ptr->account);
 
+	if (job_ptr->state_desc)
+		reason = job_ptr->state_desc;
+	else
+		reason = job_reason_string(job_ptr->state_reason);
 	add_display_treestore_line(update, treestore, &iter, 
 				   find_col_name(display_data_job,
-						 SORTID_REASON),
-				   job_reason_string(job_ptr->state_reason));
+						 SORTID_REASON), reason);
 
 	add_display_treestore_line(update, treestore, &iter, 
 				   find_col_name(display_data_job,
@@ -1447,15 +1467,13 @@ static void _layout_job_record(GtkTreeView *treeview,
 				   find_col_name(display_data_job,
 						 SORTID_COMMENT),
 				   job_ptr->comment);
-	xfree(jname);
-	xfree(wckey);
 }
 
 static void _update_job_record(sview_job_info_t *sview_job_info_ptr, 
 			       GtkTreeStore *treestore,
 			       GtkTreeIter *iter)
 {
-	char *nodes = NULL, *uname = NULL, *jname = NULL, *wckey = NULL;
+	char *nodes = NULL, *reason = NULL, *uname = NULL;
 	char tmp_char[50];
 	time_t now_time = time(NULL);
 	GtkTreeIter step_iter;
@@ -1464,22 +1482,6 @@ static void _update_job_record(sview_job_info_t *sview_job_info_ptr,
 	struct group *group_info = NULL;
 	uint16_t term_sig = 0;
      
-	if (job_ptr->name && job_ptr->name[0]) {
-		char *temp = NULL;
-		/* first set the jname to the job_ptr->name */
-		jname = xstrdup(job_ptr->name);
-		/* then grep for " since that is the delimiter for
-		   the wckey */
-		if((temp = strchr(jname, '\"'))) {
-			/* if we have a wckey set the " to NULL to
-			 * end the jname */
-			temp[0] = '\0';
-			/* increment and copy the remainder */
-			temp++;
-			wckey = xstrdup(temp);
-		}
-	}
-	
 	gtk_tree_store_set(treestore, iter, SORTID_UPDATED, 1, -1);
 	if(!job_ptr->nodes || !strcasecmp(job_ptr->nodes,"waiting...")) {
 		sprintf(tmp_char,"00:00:00");
@@ -1609,6 +1611,15 @@ static void _update_job_record(sview_job_info_t *sview_job_info_ptr,
 				   sizeof(tmp_char), 
 				   SELECT_PRINT_RAMDISK_IMAGE), -1);
 	
+#endif
+#ifdef HAVE_CRAY_XT
+	gtk_tree_store_set(treestore, iter, 
+			   SORTID_ALPS_RESV_ID, 
+			   select_g_sprint_jobinfo(
+				   job_ptr->select_jobinfo, 
+				   tmp_char, 
+				   sizeof(tmp_char), 
+				   SELECT_PRINT_RESV_ID), -1);
 #endif
 	uname = uid_to_string((uid_t)job_ptr->user_id);
 	gtk_tree_store_set(treestore, iter, 
@@ -1626,8 +1637,8 @@ static void _update_job_record(sview_job_info_t *sview_job_info_ptr,
 			   SORTID_GROUP, 
 			   tmp_char, -1);
 		
-	gtk_tree_store_set(treestore, iter, SORTID_NAME, jname, -1);
-	gtk_tree_store_set(treestore, iter, SORTID_WCKEY, wckey, -1);
+	gtk_tree_store_set(treestore, iter, SORTID_NAME, job_ptr->name, -1);
+	gtk_tree_store_set(treestore, iter, SORTID_WCKEY, job_ptr->wckey, -1);
 	gtk_tree_store_set(treestore, iter, 
 			   SORTID_STATE, 
 			   job_state_string(job_ptr->job_state), -1);
@@ -1654,6 +1665,10 @@ static void _update_job_record(sview_job_info_t *sview_job_info_ptr,
 			   SORTID_NUM_PROCS, tmp_char, -1);
 	
 	gtk_tree_store_set(treestore, iter, SORTID_NODELIST, nodes, -1);
+
+	gtk_tree_store_set(treestore, iter, 
+			   SORTID_NODE_INX, job_ptr->node_inx, -1);
+
 	gtk_tree_store_set(treestore, iter, SORTID_REQ_NODELIST,
 			   job_ptr->req_nodes, -1);
 	gtk_tree_store_set(treestore, iter, SORTID_EXC_NODELIST,
@@ -1697,6 +1712,9 @@ static void _update_job_record(sview_job_info_t *sview_job_info_ptr,
 	gtk_tree_store_set(treestore, iter,
 			   SORTID_REQ_PROCS, tmp_char, -1);
 
+	gtk_tree_store_set(treestore, iter,
+			   SORTID_RESV_NAME, job_ptr->resv_name, -1);
+
 	sprintf(tmp_char, "%u", job_ptr->min_sockets);
 	gtk_tree_store_set(treestore, iter,
 			   SORTID_MIN_SOCKETS, tmp_char, -1);
@@ -1746,9 +1764,13 @@ static void _update_job_record(sview_job_info_t *sview_job_info_ptr,
 
 	gtk_tree_store_set(treestore, iter,
 			   SORTID_FEATURES, job_ptr->features, -1);
+	if (job_ptr->state_desc)
+		reason = job_ptr->state_desc;
+	else
+		reason = job_reason_string(job_ptr->state_reason);
 	gtk_tree_store_set(treestore, iter,
-			   SORTID_REASON,
-			   job_reason_string(job_ptr->state_reason), -1);
+			   SORTID_REASON, reason, -1);
+
 	gtk_tree_store_set(treestore, iter,
 			   SORTID_NETWORK, job_ptr->network, -1);
 	gtk_tree_store_set(treestore, iter,
@@ -1765,8 +1787,6 @@ static void _update_job_record(sview_job_info_t *sview_job_info_ptr,
 		_update_info_step(sview_job_info_ptr, 
 				  GTK_TREE_MODEL(treestore), NULL, iter);
 		
-	xfree(jname);
-	xfree(wckey);
 	return;
 }
 
@@ -2125,6 +2145,26 @@ static void _job_info_list_del(void *object)
 	}
 }
 
+static int _sview_job_sort_aval_dec(sview_job_info_t* rec_a,
+				    sview_job_info_t* rec_b)
+{
+	int size_a = rec_a->node_cnt;
+	int size_b = rec_b->node_cnt;
+
+	if (size_a > size_b)
+		return -1;
+	else if (size_a < size_b)
+		return 1;
+
+	if(rec_a->nodes && rec_b->nodes) {
+		size_a = strcmp(rec_a->nodes, rec_b->nodes);
+		if (size_a > 0)
+			return -1;
+		else if (size_a < 0)
+			return 1;
+	}
+	return 0;
+}
 
 static List _create_job_info_list(job_info_msg_t *job_info_ptr,
 				  job_step_info_response_msg_t *step_info_ptr,
@@ -2231,6 +2271,14 @@ static List _create_job_info_list(job_info_msg_t *job_info_ptr,
 		}
 		list_append(info_list, sview_job_info_ptr);
 	}
+
+
+	list_sort(info_list,
+		  (ListCmpF)_sview_job_sort_aval_dec);
+
+	list_sort(odd_info_list,
+		  (ListCmpF)_sview_job_sort_aval_dec);
+
 update_color:
 	if(want_odd_states)
 		return odd_info_list;
@@ -2249,14 +2297,11 @@ void _display_info_job(List info_list, popup_info_t *popup_win)
 	GtkTreeView *treeview = NULL;
 	int update = 0;
 	int i = -1, j = 0;
-	int first_time = 0;
 
 	if(spec_info->search_info->int_data == NO_VAL) {
 	/* 	info = xstrdup("No pointer given!"); */
 		goto finished;
 	}
-	if(!list_count(popup_win->grid_button_list)) 
-		first_time = 1;
 
 need_refresh:
 	if(!spec_info->display_widget) {
@@ -2283,18 +2328,11 @@ need_refresh:
 	} else if(spec_info->search_info->int_data2 == NO_VAL) {
 		j=0;
 		while(sview_job_info->job_ptr->node_inx[j] >= 0) {
-			if(!first_time)
 				change_grid_color(
 					popup_win->grid_button_list,
 					sview_job_info->job_ptr->node_inx[j],
 					sview_job_info->job_ptr->node_inx[j+1],
-					i);
-			else
-				get_button_list_from_main(
-					&popup_win->grid_button_list,
-					sview_job_info->job_ptr->node_inx[j],
-					sview_job_info->job_ptr->node_inx[j+1],
-					i);
+					i, true);
 			j += 2;
 		}
 		_layout_job_record(treeview, sview_job_info, update);
@@ -2308,23 +2346,13 @@ need_refresh:
 			   spec_info->search_info->int_data2) {
 				j=0;
 				while(step_ptr->node_inx[j] >= 0) {
-					if(!first_time) 
-						change_grid_color(
-							popup_win->
-							grid_button_list,
-							step_ptr->node_inx[j],
-							step_ptr->
-							node_inx[j+1],
-							i);
-					else
-						get_button_list_from_main(
-							&popup_win->
-							grid_button_list,
-							step_ptr->node_inx[j],
-							step_ptr->
-							node_inx[j+1],
-							i);
-
+					change_grid_color(
+						popup_win->
+						grid_button_list,
+						step_ptr->node_inx[j],
+						step_ptr->
+						node_inx[j+1],
+						i, true);
 					j += 2;
 				}
 				_layout_step_record(treeview, 
@@ -2365,9 +2393,6 @@ need_refresh:
 			
 			goto need_refresh;
 		}
-		
-		put_buttons_in_table(popup_win->grid_table,
-				     popup_win->grid_button_list);
 	}
 	gtk_widget_show_all(spec_info->display_widget);
 
@@ -2396,7 +2421,8 @@ extern int get_new_info_job(job_info_msg_t **info_ptr,
 	static bool changed = 0;
 		
 	if(!force && ((now - last) < global_sleep_time)) {
-		error_code = SLURM_NO_CHANGE_IN_DATA;
+		if(*info_ptr != job_info_ptr) 
+			error_code = SLURM_SUCCESS;
 		*info_ptr = job_info_ptr;
 		if(changed) 
 			return SLURM_SUCCESS;
@@ -2421,6 +2447,10 @@ extern int get_new_info_job(job_info_msg_t **info_ptr,
 		changed = 1;
 	}
 	job_info_ptr = new_job_ptr;
+
+	if(*info_ptr != job_info_ptr) 
+		error_code = SLURM_SUCCESS;
+
 	*info_ptr = new_job_ptr;
 	return error_code;
 }
@@ -2434,10 +2464,14 @@ extern int get_new_info_job_step(job_step_info_response_msg_t **info_ptr,
 	int error_code = SLURM_NO_CHANGE_IN_DATA;
 	time_t now = time(NULL);
 	static time_t last;
+	static bool changed = 0;
 		
 	if(!force && ((now - last) < global_sleep_time)) {
-		error_code = SLURM_NO_CHANGE_IN_DATA;
+		if(*info_ptr != old_step_ptr) 
+			error_code = SLURM_SUCCESS;
 		*info_ptr = old_step_ptr;
+		if(changed) 
+			return SLURM_SUCCESS;
 		return error_code;
 	}
 	last = now;
@@ -2446,16 +2480,24 @@ extern int get_new_info_job_step(job_step_info_response_msg_t **info_ptr,
 		error_code = slurm_get_job_steps(old_step_ptr->last_update, 
 						 0, 0, &new_step_ptr, 
 						 show_flags);
-		if (error_code ==  SLURM_SUCCESS)
+		if (error_code == SLURM_SUCCESS) {
 			slurm_free_job_step_info_response_msg(old_step_ptr);
-		else if (slurm_get_errno () == SLURM_NO_CHANGE_IN_DATA) {
+			changed = 1;
+		} else if (slurm_get_errno () == SLURM_NO_CHANGE_IN_DATA) {
 			error_code = SLURM_NO_CHANGE_IN_DATA;
 			new_step_ptr = old_step_ptr;
+			changed = 0;
 		}
-	} else
+	} else {
 		error_code = slurm_get_job_steps((time_t) NULL, 0, 0, 
 						 &new_step_ptr, show_flags);
+		changed = 1;
+	}
 	old_step_ptr = new_step_ptr;
+
+	if(*info_ptr != old_step_ptr) 
+		error_code = SLURM_SUCCESS;
+
 	*info_ptr = new_step_ptr;
 	return error_code;
 }
@@ -2727,7 +2769,7 @@ display_it:
 				change_grid_color(grid_button_list,
 						  job_ptr->node_inx[j],
 						  job_ptr->node_inx[j+1],
-						  i);
+						  i, true);
 			j += 2;
 		}
 		i++;
@@ -2779,9 +2821,8 @@ extern void specific_info_job(popup_info_t *popup_win)
 	job_info_t *job_ptr = NULL;	
 	ListIterator itr = NULL;
 	char name[30], *uname = NULL;
-	char *host = NULL, *host2 = NULL;
-	hostlist_t hostlist = NULL;
-	int found = 0, name_diff;
+	hostset_t hostset = NULL;
+	int name_diff;
 	
 	if(!spec_info->display_widget)
 		setup_popup_info(popup_win, display_data_job, SORTID_CNT);
@@ -2863,15 +2904,7 @@ display_it:
 				 SORTID_CNT);
 	}
 
-	if(popup_win->grid_button_list) {
-		list_destroy(popup_win->grid_button_list);
-	}	       
-	
-#ifdef HAVE_3D
-	popup_win->grid_button_list = copy_main_button_list();
-#else
-	popup_win->grid_button_list = list_create(destroy_grid_button);
-#endif	
+	setup_popup_grid_list(popup_win);
 
 	spec_info->view = INFO_VIEW;
 	if(spec_info->type == INFO_PAGE) {
@@ -2944,6 +2977,11 @@ display_it:
 				  job_ptr->partition))
 				continue;
 			break;
+		case RESV_PAGE:
+			if(strcmp(search_info->gchar_data,
+				  job_ptr->resv_name))
+				continue;
+			break;
 		case BLOCK_PAGE:
 			select_g_sprint_jobinfo(
 				job_ptr->select_jobinfo, 
@@ -2957,25 +2995,13 @@ display_it:
 			if(!job_ptr->nodes)
 				continue;
 			
-			hostlist = hostlist_create(search_info->gchar_data);
-			host = hostlist_shift(hostlist);
-			hostlist_destroy(hostlist);
-			if(!host)
+			if(!(hostset = hostset_create(search_info->gchar_data)))
 				continue;
-			
-			hostlist = hostlist_create(job_ptr->nodes);
-			found = 0;
-			while((host2 = hostlist_shift(hostlist))) { 
-				if(!strcmp(host, host2)) {
-					free(host2);
-					found = 1;
-					break; 
-				}
-				free(host2);
-			}
-			hostlist_destroy(hostlist);
-			if(!found)
+			if(!hostset_intersects(hostset, job_ptr->nodes)) {
+				hostset_destroy(hostset);
 				continue;
+			}
+			hostset_destroy(hostset);				
 			break;
 		default:
 			continue;
@@ -2984,25 +3010,15 @@ display_it:
 		list_push(send_info_list, sview_job_info_ptr);
 		j=0;
 		while(job_ptr->node_inx[j] >= 0) {
-#ifdef HAVE_3D
 			change_grid_color(
 				popup_win->grid_button_list,
 				job_ptr->node_inx[j],
-				job_ptr->node_inx[j+1], i);
-#else
-			get_button_list_from_main(
-				&popup_win->grid_button_list,
-				job_ptr->node_inx[j],
-				job_ptr->node_inx[j+1], i);
-#endif
+				job_ptr->node_inx[j+1], i, false);
 			j += 2;
 		}
 	}
 	list_iterator_destroy(itr);
 
-	put_buttons_in_table(popup_win->grid_table,
-			     popup_win->grid_button_list);
-
 	_update_info_job(send_info_list,
 			 GTK_TREE_VIEW(spec_info->display_widget));
 			
@@ -3045,6 +3061,7 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id)
 
 	gtk_tree_model_get(model, iter, SORTID_JOBID, &jobid, -1);
 	gtk_tree_model_get(model, iter, SORTID_ALLOC, &stepid, -1);
+
 	if(stepid)
 		stepid = NO_VAL;
 	else {
@@ -3060,6 +3077,13 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id)
 			snprintf(title, 100, "Partition with job %d.%d",
 				 jobid, stepid);			
 		break;
+	case RESV_PAGE:
+		if(stepid == NO_VAL)
+			snprintf(title, 100, "Reservation with job %d", jobid);
+		else
+			snprintf(title, 100, "Reservation with job %d.%d",
+				 jobid, stepid);			
+		break;
 	case NODE_PAGE:
 		if(stepid == NO_VAL) {
 #ifdef HAVE_BG
@@ -3124,6 +3148,13 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id)
 		return;
 	}
 	
+	/* Pass the model and the structs from the iter so we can always get
+	   the current node_inx.
+	*/
+	popup_win->model = model;
+	popup_win->iter = *iter;
+	popup_win->node_inx_id = SORTID_NODE_INX;
+
 	switch(id) {
 	case NODE_PAGE:
 		gtk_tree_model_get(model, iter, SORTID_NODELIST, &name, -1);
@@ -3133,6 +3164,10 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id)
 		gtk_tree_model_get(model, iter, SORTID_PARTITION, &name, -1);
 		popup_win->spec_info->search_info->gchar_data = name;
 		break;
+	case RESV_PAGE:
+		gtk_tree_model_get(model, iter, SORTID_RESV_NAME, &name, -1);
+		popup_win->spec_info->search_info->gchar_data = name;
+		break;
 #ifdef HAVE_BG
 	case BLOCK_PAGE: 
 		gtk_tree_model_get(model, iter, SORTID_BLOCK, &name, -1);
diff --git a/src/sview/node_info.c b/src/sview/node_info.c
index 9e05eab98..c164836d3 100644
--- a/src/sview/node_info.c
+++ b/src/sview/node_info.c
@@ -6,10 +6,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -106,6 +107,7 @@ static display_data_t options_data_node[] = {
 	{G_TYPE_STRING, BLOCK_PAGE, "Blocks", TRUE, NODE_PAGE},
 #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_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
@@ -467,6 +469,8 @@ extern int get_new_info_node(node_info_msg_t **info_ptr, int force)
 	static bool changed = 0;
 
 	if(!force && ((now - last) < global_sleep_time)) {
+		if(*info_ptr != node_info_ptr)
+			error_code = SLURM_SUCCESS;
 		*info_ptr = node_info_ptr;
 		if(changed) 
 			return SLURM_SUCCESS;
@@ -493,6 +497,10 @@ extern int get_new_info_node(node_info_msg_t **info_ptr, int force)
 		changed = 1;
 	}
 	node_info_ptr = new_node_ptr;
+
+	if(*info_ptr != node_info_ptr) 
+		error_code = SLURM_SUCCESS;
+	
 	*info_ptr = new_node_ptr;
 	return error_code;
 }
@@ -828,7 +836,7 @@ display_it:
 	/* set up the grid */
 	itr = list_iterator_create(info_list);
 	while ((sview_node_info_ptr = list_next(itr))) {
-		change_grid_color(grid_button_list, i, i, i);
+		change_grid_color(grid_button_list, i, i, i, true);
 		i++;
 	}
 	list_iterator_destroy(itr);
@@ -907,7 +915,7 @@ extern void specific_info_node(popup_info_t *popup_win)
 					  label,
 					  0, 1, 0, 1); 
 		gtk_widget_show(label);	
-		spec_info->display_widget = gtk_widget_ref(GTK_WIDGET(label));
+		spec_info->display_widget = gtk_widget_ref(label);
 		return;
 	}
 display_it:	
@@ -946,14 +954,7 @@ display_it:
 		goto end_it;
 	}
 
-	if(popup_win->grid_button_list) {
-		list_destroy(popup_win->grid_button_list);
-	}	       
-#ifdef HAVE_3D
-	popup_win->grid_button_list = copy_main_button_list();
-#else
-	popup_win->grid_button_list = list_create(destroy_grid_button);
-#endif	
+	setup_popup_grid_list(popup_win);
 	
 	/* just linking to another list, don't free the inside, just
 	   the list */
@@ -1023,13 +1024,8 @@ display_it:
 			continue;
 		
 		list_push(send_info_list, sview_node_info_ptr);
-#ifdef HAVE_3D
 		change_grid_color(popup_win->grid_button_list,
-				  i, i, 0);
-#else
-		get_button_list_from_main(&popup_win->grid_button_list,
-					  i, i, 0);		
-#endif
+				  i, i, 0, true);
 	}
 	list_iterator_destroy(itr);
 
@@ -1038,10 +1034,6 @@ display_it:
 		hostlist_destroy(hostlist);
 	}
 
-
-	put_buttons_in_table(popup_win->grid_table,
-			     popup_win->grid_button_list);
-
 	_update_info_node(send_info_list, 
 			  GTK_TREE_VIEW(spec_info->display_widget));
 	list_destroy(send_info_list);
@@ -1094,6 +1086,9 @@ extern void popup_all_node(GtkTreeModel *model, GtkTreeIter *iter, int id)
 	case PART_PAGE:
 		snprintf(title, 100, "Partition(s) with %s %s", node, name);
 		break;
+	case RESV_PAGE:
+		snprintf(title, 100, "Reservation(s) with %s %s", node, name);
+		break;
 	case BLOCK_PAGE: 
 		snprintf(title, 100, "Blocks(s) with %s %s", node, name);
 		break;
diff --git a/src/sview/part_info.c b/src/sview/part_info.c
index ca4821005..9c3d4328b 100644
--- a/src/sview/part_info.c
+++ b/src/sview/part_info.c
@@ -6,10 +6,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *   
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -86,6 +87,7 @@ enum {
 #ifndef HAVE_BG
 	SORTID_NODELIST, 
 #endif
+	SORTID_NODE_INX,
 	SORTID_NODES, 
 	SORTID_ONLY_LINE, 
 	SORTID_PRIORITY,
@@ -154,6 +156,8 @@ static display_data_t display_data_part[] = {
 	 create_model_part, admin_edit_part},
 	{G_TYPE_INT, SORTID_ONLY_LINE, NULL, FALSE, EDIT_NONE, refresh_part,
 	 create_model_part, admin_edit_part},
+	{G_TYPE_POINTER, SORTID_NODE_INX,  NULL, FALSE, EDIT_NONE, 
+	 refresh_part, create_model_part, admin_edit_part},
 	{G_TYPE_INT, SORTID_UPDATED, NULL, FALSE, EDIT_NONE, refresh_part,
 	 create_model_part, admin_edit_part},
 
@@ -190,23 +194,10 @@ static display_data_t options_data_part[] = {
 	{G_TYPE_STRING, NODE_PAGE, "Nodes", TRUE, PART_PAGE},
 #endif
 	{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}
 };
 
-#ifdef HAVE_BG
-static void _update_nodes_for_bg(int node_scaling,
-				 node_info_msg_t *node_msg,
-				 bg_info_record_t *bg_info_record);
-/* ERROR_STATE must be last since that will affect the state of the rest of the
-   midplane.
-*/
-enum {
-	SVIEW_BG_IDLE_STATE,
-	SVIEW_BG_ALLOC_STATE,
-	SVIEW_BG_ERROR_STATE
-};
-#endif
-
 static display_data_t *local_display_data = NULL;
 
 static char *got_edit_signal = NULL;
@@ -220,45 +211,6 @@ static void _append_part_sub_record(sview_part_sub_t *sview_part_sub,
 				    int line);
 static node_info_t *_find_node(char *node_name, node_info_msg_t *node_msg);
 
-#ifdef HAVE_BG
-
-static void _update_nodes_for_bg(int node_scaling,
-				 node_info_msg_t *node_msg,
-				 bg_info_record_t *bg_info_record)
-{
-	node_info_t *node_ptr = NULL;
-	hostlist_t hl;
-	char *node_name = NULL;
-
-	/* we are using less than one node */
-	if(bg_info_record->conn_type == SELECT_SMALL) 
-		node_scaling = bg_info_record->node_cnt;
-       		   
-	hl = hostlist_create(bg_info_record->nodes);
-	while (1) {
-		if (node_name)
-			free(node_name);
-		node_name = hostlist_shift(hl);
-		if (!node_name)
-			break;
-		node_ptr = _find_node(node_name, node_msg);
-		if (!node_ptr)
-			continue;
-		/* cores is overloaded to be the cnodes in an error
-		 * state and used_cpus is overloaded to be the nodes in
-		 * use.  No block should be sent in here if it isn't
-		 * in use (that doesn't mean in a free state, it means
-		 * the user isn't slurm or the block is in an error state.  
-		 */
-		if(bg_info_record->state == RM_PARTITION_ERROR) 
-			node_ptr->cores += node_scaling;
-		else
-			node_ptr->used_cpus += node_scaling;
-	}
-	hostlist_destroy(hl);
-	
-}
-#endif
 
 static int 
 _build_min_max_16_string(char *buffer, int buf_size, 
@@ -1050,6 +1002,9 @@ static void _update_part_record(sview_part_info_t *sview_part_info,
 
 	gtk_tree_store_set(treestore, iter, SORTID_NODELIST, 
 			   part_ptr->nodes, -1);
+
+	gtk_tree_store_set(treestore, iter, 
+			   SORTID_NODE_INX, part_ptr->node_inx, -1);
 	
 	gtk_tree_store_set(treestore, iter, SORTID_ONLY_LINE, 0, -1);
 	/* clear out info for the main listing */
@@ -1416,6 +1371,27 @@ static sview_part_info_t *_create_sview_part_info(partition_info_t* part_ptr)
 	return sview_part_info;
 }
 
+static int _sview_part_sort_aval_dec(sview_part_info_t* rec_a,
+				     sview_part_info_t* rec_b)
+{
+	int size_a = rec_a->part_ptr->total_nodes;
+	int size_b = rec_b->part_ptr->total_nodes;
+
+	if (size_a > size_b)
+		return -1;
+	else if (size_a < size_b)
+		return 1;
+
+	if(rec_a->part_ptr->nodes && rec_b->part_ptr->nodes) {
+		size_a = strcmp(rec_a->part_ptr->nodes, rec_b->part_ptr->nodes);
+		if (size_a > 0)
+			return -1;
+		else if (size_a < 0)
+			return 1;
+	}
+	return 0;
+}
+
 static List _create_part_info_list(partition_info_msg_t *part_info_ptr,
 				   node_info_msg_t *node_info_ptr,
 				   node_select_info_msg_t *node_select_ptr,
@@ -1432,9 +1408,8 @@ static List _create_part_info_list(partition_info_msg_t *part_info_ptr,
 	hostlist_t hl;
 #ifdef HAVE_BG
 	int j;
-	bg_info_record_t *bg_info_record = NULL;
 	int node_scaling = part_info_ptr->partition_array[0].node_scaling;
-	char *slurm_user = NULL;
+	int block_error = 0;
 #endif
 	if(!changed && info_list) {
 		return info_list;
@@ -1449,39 +1424,6 @@ static List _create_part_info_list(partition_info_msg_t *part_info_ptr,
 		return NULL;
 	}
 
-#ifdef HAVE_BG
-	slurm_user = xstrdup(slurmctld_conf.slurm_user_name);
-
-	for (i=0; i<node_info_ptr->record_count; i++) {
-		node_ptr = &(node_info_ptr->node_array[i]);
-		/* in each node_ptr we overload the threads var
-		 * with the number of cnodes in the used_cpus var
-		 * will be used to tell how many cnodes are
-		 * allocated and the cores will represent the cnodes
-		 * in an error state. So we can get an idle count by
-		 * subtracting those 2 numbers from the total possible
-		 * cnodes (which are the idle cnodes).
-		 */
-		node_ptr->threads = node_scaling;
-		node_ptr->cores = 0;
-		node_ptr->used_cpus = 0;
-	}
-
-	for (i=0; i<node_select_ptr->record_count; i++) {
-		bg_info_record = &(node_select_ptr->bg_info_array[i]);
-		
-		/* this block is idle we won't mark it */
-		if (bg_info_record->state != RM_PARTITION_ERROR
-		    && !strcmp(slurm_user, bg_info_record->owner_name))
-			continue;
-		_update_nodes_for_bg(node_scaling, node_info_ptr,
-				     bg_info_record);
-	}
-	xfree(slurm_user);
-
-#endif
-
-
 	for (i=0; i<part_info_ptr->record_count; i++) {
 		part_ptr = &(part_info_ptr->partition_array[i]);
 		if (!part_ptr->nodes || (part_ptr->nodes[0] == '\0'))
@@ -1493,6 +1435,14 @@ static List _create_part_info_list(partition_info_msg_t *part_info_ptr,
 			node_ptr = _find_node(node_name, node_info_ptr);
 			free(node_name);
 #ifdef HAVE_BG
+			if((node_ptr->node_state & NODE_STATE_DRAIN) 
+			   && (node_ptr->node_state & NODE_STATE_FAIL)) {
+				node_ptr->node_state &= ~NODE_STATE_DRAIN;
+				node_ptr->node_state &= ~NODE_STATE_FAIL;
+				block_error = 1;
+			} else
+				block_error = 0;
+			node_ptr->threads = node_scaling;
 			for(j=0; j<3; j++) {
 				int norm = 0;
 				switch(j) {
@@ -1545,8 +1495,11 @@ static List _create_part_info_list(partition_info_msg_t *part_info_ptr,
 						continue;
 					node_ptr->node_state &=
 						NODE_STATE_FLAGS;
-					node_ptr->node_state |= 
+					node_ptr->node_state |=
 						NODE_STATE_DRAIN;
+					if(block_error)
+						node_ptr->node_state
+							|= NODE_STATE_FAIL;
 					node_ptr->threads = node_ptr->cores;
 					break;
 				default:
@@ -1592,6 +1545,10 @@ static List _create_part_info_list(partition_info_msg_t *part_info_ptr,
 		hostlist_destroy(hl);
 		list_append(info_list, sview_part_info);
 	}
+
+	list_sort(info_list,
+		  (ListCmpF)_sview_part_sort_aval_dec);
+
 	return info_list;
 }
 
@@ -1633,17 +1590,11 @@ need_refresh:
 		if(!strcmp(part_ptr->name, name)) {
 			j=0;
 			while(part_ptr->node_inx[j] >= 0) {
-				if(!first_time)
-					change_grid_color(
-						popup_win->grid_button_list,
-						part_ptr->node_inx[j],
-						part_ptr->node_inx[j+1], i);
-				else
-					get_button_list_from_main(
-						&popup_win->grid_button_list,
-						part_ptr->node_inx[j],
-						part_ptr->node_inx[j+1],
-						i);
+				change_grid_color(
+					popup_win->grid_button_list,
+					part_ptr->node_inx[j],
+					part_ptr->node_inx[j+1], i,
+					true);
 				j += 2;
 			}
 			_layout_part_record(treeview, sview_part_info, update);
@@ -1674,9 +1625,6 @@ need_refresh:
 			
 			goto need_refresh;
 		}
-		put_buttons_in_table(popup_win->grid_table,
-				     popup_win->grid_button_list);
-
 	}
 	gtk_widget_show(spec_info->display_widget);
 		
@@ -1705,6 +1653,8 @@ extern int get_new_info_part(partition_info_msg_t **part_ptr, int force)
 	static bool changed = 0;
 		
 	if(!force && ((now - last) < global_sleep_time)) {
+		if(*part_ptr != part_info_ptr)
+			error_code = SLURM_SUCCESS;
 		*part_ptr = part_info_ptr;
 		if(changed) 
 			return SLURM_SUCCESS;
@@ -1729,6 +1679,10 @@ extern int get_new_info_part(partition_info_msg_t **part_ptr, int force)
 	}
 	
 	part_info_ptr = new_part_ptr;
+
+	if(*part_ptr != part_info_ptr) 
+		error_code = SLURM_SUCCESS;
+
 	*part_ptr = new_part_ptr;
 	return error_code;
 }
@@ -2045,7 +1999,7 @@ display_it:
 				change_grid_color(grid_button_list,
 						  part_ptr->node_inx[j],
 						  part_ptr->node_inx[j+1],
-						  i);
+						  i, true);
 			j += 2;
 		}
 		i++;
@@ -2096,9 +2050,7 @@ extern void specific_info_part(popup_info_t *popup_win)
 	sview_part_info_t *sview_part_info_ptr = NULL;
 	partition_info_t *part_ptr = NULL;
 	ListIterator itr = NULL;
-	char *host = NULL, *host2 = NULL;
-	hostlist_t hostlist = NULL;
-	int found = 0;
+	hostset_t hostset = NULL;
 	
 	if(!spec_info->display_widget)
 		setup_popup_info(popup_win, display_data_part, SORTID_CNT);
@@ -2203,15 +2155,7 @@ display_it:
 				 SORTID_CNT);
 	}
 	
-	if(popup_win->grid_button_list) {
-		list_destroy(popup_win->grid_button_list);
-	}	       
-	
-#ifdef HAVE_3D
-	popup_win->grid_button_list = copy_main_button_list();
-#else
-	popup_win->grid_button_list = list_create(destroy_grid_button);
-#endif	
+	setup_popup_grid_list(popup_win);
 
 	spec_info->view = INFO_VIEW;
 	if(spec_info->type == INFO_PAGE) {
@@ -2224,34 +2168,24 @@ display_it:
 	send_info_list = list_create(NULL);	
 	
 	itr = list_iterator_create(info_list);
+	i = -1;
 	while ((sview_part_info_ptr = list_next(itr))) {
 		i++;
-		part_ptr = sview_part_info_ptr->part_ptr;	
+		part_ptr = sview_part_info_ptr->part_ptr;
 		switch(spec_info->type) {
+		case RESV_PAGE:
 		case NODE_PAGE:
 			if(!part_ptr->nodes)
 				continue;
 
-			hostlist = hostlist_create(
-				spec_info->search_info->gchar_data);
-			host = hostlist_shift(hostlist);
-			hostlist_destroy(hostlist);
-			if(!host) 
+			if(!(hostset = hostset_create(
+				     spec_info->search_info->gchar_data)))
 				continue;
-			
-			hostlist = hostlist_create(part_ptr->nodes);
-			found = 0;
-			while((host2 = hostlist_shift(hostlist))) { 
-				if(!strcmp(host, host2)) {
-					free(host2);
-					found = 1;
-					break; 
-				}
-				free(host2);
-			}
-			hostlist_destroy(hostlist);
-			if(!found)
+			if(!hostset_intersects(hostset, part_ptr->nodes)) {
+				hostset_destroy(hostset);
 				continue;
+			}
+			hostset_destroy(hostset);				
 			break;
 		case PART_PAGE:
 		case BLOCK_PAGE:
@@ -2268,23 +2202,14 @@ display_it:
 		list_push(send_info_list, sview_part_info_ptr);
 		j=0;
 		while(part_ptr->node_inx[j] >= 0) {
-#ifdef HAVE_3D
 			change_grid_color(
 				popup_win->grid_button_list,
 				part_ptr->node_inx[j],
-				part_ptr->node_inx[j+1], i);
-#else
-			get_button_list_from_main(
-				&popup_win->grid_button_list,
-				part_ptr->node_inx[j],
-				part_ptr->node_inx[j+1], i);
-#endif
+				part_ptr->node_inx[j+1], i, false);
 			j += 2;
 		}
 	}
 	list_iterator_destroy(itr);
-	put_buttons_in_table(popup_win->grid_table,
-			     popup_win->grid_button_list);
 	 
 	_update_info_part(send_info_list, 
 			  GTK_TREE_VIEW(spec_info->display_widget));
@@ -2333,6 +2258,9 @@ extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id)
 	case JOB_PAGE:
 		snprintf(title, 100, "Job(s) in partition %s", name);
 		break;
+	case RESV_PAGE:
+		snprintf(title, 100, "Reservation(s) in partition %s", name);
+		break;
 	case NODE_PAGE:
 		gtk_tree_model_get(model, iter, SORTID_ONLY_LINE,
 				   &only_line, -1);
@@ -2394,6 +2322,13 @@ extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id)
 		return;
 	}
 
+	/* Pass the model and the structs from the iter so we can always get
+	   the current node_inx.
+	*/
+	popup_win->model = model;
+	popup_win->iter = *iter;
+	popup_win->node_inx_id = SORTID_NODE_INX;
+
 	switch(id) {
 	case JOB_PAGE:
 	case BLOCK_PAGE: 
@@ -2401,6 +2336,7 @@ extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id)
 		popup_win->spec_info->search_info->gchar_data = name;
 		//specific_info_job(popup_win);
 		break;
+	case RESV_PAGE:
 	case NODE_PAGE:
 		g_free(name);
 		gtk_tree_model_get(model, iter, SORTID_NODELIST, &name, -1);
diff --git a/src/sview/popups.c b/src/sview/popups.c
index 1bd3af404..4c83ca03b 100644
--- a/src/sview/popups.c
+++ b/src/sview/popups.c
@@ -2,14 +2,15 @@
  *  popups.c - put different popup displays here
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
- *  Copyright (C) 2008 Lawrence Livermore National Security.
+ *  Copyright (C) 2008-2009 Lawrence Livermore National Security.
  *  Portions Copyright (C) 2008 Vijay Ramasubramanian
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -151,6 +152,11 @@ void _search_entry(sview_search_info_t *sview_search_info)
 		xfree(lower);
 		
 		break;
+	case SEARCH_RESERVATION_NAME:
+		id = RESV_PAGE;
+		snprintf(title, 100, "Reservation %s info",
+			 sview_search_info->gchar_data);
+		break;
 	default:
 		g_print("unknown search type %d.\n",
 			sview_search_info->search_type);
@@ -258,6 +264,11 @@ static void _layout_ctl_conf(GtkTreeStore *treestore,
 	add_display_treestore_line(update, treestore, &iter, 
 				   "CheckpointType",
 				   slurm_ctl_conf_ptr->checkpoint_type);
+	snprintf(temp_str, sizeof(temp_str), "%u", 
+		 slurm_ctl_conf_ptr->complete_wait);
+	add_display_treestore_line(update, treestore, &iter, 
+				   "CompleteWait", 
+				   temp_str);
 	add_display_treestore_line(update, treestore, &iter, 
 				   "ControlAddr", 
 				   slurm_ctl_conf_ptr->control_addr);
@@ -267,11 +278,17 @@ static void _layout_ctl_conf(GtkTreeStore *treestore,
 	add_display_treestore_line(update, treestore, &iter, 
 				   "CryptoType", 
 				   slurm_ctl_conf_ptr->crypto_type);
-	snprintf(temp_str, sizeof(temp_str), "%u", 
-		 slurm_ctl_conf_ptr->def_mem_per_task);
-	add_display_treestore_line(update, treestore, &iter, 
-				   "DefMemPerTask", 
-				   temp_str);
+	if (slurm_ctl_conf_ptr->def_mem_per_task & MEM_PER_CPU) {
+		snprintf(temp_str, sizeof(temp_str), "%u", 
+			 slurm_ctl_conf_ptr->def_mem_per_task & (~MEM_PER_CPU));
+		add_display_treestore_line(update, treestore, &iter, 
+					   "DefMemPerCPU", temp_str);
+	} else {
+		snprintf(temp_str, sizeof(temp_str), "%u", 
+			 slurm_ctl_conf_ptr->def_mem_per_task);
+		add_display_treestore_line(update, treestore, &iter, 
+					   "DefMemPerNode", temp_str);
+	}
 	add_display_treestore_line(update, treestore, &iter, 
 				   "Epilog", 
 				   slurm_ctl_conf_ptr->epilog);
@@ -324,7 +341,8 @@ static void _layout_ctl_conf(GtkTreeStore *treestore,
 
 	add_display_treestore_line(update, treestore, &iter, 
 				   "JobCredentialPrivateKey", 
-				   slurm_ctl_conf_ptr->job_credential_private_key);
+				   slurm_ctl_conf_ptr->
+				   job_credential_private_key);
 	add_display_treestore_line(update, treestore, &iter, 
 				   "JobCredentialPublicCertificate", 
 				   slurm_ctl_conf_ptr->
@@ -346,11 +364,17 @@ static void _layout_ctl_conf(GtkTreeStore *treestore,
 	add_display_treestore_line(update, treestore, &iter, 
 				   "MaxJobCount", 
 				   temp_str);
-	snprintf(temp_str, sizeof(temp_str), "%u", 
-		 slurm_ctl_conf_ptr->max_mem_per_task);
-	add_display_treestore_line(update, treestore, &iter, 
-				   "MaxMemPerTask", 
-				   temp_str);
+	if (slurm_ctl_conf_ptr->max_mem_per_task & MEM_PER_CPU) {
+		snprintf(temp_str, sizeof(temp_str), "%u", 
+			 slurm_ctl_conf_ptr->max_mem_per_task & (~MEM_PER_CPU));
+		add_display_treestore_line(update, treestore, &iter, 
+					   "MaxMemPerCPU", temp_str);
+	} else {
+		snprintf(temp_str, sizeof(temp_str), "%u", 
+			 slurm_ctl_conf_ptr->max_mem_per_task);
+		add_display_treestore_line(update, treestore, &iter, 
+					   "MaxMemPerNode", temp_str);
+	}
 	snprintf(temp_str, sizeof(temp_str), "%u", 
 		 slurm_ctl_conf_ptr->msg_timeout);
 	add_display_treestore_line(update, treestore, &iter, 
@@ -364,6 +388,9 @@ static void _layout_ctl_conf(GtkTreeStore *treestore,
 	add_display_treestore_line(update, treestore, &iter, 
 				   "MpiDefault",
 				   slurm_ctl_conf_ptr->mpi_default);
+	add_display_treestore_line(update, treestore, &iter, 
+				   "MpiParams",
+				   slurm_ctl_conf_ptr->mpi_params);
 #ifdef MULTIPLE_SLURMD
 	add_display_treestore_line(update, treestore, &iter, 
 				   "MULTIPLE_SLURMD", "1");
@@ -777,7 +804,11 @@ extern void create_search_popup(GtkAction *action, gpointer user_data)
 		label = gtk_label_new("Which state?");
 	}
 #endif
-	else {
+	else if(!strcmp(name, "reservation_name")) {
+		sview_search_info.search_type = SEARCH_RESERVATION_NAME;
+		entry = create_entry();
+		label = gtk_label_new("Which reservation");
+	} else {
 		sview_search_info.search_type = 0;
 		goto end_it;
 	}
@@ -819,6 +850,7 @@ extern void create_search_popup(GtkAction *action, gpointer user_data)
 		case SEARCH_BLOCK_SIZE:
 		case SEARCH_PARTITION_NAME:
 		case SEARCH_NODE_NAME:
+		case SEARCH_RESERVATION_NAME:
 			sview_search_info.gchar_data =
 				g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
 			break;
diff --git a/src/sview/resv_info.c b/src/sview/resv_info.c
new file mode 100644
index 000000000..068cac31a
--- /dev/null
+++ b/src/sview/resv_info.c
@@ -0,0 +1,1419 @@
+/*****************************************************************************\
+ *  resv_info.c - Functions related to advanced reservation display 
+ *  mode of sview.
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Morris Jette <jette@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved. 
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
+\*****************************************************************************/
+
+#include "src/common/uid.h"
+#include "src/sview/sview.h"
+#include "src/common/parse_time.h"
+ 
+#define _DEBUG 0
+
+/* Collection of data for printing reports. Like data is combined here */
+typedef struct {
+	reserve_info_t *resv_ptr;
+	char *color;
+} sview_resv_info_t;
+
+enum { 
+	EDIT_REMOVE = 1,
+	EDIT_EDIT
+};
+
+/* These need to be in alpha order (except POS and CNT) */
+enum { 
+	SORTID_POS = POS_LOC,
+	SORTID_ACCOUNTS,
+	SORTID_ACTION,
+	SORTID_DURATION,
+	SORTID_END_TIME,
+	SORTID_FEATURES,
+	SORTID_FLAGS,
+	SORTID_NAME,
+	SORTID_NODE_CNT,
+	SORTID_NODE_LIST,
+	SORTID_NODE_INX,
+	SORTID_PARTITION,
+	SORTID_START_TIME,
+	SORTID_UPDATED,
+	SORTID_USERS,
+	SORTID_CNT
+};
+
+/* extra field here is for choosing the type of edit you that will
+ * take place.  If you choose EDIT_MODEL (means only display a set of
+ * known options) create it in function create_model_*.  
+ */
+
+static display_data_t display_data_resv[] = {
+	{G_TYPE_INT, SORTID_POS, NULL, FALSE, EDIT_NONE, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_NAME,       "Name", TRUE, EDIT_NONE, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_ACTION,     "Action", FALSE, EDIT_MODEL,
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_NODE_CNT,   "Nodes", TRUE, EDIT_TEXTBOX, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_NODE_LIST,  "NodeList", TRUE, EDIT_TEXTBOX, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_START_TIME, "StartTime", TRUE, EDIT_TEXTBOX, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_END_TIME,   "EndTime", TRUE, EDIT_TEXTBOX, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_DURATION, "Duration", FALSE, EDIT_TEXTBOX, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_ACCOUNTS,   "Accounts", FALSE, EDIT_TEXTBOX, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_USERS,      "Users", FALSE, EDIT_TEXTBOX, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_PARTITION,  "Partition", FALSE, EDIT_TEXTBOX, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_FEATURES,   "Features", FALSE, EDIT_TEXTBOX, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_FLAGS,      "Flags", FALSE, EDIT_NONE, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_POINTER, SORTID_NODE_INX,  NULL, FALSE, EDIT_NONE, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_INT,    SORTID_UPDATED,    NULL, FALSE, EDIT_NONE,
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
+};
+
+static display_data_t options_data_resv[] = {
+	{G_TYPE_INT, SORTID_POS, NULL, FALSE, EDIT_NONE},
+	{G_TYPE_STRING, INFO_PAGE, "Full Info", TRUE, RESV_PAGE},
+	{G_TYPE_STRING, RESV_PAGE, "Remove", TRUE, ADMIN_PAGE},
+	{G_TYPE_STRING, RESV_PAGE, "Edit Reservation", TRUE, ADMIN_PAGE},
+	{G_TYPE_STRING, JOB_PAGE, "Jobs", TRUE, RESV_PAGE},
+	{G_TYPE_STRING, PART_PAGE, "Partitions", TRUE, RESV_PAGE},
+#ifdef HAVE_BG
+	{G_TYPE_STRING, BLOCK_PAGE, "Blocks", TRUE, RESV_PAGE},
+	{G_TYPE_STRING, NODE_PAGE, "Base Partitions", TRUE, RESV_PAGE},
+#else
+	{G_TYPE_STRING, NODE_PAGE, "Nodes", TRUE, RESV_PAGE},
+#endif
+	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
+};
+
+
+static display_data_t *local_display_data = NULL;
+
+static char *got_edit_signal = NULL;
+
+/*
+ *  _parse_flags  is used to parse the Flags= option.  It handles
+ *  daily, weekly, and maint, optionally preceded by + or -, 
+ *  separated by a comma but no spaces.
+ */
+static uint32_t _parse_flags(const char *flagstr)
+{
+	int flip;
+	uint32_t outflags = 0;
+	const char *curr = flagstr;
+	int taglen = 0;
+
+	while (*curr != '\0') {
+		flip = 0;
+		if (*curr == '+') {
+			curr++;
+		} else if (*curr == '-') {
+			flip = 1;
+			curr++;
+		}
+		taglen = 0;
+		while (curr[taglen] != ',' && curr[taglen] != '\0')
+			taglen++;
+
+		if (strncasecmp(curr, "Maintenance", MAX(taglen,1)) == 0) {
+			curr += taglen;
+			if (flip)
+				outflags |= RESERVE_FLAG_NO_MAINT;
+			else 
+				outflags |= RESERVE_FLAG_MAINT;
+		} else if (strncasecmp(curr, "Daily", MAX(taglen,1)) == 0) {
+			curr += taglen;
+			if (flip)
+				outflags |= RESERVE_FLAG_NO_DAILY;
+			else 
+				outflags |= RESERVE_FLAG_DAILY;
+		} else if (strncasecmp(curr, "Weekly", MAX(taglen,1)) == 0) {
+			curr += taglen;
+			if (flip)
+				outflags |= RESERVE_FLAG_NO_WEEKLY;
+			else 
+				outflags |= RESERVE_FLAG_WEEKLY;
+		} else {
+			char *temp = g_strdup_printf("Error parsing flags %s.",
+						     flagstr);
+			display_edit_note(temp);
+			g_free(temp);
+			outflags = (uint32_t)NO_VAL;
+			break;
+		}
+
+		if (*curr == ',') 
+			curr++;
+	}
+	return outflags;
+}
+
+static void _set_active_combo_resv(GtkComboBox *combo, 
+				   GtkTreeModel *model, GtkTreeIter *iter,
+				   int type)
+{
+	char *temp_char = NULL;
+	int action = 0;
+
+	gtk_tree_model_get(model, iter, type, &temp_char, -1);
+	if(!temp_char)
+		goto end_it;
+	switch(type) {
+	case SORTID_ACTION:
+		if(!strcmp(temp_char, "none"))
+			action = 0;
+		else if(!strcmp(temp_char, "remove"))
+			action = 1;
+		else 
+			action = 0;
+				
+		break;
+	default:
+		break;
+	}
+	g_free(temp_char);
+end_it:
+	gtk_combo_box_set_active(combo, action);
+	
+}
+
+/* don't free this char */
+static const char *_set_resv_msg(resv_desc_msg_t *resv_msg,
+				 const char *new_text,
+				 int column)
+{
+	char *type = NULL;
+	int temp_int = 0;
+	uint32_t f;
+	
+	/* need to clear errno here (just in case) */
+	errno = 0;
+
+	if(!resv_msg)
+		return NULL;
+	
+	switch(column) {
+	case SORTID_ACCOUNTS:		
+		resv_msg->accounts = xstrdup(new_text);
+		type = "accounts";
+		break;
+	case SORTID_ACTION:
+		xfree(got_edit_signal);
+		if(!strcasecmp(new_text, "None"))
+			got_edit_signal = NULL;
+		else
+			got_edit_signal = xstrdup(new_text);
+		break;
+	case SORTID_DURATION:
+		temp_int = time_str2mins((char *)new_text);
+		if(temp_int <= 0)
+			goto return_error;
+		resv_msg->duration = temp_int;
+		type = "duration";
+		break;
+	case SORTID_END_TIME:
+		resv_msg->end_time = parse_time((char *)new_text, 0);
+		type = "end time";
+		break;
+	case SORTID_FEATURES:
+		resv_msg->features = xstrdup(new_text);
+		type = "features";
+		break;
+	case SORTID_FLAGS:
+		f = _parse_flags(new_text);
+		type = "flags";
+		if(f == (uint32_t)NO_VAL) 
+			goto return_error;
+		resv_msg->flags = f;
+		break;
+	case SORTID_NAME:
+		resv_msg->name = xstrdup(new_text);
+		type = "name";
+		break;
+	case SORTID_NODE_CNT:
+		temp_int = strtol(new_text, (char **)NULL, 10);
+		
+		type = "Node Count";
+		if(temp_int <= 0)
+			goto return_error;
+		resv_msg->node_cnt = temp_int;
+		break;
+	case SORTID_NODE_LIST:
+		resv_msg->node_list = xstrdup(new_text);
+		type = "node list";
+		break;
+	case SORTID_PARTITION:
+		resv_msg->partition = xstrdup(new_text);
+		type = "partition";
+		break;
+	case SORTID_START_TIME:
+		resv_msg->start_time = parse_time((char *)new_text, 0);
+		type = "start time";
+		break;
+	case SORTID_USERS:		
+		resv_msg->users = xstrdup(new_text);
+		type = "users";
+		break;
+	default:
+		type = "unknown";
+		break;
+	}
+
+	return type;
+
+return_error:
+	errno = 1;
+	return type;
+}
+
+static void _resv_info_list_del(void *object)
+{
+	sview_resv_info_t *sview_resv_info = (sview_resv_info_t *)object;
+
+	if (sview_resv_info) {
+		xfree(sview_resv_info);
+	}
+}
+
+static void _admin_edit_combo_box_resv(GtkComboBox *combo,
+				       resv_desc_msg_t *resv_msg)
+{
+	GtkTreeModel *model = NULL;
+	GtkTreeIter iter;
+	int column = 0;
+	char *name = NULL;
+	
+	if(!resv_msg)
+		return;
+
+	if(!gtk_combo_box_get_active_iter(combo, &iter)) {
+		g_print("nothing selected\n");
+		return;
+	}
+	model = gtk_combo_box_get_model(combo);
+	if(!model) {
+		g_print("nothing selected\n");
+		return;
+	}
+
+	gtk_tree_model_get(model, &iter, 0, &name, -1);
+	gtk_tree_model_get(model, &iter, 1, &column, -1);
+
+	_set_resv_msg(resv_msg, name, column);
+
+	g_free(name);
+}
+
+
+
+static gboolean _admin_focus_out_resv(GtkEntry *entry,
+				      GdkEventFocus *event, 
+				      resv_desc_msg_t *resv_msg)
+{
+	int type = gtk_entry_get_max_length(entry);
+	const char *name = gtk_entry_get_text(entry);
+	type -= DEFAULT_ENTRY_LENGTH;
+	_set_resv_msg(resv_msg, name, type);
+	
+	return false;
+}
+
+static GtkWidget *_admin_full_edit_resv(resv_desc_msg_t *resv_msg, 
+					GtkTreeModel *model, GtkTreeIter *iter)
+{
+	GtkScrolledWindow *window = create_scrolled_window();
+	GtkBin *bin = NULL;
+	GtkViewport *view = NULL;
+	GtkTable *table = NULL;
+	GtkWidget *label = NULL;
+	GtkWidget *entry = NULL;
+	GtkTreeModel *model2 = NULL; 
+	GtkCellRenderer *renderer = NULL;
+	int i = 0, row = 0;
+	char *temp_char = NULL;
+
+	gtk_scrolled_window_set_policy(window,
+				       GTK_POLICY_NEVER,
+				       GTK_POLICY_AUTOMATIC);
+	bin = GTK_BIN(&window->container);
+	view = GTK_VIEWPORT(bin->child);
+	bin = GTK_BIN(&view->bin);
+	table = GTK_TABLE(bin->child);
+	gtk_table_resize(table, SORTID_CNT, 2);
+	
+	gtk_table_set_homogeneous(table, FALSE);	
+
+	for(i = 0; i < SORTID_CNT; i++) {
+		if(display_data_resv[i].extra == EDIT_MODEL) {
+			/* edittable items that can only be known
+			   values */
+			model2 = GTK_TREE_MODEL(
+				create_model_resv(display_data_resv[i].id));
+			if(!model2) {
+				g_print("no model set up for %d(%s)\n",
+					display_data_resv[i].id,
+					display_data_resv[i].name);
+				continue;
+			}
+			entry = gtk_combo_box_new_with_model(model2);
+			g_object_unref(model2);
+			
+			_set_active_combo_resv(GTK_COMBO_BOX(entry), model,
+					      iter, display_data_resv[i].id);
+			
+			g_signal_connect(entry, "changed",
+					 G_CALLBACK(
+						 _admin_edit_combo_box_resv),
+					 resv_msg);
+			
+			renderer = gtk_cell_renderer_text_new();
+			gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(entry),
+						   renderer, TRUE);
+			gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(entry),
+						      renderer, "text", 0);
+		} else if(display_data_resv[i].extra == EDIT_TEXTBOX) {
+			/* other edittable items that are unknown */
+			entry = create_entry();
+			gtk_tree_model_get(model, iter,
+					   display_data_resv[i].id,
+					   &temp_char, -1);
+			gtk_entry_set_max_length(GTK_ENTRY(entry), 
+						 (DEFAULT_ENTRY_LENGTH +
+						  display_data_resv[i].id));
+			
+			if(temp_char) {
+				gtk_entry_set_text(GTK_ENTRY(entry),
+						   temp_char);
+				g_free(temp_char);
+			}
+			g_signal_connect(entry, "focus-out-event",
+					 G_CALLBACK(_admin_focus_out_resv),
+					 resv_msg);
+		} else /* others can't be altered by the user */
+			continue;
+		label = gtk_label_new(display_data_resv[i].name);
+		gtk_table_attach(table, label, 0, 1, row, row+1,
+				 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 
+				 0, 0);
+		gtk_table_attach(table, entry, 1, 2, row, row+1,
+				 GTK_FILL, GTK_SHRINK,
+				 0, 0);
+		row++;
+	}
+	gtk_table_resize(table, row, 2);
+	
+	return GTK_WIDGET(window);
+}
+
+static void _layout_resv_record(GtkTreeView *treeview, 
+				sview_resv_info_t *sview_resv_info,
+				int update)
+{
+	GtkTreeIter iter;
+	char time_buf[20];
+	reserve_info_t *resv_ptr = sview_resv_info->resv_ptr;
+	char *temp_char = NULL;
+
+	GtkTreeStore *treestore = 
+		GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
+	
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_NAME),
+				   resv_ptr->name);
+
+	convert_num_unit((float)resv_ptr->node_cnt, 
+			 time_buf, sizeof(time_buf), UNIT_NONE);
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_NODE_CNT), 
+				   time_buf);
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_NODE_LIST),
+				   resv_ptr->node_list);
+
+	slurm_make_time_str((time_t *)&resv_ptr->start_time, time_buf,
+			    sizeof(time_buf));
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_START_TIME), 
+				   time_buf);
+	slurm_make_time_str((time_t *)&resv_ptr->end_time, time_buf,
+			    sizeof(time_buf));
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_END_TIME), 
+				   time_buf);
+
+	secs2time_str((uint32_t)difftime(resv_ptr->end_time,
+					 resv_ptr->start_time),
+		      time_buf, sizeof(time_buf));
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_DURATION), 
+				   time_buf);
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_ACCOUNTS),
+				   resv_ptr->accounts);
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_USERS),
+				   resv_ptr->users);
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_PARTITION),
+				   resv_ptr->partition);
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_FEATURES),
+				   resv_ptr->features);
+
+	temp_char = reservation_flags_string(resv_ptr->flags);
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_FLAGS),
+				   temp_char);
+	xfree(temp_char);
+}
+
+static void _update_resv_record(sview_resv_info_t *sview_resv_info_ptr, 
+				GtkTreeStore *treestore,
+				GtkTreeIter *iter)
+{
+	char *tmp_ptr = NULL;
+	char tmp_char[50];
+	reserve_info_t *resv_ptr = sview_resv_info_ptr->resv_ptr;
+      
+	gtk_tree_store_set(treestore, iter, SORTID_UPDATED, 1, -1);
+
+	gtk_tree_store_set(treestore, iter,
+			   SORTID_ACCOUNTS, resv_ptr->accounts, -1);
+
+	secs2time_str((uint32_t)difftime(resv_ptr->end_time, 
+					  resv_ptr->start_time), 
+		      tmp_char, sizeof(tmp_char));
+	gtk_tree_store_set(treestore, iter, SORTID_DURATION, tmp_char, -1);
+
+	slurm_make_time_str((time_t *)&resv_ptr->end_time, tmp_char,
+			    sizeof(tmp_char));
+	gtk_tree_store_set(treestore, iter, SORTID_END_TIME, tmp_char, -1);
+
+	gtk_tree_store_set(treestore, iter, SORTID_FEATURES,
+			   resv_ptr->features, -1);
+
+	tmp_ptr = reservation_flags_string(resv_ptr->flags);
+	gtk_tree_store_set(treestore, iter, SORTID_FLAGS,
+			   tmp_ptr, -1);
+	xfree(tmp_ptr);
+
+	gtk_tree_store_set(treestore, iter, SORTID_NAME, resv_ptr->name, -1);
+
+	convert_num_unit((float)resv_ptr->node_cnt,
+			 tmp_char, sizeof(tmp_char), UNIT_NONE);
+	gtk_tree_store_set(treestore, iter, 
+			   SORTID_NODE_CNT, tmp_char, -1);
+
+	gtk_tree_store_set(treestore, iter, 
+			   SORTID_NODE_LIST, resv_ptr->node_list, -1);
+
+	gtk_tree_store_set(treestore, iter, 
+			   SORTID_NODE_INX, resv_ptr->node_inx, -1);
+
+	gtk_tree_store_set(treestore, iter, 
+			   SORTID_PARTITION, resv_ptr->partition, -1);
+
+	slurm_make_time_str((time_t *)&resv_ptr->start_time, tmp_char,
+			    sizeof(tmp_char));
+	gtk_tree_store_set(treestore, iter, SORTID_START_TIME, tmp_char, -1);
+
+	gtk_tree_store_set(treestore, iter,
+			   SORTID_USERS, resv_ptr->users, -1);
+		
+	return;
+}
+
+static void _append_resv_record(sview_resv_info_t *sview_resv_info_ptr, 
+				GtkTreeStore *treestore, GtkTreeIter *iter,
+				int line)
+{
+	gtk_tree_store_append(treestore, iter, NULL);
+	gtk_tree_store_set(treestore, iter, SORTID_POS, line, -1);
+	_update_resv_record(sview_resv_info_ptr, treestore, iter);	
+}
+
+static void _update_info_resv(List info_list, 
+			      GtkTreeView *tree_view)
+{
+	GtkTreePath *path = gtk_tree_path_new_first();
+	GtkTreeModel *model = gtk_tree_view_get_model(tree_view);
+	GtkTreeIter iter;
+	reserve_info_t *resv_ptr = NULL;
+	int line = 0;
+	char *host = NULL, *resv_name = NULL;
+	ListIterator itr = NULL;
+	sview_resv_info_t *sview_resv_info = NULL;
+
+	/* get the iter, or find out the list is empty goto add */
+	if (gtk_tree_model_get_iter(model, &iter, path)) {
+		/* make sure all the reserves are still here */
+		while(1) {
+			gtk_tree_store_set(GTK_TREE_STORE(model), &iter, 
+					   SORTID_UPDATED, 0, -1);	
+			if(!gtk_tree_model_iter_next(model, &iter)) {
+				break;
+			}
+		}
+	}
+
+	itr = list_iterator_create(info_list);
+	while ((sview_resv_info = (sview_resv_info_t*) list_next(itr))) {
+		resv_ptr = sview_resv_info->resv_ptr;
+		/* get the iter, or find out the list is empty goto add */
+		if (!gtk_tree_model_get_iter(model, &iter, path)) {
+			goto adding;
+		} 
+		while(1) {
+			/* search for the jobid and check to see if 
+			   it is in the list */
+			gtk_tree_model_get(model, &iter, SORTID_NAME, 
+					   &resv_name, -1);
+			if(!strcmp(resv_name, resv_ptr->name)) {
+				/* update with new info */
+				g_free(resv_name);
+				_update_resv_record(sview_resv_info, 
+						    GTK_TREE_STORE(model), 
+						    &iter);
+				goto found;
+			}
+			g_free(resv_name);
+				
+			/* see what line we were on to add the next one 
+			   to the list */
+			gtk_tree_model_get(model, &iter, SORTID_POS, 
+					   &line, -1);
+			if(!gtk_tree_model_iter_next(model, &iter)) {
+				line++;
+				break;
+			}
+		}
+	adding:
+		_append_resv_record(sview_resv_info, GTK_TREE_STORE(model), 
+				    &iter, line);
+	found:
+		;
+	}
+	list_iterator_destroy(itr);
+	if(host)
+		free(host);
+
+	gtk_tree_path_free(path);
+	/* remove all old reservations */
+	remove_old(model, SORTID_UPDATED);
+	return;
+}
+
+static int _sview_resv_sort_aval_dec(sview_resv_info_t* rec_a,
+				     sview_resv_info_t* rec_b)
+{
+	int size_a = rec_a->resv_ptr->node_cnt;
+	int size_b = rec_b->resv_ptr->node_cnt;
+
+	if (size_a > size_b)
+		return -1;
+	else if (size_a < size_b)
+		return 1;
+
+	if(rec_a->resv_ptr->node_list && rec_b->resv_ptr->node_list) {
+		size_a = strcmp(rec_a->resv_ptr->node_list, 
+				rec_b->resv_ptr->node_list);
+		if (size_a > 0)
+			return -1;
+		else if (size_a < 0)
+			return 1;
+	}
+	return 0;
+}
+
+static List _create_resv_info_list(reserve_info_msg_t *resv_info_ptr,
+				   int changed)
+{
+	static List info_list = NULL;
+	int i = 0;
+	sview_resv_info_t *sview_resv_info_ptr = NULL;
+	reserve_info_t *resv_ptr = NULL;
+
+	if(!changed && info_list) 
+		goto update_color;
+	
+	if(info_list) 
+		list_flush(info_list);
+	else
+		info_list = list_create(_resv_info_list_del);
+
+	if (!info_list) {
+		g_print("malloc error\n");
+		return NULL;
+	}
+	
+	for(i=0; i<resv_info_ptr->record_count; i++) {
+		resv_ptr = &(resv_info_ptr->reservation_array[i]);
+		sview_resv_info_ptr = xmalloc(sizeof(sview_resv_info_t));
+		sview_resv_info_ptr->resv_ptr = resv_ptr;
+		list_append(info_list, sview_resv_info_ptr);
+	}
+
+	list_sort(info_list,
+		  (ListCmpF)_sview_resv_sort_aval_dec);
+
+update_color:
+	return info_list;
+}
+
+void _display_info_resv(List info_list,	popup_info_t *popup_win)
+{
+	specific_info_t *spec_info = popup_win->spec_info;
+	char *name = (char *)spec_info->search_info->gchar_data;
+	int found = 0;
+	reserve_info_t *resv_ptr = NULL;
+	GtkTreeView *treeview = NULL;
+	ListIterator itr = NULL;
+	sview_resv_info_t *sview_resv_info = NULL;
+	int update = 0;
+	int i = -1, j = 0;
+
+	if(!spec_info->search_info->gchar_data) {
+		//info = xstrdup("No pointer given!");
+		goto finished;
+	}
+
+need_refresh:
+	if(!spec_info->display_widget) {
+		treeview = create_treeview_2cols_attach_to_table(
+			popup_win->table);
+		spec_info->display_widget = 
+			gtk_widget_ref(GTK_WIDGET(treeview));
+	} else {
+		treeview = GTK_TREE_VIEW(spec_info->display_widget);
+		update = 1;
+	}
+
+	itr = list_iterator_create(info_list);
+	while ((sview_resv_info = (sview_resv_info_t*) list_next(itr))) {
+		resv_ptr = sview_resv_info->resv_ptr;
+		i++;
+		if(!strcmp(resv_ptr->name, name)) {
+			j=0;
+			while(resv_ptr->node_inx[j] >= 0) {
+				change_grid_color(
+					popup_win->grid_button_list,
+					resv_ptr->node_inx[j],
+					resv_ptr->node_inx[j+1], i, true);
+				j += 2;
+			}
+			_layout_resv_record(treeview, sview_resv_info, update);
+			found = 1;
+			break;
+		}
+	}
+	list_iterator_destroy(itr);
+	
+	if(!found) {
+		if(!popup_win->not_found) { 
+			char *temp = "RESERVATION DOESN'T EXSIST\n";
+			GtkTreeIter iter;
+			GtkTreeModel *model = NULL;
+	
+			/* only time this will be run so no update */
+			model = gtk_tree_view_get_model(treeview);
+			add_display_treestore_line(0, 
+						   GTK_TREE_STORE(model), 
+						   &iter,
+						   temp, "");
+		}
+		popup_win->not_found = true;
+	} else {
+		if(popup_win->not_found) { 
+			popup_win->not_found = false;
+			gtk_widget_destroy(spec_info->display_widget);
+			
+			goto need_refresh;
+		}
+	}
+	gtk_widget_show(spec_info->display_widget);
+		
+finished:
+		
+	return;
+}
+
+extern void refresh_resv(GtkAction *action, gpointer user_data)
+{
+	popup_info_t *popup_win = (popup_info_t *)user_data;
+	xassert(popup_win != NULL);
+	xassert(popup_win->spec_info != NULL);
+	xassert(popup_win->spec_info->title != NULL);
+	popup_win->force_refresh = 1;
+	specific_info_resv(popup_win);
+}
+
+extern int get_new_info_resv(reserve_info_msg_t **info_ptr, 
+			     int force)
+{
+	static reserve_info_msg_t *resv_info_ptr = NULL, *new_resv_ptr = NULL;
+	int error_code = SLURM_NO_CHANGE_IN_DATA;
+	time_t now = time(NULL);
+	static time_t last;
+	static bool changed = 0;
+		
+	if(!force && ((now - last) < global_sleep_time)) {
+		if(*info_ptr != resv_info_ptr) 
+			error_code = SLURM_SUCCESS;
+		*info_ptr = resv_info_ptr;
+		if(changed) 
+			return SLURM_SUCCESS;
+		return error_code;
+	}
+	last = now;
+	if (resv_info_ptr) {
+		error_code = slurm_load_reservations(resv_info_ptr->last_update,
+						     &new_resv_ptr);
+		if (error_code == SLURM_SUCCESS) {
+			slurm_free_reservation_info_msg(resv_info_ptr);
+			changed = 1;
+		} else if (slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) {
+			error_code = SLURM_NO_CHANGE_IN_DATA;
+			new_resv_ptr = resv_info_ptr;
+			changed = 0;
+		}
+	} else {
+		error_code = slurm_load_reservations((time_t) NULL, 
+						     &new_resv_ptr);
+		changed = 1;
+	}
+
+	resv_info_ptr = new_resv_ptr;
+
+	if(*info_ptr != resv_info_ptr) 
+		error_code = SLURM_SUCCESS;
+
+	*info_ptr = new_resv_ptr;
+	return error_code;
+}
+
+extern GtkListStore *create_model_resv(int type)
+{
+	GtkListStore *model = NULL;
+	GtkTreeIter iter;
+
+	switch(type) {
+	case SORTID_ACTION:
+		model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
+		gtk_list_store_append(model, &iter);
+		gtk_list_store_set(model, &iter,
+				   1, SORTID_ACTION,
+				   0, "None",
+				   -1);	
+		gtk_list_store_append(model, &iter);
+		gtk_list_store_set(model, &iter,
+				   1, SORTID_ACTION,
+				   0, "Remove",
+				   -1);	
+		break;
+	default:
+		break;
+	}
+	return model;
+}
+
+extern void admin_edit_resv(GtkCellRendererText *cell,
+			    const char *path_string,
+			    const char *new_text,
+			    gpointer data)
+{
+	GtkTreeStore *treestore = GTK_TREE_STORE(data);
+	GtkTreePath *path = gtk_tree_path_new_from_string(path_string);
+	GtkTreeIter iter;
+	resv_desc_msg_t *resv_msg = xmalloc(sizeof(resv_desc_msg_t));
+	
+	char *temp = NULL;
+	char *old_text = NULL;
+	const char *type = NULL;
+	
+	int column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell), 
+						       "column"));
+
+	if(!new_text || !strcmp(new_text, ""))
+		goto no_input;
+	
+	gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path);
+
+	slurm_init_resv_desc_msg(resv_msg);	
+	gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter, 
+			   SORTID_NAME, &temp, 
+			   column, &old_text,
+			   -1);
+	resv_msg->name = xstrdup(temp);
+	g_free(temp);
+
+	type = _set_resv_msg(resv_msg, new_text, column);
+	if(errno) 
+		goto print_error;
+	
+	if(got_edit_signal) {
+		temp = got_edit_signal;
+		got_edit_signal = NULL;
+		admin_resv(GTK_TREE_MODEL(treestore), &iter, temp);
+		xfree(temp);
+		goto no_input;
+	}
+			
+	if(old_text && !strcmp(old_text, new_text)) {
+		temp = g_strdup_printf("No change in value.");
+	} else if(slurm_update_reservation(resv_msg) == SLURM_SUCCESS) {
+		gtk_tree_store_set(treestore, &iter, column, new_text, -1);
+		temp = g_strdup_printf("Reservation %s %s changed to %s",
+				       resv_msg->name,
+				       type,
+				       new_text);
+	} else if(errno == ESLURM_DISABLED) {
+		temp = g_strdup_printf(
+			"Can only edit %s on reservations not yet started.",
+			type);
+	} else {
+	print_error:
+		temp = g_strdup_printf("Reservation %s %s can't be "
+				       "set to %s",
+				       resv_msg->name,
+				       type,
+				       new_text);
+	}
+	
+	display_edit_note(temp);
+	g_free(temp);
+
+no_input:
+	slurm_free_resv_desc_msg(resv_msg);
+			  
+	gtk_tree_path_free (path);
+	g_free(old_text);
+	g_static_mutex_unlock(&sview_mutex);
+}
+
+extern void get_info_resv(GtkTable *table, display_data_t *display_data)
+{
+	int error_code = SLURM_SUCCESS;
+	List info_list = NULL;
+	static int view = -1;
+	static reserve_info_msg_t *resv_info_ptr = NULL;
+	char error_char[100];
+	GtkWidget *label = NULL;
+	GtkTreeView *tree_view = NULL;
+	static GtkWidget *display_widget = NULL;
+	int i = 0, j = 0;
+	int changed = 1;
+	ListIterator itr = NULL;
+	sview_resv_info_t *sview_resv_info_ptr = NULL;
+	reserve_info_t *resv_ptr = NULL;
+	time_t now = time(NULL);
+		
+	if(display_data)
+		local_display_data = display_data;
+	if(!table) {
+		display_data_resv->set_menu = local_display_data->set_menu;
+		return;
+	}
+	if(display_widget && toggled) {
+		gtk_widget_destroy(display_widget);
+		display_widget = NULL;
+		goto display_it;
+	}
+
+	error_code = get_new_info_resv(&resv_info_ptr, force_refresh);
+	if(error_code == SLURM_NO_CHANGE_IN_DATA) {
+		changed = 0;
+	} else if (error_code != SLURM_SUCCESS) {
+		if(view == ERROR_VIEW)
+			goto end_it;
+		if(display_widget)
+			gtk_widget_destroy(display_widget);
+		view = ERROR_VIEW;
+		sprintf(error_char, "slurm_load_reservations: %s",
+			slurm_strerror(slurm_get_errno()));
+		label = gtk_label_new(error_char);
+		gtk_table_attach_defaults(table, label, 0, 1, 0, 1); 
+		gtk_widget_show(label);	
+		display_widget = gtk_widget_ref(GTK_WIDGET(label));
+		goto end_it;
+	}
+
+display_it:
+	info_list = _create_resv_info_list(resv_info_ptr, changed);
+	if(!info_list)
+		return;
+	/* set up the grid */
+	itr = list_iterator_create(info_list);
+	while ((sview_resv_info_ptr = list_next(itr))) {
+		resv_ptr = sview_resv_info_ptr->resv_ptr;
+		if ((resv_ptr->start_time > now) ||
+		    (resv_ptr->end_time   < now))
+			continue;	/* only map current reservations */
+		j=0;
+		while(resv_ptr->node_inx[j] >= 0) {
+			sview_resv_info_ptr->color = 
+				change_grid_color(grid_button_list,
+						  resv_ptr->node_inx[j],
+						  resv_ptr->node_inx[j+1],
+						  i, true);
+			j += 2;
+		}
+		i++;
+	}
+	list_iterator_destroy(itr);
+		
+	if(view == ERROR_VIEW && display_widget) {
+		gtk_widget_destroy(display_widget);
+		display_widget = NULL;
+	}
+	if(!display_widget) {
+		tree_view = create_treeview(local_display_data);
+
+		display_widget = gtk_widget_ref(GTK_WIDGET(tree_view));
+		gtk_table_attach_defaults(table,
+					  GTK_WIDGET(tree_view),
+					  0, 1, 0, 1);
+		/* since this function sets the model of the tree_view 
+		   to the treestore we don't really care about 
+		   the return value */
+		create_treestore(tree_view, display_data_resv, SORTID_CNT);
+	}
+	view = INFO_VIEW;
+	_update_info_resv(info_list, GTK_TREE_VIEW(display_widget));
+end_it:
+	toggled = FALSE;
+	force_refresh = FALSE;
+	
+	return;
+}
+
+extern void specific_info_resv(popup_info_t *popup_win)
+{
+	int resv_error_code = SLURM_SUCCESS;
+	static reserve_info_msg_t *resv_info_ptr = NULL;
+	static reserve_info_t *resv_ptr = NULL;
+	specific_info_t *spec_info = popup_win->spec_info;
+	sview_search_info_t *search_info = spec_info->search_info;
+	char error_char[100];
+	GtkWidget *label = NULL;
+	GtkTreeView *tree_view = NULL;
+	List resv_list = NULL;
+	List send_resv_list = NULL;
+	int changed = 1;
+	sview_resv_info_t *sview_resv_info_ptr = NULL;
+	int j=0, i=-1;
+	hostset_t hostset = NULL;
+	ListIterator itr = NULL;
+	
+	if(!spec_info->display_widget) {
+		setup_popup_info(popup_win, display_data_resv, SORTID_CNT);
+	}
+
+	if(spec_info->display_widget && popup_win->toggled) {
+		gtk_widget_destroy(spec_info->display_widget);
+		spec_info->display_widget = NULL;
+		goto display_it;
+	}
+	
+	if((resv_error_code = 
+	    get_new_info_resv(&resv_info_ptr, popup_win->force_refresh))
+	   == SLURM_NO_CHANGE_IN_DATA) { 
+		if(!spec_info->display_widget || spec_info->view == ERROR_VIEW)
+			goto display_it;
+		changed = 0;		
+	} else if (resv_error_code != SLURM_SUCCESS) {
+		if(spec_info->view == ERROR_VIEW)
+			goto end_it;
+		spec_info->view = ERROR_VIEW;
+		if(spec_info->display_widget)
+			gtk_widget_destroy(spec_info->display_widget);
+		sprintf(error_char, "get_new_info_resv: %s",
+			slurm_strerror(slurm_get_errno()));
+		label = gtk_label_new(error_char);
+		gtk_table_attach_defaults(popup_win->table, 
+					  label,
+					  0, 1, 0, 1); 
+		gtk_widget_show(label);	
+		spec_info->display_widget = gtk_widget_ref(label);
+		goto end_it;
+	}
+	
+display_it:
+	
+	resv_list = _create_resv_info_list(resv_info_ptr, changed);
+
+	if(!resv_list)
+		return;
+
+	if(spec_info->view == ERROR_VIEW && spec_info->display_widget) {
+		gtk_widget_destroy(spec_info->display_widget);
+		spec_info->display_widget = NULL;
+	}
+	if(spec_info->type != INFO_PAGE && !spec_info->display_widget) {
+		tree_view = create_treeview(local_display_data);
+		spec_info->display_widget = 
+			gtk_widget_ref(GTK_WIDGET(tree_view));
+		gtk_table_attach_defaults(popup_win->table, 
+					  GTK_WIDGET(tree_view),
+					  0, 1, 0, 1); 
+		/* since this function sets the model of the tree_view 
+		   to the treestore we don't really care about 
+		   the return value */
+		create_treestore(tree_view, 
+				 popup_win->display_data, SORTID_CNT);
+	}
+
+	setup_popup_grid_list(popup_win);
+
+	spec_info->view = INFO_VIEW;
+	if(spec_info->type == INFO_PAGE) {
+		_display_info_resv(resv_list, popup_win);
+		goto end_it;
+	}
+
+	/* just linking to another list, don't free the inside, just
+	   the list */
+	send_resv_list = list_create(NULL);	
+	itr = list_iterator_create(resv_list);
+	i = -1;
+	while ((sview_resv_info_ptr = list_next(itr))) {
+		i++;
+		resv_ptr = sview_resv_info_ptr->resv_ptr;	
+		switch(spec_info->type) {
+		case PART_PAGE:
+		case BLOCK_PAGE:
+		case NODE_PAGE:
+			if(!resv_ptr->node_list)
+				continue;
+			
+			if(!(hostset = hostset_create(search_info->gchar_data)))
+				continue;
+			if(!hostset_intersects(hostset, resv_ptr->node_list)) {
+				hostset_destroy(hostset);
+				continue;
+			}
+			hostset_destroy(hostset);				
+			break;
+		case JOB_PAGE:
+			if(strcmp(resv_ptr->name, 
+				  search_info->gchar_data)) 
+				continue;
+			break;
+		case RESV_PAGE:
+			switch(search_info->search_type) {
+			case SEARCH_RESERVATION_NAME:
+				if(!search_info->gchar_data)
+					continue;
+				
+				if(strcmp(resv_ptr->name, 
+					  search_info->gchar_data)) 
+					continue;
+				break;
+			default:
+				continue;
+			}
+			break;
+		default:
+			g_print("Unknown type %d\n", spec_info->type);
+			continue;
+		}
+		list_push(send_resv_list, sview_resv_info_ptr);
+		j=0;
+		while(resv_ptr->node_inx[j] >= 0) {
+				change_grid_color(
+					popup_win->grid_button_list,
+					resv_ptr->node_inx[j],
+					resv_ptr->node_inx[j+1], i, false);
+			j += 2;
+		}
+	}
+	list_iterator_destroy(itr);
+
+	_update_info_resv(send_resv_list, 
+			  GTK_TREE_VIEW(spec_info->display_widget));
+	list_destroy(send_resv_list);
+end_it:
+	popup_win->toggled = 0;
+	popup_win->force_refresh = 0;
+	
+	return;
+}
+
+extern void set_menus_resv(void *arg, GtkTreePath *path, 
+			   GtkMenu *menu, int type)
+{
+	GtkTreeView *tree_view = (GtkTreeView *)arg;
+	popup_info_t *popup_win = (popup_info_t *)arg;
+	switch(type) {
+	case TAB_CLICKED:
+		make_fields_menu(menu, display_data_resv, SORTID_CNT);
+		break;
+	case ROW_CLICKED:
+		make_options_menu(tree_view, path, menu, options_data_resv);
+		break;
+	case POPUP_CLICKED:
+		make_popup_fields_menu(popup_win, menu);
+		break;
+	default:
+		g_error("UNKNOWN type %d given to set_fields\n", type);
+	}
+}
+
+extern void popup_all_resv(GtkTreeModel *model, GtkTreeIter *iter, int id)
+{
+	char *name = NULL;
+	char title[100];
+	ListIterator itr = NULL;
+	popup_info_t *popup_win = NULL;
+	GError *error = NULL;
+				
+	gtk_tree_model_get(model, iter, SORTID_NAME, &name, -1);
+
+	switch(id) {
+	case PART_PAGE:
+		snprintf(title, 100, "Partition(s) with reservation %s", name);
+		break;
+	case JOB_PAGE:
+		snprintf(title, 100, "Job(s) in reservation %s", name);
+		break;
+	case NODE_PAGE:
+#ifdef HAVE_BG
+		snprintf(title, 100, 
+			 "Base partitions(s) in reservation %s",
+			 name);
+#else
+		snprintf(title, 100, "Node(s) in reservation %s ",
+			 name);
+#endif
+		break;
+	case BLOCK_PAGE: 
+		snprintf(title, 100, "Block(s) in reservation %s", name);
+		break;
+	case SUBMIT_PAGE: 
+		snprintf(title, 100, "Submit job in reservation %s", name);
+		break;
+	case INFO_PAGE: 
+		snprintf(title, 100, "Full info for reservation %s", name);
+		break;
+	default:
+		g_print("resv got %d\n", id);
+	}
+	
+	itr = list_iterator_create(popup_list);
+	while((popup_win = list_next(itr))) {
+		if(popup_win->spec_info)
+			if(!strcmp(popup_win->spec_info->title, title)) {
+				break;
+			} 
+	}
+	list_iterator_destroy(itr);
+
+	if(!popup_win) {
+		if(id == INFO_PAGE)
+			popup_win = create_popup_info(id, RESV_PAGE, title);
+		else
+			popup_win = create_popup_info(RESV_PAGE, id, title);
+	} else {
+		g_free(name);
+		gtk_window_present(GTK_WINDOW(popup_win->popup));
+		return;
+	}
+
+	/* Pass the model and the structs from the iter so we can always get
+	   the current node_inx.
+	*/
+	popup_win->model = model;
+	popup_win->iter = *iter;
+	popup_win->node_inx_id = SORTID_NODE_INX;
+
+	switch(id) {
+	case JOB_PAGE:
+	case INFO_PAGE:
+		popup_win->spec_info->search_info->gchar_data = name;
+		//specific_info_job(popup_win);
+		break;
+	case BLOCK_PAGE: 
+	case NODE_PAGE:
+	case PART_PAGE:
+		g_free(name);
+		gtk_tree_model_get(model, iter, SORTID_NODE_LIST, &name, -1);
+		popup_win->spec_info->search_info->gchar_data = name;
+		popup_win->spec_info->search_info->search_type = 
+			SEARCH_NODE_NAME;
+		//specific_info_node(popup_win);
+		break;
+	case SUBMIT_PAGE: 
+		break;
+	default:
+		g_print("resv got unknown type %d\n", id);
+	}
+	if (!g_thread_create((gpointer)popup_thr, popup_win, FALSE, &error))
+	{
+		g_printerr ("Failed to create resv popup thread: %s\n", 
+			    error->message);
+		return;
+	}		
+}
+
+extern void admin_resv(GtkTreeModel *model, GtkTreeIter *iter, char *type)
+{
+	resv_desc_msg_t *resv_msg = xmalloc(sizeof(resv_desc_msg_t));
+	reservation_name_msg_t resv_name_msg;
+	char *resvid = NULL;
+	char tmp_char[100];
+	char *temp = NULL;
+	int edit_type = 0;
+	int response = 0;	
+	GtkWidget *label = NULL;
+	GtkWidget *entry = NULL;
+	GtkWidget *popup = gtk_dialog_new_with_buttons(
+		type,
+		GTK_WINDOW(main_window),
+		GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+		NULL);
+	gtk_window_set_transient_for(GTK_WINDOW(popup), NULL);
+
+	gtk_tree_model_get(model, iter, SORTID_NAME, &resvid, -1);
+
+	slurm_init_resv_desc_msg(resv_msg);
+	memset(&resv_name_msg, 0, sizeof(reservation_name_msg_t));
+	
+	resv_msg->name = xstrdup(resvid);
+		
+	if(!strcasecmp("Remove", type)) {
+		resv_name_msg.name = resvid;
+
+		label = gtk_dialog_add_button(GTK_DIALOG(popup),
+					      GTK_STOCK_YES, GTK_RESPONSE_OK);
+		gtk_window_set_default(GTK_WINDOW(popup), label);
+		gtk_dialog_add_button(GTK_DIALOG(popup),
+				      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+		
+			snprintf(tmp_char, sizeof(tmp_char), 
+				 "Are you sure you want to remove "
+				 "reservation %s?",
+				 resvid);
+		label = gtk_label_new(tmp_char);
+		edit_type = EDIT_REMOVE;
+	} else {
+		label = gtk_dialog_add_button(GTK_DIALOG(popup),
+					      GTK_STOCK_OK, GTK_RESPONSE_OK);
+		gtk_window_set_default(GTK_WINDOW(popup), label);
+		gtk_dialog_add_button(GTK_DIALOG(popup),
+				      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+
+		gtk_window_set_default_size(GTK_WINDOW(popup), 200, 400);
+		snprintf(tmp_char, sizeof(tmp_char), 
+			 "Editing reservation %s think before you type",
+			 resvid);
+		label = gtk_label_new(tmp_char);
+		edit_type = EDIT_EDIT;
+		entry = _admin_full_edit_resv(resv_msg, model, iter);
+	}
+
+	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(popup)->vbox), 
+			   label, FALSE, FALSE, 0);
+	if(entry)
+		gtk_box_pack_start(GTK_BOX(GTK_DIALOG(popup)->vbox), 
+				   entry, TRUE, TRUE, 0);
+	gtk_widget_show_all(popup);
+	response = gtk_dialog_run (GTK_DIALOG(popup));
+
+	if (response == GTK_RESPONSE_OK) {
+		switch(edit_type) {
+		case EDIT_REMOVE:
+			if(slurm_delete_reservation(&resv_name_msg)
+			   == SLURM_SUCCESS) {
+				temp = g_strdup_printf(
+					"Reservation %s removed successfully",
+					resvid);
+			} else {
+				temp = g_strdup_printf(
+					"Problem removing reservation %s.",
+					resvid);
+			}			
+			display_edit_note(temp);
+			g_free(temp);
+			break;
+		case EDIT_EDIT:
+			if(got_edit_signal) 
+				goto end_it;
+			if(slurm_update_reservation(resv_msg)
+			   == SLURM_SUCCESS) {
+				temp = g_strdup_printf(
+					"Reservation %s updated successfully",
+					resvid);
+			} else {
+				temp = g_strdup_printf(
+					"Problem updating reservation %s.",
+					resvid);
+			}
+			display_edit_note(temp);
+			g_free(temp);
+			break;
+		default:
+			break;
+		}
+	}
+end_it:
+		
+	g_free(resvid);
+	slurm_free_resv_desc_msg(resv_msg);
+	gtk_widget_destroy(popup);
+	if(got_edit_signal) {
+		type = got_edit_signal;
+		got_edit_signal = NULL;
+		admin_resv(model, iter, type);
+		xfree(type);
+	}			
+	return;
+}
+
diff --git a/src/sview/submit_info.c b/src/sview/submit_info.c
index 19543917b..c767ae770 100644
--- a/src/sview/submit_info.c
+++ b/src/sview/submit_info.c
@@ -6,10 +6,11 @@
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
  *
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/src/sview/sview.c b/src/sview/sview.c
index 74979e6ba..cc832a9bc 100644
--- a/src/sview/sview.c
+++ b/src/sview/sview.c
@@ -2,13 +2,14 @@
  *  sview.c - main for sview
  *****************************************************************************
  *  Copyright (C) 2002-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 Danny Auble <da@llnl.gov>, et. al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -78,6 +79,10 @@ display_data_t main_display_data[] = {
 	 refresh_main, create_model_part, admin_edit_part,
 	 get_info_part, specific_info_part, 
 	 set_menus_part, NULL},
+	{G_TYPE_NONE, RESV_PAGE, "Reservations", TRUE, -1, 
+	 refresh_main, create_model_resv, admin_edit_resv,
+	 get_info_resv, specific_info_resv, 
+	 set_menus_resv, NULL},
 #ifdef HAVE_BG
 	{G_TYPE_NONE, BLOCK_PAGE, "BG Blocks", TRUE, -1,
 	 refresh_main, NULL, NULL,
@@ -379,6 +384,8 @@ static GtkWidget *_get_menubar_menu(GtkWidget *window, GtkWidget *notebook)
 		"      <separator/>"
 		"        <menuitem action='node_name'/>"
 		"        <menuitem action='node_state'/>"
+		"      <separator/>"
+		"        <menuitem action='reservation_name'/>"
 		"      </menu>"
 		"      <menuitem action='refresh'/>"
 		"      <menuitem action='reconfig'/>"
@@ -459,6 +466,9 @@ static GtkWidget *_get_menubar_menu(GtkWidget *window, GtkWidget *notebook)
 		 "", "Search for a Node in a given state", 
 #endif
 		 G_CALLBACK(create_search_popup)},		
+		{"reservation_name", NULL, "Reservation Name", 
+		 "", "Search for reservation", 
+		 G_CALLBACK(create_search_popup)},
 		{"tab_pos", NULL, "_Tab Pos"},
 		{"interval", GTK_STOCK_REFRESH, "Set Refresh _Interval", 
 		 "<control>i", "Change Refresh Interval", 
@@ -537,6 +547,7 @@ static GtkWidget *_get_menubar_menu(GtkWidget *window, GtkWidget *notebook)
 	/* Finally, return the actual menu bar created by the item factory. */
 	return gtk_ui_manager_get_widget (ui_manager, "/main");
 }
+
 void *_popup_thr_main(void *arg)
 {
 	popup_thr(arg);		
diff --git a/src/sview/sview.h b/src/sview/sview.h
index d55d5f26f..e86b55570 100644
--- a/src/sview/sview.h
+++ b/src/sview/sview.h
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Danny Auble <da@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
@@ -82,11 +83,15 @@
 #define POS_LOC 0
 #define DEFAULT_ENTRY_LENGTH 500
 
+#define MAKE_BLACK -2
+#define MAKE_WHITE -1
+
 enum { JOB_PAGE, 
        STEP_PAGE, 
-       PART_PAGE, 
+       PART_PAGE,
        NODE_PAGE, 
        BLOCK_PAGE, 
+       RESV_PAGE,
        SUBMIT_PAGE,
        ADMIN_PAGE,
        INFO_PAGE,
@@ -115,6 +120,18 @@ enum { EDIT_NONE,
        EDIT_TEXTBOX	
 };
 
+#ifdef HAVE_BG
+/* ERROR_STATE must be last since that will affect the state of the rest of the
+   midplane.
+*/
+enum {
+	SVIEW_BG_IDLE_STATE,
+	SVIEW_BG_ALLOC_STATE,
+	SVIEW_BG_ERROR_STATE
+};
+#endif
+
+
 typedef enum { SEARCH_JOB_ID = 1,
 	       SEARCH_JOB_USER,
 	       SEARCH_JOB_STATE,
@@ -125,7 +142,8 @@ typedef enum { SEARCH_JOB_ID = 1,
 	       SEARCH_PARTITION_NAME,
 	       SEARCH_PARTITION_STATE,
 	       SEARCH_NODE_NAME,
-	       SEARCH_NODE_STATE
+	       SEARCH_NODE_STATE,
+	       SEARCH_RESERVATION_NAME,
 } sview_search_type_t;
 
 
@@ -196,7 +214,9 @@ struct popup_info {
 	int toggled;
 	int force_refresh;
 	int *running;
+	int *node_inx;
 	int show_grid;
+	int full_grid;
 	bool not_found;
 	GtkWidget *popup;
 	GtkWidget *event_box;
@@ -205,6 +225,9 @@ struct popup_info {
 	List grid_button_list;
 	specific_info_t *spec_info;
 	display_data_t *display_data;
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	int node_inx_id;
 };
 
 typedef struct {
@@ -217,6 +240,7 @@ typedef struct {
 	int state;
 	int table_x;
 	int table_y;
+	bool used;
 } grid_button_t;
 
 typedef struct {
@@ -266,11 +290,12 @@ extern void destroy_grid_button(void *arg);
 extern grid_button_t *create_grid_button_from_another(
 	grid_button_t *grid_button, char *name, int color_inx);
 /* do not free the char * from this function it is static */
-extern char *change_grid_color(List button_list, int start_inx, int end_inx,
-			       int color_inx);
+extern char *change_grid_color(List button_list, int start, int end,
+			       int color_inx, bool change_unused);
+extern void set_grid_used(List button_list, int start, int end, bool used);
 extern void get_button_list_from_main(List *button_list, int start, int end,
 				      int color_inx);
-extern List copy_main_button_list();
+extern List copy_main_button_list(int initial_color);
 #ifdef HAVE_BG
 extern void add_extra_bluegene_buttons(List *button_list, int inx, 
 				       int *color_inx);
@@ -281,6 +306,7 @@ extern int get_system_stats(GtkTable *table);
 extern int setup_grid_table(GtkTable *table, List button_list, List node_list);
 extern void sview_init_grid();
 extern void sview_reset_grid();
+extern void setup_popup_grid_list(popup_info_t *popup_win);
 
 // part_info.c
 extern void refresh_part(GtkAction *action, gpointer user_data);
@@ -353,6 +379,22 @@ extern void set_menus_node(void *arg, GtkTreePath *path,
 extern void popup_all_node(GtkTreeModel *model, GtkTreeIter *iter, int id);
 extern void admin_node(GtkTreeModel *model, GtkTreeIter *iter, char *type);
 
+// resv_info.c
+extern void refresh_resv(GtkAction *action, gpointer user_data);
+extern GtkListStore *create_model_resv(int type);
+extern void admin_edit_resv(GtkCellRendererText *cell,
+			    const char *path_string,
+			    const char *new_text,
+			    gpointer data);
+extern int get_new_info_resv(reserve_info_msg_t **info_ptr, int force);
+extern void get_info_resv(GtkTable *table, display_data_t *display_data);
+extern void specific_info_resv(popup_info_t *popup_win);
+extern void set_menus_resv(void *arg, GtkTreePath *path, 
+			   GtkMenu *menu, int type);
+extern void popup_all_resv(GtkTreeModel *model, GtkTreeIter *iter, int id);
+extern void admin_resv(GtkTreeModel *model, GtkTreeIter *iter, char *type);
+
+
 // submit_info.c
 extern void get_info_submit(GtkTable *table, display_data_t *display_data);
 extern void set_menus_submit(void *arg, GtkTreePath *path, 
diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in
index 69bacc1f8..24c6e63e6 100644
--- a/testsuite/Makefile.in
+++ b/testsuite/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -96,6 +100,10 @@ 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@
diff --git a/testsuite/expect/Makefile.am b/testsuite/expect/Makefile.am
index 0ef544250..c96b2cb6c 100644
--- a/testsuite/expect/Makefile.am
+++ b/testsuite/expect/Makefile.am
@@ -60,6 +60,7 @@ EXTRA_DIST = \
 	test1.42			\
 	test1.43			\
 	test1.44			\
+	test1.45			\
 	test1.46			\
 	test1.47			\
 	test1.48			\
@@ -73,6 +74,7 @@ EXTRA_DIST = \
 	test1.57			\
 	test1.58			\
 	test1.59			\
+	test1.60			\
 	test1.80			\
 	test1.81			\
 	test1.82			\
@@ -101,6 +103,7 @@ EXTRA_DIST = \
 	test2.9				\
 	test2.10			\
 	test2.11			\
+	test2.12			\
 	test3.1				\
 	test3.2				\
 	test3.3				\
@@ -112,6 +115,7 @@ EXTRA_DIST = \
 	test3.8				\
 	test3.9				\
 	test3.10			\
+	test3.11			\
 	test4.1				\
 	test4.2				\
 	test4.3				\
@@ -146,6 +150,7 @@ EXTRA_DIST = \
 	test6.12			\
 	test6.13			\
 	test6.13.prog.c			\
+	test6.14			\
 	test7.1				\
 	test7.2				\
 	test7.2.prog.c			\
@@ -208,6 +213,8 @@ EXTRA_DIST = \
 	test12.1			\
 	test12.2			\
 	test12.2.prog.c			\
+	test12.4			\
+	test12.5			\
 	test13.1			\
 	test14.1			\
 	test14.2			\
@@ -266,7 +273,6 @@ EXTRA_DIST = \
 	test17.16			\
 	test17.17			\
 	test17.18			\
-	test17.19			\
 	test17.20			\
 	test17.21			\
 	test17.22			\
@@ -311,6 +317,16 @@ EXTRA_DIST = \
 	test21.22			\
 	test21.23			\
 	test21.24			\
+	test21.25			\
+	test22.1			\
+	test22.2			\
+	test23.1			\
+	test23.2			\
+	test23.3			\
+	test24.1			\
+	test24.1.prog.c			\
+	test24.2			\
+	test25.1			\
 	usleep
 
 distclean-local:
diff --git a/testsuite/expect/Makefile.in b/testsuite/expect/Makefile.in
index 206556eb7..5db8a2983 100644
--- a/testsuite/expect/Makefile.in
+++ b/testsuite/expect/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -77,6 +81,10 @@ 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@
@@ -296,6 +304,7 @@ EXTRA_DIST = \
 	test1.42			\
 	test1.43			\
 	test1.44			\
+	test1.45			\
 	test1.46			\
 	test1.47			\
 	test1.48			\
@@ -309,6 +318,7 @@ EXTRA_DIST = \
 	test1.57			\
 	test1.58			\
 	test1.59			\
+	test1.60			\
 	test1.80			\
 	test1.81			\
 	test1.82			\
@@ -337,6 +347,7 @@ EXTRA_DIST = \
 	test2.9				\
 	test2.10			\
 	test2.11			\
+	test2.12			\
 	test3.1				\
 	test3.2				\
 	test3.3				\
@@ -348,6 +359,7 @@ EXTRA_DIST = \
 	test3.8				\
 	test3.9				\
 	test3.10			\
+	test3.11			\
 	test4.1				\
 	test4.2				\
 	test4.3				\
@@ -382,6 +394,7 @@ EXTRA_DIST = \
 	test6.12			\
 	test6.13			\
 	test6.13.prog.c			\
+	test6.14			\
 	test7.1				\
 	test7.2				\
 	test7.2.prog.c			\
@@ -444,6 +457,8 @@ EXTRA_DIST = \
 	test12.1			\
 	test12.2			\
 	test12.2.prog.c			\
+	test12.4			\
+	test12.5			\
 	test13.1			\
 	test14.1			\
 	test14.2			\
@@ -502,7 +517,6 @@ EXTRA_DIST = \
 	test17.16			\
 	test17.17			\
 	test17.18			\
-	test17.19			\
 	test17.20			\
 	test17.21			\
 	test17.22			\
@@ -547,6 +561,16 @@ EXTRA_DIST = \
 	test21.22			\
 	test21.23			\
 	test21.24			\
+	test21.25			\
+	test22.1			\
+	test22.2			\
+	test23.1			\
+	test23.2			\
+	test23.3			\
+	test24.1			\
+	test24.1.prog.c			\
+	test24.2			\
+	test25.1			\
 	usleep
 
 all: all-am
diff --git a/testsuite/expect/README b/testsuite/expect/README
index 683a3a3a4..63b73a230 100644
--- a/testsuite/expect/README
+++ b/testsuite/expect/README
@@ -1,13 +1,14 @@
 ############################################################################
-# Copyright (C) 2008 Lawrence Livermore National Security.
 # Copyright (C) 2002-2007 The Regents of the University of California.
+# Copyright (C) 2008-2009 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
 # Additionals by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 #
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the supplied file: DISCLAIMER.
 #
 # SLURM 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
@@ -139,7 +140,7 @@ test1.41   Validate SLURM debugger infrastructure (--debugger-test option).
 test1.42   Test of job dependencies (--dependency option).
 test1.43   Test of slurm_job_will_run API, (srun --test-only option).
 test1.44   Read srun's stdout slowly and test for lost data.   
-test1.45   REMOVED
+test1.45   Test srun option --preserve-env
 test1.46   Test srun option --kill-on-bad-exit
 test1.47   Test of job dependencies with singleton parameter.
 test1.48   Test of srun mail options (--mail-type and --mail-user options).
@@ -156,6 +157,7 @@ test1.56   Test buffered standard IO with really long lines
 test1.57   Test of srun --jobid for a new job allocation (used by Moab)
 test1.58   Test of srun --jobid for an existing job allocation
 test1.59   Test of hostfile logic for job steps
+test1.60   Test of labelling output when writing a file per task or per node
 
 **NOTE**   The following tests attempt to utilize multiple CPUs or partitions,
            The test will print "WARNING" and terminate with an exit code of 
@@ -197,6 +199,7 @@ test2.8    Validate scontrol show commands for jobs and steps.
 test2.9    Validate scontrol completing command.
 test2.10   Validate scontrol oneliner mode (--oneliner option).
 test2.11   Validate scontrol listpids command.
+test2.12   Validate scontrol show topology option.
 
 
 test3.#    Testing of scontrol options (best run as SlurmUser or root). 
@@ -211,6 +214,7 @@ test3.7    Test of job suspend/resume.
 test3.8    Test of batch job requeue.
 test3.9    Test of "scontrol show slurmd"
 test3.10   Test of "scontrol notify <jobid> <message>"
+test3.11   Validate scontrol create, delete, and update of reservations.
 UNTESTED   "scontrol abort"    would stop slurm 
 UNTESTED   "scontrol shutdown" would stop slurm
 
@@ -267,6 +271,7 @@ test6.11   Validate scancel quiet option, no warning if job gone
 test6.12   Test scancel signal to batch script (--batch option)
 test6.13   Test routing all signals through slurmctld rather than directly 
            to slurmd (undocumented --ctld option).
+test6.14   Test scancel nodelist option (--nodelist or -w)
 
 test7.#    Testing of other functionality.
 ==========================================
@@ -299,7 +304,7 @@ test8.1    Test of Blue Gene specific sbatch command line options
 test8.2    Test of Blue Gene specific sbatch environment variables
 test8.3    Test of Blue Gene specific job geometry support
 test8.4    Test of Blue Gene MPI job execution
-test8.5    Confirm we can make a 32, 128, and 512 cnode block.
+test8.5    Test creation of all blocks 1 midplane and smaller.
 test8.6    Stress test Dynamic mode block creation.
 test8.7    Test of Blue Gene scheduling with sched/wik2 plugin.
 
@@ -351,9 +356,9 @@ test12.#   Testing of sacct command and options
 test12.1   Test sacct --help option.
 test12.2   Test validity/accuracy of accounting data for exit code, 
            memory and real-time information along with stating a running job.
-(There are many more tests that should probably be added, but HP 
-is taking responsibility for validating this code, so we'll stick 
-with the basics here.)
+test12.3   (EMPTY)
+test12.4   Test sacct --b, g, j, l, n, p, u, v options.
+test12.5   Test sacct --helpformat option.
 
 
 test13.#   Testing of switch plugins
@@ -455,8 +460,7 @@ test17.17  Confirm that node sharing flags are respected  (--nodelist and
            --share options)
 test17.18  Test of job dependencies and deferred begin time (--depedency 
            and --begin options).
-test17.19  Test the launch of a batch job within an existing job allocation.
-           This logic is used by LSF
+test17.19  REMOVED
 test17.20  Test of mail options (--mail-type and --mail-user options)
 test17.21  Tests #SLURM entry functionality in a batch script
 test17.22  Test of running non-existant job, confirm timely termination.
@@ -521,3 +525,25 @@ test21.21  sacctmgr add an account to this cluster and try using it with
 test21.22  sacctmgr load file
 test21.23  sacctmgr wckey
 test21.24  sacctmgr dump file
+test21.25  sacctmgr show config
+
+test22.#   Testing of sreport commands and options. 
+           These also test the sacctmgr archive dump/load functions.
+=================================================
+test22.1   sreport cluster utilization report
+test22.2   sreport h, n, p, P, t, V options
+
+test23.#   Testing of sstat commands and options.
+=================================================
+test23.1   sstat -e, h, usage and V options
+test23.2   sstat --helpformat
+test23.3   sstat -a, n, o, p, P, v options
+
+test24.#   Testing of sshare/priority multifactor plugin.
+=================================================
+test24.1   multifactor plugin algo test
+test24.2   sshare h, n, p, P, v, and V options.
+
+test25.#   Testing of sprio command and options.
+=================================================
+test25.1   sprio all options
diff --git a/testsuite/expect/globals b/testsuite/expect/globals
index 28dea26eb..81815bbd3 100755
--- a/testsuite/expect/globals
+++ b/testsuite/expect/globals
@@ -16,10 +16,11 @@
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
 # Additions by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+ # Please also read the supplied file: DISCLAIMER.
 #  
 # SLURM 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
@@ -56,6 +57,7 @@ if [file exists globals.local] {
 #
 cset slurm_dir   "/usr"
 cset build_dir   "../../"
+cset src_dir     "../../"
 cset sacctmgr    "${slurm_dir}/bin/sacctmgr"
 cset sacct       "${slurm_dir}/bin/sacct"
 cset salloc      "${slurm_dir}/bin/salloc"
@@ -66,9 +68,11 @@ cset scancel     "${slurm_dir}/bin/scancel"
 cset scontrol    "${slurm_dir}/bin/scontrol"
 cset sinfo       "${slurm_dir}/bin/sinfo"
 cset smap        "${slurm_dir}/bin/smap"
+cset sprio       "${slurm_dir}/bin/sprio"
 cset squeue      "${slurm_dir}/bin/squeue"
 cset srun        "${slurm_dir}/bin/srun"
 cset sreport     "${slurm_dir}/bin/sreport"
+cset sshare      "${slurm_dir}/bin/sshare"
 cset sstat       "${slurm_dir}/bin/sstat"
 cset strigger    "${slurm_dir}/bin/strigger"
 
@@ -195,6 +199,10 @@ cset super_user_set 0
 proc cancel_job { job_id } {
 	global scancel bin_sleep
 
+	if {$job_id == 0} {
+		return 1
+	}
+
 	send_user "cancelling $job_id\n"
 	exec $scancel -q $job_id
 	exec $bin_sleep 1
@@ -251,6 +259,102 @@ proc slow_kill { pid } {
 	return 0
 }
 
+################################################################
+#
+# Proc: get_my_nuid
+#
+# Purpose:  gets the name uid from the running user
+#
+# Returns: A non-zero return code indicates a failure.
+#
+#
+################################################################
+
+proc get_my_nuid {  } {
+	global bin_id alpha alpha_numeric
+
+	set uid -1
+
+	log_user 0
+	spawn $bin_id -nu
+	expect {
+		-re "($alpha_numeric|$alpha)" {
+			set nuid $expect_out(1,string)
+			exp_continue
+		}
+		eof {
+			wait
+		}
+	}
+	log_user 1
+	
+	return $nuid
+}
+
+################################################################
+#
+# Proc: get_my_uid
+#
+# Purpose:  gets the uid from the running user
+#
+# Returns: A non-zero return code indicates a failure.
+#
+#
+################################################################
+
+proc get_my_uid {  } {
+	global bin_id number
+
+	set uid -1
+
+	log_user 0
+	spawn $bin_id -u
+	expect {
+		-re "($number)" {
+			set uid $expect_out(1,string)
+			exp_continue
+		}
+		eof {
+			wait
+		}
+	}
+	log_user 1
+	
+	return $uid
+}
+
+################################################################
+#
+# Proc: get_my_gid
+#
+# Purpose:  gets the gid from the running user
+#
+# Returns: A non-zero return code indicates a failure.
+#
+#
+################################################################
+
+proc get_my_gid {  } {
+	global bin_id number
+
+	set gid -1
+
+	log_user 0
+	spawn $bin_id -g
+	expect {
+		-re "($number)" {
+			set gid $expect_out(1,string)
+			exp_continue
+		}
+		eof {
+			wait
+		}
+	}
+	log_user 1
+	
+	return $gid
+}
+
 
 ################################################################
 #
@@ -360,9 +464,9 @@ proc wait_for_file { file_name } {
 	global bin_sleep max_file_delay
 
 	for {set my_delay 0} {$my_delay <= $max_file_delay} {incr my_delay} {
-		if {[file exists $file_name] && [file exists $file_name]} {
+		if {[file exists $file_name]} {
 #			Add small delay for I/O buffering
-			exec $bin_sleep 2
+			exec $bin_sleep 1
 			return 0
 		}
 		exec $bin_sleep 1
@@ -520,8 +624,8 @@ proc test_assoc_enforced { } {
 	set assoc_enforced 0
 	spawn $scontrol show config
 	expect {
-		-re "AccountingStorageEnforce *= ($number)" {
-			set assoc_enforced $expect_out(1,string)
+		-re "AccountingStorageEnforce *= associations" {
+			set assoc_enforced 1
 			exp_continue
 		}
 		eof {
@@ -533,6 +637,62 @@ proc test_assoc_enforced { } {
 	return $assoc_enforced
 }
 
+################################################################
+#
+# Proc: slurmd_user_root
+#
+# Return 1 if the SlurmdUser is root, 0 otherwise
+#
+################################################################
+proc slurmd_user_root { } {
+	global scontrol
+
+	log_user 0
+	set rc 0
+	spawn $scontrol show config
+	expect {
+		-re "SlurmdUser *= root" {
+			set rc 1
+			exp_continue
+		}
+		eof {
+			wait
+		}
+	}
+	log_user 1
+
+	return $rc
+}
+
+################################################################
+#
+# Proc: test_topology
+#
+# Purpose: Determine if system is topology aware
+#
+# Returns level of association enforcement, 0 if none
+#
+################################################################
+proc test_topology { } {
+	global scontrol
+
+	log_user 0
+	set have_topology 1
+	spawn $scontrol show config
+	expect {
+		-re "TopologyPlugin *= *topology/none" {
+			set have_topology 0
+			exp_continue
+		}
+		eof {
+			wait
+		}
+	}
+
+	log_user 1
+	return $have_topology
+}
+
 ################################################################
 #
 # Proc: test_track_wckey
@@ -623,6 +783,36 @@ proc test_account_storage { } {
 	return $account_storage
 }
 
+################################################################
+#
+# Proc: priority_type
+#
+# Purpose: Use scontrol to determine the priority plugin
+#
+# Returns: Name of priority type
+#
+################################################################
+
+proc priority_type {} {
+	global scontrol
+
+	set name ""
+	set fd [open "|$scontrol show config"]
+	while {[gets $fd line] != -1} {
+		if {[regexp {^PriorityType *= priority/(\w+)} $line frag name]
+				== 1} {
+			break
+		}
+	}
+	catch {close $fd}
+
+	if {[string length $name] == 0} {
+		send_user "ERROR: could not identify the switch type\n"
+	}
+
+	return $name
+}
+
 ################################################################
 #
 # Proc: get_default_acct
@@ -1002,13 +1192,12 @@ proc switch_type {} {
 	catch {close $fd}
 
 	if {[string length $name] == 0} {
-		send_user "ERROR: could not identify the switch type"
+		send_user "ERROR: could not identify the switch type\n"
 	}
 
 	return $name
 }
 
-
 ################################################################
 #
 # Proc: make_bash_script
@@ -1229,7 +1418,7 @@ proc get_cluster_name { } {
 	#
 	log_user 0
 	set cluster_name ""
-	set scon_pid [spawn $scontrol show config]
+	set scon_pid [spawn -noecho $scontrol show config]
 	expect {
 		-re "ClusterName *= ($alpha_numeric_under)" {
 			set cluster_name $expect_out(1,string)
@@ -1248,3 +1437,216 @@ proc get_cluster_name { } {
 	log_user 1
 	return $cluster_name
 }
+
+################################################################
+#
+# Proc: get_bluegene_layout
+#
+# Purpose: Determine what layout mode the blugene system is running
+#
+# Returns name of layout mode if found, 0 otherwise
+#
+################################################################
+
+proc get_bluegene_layout { } {
+	global scontrol alpha_numeric_under
+
+	log_user 0
+	set layout 0
+	set scon_pid [spawn -noecho $scontrol show config]
+	expect {
+		-re "LayoutMode *= ($alpha_numeric_under)" {
+			set layout $expect_out(1,string)
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			slow_kill $scon_pid
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	log_user 1
+	
+	return $layout
+}
+
+################################################################
+#
+# Proc: get_bluegene_psets
+#
+# Purpose: Determine how many psets a midplane has in a bluegene system
+#
+# Returns num of psets, 0 if not set
+#
+################################################################
+
+proc get_bluegene_psets { } {
+	global scontrol number
+
+	log_user 0
+	set psets 0
+	set scon_pid [spawn -noecho $scontrol show config]
+	expect {
+		-re "Numpsets *= ($number)" {
+			set psets $expect_out(1,string)
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			slow_kill $scon_pid
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	log_user 1
+	
+	return $psets
+}
+
+################################################################
+#
+# Proc: get_bluegene_type
+#
+# Purpose: Determine what kind of bluegene system we are running
+#
+# Returns 'L' for bluegene/L,
+# 	  'P' for bluegene/P,
+#	  'Q' for bluegene/Q,
+# 	  0 if not set
+#
+################################################################
+
+proc get_bluegene_type { } {
+	global scontrol alpha
+
+	log_user 0
+	set type 0
+	set scon_pid [spawn -noecho $scontrol show config]
+	expect {
+		-re "Bluegene/($alpha) configuration" {
+			set type $expect_out(1,string)
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			slow_kill $scon_pid
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	log_user 1
+	
+	return $type
+}
+
+################################################################
+#
+# Proc: get_bluegene_procs_per_cnode
+#
+# Purpose: Determine how many cpus are on a cnode
+#
+# Returns count of cpus on a cnode or 0 if not set
+#
+################################################################
+
+proc get_bluegene_procs_per_cnode { } {
+	global scontrol number
+
+	log_user 0
+	set cpu_cnt 0
+	set scon_pid [spawn -noecho $scontrol show config]
+	expect {
+		-re "NodeCPUCnt *= ($number)" {
+			set cpu_cnt $expect_out(1,string)
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			slow_kill $scon_pid
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	log_user 1
+	
+	return $cpu_cnt
+}
+
+################################################################
+#
+# Proc: get_bluegene_cnodes_per_np
+#
+# Purpose: Determine how many cnodes are in a midplane
+#
+# Returns count of nodes on a midplane or 0 if not set
+#
+################################################################
+
+proc get_bluegene_cnodes_per_mp { } {
+	global scontrol number
+
+	log_user 0
+	set node_cnt 0
+	set scon_pid [spawn -noecho $scontrol show config]
+	expect {
+		-re "BasePartitionNodeCnt *= ($number)" {
+			set node_cnt $expect_out(1,string)
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			slow_kill $scon_pid
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	log_user 1
+	
+	return $node_cnt
+}
+
+################################################################
+#
+# Proc: get_node_cnt
+#
+# Purpose: Determine how many nodes are on the system
+#
+# Returns count of nodes on system or 0 if unknown
+#
+################################################################
+
+proc get_node_cnt { } {
+	global scontrol
+
+	log_user 0
+	set node_cnt 0
+	set scon_pid [spawn -noecho $scontrol show nodes]
+	expect {
+		-re "NodeName=" {
+			incr node_cnt
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			slow_kill $scon_pid
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	log_user 1
+	
+	return $node_cnt
+}
diff --git a/testsuite/expect/globals_accounting b/testsuite/expect/globals_accounting
index 1a43e68c6..9df5cd2c9 100644
--- a/testsuite/expect/globals_accounting
+++ b/testsuite/expect/globals_accounting
@@ -1,6 +1,6 @@
 #!/usr/bin/expect
 ############################################################################
-# Purpose: Establish global state information for SLURM test suite
+# Purpose: Establish global state information for SLURM accounting tests
 #
 # To define site-specific state information, set the values in a file
 # named 'globals.local'. Those values will override any specified here.
@@ -11,15 +11,17 @@
 # set mpicc     "/usr/local/bin/mpicc"
 #
 ############################################################################
-# Copyright (C) 2008 Lawrence Livermore National Security.
+# Copyright (C) 2008-2009 Lawrence Livermore National Security.
 # Copyright (C) 2002-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Danny Auble <da@llnl.gov>
 # Written by Morris Jette <jette1@llnl.gov>
 # Additions by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+ # Please also read the supplied file: DISCLAIMER.
 #  
 # SLURM 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
@@ -43,7 +45,7 @@ set timeout 60
 #
 # Use sacctmgr to create a cluster
 #	
-proc add_cluster {name qos fairshare grpcpumin grpcpu grpjob grpnode grpsubmit grpwall maxcpumin maxcpu maxjob maxnode maxsubmit maxwall} {
+proc add_cluster {name qos fairshare grpcpu grpjob grpnode grpsubmit maxcpumin maxcpu maxjob maxnode maxsubmit maxwall} {
         global sacctmgr timeout
 
 	set exit_code 0
@@ -61,11 +63,6 @@ proc add_cluster {name qos fairshare grpcpumin grpcpu grpjob grpnode grpsubmit g
 		set assoc_stuff 1
 	}
 
-	if { [string length $grpcpumin] } {
-		set command "$command GrpCPUMins=$grpcpumin"
-		set assoc_stuff 1
-	}
-
 	if { [string length $grpcpu] } {
 		set command "$command GrpCPUs=$grpcpu"
 		set assoc_stuff 1
@@ -86,11 +83,6 @@ proc add_cluster {name qos fairshare grpcpumin grpcpu grpjob grpnode grpsubmit g
 		set assoc_stuff 1
 	}
 
-	if { [string length $grpwall] } {
-		set command "$command GrpWall=$grpwall"
-		set assoc_stuff 1
-	}
-
 	if { [string length $maxcpumin] } {
 		set command "$command MaxCPUMins=$maxcpumin"
 		set assoc_stuff 1
@@ -1363,3 +1355,36 @@ proc remove_coor { accounts names } {
 	return $exit_code
 }
 
+proc archive_load { file } {
+        global sacctmgr timeout
+	#
+	# Use sacctmgr to load info
+	#
+	set matches 0
+	set exit_code 0
+	set my_pid [spawn $sacctmgr -i -n archive load $file]
+	expect {
+		-re "There was a problem" {
+			send_user "FAILURE: there was a problem with the sacctmgr command\n"
+			incr exit_code 1
+		}
+		-re "SUCCESS" {
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sacctmgr archive load not responding\n"
+			slow_kill $my_pid
+			incr exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	
+	if {$matches != 1} {
+		send_user "\nFAILURE:  sacctmgr didn't load archive correctly.\n"
+		incr exit_code 1
+	}
+	return $exit_code
+}
diff --git a/testsuite/expect/pkill b/testsuite/expect/pkill
index 8c648f22c..9ad91586d 100755
--- a/testsuite/expect/pkill
+++ b/testsuite/expect/pkill
@@ -7,10 +7,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+ # Please also read the supplied file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/regression b/testsuite/expect/regression
index 0c7c5d7c4..a54f8def6 100755
--- a/testsuite/expect/regression
+++ b/testsuite/expect/regression
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+ # Please also read the supplied file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/regression.py b/testsuite/expect/regression.py
index a1e706430..2d138708c 100755
--- a/testsuite/expect/regression.py
+++ b/testsuite/expect/regression.py
@@ -3,10 +3,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Christopher J. Morrone <morrone2@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+ # Please also read the supplied file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.1 b/testsuite/expect/test1.1
index 19516084d..f388711ae 100755
--- a/testsuite/expect/test1.1
+++ b/testsuite/expect/test1.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.10 b/testsuite/expect/test1.10
index f8268d040..8b809a93b 100755
--- a/testsuite/expect/test1.10
+++ b/testsuite/expect/test1.10
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.11 b/testsuite/expect/test1.11
index b27adc5a7..6f4108c9a 100755
--- a/testsuite/expect/test1.11
+++ b/testsuite/expect/test1.11
@@ -14,10 +14,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.12 b/testsuite/expect/test1.12
index a0c173d50..8e3ca8137 100755
--- a/testsuite/expect/test1.12
+++ b/testsuite/expect/test1.12
@@ -11,10 +11,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -45,7 +46,7 @@ print_header $test_id
 #
 exec $bin_rm -f $file_in
 make_bash_script $file_in "
-  $scontrol show step \$SLURM_JOBID.\$SLURM_STEPID
+  $scontrol show step \$SLURM_JOB_ID.\$SLURM_STEPID
 "
 
 set srun_pid [spawn $srun -N1 -t1 --checkpoint=$ckpt_in $file_in]
@@ -66,13 +67,12 @@ expect {
 	eof {
 		wait
 	}
-}
-
+} 
 if {$ckpt_out == -1} {
 	send_user "\nFAILURE: No Checkpoint time reported for job step\n"
 	set exit_code 1
 } elseif {$ckpt_in != $ckpt_out} {
-	send_user "\nFAILURE: No Checkpoint time not set properly\n"
+	send_user "\nFAILURE: Checkpoint time not set properly ($ckpt_in != $ckpt_out)\n"
 	set exit_code 1
 }
 
diff --git a/testsuite/expect/test1.13 b/testsuite/expect/test1.13
index 2d31d61bf..265acbf1f 100755
--- a/testsuite/expect/test1.13
+++ b/testsuite/expect/test1.13
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.14 b/testsuite/expect/test1.14
index 86f8f9dfc..c720bfb4c 100755
--- a/testsuite/expect/test1.14
+++ b/testsuite/expect/test1.14
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -53,6 +54,7 @@ if {[test_bluegene]} {
 #
 exec $bin_rm -f $file_in $file_out
 make_bash_script $file_in "
+  echo tasks_per_node=\$SLURM_TASKS_PER_NODE
   inx=0
   while \[ \$inx -lt \$SLURM_TASKS_PER_NODE \]
   do
diff --git a/testsuite/expect/test1.15 b/testsuite/expect/test1.15
index 9cbbfd612..b47f9c8ee 100755
--- a/testsuite/expect/test1.15
+++ b/testsuite/expect/test1.15
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -61,14 +62,10 @@ expect {
 		incr matches
 		exp_continue
 	}
-	-re "task \\\[0,2-9\\\]: running" {
+	-re "tasks \\\[0,2-9\\\]: running" {
 		incr matches
 		exp_continue
 	}
-	-re "Exited with exit code" {
-		send_user "This error is expected, no worries\n"
-		exp_continue
-	}
 	timeout {
 		send_user "\nFAILURE: srun not responding\n"
 		slow_kill $srun_pid
diff --git a/testsuite/expect/test1.16 b/testsuite/expect/test1.16
index 5d7465a95..3769788f4 100755
--- a/testsuite/expect/test1.16
+++ b/testsuite/expect/test1.16
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.17 b/testsuite/expect/test1.17
index e1adfa1ae..8502f234a 100755
--- a/testsuite/expect/test1.17
+++ b/testsuite/expect/test1.17
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.18 b/testsuite/expect/test1.18
index fdc0946e6..b245e1c76 100755
--- a/testsuite/expect/test1.18
+++ b/testsuite/expect/test1.18
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.19 b/testsuite/expect/test1.19
index 0cef6672e..4622c0362 100755
--- a/testsuite/expect/test1.19
+++ b/testsuite/expect/test1.19
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.2 b/testsuite/expect/test1.2
index f49b9ee0f..deed65151 100755
--- a/testsuite/expect/test1.2
+++ b/testsuite/expect/test1.2
@@ -11,10 +11,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.20 b/testsuite/expect/test1.20
index 3f10914c1..7caa3db28 100755
--- a/testsuite/expect/test1.20
+++ b/testsuite/expect/test1.20
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.21 b/testsuite/expect/test1.21
index 9b258cae2..66b011474 100755
--- a/testsuite/expect/test1.21
+++ b/testsuite/expect/test1.21
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.22 b/testsuite/expect/test1.22
index 61ec64965..bf079a46b 100755
--- a/testsuite/expect/test1.22
+++ b/testsuite/expect/test1.22
@@ -12,10 +12,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.23 b/testsuite/expect/test1.23
index 121c2766f..ff74c7d0a 100755
--- a/testsuite/expect/test1.23
+++ b/testsuite/expect/test1.23
@@ -12,10 +12,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -147,7 +148,7 @@ if {$err_msg != 1} {
 #
 set host_0      ""
 set timeout $max_job_delay
-set srun_pid [spawn $srun -N1 -l --mem=1 -t1 $bin_printenv SLURMD_NODENAME]
+set srun_pid [spawn $srun -N1 -l --mem=10 -t1 $bin_printenv SLURMD_NODENAME]
 expect {
 	-re "0: ($alpha_numeric_under)" {
 		set host_0 $expect_out(1,string)
diff --git a/testsuite/expect/test1.24 b/testsuite/expect/test1.24
index ee70fa7ef..d0b1d1f31 100755
--- a/testsuite/expect/test1.24
+++ b/testsuite/expect/test1.24
@@ -11,10 +11,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.25 b/testsuite/expect/test1.25
index 35ec82df5..6ff734817 100755
--- a/testsuite/expect/test1.25
+++ b/testsuite/expect/test1.25
@@ -12,10 +12,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.26 b/testsuite/expect/test1.26
index b6168ca78..7b9104338 100755
--- a/testsuite/expect/test1.26
+++ b/testsuite/expect/test1.26
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -172,7 +173,7 @@ for {set inx 0} {$inx < $interations} {incr inx} {
 	set spawn_id $noalloc2
 	expect {
 		-i $noalloc2
-		-re "qsw_prog_init.*Error configuring interconnect" {
+		-re "error:.*configuring interconnect" {
 			send_user "Can't avoid this possible error\n"
 			exp_continue
 		}
@@ -194,7 +195,7 @@ for {set inx 0} {$inx < $interations} {incr inx} {
 	set spawn_id $noalloc1
 	expect {
 		-i $noalloc1
-		-re "qsw_prog_init.*Error configuring interconnect" {
+		-re "error:.*configuring interconnect" {
 			send_user "Can't avoid this possible error\n"
 			exp_continue
 		}
@@ -226,7 +227,7 @@ for {set inx 0} {$inx < $interations} {incr inx} {
 			}
 			exp_continue
 		}
-		-re "qsw_prog_init.*Error configuring interconnect" {
+		-re "error:.*configuring interconnect" {
 			send_user "Can't avoid this possible error\n"
 			exp_continue
 		}
diff --git a/testsuite/expect/test1.27 b/testsuite/expect/test1.27
index 976919b8d..50171d9a8 100755
--- a/testsuite/expect/test1.27
+++ b/testsuite/expect/test1.27
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -43,7 +44,7 @@ print_header $test_id
 array set good_vars {
     SLURM_CPUS_ON_NODE 1
     SLURM_CPUS_PER_TASK 1
-    SLURM_JOBID 1
+    SLURM_JOB_ID 1
     SLURM_LAUNCH_NODE_IPADDR 0
     SLURM_LOCALID 0
     SLURM_NNODES 0
diff --git a/testsuite/expect/test1.28 b/testsuite/expect/test1.28
index 4dc41c5c4..0a26e5592 100755
--- a/testsuite/expect/test1.28
+++ b/testsuite/expect/test1.28
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.29 b/testsuite/expect/test1.29
index 88066f61c..d0c054525 100755
--- a/testsuite/expect/test1.29
+++ b/testsuite/expect/test1.29
@@ -13,10 +13,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.29.prog.c b/testsuite/expect/test1.29.prog.c
index d6e231700..a6ab4edcf 100644
--- a/testsuite/expect/test1.29.prog.c
+++ b/testsuite/expect/test1.29.prog.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test1.3 b/testsuite/expect/test1.3
index a0f68f471..3a9000996 100755
--- a/testsuite/expect/test1.3
+++ b/testsuite/expect/test1.3
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.30 b/testsuite/expect/test1.30
index 7bfc6c32d..1379e67d8 100755
--- a/testsuite/expect/test1.30
+++ b/testsuite/expect/test1.30
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.31 b/testsuite/expect/test1.31
index 58e0e0932..8aca35928 100755
--- a/testsuite/expect/test1.31
+++ b/testsuite/expect/test1.31
@@ -12,10 +12,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.32 b/testsuite/expect/test1.32
index 0a2f10181..d93c34d48 100755
--- a/testsuite/expect/test1.32
+++ b/testsuite/expect/test1.32
@@ -13,10 +13,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -85,9 +86,10 @@ expect {
 	-re "WAITING" {
 		incr matches
 		# sleep to make sure the process is actually running
-		sleep 1
+		exec $bin_sleep 1
 		exec $bin_kill -USR1 $srun_pid
 		exec $bin_kill -USR2 $srun_pid
+		send_user "\nSent signals USR1 and USR2\n"
 		exp_continue
 	}
 	-re "SIGUSR($number)" {
diff --git a/testsuite/expect/test1.32.prog.c b/testsuite/expect/test1.32.prog.c
index 2f206dab8..8cec2a3b0 100644
--- a/testsuite/expect/test1.32.prog.c
+++ b/testsuite/expect/test1.32.prog.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -76,7 +77,6 @@ main (int argc, char **argv)
 	while (!sigusr1_cnt || !sigusr2_cnt) {
 		sleep(1);
 	}
-
-	printf("FINI\n");
+	printf("FINI: sig1:%d sig2:%d\n", sigusr1_cnt, sigusr2_cnt);
 	exit(0);
 }
diff --git a/testsuite/expect/test1.33 b/testsuite/expect/test1.33
index 30511eef1..ca8892eff 100755
--- a/testsuite/expect/test1.33
+++ b/testsuite/expect/test1.33
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.34 b/testsuite/expect/test1.34
index 87485a9de..6d98138d3 100755
--- a/testsuite/expect/test1.34
+++ b/testsuite/expect/test1.34
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.34.prog.c b/testsuite/expect/test1.34.prog.c
index d51a6c56e..3bceda4e8 100644
--- a/testsuite/expect/test1.34.prog.c
+++ b/testsuite/expect/test1.34.prog.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test1.35 b/testsuite/expect/test1.35
index d20e2c836..35690c4df 100755
--- a/testsuite/expect/test1.35
+++ b/testsuite/expect/test1.35
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -50,7 +51,7 @@ print_header $test_id
 exec $bin_rm -f $file_in $file_out $file_err
 make_bash_script $file_in "
   for ((i = 0; i < $steps_started; i++)); do
-    j=`expr $steps_started + 10 - \$i`
+    j=`expr $steps_started + 15 - \$i`
     $srun $bin_sleep \$j &
     $bin_sleep 1
   done
diff --git a/testsuite/expect/test1.36 b/testsuite/expect/test1.36
index a5570a7be..ad2c4d062 100755
--- a/testsuite/expect/test1.36
+++ b/testsuite/expect/test1.36
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.37 b/testsuite/expect/test1.37
index 78b29cb72..4b15449ba 100755
--- a/testsuite/expect/test1.37
+++ b/testsuite/expect/test1.37
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.38 b/testsuite/expect/test1.38
index 3501fbeaf..8a4d25d06 100755
--- a/testsuite/expect/test1.38
+++ b/testsuite/expect/test1.38
@@ -12,10 +12,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -141,7 +142,7 @@ expect {
 		set match_run 999
 		exp_continue
 	}
-	-re "forcing job termination" {
+	-re "Job step aborted" {
 		set match_term 1
 		exp_continue
 	}
diff --git a/testsuite/expect/test1.39 b/testsuite/expect/test1.39
index 2a2a15cf9..55263f256 100755
--- a/testsuite/expect/test1.39
+++ b/testsuite/expect/test1.39
@@ -10,10 +10,11 @@
 # Copyright (C) 2004-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.39.prog.c b/testsuite/expect/test1.39.prog.c
index fccca258a..9892d2a3d 100644
--- a/testsuite/expect/test1.39.prog.c
+++ b/testsuite/expect/test1.39.prog.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test1.4 b/testsuite/expect/test1.4
index 85389cc91..f7aee300b 100755
--- a/testsuite/expect/test1.4
+++ b/testsuite/expect/test1.4
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.40 b/testsuite/expect/test1.40
index 355decfe4..cc05a0905 100755
--- a/testsuite/expect/test1.40
+++ b/testsuite/expect/test1.40
@@ -10,10 +10,11 @@
 # Copyright (C) 2004-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.41 b/testsuite/expect/test1.41
index ee367ee27..33067ee6a 100755
--- a/testsuite/expect/test1.41
+++ b/testsuite/expect/test1.41
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.42 b/testsuite/expect/test1.42
index 010755d1b..5b50a011c 100755
--- a/testsuite/expect/test1.42
+++ b/testsuite/expect/test1.42
@@ -10,10 +10,11 @@
 # Copyright (C) 2004-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -78,7 +79,7 @@ expect {
 		set job_id2 $expect_out(1,string)
 		exp_continue
 	}
-	-re "JobState=COMPLETED" {
+	-re "JobState=COMPLETED|COMPLETING" {
 		set match_state 1
 		exp_continue
 	}
diff --git a/testsuite/expect/test1.43 b/testsuite/expect/test1.43
index cf6834a27..a953acb38 100755
--- a/testsuite/expect/test1.43
+++ b/testsuite/expect/test1.43
@@ -10,10 +10,11 @@
 # Copyright (C) 2005 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -33,6 +34,7 @@ source ./globals
 
 set test_id     "1.43"
 set exit_code   0
+set jobs_run    0
 
 print_header $test_id
 
@@ -43,7 +45,8 @@ set timeout 60
 for {set node_cnt 1} {$node_cnt > 0} {set node_cnt [expr $node_cnt * 2]} {
 	set srun_pid [spawn $srun --test-only -N$node_cnt -t1 $bin_printenv SLURMD_NODENAME]
 	expect {
-		-re "allocation success" {
+		-re "Job $number to start at" {
+			incr jobs_run
 			exp_continue
 		}
 		-re "allocation failure" {
@@ -66,6 +69,11 @@ for {set node_cnt 1} {$node_cnt > 0} {set node_cnt [expr $node_cnt * 2]} {
 	}
 }
 
+if {$jobs_run == 0} {
+	send_user "\nFAILURE: No jobs run\n"
+	set exit_code 1
+}
+
 if {$exit_code == 0} {
 	send_user "\nSUCCESS\n"
 }
diff --git a/testsuite/expect/test1.44 b/testsuite/expect/test1.44
index 993f1aa9a..093c42f78 100755
--- a/testsuite/expect/test1.44
+++ b/testsuite/expect/test1.44
@@ -12,10 +12,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Chris Morrone <morrone2@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.45 b/testsuite/expect/test1.45
new file mode 100755
index 000000000..dc6f745a6
--- /dev/null
+++ b/testsuite/expect/test1.45
@@ -0,0 +1,156 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM functionality
+#          Test that a job correctly uses the -E or --preserve-env flag.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "WARNING: ..." with an explanation of why the test can't be made, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2008-2009 Lawrence Livermore National Security
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Dave Bremer <dbremer@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id          "1.45"
+set exit_code        0
+set file_in          "test$test_id.input"
+set file_out         "test$test_id.output"
+set job_id           0
+set min_nodes        1
+set max_nodes        3
+set num_procs        6
+set num_nodes_test1  ""
+set num_nodes_test2  ""
+set num_nodes_test3  ""
+set num_procs_test1  ""
+set num_procs_test2  ""
+set num_procs_test3  ""
+
+
+print_header $test_id
+
+if { [test_xcpu] } {
+	send_user "\nWARNING: This test is incompatable with XCPU systems\n"
+	exit 0
+}
+
+#
+# Build input script file
+#
+make_bash_script $file_in "
+   $bin_printenv SLURM_NNODES
+   $srun -E -n1 -N1 $bin_printenv SLURM_NNODES
+   $bin_printenv SLURM_NPROCS
+   $srun --preserve-env -n1 -N1 $bin_printenv SLURM_NPROCS
+   $srun -n1 -N1 $bin_printenv SLURM_NNODES
+   $srun -n1 -N1 $bin_printenv SLURM_NPROCS"
+
+#
+# Run job to determine what nodes are available
+#
+spawn $sbatch -N$min_nodes-$max_nodes -n$num_procs -O -t1 --output=$file_out $file_in
+expect {
+	-re "nodes *: ($number)" {
+		if {$expect_out(1,string) != 3} {
+			send_user "\nFAILURE: failed to process --nodes option\n"
+			set exit_code 1
+		}
+		exp_continue
+	}
+	-re "Submitted batch job ($number)" {
+		set job_id $expect_out(1,string)
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sbatch not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$job_id == 0} {
+	send_user "\nFAILURE: job not submitted\n"
+	exit 1
+}
+if {[wait_for_job $job_id "DONE"] != 0} {
+	send_user "\nFAILURE: job did not complete\n"
+	cancel_job $job_id
+	exit 1
+}
+if {[wait_for_file $file_out] != 0} {
+	send_user "\nFAILURE: no output file\n"
+	exit 1
+}
+
+# NOTE: There could be warning messages generated by the srun commands,
+# For example: "srun: Job step creation temporarily disabled, retrying"
+# would be due to nodes being powered down
+set index 0
+spawn $bin_cat $file_out
+expect {
+	-re "($number)\r\n" {
+		incr index
+		if {$index == 1} {set num_nodes_test1 $expect_out(1,string)}
+		if {$index == 2} {set num_nodes_test2 $expect_out(1,string)}
+		if {$index == 3} {set num_procs_test1 $expect_out(1,string)}
+		if {$index == 4} {set num_procs_test2 $expect_out(1,string)}
+		if {$index == 5} {set num_nodes_test3 $expect_out(1,string)}
+		if {$index == 6} {set num_procs_test3 $expect_out(1,string)}
+		exp_continue
+	}
+	eof {
+		wait
+	}
+}
+
+
+
+if {$num_nodes_test1 != $num_nodes_test2} {
+	send_user "\nFAILURE: SLURM_NNODES was not preserved ($num_nodes_test1 != $num_nodes_test2)\n"
+	set exit_code 1
+}
+
+if {$num_procs_test1 != $num_procs_test2} {
+	send_user "\nFAILURE: SLURM_NPROCS was not preserved ($num_procs_test1 != $num_procs_test2)\n"
+	set exit_code 1
+}
+
+if {$num_nodes_test3 != 1} {
+	send_user "\nFAILURE: SLURM_NNODES should be 1 ($num_nodes_test3 != 1)\n"
+	set exit_code 1
+}
+
+if {$num_procs_test3 != 1} {
+	send_user "\nFAILURE: SLURM_NPROCS should be 1 ($num_procs_test3 != 1)\n"
+	set exit_code 1
+}
+
+if {$exit_code == 0} {
+	exec $bin_rm $file_in $file_out
+	send_user "\nSUCCESS\n"
+}
+
+exit $exit_code
diff --git a/testsuite/expect/test1.46 b/testsuite/expect/test1.46
index 0938ed86b..9f748ff1d 100755
--- a/testsuite/expect/test1.46
+++ b/testsuite/expect/test1.46
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.47 b/testsuite/expect/test1.47
index cb83a2f29..37c4eb9bb 100755
--- a/testsuite/expect/test1.47
+++ b/testsuite/expect/test1.47
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -79,7 +80,7 @@ expect {
 		set job_id2 $expect_out(1,string)
 		exp_continue
 	}
-	-re "JobState=COMPLETED" {
+	-re "JobState=COMPLETED|COMPLETING" {
 		set matches 1
 		exp_continue
 	}
diff --git a/testsuite/expect/test1.48 b/testsuite/expect/test1.48
index ac41d2995..7ce701132 100755
--- a/testsuite/expect/test1.48
+++ b/testsuite/expect/test1.48
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.49 b/testsuite/expect/test1.49
index 5c8f43fef..1f170a5ae 100755
--- a/testsuite/expect/test1.49
+++ b/testsuite/expect/test1.49
@@ -10,10 +10,11 @@
 # Copyright (C) 2005-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.5 b/testsuite/expect/test1.5
index 79427066b..6d98842cc 100755
--- a/testsuite/expect/test1.5
+++ b/testsuite/expect/test1.5
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.50 b/testsuite/expect/test1.50
index bccb6a3d2..6cd180d42 100755
--- a/testsuite/expect/test1.50
+++ b/testsuite/expect/test1.50
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.51 b/testsuite/expect/test1.51
index 45ae78925..4c7cf67ac 100755
--- a/testsuite/expect/test1.51
+++ b/testsuite/expect/test1.51
@@ -11,10 +11,11 @@
 # Copyright (C) 2005 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.52 b/testsuite/expect/test1.52
index 74e47c00c..0eb3184ee 100755
--- a/testsuite/expect/test1.52
+++ b/testsuite/expect/test1.52
@@ -7,13 +7,15 @@
 #          "FAILURE: ..." otherwise with an explanation of the failure, OR
 #          anything else indicates a failure mode that must be investigated.
 ############################################################################
-# Copyright (C) 2002-2006 The Regents of the University of California.
+# Copyright (C) 2002-2007 The Regents of the University of California.
+# Copyright (C) 2008-2009  Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -83,7 +85,6 @@ set node2       0
 set no_hostfile 0
 set timeout $max_job_delay
 for {set i 0} {$i<3} {incr i} {
-
 	if { $i==1 } {
 		if { $node0 == 0 || $node1 == 0 || $node2 == 0 } {
 			send_user "\nFAILURE: node names not set from \
@@ -91,9 +92,9 @@ for {set i 0} {$i<3} {incr i} {
 			exit 1
 		}
 		set env(SLURM_HOSTFILE) $hostfile
-		set 1node0 $node0
-		set 1node1 $node1
-		set 1node2 $node2
+		set 1node0 $node2
+		set 1node1 $node0
+		set 1node2 $node1
 		set file [open $hostfile "w"]
 		puts $file "$node2\n$node0\n$node1"
 		close $file
@@ -106,9 +107,9 @@ for {set i 0} {$i<3} {incr i} {
 		set env(SLURM_HOSTFILE) $hostfile
 		set 2node0 $node1
 		set 2node1 $node0
-		set 2node2 $node0
+		set 2node2 $node2
 		set file [open $hostfile "w"]
-		puts $file "$node1\n$node0\n$node0"
+		puts $file "$node1\n$node0\n$node2"
 		close $file
 	}
 	#
@@ -117,7 +118,11 @@ for {set i 0} {$i<3} {incr i} {
 	set node0  ""
 	set node1  ""
 	set node2  ""
-	set srun_pid [spawn $srun -N3 -t1 -l $bin_printenv SLURMD_NODENAME]
+	if { $i == 0} {
+		set srun_pid [spawn $srun -N3 -t1 -l $bin_printenv SLURMD_NODENAME]
+	} else {
+		set srun_pid [spawn $srun -N3 -t1 -l --distribution=arbitrary $bin_printenv SLURMD_NODENAME]
+	}
 	expect {
 		-re "SwitchType does not permit arbitrary task distribution" {
 			set no_hostfile 1
@@ -146,25 +151,25 @@ for {set i 0} {$i<3} {incr i} {
 	if { $no_hostfile != 0 } {
 		send_user "\nNo worries, test just can not run here\n"
 	} elseif { $i == 1 } {
-		if { [string compare $node0 $1node2] } {
-			send_user "\nFAILURE: tasks not distributed by hostfile\n"
+		if { [string compare $node0 $1node0] } {
+			send_user "\nFAILURE: task 0 not distributed by hostfile ($node0 != $1node0)\n"
 			set exit_code 1
-		} elseif { [string compare $node1 $1node0] } {
-			send_user "\nFAILURE: tasks not distributed by hostfile\n"
+		} elseif { [string compare $node1 $1node1] } {
+			send_user "\nFAILURE: task 1 not distributed by hostfile ($node1 != $1node1)\n"
 			set exit_code 1
-		} elseif { [string compare $node2 $1node1] } {
-			send_user "\nFAILURE: tasks not distributed by hostfile\n"
+		} elseif { [string compare $node2 $1node2] } {
+			send_user "\nFAILURE: task 2 not distributed by hostfile ($node2 != $1node2)\n"
 			set exit_code 1
 		}
 	} elseif { $i == 2 } {
 		if { [string compare $node0 $2node0] } {
-			send_user "\nFAILURE: tasks not distributed by hostfile\n"
+			send_user "\nFAILURE: task 0 not distributed by hostfile ($node0 != $2node0)\n"
 			set exit_code 1
 		} elseif { [string compare $node1 $2node1] } {
-			send_user "\nFAILURE: tasks not distributed by hostfile\n"
+			send_user "\nFAILURE: task 1 not distributed by hostfile ($node1 != $2node1)\n"
 			set exit_code 1
-		} elseif { [string compare $node2 $2node1] } {
-			send_user "\nFAILURE: tasks not distributed by hostfile\n"
+		} elseif { [string compare $node2 $2node2] } {
+			send_user "\nFAILURE: task 2 not distributed by hostfile ($node2 != $2node2)\n"
 			set exit_code 1
 		}
 	}
diff --git a/testsuite/expect/test1.54 b/testsuite/expect/test1.54
index cd235cf73..fd48d26f1 100755
--- a/testsuite/expect/test1.54
+++ b/testsuite/expect/test1.54
@@ -11,10 +11,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.55 b/testsuite/expect/test1.55
index 6879d7563..05bdda069 100755
--- a/testsuite/expect/test1.55
+++ b/testsuite/expect/test1.55
@@ -11,10 +11,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Christopher J. Morrone <morrone2@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.56 b/testsuite/expect/test1.56
index 67e539c97..24509eb34 100755
--- a/testsuite/expect/test1.56
+++ b/testsuite/expect/test1.56
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Christopher J. Morrone <morrone2@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.57 b/testsuite/expect/test1.57
index 5a553f57d..cc8653330 100755
--- a/testsuite/expect/test1.57
+++ b/testsuite/expect/test1.57
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.58 b/testsuite/expect/test1.58
index 6d467811c..bb92683d0 100755
--- a/testsuite/expect/test1.58
+++ b/testsuite/expect/test1.58
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Christopher J. Morrone <morrone2@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.59 b/testsuite/expect/test1.59
index 6cb16f1c9..c6ee7cd31 100755
--- a/testsuite/expect/test1.59
+++ b/testsuite/expect/test1.59
@@ -15,7 +15,8 @@
 # UCRL-CODE-217948.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -62,8 +63,8 @@ expect {
 	}
 	-re "TotalNodes=($number)" {
 		set node_count $expect_out(1,string)
-		if { $node_count < 2 } {
-			send_user "WARNING: system must have at least 2 \
+		if { $node_count < 3 } {
+			send_user "WARNING: system must have at least 3 \
 				   nodes to run this test on.  This system \
 				   only has $node_count.\n"
 			exit $exit_code
@@ -86,7 +87,7 @@ set node4 0
 set timeout $max_job_delay
 spawn $salloc -N$num_nodes -v bash
 expect {
-	-re "salloc: Granted job allocation ($number):" {
+	-re "salloc: Granted job allocation ($number)" {
 		set job_id $expect_out(1,string)
 		exp_continue
 	}
@@ -102,6 +103,10 @@ expect {
 		wait
 	}
 }
+if {$job_id == 0} {
+	send_user "\nFAILURE: salloc failure\n"
+	exit 1
+}
 
 for {set i 0} {$i<4} {incr i} {
 	set extra ""
@@ -192,7 +197,7 @@ for {set i 0} {$i<4} {incr i} {
 		-re $prompt {
 			#send_user "srun completed\n"
 		}
-		-re "slurm job ($number)" {
+		-re "Granted job allocation ($number)" {
 			set job_id $expect_out(1,string)
 			exp_continue
 		}
diff --git a/testsuite/expect/test1.6 b/testsuite/expect/test1.6
index 5b6ffcb9f..f2f338e87 100755
--- a/testsuite/expect/test1.6
+++ b/testsuite/expect/test1.6
@@ -13,10 +13,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.60 b/testsuite/expect/test1.60
new file mode 100755
index 000000000..09d003c4a
--- /dev/null
+++ b/testsuite/expect/test1.60
@@ -0,0 +1,204 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM functionality
+#          Test srun stdout/err labelling combined with file template
+#          options with %t and %N.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2009 Lawrence Livermore National Security.
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Dave Bremer <dbremer@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id          "1.60"
+set exit_code        0
+set file_out_n       "test$test_id.n.%n.output"
+set file_out_t       "test$test_id.t.%t.output"
+set job_id           0
+set node_count       0
+set task_count       0
+set task_id          0
+set node_id          0
+set file_cnt         0
+set file_out_t_glob  ""
+set file_out_n_glob  ""
+
+print_header $test_id
+
+#
+# Spawn a program that generates "task_id" (%t) in stdout file names
+# and confirm they are created
+#
+for {set task_id 0} {$task_id < $node_count} {incr task_id} {
+	set file_out_t_glob  "test$test_id.t.$task_id.output"
+	exec $bin_rm -f $file_out_t_glob
+}
+set timeout $max_job_delay
+set srun_pid [spawn $srun -l --output=$file_out_t -N 1-10 -v -t1 $bin_echo hello]
+expect {
+	-re "jobid ($number)" {
+		set job_id $expect_out(1,string)
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: srun not responding\n"
+		slow_kill $srun_pid
+		exit 1
+	}
+	eof {
+		wait
+	}
+}
+if {$job_id == 0} {
+	send_user "\nFAILURE: job initiation failed\n"
+	exit 1
+}
+
+set node_count 0
+spawn $squeue -tall -j $job_id -o "%i %D"
+expect {
+	-re "$job_id ($number)" {
+		set node_count $expect_out(1,string)
+		exp_continue
+	}
+	eof {
+		wait
+	}
+}
+if {$node_count == 0} {
+	send_user "\nFAILURE: did not get node_count\n"
+	cancel_job $job_id
+	exit 1
+}
+
+set file_cnt 0
+for {set task_id 0} {$task_id < $node_count} {incr task_id} {
+	set file_out_t_glob  "test$test_id.t.$task_id.output"
+	if {[wait_for_file $file_out_t_glob] != 0} {
+		set exit_code 1
+	} else {
+		set test_task_id -1
+		spawn $bin_cat $file_out_t_glob
+		expect {
+			-re "($number): *hello" {
+				set test_task_id $expect_out(1,string)
+				exp_continue
+			}
+			eof {
+				wait
+			}
+		}
+		if {$task_id != $test_task_id} {
+			send_user "\nFAILURE: file $file_out_t_glob was not labelled.  $task_id != $test_task_id\n"
+			set exit_code 1
+		} else {
+			exec $bin_rm -f $file_out_t_glob
+		}
+		incr file_cnt
+	}
+}
+if {$file_cnt != $node_count} {
+	send_user "\nFAILURE: file format of %t in stdout failed\n"
+	set exit_code 1
+}
+if {$exit_code != 0} {
+	exit $exit_code
+}
+
+#
+# Spawn a program that generates "node_id" (%n) in stdout file names
+# and confirm they are created
+#
+for {set node_id 0} {$node_id < $node_count} {incr node_id} {
+	set file_out_n_glob  "test$test_id.n.$node_id.output"
+	exec $bin_rm -f $file_out_n_glob
+}
+
+set task_count [expr $node_count * 2]
+set timeout $max_job_delay
+set srun_pid [spawn $srun -l --output=$file_out_n -N $node_count -n $task_count -O -v -t1 $bin_echo hello]
+expect {
+	-re "jobid ($number).*" {
+		set job_id $expect_out(1,string)
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: srun not responding\n"
+		slow_kill $srun_pid
+		exit 1
+	}
+	eof {
+		wait
+	}
+}
+if {$job_id == 0} {
+	send_user "\nFAILURE: job initiation failed\n"
+	exit 1
+}
+
+
+for {set node_id 0} {$node_id < $node_count} {incr node_id} {
+	set file_out_n_glob  "test$test_id.n.$node_id.output"
+	if {[wait_for_file $file_out_n_glob] != 0} {
+		set exit_code 1
+	} else {
+		set t0found false
+		set t1found false
+
+		spawn $bin_cat $file_out_n_glob
+		expect {
+			-re "($number): *hello" {
+				set test_task_id $expect_out(1,string)
+				if {$test_task_id == $node_id * 2} {
+					set t0found true
+				}
+				if {$test_task_id == $node_id * 2 + 1} {
+					set t1found true
+				}
+				exp_continue
+			}
+			eof {
+				wait
+			}
+		}
+		if {!$t0found || !$t1found} {
+			send_user "\nFAILURE: file $file_out_n_glob was not labelled correctly\n"
+			set exit_code 1
+		} else {
+			exec $bin_rm -f $file_out_n_glob
+		}
+		incr file_cnt
+	}
+}
+
+
+#
+# Post-processing
+#
+if {$exit_code == 0} {
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test1.7 b/testsuite/expect/test1.7
index 42efc6c93..95fef27af 100755
--- a/testsuite/expect/test1.7
+++ b/testsuite/expect/test1.7
@@ -8,12 +8,14 @@
 #          anything else indicates a failure mode that must be investigated.
 ############################################################################
 # Copyright (C) 2002-2007 The Regents of the University of California.
+# Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -44,6 +46,7 @@ print_header $test_id
 # Make sure sleep time is no larger than InactiveLimit
 set inactive_limit  $sleep_time
 set kill_wait       $sleep_time
+set over_time_limit 0
 log_user 0
 spawn $scontrol show config
 expect {
@@ -55,6 +58,14 @@ expect {
 		set kill_wait $expect_out(1,string)
 		exp_continue
 	}
+	-re "OverTimeLimit *= UNLIMITED" {
+		set over_time_limit 9999
+		exp_continue
+	}
+	-re "OverTimeLimit *= ($number)" {
+		set over_time_limit $expect_out(1,string)
+		exp_continue
+	}
 	timeout {
 		send_user "\nFAILURE: scontrol not responding\n"
 		set exit_code 1
@@ -75,6 +86,10 @@ if {$kill_wait > 60} {
 	send_user "\nWARNING: KillWait ($kill_wait) is too high for this test\n"
 	exit 0
 }
+if {$over_time_limit > 0} {
+	send_user "\nWARNING: OverTimeLimit too high for this test ($over_time_limit > 0)\n"
+	exit 0
+}
 if {$inactive_limit < $sleep_time} {
 	set sleep_time [expr $inactive_limit + $kill_wait]
 	send_user "\nReset job sleep time to $sleep_time seconds\n"
diff --git a/testsuite/expect/test1.8 b/testsuite/expect/test1.8
index 3d68e60e3..ddc93829c 100755
--- a/testsuite/expect/test1.8
+++ b/testsuite/expect/test1.8
@@ -14,10 +14,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.80 b/testsuite/expect/test1.80
index a3b3e11c6..25ede9de7 100755
--- a/testsuite/expect/test1.80
+++ b/testsuite/expect/test1.80
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.81 b/testsuite/expect/test1.81
index 14541174b..2edd0304d 100755
--- a/testsuite/expect/test1.81
+++ b/testsuite/expect/test1.81
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.82 b/testsuite/expect/test1.82
index cf8004058..ef05b750d 100755
--- a/testsuite/expect/test1.82
+++ b/testsuite/expect/test1.82
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.83 b/testsuite/expect/test1.83
index 3a99bf56a..65aa240c4 100755
--- a/testsuite/expect/test1.83
+++ b/testsuite/expect/test1.83
@@ -14,13 +14,14 @@
 #          Change tha node name parsing logic as needed for other formats.
 ############################################################################
 # Copyright (C) 2002-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>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -52,6 +53,10 @@ if {[test_front_end] != 0} {
 	send_user "\nWARNING: This test is incompatable with front-end systems\n"
 	exit 0
 }
+if {[test_topology] != 0} {
+	send_user "\nWARNING: This test is incompatable topology configured systems\n"
+	exit 0
+}
 
 set available [available_nodes [default_partition]]
 if {$available < 3} {
diff --git a/testsuite/expect/test1.84 b/testsuite/expect/test1.84
index 6085e12d0..b301a6570 100755
--- a/testsuite/expect/test1.84
+++ b/testsuite/expect/test1.84
@@ -16,10 +16,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -66,7 +67,7 @@ set host           ""
 set timeout        $max_job_delay
 set task_cnt       0
 
-set srun_pid [spawn $srun -N1 --cpus-per-task=1 -l -t1 $file_in]
+set srun_pid [spawn $srun -N1 --cpus-per-task=1 --exclusive -l -t1 $file_in]
 expect {
 	-re "Granted job allocation ($number)" {
 		set job_id $expect_out(1,string)
@@ -112,6 +113,7 @@ if {[string compare $host ""] == 0} {
 if {$cpu_cnt != $task_cnt} {
 	send_user "FAILURE: should have run $cpu_cnt tasks (one per CPU) "
 	send_user "instead of $task_cnt tasks\n"
+	send_user "NOTE: This could be due to memory limit per allocated CPU\n\n"
 	set exit_code 1
 }
 if {$cpu_cnt < 2} {
@@ -123,7 +125,7 @@ if {$cpu_cnt < 2} {
 # Submit a 1 node job to determine the node's CPU count
 #
 set task_cnt  0
-set srun_pid [spawn $srun -N1 -t1 --nodelist=$host --cpus-per-task=2 -l $bin_printenv SLURMD_NODENAME]
+set srun_pid [spawn $srun -N1 -t1 --nodelist=$host --cpus-per-task=2 --exclusive -l $bin_printenv SLURMD_NODENAME]
 expect {
 	-re "Invalid node name specified" {
 		send_user "\nWARNING: Appears you are using "
@@ -150,6 +152,7 @@ expect {
 #
 if {$task_cnt != [expr $cpu_cnt / 2]} {
 	send_user "\nFAILURE: Improper task count for given cpus-per-task\n"
+	send_user "NOTE: This could be due to memory limit per allocated CPU\n\n"
 	set exit_code   1	
 }
 
diff --git a/testsuite/expect/test1.86 b/testsuite/expect/test1.86
index 44163c7aa..a15aed75f 100755
--- a/testsuite/expect/test1.86
+++ b/testsuite/expect/test1.86
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.87 b/testsuite/expect/test1.87
index 94b7afa30..4890f1b04 100755
--- a/testsuite/expect/test1.87
+++ b/testsuite/expect/test1.87
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.88 b/testsuite/expect/test1.88
index ebc20179c..159765ae0 100755
--- a/testsuite/expect/test1.88
+++ b/testsuite/expect/test1.88
@@ -11,10 +11,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -112,11 +113,7 @@ expect {
 		set job_id $expect_out(1,string)
 		exp_continue
 	}
-	-re "configuration not available" {
-		set no_start 1
-		exp_continue
-	}
-	-re "Unable to submit batch job" {
+	-re "(configuration not available|Unable to submit batch job|Node count specification invalid)" {
 		set no_start 1
 		exp_continue
 	}
diff --git a/testsuite/expect/test1.88.prog.c b/testsuite/expect/test1.88.prog.c
index e56cb74be..1539f050a 100644
--- a/testsuite/expect/test1.88.prog.c
+++ b/testsuite/expect/test1.88.prog.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dong Ang <dahn@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test1.89 b/testsuite/expect/test1.89
index f7e703f6c..b8cf2676d 100755
--- a/testsuite/expect/test1.89
+++ b/testsuite/expect/test1.89
@@ -11,10 +11,11 @@
 # Copyright (C) 2005 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -70,7 +71,7 @@ exec $bin_chmod 700 $file_prog
 #
 # Create an allocation
 #
-set salloc_pid [spawn $salloc -N1 --verbose -t2 $bin_bash]
+set salloc_pid [spawn $salloc -N1 --exclusive --verbose -t2 $bin_bash]
 
 #
 # Run a job step to get allocated processor count and affinity
@@ -156,7 +157,7 @@ if {$task_mask != $task_cnt} {
 set verbose_cnt 0
 send "$srun -c1 --cpu_bind=verbose,map_cpu:0 $file_prog\n"
 expect {
-	-re "cpu_bind=MAP" {
+	-re "cpu_bind=MAP|cpu_bind_cores=MAP|cpu_bind_sockets=MAP|cpu_bind_threads=MAP" {
 		incr verbose_cnt
 		exp_continue
 	}
diff --git a/testsuite/expect/test1.89.prog.c b/testsuite/expect/test1.89.prog.c
index 2a1824921..8383de057 100644
--- a/testsuite/expect/test1.89.prog.c
+++ b/testsuite/expect/test1.89.prog.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/testsuite/expect/test1.9 b/testsuite/expect/test1.9
index f6002c958..10b426d94 100755
--- a/testsuite/expect/test1.9
+++ b/testsuite/expect/test1.9
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.90 b/testsuite/expect/test1.90
index d3b2bb27a..c5b02164a 100755
--- a/testsuite/expect/test1.90
+++ b/testsuite/expect/test1.90
@@ -11,10 +11,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test1.90.prog.c b/testsuite/expect/test1.90.prog.c
index b6f9a2c12..fbde23f2a 100644
--- a/testsuite/expect/test1.90.prog.c
+++ b/testsuite/expect/test1.90.prog.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/testsuite/expect/test1.91 b/testsuite/expect/test1.91
index 01931d6fa..e53ce9316 100755
--- a/testsuite/expect/test1.91
+++ b/testsuite/expect/test1.91
@@ -12,10 +12,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -96,11 +97,11 @@ expect {
 		set num_sockets $expect_out(1,string)
 		exp_continue
 	}
-	-re "Cores=($number)" {
+	-re "CoresPerSocket=($number)" {
 	   	set num_cores $expect_out(1,string)
 		exp_continue
 	}
-	-re "Threads=($number)" {
+	-re "ThreadsPerCore=($number)" {
 	   	set num_threads $expect_out(1,string)
 		exp_continue
 	}
@@ -387,8 +388,9 @@ while {$this_cnt <= $task_cnt} {
 #############################################################################
 #
 # Run a job step with plane distribution to exercise option
+# Automatic binding in slurm version 2.0 will bind one task per core
 #
-set expected_mask [ expr ((1 << $task_cnt) - 1) * $task_cnt ]
+set expected_mask [ expr ((1 << $task_cnt) - 1) ]
 set task_mask 0
 send "$srun -n $task_cnt -m plane=4 $file_prog\n"
 expect {
diff --git a/testsuite/expect/test1.91.prog.c b/testsuite/expect/test1.91.prog.c
index ad98f3ec8..c5d8705b5 100644
--- a/testsuite/expect/test1.91.prog.c
+++ b/testsuite/expect/test1.91.prog.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/testsuite/expect/test1.92 b/testsuite/expect/test1.92
index c23d95e5b..b02c664c2 100755
--- a/testsuite/expect/test1.92
+++ b/testsuite/expect/test1.92
@@ -12,10 +12,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -36,6 +37,7 @@ source ./globals
 set test_id     "1.92"
 set exit_code   0
 set file_bash   "test$test_id.bash"
+set job_id      0
 
 print_header $test_id
 
@@ -52,8 +54,13 @@ exit 0
 #
 # Create an allocation
 #
+set timeout $max_job_delay
 set salloc_pid [spawn $salloc -N2 -n4 --verbose -t2 $bin_bash]
 expect {
+	-re "salloc: Granted job allocation ($number)" {
+		set job_id $expect_out(1,string)
+		exp_continue
+	}
 	-re "More processors requested than permitted" {
 		send_user "\nWARNING: can't test srun task distribution\n"
 		exit 0
@@ -71,6 +78,10 @@ expect {
 		exit 1
 	}
 }
+if {$job_id == 0} {
+	send_user "\nFAILURE: salloc failure\n"
+	exit 1
+}
 
 #############################################################################
 #
diff --git a/testsuite/expect/test1.93 b/testsuite/expect/test1.93
index 1cd34b619..7da5ae592 100755
--- a/testsuite/expect/test1.93
+++ b/testsuite/expect/test1.93
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.1 b/testsuite/expect/test10.1
index aacd65a05..dced62c79 100755
--- a/testsuite/expect/test10.1
+++ b/testsuite/expect/test10.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.10 b/testsuite/expect/test10.10
index 76fb36527..e90f37135 100755
--- a/testsuite/expect/test10.10
+++ b/testsuite/expect/test10.10
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.11 b/testsuite/expect/test10.11
index 4bab9f667..e0116c80e 100755
--- a/testsuite/expect/test10.11
+++ b/testsuite/expect/test10.11
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.12 b/testsuite/expect/test10.12
index 5063f5aec..5748d980c 100755
--- a/testsuite/expect/test10.12
+++ b/testsuite/expect/test10.12
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.13 b/testsuite/expect/test10.13
index db8fe4a0c..074d5e740 100755
--- a/testsuite/expect/test10.13
+++ b/testsuite/expect/test10.13
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.2 b/testsuite/expect/test10.2
index edeb5035e..aaae364b3 100755
--- a/testsuite/expect/test10.2
+++ b/testsuite/expect/test10.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.3 b/testsuite/expect/test10.3
index 87a2c5a19..d9ad533b6 100755
--- a/testsuite/expect/test10.3
+++ b/testsuite/expect/test10.3
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.4 b/testsuite/expect/test10.4
index dd6cb8ce8..1b009245d 100755
--- a/testsuite/expect/test10.4
+++ b/testsuite/expect/test10.4
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.5 b/testsuite/expect/test10.5
index cf57af940..45d04acf1 100755
--- a/testsuite/expect/test10.5
+++ b/testsuite/expect/test10.5
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.6 b/testsuite/expect/test10.6
index 6329e9709..5620669c5 100755
--- a/testsuite/expect/test10.6
+++ b/testsuite/expect/test10.6
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.7 b/testsuite/expect/test10.7
index 43445ae03..c9175fbff 100755
--- a/testsuite/expect/test10.7
+++ b/testsuite/expect/test10.7
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.8 b/testsuite/expect/test10.8
index 1a5bacb39..24d8c2dc3 100755
--- a/testsuite/expect/test10.8
+++ b/testsuite/expect/test10.8
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test10.9 b/testsuite/expect/test10.9
index 095cdd53e..d40029b2d 100755
--- a/testsuite/expect/test10.9
+++ b/testsuite/expect/test10.9
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test11.1 b/testsuite/expect/test11.1
index a67bf6692..10e6bf9e4 100755
--- a/testsuite/expect/test11.1
+++ b/testsuite/expect/test11.1
@@ -13,10 +13,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test11.2 b/testsuite/expect/test11.2
index 1fcb82291..058f7b45f 100755
--- a/testsuite/expect/test11.2
+++ b/testsuite/expect/test11.2
@@ -13,10 +13,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test11.3 b/testsuite/expect/test11.3
index af784f1ed..1d81520c7 100755
--- a/testsuite/expect/test11.3
+++ b/testsuite/expect/test11.3
@@ -13,10 +13,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test11.4 b/testsuite/expect/test11.4
index 10e119cff..60fa0658b 100755
--- a/testsuite/expect/test11.4
+++ b/testsuite/expect/test11.4
@@ -12,10 +12,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test11.5 b/testsuite/expect/test11.5
index ae5c79c62..071c064a9 100755
--- a/testsuite/expect/test11.5
+++ b/testsuite/expect/test11.5
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test11.6 b/testsuite/expect/test11.6
index afa4414df..0e1bc988f 100755
--- a/testsuite/expect/test11.6
+++ b/testsuite/expect/test11.6
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -58,7 +59,7 @@ if { [string length $partition] == 0 } {
 global env
 set env(CHECKPOINT) "yes"
 make_bash_script $file_in "
-  echo BEGIN=\$SLURM_JOBID
+  echo BEGIN=\$SLURM_JOB_ID
   $bin_sleep 30
   echo FINI
 "
@@ -85,7 +86,7 @@ expect {
 	}
 }
 if {$job_id == 0} {
-	send_user "\nFAILURE: SLURM_JOBID missing\n"
+	send_user "\nFAILURE: SLURM_JOB_ID missing\n"
 	exit 0
 }
 
diff --git a/testsuite/expect/test11.7 b/testsuite/expect/test11.7
index a600aefdb..dea129556 100755
--- a/testsuite/expect/test11.7
+++ b/testsuite/expect/test11.7
@@ -12,10 +12,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test12.1 b/testsuite/expect/test12.1
index 4e704b3d2..33e00ce9c 100755
--- a/testsuite/expect/test12.1
+++ b/testsuite/expect/test12.1
@@ -7,13 +7,16 @@
 #          "FAILURE: ..." otherwise with an explanation of the failure, OR
 #          anything else indicates a failure mode that must be investigated.
 ############################################################################
-# Copyright (C) 2005-2006 The Regents of the University of California.
+# Copyright (C) 2005-2008 The Regents of the University of California.
+# Copyright (C) 2008-2009 TheLawrence Livermore National Security, LLC .
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# Written by Joseph Donaghy <donaghy1@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -48,11 +51,11 @@ expect {
 		set not_support 1
 		exp_continue
 	}
-	-re "Notes:" {
+	-re "sacct...OPTION" {
 		incr matches
 		exp_continue
 	}
-	-re "Options:" {
+	-re "Valid..OPTION..values are:" {
 		incr matches
 		exp_continue
 	}
diff --git a/testsuite/expect/test12.2 b/testsuite/expect/test12.2
index 6c5efad94..f055586e2 100755
--- a/testsuite/expect/test12.2
+++ b/testsuite/expect/test12.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2005 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -61,9 +62,9 @@ proc _get_mem {prog} {
 	set ave_used -1
 	set exit_code 0
 
-	spawn $prog --noheader --job=$job_id.0 --fields vsize
+	spawn $prog --noheader -p --job=$job_id.0 --fields maxvmsize,maxvmsizetask,avevmsize
 	expect {
-		-re "($float)(\[KMG\]*)/.*:($number) - ($float)(\[KMG\]*)" {
+		-re "($float)(\[KMG\]*).($number).($float)(\[KMG\]*)" {
 			set mem_used  $expect_out(1,string)
 			set scale1    $expect_out(2,string)
 			set mem_task  $expect_out(3,string)
@@ -230,7 +231,7 @@ if {[wait_for_job $job_id "DONE"] != 0} {
 # Report basic sacct info
 #
  
-spawn $sacct --noheader --job=$job_id.0 --fields jobid,jobname,status,exitcode
+spawn $sacct --noheader -P --job=$job_id.0 --fields jobid,jobname,state,exitcode
 expect {
 	-re "$job_id\.0" {
 		incr matches
@@ -267,7 +268,7 @@ if {$matches < 4} {
 #   expected integer but got "08" (looks like invalid octal number)
 #
 set elapsed_time 0
-spawn $sacct --noheader  --job=$job_id.0 --fields elapsed
+spawn $sacct --noheader -P --job=$job_id.0 --fields elapsed
 expect {
 	-re "($number):($number):(\[0-9\])(\[0-9\])" {
 		set hours $expect_out(1,string)
diff --git a/testsuite/expect/test12.2.prog.c b/testsuite/expect/test12.2.prog.c
index a87085124..108266944 100644
--- a/testsuite/expect/test12.2.prog.c
+++ b/testsuite/expect/test12.2.prog.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test12.4 b/testsuite/expect/test12.4
new file mode 100755
index 000000000..9f1b008bb
--- /dev/null
+++ b/testsuite/expect/test12.4
@@ -0,0 +1,689 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM sacct functionality
+#          sacct options b, g, j, l, n, p, u, v.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2008 Lawrence Livermore National Security.
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Joseph Donaghy <donaghy1@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id     "12.4"
+set exit_code   0
+set file_in     "test.$test_id.input"
+set test_acct   "test_acct"
+set timeout 60
+print_header $test_id
+
+#
+# Check accounting config and bail if not found.
+#
+if { [test_account_storage] == 0 } {
+	send_user "\nWARNING: This test can't be run without a usable AccountStorageType\n"
+	exit 0
+}
+
+if { [string compare [check_accounting_admin_level] "Administrator"] } {
+	send_user "\nWARNING: This test can't be run without being an Accounting administrator.\nUse sacctmgr mod user \$USER_NAME set admin=admin.\n"
+	exit 0
+}
+
+#
+# Identify the user and his current default account
+#
+set acct_name ""
+set user_name ""
+set user_gid ""
+spawn $bin_id -u -n
+expect {
+	 -re "($alpha_numeric_under)" {
+		set user_name $expect_out(1,string)
+		exp_continue
+	}
+	eof {
+		wait
+	}
+}
+
+spawn $bin_id -u
+expect {
+	 -re "($alpha_numeric_under)" {
+		set user_gid $expect_out(1,string)
+		exp_continue
+	}
+	eof {
+		wait
+	}
+}
+
+set s_pid [spawn $sacctmgr show user $user_name]
+expect {
+	-re "$user_name *($alpha_numeric_under)" {
+		set acct_name $expect_out(1,string)
+		exp_continue
+	}
+	timeout {
+		send_user "FAILURE: sacctmgr add not responding\n"
+		slow_kill $s_pid
+		exit 1
+	}
+	eof {
+		wait
+	}
+}
+
+#
+# Use sacctmgr to add an account
+#
+set aamatches 0
+set sadd_pid [spawn $sacctmgr -i add account $test_acct]
+expect {
+	-re "Adding Account" {
+		incr aamatches
+		exp_continue
+	}
+	-re "Nothing new added" {
+		send_user "\nWARNING: vestigial account $test_acct found\n"
+		incr aamatches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr add not responding\n"
+		slow_kill $sadd_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$aamatches != 1} {
+	send_user "\nFAILURE:  sacctmgr had a problem adding account.\n"
+	exit 1
+}
+
+#
+# Add self to this new account
+#
+set sadd_pid [spawn $sacctmgr -i create user name=$user_name account=$test_acct]
+expect {
+	 timeout {
+		send_user "\nFAILURE: sacctmgr add not responding\n"
+		slow_kill $sadd_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+
+make_bash_script $file_in "$bin_id"
+
+#
+# Spawn a job via srun using this account
+#
+set job_id 0
+spawn $srun -N1 -v --account=$test_acct $bin_id
+expect {
+	-re "launching ($number)" {
+		set job_id $expect_out(1,string)
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: srun not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$job_id == 0} {
+	send_user "\nFAILURE: did not get srun job_id3\n"
+	set exit_code 1
+} else {
+	set matches 0
+	spawn $scontrol show job $job_id
+	expect {
+		 -re "Account=$test_acct" {
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	if {$matches != 1} {
+		send_user "\nFAILURE: srun failed to use specified account\n"
+		set exit_code 1
+	}
+}
+################################################################
+#
+# Proc: sacct_job
+#
+# Purpose:  Pass sacct options and test
+#
+# Returns: Number of matches.
+#
+# Input: Switch options not requiring arguments
+#
+################################################################
+
+proc sacct_job { soption job_id} {
+	global sacct
+	set debug       0
+	set exit_code   0
+	set matches     0
+	set not_support 0
+	send_user "sacct -$soption -p -j $job_id\n"
+
+	if { $soption == "-brief" || $soption == "b" } {
+
+	spawn $sacct -$soption -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "JobID.State.ExitCode" {
+			if {$debug} {send_user "\nmatch1\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id" {
+			if {$debug} {send_user "\nmatch2\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sacct not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 2} {
+		send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+	if { $soption == "-long" || $soption == "l" } {
+
+	spawn $sacct -$soption -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "JobID.JobName.Partition.MaxVMSize" {
+			if {$debug} {send_user "\nmatch3\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MaxVMSizeNode.MaxVMSizeTask.AveVMSize.MaxRSS" {
+			if {$debug} {send_user "\nmatch4\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MaxRSSNode.MaxRSSTask.AveRSS.MaxPages" {
+			if {$debug} {send_user "\nmatch5\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MaxPagesNode.MaxPagesTask.AvePages.MinCPU" {
+			if {$debug} {send_user "\nmatch6\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MinCPUNode.MinCPUTask.AveCPU.NTasks" {
+			if {$debug} {send_user "\nmatch7\n"}
+			incr matches
+			exp_continue
+		}
+		-re "AllocCPUS.Elapsed.State.ExitCode" {
+			if {$debug} {send_user "\nmatch8\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id" {
+			if {$debug} {send_user "\nmatch9\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sacct not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+
+	if {$matches != 7} {
+		send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+	if { $soption == "-noheader" || $soption == "n" } {
+
+	spawn $sacct -$soption -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "AllocCPUS|Account|AssocID|AveCPU|AvePages|AveRSS|AveVSize|BlockID	\
+			|Cluster|CPUTime|CPUTimeRAW|Elapsed	\
+			|Eligible|End|ExitCode|GID	\
+			|Group|JobID|JobName|NodeList	\
+			|MaxPages|MaxPagesNode|MaxPagesTask|MaxRSS	|
+			|MaxRSSNode|MaxRSSTask|MaxVSize|MaxVSizeNode	|
+			|MaxVSizeTask|MinCPU|MinCPUNode|MinCPUTask	|
+			|NCPUS|NNodes|NTasks|Priority	|
+			|Partition|QOS|QOSRAW|ReqCPUS	|
+			|Reserved|ResvCPU|ResvCPURAW|Start	|
+			|State|Submit|Suspended|SystemCPU	|
+			|Timelimit|TotalCPU|UID|User	|
+			|UserCPU|WCKey|WCKeyID" {
+			if {$debug} {send_user "\nmatch10\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id" {
+			if {$debug} {send_user "\nmatch11\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sacct not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 1} {
+		send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+	if { $soption == "-parsable" || $soption == "p" } {
+
+	spawn $sacct -$soption -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "JobID\\|JobName\\|Partition\\|Account\\|AllocCPUS\\|State\\|ExitCode\\|" {
+			if {$debug} {send_user "\nmatch12\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id\\|" {
+			if {$debug} {send_user "\nmatch13\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sacct not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 2} {
+		send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+	if { $soption == "-parsable2" || $soption == "P" } {
+
+	spawn $sacct -$soption -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re
+"JobID\\|JobName\\|Partition\\|Account\\|AllocCPUS\\|State\\|ExitCode *" {
+			if {$debug} {send_user "\nmatch14\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id\\|" {
+			if {$debug} {send_user "\nmatch15\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sacct not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 2} {
+		send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+	if { $soption == "-verbose" || $soption == "v" } {
+
+	spawn $sacct -$soption -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "sacct: Accounting storage SLURMDBD plugin loaded " {
+			if {$debug} {send_user "\nmatch16\n"}
+			incr matches
+			exp_continue
+		}
+		-re "JobID.JobName.Partition" {
+			if {$debug} {send_user "\nmatch17\n"}
+			incr matches
+			exp_continue
+		}
+		-re "Account.AllocCPUS.State.ExitCode" {
+			if {$debug} {send_user "\nmatch18\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id" {
+			if {$debug} {send_user "\nmatch19\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sacct not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 4} {
+		send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+
+}
+
+################################################################
+#
+# Proc: sacct_vargs
+#
+# Purpose:  Pass sacct options with arguments and test
+#
+# Returns: Number of matches.
+#
+# Input: Switch options with argument
+#
+################################################################
+
+proc sacct_vargs { soption vargs job_id} {
+	global sacct
+	set debug       0
+	set exit_code   0
+	set matches     0
+	set not_support 0
+	send_user "sacct -$soption $vargs -p -j $job_id\n"
+
+	if { $soption == "g" || $soption == "-gid" || $soption == "-group" || $soption == "u" || $soption == "-uid" || $soption == "-user"} {
+
+	spawn $sacct -$soption $vargs -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "JobID.JobName.Partition" {
+			if {$debug} {send_user "\nmatch20\n"}
+			incr matches
+			exp_continue
+		}
+		-re "Account.AllocCPUS.State.ExitCode" {
+			if {$debug} {send_user "\nmatch21\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id" {
+			incr matches
+			if {$debug} {send_user "\nmatch22\n"}
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sacct not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 3} {
+		send_user "\nFAILURE: sacct -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+}
+################################################################
+
+set matches [sacct_job b $job_id]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct -b failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -brief $job_id]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct --brief failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs g $user_gid $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct -g failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs -gid $user_gid $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct --gid failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs -group $user_gid $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct --group failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job l $job_id]
+if {$matches != 7} {
+	send_user "\nFAILURE: sacct --allusers failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -long $job_id]
+if {$matches != 7} {
+	send_user "\nFAILURE: sacct -l failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job n $job_id]
+if {$matches != 1} {
+	send_user "\nFAILURE: sacct -n failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -noheader $job_id]
+if {$matches != 1} {
+	send_user "\nFAILURE: sacct -n failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job p $job_id]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct -p failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -parsable $job_id]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct --parsable failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job P $job_id]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct -P failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -parsable2 $job_id]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct --parsable2 failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs u $user_name $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct -g failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs -uid $user_name $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct --gid failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_vargs -user $user_name $job_id]
+if {$matches != 3} {
+	send_user "\nFAILURE: sacct --group failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job v $job_id]
+if {$matches != 4} {
+	send_user "\nFAILURE: sacct -v failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -verbose $job_id]
+if {$matches != 4} {
+	send_user "\nFAILURE: sacct --verbosee failed ($matches)\n"
+	set exit_code 1
+}
+
+#
+# Use sacctmgr to delete the test account
+#
+set damatches 0
+set sadel_pid [spawn $sacctmgr -i delete account $test_acct]
+expect {
+	-re "Deleting account" {
+		incr damatches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr delete not responding\n"
+		slow_kill $sadel_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$damatches != 1} {
+	send_user "\nFAILURE: sacctmgr had a problem deleting account\n"
+	set exit_code 1
+}
+
+if {$exit_code == 0} {
+	exec $bin_rm -f $file_in
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test12.5 b/testsuite/expect/test12.5
new file mode 100755
index 000000000..215ba09c2
--- /dev/null
+++ b/testsuite/expect/test12.5
@@ -0,0 +1,110 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM functionality
+#          Test sacct --helpformat option.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2008-2009 TheLawrence Livermore National Security, LLC .
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Joseph Donaghy <donaghy1@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id     "12.5"
+set exit_code   0
+set matches     0
+set not_support 0
+
+print_header $test_id
+
+################################################################
+#
+# Proc: sacct
+#
+# Purpose:  Pass sacct options and test
+#
+# Returns: Number of matches.
+#
+# Input: Switch options -e and --helpformat
+#
+################################################################
+
+proc sacct_job { soption } {
+	global sacct
+	set debug       0
+	set exit_code   0
+	set matches     0
+	set not_support 0
+	send_user "sacct $soption\n"
+
+	spawn $sacct $soption
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "AllocCPUS     Account       AssocID       AveCPU" {
+			if {$debug} {send_user "\nmatch1\n"}
+			incr matches
+			exp_continue
+		}
+		-re "AvePages      AveRSS        AveVMSize     BlockID" {
+			if {$debug} {send_user "\nmatch2\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sacct not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	return $matches
+}
+
+################################################################
+set matches [sacct_job --helpformat]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct --helpformat failed ($matches of 2)\n"
+	set exit_code 1
+}
+
+set matches [sacct_job -e]
+if {$matches != 2} {
+	send_user "\nFAILURE: sacct -e failed ($matches of 2)\n"
+	set exit_code 1
+}
+
+if {$exit_code == 0} {
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test13.1 b/testsuite/expect/test13.1
index dfe37a3cb..4e0f3b2ee 100755
--- a/testsuite/expect/test13.1
+++ b/testsuite/expect/test13.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2005-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test14.1 b/testsuite/expect/test14.1
index fed1099e9..6792f64bf 100755
--- a/testsuite/expect/test14.1
+++ b/testsuite/expect/test14.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test14.2 b/testsuite/expect/test14.2
index 564f091e3..c0c0a75c9 100755
--- a/testsuite/expect/test14.2
+++ b/testsuite/expect/test14.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test14.3 b/testsuite/expect/test14.3
index 1037ca76d..e6e18b82d 100755
--- a/testsuite/expect/test14.3
+++ b/testsuite/expect/test14.3
@@ -11,10 +11,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test14.4 b/testsuite/expect/test14.4
index 8c7b3636c..d97be47b1 100755
--- a/testsuite/expect/test14.4
+++ b/testsuite/expect/test14.4
@@ -13,10 +13,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -52,6 +53,10 @@ if {[test_multiple_slurmd] != 0} {
 	send_user "\nWARNING: This test is incompatable with multiple slurmd systems\n"
 	exit 0
 }
+if {[slurmd_user_root] == 0} {
+	send_user "\nWARNING: This test is incompatable with SlurmdUser != root\n"
+	exit 0
+}
 
 #
 # Delete left-over stdout/err files
diff --git a/testsuite/expect/test14.5 b/testsuite/expect/test14.5
index 4cdc56176..fca739154 100755
--- a/testsuite/expect/test14.5
+++ b/testsuite/expect/test14.5
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -45,6 +46,10 @@ if {[test_front_end] != 0} {
 	send_user "\nWARNING: This test is incompatable with front-end systems\n"
 	exit 0
 }
+if {[slurmd_user_root] == 0} {
+	send_user "\nWARNING: This test is incompatable with SlurmdUser != root\n"
+	exit 0
+}
 
 # Delete left-over stdout/err files
 file delete $file_out $file_err
@@ -105,27 +110,30 @@ if {[wait_for_job $job_id "DONE"] != 0} {
 set record    0
 set preserved 1
 set reset     1
+set time1     0
+set time2     0
+set time3     0
 if {[wait_for_file $file_out] == 0} {
 	spawn $bin_cat $file_out
 	expect {
-		-re "($number):($number)" {
+		-re "($number) *0?($number):0?($number)" {
 			incr record
+			set date      $expect_out(1,string)
+			set hour      $expect_out(2,string)
+			set minute    $expect_out(3,string)
+			set this_time [expr $date * 10000 + $hour * 100 + $minute]
+
 			if {$record == 1} {
-				set hour   $expect_out(1,string)
-				set minute $expect_out(2,string)
+				set base_time $this_time
 			}
 			if {$record == 2} {
-				if {$hour != $expect_out(1,string)} {
-					if {$minute != $expect_out(2,string)} {
-						set preserved 0
-					}
+				if {$this_time != $base_time} {
+					set preserved 0
 				}
 			}
 			if {$record == 3} {
-				if {$hour == $expect_out(1,string)} {
-					if {$minute == $expect_out(2,string)} {
-						set reset 0
-					}
+				if {$this_time == $base_time} {
+					set reset 0
 				}
 			}
 			exp_continue;
@@ -137,7 +145,7 @@ if {[wait_for_file $file_out] == 0} {
 }
 
 if {$record != 3} {
-	send_user "\nFAILURE: Wrong record count\n"
+	send_user "\nFAILURE: Wrong record count $record\n"
 	set exit_code 1
 }
 if {$preserved == 0} {
diff --git a/testsuite/expect/test14.6 b/testsuite/expect/test14.6
index 3f5e82c96..05ee6e8dc 100755
--- a/testsuite/expect/test14.6
+++ b/testsuite/expect/test14.6
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test14.7 b/testsuite/expect/test14.7
index a66eb24da..ab8a325f4 100755
--- a/testsuite/expect/test14.7
+++ b/testsuite/expect/test14.7
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -115,6 +116,13 @@ if {[wait_for_file $file_err] == 0} {
 			incr matches
 			exp_continue
 		}
+		-re "REQUEST_FILE_BCAST.* Operation not permitted" {
+#			variation on Permission denied if initgroups() fails
+#			due to not running slurmd as root
+			send_user "These errors are expected, no worries\n"
+			incr matches
+			exp_continue
+		}
 		-re "REQUEST_FILE_BCAST.* File exists" {
 			send_user "Vestigial file should be removed\n"
 			incr matches
diff --git a/testsuite/expect/test14.8 b/testsuite/expect/test14.8
index 967c95717..a895df083 100755
--- a/testsuite/expect/test14.8
+++ b/testsuite/expect/test14.8
@@ -14,10 +14,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -52,6 +53,10 @@ if {[test_multiple_slurmd] != 0} {
 	send_user "\nWARNING: This test is incompatable with multiple slurmd systems\n"
 	exit 0
 }
+if {[slurmd_user_root] == 0} {
+	send_user "\nWARNING: This test is incompatable with SlurmdUser != root\n"
+	exit 0
+}
 
 # Delete left-over stdout file
 file delete $file_out
diff --git a/testsuite/expect/test15.1 b/testsuite/expect/test15.1
index e94ca8302..7cf9bcb07 100755
--- a/testsuite/expect/test15.1
+++ b/testsuite/expect/test15.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.10 b/testsuite/expect/test15.10
index 511b2020e..c3ea7d82d 100755
--- a/testsuite/expect/test15.10
+++ b/testsuite/expect/test15.10
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.11 b/testsuite/expect/test15.11
index 52abcb841..64fe0351f 100755
--- a/testsuite/expect/test15.11
+++ b/testsuite/expect/test15.11
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -44,6 +45,11 @@ if {[test_wiki_sched] == 1} {
 	send_user "         or sched/wiki2 (Moab) schedulers\n"
 	exit $exit_code
 }
+set prio_type [priority_type]
+if {[string compare $prio_type "multifactor"] == 0} {
+	send_user "\nWARNING: not compatable with priority/multifactor\n"
+	exit $exit_code
+}
 
 #
 # Test setting job's name and get priority
diff --git a/testsuite/expect/test15.12 b/testsuite/expect/test15.12
index 2a72cf7ab..493376a3d 100755
--- a/testsuite/expect/test15.12
+++ b/testsuite/expect/test15.12
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.13 b/testsuite/expect/test15.13
index cb65cd3c5..50195ae73 100755
--- a/testsuite/expect/test15.13
+++ b/testsuite/expect/test15.13
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -46,7 +47,7 @@ array set good_vars {
     SLURM_JOB_NODELIST 0
     SLURM_JOB_CPUS_PER_NODE 1
 
-    SLURM_JOBID 1
+    SLURM_JOB_ID 1
     SLURM_NNODES 0
     SLURM_NODELIST 0
     SLURM_TASKS_PER_NODE 1
diff --git a/testsuite/expect/test15.14 b/testsuite/expect/test15.14
index 07e87f0c8..fb1e04bf5 100755
--- a/testsuite/expect/test15.14
+++ b/testsuite/expect/test15.14
@@ -10,10 +10,11 @@
 # Copyright (C) 2004-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -79,7 +80,8 @@ expect {
 		set job_id2 $expect_out(1,string)
 		exp_continue
 	}
-	-re "JobState=COMPLETED" {
+#	COMPLETED or COMPLETING
+	-re "JobState=COMPLET" {
 		set match_state 1
 		exp_continue
 	}
diff --git a/testsuite/expect/test15.15 b/testsuite/expect/test15.15
index bb310ec97..a2fa207ea 100755
--- a/testsuite/expect/test15.15
+++ b/testsuite/expect/test15.15
@@ -12,10 +12,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.16 b/testsuite/expect/test15.16
index 8c03be953..8c685f653 100755
--- a/testsuite/expect/test15.16
+++ b/testsuite/expect/test15.16
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.17 b/testsuite/expect/test15.17
index a6ae14ac2..a67c27108 100755
--- a/testsuite/expect/test15.17
+++ b/testsuite/expect/test15.17
@@ -11,10 +11,11 @@
 # Copyright (C) 2005-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -32,7 +33,6 @@
 ############################################################################
 source ./globals
 
-slow_kill 45984
 set test_id      "15.17"
 set file_in      "test$test_id.input"
 set exit_code    0
diff --git a/testsuite/expect/test15.18 b/testsuite/expect/test15.18
index 7c40c9fde..068d1d954 100755
--- a/testsuite/expect/test15.18
+++ b/testsuite/expect/test15.18
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.19 b/testsuite/expect/test15.19
index 8b673cb61..c1ebebc49 100755
--- a/testsuite/expect/test15.19
+++ b/testsuite/expect/test15.19
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.2 b/testsuite/expect/test15.2
index fd397cbf8..db94ad9f1 100755
--- a/testsuite/expect/test15.2
+++ b/testsuite/expect/test15.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.20 b/testsuite/expect/test15.20
index aa28b8124..5f1cd3d76 100755
--- a/testsuite/expect/test15.20
+++ b/testsuite/expect/test15.20
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -70,7 +71,7 @@ set salloc_pid [spawn $salloc -N$node_cnt -t1 $srun -l $bin_printenv SLURMD_NODE
 expect {
 	-re "Granted job allocation ($number)" {
 		set job_id $expect_out(1,string)
-		send "$bin_echo MY_ID=\$SLURM_JOBID \n"
+		send "$bin_echo MY_ID=\$SLURM_JOB_ID \n"
 		exp_continue
 	}
 	-re "More processors requested than permitted" {
diff --git a/testsuite/expect/test15.21 b/testsuite/expect/test15.21
index 05cd8bce8..554c0e7ee 100755
--- a/testsuite/expect/test15.21
+++ b/testsuite/expect/test15.21
@@ -12,13 +12,15 @@
 #          the value of <number> indicates the nodes relative location. 
 #          Change tha node name parsing logic as needed for other formats.
 ############################################################################
-# Copyright (C) 2002 The Regents of the University of California.
+# Copyright (C) 2002-2007 The Regents of the University of California.
+# Copyright (C) 2008-2009 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -45,6 +47,10 @@ if {[test_front_end] != 0} {
 	send_user "\nWARNING: This test is incompatable with front-end systems\n"
 	exit 0
 }
+if {[test_topology] != 0} {
+	send_user "\nWARNING: This test is incompatable topology configured systems\n"
+	exit 0
+}
 
 set available [available_nodes [default_partition]]
 if {$available < 3} {
diff --git a/testsuite/expect/test15.22 b/testsuite/expect/test15.22
index 47004d8f7..dc0889737 100755
--- a/testsuite/expect/test15.22
+++ b/testsuite/expect/test15.22
@@ -12,10 +12,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.23 b/testsuite/expect/test15.23
index ac452e02c..4d59e365b 100755
--- a/testsuite/expect/test15.23
+++ b/testsuite/expect/test15.23
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.24 b/testsuite/expect/test15.24
index 21ba71c8e..3cb43167e 100755
--- a/testsuite/expect/test15.24
+++ b/testsuite/expect/test15.24
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.25 b/testsuite/expect/test15.25
index 7b18ba289..3dc9311c6 100755
--- a/testsuite/expect/test15.25
+++ b/testsuite/expect/test15.25
@@ -10,10 +10,11 @@
 # Copyright (C) 2004-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.3 b/testsuite/expect/test15.3
index 9598d575a..d1b57f83f 100755
--- a/testsuite/expect/test15.3
+++ b/testsuite/expect/test15.3
@@ -11,10 +11,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.4 b/testsuite/expect/test15.4
index 515a1f132..ab9a518d8 100755
--- a/testsuite/expect/test15.4
+++ b/testsuite/expect/test15.4
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.5 b/testsuite/expect/test15.5
index 84a5f0d86..849a03633 100755
--- a/testsuite/expect/test15.5
+++ b/testsuite/expect/test15.5
@@ -8,13 +8,15 @@
 #          "FAILURE: ..." otherwise with an explanation of the failure, OR
 #          anything else indicates a failure mode that must be investigated.
 ############################################################################
-# Copyright (C) 2002-2006 The Regents of the University of California.
+# Copyright (C) 2002-2007 The Regents of the University of California.
+# Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -42,14 +44,28 @@ set sleep_time  180
 
 print_header $test_id
 
+set inactive_limit  $sleep_time
 set kill_wait       $sleep_time
+set over_time_limit 0
 log_user 0
 spawn $scontrol show config
 expect {
+	-re "InactiveLimit *= ($number)" {
+		set inactive_limit $expect_out(1,string)
+		exp_continue
+	}
 	-re "KillWait *= ($number)" {
 		set kill_wait $expect_out(1,string)
 		exp_continue
 	}
+	-re "OverTimeLimit *= UNLIMITED" {
+		set over_time_limit 9999
+		exp_continue
+	}
+	-re "OverTimeLimit *= ($number)" {
+		set over_time_limit $expect_out(1,string)
+		exp_continue
+	}
 	timeout {
 		send_user "\nFAILURE: scontrol not responding\n"
 		set exit_code 1
@@ -59,10 +75,21 @@ expect {
 	}
 }
 log_user 1
+if {$inactive_limit == 0} {
+	set inactive_limit $sleep_time
+}
+if {$inactive_limit < 120} {
+	send_user "\nWARNING: InactiveLimit ($inactive_limit) is too low for this test\n"
+	exit 0
+}
 if {$kill_wait > 60} {
 	send_user "\nWARNING: KillWait ($kill_wait) is too high for this test\n"
 	exit 0
 }
+if {$over_time_limit > 0} {
+	send_user "\nWARNING: OverTimeLimit too high for this test ($over_time_limit > 0)\n"
+	exit 0
+}
 
 #
 # Build input script file
diff --git a/testsuite/expect/test15.6 b/testsuite/expect/test15.6
index 9c002d753..93721b05c 100755
--- a/testsuite/expect/test15.6
+++ b/testsuite/expect/test15.6
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.7 b/testsuite/expect/test15.7
index f928c5ba5..bdc33ff64 100755
--- a/testsuite/expect/test15.7
+++ b/testsuite/expect/test15.7
@@ -13,10 +13,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.8 b/testsuite/expect/test15.8
index 077d3694e..5ecca86b0 100755
--- a/testsuite/expect/test15.8
+++ b/testsuite/expect/test15.8
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test15.9 b/testsuite/expect/test15.9
index f7cc37cff..71aa3281f 100755
--- a/testsuite/expect/test15.9
+++ b/testsuite/expect/test15.9
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -40,7 +41,7 @@ print_header $test_id
 
 #
 # Submit a slurm allocate job
-# Interactively print $SLURM_JOBID
+# Interactively print $SLURM_JOB_ID
 #
 set timeout $max_job_delay
 set match 0
@@ -49,14 +50,14 @@ set salloc_pid [spawn $salloc -t1 $bin_bash]
 expect {
 	-re "Granted job allocation ($number)" {
 		set job_id $expect_out(1,string)
-		send "$bin_echo MY_ID=\$SLURM_JOBID \n"
+		send "$bin_echo MY_ID=\$SLURM_JOB_ID \n"
 		array unset expect_out
 		exp_continue
 	}
 	-re "MY_ID=($number)?" {
 		foreach name [array names expect_out] {
 			if {$name == "1,string"} {
-				# SLURM_JOBID is set
+				# SLURM_JOB_ID is set
 				set slurm_jobid $expect_out(1,string)
 				break
 			}
@@ -90,7 +91,7 @@ if { $job_id == 0 } {
 	set exit_code 1
 } else {
 	if { $job_id != $slurm_jobid } {
-		send_user "\nFAILURE: salloc failed to set valid SLURM_JOBID\n"
+		send_user "\nFAILURE: salloc failed to set valid SLURM_JOB_ID\n"
 		set exit_code 1
 	}
 }
diff --git a/testsuite/expect/test16.1 b/testsuite/expect/test16.1
index ad2a8d1eb..62aa8c403 100755
--- a/testsuite/expect/test16.1
+++ b/testsuite/expect/test16.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test16.2 b/testsuite/expect/test16.2
index bcc989381..260d481d1 100755
--- a/testsuite/expect/test16.2
+++ b/testsuite/expect/test16.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test16.3 b/testsuite/expect/test16.3
index 91dc0efaa..7d17abc34 100755
--- a/testsuite/expect/test16.3
+++ b/testsuite/expect/test16.3
@@ -11,10 +11,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test16.4 b/testsuite/expect/test16.4
index 217c4ed48..b6b61e6a3 100755
--- a/testsuite/expect/test16.4
+++ b/testsuite/expect/test16.4
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test16.4.prog.c b/testsuite/expect/test16.4.prog.c
index 323926345..752a5c874 100644
--- a/testsuite/expect/test16.4.prog.c
+++ b/testsuite/expect/test16.4.prog.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test17.1 b/testsuite/expect/test17.1
index f9c4dde8d..871390c0e 100755
--- a/testsuite/expect/test17.1
+++ b/testsuite/expect/test17.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.10 b/testsuite/expect/test17.10
index d2b11f3a2..5b025bd9a 100755
--- a/testsuite/expect/test17.10
+++ b/testsuite/expect/test17.10
@@ -13,10 +13,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.11 b/testsuite/expect/test17.11
index 2978fbb93..1cc60d2c7 100755
--- a/testsuite/expect/test17.11
+++ b/testsuite/expect/test17.11
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.12 b/testsuite/expect/test17.12
index 9fa863ad9..86a79e696 100755
--- a/testsuite/expect/test17.12
+++ b/testsuite/expect/test17.12
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.13 b/testsuite/expect/test17.13
index 2b2f35bfd..a296430c3 100755
--- a/testsuite/expect/test17.13
+++ b/testsuite/expect/test17.13
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.14 b/testsuite/expect/test17.14
index c13b6ce7d..11660d641 100755
--- a/testsuite/expect/test17.14
+++ b/testsuite/expect/test17.14
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.15 b/testsuite/expect/test17.15
index 7bbf9bb32..371368bae 100755
--- a/testsuite/expect/test17.15
+++ b/testsuite/expect/test17.15
@@ -13,10 +13,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.15.prog.c b/testsuite/expect/test17.15.prog.c
index 520d92799..e680f3277 100644
--- a/testsuite/expect/test17.15.prog.c
+++ b/testsuite/expect/test17.15.prog.c
@@ -6,10 +6,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test17.16 b/testsuite/expect/test17.16
index 63d9498a8..f10d8aaef 100755
--- a/testsuite/expect/test17.16
+++ b/testsuite/expect/test17.16
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.17 b/testsuite/expect/test17.17
index fd9bba8cb..f78cfbef0 100755
--- a/testsuite/expect/test17.17
+++ b/testsuite/expect/test17.17
@@ -12,10 +12,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -110,7 +111,7 @@ if {$job_id1 == 0} {
 
 set partition "dummy"
 set waited 1
-set timeout [expr $timeout + 5]
+set timeout [expr $max_job_delay + 5]
 set srun_pid [spawn $srun -N1 --nodelist=$nodelist_name -t1 --share $scontrol -o show job $job_id1]
 expect {
 	-re "Partition=($alpha_numeric_under)" {
diff --git a/testsuite/expect/test17.18 b/testsuite/expect/test17.18
index 5273ba50b..e172341d7 100755
--- a/testsuite/expect/test17.18
+++ b/testsuite/expect/test17.18
@@ -11,10 +11,11 @@
 # Copyright (C) 2004-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.2 b/testsuite/expect/test17.2
index c10ca2aad..73bb39af1 100755
--- a/testsuite/expect/test17.2
+++ b/testsuite/expect/test17.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.20 b/testsuite/expect/test17.20
index f95f02a23..83e5cf2ae 100755
--- a/testsuite/expect/test17.20
+++ b/testsuite/expect/test17.20
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.21 b/testsuite/expect/test17.21
index b000c98c8..c9a1124ce 100755
--- a/testsuite/expect/test17.21
+++ b/testsuite/expect/test17.21
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.22 b/testsuite/expect/test17.22
index b97ef0ce0..4856d07e8 100755
--- a/testsuite/expect/test17.22
+++ b/testsuite/expect/test17.22
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.23 b/testsuite/expect/test17.23
index fe78c87dd..407b9a012 100755
--- a/testsuite/expect/test17.23
+++ b/testsuite/expect/test17.23
@@ -10,10 +10,11 @@
 # Copyright (C) 2005-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -171,17 +172,19 @@ expect {
 if {$job_prio1 == 0 || $job_prio2 == 0 || $job_prio3 == 0} {
 	send_user "\nFAILURE: failed to job priorities of each submitted job\n"
 	set exit_code 1
+} elseif {$job_prio1 < 1000 || $job_prio2 < 1000 || $job_prio3 < 1000} {
+	send_user "\nWARNING: PriorityWeight factors result in a job priority too low for this test\n"
 } else {
 	set diff2 [expr $job_prio1 - $job_prio2]
 	set diff3 [expr $job_prio1 - $job_prio3]
 #	Target for diff2 is 101
 	if {$diff2 < 91 || $diff2 > 111} {
-		send_user "\nFAILURE: job2 priority delta bad $diff2\n"
+		send_user "\nFAILURE: job2 priority delta bad ($diff2, target is 101)\n"
 		set exit_code 1
 	}
 #	Target for diff3 is 202
 	if {$diff3 < 192 || $diff3 > 212} {
-		send_user "\nFAILURE: job3 priority delta bad $diff3\n"
+		send_user "\nFAILURE: job3 priority delta bad ($diff3, target is 202)\n"
 		set exit_code 1
 	}
 }
diff --git a/testsuite/expect/test17.24 b/testsuite/expect/test17.24
index 7a1a57d3d..5607f7525 100755
--- a/testsuite/expect/test17.24
+++ b/testsuite/expect/test17.24
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.25 b/testsuite/expect/test17.25
index 4de716e8d..b2ef269fa 100755
--- a/testsuite/expect/test17.25
+++ b/testsuite/expect/test17.25
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.26 b/testsuite/expect/test17.26
index 99fb08cbb..0782a5803 100755
--- a/testsuite/expect/test17.26
+++ b/testsuite/expect/test17.26
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.27 b/testsuite/expect/test17.27
index 97b7e48bc..e60a3a70a 100755
--- a/testsuite/expect/test17.27
+++ b/testsuite/expect/test17.27
@@ -12,10 +12,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.28 b/testsuite/expect/test17.28
index 47fbd2435..292c0b676 100755
--- a/testsuite/expect/test17.28
+++ b/testsuite/expect/test17.28
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.29 b/testsuite/expect/test17.29
index ae7f97446..7843c5559 100755
--- a/testsuite/expect/test17.29
+++ b/testsuite/expect/test17.29
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.3 b/testsuite/expect/test17.3
index 9455d10ce..c256a6dd9 100755
--- a/testsuite/expect/test17.3
+++ b/testsuite/expect/test17.3
@@ -11,10 +11,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.31 b/testsuite/expect/test17.31
index 70c9cfe87..9d1557e5a 100755
--- a/testsuite/expect/test17.31
+++ b/testsuite/expect/test17.31
@@ -10,10 +10,11 @@
 # Copyright (C) 2005-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.32 b/testsuite/expect/test17.32
index 22e0c1726..eace6c898 100755
--- a/testsuite/expect/test17.32
+++ b/testsuite/expect/test17.32
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.33 b/testsuite/expect/test17.33
index c26cc08f9..e30d07af4 100755
--- a/testsuite/expect/test17.33
+++ b/testsuite/expect/test17.33
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.4 b/testsuite/expect/test17.4
index 1c65f51f4..116e2b1ec 100755
--- a/testsuite/expect/test17.4
+++ b/testsuite/expect/test17.4
@@ -11,10 +11,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.5 b/testsuite/expect/test17.5
index 63f72430f..47c9c6b8e 100755
--- a/testsuite/expect/test17.5
+++ b/testsuite/expect/test17.5
@@ -12,10 +12,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.6 b/testsuite/expect/test17.6
index 29b9f0b13..1e29be184 100755
--- a/testsuite/expect/test17.6
+++ b/testsuite/expect/test17.6
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.7 b/testsuite/expect/test17.7
index 1e68235fc..59d2ad878 100755
--- a/testsuite/expect/test17.7
+++ b/testsuite/expect/test17.7
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -47,6 +48,21 @@ print_header $test_id
 # Build stdin file
 #
 exec $bin_rm -f $file_in $file_out $file_err
+if {[file exists /tmp/$file_err]} {
+	send_user "\nWARNING: can not delete /tmp/$file_err to run test\n"
+	set random 0
+	spawn $bin_date +%N
+	expect {
+		-re "($number)" {
+			set random $expect_out(1,string)
+			exp_continue
+		}
+		eof {
+			wait
+		}
+	}
+	set file_err $file_err.$random
+}
 make_bash_script $file_in "
   $bin_pwd
   $bin_cat /no/such/file
@@ -102,7 +118,7 @@ if {[wait_for_file $file_out] == 0} {
 	}
 }
 if {$matches != 1} {
-	send_user "\nFAILURE: sbatch failed to change working directory\n"
+	send_user "\nFAILURE: sbatch failed to get expected stdout\n"
 	set exit_code 1
 }
 
diff --git a/testsuite/expect/test17.8 b/testsuite/expect/test17.8
index e181934e6..9a990ba36 100755
--- a/testsuite/expect/test17.8
+++ b/testsuite/expect/test17.8
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test17.9 b/testsuite/expect/test17.9
index f3aa6c12f..6b4e6b3df 100755
--- a/testsuite/expect/test17.9
+++ b/testsuite/expect/test17.9
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test19.1 b/testsuite/expect/test19.1
index de04f2465..d2d63c597 100755
--- a/testsuite/expect/test19.1
+++ b/testsuite/expect/test19.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test19.2 b/testsuite/expect/test19.2
index c897eecc3..e4d5f8894 100755
--- a/testsuite/expect/test19.2
+++ b/testsuite/expect/test19.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test19.3 b/testsuite/expect/test19.3
index bbfa85086..c6a3721e8 100755
--- a/testsuite/expect/test19.3
+++ b/testsuite/expect/test19.3
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test19.4 b/testsuite/expect/test19.4
index 47059583d..cc56e7434 100755
--- a/testsuite/expect/test19.4
+++ b/testsuite/expect/test19.4
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test19.5 b/testsuite/expect/test19.5
index d7f302ef8..22e73b2ce 100755
--- a/testsuite/expect/test19.5
+++ b/testsuite/expect/test19.5
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -206,10 +207,12 @@ if {[wait_for_file $file_out_fini] != 0} {
 	send_user "\nFAILURE: file $file_out_fini is missing\n"
 	set exit_code 1
 } else {
+#	Check that job run time was one minute. If SLURM is configured to 
+#	power down idle nodes, this could possibly take a bit more time.
 	set job_fini 0
 	spawn $bin_cat $file_out_fini
 	expect {
-		-re "CD *1:0" {
+		-re "CD *1:($number)" {
 			set job_fini 1
 			exp_continue
 		}
diff --git a/testsuite/expect/test19.6 b/testsuite/expect/test19.6
index 8b12a62c6..f7c81e878 100755
--- a/testsuite/expect/test19.6
+++ b/testsuite/expect/test19.6
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test19.7 b/testsuite/expect/test19.7
index a2e454c0c..2d8a1bb70 100755
--- a/testsuite/expect/test19.7
+++ b/testsuite/expect/test19.7
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test2.1 b/testsuite/expect/test2.1
index 044ac6e1b..635057a33 100755
--- a/testsuite/expect/test2.1
+++ b/testsuite/expect/test2.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test2.10 b/testsuite/expect/test2.10
index ac754a01b..aaf7c26f8 100755
--- a/testsuite/expect/test2.10
+++ b/testsuite/expect/test2.10
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test2.11 b/testsuite/expect/test2.11
index 3ae4cdfdc..284da6759 100755
--- a/testsuite/expect/test2.11
+++ b/testsuite/expect/test2.11
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -49,9 +50,9 @@ file delete $file_out
 make_bash_script $file_in "
   $srun $bin_sleep 10 &
   $bin_sleep 1
-  $scontrol listpids \$SLURM_JOBID.10 \$SLURMD_NODENAME
-  $scontrol listpids \$SLURM_JOBID.0 \$SLURMD_NODENAME
-  $scontrol listpids \$SLURM_JOBID \$SLURMD_NODENAME
+  $scontrol listpids \$SLURM_JOB_ID.10 \$SLURMD_NODENAME
+  $scontrol listpids \$SLURM_JOB_ID.0 \$SLURMD_NODENAME
+  $scontrol listpids \$SLURM_JOB_ID \$SLURMD_NODENAME
 "
 
 #
diff --git a/testsuite/expect/test17.19 b/testsuite/expect/test2.12
similarity index 50%
rename from testsuite/expect/test17.19
rename to testsuite/expect/test2.12
index d44849c4c..6753b534a 100755
--- a/testsuite/expect/test17.19
+++ b/testsuite/expect/test2.12
@@ -1,20 +1,20 @@
 #!/usr/bin/expect
 ############################################################################
 # Purpose: Test of SLURM functionality
-#          Test the launch of a batch job within an existing job allocation.
-#          This logic is used by LSF
+#          Validate scontrol show topology option.
 #
 # Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
 #          "FAILURE: ..." otherwise with an explanation of the failure, OR
 #          anything else indicates a failure mode that must be investigated.
 ############################################################################
-# Copyright (C) 2005-2006 The Regents of the University of California.
+# Copyright (C) 2009 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -28,58 +28,49 @@
 # 
 # You should have received a copy of the GNU General Public License along
 # with SLURM; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
 ############################################################################
 source ./globals
 
-set test_id      "17.19"
-set file_in      "test$test_id.input"
-set exit_code    0
-set job_id_1     0
-set job_id_2     0
+set test_id     "2.12"
+set exit_code   0
 
 print_header $test_id
 
-#
-# Build input script file
-#
-exec $bin_rm -f $file_in
-make_bash_script $file_in "$bin_printenv SLURMD_NODENAME"
-
-#
-# Spawn a batch job that uses stdout/err and confirm their contents
-#
-set timeout $max_job_delay
-if { [test_bluegene] } {
-	set node_cnt 1-2048
-} else {
-	if { [test_xcpu] } {
-		set node_cnt 1-1
-	} else {
-		set node_cnt 1-4
-	}
-}
-
-set salloc_pid [spawn $salloc -N$node_cnt -v -t1 $bin_bash]
+# test if running with Topology/Tree
+set topology_tree 0
+log_user 0
+spawn $scontrol show config
 expect {
-	-re "Granted job allocation ($number)" {
-		set job_id_1 $expect_out(1,string)
-		send "$sbatch --jobid=$job_id_1 -o none -e none $file_in \n"
+	-re "TopologyPlugin *= *topology/tree" {
+		set topology_tree 1
 		exp_continue
 	}
-	-re "Submitted batch job ($number)" {
-		set job_id_2 $expect_out(1,string)
-		send "exit \n"
-		exp_continue
+	eof {
+		wait
 	}
-	-re "Submitted batch job ($number).0" {
-		set job_id_2 $expect_out(1,string)
-		send "exit \n"
-		exp_continue
+}
+log_user 1
+
+if {$topology_tree == 0} {
+	send_user "\nWARNING: This test is only valid with a topology/tree configuration\n"
+	exit 0
+}
+
+#
+# Report the slurm configuration
+#
+set matches     0
+spawn $scontrol show topology
+expect {
+	-re "SwitchName=($alpha_numeric_under)" {
+		if {$matches == 0} {
+			set switch_name $expect_out(1,string)
+		}
+		incr matches
 	}
 	timeout {
-		send_user "\nFAILURE: srun not responding\n"
-		slow_kill $salloc_pid
+		send_user "\nFAILURE: scontrol not responding\n"
 		set exit_code 1
 	}
 	eof {
@@ -87,22 +78,35 @@ expect {
 	}
 }
 
-if {$job_id_1 == 0} {
-	send_user "\nFAILURE: job allocation failure\n"
-	exit 1
-}
-if {$job_id_1 != $job_id_2} {
-	send_user "\nFAILURE: batch job did not run in existing allocation\n"
+if {$matches == 0} {
+	send_user "\nFAILURE: scontrol reported no switches\n"
 	exit 1
 }
 
-if [file exists none] {
-	send_user "\nFAILURE: created file 'none', should have mapped to no file\n"
-	exit 1
+#
+# Report one slurm switch
+#
+set matches     0
+spawn $scontrol show topology $switch_name 
+expect {
+	-re "SwitchName" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: scontrol not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$matches != 1} {
+	send_user "\nFAILURE: scontrol topology with switch name filter failed\n"
+	set exit_code 1
 }
 
 if {$exit_code == 0} {
 	send_user "\nSUCCESS\n"
-	exec $bin_rm -f $file_in
 }
 exit $exit_code
diff --git a/testsuite/expect/test2.2 b/testsuite/expect/test2.2
index fd894a5e0..b5f8f18b2 100755
--- a/testsuite/expect/test2.2
+++ b/testsuite/expect/test2.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test2.3 b/testsuite/expect/test2.3
index 6d069fdce..60bb9cec2 100755
--- a/testsuite/expect/test2.3
+++ b/testsuite/expect/test2.3
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test2.4 b/testsuite/expect/test2.4
index 12142fac7..f8128d5c7 100755
--- a/testsuite/expect/test2.4
+++ b/testsuite/expect/test2.4
@@ -14,10 +14,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test2.5 b/testsuite/expect/test2.5
index b378fdd4a..8a318bc78 100755
--- a/testsuite/expect/test2.5
+++ b/testsuite/expect/test2.5
@@ -11,10 +11,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -51,7 +52,7 @@ expect {
 		incr matches
 		exp_continue
 	}
-	-re "SLURM_CONFIG_FILE" {
+	-re "SLURM_CONF" {
 		incr matches
 		exp_continue
 	}
diff --git a/testsuite/expect/test2.6 b/testsuite/expect/test2.6
index 49e3ab2aa..0df1267f4 100755
--- a/testsuite/expect/test2.6
+++ b/testsuite/expect/test2.6
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test2.7 b/testsuite/expect/test2.7
index 4bea531a7..4c4f1e69d 100755
--- a/testsuite/expect/test2.7
+++ b/testsuite/expect/test2.7
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test2.8 b/testsuite/expect/test2.8
index 39bf4363b..7560f1cee 100755
--- a/testsuite/expect/test2.8
+++ b/testsuite/expect/test2.8
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test2.9 b/testsuite/expect/test2.9
index fc317de68..3f66b2a7f 100755
--- a/testsuite/expect/test2.9
+++ b/testsuite/expect/test2.9
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test20.1 b/testsuite/expect/test20.1
index 201f01815..657e77043 100755
--- a/testsuite/expect/test20.1
+++ b/testsuite/expect/test20.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test20.2 b/testsuite/expect/test20.2
index f07bdac76..64f533533 100755
--- a/testsuite/expect/test20.2
+++ b/testsuite/expect/test20.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test20.3 b/testsuite/expect/test20.3
index 50679cab7..cc2955dfb 100755
--- a/testsuite/expect/test20.3
+++ b/testsuite/expect/test20.3
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test20.4 b/testsuite/expect/test20.4
index 4a8acc783..dd862a574 100755
--- a/testsuite/expect/test20.4
+++ b/testsuite/expect/test20.4
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test21.1 b/testsuite/expect/test21.1
index 3a142cc82..c5b220657 100755
--- a/testsuite/expect/test21.1
+++ b/testsuite/expect/test21.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test21.10 b/testsuite/expect/test21.10
index 71d8e1ac5..10d4efb35 100755
--- a/testsuite/expect/test21.10
+++ b/testsuite/expect/test21.10
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test21.11 b/testsuite/expect/test21.11
index 68f75cd42..229890062 100755
--- a/testsuite/expect/test21.11
+++ b/testsuite/expect/test21.11
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test21.12 b/testsuite/expect/test21.12
index 4566dcaca..457b7a6ba 100755
--- a/testsuite/expect/test21.12
+++ b/testsuite/expect/test21.12
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test21.13 b/testsuite/expect/test21.13
index 4a69b71d0..60035fbe4 100755
--- a/testsuite/expect/test21.13
+++ b/testsuite/expect/test21.13
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -91,7 +92,7 @@ if {$access_err != 0} {
 remove_acct "" "$nm1,$nm2,$nm3"
 
 #add cluster
-incr exit_code [add_cluster "$tc1,$tc2" "" "" "" "" "" "" "" "" "" "" "" "" "" ""]
+incr exit_code [add_cluster "$tc1,$tc2" "" "" "" "" "" "" "" "" "" "" "" ""]
 if { $exit_code } {
 	remove_acct "" "$nm1,$nm2,$nm3"
 	remove_cluster "$tc1,$tc2"
diff --git a/testsuite/expect/test21.14 b/testsuite/expect/test21.14
index 6c8d7f456..e4f97c8f0 100755
--- a/testsuite/expect/test21.14
+++ b/testsuite/expect/test21.14
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -89,7 +90,7 @@ if {$access_err != 0} {
 remove_acct "" "$nm1,$nm2,$nm3"
 
 #add cluster
-incr exit_code [add_cluster "$tc1,$tc2" "" "" "" "" "" "" "" "" "" "" "" "" "" ""]
+incr exit_code [add_cluster "$tc1,$tc2" "" "" "" "" "" "" "" "" "" "" "" ""]
 if { $exit_code } {
 	remove_acct "" "$nm1,$nm2,$nm3"
 	remove_cluster "$tc1,$tc2"
diff --git a/testsuite/expect/test21.15 b/testsuite/expect/test21.15
index 559fdcdfe..b9ffde212 100755
--- a/testsuite/expect/test21.15
+++ b/testsuite/expect/test21.15
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -117,7 +118,7 @@ if {$access_err != 0} {
 }
 
 #add cluster
-incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" "" "" ""]
+incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" ""]
 if { $exit_code } {
 	remove_user "" "" "$us1,$us2,$us3"
 	remove_acct "" "$nm1,$nm2,$nm3"
diff --git a/testsuite/expect/test21.16 b/testsuite/expect/test21.16
index 162aa914a..7c3c26d77 100755
--- a/testsuite/expect/test21.16
+++ b/testsuite/expect/test21.16
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -117,7 +118,7 @@ if {$access_err != 0} {
 }
 
 #add cluster
-incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" "" "" ""]
+incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" ""]
 if { $exit_code } {
 	remove_user "" "" "$us1,$us2,$us3"
 	remove_acct "" "$nm1,$nm2,$nm3"
diff --git a/testsuite/expect/test21.17 b/testsuite/expect/test21.17
index 400b82d2f..e3e87e9ef 100755
--- a/testsuite/expect/test21.17
+++ b/testsuite/expect/test21.17
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -117,7 +118,7 @@ if {$access_err != 0} {
 }
 
 #add cluster
-incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" "" "" ""]
+incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" ""]
 if { $exit_code } {
      	remove_user "" "" "$us1,$us2,$us3"
 	remove_acct "" "$nm1,$nm2,$nm3"
diff --git a/testsuite/expect/test21.18 b/testsuite/expect/test21.18
index 9f2444448..4e3bc7162 100755
--- a/testsuite/expect/test21.18
+++ b/testsuite/expect/test21.18
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -117,7 +118,7 @@ if {$access_err != 0} {
 }
 
 #add cluster
-incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" "" "" ""]
+incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" ""]
 if { $exit_code } {
 	remove_user "" "" "$us1,$us2,$us3"
 	remove_acct "" "$nm1,$nm2,$nm3"
diff --git a/testsuite/expect/test21.19 b/testsuite/expect/test21.19
index 42fa0bba6..5061c6994 100755
--- a/testsuite/expect/test21.19
+++ b/testsuite/expect/test21.19
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -117,7 +118,7 @@ if {$access_err != 0} {
 }
 
 #add cluster
-incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" "" "" ""]
+incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" ""]
 if { $exit_code } {
 	remove_user "" "" "$us1,$us2,$us3"
 	remove_acct "" "$nm1,$nm2,$nm3"
diff --git a/testsuite/expect/test21.2 b/testsuite/expect/test21.2
index 90fa0218a..8c69361fa 100755
--- a/testsuite/expect/test21.2
+++ b/testsuite/expect/test21.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test21.20 b/testsuite/expect/test21.20
index bb7f8b7ec..aeb2c31e4 100755
--- a/testsuite/expect/test21.20
+++ b/testsuite/expect/test21.20
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -122,7 +123,7 @@ if {$access_err != 0} {
 }
 
 #add cluster
-incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" "" "" ""]
+incr exit_code [add_cluster "$tc1,$tc2,$tc3" "" "" "" "" "" "" "" "" "" "" "" ""]
 if { $exit_code } {
 	remove_user "" "" "$us1,$us2,$us3"
 	remove_acct "" "$nm1,$nm2,$nm3"
diff --git a/testsuite/expect/test21.21 b/testsuite/expect/test21.21
index 6f8c60475..30abd7c04 100755
--- a/testsuite/expect/test21.21
+++ b/testsuite/expect/test21.21
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test21.22 b/testsuite/expect/test21.22
index 7aebb00ea..2c1229b8b 100755
--- a/testsuite/expect/test21.22
+++ b/testsuite/expect/test21.22
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -99,6 +100,10 @@ set mj		MaxJobs
 set ms		MaxSubmitJobs
 set mn		MaxNodes
 set mw		MaxWall
+set class       Classification
+set class1     	*Capacity
+set class2     	Capability
+set class3     	Capapacity
 set fs1		1000
 set fs2		2375
 set fs3		3240
@@ -208,81 +213,6 @@ if { [string compare [check_accounting_admin_level] "Administrator"] } {
 	exit 0
 }
 
-#
-# Identify the user and his current default account
-#
-set acct_name ""
-set user_name ""
-spawn $bin_id -u -n
-expect {
-	 -re "($alpha_numeric_under)" {
-		set user_name $expect_out(1,string)
-		exp_continue
-	}
-	eof {
-		wait
-	}
-}
-set s_pid [spawn $sacctmgr show user $user_name]
-expect {
-	-re "$user_name *($alpha_numeric_under)" {
-		set acct_name $expect_out(1,string)
-		exp_continue
-	}
-	timeout {
-		send_user "FAILURE: sacctmgr add not responding\n"
-		slow_kill $s_pid
-		exit 1
-	}
-	eof {
-		wait
-	}
-}
-
-#
-# Use sacctmgr to add an account
-#
-set aamatches 0
-set sadd_pid [spawn $sacctmgr -i add account $test_acct]
-expect {
-	-re "Adding Account" {
-		incr aamatches
-		exp_continue
-	}
-	-re "Nothing new added" {
-		send_user "\nWARNING: vestigial account $test_acct found\n"
-		incr aamatches
-		exp_continue
-	}
-	timeout {
-		send_user "\nFAILURE: sacctmgr add not responding\n"
-		slow_kill $sadd_pid
-		set exit_code 1
-	}
-	eof {
-		wait
-	}
-}
-if {$aamatches != 1} {
-	send_user "\nFAILURE:  sacctmgr had a problem adding account.\n"
-	exit 1
-}
-
-#
-# Add self to this new account
-#
-set sadd_pid [spawn $sacctmgr -i create user name=$user_name account=$test_acct]
-expect {
-	 timeout {
-		send_user "\nFAILURE: sacctmgr add not responding\n"
-		slow_kill $sadd_pid
-		set exit_code 1
-	}
-	eof {
-		wait
-	}
-}
-
 #
 # Delete left-over input script files
 #
@@ -293,7 +223,7 @@ exec $bin_rm -f $file_in3
 #
 # Build input script file - to create original associations
 #
-exec echo "$clu - $cl1:$fs=$fs6:$gm=$gm6:$gc=$gc6:$gj=$gj6:$gn=$gn6:$gs=$gs6:$gw=$gw6:$mm=$mm6:$mc=$mc6:$mj=$mj6:$mn=$mn6:$ms=$ms6:$mw=$mw6:$qs=$qs1"     >>$file_in
+exec echo "$clu - $cl1:$class=$class1:$fs=$fs6:$gm=$gm6:$gc=$gc6:$gj=$gj6:$gn=$gn6:$gs=$gs6:$gw=$gw6:$mm=$mm6:$mc=$mc6:$mj=$mj6:$mn=$mn6:$ms=$ms6:$mw=$mw6:$qs=$qs1"     >>$file_in
 exec echo "$par - $roo"     >>$file_in
 exec echo "$acc - $nm1:$dsc=$ds1:$org=$or1:$fs=$fs5:$gm=$gm5:$gc=$gc5:$gj=$gj5:$gn=$gn5:$gs=$gs5:$gw=$gw5:$mm=$mm5:$mc=$mc5:$mj=$mj5:$mn=$mn5:$ms=$ms5:$mw=$mw5:$qs=$qs1"     >>$file_in
 exec echo "$acc - $nm2:$dsc=$ds2:$org=$or2:$fs=$fs4:$gm=$gm4:$gc=$gc4:$gj=$gj4:$gn=$gn4:$gs=$gs4:$gw=$gw4:$mm=$mm4:$mc=$mc4:$mj=$mj4:$mn=$mn4:$ms=$ms4:$mw=$mw4:$qs=$qs1"     >>$file_in
@@ -307,7 +237,7 @@ exec echo "$usr - $us2:$coo=$nm3:$dac=$nm2:$fs=$fs2:$mm=$mm1:$mc=$mc1:$mj=$mj1:$
 #
 # Second input file - to modify and add associations to the original 
 #
-exec echo "$clu - $cl1"     >>$file_in2
+exec echo "$clu - $cl1:$class=$class2"     >>$file_in2
 exec echo "$par - $roo"     >>$file_in2
 exec echo "$acc - $nm1"     >>$file_in2
 exec echo "$acc - $nm3:$dsc=$ds1:$org=$or1:$fs=$fs5:$gm=$gm5:$gc=$gc5:$gj=$gj5:$gn=$gn5:$gs=$gs5:$gw=$gw5:$mm=$mm5:$mc=$mc5:$mj=$mj5:$mn=$mn5:$ms=$ms5:$mw=$mw5:$qs=$qs1"     >>$file_in2
@@ -324,7 +254,7 @@ exec echo "$usr - $us3:$dac=$nm2:$fs=$fs2:$mm=$mm1:$mc=$mc1:$mj=$mj1:$mn=$mn1:$m
 #
 # Third input file - to replace all previous
 #
-exec echo "$clu - $cl1:$fs=$fs6:$gm=$gm6:$gc=$gc6:$gj=$gj6:$gn=$gn6:$gs=$gs6:$gw=$gw6:$mm=$mm6:$mc=$mc6:$mj=$mj6:$mn=$mn6:$ms=$ms6:$mw=$mw6:$qs=$qs1"    >>$file_in3
+exec echo "$clu - $cl1:$class=$class3:$fs=$fs6:$gm=$gm6:$gc=$gc6:$gj=$gj6:$gn=$gn6:$gs=$gs6:$gw=$gw6:$mm=$mm6:$mc=$mc6:$mj=$mj6:$mn=$mn6:$ms=$ms6:$mw=$mw6:$qs=$qs1"    >>$file_in3
 exec echo "$par - $roo"    >>$file_in3
 exec echo "$acc - $nm1:$dsc=$ds1:$org=$or1:$fs=$fs5:$gm=$gm5:$gc=$gc5:$gj=$gj5:$gn=$gn5:$gs=$gs5:$gw=$gw5:$mm=$mm5:$mc=$mc5:$mj=$mj5:$mn=$mn5:$ms=$ms5:$mw=$mw5:$qs=$qs1"    >>$file_in3
 exec echo "$acc - $nm3:$dsc=$ds3:$org=$or3:$fs=$fs5:$gm=$gm5:$gc=$gc5:$gj=$gj5:$gn=$gn5:$gs=$gs5:$gw=$gw5:$mm=$mm5:$mc=$mc5:$mj=$mj5:$mn=$mn5:$ms=$ms5:$mw=$mw5:$qs=$qs1"    >>$file_in3
@@ -339,20 +269,6 @@ exec echo "$par - $nm3"    >>$file_in3
 exec echo "$usr - $us2:$coo=$nm3:$dac=$nm1:$fs=$fs3:$mm=$mm3:$mc=$mc3:$mj=$mj3:$mn=$mn3:$ms=$ms3:$mw=$mw3:$qs=$qs1"    >>$file_in3
 exec echo "$usr - $us3:$dac=$nm1:$fs=$fs3:$mm=$mm3:$mc=$mc3:$mj=$mj3:$mn=$mn3:$ms=$ms3:$mw=$mw3:$qs=$qs1"    >>$file_in3
 
-#
-# Check accounting config and bail if not found.
-#
-if { [test_account_storage] == 0 } {
-	send_user "\nWARNING: This test can't be run without a usable AccountStorageType\n"
-	exit 0
-}
-
-if { [string compare [check_accounting_admin_level] "Administrator"] } {
-	send_user "\nWARNING: This test can't be run without being an Accounting administrator.\nUse sacctmgr mod user \$USER_NAME admin=admin.\n"
-	exit 0
-}
-
-
 #
 # Use sacctmgr to remove the test cluster
 #
@@ -601,7 +517,11 @@ expect {
 	        send_user "FAILURE: there was a problem with the request\n"
 	    	incr exit_code 1
 	}
-	-re "(sacctmgr: For cluster $cl1)" {
+	-re "For cluster $cl1" {
+		incr matches
+		exp_continue
+	}
+	"Classification: $class1" {
 		incr matches
 		exp_continue
 	}
@@ -615,7 +535,7 @@ expect {
 	}
 }
 
-if {$matches != 1} {
+if {$matches != 2} {
 	send_user "\nFAILURE:  File load 1 incorrect with only $matches.\n"
 	incr exit_code 1
 }
@@ -721,7 +641,12 @@ expect {
 	        send_user "FAILURE: there was a problem with the request\n"
 	    	incr exit_code 1
 	}
-	-re "(sacctmgr: For cluster $cl1)" {
+	-re "For cluster $cl1" {
+		incr matches
+		exp_continue
+	}
+	
+	"$class1 -> $class2" {
 		incr matches
 		exp_continue
 	}
@@ -735,8 +660,8 @@ expect {
 	}
 }
 
-if {$matches != 1} {
-	send_user "\nFAILURE:  File load 1 incorrect with only $matches.\n"
+if {$matches != 2} {
+	send_user "\nFAILURE:  File load 2 incorrect with only $matches.\n"
 	incr exit_code 1
 }
 
@@ -857,7 +782,11 @@ expect {
 	        send_user "FAILURE: there was a problem with the request\n"
 	    	incr exit_code 1
 	}
-	-re "(sacctmgr: For cluster $cl1)" {
+	-re "For cluster $cl1" {
+		incr matches
+		exp_continue
+	}
+	"Classification: $class3" {
 		incr matches
 		exp_continue
 	}
@@ -871,8 +800,8 @@ expect {
 	}
 }
 
-if {$matches != 1} {
-	send_user "\nFAILURE:  File load 1 incorrect with only $matches.\n"
+if {$matches != 2} {
+	send_user "\nFAILURE:  File load 3 incorrect with only $matches.\n"
 	incr exit_code 1
 }
 
@@ -992,30 +921,6 @@ exec $bin_rm -f $file_in
 exec $bin_rm -f $file_in2
 exec $bin_rm -f $file_in3
 
-#
-# Use sacctmgr to delete the test account
-#
-set damatches 0
-set sadel_pid [spawn $sacctmgr -i delete account $test_acct]
-expect {
-	-re "Deleting account" {
-		incr damatches
-		exp_continue
-	}
-	timeout {
-		send_user "\nFAILURE: sacctmgr delete not responding\n"
-		slow_kill $sadel_pid
-		set exit_code 1
-	}
-	eof {
-		wait
-	}
-}
-if {$damatches != 1} {
-	send_user "\nFAILURE: sacctmgr had a problem deleting account\n"
-	set exit_code 1
-}
-
 if {$exit_code == 0} {
 	send_user "\nSUCCESS\n"
 } else {
diff --git a/testsuite/expect/test21.23 b/testsuite/expect/test21.23
index 230a678ae..30df0e267 100755
--- a/testsuite/expect/test21.23
+++ b/testsuite/expect/test21.23
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -46,6 +47,10 @@ if { [test_account_storage] == 0 } {
 	send_user "\nWARNING: This test can't be run without a usable AccountStorageType\n"
 	exit 0
 }
+if { [test_track_wckey] == 0} {
+	send_user "\nWARNING: This test can't be run without TrackWCKey being set\n"
+	exit 0
+}
 
 if { [string compare [check_accounting_admin_level] "Administrator"] } {
 	send_user "\nWARNING: This test can't be run without being an Accounting administrator.\nUse sacctmgr mod user \$USER_NAME set admin=admin.\n"
@@ -133,7 +138,6 @@ expect {
 # Spawn a job via salloc using this wckey
 #
 set job_id     0
-set have_wckey 0
 set matches    0
 set timeout    $max_job_delay
 spawn $salloc -N1 --account=$test_acct --wckey=$wk
@@ -145,14 +149,9 @@ expect {
 		exp_continue
 	}
 	-re "WCKey=$wk" {
-		incr have_wckey
 		incr matches
 		exp_continue
 	}
-	-re "WCKey=" {
-		incr have_wckey
-		exp_continue
-	}
 	timeout {
 		send_user "\nFAILURE: salloc not responding\n"
 		set exit_code 1
@@ -161,11 +160,6 @@ expect {
 		wait
 	}
 }
-if {$have_wckey == 0} {
-	send_user "\nWARNING: TrackWCKey is disabled, can not continue test\n"
-	exec $sacctmgr -i delete account $test_acct
-	exit $exit_code
-}
 
 spawn $sacct -j $job_id --fields=wckey
 	expect {
diff --git a/testsuite/expect/test21.24 b/testsuite/expect/test21.24
index b20d73474..29eac34e2 100755
--- a/testsuite/expect/test21.24
+++ b/testsuite/expect/test21.24
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -248,8 +249,8 @@ if { $exit_code } {
 }
 
 #add cluster
-#name QOS Fairshare GrpCPUMins GrpCPUs GrpJobs GrpNodes GrpSubmitJobs GrpWall MaxCPUMins MaxCPUs MaxJobs MaxNodes MaxSubmitJobs MaxWallDurationPerJob
-incr exit_code [add_cluster "$tc3" "$qs2" "$fs6" "$gm6" "$gc6" "$gj6" "$gn6" "$gs6" "$gw6" "$mm6" "$mc6" "$mj6" "$mn6" "$ms6" "$mw6"]
+#name QOS Fairshare GrpCPUs GrpJobs GrpNodes GrpSubmitJobs MaxCPUMins MaxCPUs MaxJobs MaxNodes MaxSubmitJobs MaxWallDurationPerJob
+incr exit_code [add_cluster "$tc3" "$qs2" "$fs6" "$gc6" "$gj6" "$gn6" "$gs6" "$mm6" "$mc6" "$mj6" "$mn6" "$ms6" "$mw6"]
 if { $exit_code } {
 	remove_user "" "" "$us1,$us2,$us3,$us4"
 	remove_acct "" "$nm1,$nm2,$nm3,$nm4"
@@ -374,7 +375,7 @@ expect {
 	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
 	    	incr exit_code 1
 	}
-	-re "($clu - $cl3:$fs=$fs6:$gm=$gm6:$gc=$gc6:$gj=$gj6:$gn=$gn6:$gs=$gs6:$gw=$gw6:$mp=$mm6:$mu=$mc6:$mj=$mj6:$mnj=$mn6:$ms=$ms6:$md=$mw6:$qs='$qs2')" {
+	-re "($clu - $cl3:$fs=$fs6:$gc=$gc6:$gj=$gj6:$gn=$gn6:$gs=$gs6:$mp=$mm6:$mu=$mc6:$mj=$mj6:$mnj=$mn6:$ms=$ms6:$md=$mw6:$qs='$qs2')" {
 		send_user "\nmatch 1\n"
 		incr matches
 		exp_continue
diff --git a/testsuite/expect/test21.25 b/testsuite/expect/test21.25
new file mode 100755
index 000000000..4cfca560f
--- /dev/null
+++ b/testsuite/expect/test21.25
@@ -0,0 +1,94 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM functionality
+#          sacctmgr show config
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2008 Lawrence Livermore National Security.
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Joseph Donaghy <donaghy1@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id     "21.25"
+set exit_code   0
+
+print_header $test_id
+
+#
+# Use sacctmgr to create a cluster
+#
+set slurm_conf_matches    0
+set slurmdbd_conf_matches 0
+spawn $sacctmgr show config
+expect {
+	-re "You are not running a supported accounting_storage plugin" {
+		set slurm_conf_matches    2
+		set slurmdbd_conf_matches 2
+		exp_continue
+	}
+	-re "AccountingStorageType *= *accounting_storage/slurmdbd" {
+		incr slurm_conf_matches
+		exp_continue
+	}
+	-re "AccountingStorageType" {
+		incr slurm_conf_matches
+		set slurmdbd_conf_matches 2
+		exp_continue
+	}
+	-re "SLURM_CONF" {
+		incr slurm_conf_matches
+		exp_continue
+	}
+	-re "DbdHost" {
+		incr slurmdbd_conf_matches
+		exp_continue
+	}
+	-re "SLURMDBD_CONF" {
+		incr slurmdbd_conf_matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr add not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$slurm_conf_matches != 2} {
+	send_user "\nFAILURE:  sacctmgr failed to show slurm_conf values\n"
+	set exit_code 1
+}
+if {$slurmdbd_conf_matches != 2} {
+	send_user "\nFAILURE:  sacctmgr failed to show slurmdbd configuration\n"
+	set exit_code 1
+}
+
+if {$exit_code == 0} {
+	send_user "\nSUCCESS\n"
+}
+
+exit $exit_code
diff --git a/testsuite/expect/test21.3 b/testsuite/expect/test21.3
index 55086164a..ed8d3bcc4 100755
--- a/testsuite/expect/test21.3
+++ b/testsuite/expect/test21.3
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test21.4 b/testsuite/expect/test21.4
index bd7ecca81..8df359762 100755
--- a/testsuite/expect/test21.4
+++ b/testsuite/expect/test21.4
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test21.5 b/testsuite/expect/test21.5
index 4f83bef5e..e23512328 100755
--- a/testsuite/expect/test21.5
+++ b/testsuite/expect/test21.5
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -44,12 +45,10 @@ set mod		modify
 set nams	Names
 set nam		Name
 set fs		Fairshare
-set gm		GrpCPUMins
 set gc		GrpCPUs
 set gj		GrpJobs
 set gs		GrpSubmitJobs
 set gn		GrpNodes
-set gw		GrpWall
 set mm		MaxCPUMins
 set mc		MaxCPUs
 set mj		MaxJobs
@@ -59,12 +58,10 @@ set mw		MaxWall
 set clu		cluster
 set tc1		tcluster1
 set fs1		2500
-set gm1		1000000
 set gc1		50
 set gj1		100
 set gs1		500
 set gn1		300
-set gw1		00:45:00
 set mc1		100
 set mm1		100000
 set mj1		500
@@ -152,8 +149,8 @@ set my_pid [spawn $sacctmgr -i $del $clu $tc1]
 #
 # Use sacctmgr to create a cluster
 #
-set sadd_pid [spawn $sacctmgr -i add $clu $nams=$tc1 $fs=$fs1 $gm=$gm1 \
-$gc=$gc1 $gj=$gj1 $gn=$gn1 $gs=$gs1 $gw=$gw1 $mc=$mc1 $mm=$mm1 \
+set sadd_pid [spawn $sacctmgr -i add $clu $nams=$tc1 $fs=$fs1 \
+$gc=$gc1 $gj=$gj1 $gn=$gn1 $gs=$gs1 $mc=$mc1 $mm=$mm1 \
 $mj=$mj1 $ms=$ms1 $mn=$mn1 $mw=$mw1]
 expect {
 	-re "privilege to preform this action" {
@@ -176,10 +173,6 @@ expect {
 		incr amatches
 		exp_continue
 	}
-	-re "$gm *= $gm1" {
-		incr amatches
-		exp_continue
-	}
 	-re "$gc *= $gc1" {
 		incr amatches
 		exp_continue
@@ -196,10 +189,6 @@ expect {
 		incr amatches
 		exp_continue
 	}
-	-re "$gw *= $gw1" {
-		incr amatches
-		exp_continue
-	}
 	-re "$mm *= $mm1" {
 		incr amatches
 		exp_continue
@@ -237,7 +226,7 @@ if {$access_err != 0} {
 	send_user "\nWARNING: not authorized to perform this test\n"
 	exit $exit_code
 }
-if {$amatches != 16} {
+if {$amatches != 14} {
 	send_user "\nFAILURE:  sacctmgr had a problem adding clusters got $amatches\n"
 	set exit_code 1
 }
diff --git a/testsuite/expect/test21.6 b/testsuite/expect/test21.6
index b73800444..a88aa7a8e 100755
--- a/testsuite/expect/test21.6
+++ b/testsuite/expect/test21.6
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -44,12 +45,10 @@ set mod		modify
 set nams	Names
 set nam		Name
 set fs		Fairshare
-set gm		GrpCPUMins
 set gc		GrpCPUs
 set gj		GrpJobs
 set gs		GrpSubmitJobs
 set gn		GrpNodes
-set gw		GrpWall
 set mm		MaxCPUMins
 set mc		MaxCPUs
 set mj		MaxJobs
@@ -61,12 +60,10 @@ set tc1		tcluster1
 set tc2		tcluster2
 set tc3		tcluster3
 set fs1		2500
-set gm1		1000000
 set gc1		50
 set gj1		100
 set gs1		500
 set gn1		300
-set gw1		00:45:00
 set mc1		100
 set mm1		100000
 set mj1		500
@@ -156,7 +153,7 @@ set my_pid [spawn $sacctmgr -i $del $clu $tc1,$tc2,$tc3]
 # Use sacctmgr to create a cluster
 #
 set sadd_pid [spawn $sacctmgr $add $clu $nams=$tc1,$tc2,$tc3 $fs=$fs1 \
-$gm=$gm1 $gc=$gc1 $gj=$gj1 $gn=$gn1 $gs=$gs1 $gw=$gw1 $mc=$mc1 $mm=$mm1 \
+$gc=$gc1 $gj=$gj1 $gn=$gn1 $gs=$gs1 $mc=$mc1 $mm=$mm1 \
 $mj=$mj1 $ms=$ms1 $mn=$mn1 $mw=$mw1]
 
 expect {
@@ -188,10 +185,6 @@ expect {
 		incr amatches
 		exp_continue
 	}
-	-re "$gm *= $gm1" {
-		incr amatches
-		exp_continue
-	}
 	-re "$gc *= $gc1" {
 		incr amatches
 		exp_continue
@@ -208,10 +201,6 @@ expect {
 		incr amatches
 		exp_continue
 	}
-	-re "$gw *= $gw1" {
-		incr amatches
-		exp_continue
-	}
 	-re "$mm *= $mm1" {
 		incr amatches
 		exp_continue
@@ -258,7 +247,7 @@ if {$access_err != 0} {
 	send_user "\nWARNING: not authorized to perform this test\n"
 	exit $exit_code
 }
-if {$amatches != 20} {
+if {$amatches != 18} {
 	send_user "\nFAILURE:  sacctmgr had a problem adding clusters got $amatches\n"
 	set exit_code 1
 }
diff --git a/testsuite/expect/test21.7 b/testsuite/expect/test21.7
index 9e61b632d..09764c2ae 100755
--- a/testsuite/expect/test21.7
+++ b/testsuite/expect/test21.7
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -44,12 +45,10 @@ set mod		modify
 set nams	Names
 set nam		Name
 set fs		Fairshare
-set gm		GrpCPUMins
 set gc		GrpCPUs
 set gj		GrpJobs
 set gs		GrpSubmitJobs
 set gn		GrpNodes
-set gw		GrpWall
 set mm		MaxCPUMins
 set mc		MaxCPUs
 set mj		MaxJobs
@@ -61,12 +60,10 @@ set tc1		tcluster1
 set tc2		tcluster2
 set tc3		tcluster3
 set fs1		2500
-set gm1		1000000
 set gc1		50
 set gj1		100
 set gs1		500
 set gn1		300
-set gw1		00:45:00
 set mc1		100
 set mm1		100000
 set mj1		500
@@ -95,7 +92,7 @@ if { [test_account_storage] == 0 } {
 # Use sacctmgr to create a cluster
 #
 set sadd_pid [spawn $sacctmgr $add $clu $nams=$tc1,$tc2,$tc3 $fs=$fs1  \
-$gm=$gm1 $gc=$gc1 $gj=$gj1 $gn=$gn1 $gs=$gs1 $gw=$gw1 $mc=$mc1 $mm=$mm1 \
+$gc=$gc1 $gj=$gj1 $gn=$gn1 $gs=$gs1 $mc=$mc1 $mm=$mm1 \
 $mj=$mj1 $ms=$ms1 $mn=$mn1 $mw=$mw1]
 expect {
 	-re "privilege to preform this action" {
@@ -126,10 +123,6 @@ expect {
 		incr amatches
 		exp_continue
 	}
-	-re "$gm *= $gm1" {
-		incr amatches
-		exp_continue
-	}
 	-re "$gc *= $gc1" {
 		incr amatches
 		exp_continue
@@ -146,10 +139,6 @@ expect {
 		incr amatches
 		exp_continue
 	}
-	-re "$gw *= $gw1" {
-		incr amatches
-		exp_continue
-	}
 	-re "$mm *= $mm1" {
 		incr amatches
 		exp_continue
@@ -196,7 +185,7 @@ if {$access_err != 0} {
 	send_user "\nWARNING: not authorized to perform this test\n"
 	exit $exit_code
 }
-if {$amatches != 20} {
+if {$amatches != 18} {
 	send_user "\nFAILURE:  sacctmgr had a problem adding clusters\n"
 	set exit_code 1
 }
@@ -208,7 +197,7 @@ if { ![check_acct_associations] } {
 #
 # Use sacctmgr to list the addition of cluster
 #
-set slist_pid [spawn $sacctmgr $lis $clu format=$fs,$gm,$gc,$gj,$gs,$gn,$gw,$mm,$mc,$mj,$ms,$mn,$mw ]
+set slist_pid [spawn $sacctmgr $lis $clu format=$fs,$gc,$gj,$gs,$gn,$mm,$mc,$mj,$ms,$mn,$mw ]
 expect {
 	-re "Cluster" {
 		incr lmatches
@@ -218,7 +207,7 @@ expect {
 		incr lmatches
 		exp_continue
 	}
-	-re "$fs1 *$gm1 *$gc1 *$gj1 *$gs1 *$gn1 *$gw1 *$mm1 *$mc1 *$mj1 *$ms1 *$mn1 *$mw1" {
+	-re "$fs1 *$gc1 *$gj1 *$gs1 *$gn1 *$mm1 *$mc1 *$mj1 *$ms1 *$mn1 *$mw1" {
 		incr lmatches
 		exp_continue
 	}
@@ -226,7 +215,7 @@ expect {
 		incr lmatches
 		exp_continue
 	}
-	-re "$fs1 *$gm1 *$gc1 *$gj1 *$gs1 *$gn1 *$gw1 *$mm1 *$mc1 *$mj1 *$ms1 *$mn1 *$mw1" {
+	-re "$fs1 *$gc1 *$gj1 *$gs1 *$gn1 *$mm1 *$mc1 *$mj1 *$ms1 *$mn1 *$mw1" {
 		incr lmatches
 		exp_continue
 	}
@@ -234,7 +223,7 @@ expect {
 		incr lmatches
 		exp_continue
 	}
-	-re "$fs1 *$gm1 *$gc1 *$gj1 *$gs1 *$gn1 *$gw1 *$mm1 *$mc1 *$mj1 *$ms1 *$mn1 *$mw1" {
+	-re "$fs1 *$gc1 *$gj1 *$gs1 *$gn1 *$mm1 *$mc1 *$mj1 *$ms1 *$mn1 *$mw1" {
 		incr lmatches
 		exp_continue
 	}
diff --git a/testsuite/expect/test21.8 b/testsuite/expect/test21.8
index 05410591e..599bcb23b 100755
--- a/testsuite/expect/test21.8
+++ b/testsuite/expect/test21.8
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -45,12 +46,10 @@ set mod		modify
 set nams	Names
 set nam		Name
 set fs		Fairshare
-set gm		GrpCPUMins
 set gc		GrpCPUs
 set gj		GrpJobs
 set gs		GrpSubmitJobs
 set gn		GrpNodes
-set gw		GrpWall
 set mm		MaxCPUMins
 set mc		MaxCPUs
 set mj		MaxJobs
@@ -63,24 +62,20 @@ set tc2		tcluster2
 set tc3		tcluster3
 set fs1		2500
 set fs2		1375
-set gm1		1000
 set gc1		20
 set gj1		100
 set gs1		300
 set gn1		100
-set gw1		00:45:00
 set mc1		200
 set mm1		100000
 set mj1		500
 set ms1		400
 set mn1		200
 set mw1		01:00:00
-set gm2		2000
 set gc2		50
 set gj2		200
 set gs2		400
 set gn2		150
-set gw2		00:45:00
 set mc2		100
 set mm2		20000
 set mj2		600
@@ -109,7 +104,7 @@ if { [test_account_storage] == 0 } {
 # Use sacctmgr to create a cluster
 #
 set sadd_pid [spawn $sacctmgr $add $clu $nams=$tc1,$tc2,$tc3 $fs=$fs1  \
-$gm=$gm1 $gc=$gc1 $gj=$gj1 $gn=$gn1 $gs=$gs1 $gw=$gw1 $mc=$mc1 $mm=$mm1 \
+$gc=$gc1 $gj=$gj1 $gn=$gn1 $gs=$gs1 $mc=$mc1 $mm=$mm1 \
 $mj=$mj1 $ms=$ms1 $mn=$mn1 $mw=$mw1]
 expect {
 	-re "privilege to preform this action" {
@@ -140,10 +135,6 @@ expect {
 		incr amatches
 		exp_continue
 	}
-	-re "$gm *= $gm1" {
-		incr amatches
-		exp_continue
-	}
 	-re "$gc *= $gc1" {
 		incr amatches
 		exp_continue
@@ -160,10 +151,6 @@ expect {
 		incr amatches
 		exp_continue
 	}
-	-re "$gw *= $gw1" {
-		incr amatches
-		exp_continue
-	}
 	-re "$mm *= $mm1" {
 		incr amatches
 		exp_continue
@@ -210,7 +197,7 @@ if {$access_err != 0} {
 	send_user "\nWARNING: not authorized to perform this test\n"
 	exit $exit_code
 }
-if {$amatches != 20} {
+if {$amatches != 18} {
 	send_user "\nFAILURE:  sacctmgr had a problem adding clusters\n"
 	set exit_code 1
 }
@@ -223,7 +210,7 @@ if { ![check_acct_associations] } {
 # Use sacctmgr to modify one cluster
 #
 set smod_pid [spawn $sacctmgr $mod $clu set $fs=$fs2   \
-$gm=$gm2 $gc=$gc2 $gj=$gj2 $gn=$gn2 $gs=$gs2 $gw=$gw2 $mc=$mc2 $mm=$mm2 \
+$gc=$gc2 $gj=$gj2 $gn=$gn2 $gs=$gs2 $mc=$mc2 $mm=$mm2 \
 $mj=$mj2 $ms=$ms2 $mn=$mn2 $mw=$mw2 where $nams=$tc2]
 expect {
 	-re "Setting" {
@@ -238,10 +225,6 @@ expect {
 		incr mmatches
 		exp_continue
 	}
-	-re "$gm *= $gm2" {
-		incr mmatches
-		exp_continue
-	}
 	-re "$gc *= $gc2" {
 		incr mmatches
 		exp_continue
@@ -258,10 +241,6 @@ expect {
 		incr mmatches
 		exp_continue
 	}
-	-re "$gw *= $gw2" {
-		incr mmatches
-		exp_continue
-	}
 	-re "$mm *= $mm2" {
 		incr mmatches
 		exp_continue
@@ -305,7 +284,7 @@ expect {
 	}
 }
 
-if {$mmatches != 17} {
+if {$mmatches != 15} {
 	send_user "\nFAILURE:  sacctmgr had a problem modifying clusters\n"
 	set exit_code 1
 }
@@ -317,7 +296,7 @@ if { ![check_acct_associations] } {
 #
 # Use sacctmgr to list the addition of cluster
 #
-set slist_pid [spawn $sacctmgr $lis $clu format=$fs,$gm,$gc,$gj,$gs,$gn,$gw,$mm,$mc,$mj,$ms,$mn,$mw]
+set slist_pid [spawn $sacctmgr $lis $clu format=$fs,$gc,$gj,$gs,$gn,$mm,$mc,$mj,$ms,$mn,$mw]
 expect {
 	-re "Cluster" {
 		incr lmatches
@@ -327,7 +306,7 @@ expect {
 		incr lmatches
 		exp_continue
 	}
-	-re "$fs1 *$gm1 *$gc1 *$gj1 *$gs1 *$gn1 *$gw1 *$mm1 *$mc1 *$mj1 *$ms1 *$mn1 *$mw1" {
+	-re "$fs1 *$gc1 *$gj1 *$gs1 *$gn1 *$mm1 *$mc1 *$mj1 *$ms1 *$mn1 *$mw1" {
 		incr lmatches
 		exp_continue
 	}
@@ -335,7 +314,7 @@ expect {
 		incr lmatches
 		exp_continue
 	}
-	-re "$fs2 *$gm2 *$gc2 *$gj2 *$gs2 *$gn2 *$gw2 *$mm2 *$mc2 *$mj2 *$ms2 *$mn2 *$mw2" {
+	-re "$fs2 *$gc2 *$gj2 *$gs2 *$gn2 *$mm2 *$mc2 *$mj2 *$ms2 *$mn2 *$mw2" {
 		incr lmatches
 		exp_continue
 	}
@@ -343,7 +322,7 @@ expect {
 		incr lmatches
 		exp_continue
 	}
-	-re "$fs1 *$gm1 *$gc1 *$gj1 *$gs1 *$gn1 *$gw1 *$mm1 *$mc1 *$mj1 *$ms1 *$mn1 *$mw1" {
+	-re "$fs1 *$gc1 *$gj1 *$gs1 *$gn1 *$mm1 *$mc1 *$mj1 *$ms1 *$mn1 *$mw1" {
 		incr lmatches
 		exp_continue
 	}
diff --git a/testsuite/expect/test21.9 b/testsuite/expect/test21.9
index 372ba5c44..d4d031ccf 100755
--- a/testsuite/expect/test21.9
+++ b/testsuite/expect/test21.9
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Joseph Donaghy <donaghy1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -45,12 +46,10 @@ set mod		modify
 set nams	Names
 set nam		Name
 set fs		Fairshare
-set gm		GrpCPUMins
 set gc		GrpCPUs
 set gj		GrpJobs
 set gs		GrpSubmitJobs
 set gn		GrpNodes
-set gw		GrpWall
 set mm		MaxCPUMins
 set mc		MaxCPUs
 set mj		MaxJobs
@@ -63,24 +62,20 @@ set tc2		tcluster2
 set tc3		tcluster3
 set fs1		2500
 set fs2		1375
-set gm1		1000
 set gc1		20
 set gj1		100
 set gs1		300
 set gn1		100
-set gw1		00:45:00
 set mc1		200
 set mm1		100000
 set mj1		500
 set ms1		400
 set mn1		200
 set mw1		01:00:00
-set gm2		2000
 set gc2		50
 set gj2		200
 set gs2		400
 set gn2		150
-set gw2		00:45:00
 set mc2		100
 set mm2		20000
 set mj2		600
@@ -109,7 +104,7 @@ if { [test_account_storage] == 0 } {
 # Use sacctmgr to create a cluster
 #
 set sadd_pid [spawn $sacctmgr $add $clu $nams=$tc1,$tc2,$tc3 $fs=$fs1   \
-$gm=$gm1 $gc=$gc1 $gj=$gj1 $gn=$gn1 $gs=$gs1 $gw=$gw1 $mc=$mc1 $mm=$mm1 \
+$gc=$gc1 $gj=$gj1 $gn=$gn1 $gs=$gs1 $mc=$mc1 $mm=$mm1 \
 $mj=$mj1 $ms=$ms1 $mn=$mn1 $mw=$mw1]
 expect {
 	-re "privilege to preform this action" {
@@ -140,10 +135,6 @@ expect {
 		incr amatches
 		exp_continue
 	}
-	-re "$gm *= $gm1" {
-		incr amatches
-		exp_continue
-	}
 	-re "$gc *= $gc1" {
 		incr amatches
 		exp_continue
@@ -160,10 +151,6 @@ expect {
 		incr amatches
 		exp_continue
 	}
-	-re "$gw *= $gw1" {
-		incr amatches
-		exp_continue
-	}
 	-re "$mm *= $mm1" {
 		incr amatches
 		exp_continue
@@ -210,7 +197,7 @@ if {$access_err != 0} {
 	send_user "\nWARNING: not authorized to perform this test\n"
 	exit $exit_code
 }
-if {$amatches != 20} {
+if {$amatches != 18} {
 	send_user "\nFAILURE:  sacctmgr had a problem adding clusters\n"
 	set exit_code 1
 }
@@ -223,7 +210,7 @@ if { ![check_acct_associations] } {
 # Use sacctmgr to modify one cluster
 #
 set smod_pid [spawn $sacctmgr $mod $clu set $fs=$fs2    \
-$gm=$gm2 $gc=$gc2 $gj=$gj2 $gn=$gn2 $gs=$gs2 $gw=$gw2 $mc=$mc2 $mm=$mm2 \
+$gc=$gc2 $gj=$gj2 $gn=$gn2 $gs=$gs2 $mc=$mc2 $mm=$mm2 \
 $mj=$mj2 $ms=$ms2 $mn=$mn2 $mw=$mw2 where $nams=$tc1,$tc2,$tc3]
 expect {
 	-re "Setting" {
@@ -238,10 +225,6 @@ expect {
 		incr mmatches
 		exp_continue
 	}
-	-re "$gm *= $gm2" {
-		incr mmatches
-		exp_continue
-	}
 	-re "$gc *= $gc2" {
 		incr mmatches
 		exp_continue
@@ -258,10 +241,6 @@ expect {
 		incr mmatches
 		exp_continue
 	}
-	-re "$gw *= $gw2" {
-		incr mmatches
-		exp_continue
-	}
 	-re "$mm *= $mm2" {
 		incr mmatches
 		exp_continue
@@ -305,7 +284,7 @@ expect {
 	}
 }
 
-if {$mmatches != 17} {
+if {$mmatches != 15} {
 	send_user "\nFAILURE:  sacctmgr had a problem modifying clusters\n"
 	set exit_code 1
 }
@@ -317,7 +296,7 @@ if { ![check_acct_associations] } {
 #
 # Use sacctmgr to list the addition of cluster
 #
-set slist_pid [spawn $sacctmgr $lis $clu format=$fs,$gm,$gc,$gj,$gs,$gn,$gw,$mm,$mc,$mj,$ms,$mn,$mw]
+set slist_pid [spawn $sacctmgr $lis $clu format=$fs,$gc,$gj,$gs,$gn,$mm,$mc,$mj,$ms,$mn,$mw]
 expect {
 	-re "Cluster" {
 		incr lmatches
@@ -327,7 +306,7 @@ expect {
 		incr lmatches
 		exp_continue
 	}
-	-re "$fs2 *$gm2 *$gc2 *$gj2 *$gs2 *$gn2 *$gw2 *$mm2 *$mc2 *$mj2 *$ms2 *$mn2 *$mw2" {
+	-re "$fs2 *$gc2 *$gj2 *$gs2 *$gn2 *$mm2 *$mc2 *$mj2 *$ms2 *$mn2 *$mw2" {
 		incr lmatches
 		exp_continue
 	}
@@ -335,7 +314,7 @@ expect {
 		incr lmatches
 		exp_continue
 	}
-	-re "$fs2 *$gm2 *$gc2 *$gj2 *$gs2 *$gn2 *$gw2 *$mm2 *$mc2 *$mj2 *$ms2 *$mn2 *$mw2" {
+	-re "$fs2 *$gc2 *$gj2 *$gs2 *$gn2 *$mm2 *$mc2 *$mj2 *$ms2 *$mn2 *$mw2" {
 		incr lmatches
 		exp_continue
 	}
@@ -343,7 +322,7 @@ expect {
 		incr lmatches
 		exp_continue
 	}
-	-re "$fs2 *$gm2 *$gc2 *$gj2 *$gs2 *$gn2 *$gw2 *$mm2 *$mc2 *$mj2 *$ms2 *$mn2 *$mw2" {
+	-re "$fs2 *$gc2 *$gj2 *$gs2 *$gn2 *$mm2 *$mc2 *$mj2 *$ms2 *$mn2 *$mw2" {
 		incr lmatches
 		exp_continue
 	}
diff --git a/testsuite/expect/test22.1 b/testsuite/expect/test22.1
new file mode 100755
index 000000000..1811e8495
--- /dev/null
+++ b/testsuite/expect/test22.1
@@ -0,0 +1,1128 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM functionality
+#          Test sreport cluster utilization.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2008 Lawrence Livermore National Security.
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Danny Auble <da@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals_accounting
+
+set test_id     "test22.1"
+set exit_code   0
+set matches     0
+set not_support 0
+set sql_in     "$test_id-in.sql"
+set sql_rem    "$test_id-rem.sql"
+set sql_out    "$test_id-out.sql"
+set cluster    [format "%s%s" $test_id "clus"]
+set account1   [format "%s%s" $test_id "acct1"]
+set account2   [format "%s%s" $test_id "acct2"]
+set account3   [format "%s%s" $test_id "acct3"]
+set accounts   [format "%s,%s,%s" $account1 $account2 $account3]
+set user1      [format "%s%s" $test_id "user1"]
+set user2      [format "%s%s" $test_id "user2"]
+set users      [format "%s,%s" $user1 $user2]
+set node0      [format "%s%d" $cluster 0]
+set node1      [format "%s%d" $cluster 1]
+set node0_cpus 2
+set node1_cpus 2
+set cluster_cpus [expr $node0_cpus + $node1_cpus]
+set access_err  0
+set uid [get_my_uid]
+set gid [get_my_gid]
+set timeout 120
+
+print_header $test_id
+
+# Fri Thu Jan 31 00:00:00 2008 - Needed only for the 00:00:00 for timing purposes
+set midnight 1201766400
+
+# Mon Dec 31 23:00:00 2007
+set period_start 1199170800
+# Thu Jan 31 23:59:59 2008
+set period_end 1201852799 
+
+set start_str [timestamp -format %Y-%m-%dT%X -seconds $period_start]
+set end_str [timestamp -format %Y-%m-%dT%X -seconds $period_end]
+
+#job1
+set job1_start $period_start
+set job1_run 3900
+set job1_end [expr $job1_start+$job1_run]
+# This will give us the correct time we ran for
+set job1_diff_str [timestamp -format %X -seconds [expr $midnight+$job1_run]]
+set job1_start_str [timestamp -format %Y-%m-%dT%X -seconds $job1_start]
+set job1_end_str [timestamp -format %Y-%m-%dT%X -seconds $job1_end]
+set job1_nodes $node1
+set job1_cpus $node1_cpus
+set job1_alloc [expr $job1_run * $job1_cpus]
+set job1_acct $account1
+
+#job2
+#make job eligible an hour into the allocation
+set job2_elig [expr $period_start+3600]
+#start the job 65 minutes later so we can check reserved time
+set job2_start [expr $job2_elig+3900]
+#run for a day
+set job2_run 86400
+set job2_end [expr $job2_start+$job2_run]
+# This will give us the correct time we ran for
+set job2_diff_str "1-00:00:00"
+set job2_start_str [timestamp -format %Y-%m-%dT%X -seconds $job2_start]
+set job2_end_str [timestamp -format %Y-%m-%dT%X -seconds $job2_end]
+set job2_nodes [format "%s\[%s\]" $cluster "0-1"]
+set job2_cpus [expr $node0_cpus + $node1_cpus]
+set job2_alloc [expr $job2_run * $job2_cpus]
+set job2_acct $account3
+
+#job3
+#make job eligible an hour before the end of job2
+set job3_elig [expr $job2_end-3600]
+#start the job at the end of job2
+set job3_start $job2_end
+#run for 65 minutes
+set job3_run 3900
+set job3_end [expr $job3_start+$job3_run]
+# This will give us the correct time we ran for
+set job3_diff_str [timestamp -format %X -seconds [expr $midnight+$job1_run]]
+set job3_start_str [timestamp -format %Y-%m-%dT%X -seconds $job3_start]
+set job3_end_str [timestamp -format %Y-%m-%dT%X -seconds $job3_end]
+#run on just node0
+set job3_nodes $node0
+set job3_cpus $node0_cpus
+set job3_alloc [expr $job3_run * $job3_cpus]
+set job3_acct $account2
+
+set acct1_alloc $job1_alloc
+set acct3_alloc $job2_alloc
+set acct2_alloc [expr $acct3_alloc + $job3_alloc]
+set total_alloc [expr $job1_alloc + $job2_alloc + $job3_alloc]
+
+set size2_alloc [expr $job1_alloc + $job3_alloc]
+set size4_alloc $job3_alloc
+
+#node0 down
+set node0_down_start [expr $period_start+(60*45)]
+set node0_down_end [expr $period_start+(60*75)]
+
+#
+# Check accounting config and bail if not found.
+#
+if { [test_account_storage] == 0 } {
+	send_user "\nWARNING: This test can't be run without a usable AccountStorageType\n"
+	exit 0
+}
+
+if { [string compare [check_accounting_admin_level] "Administrator"] } {
+	send_user "\nWARNING: This test can't be run without being an Accounting administrator.\nUse sacctmgr mod user \$USER_NAME admin=admin.\n"
+	exit 0
+}
+
+remove_user "" "" $users
+remove_acct "" $accounts
+remove_cluster "$cluster"
+#add cluster
+incr exit_code [add_cluster "$cluster" "" "" "" "" "" "" "" "" "" "" "" ""]
+if { $exit_code } {
+ 	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+#add accounts
+incr exit_code [add_acct "$cluster" "" "$account1,$account2" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ]
+if { $exit_code } {
+	remove_acct "" "$account1,$account2"
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+#add accounts
+incr exit_code [add_acct "$cluster" "$account2" "$account3" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ]
+if { $exit_code } {
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+#add users
+incr exit_code [add_user "$cluster" $accounts $users "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ]
+if { $exit_code } {
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+#get the user association ids for the jobs we plan to add
+set user1acct1 0
+set user1acct2 0
+set user1acct3 0
+set user2acct1 0
+set user2acct2 0
+set user2acct3 0
+set my_pid [eval spawn $sacctmgr -n -p list assoc users=$users account=$accounts cluster=$cluster format="User,account,id"]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$user1.$account1.($number)." {
+		set user1acct1 $expect_out(1,string)
+		exp_continue
+	}
+	-re "$user1.$account2.($number)." {
+		set user1acct2 $expect_out(1,string)
+		exp_continue
+	}
+	-re "$user1.$account3.($number)." {
+		set user1acct3 $expect_out(1,string)
+		exp_continue
+	}
+	-re "$user2.$account1.($number)." {
+		set user2acct1 $expect_out(1,string)
+		exp_continue
+	}
+	-re "$user2.$account2.($number)." {
+		set user2acct2 $expect_out(1,string)
+		exp_continue
+	}
+	-re "$user2.$account3.($number)." {
+		set user2acct3 $expect_out(1,string)
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr list associations not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {!$user1acct1 || !$user1acct2 || !$user1acct3 || !$user2acct1 || !$user2acct2|| !$user2acct3} {
+	send_user "\nFAILURE:  Didn't get one of the user associations $user1acct1 $user1acct2 $user1acct3 $user2acct1 $user2acct2 $user2acct3.\n"
+	incr exit_code 1
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+exec $bin_rm -f $sql_in
+set file [open $sql_in "w"]
+
+# DON'T MESS WITH THIS UNLESS YOU REALLY UNDERSTAND WHAT YOU ARE DOING!!!!!
+# THIS COULD SERIOUSLY MESS UP YOUR DATABASE IF YOU ALTER THIS INCORRECTLY
+# JUST A FRIENDLY REMINDER ;)
+
+# put in the cluster for back in the day before accounting was made here for us we are using 'Tue Jan  1 00:00:00 2008' = 1199174400 as the start
+puts $file "insert into cluster_event_table (node_name, cluster, cpu_count, period_start, period_end, reason) values"
+puts $file "('', '$cluster', $cluster_cpus, $period_start, $period_end, 'Cluster processor count')"
+
+#put a node down for 30 minutes starting at 45 minutes after the start to make sure our rollups work so we should get 15 minutes on one hour and 15 on the other
+puts $file ", ('$node0', '$cluster', $node0_cpus, $node0_down_start, $node0_down_end, 'down')"
+#puts $file ", ('$node1', '$cluster', $node1_cpus, $period_start, $period_end, 'down')"
+puts $file "on duplicate key update period_start=VALUES(period_start), period_end=VALUES(period_end);"
+
+#now we will put in a job running for an hour and 5 minutes
+puts $file "insert into job_table (jobid, associd, wckey, wckeyid, uid, gid, partition, blockid, cluster, account, eligible, submit, start, end, suspended, name, track_steps, state, comp_code, priority, req_cpus, alloc_cpus, nodelist, kill_requid, qos, deleted) values"
+puts $file "('65537', '$user1acct1', '', '0', '$uid', '$gid', 'debug', '', '$cluster', '$job1_acct', $job1_start, $job1_start, $job1_start, $job1_end, '0', 'test_job1', '0', '3', '0', '$job1_cpus', '$job1_cpus', '$job1_cpus', '$job1_nodes', '0', '0', '0')"
+puts $file ", ('65538', '$user2acct3', '', '0', '$uid', '$gid', 'debug', '', '$cluster', '$job2_acct', $job2_elig, $job2_elig, $job2_start, $job2_end, '0', 'test_job2', '0', '3', '0', '$job2_cpus', '$job2_cpus', '$job2_cpus', '$job2_nodes', '0', '0', '0')"
+puts $file ", ('65539', '$user1acct2', '', '0', '$uid', '$gid', 'debug', '', '$cluster', '$job3_acct', $job3_elig, $job3_elig, $job3_start, $job3_end, '0', 'test_job3', '0', '3', '0', '$job3_cpus', '$job3_cpus', '$job3_cpus', '$job3_nodes', '0', '0', '0')"
+puts $file "on duplicate key update id=LAST_INSERT_ID(id), eligible=VALUES(eligible), submit=VALUES(submit), start=VALUES(start), end=VALUES(end), associd=VALUES(associd), alloc_cpus=VALUES(alloc_cpus);";
+close $file
+
+exec $bin_rm -f $sql_rem
+set file [open $sql_rem "w"]
+
+puts $file "delete from cluster_event_table where cluster='$cluster';"
+puts $file "delete from job_table where cluster='$cluster';"
+puts $file "delete from cluster_day_usage_table where cluster='$cluster';"
+puts $file "delete from cluster_hour_usage_table where cluster='$cluster';"
+puts $file "delete from cluster_month_usage_table where cluster='$cluster';"
+puts $file "delete from assoc_day_usage_table where id=$user1acct1 || id=$user1acct2 || id=$user1acct3 || id=$user2acct1 || id=$user2acct2 || id=$user2acct3;"
+puts $file "delete from assoc_hour_usage_table where id=$user1acct1 || id=$user1acct2 || id=$user1acct3 || id=$user2acct1 || id=$user2acct2 || id=$user2acct3;"
+puts $file "delete from assoc_month_usage_table where id=$user1acct1 || id=$user1acct2 || id=$user1acct3 || id=$user2acct1 || id=$user2acct2 || id=$user2acct3;"
+close $file
+
+#
+# Use sacctmgr to load info
+#
+incr exit_code [archive_load $sql_in]
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+#
+# Use sacct to see if the job loaded
+#
+set matches 0
+set my_pid [eval spawn $sacct -p -C $cluster --fields=cluster,account,associd,start,end,elapsed --noheader --start=$start_str --end=$end_str]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$account1.$user1acct1.$job1_start_str.$job1_end_str.$job1_diff_str." {
+		send_user "got 1\n"
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account3.$user2acct3.$job2_start_str.$job2_end_str.$job2_diff_str." {
+		send_user "got 2\n"
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account2.$user1acct2.$job3_start_str.$job3_end_str.$job3_diff_str." {
+		send_user "got 3\n"
+		incr matches
+		exp_continue
+	}
+
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 3} {
+	send_user "\nFAILURE:  job wasn't loaded correctly with only $matches.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	#incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+
+#
+# Use sacctmgr to roll up that time period
+#
+set matches 0
+set my_pid [eval spawn $sacctmgr -i roll $start_str $end_str]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster" {
+		incr matches
+		exp_continue
+	}
+	-re "SUCCESS" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 1} {
+	send_user "\nFAILURE:  sacctmgr wasn't able to roll data.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# Use sreport to get cluster usage for the first hour
+#
+
+# Mon Dec 31 23:00:00 2007
+set period_start 1199170800
+
+# Tue Jan 1 00:00:00 2008
+set period_end  1199174400
+set start_str [timestamp -format %Y-%m-%dT%X -seconds $period_start]
+set end_str [timestamp -format %Y-%m-%dT%X -seconds $period_end]
+
+set reported [expr ($period_end - $period_start) * $cluster_cpus]
+set down [expr ($period_end-$node0_down_start) * $node0_cpus] 
+set alloc_sec [expr ($period_end-$job1_start) * $node1_cpus]
+set resv 0
+set idle [expr $reported - ($down + $alloc_sec + $resv)]
+
+set down [format "%d\\\(%.2f%%\\\)" $down [expr double($down * 100)/$reported]] 
+set alloc [format "%d\\\(%.2f%%\\\)" $alloc_sec [expr double($alloc_sec * 100)/$reported]] 
+set resv [format "%d\\\(%.2f%%\\\)" $resv  [expr double($resv * 100)/$reported]]
+set idle [format "%d\\\(%.2f%%\\\)" $idle [expr double($idle * 100)/$reported]] 
+set reported [format "%d\\\(%.2f%%\\\)" $reported 100]
+
+send_user "\nTesting sreport for first hour\n"
+set matches 0
+set my_pid [eval spawn $sreport cluster utilization cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,idle,down,alloc,res,reported]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$idle.$down.$alloc.$resv.$reported." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 1} {
+	send_user "\nFAILURE:  sreport didn't give good info.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the UserUtilizationByAccount report
+set matches 0
+set my_pid [eval spawn $sreport cluster UserUtilizationByAccount cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,login,account,used]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$user1.$account1.$alloc." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 1} {
+	send_user "\nFAILURE:  sreport didn't give good info 2.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the AccountUtilizationByUser report
+set matches 0
+set my_pid [eval spawn $sreport cluster AccountUtilizationByUser cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,account,login,used]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.root..$alloc." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account1..$alloc." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account1.$user1.$alloc." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 3} {
+	send_user "\nFAILURE:  sreport didn't give good info 3.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the User Top report
+set matches 0
+set my_pid [eval spawn $sreport user top cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,account,login,used]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$account1.$user1.$alloc." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 1} {
+	send_user "\nFAILURE:  sreport didn't give good info 3.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the Job Size report
+set matches 0
+set my_pid [eval spawn $sreport job size grouping=2,4 cluster='$cluster' start=$start_str end=$end_str -tsec -p -n]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$account1.0.$alloc_sec.0." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account2.0.0.0." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 2} {
+	send_user "\nFAILURE:  sreport didn't give good info 4 $matches.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+
+# Use sreport to get cluster usage for the second hour
+#
+
+# Tue Jan 1 00:00:00 2008
+set period_start 1199174400
+
+# Tue Jan 1 01:00:00 2008
+set period_end  1199178000
+set start_str [timestamp -format %Y-%m-%dT%X -seconds $period_start]
+set end_str [timestamp -format %Y-%m-%dT%X -seconds $period_end]
+
+set reported [expr ($period_end - $period_start) * $cluster_cpus]
+set down [expr ($node0_down_end-$period_start) * $node0_cpus]
+set alloc_sec [expr ($job1_end-$period_start) * $job1_cpus]
+set resv [expr ($period_end - $job2_elig) * $job2_cpus]
+set idle [expr $reported - ($down + $alloc_sec + $resv)]
+# do the same logic inside the plugin to figure out the correct 
+# idle time and resv time
+if {$idle < 0 } {
+	set resv [expr $resv + $idle]
+	set idle 0
+	if {$resv < 0} {
+		set resv 0
+	}
+}
+set down [format "%d\\\(%.2f%%\\\)" $down [expr double($down * 100)/$reported]] 
+set alloc [format "%d\\\(%.2f%%\\\)" $alloc_sec [expr double($alloc_sec * 100)/$reported]] 
+set resv [format "%d\\\(%.2f%%\\\)" $resv  [expr double($resv * 100)/$reported]]
+set idle [format "%d\\\(%.2f%%\\\)" $idle [expr double($idle * 100)/$reported]] 
+set reported [format "%d\\\(%.2f%%\\\)" $reported 100]
+
+send_user "\nTesting sreport for second hour\n"
+set matches 0
+set my_pid [eval spawn $sreport cluster utilization cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,idle,down,alloc,res,reported]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$idle.$down.$alloc.$resv.$reported." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 1} {
+	send_user "\nFAILURE:  sreport didn't give good info 5 $matches.\n"
+	send_user "we are looking for $cluster.$idle.$down.$alloc.$resv.$reported.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the UserUtilizationByAccount report
+set matches 0
+set my_pid [eval spawn $sreport cluster UserUtilizationByAccount cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,login,account,used]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$user1.$account1.$alloc." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 1} {
+	send_user "\nFAILURE:  sreport didn't give good info 6.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the AccountUtilizationByUser report
+set matches 0
+set my_pid [eval spawn $sreport cluster AccountUtilizationByUser cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,account,login,used]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.root..$alloc." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account1..$alloc." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account1.$user1.$alloc." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 3} {
+	send_user "\nFAILURE:  sreport didn't give good info 7.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the User Top report
+set matches 0
+set my_pid [eval spawn $sreport user top cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,account,login,used]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$account1.$user1.$alloc." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 1} {
+	send_user "\nFAILURE:  sreport didn't give good info 8.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the Job Size report
+set matches 0
+set my_pid [eval spawn $sreport job size grouping=2,4 cluster='$cluster' start=$start_str end=$end_str -tsec -p -n]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$account1.0.$alloc_sec.0." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account2.0.0.0." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 2} {
+	send_user "\nFAILURE:  sreport didn't give good info 9 $matches.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# Use sreport to get cluster usage for the first 3 days
+#
+
+# Mon Dec 31 23:00:00 2007
+set period_start 1199170800
+
+# Tue Jan 3 00:00:00 2008
+set period_end 1199347200
+set start_str [timestamp -format %Y-%m-%dT%X -seconds $period_start]
+set end_str [timestamp -format %Y-%m-%dT%X -seconds $period_end]
+
+set reported [expr ($period_end - $period_start) * $cluster_cpus]
+set down [expr ($node0_down_end - $node0_down_start) * $node0_cpus]
+set alloc_sec [expr ($job1_end-$job1_start) * $job1_cpus]
+set alloc_sec [expr $alloc_sec + (($job2_end-$job2_start) * $job2_cpus)]
+set alloc_sec [expr $alloc_sec + (($job3_end-$job3_start) * $job3_cpus)]
+set resv [expr ($job2_start - $job2_elig) * $job2_cpus]
+set resv [expr $resv + (($job3_start - $job3_elig) * $job3_cpus)]
+# I didn't have time to do the correct math here so I am just putting in 9000 which should be the correct value of over commit
+set over 9000
+set resv [expr $resv - $over]
+set idle [expr $reported - ($down + $alloc_sec + $resv)]
+# do the same logic inside the plugin to figure out the correct 
+# idle time and resv time
+if {$idle < 0 } {
+	set resv [expr $resv + $idle]
+	set idle 0
+	if {$resv < 0} {
+		set resv 0
+	}
+}
+set down [format "%d\\\(%.2f%%\\\)" $down [expr double($down * 100)/$reported]] 
+set alloc [format "%d\\\(%.2f%%\\\)" $alloc_sec [expr double($alloc_sec * 100)/$reported]] 
+set resv [format "%d\\\(%.2f%%\\\)" $resv  [expr double($resv * 100)/$reported]]
+set idle [format "%d\\\(%.2f%%\\\)" $idle [expr double($idle * 100)/$reported]] 
+set over [format "%d\\\(%.2f%%\\\)" $over [expr double($over * 100)/$reported]] 
+
+set job1_alloc_str [format "%d\\\(%.2f%%\\\)" $job1_alloc [expr double($job1_alloc * 100)/$reported]] 
+set job2_alloc_str [format "%d\\\(%.2f%%\\\)" $job2_alloc [expr double($job2_alloc * 100)/$reported]] 
+set job3_alloc_str [format "%d\\\(%.2f%%\\\)" $job3_alloc [expr double($job3_alloc * 100)/$reported]] 
+set total_alloc_str [format "%d\\\(%.2f%%\\\)" $total_alloc [expr double($total_alloc * 100)/$reported]] 
+set acct1_alloc_str [format "%d\\\(%.2f%%\\\)" $acct1_alloc [expr double($acct1_alloc * 100)/$reported]] 
+set acct2_alloc_str [format "%d\\\(%.2f%%\\\)" $acct2_alloc [expr double($acct2_alloc * 100)/$reported]] 
+set acct3_alloc_str [format "%d\\\(%.2f%%\\\)" $acct3_alloc [expr double($acct3_alloc * 100)/$reported]] 
+set reported [format "%d\\\(%.2f%%\\\)" $reported 100]
+
+send_user "\nTesting sreport for 3 days\n"
+set matches 0
+set my_pid [eval spawn $sreport cluster utilization cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,idle,down,alloc,res,over,reported]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$idle.$down.$alloc.$resv.$over.$reported." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 1} {
+	send_user "\nFAILURE:  sreport didn't give good info 10 $matches.\n"
+	send_user "we are looking for $cluster.$idle.$down.$alloc.$resv.$over.$reported.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the UserUtilizationByAccount report
+set matches 0
+set my_pid [eval spawn $sreport cluster UserUtilizationByAccount cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,login,account,used]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$user2.$account3.$job2_alloc_str." {
+		send_user "got 2\n"
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$user1.$account1.$job1_alloc_str." {
+		send_user "got 1\n"
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$user1.$account2.$job3_alloc_str." {
+		send_user "got 3\n"
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 3} {
+	send_user "\nFAILURE:  sreport didn't give good info 11 $matches.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the AccountUtilizationByUser report
+set matches 0
+set my_pid [eval spawn $sreport cluster AccountUtilizationByUser cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,account,login,used]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.root..$total_alloc_str." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account1..$acct1_alloc_str." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account1.$user1.$job1_alloc_str." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account2..$acct2_alloc_str." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account2.$user1.$job3_alloc_str." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account3..$acct3_alloc_str." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account3.$user2.$job2_alloc_str." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 7} {
+	send_user "\nFAILURE:  sreport didn't give good info 11 $matches.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the User Top report
+set matches 0
+set my_pid [eval spawn $sreport user top cluster='$cluster' start=$start_str end=$end_str -tsecper -p -n format=cluster,account,login,used]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$account3.$user2.$job2_alloc_str." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account1.$user1.$job1_alloc_str." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account2.$user1.$job3_alloc_str." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 3} {
+	send_user "\nFAILURE:  sreport didn't give good info 12 $matches.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the Job Size report
+set matches 0
+set my_pid [eval spawn $sreport job size grouping=2,4 cluster='$cluster' start=$start_str end=$end_str -tsec -p -n]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$account1.0.$job1_alloc.0." {
+		incr matches
+		exp_continue
+	}
+	-re "$cluster.$account2.0.$job3_alloc.$job2_alloc." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 2} {
+	send_user "\nFAILURE:  sreport didn't give good info 13 $matches.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+# test the Job Size report down a level
+set matches 0
+set my_pid [eval spawn $sreport job size grouping=2,4 cluster='$cluster' account='$account2' start=$start_str end=$end_str -tsec -p -n]
+expect {
+	-re "There was a problem" {
+	        send_user "FAILURE: there was a problem with the sacctmgr command\n"
+	    	incr exit_code 1
+	}
+	-re "$cluster.$account3.0.0.$job2_alloc." {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr archive load not responding\n"
+		slow_kill $my_pid
+		incr exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 1} {
+	send_user "\nFAILURE:  sreport didn't give good info 14 $matches.\n"
+	incr exit_code 1
+}
+
+if { $exit_code } {
+	incr exit_code [archive_load $sql_rem]
+	remove_user "" "" $users
+	remove_acct "" $accounts
+	remove_cluster "$cluster"
+	exit $exit_code
+}
+
+if {$exit_code == 0} {
+	incr exit_code [archive_load $sql_rem]
+	incr exit_code [remove_user "" "" $users]
+	incr exit_code [remove_acct "" $accounts]
+	incr exit_code [remove_cluster "$cluster"]
+	
+ 	exec $bin_rm -f $sql_in
+ 	exec $bin_rm -f $sql_rem
+        if {$exit_code == 0} {
+		send_user "\nSUCCESS\n"
+	} else {
+		send_user "\nFAILURE\n"
+	}
+} else {
+	send_user "\nFAILURE\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test22.2 b/testsuite/expect/test22.2
new file mode 100755
index 000000000..4abcb74b1
--- /dev/null
+++ b/testsuite/expect/test22.2
@@ -0,0 +1,324 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM sreport functionality
+#          sreport h, n, p, P, t, V options.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2009 Lawrence Livermore National Security.
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Joseph Donaghy <donaghy1@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id     "22.2"
+set exit_code   0
+set timeout 60
+print_header $test_id
+
+#
+# Check accounting config and bail if not found.
+#
+if { [test_account_storage] == 0 } {
+	send_user "\nWARNING: This test can't be run without a usable AccountStorageType\n"
+	exit 0
+}
+
+################################################################
+#
+# Proc: sreport_opt
+#
+# Purpose:  Pass sreport options and test
+#
+# Returns: Number of matches.
+#
+# Input: Switch options not requiring arguments
+#
+################################################################
+
+proc sreport_opt { soption } {
+	global number sreport
+	set debug       0
+	set exit_code   0
+	set matches     0
+	set not_support 0
+	send_user "$sreport -$soption \n"
+
+	if { $soption == "-help"|| $soption == "-usage" || $soption == "h" } {
+
+	spawn $sreport -$soption
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "sreport...OPTION.....COMMAND" {
+			if {$debug} {send_user "\nmatch1\n"}
+			incr matches
+			exp_continue
+		}
+		-re "Valid .OPTION. values are" {
+			if {$debug} {send_user "\nmatch2\n"}
+			incr matches
+			exp_continue
+		}
+		-re "Valid .COMMAND. values are" {
+			if {$debug} {send_user "\nmatch3\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sreport not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support == 1} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+
+	if {$matches != 3} {
+		send_user "\nFAILURE: sreport -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+	return $matches
+}
+
+	if { $soption == "-noheader" || $soption == "n" } {
+
+	spawn $sreport -$soption job sizes
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "Cluster|Account|0-49 cpus|50-249 cpus|250-499 cpus|500-999 cpus|1000 cpus|of cluster" {	
+			if {$debug} {send_user "\nmatch4\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sreport not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support == 1} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 0} {
+		send_user "\nFAILURE: sreport -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+	return $matches
+}
+
+	if { $soption == "-parsable" || $soption == "p" } {
+
+	spawn $sreport -$soption job sizes
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "Cluster\\|Account\\|0-49 cpus\\|50-249 cpus\\|250-499 cpus\\|" {
+			if {$debug} {send_user "\nmatch5\n"}
+			incr matches
+			exp_continue
+		}
+		-re "500-999 cpus\\|>= 1000 cpus\\|% of cluster\\|" {
+			if {$debug} {send_user "\nmatch6\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sreport not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	return $matches
+}
+
+	if { $soption == "-parsable2" || $soption == "P" } {
+
+	spawn $sreport -$soption job sizes
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "Cluster\\|Account\\|0-49 cpus\\|50-249 cpus\\|250-499 cpus\\|" {
+			if {$debug} {send_user "\nmatch7\n"}
+			incr matches
+			exp_continue
+		}
+		-re "500-999 cpus\\|>= 1000 cpus\\|% of cluster" {
+			if {$debug} {send_user "\nmatch8\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sreport not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support == 1} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+
+	if {$matches != 2} {
+		send_user "\nFAILURE: sreport -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+	if { $soption == "-version" || $soption == "V" } {
+
+	spawn $sreport -$soption
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "slurm $number.$number.$number" {
+			if {$debug} {send_user "\nmatch9\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sreport not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support == 1} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+
+	if {$matches != 1} {
+		send_user "\nFAILURE: sreport -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+}
+
+################################################################
+
+set matches [sreport_opt h ]
+if {$matches != 3} {
+	send_user "\nFAILURE: sreport -h failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sreport_opt -help ]
+if {$matches != 3} {
+	send_user "\nFAILURE: sreport --help failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sreport_opt -usage ]
+if {$matches != 3} {
+	send_user "\nFAILURE: sreport --usage failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sreport_opt n ]
+if {$matches != 0} {
+	send_user "\nFAILURE: sreport -n failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sreport_opt -noheader ]
+if {$matches != 0} {
+	send_user "\nFAILURE: sreport --noheader failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sreport_opt p ]
+if {$matches != 2} {
+	send_user "\nFAILURE: sreport -p failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sreport_opt -parsable ]
+if {$matches != 2} {
+	send_user "\nFAILURE: sreport --parsable failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sreport_opt P ]
+if {$matches != 2} {
+	send_user "\nFAILURE: sreport -P failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sreport_opt -parsable2 ]
+if {$matches != 2} {
+	send_user "\nFAILURE: sreport --parsable2 failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sreport_opt V ]
+if {$matches != 1} {
+	send_user "\nFAILURE: sreport -V failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sreport_opt -version ]
+if {$matches != 1} {
+	send_user "\nFAILURE: sreport --verbose failed ($matches)\n"
+	set exit_code 1
+}
+
+if {$exit_code == 0} {
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test23.1 b/testsuite/expect/test23.1
new file mode 100755
index 000000000..4d1634eb7
--- /dev/null
+++ b/testsuite/expect/test23.1
@@ -0,0 +1,260 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM functionality
+#          Test sstat h, e, usage and V options.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2008 - 2009 Lawrence Livermore National Security.
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Joseph Donaghy <donaghy1@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id     "23.1"
+set exit_code   0
+set matches     0
+set not_support 0
+
+print_header $test_id
+
+################################################################
+#
+# Proc: sstat_job
+#
+# Purpose:  Pass sstat option and test
+#
+# Returns: Number of matches.
+#
+# Input: sstat options not requiring arguments
+#
+################################################################
+
+proc sstat_job { soption } {
+	global number sstat
+	set debug	0
+	set exit_code   0
+	set matches     0
+	set not_support 0
+	send_user "sstat -$soption \n"
+
+	if { $soption == "e" || $soption == "-helpformat" } {
+
+	spawn $sstat -$soption 
+	expect {
+		-re "AveCPU *AvePages *AveRSS *AveVMSize" {
+			if {$debug} {send_user "\nmatch1\n"}
+			incr matches
+			exp_continue
+		}
+		-re "JobID *MaxPages *MaxPagesNode *MaxPagesTask" {
+			if {$debug} {send_user "\nmatch2\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MaxRSS *MaxRSSNode *MaxRSSTask *MaxVMSize" {
+			if {$debug} {send_user "\nmatch3\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MaxVMSizeNode *MaxVMSizeTask *MinCPU *MinCPUNode" {
+			if {$debug} {send_user "\nmatch4\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MinCPUTask *NTasks *SystemCPU *TotalCPU" {
+			if {$debug} {send_user "\nmatch5\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sstat not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$matches != 5} {
+		send_user "\nFAILURE: sstat -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+	if { $soption == "h" || $soption == "-help" } {
+
+	spawn $sstat -$soption 
+	expect {
+		-re "sstat...OPTION" {
+			if {$debug} {send_user "\nmatch6\n"}
+			incr matches
+			exp_continue
+		}
+		-re "Valid..OPTION" {
+			if {$debug} {send_user "\nmatch7\n"}
+			incr matches
+			exp_continue
+		}
+		-re "-e, --helpformat" {
+			if {$debug} {send_user "\nmatch8\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sstat not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$matches != 3} {
+		send_user "\nFAILURE: sstat -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+	if { $soption == "-usage" } {
+
+	spawn $sstat -$soption 
+	expect {
+		-re "Usage: sstat .options. -j .job..stepid." {
+			if {$debug} {send_user "\nmatch9\n"}
+			incr matches
+			exp_continue
+		}
+		-re "Use --help for help" {
+			if {$debug} {send_user "\nmatch10\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sstat not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$matches != 2} {
+		send_user "\nFAILURE: sstat -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+	if { $soption == "V" || $soption == "-version" } {
+
+	spawn $sstat -$soption 
+	expect {
+		-re "slurm ($number).($number)." {
+			if {$debug} {send_user "\nmatch11\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sstat not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$matches != 1} {
+		send_user "\nFAILURE: sstat -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+}
+################################################################
+
+set matches [sstat_job e ]
+if {$matches != 5} {
+	send_user "\nFAILURE: sstat -e failed ($matches)\n"
+	set exit_code 1
+	}	else	{
+		send_user "\nsstat -e test GOOD!\n"
+}
+
+set matches [sstat_job -helpformat ]
+if {$matches != 5} {
+	send_user "\nFAILURE: sstat --helpformat failed ($matches)\n"
+	set exit_code 1
+	}	else	{
+		send_user "\nsstat --helpformat test GOOD!\n"
+}
+
+set matches [sstat_job h ]
+if {$matches != 3} {
+	send_user "\nFAILURE: sstat -h failed ($matches)\n"
+	set exit_code 1
+	}	else	{
+		send_user "\nsstat -h test GOOD!\n"
+}
+
+set matches [sstat_job -help ]
+if {$matches != 3} {
+	send_user "\nFAILURE: sstat --help failed ($matches)\n"
+	set exit_code 1
+	}	else	{
+		send_user "\nsstat --help test GOOD!\n"
+}
+
+set matches [sstat_job -usage ]
+if {$matches != 2} {
+	send_user "\nFAILURE: sstat --usage failed ($matches)\n"
+	set exit_code 1
+	}	else	{
+		send_user "\nsstat --usage test GOOD!\n"
+}
+
+set matches [sstat_job V ]
+if {$matches != 1} {
+	send_user "\nFAILURE: sstat -V failed ($matches)\n"
+	set exit_code 1
+	}	else	{
+		send_user "\nsstat -V test GOOD!\n"
+}
+
+set matches [sstat_job -version ]
+if {$matches != 1} {
+	send_user "\nFAILURE: sstat --version failed ($matches)\n"
+	set exit_code 1
+	}	else	{
+		send_user "\nsstat --version test GOOD!\n"
+}
+
+
+
+if {$exit_code == 0} {
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test23.2 b/testsuite/expect/test23.2
new file mode 100755
index 000000000..3618ffb84
--- /dev/null
+++ b/testsuite/expect/test23.2
@@ -0,0 +1,126 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM functionality
+#          Test sstat --helpformat option. 
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2008 Lawrence Livermore National Security.
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Joseph Donaghy <donaghy1@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id     "23.2"
+set exit_code   0
+set matches     0
+set not_support 0
+
+print_header $test_id
+
+#
+# Report the sstat --helpformat option
+#
+
+spawn $sstat --helpformat
+expect {
+	-re "AveCPU *AvePages *AveRSS *AveVMSize" {
+		incr matches
+		exp_continue
+	}
+	-re "JobID *MaxPages *MaxPagesNode *MaxPagesTask" {
+		incr matches
+		exp_continue
+	}
+	-re "MaxRSS *MaxRSSNode *MaxRSSTask *MaxVMSize" {
+		incr matches
+		exp_continue
+	}
+	-re "MaxVMSizeNode *MaxVMSizeTask *MinCPU *MinCPUNode" {
+		incr matches
+		exp_continue
+	}
+	-re "MinCPUTask *NTasks *SystemCPU *TotalCPU" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sstat not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 5} {
+	send_user "\nFAILURE: sstat --helpformat failed ($matches)\n"
+	set exit_code 1
+}
+
+#
+# Report the sstat -e option
+#
+set matches     0
+
+spawn $sstat -e
+expect {
+	-re "AveCPU *AvePages *AveRSS *AveVMSize" {
+		incr matches
+		exp_continue
+	}
+	-re "JobID *MaxPages *MaxPagesNode *MaxPagesTask" {
+		incr matches
+		exp_continue
+	}
+	-re "MaxRSS *MaxRSSNode *MaxRSSTask *MaxVMSize" {
+		incr matches
+		exp_continue
+	}
+	-re "MaxVMSizeNode *MaxVMSizeTask *MinCPU *MinCPUNode" {
+		incr matches
+		exp_continue
+	}
+	-re "MinCPUTask *NTasks *SystemCPU *TotalCPU" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sstat not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 5} {
+	send_user "\nFAILURE: sstat -e failed ($matches)\n"
+	set exit_code 1
+}
+
+if {$exit_code == 0} {
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test23.3 b/testsuite/expect/test23.3
new file mode 100755
index 000000000..67080abdd
--- /dev/null
+++ b/testsuite/expect/test23.3
@@ -0,0 +1,672 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM sstat functionality
+#          sstat a, n, o, p, P and v options.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2009 Lawrence Livermore National Security.
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Joseph Donaghy <donaghy1@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id     "23.3"
+set exit_code   0
+set file_in1    "test.$test_id.input1"
+set file_in2    "test.$test_id.input2"
+set file_in3    "test.$test_id.input3"
+set test_acct   "test_acct"
+set timeout 60
+print_header $test_id
+
+set ac		AveCPU        
+set ap		AvePages      
+set ar		AveRSS        
+set av		AveVMSize
+set ji		JobID         
+set mp		MaxPages      
+set mpn		MaxPagesNode  
+set mpt		MaxPagesTask
+set mr		MaxRSS        
+set mrn		MaxRSSNode    
+set mrt		MaxRSSTask    
+set mvs		MaxVMSize
+set mvn		MaxVMSizeNode  
+set mvt		MaxVMSizeTask  
+set mc		MinCPU        
+set mn		MinCPUNode
+set mt		MinCPUTask    
+set nt		NTasks        
+set sc		SystemCPU     
+set tc		TotalCPU
+#
+# Check accounting config and bail if not found.
+#
+if { [test_account_storage] == 0 } {
+	send_user "\nWARNING: This test can't be run without a usable AccountStorageType\n"
+	exit 0
+}
+
+if { [string compare [check_accounting_admin_level] "Administrator"] } {
+	send_user "\nWARNING: This test can't be run without being an Accounting administrator.\nUse sacctmgr mod user \$USER_NAME set admin=admin.\n"
+	exit 0
+}
+
+#
+# Identify the user and his current default account
+#
+set acct_name ""
+set user_name ""
+set user_gid ""
+spawn $bin_id -u -n
+expect {
+	 -re "($alpha_numeric_under)" {
+		set user_name $expect_out(1,string)
+		exp_continue
+	}
+	eof {
+		wait
+	}
+}
+
+spawn $bin_id -u
+expect {
+	 -re "($alpha_numeric_under)" {
+		set user_gid $expect_out(1,string)
+		exp_continue
+	}
+	eof {
+		wait
+	}
+}
+
+set s_pid [spawn $sacctmgr show user $user_name]
+expect {
+	-re "$user_name *($alpha_numeric_under)" {
+		set acct_name $expect_out(1,string)
+		exp_continue
+	}
+	timeout {
+		send_user "FAILURE: sacctmgr add not responding\n"
+		slow_kill $s_pid
+		exit 1
+	}
+	eof {
+		wait
+	}
+}
+
+#
+# Use sacctmgr to add an account
+#
+set aamatches 0
+set sadd_pid [spawn $sacctmgr -i add account $test_acct]
+expect {
+	-re "Adding Account" {
+		incr aamatches
+		exp_continue
+	}
+	-re "Nothing new added" {
+		send_user "\nWARNING: vestigial account $test_acct found\n"
+		incr aamatches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr add not responding\n"
+		slow_kill $sadd_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$aamatches != 1} {
+	send_user "\nFAILURE:  sacctmgr had a problem adding account.\n"
+	exit 1
+}
+
+#
+# Add self to this new account
+#
+set sadd_pid [spawn $sacctmgr -i create user name=$user_name account=$test_acct]
+expect {
+	 timeout {
+		send_user "\nFAILURE: sacctmgr add not responding\n"
+		slow_kill $sadd_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+#
+# Build input script file1
+#
+make_bash_script $file_in1 "
+$srun $file_in2
+
+"
+
+#
+# Build input script file2
+#
+make_bash_script $file_in2 "
+$srun $file_in3
+
+"
+
+#
+# Build input script file3
+#
+make_bash_script $file_in3 "
+$srun sleep 10
+
+"
+
+#
+# Spawn a job via srun using this account
+#
+set job_id3 0
+spawn $sbatch -N1 -v --account=$test_acct $file_in1
+expect {
+	-re "Submitted batch job ($number)" {
+		set job_id3 $expect_out(1,string)
+		send_user "\nFOUND JobID to be $job_id3\n"
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sbatch not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$job_id3 == 0} {
+	send_user "\nFAILURE: did not get srun job_id3\n"
+	set exit_code 1
+} else {
+	set matches 0
+	spawn $scontrol show job $job_id3
+	expect {
+		 -re "Account=$test_acct" {
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	if {$matches != 1} {
+		send_user "\nFAILURE: srun failed to use specified account\n"
+		set exit_code 1
+	}
+}
+
+#
+# Wait for job to start running, then signal it
+#
+if {[wait_for_job $job_id3 "RUNNING"] != 0} {
+	send_user "\nFAILURE: waiting for job to start running\n"
+	exit 1
+}
+################################################################
+#
+# Proc: sstat_job
+#
+# Purpose:  Pass sstat options and test
+#
+# Returns: Number of matches.
+#
+# Input: Switch options not requiring arguments
+#
+################################################################
+
+proc sstat_job { soption job_id} {
+	global sstat
+	set debug       0
+	set exit_code   0
+	set matches     0
+	set not_support 0
+	send_user "sstat -$soption -p -j $job_id\n"
+
+	if { $soption == "-allsteps" || $soption == "a" } {
+
+	spawn $sstat -$soption -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "$job_id.0" {
+			if {$debug} {send_user "\nmatch1\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id.1" {
+			if {$debug} {send_user "\nmatch2\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id.2" {
+			if {$debug} {send_user "\nmatch3\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sstat not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 3} {
+		send_user "\nFAILURE: sstat -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+	return $matches
+}
+
+	if { $soption == "-noheader" || $soption == "n" } {
+
+	spawn $sstat -$soption -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "JobID|MaxVMSize|MaxVMSizeNode|MaxVMSizeTask|	\
+			AveVMSize|MaxRSS|MaxRSSNode|MaxRSSTask|AveRSS|	\
+			MaxPages|MaxPagesNode|MaxPagesTask|AvePages|	\
+			MinCPU|MinCPUNode|MinCPUTask|AveCPU|NTasks" {	
+			if {$debug} {send_user "\nmatch4\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id" {
+			if {$debug} {send_user "\nmatch5\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sstat not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 1} {
+		send_user "\nFAILURE: sstat -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+	return $matches
+}
+
+	if { $soption == "-parsable" || $soption == "p" } {
+
+	spawn $sstat -$soption -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "JobID\\|MaxVMSize\\|MaxVMSizeNode\\|MaxVMSizeTask\\|AveVMSize\\|MaxRSS\\|" {
+			if {$debug} {send_user "\nmatch6\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MaxRSSNode\\|MaxRSSTask\\|AveRSS\\|MaxPages\\|MaxPagesNode\\|MaxPagesTask\\|" {
+			if {$debug} {send_user "\nmatch7\n"}
+			incr matches
+			exp_continue
+		}
+		-re "AvePages\\|MinCPU\\|MinCPUNode\\|MinCPUTask\\|AveCPU\\|NTasks\\|" {
+			if {$debug} {send_user "\nmatch8\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id..\\|" {
+			if {$debug} {send_user "\nmatch9\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sstat not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 4} {
+		send_user "\nFAILURE: sstat -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+	return $matches
+}
+
+	if { $soption == "-parsable2" || $soption == "P" } {
+
+	spawn $sstat -$soption -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "JobID\\|MaxVMSize\\|MaxVMSizeNode\\|MaxVMSizeTask\\|AveVMSize\\|MaxRSS\\|" {
+			if {$debug} {send_user "\nmatch10\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MaxRSSNode\\|MaxRSSTask\\|AveRSS\\|MaxPages\\|MaxPagesNode\\|MaxPagesTask\\|" {
+			if {$debug} {send_user "\nmatch11\n"}
+			incr matches
+			exp_continue
+		}
+		-re "AvePages\\|MinCPU\\|MinCPUNode\\|MinCPUTask\\|AveCPU\\|NTasks" {
+			if {$debug} {send_user "\nmatch12\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id..\\|" {
+			if {$debug} {send_user "\nmatch13\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sstat not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 4} {
+		send_user "\nFAILURE: sstat -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+	if { $soption == "-verbose" || $soption == "v" } {
+
+	spawn $sstat -$soption -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "JobID.MaxVMSize.MaxVMSizeNode.MaxVMSizeTask.AveVMSize.MaxRSS" {
+			if {$debug} {send_user "\nmatch14\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MaxRSSNode.MaxRSSTask.AveRSS.MaxPages.MaxPagesNode.MaxPagesTask" {
+			if {$debug} {send_user "\nmatch15\n"}
+			incr matches
+			exp_continue
+		}
+		-re "AvePages.MinCPU.MinCPUNode.MinCPUTask.AveCPU.NTasks" {
+			if {$debug} {send_user "\nmatch16\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id" {
+			if {$debug} {send_user "\nmatch17\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sstat not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 4} {
+		send_user "\nFAILURE: sstat -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+
+
+}
+
+################################################################
+#
+# Proc: sstat_vargs
+#
+# Purpose:  Pass sstat options with arguments and test
+#
+# Returns: Number of matches.
+#
+# Input: Switch options with argument
+#
+################################################################
+
+proc sstat_vargs { soption vargs job_id} {
+	global sstat
+	set debug	0
+	set exit_code   0
+	set matches     0
+	set not_support 0
+	send_user "sstat -$soption $vargs -p -j $job_id\n"
+
+	if { $soption == "o" || $soption == "-format" } {
+
+	spawn $sstat -$soption $vargs -p -j $job_id
+	expect {
+		-re "SLURM accounting storage is disabled" {
+			set not_support 1
+			exp_continue
+		}
+		-re "AveCPU.AvePages.AveRSS.AveVMSize" {
+			if {$debug} {send_user "\nmatch18\n"}
+			incr matches
+			exp_continue
+		}
+		-re "JobID.MaxPages.MaxPagesNode.MaxPagesTask" {
+			if {$debug} {send_user "\nmatch19\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MaxRSS.MaxRSSNode.MaxRSSTask.MaxVMSize" {
+			if {$debug} {send_user "\nmatch20\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MaxVMSizeNode.MaxVMSizeTask.MinCPU.MinCPUNode" {
+			if {$debug} {send_user "\nmatch21\n"}
+			incr matches
+			exp_continue
+		}
+		-re "MinCPUTask.NTasks.SystemCPU.TotalCPU" {
+			if {$debug} {send_user "\nmatch22\n"}
+			incr matches
+			exp_continue
+		}
+		-re "$job_id" {
+			if {$debug} {send_user "\nmatch23\n"}
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sstat not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$not_support != 0} {
+		send_user "\nWARNING: can not test without accounting enabled\n"
+		exit 0
+	}
+	if {$matches != 6} {
+		send_user "\nFAILURE: sstat -$soption failed ($matches)\n"
+		set exit_code 1
+	}
+		return $matches
+	}
+}
+################################################################
+sleep 1
+set matches [sstat_job a $job_id3]
+if {$matches != 3} {
+	send_user "\nFAILURE: sstat -a failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sstat_job -allsteps $job_id3]
+if {$matches != 3} {
+	send_user "\nFAILURE: sstat --allsteps failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sstat_job n $job_id3]
+if {$matches != 1} {
+	send_user "\nFAILURE: sstat -n failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sstat_job -noheader $job_id3]
+if {$matches != 1} {
+	send_user "\nFAILURE: sstat --noheader failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sstat_job p $job_id3]
+if {$matches != 4} {
+	send_user "\nFAILURE: sstat -p failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sstat_job -parsable $job_id3]
+if {$matches != 4} {
+	send_user "\nFAILURE: sstat --parsable failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sstat_job P $job_id3]
+if {$matches != 4} {
+	send_user "\nFAILURE: sstat -P failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sstat_job -parsable2 $job_id3]
+if {$matches != 4} {
+	send_user "\nFAILURE: sstat --parsable2 failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sstat_job v $job_id3]
+if {$matches != 4} {
+	send_user "\nFAILURE: sstat -v failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sstat_job -verbose $job_id3]
+if {$matches != 4} {
+	send_user "\nFAILURE: sstat --verbose failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sstat_vargs o $ac,$ap,$ar,$av,$ji,$mp,$mpn,$mpt,$mr,$mrn,$mrt,$mvs,$mvn,$mvt,$mc,$mn,$mt,$nt,$sc,$tc $job_id3]
+if {$matches != 6} {
+	send_user "\nFAILURE: sstat -o failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sstat_vargs -format $ac,$ap,$ar,$av,$ji,$mp,$mpn,$mpt,$mr,$mrn,$mrt,$mvs,$mvn,$mvt,$mc,$mn,$mt,$nt,$sc,$tc  $job_id3]
+if {$matches != 6} {
+	send_user "\nFAILURE: sstat --format failed ($matches)\n"
+	set exit_code 1
+}
+
+
+#
+# Use sacctmgr to delete the test account
+#
+set damatches 0
+set sadel_pid [spawn $sacctmgr -i delete account $test_acct]
+expect {
+	-re "Deleting account" {
+		incr damatches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sacctmgr delete not responding\n"
+		slow_kill $sadel_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$damatches != 1} {
+	send_user "\nFAILURE: sacctmgr had a problem deleting account\n"
+	set exit_code 1
+}
+
+if {$exit_code == 0} {
+	exec $bin_rm -f $file_in1 $file_in2 $file_in3
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test24.1 b/testsuite/expect/test24.1
new file mode 100755
index 000000000..318e7ac44
--- /dev/null
+++ b/testsuite/expect/test24.1
@@ -0,0 +1,133 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose:  Test of priority multifactor algo to get correct decay and
+#           such.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+#
+# Note:    This script generates and then deletes files in the working directory
+#          named test24.1.prog
+############################################################################
+# Copyright (C) 2009 Lawrence Livermore National Security.
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Danny Auble <da@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id     "24.1"
+set exit_code   0
+set test_prog   "test$test_id.prog"
+set matches     0
+print_header $test_id
+
+#
+# Delete left-over programs and rebuild them 
+#
+file delete $test_prog
+
+send_user "build_dir is $build_dir\n"
+if {[test_aix]} {
+	send_user "$bin_cc ${test_prog}.c -ldl -lntbl -fno-gcse -fno-strict-aliasing -Wl,-brtl -Wl,-bgcbypass:1000 -Wl,-bexpfull -Wl,-bmaxdata:0x70000000 -Wl,-brtl -g -lpthreads -o ${test_prog} -I${build_dir} -I${src_dir} ${build_dir}/src/common/libcommon.o ${build_dir}/src/slurmctld/locks.o  ${build_dir}/src/sshare/process.o\n"
+	exec       $bin_cc ${test_prog}.c -ldl -lntbl -fno-gcse -fno-strict-aliasing -Wl,-brtl -Wl,-bgcbypass:1000 -Wl,-bexpfull -Wl,-bmaxdata:0x70000000 -Wl,-brtl -g -lpthreads -o ${test_prog} -I${build_dir} -I${src_dir} ${build_dir}/src/common/libcommon.o ${build_dir}/src/slurmctld/locks.o  ${build_dir}/src/sshare/process.o 
+} else {
+	send_user "$bin_cc ${test_prog}.c -g -pthread -o ${test_prog} -I${build_dir} -I${src_dir} ${build_dir}/src/common/libcommon.o ${build_dir}/src/slurmctld/locks.o  ${build_dir}/src/sshare/process.o -ldl -export-dynamic \n"
+	exec       $bin_cc ${test_prog}.c -g -pthread -o ${test_prog} -I${build_dir} -I${src_dir} ${build_dir}/src/common/libcommon.o ${build_dir}/src/slurmctld/locks.o ${build_dir}/src/sshare/process.o -ldl -export-dynamic 
+}
+	exec $bin_chmod 700 $test_prog
+
+# Usage: test24.1.prog
+spawn ./$test_prog
+expect {
+	"No last decay" {
+		send_user "This error is expected.  No worries.\n"
+		exp_continue
+	}
+	"error: Can't save decay state" {
+		send_user "This error is expected.  No worries.\n"
+		exp_continue
+	}
+	"AccountA||40|0.400000|45|0.450000|0.450000|" {
+		incr matches
+		exp_continue
+	}
+	"AccountB||30|0.300000|20|0.200000|0.387500|" {
+		incr matches
+		exp_continue
+	}
+	"AccountB|User1|1|0.300000|20|0.200000|0.387500|" {
+		incr matches
+		exp_continue
+	}
+	"AccountC||10|0.100000|25|0.250000|0.300000|" {
+		incr matches
+		exp_continue
+	}
+	"AccountC|User2|1|0.050000|25|0.250000|0.275000|" {
+		incr matches
+		exp_continue
+	}
+	"AccountC|User3|1|0.050000|0|0.000000|0.150000|" {
+		incr matches
+		exp_continue
+	} 
+	"AccountD||60|0.600000|25|0.250000|0.250000|" {
+		incr matches
+		exp_continue
+	}
+	"AccountE||25|0.250000|25|0.250000|0.250000|" {
+		incr matches
+		exp_continue
+	}
+	"AccountE|User4|1|0.250000|25|0.250000|0.250000|" {
+		incr matches
+		exp_continue
+	}
+	"AccountF||35|0.350000|0|0.000000|0.145833|" {
+		incr matches
+		exp_continue
+	} 
+	"AccountF|User5|1|0.350000|0|0.000000|0.145833|" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: spawn IO not responding\n"
+		cancel_job $job_id
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+if {$matches != 11} {
+	send_user "\nFAILURE: we didn't get the correct priorities from the plugin $matches\n"
+	set exit_code 1
+}
+
+if {$exit_code == 0} {
+	file delete $test_prog
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test24.1.prog.c b/testsuite/expect/test24.1.prog.c
new file mode 100644
index 000000000..885395dbe
--- /dev/null
+++ b/testsuite/expect/test24.1.prog.c
@@ -0,0 +1,270 @@
+/*****************************************************************************\
+ *  test24.1.prog.c - link and test algo of the multifactor plugin.
+ *  
+ *  Usage: test24.1.prog 
+ *****************************************************************************
+ *  Copyright (C) 2009 Lawrence Livermore National Security.
+ *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+ *  Written by Danny Auble <da@llnl.gov>
+ *  CODE-OCEC-09-009. All rights reserved.
+ *  
+ *  This file is part of SLURM, a resource management program.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
+ *  
+ *  SLURM 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.
+ *  
+ *  SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+\*****************************************************************************/
+#  include "config.h"
+#  if HAVE_INTTYPES_H
+#    include <inttypes.h>
+#  else
+#    if HAVE_STDINT_H
+#      include <stdint.h>
+#    endif
+#  endif			/* HAVE_INTTYPES_H */
+
+#include <time.h>
+#include <strings.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <slurm/slurm.h>
+#include <slurm/slurm_errno.h>
+
+#include "src/common/slurm_priority.h"
+#include "src/common/assoc_mgr.h"
+#include "src/common/xstring.h"
+#include "src/common/log.h"
+#include "src/sshare/sshare.h"
+
+/* set up some fake system */
+int cluster_procs = 50;
+int long_flag = 1;
+int node_record_count = 1;
+int exit_code = 0;
+sshare_time_format_t time_format = SSHARE_TIME_MINS;
+char *time_format_string = "Minutes";
+
+List   job_list = NULL;		/* job_record list */
+static pthread_mutex_t state_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/* this will leak memory, but we don't care really */
+static void _list_delete_job(void *job_entry)
+{
+	struct job_record *job_ptr = (struct job_record *) job_entry;
+
+	xfree(job_ptr);
+}
+
+int _setup_assoc_list()
+{
+	acct_update_object_t update;
+	acct_association_rec_t *assoc = NULL;
+	/* make the main list */
+	assoc_mgr_association_list = list_create(destroy_acct_association_rec);
+	
+	/* we just want make it so we setup_childern so just pretend
+	   we are running off cache */
+	running_cache = 1;
+	assoc_mgr_init(NULL, NULL);
+
+	/* Here we make the associations we want to add to the
+	   system.  We do this as an update to avoid having to do
+	   setup.
+	*/
+	memset(&update, 0, sizeof(acct_update_object_t));
+	update.type = ACCT_ADD_ASSOC;
+	update.objects = list_create(destroy_acct_association_rec);
+	
+	/* Since we don't want to worry about lft and rgt's here we
+	 * need to put the assocs in hierarchical order using push
+	 * not append. */
+
+	/* First only add the accounts */
+	/* root association */
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 1;
+	assoc->acct = xstrdup("root");
+	list_push(update.objects, assoc);
+
+	/* sub of root id 1 */
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 2;
+	assoc->parent_id = 1;
+	assoc->shares_raw = 40;
+	assoc->acct = xstrdup("AccountA");
+	list_push(update.objects, assoc);
+
+	/* sub of AccountA id 2 */
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 21;
+	assoc->parent_id = 2;
+	assoc->shares_raw = 30;
+	assoc->acct = xstrdup("AccountB");
+	list_push(update.objects, assoc);
+
+	/* sub of AccountB id 21 */
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 211;
+	assoc->parent_id = 21;
+	assoc->shares_raw = 1;
+	assoc->usage_raw = 20;
+	assoc->acct = xstrdup("AccountB");
+	assoc->user = xstrdup("User1");
+	list_push(update.objects, assoc);
+
+	/* sub of AccountA id 2 */
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 22;
+	assoc->parent_id = 2;
+	assoc->shares_raw = 10;
+	assoc->acct = xstrdup("AccountC");
+	list_push(update.objects, assoc);
+
+	/* sub of AccountC id 22 */
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 221;
+	assoc->parent_id = 22;
+	assoc->shares_raw = 1;
+	assoc->usage_raw = 25;
+	assoc->acct = xstrdup("AccountC");
+	assoc->user = xstrdup("User2");
+	list_push(update.objects, assoc);
+
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 222;
+	assoc->parent_id = 22;
+	assoc->shares_raw = 1;
+	assoc->usage_raw = 0;
+	assoc->acct = xstrdup("AccountC");
+	assoc->user = xstrdup("User3");
+	list_push(update.objects, assoc);
+
+	/* sub of root id 1 */
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 3;
+	assoc->parent_id = 1;
+	assoc->shares_raw = 60;
+	assoc->acct = xstrdup("AccountD");
+	list_push(update.objects, assoc);
+
+	/* sub of AccountD id 3 */
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 31;
+	assoc->parent_id = 3;
+	assoc->shares_raw = 25;
+	assoc->acct = xstrdup("AccountE");
+	list_push(update.objects, assoc);
+
+	/* sub of AccountE id 31 */
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 311;
+	assoc->parent_id = 31;
+	assoc->shares_raw = 1;
+	assoc->usage_raw = 25;
+	assoc->acct = xstrdup("AccountE");
+	assoc->user = xstrdup("User4");
+	list_push(update.objects, assoc);
+
+	/* sub of AccountD id 3 */
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 32;
+	assoc->parent_id = 3;
+	assoc->shares_raw = 35;
+	assoc->acct = xstrdup("AccountF");
+	list_push(update.objects, assoc);
+
+	/* sub of AccountF id 32 */
+	assoc = xmalloc(sizeof(acct_association_rec_t));
+	assoc->id = 321;
+	assoc->parent_id = 32;
+	assoc->shares_raw = 1;
+	assoc->usage_raw = 0;
+	assoc->acct = xstrdup("AccountF");
+	assoc->user = xstrdup("User5");
+	list_push(update.objects, assoc);
+
+	assoc_mgr_update_assocs(&update);
+	list_destroy(update.objects);
+	return SLURM_SUCCESS;
+}
+
+int main (int argc, char **argv)
+{
+	log_options_t logopt = LOG_OPTS_STDERR_ONLY;
+	slurm_ctl_conf_t *conf = NULL;
+	shares_response_msg_t resp;
+
+	log_init(xbasename(argv[0]), logopt, 0, NULL);
+	xfree(slurmctld_conf.priority_type);
+	//logopt.stderr_level += 5;
+	logopt.prefix_level = 1;
+	log_alter(logopt, 0, NULL);
+	print_fields_have_header = 0;
+	print_fields_parsable_print = PRINT_FIELDS_PARSABLE_ENDING;
+	
+	conf = slurm_conf_lock();
+	/* force priority type to be multifactor */
+	xfree(conf->priority_type);
+	conf->priority_type = xstrdup("priority/multifactor");
+	/* force accounting type to be slurmdbd (It doesn't really talk
+	 * to any database, but needs this to work with fairshare
+	 * calculation). */
+	xfree(conf->accounting_storage_type);
+	conf->accounting_storage_type = xstrdup("accounting_storage/slurmdbd");
+	/* set up a known environment to test against.  Since we are
+	   only concerned about the fairshare we won't look at the other
+	   factors here.
+	*/
+	conf->priority_decay_hl = 1;
+	conf->priority_favor_small = 0;
+	conf->priority_max_age = conf->priority_decay_hl;
+	conf->priority_weight_age = 0;
+	conf->priority_weight_fs = 10000;
+	conf->priority_weight_js = 0;
+	conf->priority_weight_part = 0;
+	conf->priority_weight_qos = 0;
+	slurm_conf_unlock();
+
+	/* we don't want to do any decay here so make the save state
+	 * to /dev/null */
+	xfree(slurmctld_conf.state_save_location);
+	slurmctld_conf.state_save_location = "/dev/null";
+	/* now set up the association tree */
+	_setup_assoc_list();
+	/* now set up the job list */
+	job_list = list_create(_list_delete_job);
+
+	/* now init the priorities of the associations */
+	if (slurm_priority_init() != SLURM_SUCCESS)
+		fatal("failed to initialize priority plugin");
+	/* on some systems that don't have multiple cores we need to
+	   sleep to make sure the tread get started. */
+	sleep(1);
+	memset(&resp, 0, sizeof(shares_response_msg_t));
+	resp.assoc_shares_list = assoc_mgr_get_shares(NULL, 0, NULL, NULL);
+	process(&resp);
+
+	/* free memory */
+	if (slurm_priority_fini() != SLURM_SUCCESS)
+		fatal("failed to finalize priority plugin");
+	if(job_list)
+		list_destroy(job_list);
+	if(resp.assoc_shares_list)
+		list_destroy(resp.assoc_shares_list);
+	if(assoc_mgr_association_list)
+		list_destroy(assoc_mgr_association_list);
+	return 0;
+}
diff --git a/testsuite/expect/test24.2 b/testsuite/expect/test24.2
new file mode 100755
index 000000000..1344b4f10
--- /dev/null
+++ b/testsuite/expect/test24.2
@@ -0,0 +1,430 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM sshare functionality
+#          sshare h, p, P, v and V options.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2009 Lawrence Livermore National Security.
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Joseph Donaghy <donaghy1@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id     "24.2"
+set exit_code   0
+set timeout 60
+print_header $test_id
+
+#
+# Check accounting config and bail if not found.
+#
+if { [test_account_storage] == 0 } {
+	send_user "\nWARNING: This test can't be run without a usable AccountStorageType\n"
+	exit 0
+}
+
+################################################################
+#
+# Proc: sshare_opt
+#
+# Purpose:  Pass sshare options and test
+#
+# Returns: Number of matches.
+#
+# Input: Switch options not requiring arguments
+#
+################################################################
+
+proc sshare_opt { soption } {
+	global sshare number
+	set debug       1
+	set exit_code   0
+	set matches     0
+	set not_support 0
+	send_user "$sshare -$soption \n"
+
+	if { $soption == "-help"|| $soption == "-usage" } {
+		
+		spawn $sshare -$soption
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "You are not running a supported priority plugin" {
+				set not_support 2
+				exp_continue
+			}
+			-re "Usage: *sshare *.OPTION" {
+				if {$debug} {send_user "\nmatch1\n"}
+				incr matches
+				exp_continue
+			}
+			-re "Valid OPTIONs are" {
+				if {$debug} {send_user "\nmatch2\n"}
+				incr matches
+				exp_continue
+			}
+			-re "verbose *display more information" {
+				if {$debug} {send_user "\nmatch3\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sshare not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+
+		if {$not_support == 2} {
+			send_user "\nWARNING: can not test without priority/multifactor plugin\n"
+			exit 0
+		}
+
+		if {$matches != 3} {
+			send_user "\nFAILURE: sshare -$soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+	if { $soption == "-noheader" || $soption == "h" } {
+
+		spawn $sshare -$soption
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "You are not running a supported priority plugin" {
+				set not_support 2
+				exp_continue
+			}
+			-re "Account|User|Raw Shares|Norm Shares|Raw Usage|Norm Usage|Effectv Usage" {	
+				if {$debug} {send_user "\nmatch4\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sshare not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+
+		if {$not_support == 2} {
+			send_user "\nWARNING: can not test without priority/multifactor plugin\n"
+			exit 0
+		}
+
+		if {$matches != 0} {
+			send_user "\nFAILURE: sshare -$soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+	if { $soption == "-parsable" || $soption == "p" } {
+
+		spawn $sshare -$soption
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "You are not running a supported priority plugin" {
+				set not_support 2
+				exp_continue
+			}
+			-re "Account\\|User\\|Raw Shares\\|Norm Shares\\|" {
+				if {$debug} {send_user "\nmatch5\n"}
+				incr matches
+				exp_continue
+			}
+			-re "Raw Usage\\|Effectv Usage\\|Fair-share\\|" {
+				if {$debug} {send_user "\nmatch5\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sshare not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support != 0} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+		if {$matches != 2} {
+			send_user "\nFAILURE: sshare -$soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+	if { $soption == "-parsable2" || $soption == "P" } {
+
+		spawn $sshare -$soption
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "You are not running a supported priority plugin" {
+				set not_support 2
+				exp_continue
+			}
+			-re "Account\\|User\\|Raw Shares\\|Norm Shares\\|" {
+				if {$debug} {send_user "\nmatch6\n"}
+				incr matches
+				exp_continue
+			}
+			-re "Raw Usage\\|Effectv Usage\\|Fair-share" {
+				if {$debug} {send_user "\nmatch7\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sshare not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+
+		if {$not_support == 2} {
+			send_user "\nWARNING: can not test without priority/multifactor plugin\n"
+			exit 0
+		}
+
+		if {$matches != 2} {
+			send_user "\nFAILURE: sshare -$soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+	if { $soption == "-verbose" || $soption == "v" } {
+
+		spawn $sshare -$soption
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "You are not running a supported priority plugin" {
+				set not_support 2
+				exp_continue
+			}
+			-re "Users requested" {
+				if {$debug} {send_user "\nmatch8\n"}
+				incr matches
+				exp_continue
+			}
+			-re "Accounts requested" {
+				if {$debug} {send_user "\nmatch9\n"}
+				incr matches
+				exp_continue
+			}
+			-re "sshare: .* loaded" {
+				if {$debug} {send_user "\nmatch10\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sshare not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+
+		if {$not_support == 2} {
+			send_user "\nWARNING: can not test without priority/multifactor plugin\n"
+			exit 0
+		}
+
+		if {$matches != 3} {
+			send_user "\nFAILURE: sshare -$soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+
+	if { $soption == "-version" || $soption == "V" } {
+
+		spawn $sshare -$soption
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "You are not running a supported priority plugin" {
+				set not_support 2
+				exp_continue
+			}
+			-re "slurm $number.$number.$number" {
+				if {$debug} {send_user "\nmatch11\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sshare not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+
+		if {$not_support == 2} {
+			send_user "\nWARNING: can not test without priority/multifactor plugin\n"
+			exit 0
+		}
+
+		if {$matches != 1} {
+			send_user "\nFAILURE: sshare -$soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+}
+
+################################################################
+
+set matches [sshare_opt -help ]
+if {$matches != 3} {
+	send_user "\nFAILURE: sshare --help failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sshare_opt -usage ]
+if {$matches != 3} {
+	send_user "\nFAILURE: sshare --usage failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sshare_opt h ]
+if {$matches != 0} {
+	send_user "\nFAILURE: sshare -n failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sshare_opt -noheader ]
+if {$matches != 0} {
+	send_user "\nFAILURE: sshare --noheader failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sshare_opt p ]
+if {$matches != 2} {
+	send_user "\nFAILURE: sshare -p failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sshare_opt -parsable ]
+if {$matches != 2} {
+	send_user "\nFAILURE: sshare --parsable failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sshare_opt P ]
+if {$matches != 2} {
+	send_user "\nFAILURE: sshare -P failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sshare_opt -parsable2 ]
+if {$matches != 2} {
+	send_user "\nFAILURE: sshare --parsable2 failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sshare_opt v ]
+if {$matches != 3} {
+	send_user "\nFAILURE: sshare -v failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sshare_opt -verbose ]
+if {$matches != 3} {
+	send_user "\nFAILURE: sshare --verbose failed ($matches)\n"
+	set exit_code 1
+}
+
+
+set matches [sshare_opt V ]
+if {$matches != 1} {
+	send_user "\nFAILURE: sshare -v failed ($matches)\n"
+	set exit_code 1
+}
+
+set matches [sshare_opt -version ]
+if {$matches != 1} {
+	send_user "\nFAILURE: sshare --verbose failed ($matches)\n"
+	set exit_code 1
+}
+
+if {$exit_code == 0} {
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test25.1 b/testsuite/expect/test25.1
new file mode 100755
index 000000000..5635c0dfc
--- /dev/null
+++ b/testsuite/expect/test25.1
@@ -0,0 +1,690 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM sprio functionality.
+#
+#          sprio all options all arguments
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2009 Lawrence Livermore National Security.
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Joseph Donaghy <donaghy1@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id     "25.1"
+set exit_code   0
+set file_in     "test$test_id.input"
+set timeout	60
+print_header	$test_id
+
+#
+# Check accounting config and bail if not found.
+#
+if { [test_account_storage] == 0 } {
+	send_user "\nWARNING: This test can't be run without a usable AccountStorageType\n"
+	exit 0
+}
+if { [string compare [priority_type] multifactor] } {
+	send_user "\nWARNING: This test can't be run without a usable PriorityType\n"
+	exit 0
+}
+
+#
+# Build input script file
+#
+make_bash_script $file_in "$bin_sleep 600"
+
+proc def_node_cnt { } {
+	global sinfo alpha_numeric_under number exit_code
+
+	set node_cnt 1
+	spawn $sinfo -h -o "name=%20P node_cnt=%D"
+	expect {
+		-re "name=($alpha_numeric_under)\\\* *node_cnt=($number)" {
+			set node_cnt $expect_out(2,string) 
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sbatch not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	return $node_cnt
+}
+
+################################################################
+#
+# Proc: sub_job
+#
+# Purpose:  Submit a job
+#
+# Returns: Job ID
+#
+################################################################
+
+proc sub_job { node_cnt } {
+
+	global exit_code file_in number sbatch test_id
+	set file_in	test${test_id}.input
+
+	set job_id	0
+	spawn $sbatch --output=/dev/null --error=/dev/null -N $node_cnt --exclusive $file_in
+	expect {
+		-re "Submitted batch job ($number)" {
+			set job_id $expect_out(1,string) 
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sbatch not responding\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$job_id == 0} {
+		send_user "\nFAILURE: did not get sbatch job_id\n"
+		set exit_code 1
+	}
+	return $job_id
+}
+
+################################################################
+#
+# Proc: sprio_opt
+#
+# Purpose:  Pass sprio options and test
+#
+# Returns: Number of matches.
+#
+# Input: Switch options not requiring arguments
+#
+################################################################
+
+proc sprio_opt { soption } {
+	global number sprio exit_code
+	set debug       0
+	set matches     0
+	set not_support 0
+	send_user "$sprio $soption \n"
+
+############# sprio help option
+	if { $soption == "--help" } {
+
+		spawn $sprio $soption
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "noheader.*jobs.*long.*norm.*format.*user.*verbose.*version.*weights" {
+				if {$debug} {send_user "\nmatch1\n"}
+				incr matches
+				exp_continue
+			}
+			-re "Help options:" {
+				if {$debug} {send_user "\nmatch2\n"}
+				incr matches
+				exp_continue
+			}
+			-re "help *show this help message" {
+				if {$debug} {send_user "\nmatch3\n"}
+				incr matches
+				exp_continue
+			}
+			-re "usage *display a brief summary of sprio options" {
+				if {$debug} {send_user "\nmatch4\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+
+		if {$matches != 4} {
+			send_user "\nFAILURE: sprio $soption failed ($matches)\n"
+			set exit_code 1
+		}
+	return $matches
+	}
+
+############# sprio usage option
+	if { $soption == "--usage" } {
+
+		spawn $sprio $soption job sizes
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "Usage: sprio .-j jid.s.. .-u user_name.s.. .-o format. .--usage. .-hlnvVw." {	
+				if {$debug} {send_user "\nmatch5\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+		if {$matches != 1} {
+			send_user "\nFAILURE: sprio -$soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+############# sprio version options
+	if { $soption == "--version" || $soption == "-V" } {
+
+		spawn $sprio $soption
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "slurm $number.$number.$number" {
+				if {$debug} {send_user "\nmatch6\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+
+		if {$matches != 1} {
+			send_user "\nFAILURE: sprio -$soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+############# sprio weights options
+	if { $soption == "--weights" || $soption == "-w" } {
+
+		spawn $sprio $soption
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "JOBID *PRIORITY" {
+				if {$debug} {send_user "\nmatch7\n"}
+				incr matches
+				exp_continue
+			}
+			-re "Weights" {
+				if {$debug} {send_user "\nmatch8\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+
+		if {$matches != 2} {
+			send_user "\nFAILURE: sprio -$soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+}
+
+################################################################
+#
+# Proc: sprio_args
+#
+# Purpose:  Pass sprio options, arguments and test
+#
+# Returns: Number of matches.
+#
+# Input: Switch options requiring arguments
+#
+################################################################
+
+proc sprio_args { soption sargs jobid} {
+	global number float sprio exit_code
+	set debug       0
+	set matches     0
+	set not_support 0
+	send_user "$sprio $soption $sargs $jobid\n"
+
+############# sprio noheader options
+	if { $soption == "--noheader" || $soption == "-h" } {
+
+		spawn $sprio $soption $sargs $jobid
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "JOBID|PRIORITY|AGE|FAIRSHARE|JOBSIZE|PARTITION|QOS" {	
+				if {$debug} {send_user "\nmatch9\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+		if {$matches != 0} {
+			send_user "\nFAILURE: sprio $soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+############# sprio jobs options
+	if { $soption == "--jobs" || $soption == "-j" } {
+
+		spawn $sprio $soption $jobid
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "JOBID.*PRIORITY" {	
+				if {$debug} {send_user "\nmatch10\n"}
+				incr matches
+				exp_continue
+			}
+			-re "$jobid *$number" {	
+				if {$debug} {send_user "\nmatch11\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+		if {$matches != 2} {
+			send_user "\nFAILURE: sprio $soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+############# sprio long options
+	if { $soption == "--long" || $soption == "-l" } {
+
+		spawn $sprio $soption $sargs $jobid
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "JOBID     USER   PRIORITY        AGE  FAIRSHARE    JOBSIZE  PARTITION        QOS   NICE" {	
+				if {$debug} {send_user "\nmatch12\n"}
+				incr matches
+				exp_continue
+			}
+			-re "$jobid.*$number *$number *$number *$number *$number *$number *$number" {	
+				if {$debug} {send_user "\nmatch13\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+		if {$matches != 2} {
+			send_user "\nFAILURE: sprio $soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+############# sprio norm options
+	if { $soption == "--norm" || $soption == "-n" } {
+
+		spawn $sprio $soption $sargs $jobid
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "JOBID *PRIORITY" {	
+				if {$debug} {send_user "\nmatch14\n"}
+				incr matches
+				exp_continue
+			}
+			-re "$jobid *$float" {	
+				if {$debug} {send_user "\nmatch15\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+		if {$matches != 2} {
+			send_user "\nFAILURE: sprio $soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+############# sprio format options
+	if { $soption == "--format" || $soption == "-o" } {
+
+		spawn $sprio $soption "%.7i %.8u %.10y %.10Y %.10a %.10A %.10f %.10F %.10j %.10J %.10p %.10P %.10q %.10Q %.6N" $sargs $jobid
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "JOBID     USER   PRIORITY   PRIORITY        AGE        AGE  " {
+				if {$debug} {send_user "\nmatch16\n"}
+				incr matches
+				exp_continue
+			}
+			-re "FAIRSHARE  FAIRSHARE    JOBSIZE    JOBSIZE  PARTITION  PARTITION        QOS        QOS   NICE" {
+				if {$debug} {send_user "\nmatch17\n"}
+				incr matches
+				exp_continue
+			}
+			-re "$jobid *.* *$float *$number *$float *$number *$float *$number *$float *$number *$float *$number *$float *$number *$number" {	
+				if {$debug} {send_user "\nmatch18\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+		if {$matches != 3} {
+			send_user "\nFAILURE: sprio $soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+############# sprio u option
+	if { $soption == "-u" } {
+
+		spawn $sprio $soption $sargs
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "JOBID *USER" {	
+				if {$debug} {send_user "\nmatch19\n"}
+				incr matches
+				exp_continue
+			}
+			-re "$jobid *$sargs" {	
+				if {$debug} {send_user "\nmatch20\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+		if {$matches != 2} {
+			send_user "\nFAILURE: sprio $soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+############# sprio usage option
+	if { $soption == "--user=" } {
+
+		spawn $sprio $soption$sargs
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "JOBID *USER" {	
+				if {$debug} {send_user "\nmatch21\n"}
+				incr matches
+				exp_continue
+			}
+			-re "$jobid *$sargs" {	
+				if {$debug} {send_user "\nmatch22\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+		if {$matches != 2} {
+			send_user "\nFAILURE: sprio $soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+############# sprio verbose options
+	if { $soption == "--verbose" || $soption == "-v" } {
+
+		spawn $sprio $soption $sargs $jobid
+		expect {
+			-re "SLURM accounting storage is disabled" {
+				set not_support 1
+				exp_continue
+			}
+			-re "format.*job_flag.*jobs.*$jobid.*verbose" {	
+				if {$debug} {send_user "\nmatch23\n"}
+				incr matches
+				exp_continue
+			}
+			-re "JOBID *PRIORITY" {	
+				if {$debug} {send_user "\nmatch24\n"}
+				incr matches
+				exp_continue
+			}
+			-re "$jobid *$number *$number" {	
+				if {$debug} {send_user "\nmatch25\n"}
+				incr matches
+				exp_continue
+			}
+			timeout {
+				send_user "\nFAILURE: sprio not responding\n"
+				set exit_code 1
+			}
+			eof {
+				wait
+			}
+		}
+
+		if {$not_support == 1} {
+			send_user "\nWARNING: can not test without accounting enabled\n"
+			exit 0
+		}
+		if {$matches != 3} {
+			send_user "\nFAILURE: sprio $soption failed ($matches)\n"
+			set exit_code 1
+		}
+		return $matches
+	}
+
+}
+
+################################################################
+# Start a group of jobs
+
+set node_cnt [def_node_cnt]
+set jobid1 [sub_job $node_cnt]
+set jobid2 [sub_job $node_cnt]
+if {$exit_code != 0} {
+	cancel_job $jobid1
+	cancel_job $jobid2
+	exit $exit_code
+}
+send_user "\nSubmitted 2 jobs successfully\n\n"
+
+#
+# Collect uid
+#
+set nuid [get_my_nuid]
+
+#
+# Start testing sprio options and arguments
+#
+sprio_args -h -j $jobid2
+sprio_args --noheader -j $jobid2
+sprio_args -j -j $jobid2
+sprio_args --jobs -j $jobid2
+sprio_args -l -j $jobid2
+sprio_args --long -j $jobid2
+sprio_args -n -j $jobid2
+sprio_args --norm -j $jobid2
+sprio_args -o -j $jobid2
+sprio_args --format -j $jobid2
+sprio_args -u $nuid $jobid2
+sprio_args --user= $nuid $jobid2
+sprio_args -v -j $jobid2
+sprio_args -verbose -j $jobid2
+sprio_opt -V
+sprio_opt --version
+sprio_opt -w
+sprio_opt --weights
+sprio_opt --help
+sprio_opt --usage
+
+#
+# Cancel jobs
+#
+cancel_job $jobid1 
+cancel_job $jobid2
+
+#
+# Exit with code as appropriate
+#
+if {$exit_code == 0} {
+	exec $bin_rm -f $file_in
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test3.1 b/testsuite/expect/test3.1
index 34eaa662f..20656c90d 100755
--- a/testsuite/expect/test3.1
+++ b/testsuite/expect/test3.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test3.10 b/testsuite/expect/test3.10
index 4197f9dd9..67ea4c99d 100755
--- a/testsuite/expect/test3.10
+++ b/testsuite/expect/test3.10
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test3.11 b/testsuite/expect/test3.11
new file mode 100755
index 000000000..aa976e803
--- /dev/null
+++ b/testsuite/expect/test3.11
@@ -0,0 +1,525 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM functionality
+#          Validate scontrol create, delete, and update for reservations.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2009 Lawrence Livermore National Security
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by Dave Bremer <dbremer@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+#
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id       "3.11"
+set file_in       "test$test_id.input"
+set exit_code     0
+set res_name      ""
+set user_name     ""
+set def_partition ""
+set def_node      ""
+set ii 0
+
+print_header $test_id
+
+
+#
+# Procedure to create a new reservation and validate it.
+# Modifies the global var res_name in the process
+#
+proc create_res { res_params failure_expected } {
+	#exp_internal 1
+	global scontrol
+	global alpha_numeric_under
+	global res_name
+
+	set ret_code 0
+	set res_name ""
+
+	#
+	# Create a reservation using the list of params in res_params
+	#
+	set arglist [linsert $res_params 0 $scontrol create res]
+	eval spawn $arglist
+	expect {
+		-re "Reservation created: ($alpha_numeric_under)" {
+			set res_name $expect_out(1,string)
+		}
+		-re "Error creating the reservation: Invalid user" {
+			if {!$failure_expected} {
+				send_user "\nFAILURE: user not authorized "
+				send_user "to create reservation\n"
+			}
+			set ret_code 1
+			exp_continue
+		}
+		-re "Error" {
+			if {!$failure_expected} {
+				send_user "\nFAILURE: problem creating "
+				send_user "reservation with args: $res_params\n"
+			}
+			set ret_code 1
+			exp_continue
+		}
+		-re "error" {
+			if {!$failure_expected} {
+				send_user "\nFAILURE: problem creating "
+				send_user "reservation with args: $res_params\n"
+			}
+			set ret_code 1
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			set ret_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	if { $ret_code != 0 } {
+		return $ret_code
+	}
+
+	spawn $scontrol show res $res_name
+	expect {
+		-re "ReservationName=($alpha_numeric_under)" {
+			set tmp_res_name $expect_out(1,string)
+			if {$tmp_res_name != $res_name} {
+				if {!$failure_expected} {
+					send_user "\nFAILURE: problem showing "
+					send_user "reservation created with:  "
+					send_user "$res_params\n"
+				}
+				set ret_code 1
+				exp_continue
+			}
+		}
+		-re "No reservations in the system" {
+			if {!$failure_expected} {
+				send_user "\nFAILURE: no reservations found  "
+				send_user "after reservation created with:  "
+				send_user "$res_params\n"
+			}
+			set ret_code 1
+			exp_continue
+		}
+		-re "Reservation ($alpha_numeric_under) not found" {
+			if {!$failure_expected} {
+				send_user "\nFAILURE: Reservation $res_name not"
+				send_user "found after reservation created "
+				send_user "with:  $res_params\n"
+			}
+			set ret_code 1
+			exp_continue
+		}
+	}
+	#exp_internal 0
+
+	return $ret_code
+}
+
+
+#
+# Procedure to update a reservation
+#
+proc update_res { res_name res_params failure_expected } {
+	global scontrol
+	global alpha_numeric_under
+	set ret_code 0
+
+	#
+	# Update the reservation using the list of arguments in res_params
+	#
+	set arglist [linsert $res_params 0 $scontrol update ReservationName=$res_name]
+	eval spawn $arglist
+	expect {
+		-re "Reservation updated." {
+			exp_continue
+		}
+		-re "Error creating the reservation: Invalid user" {
+			if {!$failure_expected} {
+				send_user "\nWARNING: user not authorized "
+				send_user "to update reservation\n"
+			}
+			set ret_code 1
+			exp_continue
+		}
+		-re "Error" {
+			if {!$failure_expected} {
+				send_user "\nFAILURE: problem updating "
+				send_user "reservation $res_name with "
+				send_user "$res_params\n"
+			}
+			set ret_code 1
+			exp_continue
+		}
+		-re "error" {
+			if {!$failure_expected} {
+				send_user "\nFAILURE: problem updating "
+				send_user "reservation $res_name with "
+				send_user "$res_params\n"
+			}
+			set ret_code 1
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			set ret_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	return $ret_code
+}
+
+
+#
+# Procedure to delete a reservation
+#
+proc delete_res { res_name } {
+	global scontrol
+	set ret_code 0
+	
+	spawn $scontrol delete ReservationName=$res_name
+	expect {
+		-re "invalid" {
+			send_user "\nFAILURE: problem deleting reservation $res_name\n"
+			set ret_code 1
+			exp_continue
+		}
+		-re "reservation is in use" {
+			send_user "\nFAILURE: $res_name is in use\n"
+			set ret_code 1
+			exp_continue
+		}
+	}
+	return $ret_code
+}
+
+
+
+
+#
+# Identify usable nodes in default partition
+#
+spawn $sinfo -h -o %32P
+expect {
+	-re "($alpha_numeric_under)(\\*)" {
+		set def_partition $expect_out(1,string)
+		exp_continue
+	}
+	eof {
+		wait
+	}
+}
+if {[string compare $def_partition ""] == 0} {
+	send_user "\nFAILURE: failed to find default partition\n"
+	exit 1
+}
+spawn $sinfo -h -o "=%N=" -p $def_partition
+expect {
+	-re "=(.+)=" {
+		set def_node $expect_out(1,string)
+		exp_continue
+	}
+	eof {
+		wait
+	}
+}
+if {[string compare $def_node ""] == 0} {
+	send_user "\nFAILURE:default partition seems to have no nodes\n"
+	exit 1
+}
+
+
+#
+# Get the user name
+#
+spawn $bin_id -un
+expect {
+	-re "($alpha_numeric_under)" {
+		set user_name $expect_out(1,string)
+	}
+	eof {
+		wait
+	}
+}
+
+
+#
+# TEST 1
+# Make a list of lists with a series of parameters to test.  All the tests 
+# in goodtests should pass, all those in badtests should fail.
+#
+set badtests "
+	{}
+	{Duration=5   Nodes=$def_node   User=$user_name}
+	{StartTime=now   Nodes=$def_node   User=$user_name}
+	{StartTime=midnight   Duration=600   User=$user_name}
+	{StartTime=now   Duration=5   Nodes=ALL}
+	{StartTime=now   Duration=5   NodeCnt=  Nodes=   User=$user_name}
+	{StartTime=now   Duration=5   User=$user_name}
+	{StartTime=blah   Duration=5   Nodes=$def_node   User=$user_name}
+	{StartTime=now   Duration=foo   Nodes=$def_node   User=$user_name}
+	{StartTime=now   Duration=5   Nodes=$def_node   User=$user_name  PartitionName=badpartname}
+	{StartTime=now   Duration=5   Nodes=$def_node   User=$user_name  Flags=badtype}
+	{StartTime=now+10minutes   EndTime=now   Nodes=$def_node   User=$user_name}
+"
+#	{StartTime=now   Duration=5   Nodes=$def_node   Account=badaccountname}
+
+foreach test $badtests {
+	set ret_code [create_res $test 1]
+	if {$ret_code == 0} {
+		send_user "\nFAILURE: Reservation $test did not fail but should have\n"
+		delete_res $res_name
+		exit 1
+	} else {
+		send_user "Expected error.  You can turn that frown upside-down.\n"
+	}
+}
+
+if {[test_super_user] == 0} {
+	send_user "\nWARNING: can not test more unless SlurmUser or root\n"
+	exit $exit_code
+}
+
+set goodtests "
+	{StartTime=now   Duration=5   Nodes=$def_node   User=$user_name}
+	{StartTime=now+5minutes   EndTime=now+10minutes   Nodes=$def_node   User=$user_name}
+	{StartTime=midnight   Duration=600   Nodes=$def_node   User=$user_name}
+	{StartTime=now   Duration=5   Nodes=ALL   User=$user_name}
+	{StartTime=now   Duration=5   NodeCnt=1   User=$user_name}
+	{StartTime=now   Duration=5   Nodes=$def_node   User=$user_name  PartitionName=$def_partition}
+	{StartTime=now   Duration=5   Nodes=$def_node   User=$user_name  Flags=Maint}
+"
+foreach test $goodtests {
+	set ret_code [create_res $test 0]
+	if {$ret_code != 0} {
+		send_user "\nFAILURE: Unable to create a valid reservation\n"
+		exit $ret_code
+	}
+	set ret_code [delete_res $res_name]
+	if {$ret_code != 0} {
+		send_user "\nFAILURE: Unable to delete a reservation\n"
+		exit $ret_code
+	}
+}
+
+
+#
+# TEST 2
+# Create a reservation and update it in various ways
+#
+set ret_code [create_res "StartTime=now+60minutes Duration=60 NodeCnt=1 User=$user_name" 0]
+if {$ret_code != 0} {
+	send_user "\nFAILURE: Unable to create a valid reservation\n"
+	exit $ret_code
+}
+
+set goodupdates "
+	{PartitionName=$def_partition}
+	{PartitionName=}
+	{Duration=90}
+	{StartTime=now+30minutes}
+	{Nodes=$def_node}
+	{EndTime=now+60minutes Flags=Maint NodeCnt=1 Nodes=}
+"
+#	{Flags=Maint}
+#	{Flags=}
+
+if {$user_name != "root"} {
+	lappend goodupdates {Users+=root} {Users-=root}
+}
+
+foreach test $goodupdates {
+	set ret_code [update_res $res_name $test 0]
+	if {$ret_code != 0} {
+		send_user "\nFAILURE: Unable to create a valid reservation\n"
+		set exit_code 1
+		break
+	}
+
+}
+
+set ret_code [delete_res $res_name]
+if {$ret_code != 0} {
+	send_user "\nFAILURE: Unable to delete a reservation\n"
+	exit $ret_code
+}
+
+
+#
+# TEST 3
+# Make a reservation, submit a job to it, confirm that the job is paired 
+# with the reservation.
+#
+
+# Make the reservation
+set ret_code [create_res "StartTime=now+60minutes Duration=60 NodeCnt=1 User=$user_name" 0]
+if {$ret_code != 0} {
+	send_user "\nFAILURE: Unable to create a valid reservation\n"
+	exit $ret_code
+}
+
+# Make the job script
+exec $bin_rm -f $file_in
+make_bash_script $file_in "$bin_sleep 10"
+
+# Submit the batch job
+set sbatch_pid [spawn $sbatch -N1 --reservation=$res_name $file_in]
+expect {
+	-re "Submitted batch job ($number)" {
+		set job_id $expect_out(1,string)
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: sbatch not responding\n"
+		slow_kill $sbatch_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$job_id == 0} {
+	send_user "\nFAILURE: batch submit failure\n"
+	exit 1
+}
+
+# Show the job, make sure reservation tag is right
+spawn $scontrol show job $job_id
+expect {
+	-re "Reservation=($alpha_numeric_under)" {
+		set tmp_res_name $expect_out(1,string)
+		if {$tmp_res_name != $res_name} {
+			send_user "\nFAILURE: problem submitting a job to a "
+			send_user "reservation.  Job $job_id is running on "
+			send_user "reservation $tmp_res_name, not $res_name\n"
+			set exit_code 1
+			exp_continue
+		}
+	}
+	-re "Invalid job id specified" {
+		send_user "\nFAILURE: Job $job_id not found\n"
+		set exit_code 1
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: scontrol not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+# Cancel the job
+spawn $scancel -v $job_id
+expect {
+	-re "Invalid job_id" {
+		send_user "\nFAILURE: Error cancelling the job submitted "
+		send_user "to the reservation.  Job $job_id not found\n"
+		set exit_code 1
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: scancel not responding\n"
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+
+# Delete the reservation
+set ret_code [delete_res $res_name]
+if {$ret_code != 0} {
+	exit $ret_code
+}
+
+
+#
+# TEST 4
+# If not running as root, make a reservation restricted to root, submit a job,
+# and confirm that the job is rejected.
+#
+if {$user_name != "root"} {
+	# Make the reservation
+	set ret_code [create_res "StartTime=now+60minutes Duration=60 NodeCnt=1 User=root" 0]
+	if {$ret_code != 0} {
+		send_user "\nFAILURE: Unable to create a reservation\n"
+		set exit_code 1
+	}
+
+	# Submit the batch job
+	set denied 0
+	set sbatch_pid [spawn $sbatch -N1 --reservation=$res_name $file_in]
+	expect {
+		-re "Submitted batch job ($number)" {
+			set job_id $expect_out(1,string)
+			exec $scancel $job_id
+			send_user "\nFAILURE: job submit should have been denied\n"
+			set exit_code 1
+			exp_continue
+		}
+		-re "Batch job submission failed: Access denied to requested reservation" {
+			# Job was correctly denied
+			set denied 1
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sbatch not responding\n"
+			slow_kill $sbatch_pid
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+
+	if {$denied == 0} {
+		send_user "\nFAILURE: Job $job_id should have been rejected "
+		send_user "from reservation restricted to root.  Expected "
+		send_user "rejection message not given.\n"
+		set exit_code 1
+	} else {
+		send_user "Expected error, no worries mate.\n"
+	}
+	# Delete the reservation
+	set ret_code [delete_res $res_name]
+	if {$ret_code != 0} {
+		exit $ret_code
+	}
+}
+
+# Remove the temporary job script
+exec $bin_rm -f $file_in
+
+if {$exit_code == 0} {
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
diff --git a/testsuite/expect/test3.2 b/testsuite/expect/test3.2
index d354eb1c1..b5b37826f 100755
--- a/testsuite/expect/test3.2
+++ b/testsuite/expect/test3.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test3.3 b/testsuite/expect/test3.3
index 47636f630..a50315e29 100755
--- a/testsuite/expect/test3.3
+++ b/testsuite/expect/test3.3
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test3.4 b/testsuite/expect/test3.4
index cac8b1357..125fd0e89 100755
--- a/testsuite/expect/test3.4
+++ b/testsuite/expect/test3.4
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -128,7 +129,9 @@ if {$new_prio != $read_priority} {
 	set exit_code 1
 }
 
-cancel_job $job_id
+if {[cancel_job $job_id] != 0} {
+	set exit_code 1
+}
 if {$exit_code == 0} {
 	send_user "\nSUCCESS\n"
 }
diff --git a/testsuite/expect/test3.5 b/testsuite/expect/test3.5
index 401d7352b..6e72334e0 100755
--- a/testsuite/expect/test3.5
+++ b/testsuite/expect/test3.5
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -38,6 +39,11 @@ set part_name      "QA_TEST"
 
 print_header $test_id
 
+if {[test_super_user] == 0} {
+	send_user "\nWARNING: can not test more unless SlurmUser or root\n"
+	exit $exit_code
+}
+
 #
 # Confirm the partition name does not already exist
 #
@@ -107,13 +113,8 @@ if {[string compare $def_node ""] == 0} {
 #
 # Create a new partition
 #
-spawn $scontrol update PartitionName=$part_name Nodes=$def_node
+spawn $scontrol create PartitionName=$part_name Nodes=$def_node
 expect {
-	-re "slurm_update error: Invalid user" {
-		send_user "\nWARNING: user not authorized to create partition\n"
-		exit $exit_code
-		exp_continue
-	}
 	-re "error" {
 		send_user "\nFAILURE: something bad happened on partitiion create\n"
 		set exit_code 1
diff --git a/testsuite/expect/test3.6 b/testsuite/expect/test3.6
index 9b4896c65..9fdf7578a 100755
--- a/testsuite/expect/test3.6
+++ b/testsuite/expect/test3.6
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -85,7 +86,13 @@ if {$found == 1} {
 #
 # We only reach this point if a hidden partition must be 
 # created to test this feature, which only super users can do 
-# 
+#
+if {[test_super_user] == 0} {
+	send_user "\nWARNING: can not test more unless SlurmUser or root\n"
+	exit $exit_code
+}
+ 
+#
 # Confirm the partition name does not already exist
 #
 set found -1
@@ -120,13 +127,8 @@ if {$found == 1} {
 #
 # Create a new partition
 #
-spawn $scontrol update PartitionName=$part_name Hidden=YES
+spawn $scontrol create PartitionName=$part_name Hidden=YES
 expect {
-	-re "slurm_update error: Invalid user" {
-		send_user "\nWARNING: user not authorized to create partition\n"
-		exit $exit_code
-		exp_continue
-	}
 	-re "error" {
 		send_user "\nFAILURE: something bad happened on partitiion create\n"
 		set exit_code 1
diff --git a/testsuite/expect/test3.7 b/testsuite/expect/test3.7
index 60f8808e4..cf8088f7f 100755
--- a/testsuite/expect/test3.7
+++ b/testsuite/expect/test3.7
@@ -12,10 +12,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test3.7.prog.c b/testsuite/expect/test3.7.prog.c
index 489c34564..356ee2cb0 100644
--- a/testsuite/expect/test3.7.prog.c
+++ b/testsuite/expect/test3.7.prog.c
@@ -7,10 +7,11 @@
  *  Copyright (C) 2005 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test3.8 b/testsuite/expect/test3.8
index 1d5b4e949..6421c6fbf 100755
--- a/testsuite/expect/test3.8
+++ b/testsuite/expect/test3.8
@@ -14,10 +14,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -84,7 +85,7 @@ if { [test_bluegene] } {
 # Spawn a srun batch job that uses stdout/err and confirm their contents
 #
 set timeout $max_job_delay
-set sbatch_pid [spawn $sbatch -N$node_cnt --output=$file_out --error=$file_err -t1 $file_in]
+set sbatch_pid [spawn $sbatch --requeue -N$node_cnt --output=$file_out --error=$file_err -t1 $file_in]
 expect {
 	-re "Submitted batch job ($number)" {
 		set job_id $expect_out(1,string)
diff --git a/testsuite/expect/test3.9 b/testsuite/expect/test3.9
index c4115ad9c..459853547 100755
--- a/testsuite/expect/test3.9
+++ b/testsuite/expect/test3.9
@@ -10,10 +10,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test4.1 b/testsuite/expect/test4.1
index 3fd1144df..986fefcc3 100755
--- a/testsuite/expect/test4.1
+++ b/testsuite/expect/test4.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test4.10 b/testsuite/expect/test4.10
index 9e9affad6..0a7867791 100755
--- a/testsuite/expect/test4.10
+++ b/testsuite/expect/test4.10
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test4.11 b/testsuite/expect/test4.11
index ca4f488c3..bbd1f5222 100755
--- a/testsuite/expect/test4.11
+++ b/testsuite/expect/test4.11
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test4.2 b/testsuite/expect/test4.2
index b5727a15f..7e09e4c4f 100755
--- a/testsuite/expect/test4.2
+++ b/testsuite/expect/test4.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test4.3 b/testsuite/expect/test4.3
index 3943240cd..7ee122278 100755
--- a/testsuite/expect/test4.3
+++ b/testsuite/expect/test4.3
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test4.4 b/testsuite/expect/test4.4
index 49e714054..85c066fc5 100755
--- a/testsuite/expect/test4.4
+++ b/testsuite/expect/test4.4
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test4.5 b/testsuite/expect/test4.5
index 2c1764035..4f8c93d5d 100755
--- a/testsuite/expect/test4.5
+++ b/testsuite/expect/test4.5
@@ -11,10 +11,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test4.6 b/testsuite/expect/test4.6
index 357ed3570..bdc667ae6 100755
--- a/testsuite/expect/test4.6
+++ b/testsuite/expect/test4.6
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test4.7 b/testsuite/expect/test4.7
index 31e7e3be6..8c5c58a64 100755
--- a/testsuite/expect/test4.7
+++ b/testsuite/expect/test4.7
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test4.8 b/testsuite/expect/test4.8
index e6c9452bd..515c0297b 100755
--- a/testsuite/expect/test4.8
+++ b/testsuite/expect/test4.8
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test4.9 b/testsuite/expect/test4.9
index 8a58ca62d..863574b35 100755
--- a/testsuite/expect/test4.9
+++ b/testsuite/expect/test4.9
@@ -11,10 +11,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test5.1 b/testsuite/expect/test5.1
index df2e4c4b3..f7ee36bdb 100755
--- a/testsuite/expect/test5.1
+++ b/testsuite/expect/test5.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test5.2 b/testsuite/expect/test5.2
index a4c7cd945..d9b3fc2fd 100755
--- a/testsuite/expect/test5.2
+++ b/testsuite/expect/test5.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test5.3 b/testsuite/expect/test5.3
index 85bc7d468..b7ce8fd3a 100755
--- a/testsuite/expect/test5.3
+++ b/testsuite/expect/test5.3
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test5.4 b/testsuite/expect/test5.4
index 9258116b3..78bac6928 100755
--- a/testsuite/expect/test5.4
+++ b/testsuite/expect/test5.4
@@ -11,10 +11,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test5.5 b/testsuite/expect/test5.5
index 34d224e23..b3fc8ebd9 100755
--- a/testsuite/expect/test5.5
+++ b/testsuite/expect/test5.5
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test5.6 b/testsuite/expect/test5.6
index 7d2879d34..22401d5f0 100755
--- a/testsuite/expect/test5.6
+++ b/testsuite/expect/test5.6
@@ -11,10 +11,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test5.7 b/testsuite/expect/test5.7
index f5e0bb32c..b7b70b08b 100755
--- a/testsuite/expect/test5.7
+++ b/testsuite/expect/test5.7
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test5.8 b/testsuite/expect/test5.8
index 51ca309f2..e81731c98 100755
--- a/testsuite/expect/test5.8
+++ b/testsuite/expect/test5.8
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.1 b/testsuite/expect/test6.1
index b983bc731..bbdda4db3 100755
--- a/testsuite/expect/test6.1
+++ b/testsuite/expect/test6.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.10 b/testsuite/expect/test6.10
index 5d321322f..0b2286bcc 100755
--- a/testsuite/expect/test6.10
+++ b/testsuite/expect/test6.10
@@ -14,10 +14,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.11 b/testsuite/expect/test6.11
index 7a8575c57..de4e295b2 100755
--- a/testsuite/expect/test6.11
+++ b/testsuite/expect/test6.11
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.12 b/testsuite/expect/test6.12
index 191eef1b8..f650e68ce 100755
--- a/testsuite/expect/test6.12
+++ b/testsuite/expect/test6.12
@@ -13,10 +13,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.13 b/testsuite/expect/test6.13
index cb3934ca3..5915cd9c6 100755
--- a/testsuite/expect/test6.13
+++ b/testsuite/expect/test6.13
@@ -14,7 +14,8 @@
 # UCRL-CODE-217948.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.14 b/testsuite/expect/test6.14
new file mode 100755
index 000000000..cc0311d30
--- /dev/null
+++ b/testsuite/expect/test6.14
@@ -0,0 +1,195 @@
+#!/usr/bin/expect
+############################################################################
+# Purpose: Test of SLURM functionality
+#          Test scancel --nodelist option.
+#
+# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
+#          "FAILURE: ..." otherwise with an explanation of the failure, OR
+#          anything else indicates a failure mode that must be investigated.
+############################################################################
+# Copyright (C) 2008 Lawrence Livermore National Security
+# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
+# Written by David Bremer <dbremer@llnl.gov>
+# CODE-OCEC-09-009. All rights reserved.
+# 
+# This file is part of SLURM, a resource management program.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
+#  
+# SLURM 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.
+# 
+# SLURM 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 SLURM; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
+############################################################################
+source ./globals
+
+set test_id        "6.14"
+set exit_code      0
+set file_in        "test$test_id.input"
+set num_procs      10
+set ii             0
+set job_id         ""
+set job_map        {}
+set found          0
+set tmp_job_list   {}
+set tmp_map_entry  {}
+set submitted_jobs {}
+set job_list       {}
+set job_index      -1
+
+print_header $test_id
+
+#
+# Build input script file
+#
+make_bash_script $file_in "$srun $bin_sleep 600"
+
+#
+# Submit some jobs so we have something to work with
+#
+set timeout 20
+for {set ii 0} {$ii < $num_procs} {incr ii} {
+	set sbatch_pid [spawn $sbatch --output=/dev/null --error=/dev/null -n1 -N1 $file_in]
+	expect {
+		-re "Submitted batch job ($number)" {
+			set job_id $expect_out(1,string)
+			lappend submitted_jobs $job_id
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sbatch not responding\n"
+			slow_kill $sbatch_pid
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	if {$job_id == 0} {
+		send_user "\nFAILURE: job submit failure\n"
+		exit 1
+	}
+}
+
+#
+# Run squeue and build a map, implemented as a list of list of lists, like so:
+# { {node1  {job1 job2 job3}}
+#   {node2  {job4 job5}}
+# }
+#
+# Only put jobs into the map if they were submitted by this test.
+#
+
+spawn $squeue -h -t running -u $env(USER) -o "%10i %40N"
+expect {
+	-re "($number) *($alpha_numeric) *\r\n" {
+		set job_id $expect_out(1,string)
+		set node_name $expect_out(2,string)
+		
+		#This test doesn't need to track jobs that it didn't submit.
+		if { [lsearch $submitted_jobs $job_id] == -1 } {
+			exp_continue
+		}
+		#send_user "job $job_id: node $node_name\n"
+		#Insert into a table with node_name as the key, job_id as the value
+		set found 0
+		for {set ii 0} {$ii < [llength $job_map]} {incr ii} {
+			if { [lindex [lindex $job_map $ii] 0] == $node_name } {
+				set tmp_map_entry [list $node_name [concat [lindex [lindex $job_map $ii] 1] $job_id]]
+				set job_map [lreplace $job_map $ii $ii $tmp_map_entry]
+				set found 1
+				break
+			}
+		}
+		if {$found == 0} {
+			lappend job_map [list $node_name [list $job_id] ]
+		}
+		exp_continue
+	}
+}
+#send_user "job map: $job_map\n"
+
+
+#
+# Issue an scancel command against each node in the map described above.
+# Remove entries from the internal list, and ensure that the list is
+# empty at the end of the scancel call.
+#
+
+for {set ii 0} {$ii < [llength $job_map]} {incr ii} {
+	set node_name [lindex [lindex $job_map $ii] 0]
+	set job_list  [lindex [lindex $job_map $ii] 1]
+
+	if {$ii == 0} {
+		spawn $scancel -v -u $env(USER) --nodelist $node_name
+	} else {
+		spawn $scancel -v -u $env(USER) -w $node_name
+	}
+	expect {
+		-re "scancel: Terminating job ($number)" {
+			#Search for the terminated job in the list recently
+			#returned from squeue. Don't worry if an unknown job
+			#gets cancelled, because maybe one of our submitted
+			#jobs will start running while we cancel other jobs
+			#Issue cancel commands node by node until all the 
+			#jobs submitted for this test are gone.
+
+			set job_id $expect_out(1,string)
+			set job_index [lsearch $job_list $job_id]
+			if {$job_index != -1} {
+				set job_list [lreplace $job_list $job_index $job_index]
+			} 
+			set job_index [lsearch $submitted_jobs $job_id]
+			if {$job_index != -1} {
+				set submitted_jobs [lreplace $submitted_jobs $job_index $job_index]
+			}
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scancel not responding while cancelling for node $node_name\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+	if { [llength $job_list] != 0 } {
+		send_user "\nFAILURE: scancel did not remove jobs $job_list from node $node_name\n"
+		set exit_code 1
+	}
+}
+
+#
+# Clean up any jobs submitted by this test, which were not mapped to a node,
+# and thus not cancelled in the previous block of code
+#
+
+foreach job_id $submitted_jobs {
+	spawn $scancel $job_id
+	expect {
+		timeout {
+			send_user "\nFAILURE: scancel not responding while cancelling job $job_id\n"
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
+	}
+}
+
+
+
+if {$exit_code == 0} {
+	send_user "\nSUCCESS\n"
+}
+exit $exit_code
+
diff --git a/testsuite/expect/test6.2 b/testsuite/expect/test6.2
index 770dccd3b..3b9418565 100755
--- a/testsuite/expect/test6.2
+++ b/testsuite/expect/test6.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.3 b/testsuite/expect/test6.3
index f9146f72c..44b04e279 100755
--- a/testsuite/expect/test6.3
+++ b/testsuite/expect/test6.3
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -116,7 +117,8 @@ expect {
 
 spawn $scancel --interactive $job_id1
 expect {
-	-re "Job $job_id1 not found" {
+	-re "Kill job error.* $job_id1" {
+		send_user "\nNo worries, error is expected\n"
 		incr matches
 		exp_continue
 	}
diff --git a/testsuite/expect/test6.4 b/testsuite/expect/test6.4
index a8eae405e..06e94eb0d 100755
--- a/testsuite/expect/test6.4
+++ b/testsuite/expect/test6.4
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.5 b/testsuite/expect/test6.5
index 52675a609..5a13b6b68 100755
--- a/testsuite/expect/test6.5
+++ b/testsuite/expect/test6.5
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.6 b/testsuite/expect/test6.6
index ff9a2aa6c..a8d391a11 100755
--- a/testsuite/expect/test6.6
+++ b/testsuite/expect/test6.6
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.7 b/testsuite/expect/test6.7
index bac8f26fe..0362de9f6 100755
--- a/testsuite/expect/test6.7
+++ b/testsuite/expect/test6.7
@@ -10,10 +10,11 @@
 # Copyright (C) 2002-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.8 b/testsuite/expect/test6.8
index 2de2cbbbf..81e356a82 100755
--- a/testsuite/expect/test6.8
+++ b/testsuite/expect/test6.8
@@ -13,10 +13,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test6.9 b/testsuite/expect/test6.9
index c1651e765..41ae263e7 100755
--- a/testsuite/expect/test6.9
+++ b/testsuite/expect/test6.9
@@ -13,10 +13,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test7.1 b/testsuite/expect/test7.1
index dc3a70220..839f807a5 100755
--- a/testsuite/expect/test7.1
+++ b/testsuite/expect/test7.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -39,6 +40,7 @@ set job_id3              0
 set prio1                -1
 set prio2                -1
 set prio3                -1
+set multi                0
 
 print_header $test_id
 
@@ -48,6 +50,12 @@ if {[test_wiki_sched] == 1} {
 	exit $exit_code
 }
 
+# expected outcome is different under multifactor rule
+if { ![string compare [priority_type] multifactor] } {
+	set multi 1
+}
+
+
 make_bash_script "pwd_script" { $bin_pwd }
 
 #
@@ -167,9 +175,16 @@ if {$job_id3 != 0} {
 #
 # Confirm reasonable values for the job priorities
 #
-if {$prio1 <= $prio2} {
-	send_user "\FAILURE: Job priorities are not decreasing: $prio1 <= $prio2 \n"
-	set exit_code 1
+if {$multi} {
+	if {$prio1 != $prio2} {
+		send_user "\FAILURE: Job priorities are not same: $prio1 != $prio2 \n"
+		set exit_code 1
+	}
+} else {
+	if {$prio1 <= $prio2} {
+		send_user "\FAILURE: Job priorities are not decreasing: $prio1 <= $prio2 \n"
+		set exit_code 1
+	}
 }
 if {$prio3 != 0} {
 	send_user "\FAILURE: Held job has non-zero priority: $prio3\n"
diff --git a/testsuite/expect/test7.10 b/testsuite/expect/test7.10
index 61501f53a..00211a098 100755
--- a/testsuite/expect/test7.10
+++ b/testsuite/expect/test7.10
@@ -11,10 +11,11 @@
 # Copyright (C) 2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test7.11 b/testsuite/expect/test7.11
index 1803e22e3..01a04aa9c 100755
--- a/testsuite/expect/test7.11
+++ b/testsuite/expect/test7.11
@@ -7,13 +7,14 @@
 #          "FAILURE: ..." otherwise with an explanation of the failure, OR
 #          anything else indicates a failure mode that must be investigated.
 ############################################################################
-# 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>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -56,7 +57,7 @@ if {[test_aix] == 1} {
 # Build the plugin
 #
 exec $bin_rm -f ${file_prog}.so
-exec $bin_cc -shared -I${slurm_dir}/include -o ${file_prog}.so ${file_prog}.c
+exec $bin_cc -fPIC -shared -I${slurm_dir}/include -o ${file_prog}.so ${file_prog}.c
 
 #
 # Locate slurm.conf's directory, copy the original plugstack.conf file
@@ -66,7 +67,7 @@ log_user 0
 set config_dir ""
 spawn $scontrol show config
 expect {
-	-re "SLURM_CONFIG_FILE.*= (/.*)/slurm.conf" {
+	-re "SLURM_CONF.*= (/.*)/slurm.conf.*SLURM_VERSION" {
 		set config_dir $expect_out(1,string)
 		exp_continue
 	}
@@ -97,6 +98,8 @@ if {[file exists $spank_conf_file]} {
 
 	exec $bin_cp $spank_conf_file $orig_spank_conf
 	exec $bin_cp $spank_conf_file $new_spank_conf
+	exec $bin_chmod 700 $spank_conf_file
+	exec $bin_chmod 700 $new_spank_conf
 } else {
 	exec $bin_cp /dev/null $new_spank_conf
 }
@@ -113,13 +116,19 @@ expect {
 	}
 }
 
+# Allow enough time for configuration file in NFS to be propogated
+# to all nodes of cluster
+exec sleep 60 
+
 #
 # Test of srun help message
 #
 # NOTE: Expect parsing failures have been noted running "$srun --help" 
 #       directly, so we build a script containing a pipe to tail
 #
+
 make_bash_script $file_in "$srun --help | $bin_grep test"
+
 set matches 0
 set srun_pid [spawn $file_in]
 expect {
@@ -145,6 +154,67 @@ if {$matches != 2} {
 	set exit_code 1
 }
 
+#
+# Test of alloc help message
+#
+# NOTE: Expect parsing failures have been noted running "$salloc --help" 
+#       directly, so we build a script containing a pipe to tail
+#
+
+make_bash_script $file_in "$salloc --help | $bin_grep test"
+
+set matches 0
+set srun_pid [spawn $file_in]
+expect {
+	-re "Registered component of slurm test suite" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: salloc not responding\n"
+		slow_kill $srun_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$matches != 1} {
+	send_user "\nFAILURE: spank help message not in salloc help message\n"
+	set exit_code 1
+}
+
+#
+# Test of sbatch help message
+#
+# NOTE: Expect parsing failures have been noted running "$sbatch --help" 
+#       directly, so we build a script containing a pipe to tail
+#
+
+make_bash_script $file_in "$sbatch --help | $bin_grep test"
+
+set matches 0
+set srun_pid [spawn $file_in]
+expect {
+	-re "Registered component of slurm test suite" {
+		incr matches
+		exp_continue
+	}
+	timeout {
+		send_user "\nFAILURE: srun not responding\n"
+		slow_kill $srun_pid
+		set exit_code 1
+	}
+	eof {
+		wait
+	}
+}
+if {$matches != 1} {
+	send_user "\nFAILURE: spank help message not in sbatch help message\n"
+	set exit_code 1
+}
+exec $bin_rm -f $file_in
+
 #
 # Test of locally logged messages().
 # We update the plugstatck.conf in this script since NFS delays may 
@@ -158,8 +228,17 @@ make_bash_script $file_in "
     $bin_cp $orig_spank_conf $spank_conf_file
   fi
 "
-spawn $sbatch -N1 -t1 -o $file_out $file_in
+set matches 0
+spawn $sbatch --test_suite_reg=4 -N1 -t1 -o $file_out $file_in
 expect {
+	-re "_test_opt_process: test_suite: opt_arg=4" {
+		incr matches
+		exp_continue
+	}
+	-re "slurm_spank_exit: opt_arg=4" {
+		incr matches
+		exp_continue
+	}
 	-re timeout {
 		send_user "\nFAILURE: sbatch not responding\n"
 		set exit_code 1
@@ -168,6 +247,10 @@ expect {
 		wait
 	}
 }
+if {$matches != 2} {
+	send_user "\nFAILURE: spank options not processed by sbatch\n"
+	set exit_code 1
+}
 
 # NOTE: spank logs from sbatch and srun would be intermingled here
 if {[wait_for_file $file_out] == 0} {
@@ -213,22 +296,34 @@ if {[wait_for_file $file_out] == 0} {
 #
 if {[wait_for_file $spank_out] == 0} {
 	send_user "\n\n"
-	set matches 0
-	spawn $bin_cat $spank_out
+	set matches        0
+	set matches_sbatch 0
+	set matches_srun   0
+	spawn $bin_sort $spank_out
 	expect {
-		-re "slurm_spank_task_init: opt_arg=5" {
-			incr matches
+		-re "slurm_spank_exit: opt_arg=($number)" {
+			if {$expect_out(1,string) == 4} {
+				incr matches_sbatch
+			}
+			if {$expect_out(1,string) == 5} {
+				incr matches_srun
+			}
 			exp_continue
 		}
-		-re "spank_get_item: my_uid=" {
-			incr matches
+		-re "slurm_spank_task_init: opt_arg=($number)" {
+			if {$expect_out(1,string) == 4} {
+				incr matches_sbatch
+			}
+			if {$expect_out(1,string) == 5} {
+				incr matches_srun
+			}
 			exp_continue
 		}
 		-re "spank_get_item: argv" {
 			incr matches
 			exp_continue
 		}
-		-re "slurm_spank_exit: opt_arg=5" {
+		-re "spank_get_item: my_uid=" {
 			incr matches
 			exp_continue
 		}
@@ -236,8 +331,14 @@ if {[wait_for_file $spank_out] == 0} {
 			wait
 		}
 	}
-	if {$matches != 4} {
-		send_user "\nFAILURE: remote (slurmd) spank plugin failure\n"
+	if {$matches_sbatch != 2} {
+		send_user "\nFAILURE: remote (slurmd) sbatch spank plugin failure ($matches_sbatch)\n"
+		set exit_code 1
+	} elseif {$matches_srun != 2} {
+		send_user "\nFAILURE: remote (slurmd) srun spank plugin failure ($matches_srun)\n"
+		set exit_code 1
+	} elseif {$matches != 4} {
+		send_user "\nFAILURE: remote (slurmd) spank plugin failure ($matches)\n"
 		set exit_code 1
 	} else {
 		send_user "\n remote (slurmd) spank plugin success\n"
diff --git a/testsuite/expect/test7.11.prog.c b/testsuite/expect/test7.11.prog.c
index 9d49ce56b..aab5b3721 100644
--- a/testsuite/expect/test7.11.prog.c
+++ b/testsuite/expect/test7.11.prog.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -43,7 +44,7 @@ static char *opt_out_file = NULL;
 static int _test_opt_process(int val, const char *optarg, int remote);
 
 /*
- *  Provide a --renice=[prio] option to srun:
+ *  Provide a --test_suite=[opt_arg] option to srun:
  */
 struct spank_option spank_options[] =
 {
@@ -73,6 +74,12 @@ static int _test_opt_process(int val, const char *optarg, int remote)
 /*  Called from both srun and slurmd */
 int slurm_spank_init(spank_t sp, int ac, char **av)
 {
+	spank_context_t context;
+
+	context = spank_context();
+	if ((context != S_CTX_LOCAL) && (context != S_CTX_REMOTE) &&
+	    (context != S_CTX_ALLOCATOR))
+		slurm_error("spank_context error");
 	if (spank_option_register(sp, spank_options_reg) != ESPANK_SUCCESS)
 		slurm_error("spank_option_register error");
 	if (spank_remote(sp) && (ac == 1))
diff --git a/testsuite/expect/test7.2 b/testsuite/expect/test7.2
index 6827f4075..bc789cc03 100755
--- a/testsuite/expect/test7.2
+++ b/testsuite/expect/test7.2
@@ -11,10 +11,11 @@
 # Copyright (C) 2005-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test7.2.prog.c b/testsuite/expect/test7.2.prog.c
index e3b2e34df..8f6fad51a 100644
--- a/testsuite/expect/test7.2.prog.c
+++ b/testsuite/expect/test7.2.prog.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2005-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -50,6 +51,7 @@ main (int argc, char **argv)
 {
 	int i, j, rc;
 	int nprocs, procid;
+	int clique_size, *clique_ranks = NULL;
 	char *nprocs_ptr, *procid_ptr;
 	int pmi_rank, pmi_size, kvs_name_len, key_len, val_len;
 	PMI_BOOL initialized;
@@ -120,6 +122,24 @@ main (int argc, char **argv)
 		exit(1);
 	}
 
+	if ((rc = PMI_Get_clique_size(&clique_size)) != PMI_SUCCESS) {
+		printf("FAILURE: PMI_Get_clique_size: %d, task %d\n",
+			rc, pmi_rank);
+		exit(1);
+	}
+	clique_ranks = malloc(sizeof(int) * clique_size);
+	if ((rc = PMI_Get_clique_ranks(clique_ranks, clique_size)) !=
+	     PMI_SUCCESS) {
+		printf("FAILURE: PMI_Get_clique_ranks: %d, task %d\n",
+			rc, pmi_rank);
+		exit(1);
+	}
+#if _DEBUG
+	for (i=0; i<clique_size; i++)
+		printf("PMI_Get_clique_ranks[%d]=%d\n", i, clique_ranks[i]);
+#endif
+	free(clique_ranks);
+
 	if ((rc = PMI_KVS_Get_name_length_max(&kvs_name_len)) != PMI_SUCCESS) {
 		printf("FAILURE: PMI_KVS_Get_name_length_max: %d, task %d\n", 
 			rc, pmi_rank);
diff --git a/testsuite/expect/test7.3 b/testsuite/expect/test7.3
index 07b72d80a..76a3492bc 100755
--- a/testsuite/expect/test7.3
+++ b/testsuite/expect/test7.3
@@ -12,10 +12,11 @@
 # Copyright (C) 2004 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test7.3.io.c b/testsuite/expect/test7.3.io.c
index 0f3917aea..46ca90074 100644
--- a/testsuite/expect/test7.3.io.c
+++ b/testsuite/expect/test7.3.io.c
@@ -9,10 +9,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test7.3.prog.c b/testsuite/expect/test7.3.prog.c
index 0089321c1..bab653f8f 100644
--- a/testsuite/expect/test7.3.prog.c
+++ b/testsuite/expect/test7.3.prog.c
@@ -8,10 +8,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
@@ -144,7 +145,7 @@ int main (int argc, char *argv[])
 	launch->user_managed_io = true; /* This is the key to using
 					  "user managed" IO */
 	
-	if (slurm_step_launch(ctx, "", launch, NULL) != SLURM_SUCCESS) {
+	if (slurm_step_launch(ctx, launch, NULL) != SLURM_SUCCESS) {
 		slurm_perror("slurm_step_launch");
 		rc = 1;
 		goto done;
diff --git a/testsuite/expect/test7.4 b/testsuite/expect/test7.4
index 6ffda3dd6..4461137f7 100755
--- a/testsuite/expect/test7.4
+++ b/testsuite/expect/test7.4
@@ -12,10 +12,11 @@
 # Copyright (C) 2004-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov> and Dong Ang <dahn@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -49,8 +50,8 @@ set exit_code     0
 set test_prog     "test$test_id.prog"
 
 # Note this appears as a single argv value to totalviewcli
-set bulk "set issue_dgo false; dset TV::bulk_launch_enabled true; dset TV::bulk_launch_string {$srun -N%N -n%N --jobid=%J -w`awk -F. \'BEGIN {ORS=\",\"} {if (NR==%N) ORS=\"\"; print \$1}\' %t1` -l -i /dev/null %B/tvdsvr%K -callback_host %H -callback_ports %L -set_pws %P -verbosity %V -working_directory %D %F}"
-set no_bulk       "set issue_dgo false; dset TV::bulk_launch_enabled false"
+set bulk "dset TV::bulk_launch_enabled true; dset TV::bulk_launch_tmpfile1_host_lines %R; dset TV::bulk_launch_string {$srun --jobid=%J -N%N -n%N -w`awk -F. \'BEGIN {ORS=\",\"} {if (NR==%N) ORS=\"\"; print \$1}\' %t1` -l --input=none %B/tvdsvr%K -callback_host %H -callback_ports %L -set_pws %P -verbosity %V -working_directory %D %F}"
+set no_bulk       "dset TV::bulk_launch_enabled false"
 
 print_header $test_id
 
@@ -150,6 +151,10 @@ expect {
 		send "yes\n"
 		exp_continue
 	}
+	-re "Could not open breakpoint file" {
+		send_user "\nNOTE: Breakpoint file error is expected due to known Totalview bug\n"
+		exp_continue
+	}
 	timeout {
 		send_user "\nFAILURE: totalviewcli not responding\n"
 		set exit_code 1
@@ -228,6 +233,10 @@ expect {
 		send "yes\n"
 		exp_continue
 	}
+	-re "Could not open breakpoint file" {
+		send_user "\nNOTE: Breakpoint file error is expected due to known Totalview bug\n"
+		exp_continue
+	}
 	timeout {
 		send_user "\nFAILURE: totalviewcli not responding\n"
 		set exit_code 1
diff --git a/testsuite/expect/test7.4.prog.c b/testsuite/expect/test7.4.prog.c
index fc6881546..e8e7843e5 100644
--- a/testsuite/expect/test7.4.prog.c
+++ b/testsuite/expect/test7.4.prog.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dong Ang <dahn@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test7.6 b/testsuite/expect/test7.6
index dee627741..855e4fa5c 100755
--- a/testsuite/expect/test7.6
+++ b/testsuite/expect/test7.6
@@ -11,10 +11,11 @@
 # Copyright (C) 2004-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov> and Dong Ang <dahn@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -50,7 +51,7 @@ set test_prog     "test$test_id.prog"
 set timeout       $max_job_delay
 
 # Note this appears as a single argv value to totalviewcli
-set no_bulk       "set issue_dgo false; dset TV::bulk_launch_enabled false"
+set no_bulk       "dset TV::bulk_launch_enabled false"
 
 print_header $test_id
 
@@ -180,6 +181,10 @@ expect {
 		send "yes\n"
 		exp_continue
 	}
+	-re "Could not open breakpoint file" {
+		send_user "\nNOTE: Breakpoint file error is expected due to known Totalview bug\n"
+		exp_continue
+	}
 	timeout {
 		send_user "\nFAILURE: totalviewcli not responding\n"
 		set exit_code 1
diff --git a/testsuite/expect/test7.6.prog.c b/testsuite/expect/test7.6.prog.c
index f2afcc281..5df6a573f 100644
--- a/testsuite/expect/test7.6.prog.c
+++ b/testsuite/expect/test7.6.prog.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004-2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dong Ang <dahn@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test7.7 b/testsuite/expect/test7.7
index 7a90ba1cf..4c03e69b0 100755
--- a/testsuite/expect/test7.7
+++ b/testsuite/expect/test7.7
@@ -12,10 +12,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -64,7 +65,7 @@ expect {
 		set sched_wiki 1
 		exp_continue
 	}
-	-re "SLURM_CONFIG_FILE *= (.*)/slurm.conf" {
+	-re "SLURM_CONF *= (.*)/slurm.conf.*SLURM_VERSION" {
 		set conf_dir $expect_out(1,string)
 		exp_continue
 	}
diff --git a/testsuite/expect/test7.7.prog.c b/testsuite/expect/test7.7.prog.c
index 81ba2a5e3..8afd6f1a3 100644
--- a/testsuite/expect/test7.7.prog.c
+++ b/testsuite/expect/test7.7.prog.c
@@ -5,10 +5,11 @@
  *  Copyright (C) 2008 Lawrence Livermore National Security.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test7.8 b/testsuite/expect/test7.8
index e170fa2f7..5918ed78d 100755
--- a/testsuite/expect/test7.8
+++ b/testsuite/expect/test7.8
@@ -12,10 +12,11 @@
 # Copyright (C) 2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -68,7 +69,7 @@ expect {
 		set sched_wiki 1
 		exp_continue
 	}
-	-re "SLURM_CONFIG_FILE *= (.*)/slurm.conf" {
+	-re "SLURM_CONF *= (.*)/slurm.conf.*SLURM_VERSION" {
 		set conf_dir $expect_out(1,string)
 		exp_continue
 	}
diff --git a/testsuite/expect/test7.8.prog.c b/testsuite/expect/test7.8.prog.c
index 4f4011966..8fef8c2b7 100644
--- a/testsuite/expect/test7.8.prog.c
+++ b/testsuite/expect/test7.8.prog.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test7.9 b/testsuite/expect/test7.9
index 1915f4d2d..2f823ee2f 100755
--- a/testsuite/expect/test7.9
+++ b/testsuite/expect/test7.9
@@ -11,10 +11,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test7.9.prog.c b/testsuite/expect/test7.9.prog.c
index dc01a5e24..6b8c0db10 100644
--- a/testsuite/expect/test7.9.prog.c
+++ b/testsuite/expect/test7.9.prog.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test8.1 b/testsuite/expect/test8.1
index 30ef18be3..6bcf8d79b 100755
--- a/testsuite/expect/test8.1
+++ b/testsuite/expect/test8.1
@@ -10,10 +10,11 @@
 # Copyright (C) 2004 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test8.2 b/testsuite/expect/test8.2
index 64f630a12..38f8fc8cd 100755
--- a/testsuite/expect/test8.2
+++ b/testsuite/expect/test8.2
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test8.3 b/testsuite/expect/test8.3
index f5ab3ebbe..25923580e 100755
--- a/testsuite/expect/test8.3
+++ b/testsuite/expect/test8.3
@@ -13,10 +13,11 @@
 # Copyright (C) 2004 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test8.4 b/testsuite/expect/test8.4
index e96045fd0..3a1f8c756 100755
--- a/testsuite/expect/test8.4
+++ b/testsuite/expect/test8.4
@@ -14,10 +14,11 @@
 # Copyright (C) 2004 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test8.4.prog.c b/testsuite/expect/test8.4.prog.c
index c5b704cc8..d5582171c 100644
--- a/testsuite/expect/test8.4.prog.c
+++ b/testsuite/expect/test8.4.prog.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2004 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Dong Ang <dahn@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test8.5 b/testsuite/expect/test8.5
index b86b03569..f13daf78b 100755
--- a/testsuite/expect/test8.5
+++ b/testsuite/expect/test8.5
@@ -1,7 +1,7 @@
 #!/usr/bin/expect
 ############################################################################
 # Purpose: Test of BLUEGENE SLURM functionality
-#          Test sacct functionality and accuracy.
+#          Test creation of all blocks 1 midplane and smaller.
 #
 # Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
 #          "FAILURE: ..." otherwise with an explanation of the failure, OR
@@ -10,10 +10,11 @@
 # Copyright (C) 2006-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -42,225 +43,182 @@ set matches     0
 # job paramters
 set sleep_time 1
 
-print_header $test_id
-
-if {[test_bluegene] == 0} {
-	send_user "\nWARNING: This test is only compatable with bluegene systems\n"
-	exit $exit_code
-}
-#
-# Delete left-over input script files
-# Build input script file
-#
-exec $bin_rm -f $file_in
-exec echo "#!$bin_bash"    >$file_in
-exec echo "$bin_sleep $sleep_time "     >>$file_in
-exec $bin_chmod 700 $file_in
-
-#
-set timeout [expr $max_job_delay + $sleep_time]
+proc run_and_test { size } {
+	global number sbatch scontrol 
+	global file_out file_err file_in procs_per_cnode
 
-# make a 512 cnode block
+	set job_id 0
+	set exit_code 0
 
-set sbatch_pid [spawn $sbatch --output=$file_out --error=$file_err -t2 -N512-512 $file_in]
-expect {
-	-re "Submitted batch job ($number)" {
-		set job_id $expect_out(1,string)
-		exp_continue
-	}
-	timeout {
-		send_user "\nFAILURE: sbatch not responding\n"
-		slow_kill $sbatch_pid
-		exit 1
+	set sbatch_pid [spawn $sbatch --output=$file_out --error=$file_err -t2 -N$size-$size $file_in]
+	expect {
+		-re "Submitted batch job ($number)" {
+			set job_id $expect_out(1,string)
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: sbatch not responding\n"
+			slow_kill $sbatch_pid
+			set exit_code 1
+		}
+		eof {
+			wait
+		}
 	}
-	eof {
-		wait
+
+	if {!$job_id || $exit_code} {
+		send_user "\nFAILURE: batch submit failure\n"
+		return 1
 	}
-}
-if {$job_id == 0} {
-	send_user "\nFAILURE: batch submit failure\n"
-	exit 1
-}
 
-#
-# Wait for job to run
-#
-if {[wait_for_job $job_id "DONE"] != 0} {
-	send_user "\nFAILURE: waiting for job to run\n"
-	set exit_code 1
-}
+	#
+	# Wait for job to run
+	#
+	if {[wait_for_job $job_id "DONE"] != 0} {
+		send_user "\nFAILURE: waiting for job to run\n"
+		return 1
+	}
 
-set matches 0
-set cpus_per_node 1
+	set matches 0
+	set requested_cpus [expr $size * $procs_per_cnode]
 
-spawn $scontrol show job $job_id
-expect {
-	-re "BP_List=$alpha_numeric " {
-		incr matches
-		exp_continue
-	}
-	-re "AllocCPUs=($number)" {
-		set cpu_count $expect_out(1,string)
-		set cpus_per_node [expr $cpu_count / 512]
-		if {($cpu_count != 512) && ($cpu_count != 1024)} {
-			send_user "\nFAILURE: Bad node count allocated\n"
+	set scon_pid [spawn $scontrol show job $job_id]
+	expect {
+		-re "AllocCPUs=$requested_cpus" {
+			incr matches
+			exp_continue
+		}
+		timeout {
+			send_user "\nFAILURE: scontrol not responding\n"
+			slow_kill $scon_pid
 			set exit_code 1
 		}
-		exp_continue
+		eof {
+			wait
+		}
 	}
-	timeout {
-		send_user "\nFAILURE: scontrol not responding\n"
+	if {$matches != 1} {
+		send_user "\nFAILURE: Bluegene $size cnode block not created correctly\n"
 		set exit_code 1
 	}
-	eof {
-		wait
-	}
-}
-if {$matches != 1} {
-	send_user "\nFAILURE: Blue Gene 512 cnode block not created correctly\n"
-	set exit_code 1
-}
-if {$exit_code != 0} {
-	exit $exit_code
+	
+	
+	return $exit_code
 }
 
-# make a 128 cnode block
-
+proc run_bgl_test { } {
+	global psets
 
-set sbatch_pid [spawn $sbatch --output=$file_out --error=$file_err -t2 -N128-128 $file_in]
-expect {
-	-re "Submitted batch job ($number)" {
-		set job_id $expect_out(1,string)
-		exp_continue
+	# make a 512 cnode block
+	if {[run_and_test 512]} {
+		return 1
 	}
-	timeout {
-		send_user "\nFAILURE: sbatch not responding\n"
-		slow_kill $sbatch_pid
-		exit 1
+
+	if {[run_and_test 128]} {
+		return 1
 	}
-	eof {
-		wait
+
+	if {$psets >= 16} {
+		if {[run_and_test 32]} {
+			return 1
+		}
 	}
-}
-if {$job_id == 0} {
-	send_user "\nFAILURE: batch submit failure\n"
-	exit 1
-}
 
-#
-# Wait for job to run
-#
-if {[wait_for_job $job_id "DONE"] != 0} {
-	send_user "\nFAILURE: waiting for job to run\n"
-	set exit_code 1
+	return 0;
 }
 
-set matches 0
 
-spawn $scontrol show job $job_id
-expect {
-	-re "BP_List=$alpha_numeric\[$number-$number\] " {
-		incr matches
-		exp_continue
+proc run_bgp_test { } {
+	global psets
+
+	# make a 512 cnode block
+	if {[run_and_test 512]} {
+		return 1
 	}
-	-re "AllocCPUs=($number)" {
-		set cpu_count $expect_out(1,string)
-		set node_count [expr $cpu_count / $cpus_per_node]
-		if {$node_count != 128} {
-			send_user "\n=======================================\n"
-			send_user "\nFAILURE: Bad node count allocated\n"
-			send_user "This can indicate a low configured value of Numpsets\n"
-			send_user "  in bluegene.conf (few available I/O nodes).\n"
-			send_user "This could indicate Static Bluegene partitioning\n"
-			send_user "  with no small blocks (1/4 of a base partition).\n"
-			send_user "This could also indicate MinNodes for the partition\n"
-			send_user "  being too high for this test.\n"
-			send_user "=======================================\n"
-			set exit_code 1
-		}
-		exp_continue
+
+	if {[run_and_test 256]} {
+		return 1
 	}
-	timeout {
-		send_user "\nFAILURE: scontrol not responding\n"
-		set exit_code 1
+	if {[run_and_test 128]} {
+		return 1
 	}
-	eof {
-		wait
+
+	if {$psets >= 8} {
+		if {[run_and_test 64]} {
+			return 1
+		}
+		if {$psets >= 16} {
+			if {[run_and_test 32]} {
+				return 1
+			}
+			if {$psets >= 32} {
+				if {[run_and_test 16]} {
+					return 1
+				}
+			}
+		}
 	}
+	return 0;
+}
+
+# TEST STARTS HERE
+
+print_header $test_id
+
+if {[test_bluegene] == 0} {
+	send_user "\nWARNING: This test is only compatable with bluegene systems\n"
+	exit $exit_code
 }
-if {$matches != 1} {
-	send_user "\nFAILURE: Blue Gene 128 cnode block not created correctly\n"
-	set exit_code 1
+
+if {[string compare [get_bluegene_layout] Dynamic]} {
+	send_user "\nWARNING: This test is only compatable with dynamic bluegene systems\n"
+	exit $exit_code
 }
 
-# make a 32 cnode block
+set psets [get_bluegene_psets]
 
-set sbatch_pid [spawn $sbatch --output=$file_out --error=$file_err -t2 -N32-32 $file_in]
-expect {
-	-re "Submitted batch job ($number)" {
-		set job_id $expect_out(1,string)
-		exp_continue
-	}
-	timeout {
-		send_user "\nFAILURE: sbatch not responding\n"
-		slow_kill $sbatch_pid
-		exit 1
-	}
-	eof {
-		wait
-	}
+if {$psets == 0} {
+	send_user "\nFAILURE: No psets are set on this system\n"
+	exit 1
 }
-if {$job_id == 0} {
-	send_user "\nFAILURE: batch submit failure\n"
+
+set procs_per_cnode [get_bluegene_procs_per_cnode]
+
+if {$procs_per_cnode == 0} {
+	send_user "\nFAILURE: Couldn't determine procs per cnode\n"
 	exit 1
 }
 
+set type [get_bluegene_type]
+
+if {$type == 0} {
+	send_user "\nFAILURE: No bluegene type found \n"
+	exit 1
+}
+
+
 #
-# Wait for job to run
+# Delete left-over input script files
+# Build input script file
 #
-if {[wait_for_job $job_id "DONE"] != 0} {
-	send_user "\nFAILURE: waiting for job to run\n"
-	set exit_code 1
-}
+exec $bin_rm -f $file_in
+exec echo "#!$bin_bash"    >$file_in
+exec echo "$bin_sleep $sleep_time "     >>$file_in
+exec $bin_chmod 700 $file_in
 
-set matches 0
-spawn $scontrol show job $job_id
-expect {
-#	Could be one or multiple node cards (e.g. "bgl000[0]" or "bgl000[0-1]")
-	-re "BP_List=$alpha_numeric\[$number" {
-		incr matches
-		exp_continue
-	}
-	-re "AllocCPUs=($number)" {
-		set cpu_count $expect_out(1,string)
-		set node_count [expr $cpu_count / $cpus_per_node]
-		if {$node_count != 32} {
-			send_user "\n=======================================\n"
-			send_user "FAILURE: Bad node count allocated\n"
-			send_user "This can indicate a low configured value of Numpsets\n"
-			send_user "  in bluegene.conf (few available I/O nodes).\n"
-			send_user "This could indicate Static Bluegene partitioning\n"
-			send_user "  with no small blocks (1/16 of a base partition).\n"
-			send_user "This could also indicate MinNodes for the partition\n"
-			send_user "  being too high for this test.\n"
-			send_user "=======================================\n"
-			set exit_code 1
-		}
-		exp_continue
-	}
-	timeout {
-		send_user "\nFAILURE: scontrol not responding\n"
-		set exit_code 1
-	}
-	eof {
-		wait
-	}
-}
-if {$matches != 1} {
-	send_user "\nFAILURE: Blue Gene 32 cnode block not created correctly\n"
-	set exit_code 1
+#
+set timeout [expr $max_job_delay + $sleep_time]
+
+if {![string compare $type "P"]} {
+	set exit_code [run_bgp_test]
+} elseif {![string compare $type "L"]} {
+	set exit_code [run_bgl_test]
+} else {
+	send_user "\nFAILURE: unknown bluegene system type '$type'\n";
+	exit 1
 }
 
+
 if {$exit_code == 0} {
 	exec rm -f $file_in $file_out $file_err
 	send_user "\nSUCCESS\n"
diff --git a/testsuite/expect/test8.6 b/testsuite/expect/test8.6
index 9b78b162f..5992ea06f 100755
--- a/testsuite/expect/test8.6
+++ b/testsuite/expect/test8.6
@@ -1,7 +1,7 @@
 #!/usr/bin/expect
 ############################################################################
 # Purpose: Test of BLUEGENE SLURM functionality
-#          Test sacct functionality and accuracy.
+#          Stress test Dynamic mode block creation.
 #
 # Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
 #          "FAILURE: ..." otherwise with an explanation of the failure, OR
@@ -11,10 +11,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Danny Auble <da@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -37,31 +38,13 @@ set exit_code   0
 set file_in     "test$test_id.input"
 set job_id      0
 set matches     0
-set 32node_block_cnt 16
-set 128node_block_cnt 8
-set 512node_block_cnt 8
-set 1knode_block_cnt  8
-set 4knode_block_cnt  8
-set 8knode_block_cnt  8
-set 16knode_block_cnt 8
-set 32knode_block_cnt 8
 
 # job paramters
 set sleep_time  5
 
-print_header $test_id
-
-if {[test_bluegene] == 0} {
-	send_user "\nWARNING: This test is only compatable with bluegene systems\n"
-	exit $exit_code
-}
-
-make_bash_script $file_in "$bin_sleep $sleep_time"
-set timeout [expr $max_job_delay + $sleep_time]
-
 # make a bunch of blocks of the specified size (node_cnt)
-proc run_batch_jobs { node_cnt job_cnt file_in } {
-	global sbatch srun number kill_srun
+proc run_batch_jobs { node_cnt job_cnt } {
+	global sbatch number file_in
 	set start_cnt 0	
 	for {set inx 0} {$inx < $job_cnt} {incr inx} {
 		set sbatch_pid [spawn $sbatch --output=/dev/null -t5 -N$node_cnt-$node_cnt $file_in]
@@ -96,16 +79,13 @@ proc run_batch_jobs { node_cnt job_cnt file_in } {
 			}
 		}
 	}
-	if { $start_cnt != $job_cnt } {
-		return 0
-	} else {
-		return 1
-	}	
+	
+	return $start_cnt
 }
 
 # Wait up to 900 seconds for all jobs to terminate
 # Return 0 if all jobs done, remainin job count otherwise
-proc wait_for_all_jobs { job_name } {
+proc wait_for_all_jobs { } {
 	global scancel squeue bin_sleep file_in
 
 	set last_matches 0
@@ -115,7 +95,7 @@ proc wait_for_all_jobs { job_name } {
 		log_user 0
 		spawn $squeue -o %j
 		expect {
-			-re "$job_name" {
+			-re "$file_in" {
 				incr matches
 				exp_continue
 			}
@@ -151,77 +131,188 @@ proc wait_for_all_jobs { job_name } {
 	return $matches
 }
 
-#
-# Run the jobs here. We can be reasonably sure of running 
-# 512 cnode jobs (one midplane). Other sizes may not be supported
-# due to architecture (I/O node count) and/or slurm configuration
-#
-if {[run_batch_jobs 32 $32node_block_cnt $file_in ] == 0} {
-	send_user "\nFAILURE: 32 cnodes can't be created\n"
-	set exit_code 1	
-}
+proc run_bgl_test { } {
+	global psets num_nodes
 
-if {[run_batch_jobs 128 $128node_block_cnt $file_in ] == 0} {
-	send_user "\nFAILURE: 128 cnodes can't be created\n"
-	set exit_code 1	
-}
+	set 32node_block_cnt 16
+	set 128node_block_cnt 8
+	set 512node_block_cnt 16
+	set 1knode_block_cnt  8
+	set 4knode_block_cnt  8
+	set 8knode_block_cnt  4
+	set 16knode_block_cnt 4
+	set 32knode_block_cnt 4
+	set started 0
+	if {$psets >= 16} {
+		incr started [run_batch_jobs 32 $32node_block_cnt]
+	}
+	
+	incr started [run_batch_jobs 128 $128node_block_cnt]	
+	incr started [run_batch_jobs 512 $512node_block_cnt]	
+	
+	if {$num_nodes >= 1024} {
+		incr started [run_batch_jobs 1k $1knode_block_cnt]
+		if {$num_nodes >= 4096} {
+			incr started [run_batch_jobs 4k $4knode_block_cnt]
+			if {$num_nodes >= 8192} {
+				incr started [run_batch_jobs 8k $8knode_block_cnt]
+				if {$num_nodes >= 16384} {
+					incr started [run_batch_jobs 16k $16knode_block_cnt]
+					if {$num_nodes >= 32768} {
+						incr started [run_batch_jobs 32k $1knode_block_cnt]
+					}
+				}
+			}
+		}
+		incr started [run_batch_jobs 1k $1knode_block_cnt]
+	}
 
-if {[run_batch_jobs 512 $512node_block_cnt $file_in ] != 1} {
-	send_user "\nFAILURE: 512 cnodes can't be created\n"
-	set exit_code 1	
-}
+	incr started [run_batch_jobs 512 $512node_block_cnt]	
+
+	incr started [run_batch_jobs 128 $128node_block_cnt]
+
+	if {$psets >= 16} {
+		incr started [run_batch_jobs 32 $32node_block_cnt]
+	}
 
-if {[run_batch_jobs 1k $1knode_block_cnt $file_in ] == 0} {
-	send_user "\nFAILURE: 1k cnodes can't be created\n"
-	set exit_code 1	
+	incr started [run_batch_jobs 512 $512node_block_cnt]	
+
+	return $started;
 }
 
-if {[run_batch_jobs 4k $4knode_block_cnt $file_in ] == 0} {
-	send_user "\nFAILURE: 4k cnodes can't be created\n"
-	set exit_code 1	
+
+proc run_bgp_test { } {
+	global psets num_nodes
+
+	set 16node_block_cnt 32
+	set 32node_block_cnt 16
+	set 64node_block_cnt 8
+	set 128node_block_cnt 8
+	set 256node_block_cnt 8
+	set 512node_block_cnt 16
+	set 1knode_block_cnt  8
+	set 4knode_block_cnt  8
+	set 8knode_block_cnt  4
+	set 16knode_block_cnt 4
+	set 32knode_block_cnt 4
+	set started 0
+
+	if {$psets >= 32} {
+		incr started [run_batch_jobs 16 $16node_block_cnt]
+	}
+
+	if {$psets >= 16} {
+		incr started [run_batch_jobs 32 $32node_block_cnt]
+	}
+	if {$psets >= 8} {
+		incr started [run_batch_jobs 64 $64node_block_cnt]
+	}
+	
+	incr started [run_batch_jobs 128 $128node_block_cnt]	
+	incr started [run_batch_jobs 256 $256node_block_cnt]	
+	incr started [run_batch_jobs 512 $512node_block_cnt]	
+	
+	if {$num_nodes >= 1024} {
+		incr started [run_batch_jobs 1k $1knode_block_cnt]
+		if {$num_nodes >= 4096} {
+			incr started [run_batch_jobs 4k $4knode_block_cnt]
+			if {$num_nodes >= 8192} {
+				incr started [run_batch_jobs 8k $8knode_block_cnt]
+				if {$num_nodes >= 16384} {
+					incr started [run_batch_jobs 16k $16knode_block_cnt]
+					if {$num_nodes >= 32768} {
+						incr started [run_batch_jobs 32k $1knode_block_cnt]
+					}
+				}
+			}
+		}
+		incr started [run_batch_jobs 1k $1knode_block_cnt]
+	}
+
+	incr started [run_batch_jobs 512 $512node_block_cnt]	
+	incr started [run_batch_jobs 256 $256node_block_cnt]	
+	incr started [run_batch_jobs 128 $128node_block_cnt]
+	if {$psets >= 8} {
+		incr started [run_batch_jobs 64 $64node_block_cnt]
+	}
+
+	if {$psets >= 16} {
+		incr started [run_batch_jobs 32 $32node_block_cnt]
+	}
+
+	if {$psets >= 32} {
+		incr started [run_batch_jobs 16 $16node_block_cnt]
+	}
+
+	incr started [run_batch_jobs 512 $512node_block_cnt]	
+
+	return $started;
 }
 
-if {[run_batch_jobs 8k $8knode_block_cnt $file_in ] == 0} {
-	send_user "\nFAILURE: 8k cnodes can't be created\n"
-	set exit_code 1	
+
+# TEST STARTS HERE
+
+print_header $test_id
+
+if {[test_bluegene] == 0} {
+	send_user "\nWARNING: This test is only compatable with bluegene systems\n"
+	exit $exit_code
 }
 
-if {[run_batch_jobs 16k $16knode_block_cnt $file_in ] == 0} {
-	send_user "\nFAILURE: 16k cnodes can't be created\n"
-	set exit_code 1	
+if {[string compare [get_bluegene_layout] Dynamic]} {
+	send_user "\nWARNING: This test is only compatable with dynamic bluegene systems\n"
+	exit $exit_code
 }
 
-if {[run_batch_jobs 32k $32knode_block_cnt $file_in ] == 0} {
-	send_user "\nFAILURE: 32k cnodes can't be created\n"
-	set exit_code 1	
+set psets [get_bluegene_psets]
+
+if {$psets == 0} {
+	send_user "\nFAILURE: No psets are set on this system\n"
+	exit 1
 }
 
-if {[run_batch_jobs 1k $1knode_block_cnt $file_in ] == 0} {
-	send_user "\nFAILURE: 1k cnodes can't be created\n"
-	set exit_code 1	
+set num_nodes [expr [get_node_cnt] * [get_bluegene_cnodes_per_mp]] 
+if {$num_nodes == 0} {
+	send_user "\nFAILURE: No nodes are found on this system\n"
+	exit 1
 }
 
-if {[run_batch_jobs 512 $512node_block_cnt $file_in ] != 1} {
-	send_user "\nFAILURE: 512 cnodes can't be created\n"
-	set exit_code 1	
+set procs_per_cnode [get_bluegene_procs_per_cnode]
+
+if {$procs_per_cnode == 0} {
+	send_user "\nFAILURE: Couldn't determine procs per cnode\n"
+	exit 1
 }
 
-if {[run_batch_jobs 128 $128node_block_cnt $file_in ] == 0} {
-	send_user "\nFAILURE: 128 cnodes can't be created\n"
-	set exit_code 1	
+set type [get_bluegene_type]
+
+if {$type == 0} {
+	send_user "\nFAILURE: No bluegene type found \n"
+	exit 1
 }
 
-if {[run_batch_jobs 32 $32node_block_cnt $file_in ] == 0} {
-	send_user "\nFAILURE: 32 cnodes can't be created\n"
-	set exit_code 1	
+
+make_bash_script $file_in "$bin_sleep $sleep_time"
+set timeout [expr $max_job_delay + $sleep_time]
+
+
+if {![string compare $type "P"]} {
+	set started [run_bgp_test]
+} elseif {![string compare $type "L"]} {
+	set started [run_bgl_test]
+} else {
+	send_user "\nFAILURE: unknown bluegene system type '$type'\n";
+	exit 1
 }
 
-if {[run_batch_jobs 512 $512node_block_cnt $file_in ] == 0} {
-	send_user "\nFAILURE: 512 cnodes can't be created\n"
-	set exit_code 1	
+if {!$started} {
+	send_user "\nFAILURE: No jobs were started\n";
+	exit 1
 }
 
-if {[wait_for_all_jobs $file_in] != 0} {
+send_user "Started $started jobs\n"
+
+if {[wait_for_all_jobs] != 0} {
 	send_user "\nFAILURE: some submitted jobs failed to terminate\n"
 	set exit_code 1
 }
diff --git a/testsuite/expect/test8.7 b/testsuite/expect/test8.7
index 2f59d6b71..fffbf968d 100755
--- a/testsuite/expect/test8.7
+++ b/testsuite/expect/test8.7
@@ -10,10 +10,11 @@
 # Copyright (C) 2006-2007 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -97,7 +98,7 @@ expect {
 		set is_bluegene 1
 		exp_continue
 	}
-	-re "SLURM_CONFIG_FILE *= (.*)/slurm.conf" {
+	-re "SLURM_CONF *= (.*)/slurm.conf" {
 		set conf_dir $expect_out(1,string)
 		exp_continue
 	}
diff --git a/testsuite/expect/test8.7.prog.c b/testsuite/expect/test8.7.prog.c
index 58b6c373a..8c13b76ec 100644
--- a/testsuite/expect/test8.7.prog.c
+++ b/testsuite/expect/test8.7.prog.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2006-2007 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov>
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *  
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *  
  *  SLURM 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
diff --git a/testsuite/expect/test9.1 b/testsuite/expect/test9.1
index a567fd837..4512b0d18 100755
--- a/testsuite/expect/test9.1
+++ b/testsuite/expect/test9.1
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test9.2 b/testsuite/expect/test9.2
index 7d0ef733f..52bfc1e4c 100755
--- a/testsuite/expect/test9.2
+++ b/testsuite/expect/test9.2
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test9.3 b/testsuite/expect/test9.3
index 63b497653..110acc032 100755
--- a/testsuite/expect/test9.3
+++ b/testsuite/expect/test9.3
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test9.4 b/testsuite/expect/test9.4
index 46fc81406..38fbdbcc4 100755
--- a/testsuite/expect/test9.4
+++ b/testsuite/expect/test9.4
@@ -18,10 +18,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test9.5 b/testsuite/expect/test9.5
index 83004e005..e86c152e6 100755
--- a/testsuite/expect/test9.5
+++ b/testsuite/expect/test9.5
@@ -10,10 +10,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test9.6 b/testsuite/expect/test9.6
index 346e22f6c..dd11aef62 100755
--- a/testsuite/expect/test9.6
+++ b/testsuite/expect/test9.6
@@ -13,10 +13,11 @@
 # Copyright (C) 2008 Lawrence Livermore National Security.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test9.7 b/testsuite/expect/test9.7
index fee330413..5f266a5de 100755
--- a/testsuite/expect/test9.7
+++ b/testsuite/expect/test9.7
@@ -10,10 +10,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test9.7.bash b/testsuite/expect/test9.7.bash
index 15d53995b..716b89d7b 100755
--- a/testsuite/expect/test9.7.bash
+++ b/testsuite/expect/test9.7.bash
@@ -7,10 +7,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+ # Please also read the supplied file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/expect/test9.8 b/testsuite/expect/test9.8
index de7eacac2..aeb0d8d23 100755
--- a/testsuite/expect/test9.8
+++ b/testsuite/expect/test9.8
@@ -13,10 +13,11 @@
 # Copyright (C) 2002-2006 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+# Please also read the included file: DISCLAIMER.
 #  
 # SLURM 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
@@ -38,7 +39,7 @@ set test_id      "9.8"
 set exit_code    0
 set file_in      "test$test_id.input"
 set job_cnt      10
-set delay        5
+set delay        10
 set job_name     "test$test_id"
 set sleep_time   300
 set task_cnt     60
@@ -60,7 +61,7 @@ if {[test_front_end] != 0} {
 #   This is especially important on very slow systems (e.g. AIX).
 #
 make_bash_script $file_in "
-$bin_sleep $delay
+$bin_sleep 5
 for ((inx=0; inx < $task_cnt; inx++)) ; do
         $srun -N1 -n1 $bin_sleep $sleep_time &
 done
@@ -71,7 +72,7 @@ $srun -N1 -n1 $bin_sleep $sleep_time
 # Initiate $job_cnt batch jobs
 #
 set start_cnt 0
-set timeout $delay
+set timeout 30
 for {set inx 0} {$inx < $job_cnt} {incr inx} {
 	set sbatch_pid [spawn $sbatch --job-name=$job_name --output=/dev/null --error=/dev/null -t5 $file_in]
 	expect {
@@ -84,22 +85,20 @@ for {set inx 0} {$inx < $job_cnt} {incr inx} {
 			exp_continue
 		}
 		timeout {
-			send_user "\nFAILURE: srun not responding\n"
+			send_user "\nFAILURE: sbatch not responding\n"
 			slow_kill $sbatch_pid
-			exit 1
+			set exit_code 1
 		}
 		eof {
 			wait
 		}
 	}
 }
-if {$start_cnt < 1} {
-	send_user "\nFAILURE: no jobs submitted\n"
-	exit 1
-}
 if {$start_cnt < $job_cnt} {
-	send_user "\nFAILURE: not all jobs submitted\n"
+	send_user "\nFAILURE: $job_cnt of $start_cnt jobs submitted\n"
 	set exit_code 1
+} else {
+	send_user "\nAll $start_cnt jobs submitted\n"
 }
 
 #
@@ -185,8 +184,9 @@ expect {
 # If message are lost, slurmctld re-sends job kill RPC 120 seconds later
 # In any case, make sure that all jobs get completed
 #
-exec $bin_sleep 10
+exec $bin_sleep     10
 set completing_jobs 0
+set running_jobs    0
 spawn $squeue --noheader --user $user_name
 expect {
 	-re "test9.8.*$user_name *CG" {
@@ -194,13 +194,31 @@ expect {
 		exp_continue
 	}
 	-re "test9.8.*$user_name" {
-		send_user "\nFAILURE: jobs not all gone\n"
-		set exit_code 1
+		incr running_jobs
+		exp_continue
 	}
 	eof {
 		wait
 	}
 }
+#
+# The following logic handles the scancel request failing
+# due to a very busy system (reports FAILURE above)
+#
+# Increasing the MessageTimeout configuration parameter
+# should fix this problem. 
+#
+if {$running_jobs != 0} {
+	send_user "\nFAILURE: jobs not all cancelled\n"
+	set exit_code 1
+
+	spawn $scancel --quiet --user $user_name
+	expect {
+		eof {
+			wait
+		}
+	}
+}
 if {$completing_jobs != 0} {
 	send_user "\nWaiting for slurmctld to re-send job kill RPC\n"
 	send_user "This will take 120 seconds...\n"
@@ -208,7 +226,7 @@ if {$completing_jobs != 0} {
 	set completing_jobs 0
 	spawn $squeue --noheader --user $user_name
 	expect {
-		-re "$user_name *CG" {
+		-re "$job_name *$user_name *CG" {
 			incr completing_jobs
 			exp_continue
 		}
@@ -228,7 +246,7 @@ if {$completing_jobs != 0} {
 		exec $bin_sleep $max_wait
 		spawn $squeue --noheader --user $user_name
 		expect {
-			-re "$user_name *CG" {
+			-re "$job_name *$user_name *CG" {
 				incr completing_jobs
 				exp_continue
 			}
diff --git a/testsuite/expect/usleep b/testsuite/expect/usleep
index 5759a4602..c6011dac6 100755
--- a/testsuite/expect/usleep
+++ b/testsuite/expect/usleep
@@ -7,10 +7,11 @@
 # Copyright (C) 2002 The Regents of the University of California.
 # Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 # Written by Morris Jette <jette1@llnl.gov>
-# LLNL-CODE-402394.
+# CODE-OCEC-09-009. All rights reserved.
 # 
 # This file is part of SLURM, a resource management program.
-# For details, see <http://www.llnl.gov/linux/slurm/>.
+# For details, see <https://computing.llnl.gov/linux/slurm/>.
+ # Please also read the supplied file: DISCLAIMER.
 #  
 # SLURM 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
diff --git a/testsuite/slurm_unit/Makefile.in b/testsuite/slurm_unit/Makefile.in
index 9d159aef3..a2f37a610 100644
--- a/testsuite/slurm_unit/Makefile.in
+++ b/testsuite/slurm_unit/Makefile.in
@@ -40,14 +40,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -89,6 +93,10 @@ 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@
diff --git a/testsuite/slurm_unit/api/Makefile.in b/testsuite/slurm_unit/api/Makefile.in
index e8658e20a..190d3fc6e 100644
--- a/testsuite/slurm_unit/api/Makefile.in
+++ b/testsuite/slurm_unit/api/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -109,6 +113,10 @@ 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@
diff --git a/testsuite/slurm_unit/api/manual/Makefile.in b/testsuite/slurm_unit/api/manual/Makefile.in
index 650f48ce1..b54026a38 100644
--- a/testsuite/slurm_unit/api/manual/Makefile.in
+++ b/testsuite/slurm_unit/api/manual/Makefile.in
@@ -44,14 +44,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -131,6 +135,10 @@ 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@
diff --git a/testsuite/slurm_unit/api/manual/cancel-tst.c b/testsuite/slurm_unit/api/manual/cancel-tst.c
index 8fce7808d..82b0da815 100644
--- a/testsuite/slurm_unit/api/manual/cancel-tst.c
+++ b/testsuite/slurm_unit/api/manual/cancel-tst.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et.al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/testsuite/slurm_unit/api/manual/complete-tst.c b/testsuite/slurm_unit/api/manual/complete-tst.c
index 06926437d..8503202e8 100644
--- a/testsuite/slurm_unit/api/manual/complete-tst.c
+++ b/testsuite/slurm_unit/api/manual/complete-tst.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et.al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/testsuite/slurm_unit/api/manual/job_info-tst.c b/testsuite/slurm_unit/api/manual/job_info-tst.c
index 967e42088..e799cd4a5 100644
--- a/testsuite/slurm_unit/api/manual/job_info-tst.c
+++ b/testsuite/slurm_unit/api/manual/job_info-tst.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et.al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/testsuite/slurm_unit/api/manual/node_info-tst.c b/testsuite/slurm_unit/api/manual/node_info-tst.c
index 9db08b49a..fe8becdca 100644
--- a/testsuite/slurm_unit/api/manual/node_info-tst.c
+++ b/testsuite/slurm_unit/api/manual/node_info-tst.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et.al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/testsuite/slurm_unit/api/manual/partition_info-tst.c b/testsuite/slurm_unit/api/manual/partition_info-tst.c
index c75d98a26..a83a3bbf4 100644
--- a/testsuite/slurm_unit/api/manual/partition_info-tst.c
+++ b/testsuite/slurm_unit/api/manual/partition_info-tst.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et.al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/testsuite/slurm_unit/api/manual/reconfigure-tst.c b/testsuite/slurm_unit/api/manual/reconfigure-tst.c
index 2064b77fd..d3a39d7b3 100644
--- a/testsuite/slurm_unit/api/manual/reconfigure-tst.c
+++ b/testsuite/slurm_unit/api/manual/reconfigure-tst.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et.al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/testsuite/slurm_unit/api/manual/submit-tst.c b/testsuite/slurm_unit/api/manual/submit-tst.c
index f4b54bb32..b2b38623e 100644
--- a/testsuite/slurm_unit/api/manual/submit-tst.c
+++ b/testsuite/slurm_unit/api/manual/submit-tst.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et.al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/testsuite/slurm_unit/api/manual/update_config-tst.c b/testsuite/slurm_unit/api/manual/update_config-tst.c
index 637622a8f..dbb09de28 100644
--- a/testsuite/slurm_unit/api/manual/update_config-tst.c
+++ b/testsuite/slurm_unit/api/manual/update_config-tst.c
@@ -4,10 +4,11 @@
  *  Copyright (C) 2002 The Regents of the University of California.
  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
  *  Written by Morris Jette <jette1@llnl.gov> et.al.
- *  LLNL-CODE-402394.
+ *  CODE-OCEC-09-009. All rights reserved.
  *
  *  This file is part of SLURM, a resource management program.
- *  For details, see <http://www.llnl.gov/linux/slurm/>.
+ *  For details, see <https://computing.llnl.gov/linux/slurm/>.
+ *  Please also read the included file: DISCLAIMER.
  *
  *  SLURM 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
diff --git a/testsuite/slurm_unit/common/Makefile.in b/testsuite/slurm_unit/common/Makefile.in
index 0c177c639..5b1b10a3a 100644
--- a/testsuite/slurm_unit/common/Makefile.in
+++ b/testsuite/slurm_unit/common/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -117,6 +121,10 @@ 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@
diff --git a/testsuite/slurm_unit/slurmctld/Makefile.in b/testsuite/slurm_unit/slurmctld/Makefile.in
index 5591b6517..17ec87503 100644
--- a/testsuite/slurm_unit/slurmctld/Makefile.in
+++ b/testsuite/slurm_unit/slurmctld/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -80,6 +84,10 @@ 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@
diff --git a/testsuite/slurm_unit/slurmd/Makefile.in b/testsuite/slurm_unit/slurmd/Makefile.in
index 340fcc85a..6f8eefdbc 100644
--- a/testsuite/slurm_unit/slurmd/Makefile.in
+++ b/testsuite/slurm_unit/slurmd/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -80,6 +84,10 @@ 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@
diff --git a/testsuite/slurm_unit/slurmdbd/Makefile.in b/testsuite/slurm_unit/slurmdbd/Makefile.in
index a96834972..67d452a3e 100644
--- a/testsuite/slurm_unit/slurmdbd/Makefile.in
+++ b/testsuite/slurm_unit/slurmdbd/Makefile.in
@@ -42,14 +42,18 @@ am__aclocal_m4_deps = $(top_srcdir)/auxdir/acx_pthread.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 \
@@ -80,6 +84,10 @@ 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@
-- 
GitLab