diff --git a/opensm/osm_perfmgr_db.c b/opensm/osm_perfmgr_db.c
index 238081b..ab6c978 100644
--- a/opensm/osm_perfmgr_db.c
+++ b/opensm/osm_perfmgr_db.c
@@ -413,6 +413,9 @@ perfmgr_db_add_err_reading(perfmgr_db_t * db, uint64_t guid, uint8_t port,
 
 	p_port->err_previous = *reading;
 
+	/* mark the time this total was updated */
+	p_port->err_total.time = reading->time;
+
 	osm_opensm_report_event(db->perfmgr->osm, OSM_EVENT_ID_PORT_ERRORS,
 				&epi_pe_data);
 
@@ -540,6 +543,9 @@ perfmgr_db_add_dc_reading(perfmgr_db_t * db, uint64_t guid, uint8_t port,
 
 	p_port->dc_previous = *reading;
 
+	/* mark the time this total was updated */
+	p_port->dc_total.time = reading->time;
+
 	osm_opensm_report_event(db->perfmgr->osm,
 				OSM_EVENT_ID_PORT_DATA_COUNTERS, &epi_dc_data);
 
@@ -647,6 +653,7 @@ static void dump_node_mr(db_node_t * node, FILE * fp)
 	int i = 0;
 
 	fprintf(fp, "\nName\tGUID\tActive\tPort\tLast Reset\t"
+		"Last Error Update\tLast Data Update\t"
 		"%s\t%s\t"
 		"%s\t%s\t%s\t%s\t%s\t%s\t%s\t"
 		"%s\t%s\t%s\t%s\t%s\t%s\t%s\t"
@@ -672,15 +679,22 @@ static void dump_node_mr(db_node_t * node, FILE * fp)
 		"multicast_xmit_pkts",
 		"multicast_rcv_pkts");
 	for (i = (node->esp0) ? 0 : 1; i < node->num_ports; i++) {
-		char *since = ctime(&node->ports[i].last_reset);
+		char lr[128];
+		char *last_reset = ctime_r(&node->ports[i].last_reset, lr);
+		char leu[128];
+		char *last_err_update = ctime_r(&node->ports[i].err_total.time, leu);
+		char ldu[128];
+		char *last_data_update = ctime_r(&node->ports[i].dc_total.time, ldu);
 
 		if (!node->ports[i].valid)
 			continue;
 
-		since[strlen(since) - 1] = '\0';	/* remove \n */
+		last_reset[strlen(last_reset) - 1] = '\0';	/* remove \n */
+		last_err_update[strlen(last_err_update) - 1] = '\0';	/* remove \n */
+		last_data_update[strlen(last_data_update) - 1] = '\0';	/* remove \n */
 
 		fprintf(fp,
-			"%s\t0x%" PRIx64 "\t%s\t%d\t%s\t%" PRIu64 "\t%" PRIu64 "\t"
+			"%s\t0x%" PRIx64 "\t%s\t%d\t%s\t%s\t%s\t%" PRIu64 "\t%" PRIu64 "\t"
 			"%" PRIu64 "\t%" PRIu64 "\t%" PRIu64 "\t%" PRIu64 "\t"
 			"%" PRIu64 "\t%" PRIu64 "\t%" PRIu64 "\t" "%" PRIu64
 			"\t%" PRIu64 "\t%" PRIu64 "\t" "%" PRIu64 "\t%" PRIu64
@@ -688,7 +702,7 @@ static void dump_node_mr(db_node_t * node, FILE * fp)
 			"\t%" PRIu64 "\t%" PRIu64 "\n", node->node_name,
 			node->node_guid,
 			node->active ? "TRUE" : "FALSE",
-			i, since,
+			i, last_reset, last_err_update, last_data_update,
 			node->ports[i].err_total.symbol_err_cnt,
 			node->ports[i].err_total.link_err_recover,
 			node->ports[i].err_total.link_downed,
@@ -780,12 +794,20 @@ static void dump_node_hr(db_node_t * node, FILE * fp, char *port, int err_only)
 		}
 	}
 	for (/* set above */; i < num_ports; i++) {
-		char *since = ctime(&node->ports[i].last_reset);
+		char lr[128];
+		char *last_reset = ctime_r(&node->ports[i].last_reset, lr);
+		char leu[128];
+		char *last_err_update = ctime_r(&node->ports[i].err_total.time, leu);
+		char ldu[128];
+		char *last_data_update = ctime_r(&node->ports[i].dc_total.time, ldu);
 
 		if (!node->ports[i].valid)
 			continue;
 
-		since[strlen(since) - 1] = '\0';	/* remove \n */
+		last_reset[strlen(last_reset) - 1] = '\0';	/* remove \n */
+		last_err_update[strlen(last_err_update) - 1] = '\0';	/* remove \n */
+		last_data_update[strlen(last_data_update) - 1] = '\0';	/* remove \n */
+
 		perfmgr_db_err_reading_t *err = &node->ports[i].err_total;
 
 		if (err_only
@@ -803,9 +825,12 @@ static void dump_node_hr(db_node_t * node, FILE * fp, char *port, int err_only)
 		    && err->vl15_dropped == 0)
 			continue;
 
-		fprintf(fp, "\"%s\" 0x%" PRIx64 " active %s port %d (Since %s)\n",
+		fprintf(fp, "\"%s\" 0x%" PRIx64 " active %s port %d\n"
+				    "     Last Reset           : %s\n"
+				    "     Last Error Update    : %s\n",
 			node->node_name, node->node_guid,
-			node->active ? "TRUE":"FALSE", i, since);
+			node->active ? "TRUE":"FALSE", i, last_reset,
+			last_err_update);
 
 		if (!err_only || err->symbol_err_cnt != 0)
 			fprintf(fp, "     symbol_err_cnt       : %" PRIu64 "\n",
@@ -844,6 +869,8 @@ static void dump_node_hr(db_node_t * node, FILE * fp, char *port, int err_only)
 			fprintf(fp, "     vl15_dropped         : %" PRIu64 "\n",
 				err->vl15_dropped);
 
+		fprintf(fp, "     Last Data Update     : %s\n",
+			last_data_update);
 		fprintf(fp, "     xmit_data            : %" PRIu64,
 			node->ports[i].dc_total.xmit_data);
 		dump_hr_dc(fp, node->ports[i].dc_total.xmit_data, 1);
