diff --git a/gfio.c b/gfio.c
index 86723a4..15bf8f8 100644
--- a/gfio.c
+++ b/gfio.c
@@ -599,23 +599,79 @@
 	entry = new_info_entry_in_frame(box, "Minor faults");
 	entry_set_int_value(entry, ts->minf);
 }
+static void gfio_add_sc_depths_tree(GtkListStore *model,
+				    struct thread_stat *ts, unsigned int len,
+				    int submit)
+{
+	double io_u_dist[FIO_IO_U_MAP_NR];
+	GtkTreeIter iter;
+	/* Bits 0, and 3-8 */
+	const int add_mask = 0x1f9;
+	int i, j;
+
+	if (submit)
+		stat_calc_dist(ts->io_u_submit, ts->total_submit, io_u_dist);
+	else
+		stat_calc_dist(ts->io_u_complete, ts->total_complete, io_u_dist);
+
+	gtk_list_store_append(model, &iter);
+
+	gtk_list_store_set(model, &iter, 0, submit ? "Submit" : "Complete", -1);
+
+	for (i = 1, j = 0; i < len; i++) {
+		char fbuf[32];
+
+		if (!(add_mask & (1UL << (i - 1))))
+			sprintf(fbuf, "0.0%%");
+		else {
+			sprintf(fbuf, "%3.1f%%", io_u_dist[j]);
+			j++;
+		}
+
+		gtk_list_store_set(model, &iter, i, fbuf, -1);
+	}
+
+}
+
+static void gfio_add_total_depths_tree(GtkListStore *model,
+				       struct thread_stat *ts, unsigned int len)
+{
+	double io_u_dist[FIO_IO_U_MAP_NR];
+	GtkTreeIter iter;
+	/* Bits 1-6, and 8 */
+	const int add_mask = 0x17e;
+	int i, j;
+
+	stat_calc_dist(ts->io_u_map, ts_total_io_u(ts), io_u_dist);
+
+	gtk_list_store_append(model, &iter);
+
+	gtk_list_store_set(model, &iter, 0, "Total", -1);
+
+	for (i = 1, j = 0; i < len; i++) {
+		char fbuf[32];
+
+		if (!(add_mask & (1UL << (i - 1))))
+			sprintf(fbuf, "0.0%%");
+		else {
+			sprintf(fbuf, "%3.1f%%", io_u_dist[j]);
+			j++;
+		}
+
+		gtk_list_store_set(model, &iter, i, fbuf, -1);
+	}
+
+}
 
 static void gfio_show_io_depths(GtkWidget *vbox, struct thread_stat *ts)
 {
-	double io_u_dist[FIO_IO_U_MAP_NR];
-	double io_u_dist_s[FIO_IO_U_MAP_NR];
-	double io_u_dist_c[FIO_IO_U_MAP_NR];
 	GtkWidget *frame, *box, *tree_view;
 	GtkTreeSelection *selection;
 	GtkListStore *model;
-	GtkTreeIter iter;
 	GType types[FIO_IO_U_MAP_NR + 1];
 	int i;
-	const char *labels[] = { "Type", "0", "4", "8", "16", "32", "64", ">= 64" };
-
-	stat_calc_dist(ts->io_u_map, ts_total_io_u(ts), io_u_dist);
-	stat_calc_dist(ts->io_u_submit, ts->total_submit, io_u_dist_s);
-	stat_calc_dist(ts->io_u_complete, ts->total_complete, io_u_dist_c);
+#define NR_LABELS	10
+	const char *labels[NR_LABELS] = { "Depth", "0", "1", "2", "4", "8", "16", "32", "64", ">= 64" };
 
 	frame = gtk_frame_new("IO depths");
 	gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5);
@@ -623,10 +679,10 @@
 	box = gtk_hbox_new(FALSE, 3);
 	gtk_container_add(GTK_CONTAINER(frame), box);
 
-	for (i = 0; i < FIO_IO_U_MAP_NR + 1; i++)
+	for (i = 0; i < NR_LABELS; i++)
 		types[i] = G_TYPE_STRING;
 
-	model = gtk_list_store_newv(FIO_IO_U_MAP_NR + 1, types);
+	model = gtk_list_store_newv(NR_LABELS, types);
 
 	tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
 	gtk_widget_set_can_focus(tree_view, FALSE);
@@ -634,50 +690,12 @@
 	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
 	gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_BROWSE);
 
-	for (i = 0; i < FIO_IO_U_MAP_NR + 1; i++)
+	for (i = 0; i < NR_LABELS; i++)
 		tree_view_column(tree_view, i, labels[i], ALIGN_RIGHT | UNSORTABLE);
 
-	gtk_list_store_append(model, &iter);
-
-	for (i = 0; i < FIO_IO_U_MAP_NR + 1; i++) {
-		char fbuf[32];
-
-		if (i == 0) {
-			gtk_list_store_set(model, &iter, i, "Total", -1);
-			continue;
-		}
-
-		sprintf(fbuf, "%3.1f%%", io_u_dist[i - 1]);
-		gtk_list_store_set(model, &iter, i, fbuf, -1);
-	}
-
-	gtk_list_store_append(model, &iter);
-
-	for (i = 0; i < FIO_IO_U_MAP_NR + 1; i++) {
-		char fbuf[32];
-
-		if (i == 0) {
-			gtk_list_store_set(model, &iter, i, "Submit", -1);
-			continue;
-		}
-
-		sprintf(fbuf, "%3.1f%%", io_u_dist_s[i - 1]);
-		gtk_list_store_set(model, &iter, i, fbuf, -1);
-	}
-
-	gtk_list_store_append(model, &iter);
-
-	for (i = 0; i < FIO_IO_U_MAP_NR + 1; i++) {
-		char fbuf[32];
-
-		if (i == 0) {
-			gtk_list_store_set(model, &iter, i, "Complete", -1);
-			continue;
-		}
-
-		sprintf(fbuf, "%3.1f%%", io_u_dist_c[i - 1]);
-		gtk_list_store_set(model, &iter, i, fbuf, -1);
-	}
+	gfio_add_total_depths_tree(model, ts, NR_LABELS);
+	gfio_add_sc_depths_tree(model, ts, NR_LABELS, 1);
+	gfio_add_sc_depths_tree(model, ts, NR_LABELS, 0);
 
 	gtk_box_pack_start(GTK_BOX(box), tree_view, TRUE, FALSE, 3);
 }
