diff --git a/slurm/slurm.h.in b/slurm/slurm.h.in
index a9e7cd1ce81a217945e15bf3468026337eb453d9..465d04087705169009403a2506e7200e2bd2bb68 100644
--- a/slurm/slurm.h.in
+++ b/slurm/slurm.h.in
@@ -1052,6 +1052,13 @@ extern void * slurm_list_next PARAMS((ListIterator i));
  */
 extern void slurm_list_sort PARAMS((List l, ListCmpF f));
 
+/* slurm_list_pop():
+ *
+ *  Pops the data item at the top of the stack [l].
+ *  Returns the data's ptr, or NULL if the stack is empty.
+ */
+extern void * slurm_list_pop PARAMS((List l));
+
 /*****************************************************************************\
  *      SLURM BITSTR FUNCTIONS
 \*****************************************************************************/
diff --git a/slurm/slurmdb.h b/slurm/slurmdb.h
index 0b2ca48ff0a87cba1bd6516650d69755e0ff7980..0835d6f4592205b4587d79c6d5f42b97e695336e 100644
--- a/slurm/slurmdb.h
+++ b/slurm/slurmdb.h
@@ -1279,8 +1279,66 @@ extern List slurmdb_reservations_get(void *db_conn,
  */
 extern List slurmdb_txn_get(void *db_conn, slurmdb_txn_cond_t *txn_cond);
 
+/*
+ * Get information about requested cluster(s). Similar to
+ * slurmdb_clusters_get, but should be used when setting up the
+ * working_cluster_rec.  It replaces the plugin_id_select with
+ * the position of the id in the select plugin array, as well as sets up the
+ * control_addr and dim_size parts of the structure.
+ *
+ * IN: cluster_names - comman separated string of cluster names
+ * RET: List of slurmdb_cluster_rec_t *
+ * note List needs to bbe freed with slurm_list_destroy() when called
+ */
+extern List slurmdb_get_info_cluster(char *cluster_names);
 
 /************** helper functions **************/
+extern void slurmdb_destroy_user_defs(void *object);
+extern void slurmdb_destroy_user_rec(void *object);
+extern void slurmdb_destroy_account_rec(void *object);
+extern void slurmdb_destroy_coord_rec(void *object);
+extern void slurmdb_destroy_clus_res_rec(void *object);
+extern void slurmdb_destroy_cluster_accounting_rec(void *object);
+extern void slurmdb_destroy_cluster_rec(void *object);
+extern void slurmdb_destroy_accounting_rec(void *object);
+extern void slurmdb_destroy_association_rec(void *object);
+extern void slurmdb_destroy_event_rec(void *object);
+extern void slurmdb_destroy_job_rec(void *object);
+extern void slurmdb_destroy_qos_rec(void *object);
+extern void slurmdb_destroy_reservation_rec(void *object);
+extern void slurmdb_destroy_step_rec(void *object);
+extern void slurmdb_destroy_res_rec(void *object);
+extern void slurmdb_destroy_txn_rec(void *object);
+extern void slurmdb_destroy_wckey_rec(void *object);
+extern void slurmdb_destroy_archive_rec(void *object);
+extern void slurmdb_destroy_report_assoc_rec(void *object);
+extern void slurmdb_destroy_report_user_rec(void *object);
+extern void slurmdb_destroy_report_cluster_rec(void *object);
+
+extern void slurmdb_destroy_user_cond(void *object);
+extern void slurmdb_destroy_account_cond(void *object);
+extern void slurmdb_destroy_cluster_cond(void *object);
+extern void slurmdb_destroy_association_cond(void *object);
+extern void slurmdb_destroy_event_cond(void *object);
+extern void slurmdb_destroy_job_cond(void *object);
+extern void slurmdb_destroy_job_modify_cond(void *object);
+extern void slurmdb_destroy_qos_cond(void *object);
+extern void slurmdb_destroy_reservation_cond(void *object);
+extern void slurmdb_destroy_res_cond(void *object);
+extern void slurmdb_destroy_txn_cond(void *object);
+extern void slurmdb_destroy_wckey_cond(void *object);
+extern void slurmdb_destroy_archive_cond(void *object);
+
+extern void slurmdb_destroy_update_object(void *object);
+extern void slurmdb_destroy_used_limits(void *object);
+extern void slurmdb_destroy_update_shares_rec(void *object);
+extern void slurmdb_destroy_print_tree(void *object);
+extern void slurmdb_destroy_hierarchical_rec(void *object);
+extern void slurmdb_destroy_selected_step(void *object);
+
+extern void slurmdb_destroy_report_job_grouping(void *object);
+extern void slurmdb_destroy_report_acct_grouping(void *object);
+extern void slurmdb_destroy_report_cluster_grouping(void *object);
 
 extern void slurmdb_init_association_rec(slurmdb_association_rec_t *assoc,
 					 bool free_it);
@@ -1298,6 +1356,7 @@ extern void slurmdb_init_cluster_cond(slurmdb_cluster_cond_t *cluster,
 				      bool free_it);
 extern void slurmdb_init_res_cond(slurmdb_res_cond_t *cluster,
 				  bool free_it);
+
 /* The next two functions have pointers to assoc_list so do not
  * destroy assoc_list before using the list returned from this function.
  */
diff --git a/src/common/slurmdb_defs.h b/src/common/slurmdb_defs.h
index ec729c7cbd04888c7bda750081cb46e1e2533206..1def7d20fa2e942944f413743e5a39dec56124c4 100644
--- a/src/common/slurmdb_defs.h
+++ b/src/common/slurmdb_defs.h
@@ -55,70 +55,6 @@
 extern slurmdb_step_rec_t *slurmdb_create_step_rec();
 extern slurmdb_job_rec_t *slurmdb_create_job_rec();
 
-extern void slurmdb_destroy_user_defs(void *object);
-extern void slurmdb_destroy_user_rec(void *object);
-extern void slurmdb_destroy_account_rec(void *object);
-extern void slurmdb_destroy_coord_rec(void *object);
-extern void slurmdb_destroy_clus_res_rec(void *object);
-extern void slurmdb_destroy_cluster_accounting_rec(void *object);
-extern void slurmdb_destroy_cluster_rec(void *object);
-extern void slurmdb_destroy_accounting_rec(void *object);
-extern void slurmdb_destroy_association_rec(void *object);
-extern void slurmdb_destroy_event_rec(void *object);
-extern void slurmdb_destroy_job_rec(void *object);
-extern void slurmdb_destroy_qos_rec(void *object);
-extern void slurmdb_destroy_reservation_rec(void *object);
-extern void slurmdb_destroy_step_rec(void *object);
-extern void slurmdb_destroy_res_rec(void *object);
-extern void slurmdb_destroy_txn_rec(void *object);
-extern void slurmdb_destroy_wckey_rec(void *object);
-extern void slurmdb_destroy_archive_rec(void *object);
-extern void slurmdb_destroy_report_assoc_rec(void *object);
-extern void slurmdb_destroy_report_user_rec(void *object);
-extern void slurmdb_destroy_report_cluster_rec(void *object);
-
-extern void slurmdb_destroy_user_cond(void *object);
-extern void slurmdb_destroy_account_cond(void *object);
-extern void slurmdb_destroy_cluster_cond(void *object);
-extern void slurmdb_destroy_association_cond(void *object);
-extern void slurmdb_destroy_event_cond(void *object);
-extern void slurmdb_destroy_job_cond(void *object);
-extern void slurmdb_destroy_job_modify_cond(void *object);
-extern void slurmdb_destroy_qos_cond(void *object);
-extern void slurmdb_destroy_reservation_cond(void *object);
-extern void slurmdb_destroy_res_cond(void *object);
-extern void slurmdb_destroy_txn_cond(void *object);
-extern void slurmdb_destroy_wckey_cond(void *object);
-extern void slurmdb_destroy_archive_cond(void *object);
-
-extern void slurmdb_destroy_update_object(void *object);
-extern void slurmdb_destroy_used_limits(void *object);
-extern void slurmdb_destroy_update_shares_rec(void *object);
-extern void slurmdb_destroy_print_tree(void *object);
-extern void slurmdb_destroy_hierarchical_rec(void *object);
-extern void slurmdb_destroy_selected_step(void *object);
-
-extern void slurmdb_destroy_report_job_grouping(void *object);
-extern void slurmdb_destroy_report_acct_grouping(void *object);
-extern void slurmdb_destroy_report_cluster_grouping(void *object);
-
-extern void slurmdb_init_association_rec(slurmdb_association_rec_t *assoc,
-					 bool free_it);
-extern void slurmdb_init_clus_res_rec(slurmdb_clus_res_rec_t *clus_res,
-				      bool free_it);
-extern void slurmdb_init_cluster_rec(slurmdb_cluster_rec_t *cluster,
-				     bool free_it);
-extern void slurmdb_init_qos_rec(slurmdb_qos_rec_t *qos,
-				 bool free_it);
-extern void slurmdb_init_res_rec(slurmdb_res_rec_t *res,
-				 bool free_it);
-extern void slurmdb_init_wckey_rec(slurmdb_wckey_rec_t *wckey,
-				   bool free_it);
-
-extern void slurmdb_init_cluster_cond(slurmdb_cluster_cond_t *cluster,
-				      bool free_it);
-
-extern List slurmdb_get_info_cluster(char *cluster_name);
 extern char *slurmdb_qos_str(List qos_list, uint32_t level);
 extern uint32_t str_2_slurmdb_qos(List qos_list, char *level);
 extern char *slurmdb_qos_flags_str(uint32_t flags);
diff --git a/src/db_api/Makefile.am b/src/db_api/Makefile.am
index 48e6486d670ccf17465e732f6c1a66c84d1d32f9..84f1425122793c2921d455838c5fadc3a3f5be75 100644
--- a/src/db_api/Makefile.am
+++ b/src/db_api/Makefile.am
@@ -95,6 +95,7 @@ $(VERSION_SCRIPT) :
 	(echo "{ global:";   \
 	 echo "   slurm_*;"; \
 	 echo "   slurmdb_*;"; \
+	 echo "   working_cluster_rec;"; \
 	 echo "  local: *;"; \
 	 echo "};") > $(VERSION_SCRIPT)
 
diff --git a/src/db_api/Makefile.in b/src/db_api/Makefile.in
index 67f2f9b854f97b0bd0f12de4f5693a6de504b7d8..578696a36f9cb1b3dfea846c2efefffc83433772 100644
--- a/src/db_api/Makefile.in
+++ b/src/db_api/Makefile.in
@@ -915,6 +915,7 @@ $(VERSION_SCRIPT) :
 	(echo "{ global:";   \
 	 echo "   slurm_*;"; \
 	 echo "   slurmdb_*;"; \
+	 echo "   working_cluster_rec;"; \
 	 echo "  local: *;"; \
 	 echo "};") > $(VERSION_SCRIPT)