diff --git a/NEWS b/NEWS
index e214f7edbab59b0a99536cddd86456153e33c22a..a2551cb2b7f98c18953aabf5f7439b7362670773 100644
--- a/NEWS
+++ b/NEWS
@@ -205,6 +205,11 @@ documents those changes that are of interest to users and admins.
  -- Fix bug when updating a pending job's nice value after explicitly setting
     it's priority.
  -- We no longer add blank QOS'
+ -- Fix task affinity for systems running fastschedule!=0 and they have less 
+    resources configured than in existence.
+ -- Slurm.pm loads without warning now on AIX systems
+ -- modified pmi code to do strncpy's on the correct len
+ -- Fix for filling in a qos structure to return SLURM_SUCCESS on success.
 
 * Changes in SLURM 2.0.4
 ========================
diff --git a/contribs/perlapi/libslurm-perl/Slurm.pm b/contribs/perlapi/libslurm-perl/Slurm.pm
index 3a7416a7fdb26f6e7eafcc4790e27c08aca3aa26..a4d55b6e7c8adbf655977008d699d8434e19137d 100644
--- a/contribs/perlapi/libslurm-perl/Slurm.pm
+++ b/contribs/perlapi/libslurm-perl/Slurm.pm
@@ -222,7 +222,7 @@ require DynaLoader;
 push @ISA, 'DynaLoader';
 bootstrap Slurm $VERSION;
 
-sub dl_load_flags {0x01}
+sub dl_load_flags { if($^O eq 'aix') { 0x00 } else { 0x01 }}
 
 ############################################################
 # Preloaded methods go here.
diff --git a/slurm.spec b/slurm.spec
index ba19d515e5a645917c1eca479457104c9cf63369..61a65082156c48cf5b67efd2a7a876a17a21c68a 100644
--- a/slurm.spec
+++ b/slurm.spec
@@ -407,6 +407,7 @@ rm -rf $RPM_BUILD_ROOT
 %{_libdir}/slurm/src/*
 %{_mandir}/man1/*
 %{_mandir}/man5/slurm.*
+%{_mandir}/man5/topology.*
 %{_mandir}/man5/wiki.*
 %{_mandir}/man8/slurmctld.*
 %{_mandir}/man8/slurmd.*
diff --git a/src/api/pmi.c b/src/api/pmi.c
index 549226efa9478fc1ca864fc553656a5d40bf3b2a..87082bef8e69df2e9fe42e0fbbe4d4ae138c7afb 100644
--- a/src/api/pmi.c
+++ b/src/api/pmi.c
@@ -1141,8 +1141,9 @@ static int _kvs_put( const char kvsname[], const char key[], const char value[],
 			rc = PMI_FAIL;	/* malloc error */
 		else {
 			rc = PMI_SUCCESS;
-			strncpy(kvs_recs[i].kvs_values[j], value, PMI_MAX_VAL_LEN);
-			strncpy(kvs_recs[i].kvs_keys[j],   key,   PMI_MAX_KEY_LEN);
+			strncpy(kvs_recs[i].kvs_values[j], value, 
+				PMI_MAX_VAL_LEN);
+			strncpy(kvs_recs[i].kvs_keys[j], key, PMI_MAX_KEY_LEN);
 		}
 		goto fini;
 	}
@@ -1307,13 +1308,14 @@ int PMI_KVS_Get( const char kvsname[], const char key[], char value[], int lengt
 		if (strncmp(kvs_recs[i].kvs_name, kvsname, PMI_MAX_KVSNAME_LEN))
 			continue;
 		for (j=0; j<kvs_recs[i].kvs_cnt; j++) {
-			if (strncmp(kvs_recs[i].kvs_keys[j], key, PMI_MAX_KEY_LEN))
+			if (strncmp(kvs_recs[i].kvs_keys[j], key,
+				    PMI_MAX_KEY_LEN))
 				continue;
 			if (strlen(kvs_recs[i].kvs_values[j]) > (length-1))
 				rc = PMI_ERR_INVALID_LENGTH;
 			else {
 				strncpy(value, kvs_recs[i].kvs_values[j], 
-					PMI_MAX_VAL_LEN);
+					length);
 				rc = PMI_SUCCESS;
 			}
 			goto fini;
@@ -1390,9 +1392,10 @@ int PMI_KVS_Iter_first(const char kvsname[], char key[], int key_len, char val[]
 			rc = PMI_ERR_INVALID_VAL_LENGTH;
 		} else {
 			strncpy(key, kvs_recs[i].kvs_keys[kvs_recs[i].kvs_inx], 
-				PMI_MAX_KEY_LEN);
-			strncpy(val, kvs_recs[i].kvs_values[kvs_recs[i].kvs_inx],
-				PMI_MAX_VAL_LEN);
+				key_len);
+			strncpy(val,
+				kvs_recs[i].kvs_values[kvs_recs[i].kvs_inx],
+				val_len);
 			rc = PMI_SUCCESS;
 		}
 		goto fini;
@@ -1467,9 +1470,10 @@ int PMI_KVS_Iter_next(const char kvsname[], char key[], int key_len,
 			rc = PMI_ERR_INVALID_VAL_LENGTH;
 		} else {
 			strncpy(key, kvs_recs[i].kvs_keys[kvs_recs[i].kvs_inx],
-				PMI_MAX_KEY_LEN);
-			strncpy(val, kvs_recs[i].kvs_values[kvs_recs[i].kvs_inx],
-				PMI_MAX_VAL_LEN);
+				key_len);
+			strncpy(val, 
+				kvs_recs[i].kvs_values[kvs_recs[i].kvs_inx],
+				val_len);
 			rc = PMI_SUCCESS;
 		}
 		goto fini;
@@ -1569,7 +1573,8 @@ specific arguments in the args array, this function may parse more than one
 argument as long as the options are contiguous in the args array.
 
 @*/
-int PMI_Parse_option(int num_args, char *args[], int *num_parsed, PMI_keyval_t **keyvalp, 
+int PMI_Parse_option(int num_args, char *args[], int *num_parsed,
+		     PMI_keyval_t **keyvalp, 
 		int *size)
 {
 	int i, n, s, len;
diff --git a/src/common/assoc_mgr.c b/src/common/assoc_mgr.c
index d8f9d7fca4afa2efc19f998a4d4cea96f9bdd387..abb90f607c4c4a239f5acd728d163fac8abe99ce 100644
--- a/src/common/assoc_mgr.c
+++ b/src/common/assoc_mgr.c
@@ -1210,7 +1210,7 @@ extern int assoc_mgr_fill_in_qos(void *db_conn, acct_qos_rec_t *qos,
 		qos->user_limit_list = found_qos->user_limit_list;
 
 	slurm_mutex_unlock(&assoc_mgr_qos_lock);
-	return SLURM_ERROR;
+	return SLURM_SUCCESS;
 }
 
 extern int assoc_mgr_fill_in_wckey(void *db_conn, acct_wckey_rec_t *wckey,