diff --git a/gfio.c b/gfio.c
index ec03344..76bbbf5 100644
--- a/gfio.c
+++ b/gfio.c
@@ -1307,12 +1307,39 @@
 	cairo_stroke(cr);
 }
 
+static gboolean graph_tooltip(GtkWidget *w, gint x, gint y,
+			      gboolean keyboard_mode, GtkTooltip *tooltip,
+			      gpointer data)
+{
+	struct gfio_graphs *g = data;
+	const char *text = NULL;
+
+	if (graph_contains_xy(g->iops_graph, x, y))
+		text = graph_find_tooltip(g->iops_graph, x, y);
+	else if (graph_contains_xy(g->bandwidth_graph, x, y))
+		text = graph_find_tooltip(g->bandwidth_graph, x, y);
+
+	if (text) {
+		gtk_tooltip_set_text(tooltip, text);
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
 static int on_expose_drawing_area(GtkWidget *w, GdkEvent *event, gpointer p)
 {
 	struct gfio_graphs *g = p;
 	cairo_t *cr;
 
 	cr = gdk_cairo_create(w->window);
+
+	if (graph_has_tooltips(g->iops_graph) ||
+	    graph_has_tooltips(g->bandwidth_graph)) {
+		g_object_set(w, "has-tooltip", TRUE, NULL);
+		g_signal_connect(w, "query-tooltip", G_CALLBACK(graph_tooltip), g);
+	}
+
 	cairo_set_source_rgb(cr, 0, 0, 0);
 	draw_graph(g->iops_graph, cr);
 	draw_graph(g->bandwidth_graph, cr);
@@ -1393,10 +1420,10 @@
 		gtk_entry_set_text(GTK_ENTRY(ge->eta.write_bw), rate_str[1]);
 		gtk_entry_set_text(GTK_ENTRY(ge->eta.write_iops), iops_str[1]);
 
-		graph_add_xy_data(ge->graphs.iops_graph, "Read IOPS", je->elapsed_sec, je->iops[0]);
-		graph_add_xy_data(ge->graphs.iops_graph, "Write IOPS", je->elapsed_sec, je->iops[1]);
-		graph_add_xy_data(ge->graphs.bandwidth_graph, "Read Bandwidth", je->elapsed_sec, je->rate[0]);
-		graph_add_xy_data(ge->graphs.bandwidth_graph, "Write Bandwidth", je->elapsed_sec, je->rate[1]);
+		graph_add_xy_data(ge->graphs.iops_graph, "Read IOPS", je->elapsed_sec, je->iops[0], iops_str[0]);
+		graph_add_xy_data(ge->graphs.iops_graph, "Write IOPS", je->elapsed_sec, je->iops[1], iops_str[1]);
+		graph_add_xy_data(ge->graphs.bandwidth_graph, "Read Bandwidth", je->elapsed_sec, je->rate[0], rate_str[0]);
+		graph_add_xy_data(ge->graphs.bandwidth_graph, "Write Bandwidth", je->elapsed_sec, je->rate[1], rate_str[1]);
 
 		free(rate_str[0]);
 		free(rate_str[1]);
@@ -1481,10 +1508,10 @@
 		gtk_entry_set_text(GTK_ENTRY(ui->eta.write_bw), rate_str[1]);
 		gtk_entry_set_text(GTK_ENTRY(ui->eta.write_iops), iops_str[1]);
 
-		graph_add_xy_data(ui->graphs.iops_graph, "Read IOPS", je->elapsed_sec, je->iops[0]);
-		graph_add_xy_data(ui->graphs.iops_graph, "Write IOPS", je->elapsed_sec, je->iops[1]);
-		graph_add_xy_data(ui->graphs.bandwidth_graph, "Read Bandwidth", je->elapsed_sec, je->rate[0]);
-		graph_add_xy_data(ui->graphs.bandwidth_graph, "Write Bandwidth", je->elapsed_sec, je->rate[1]);
+		graph_add_xy_data(ui->graphs.iops_graph, "Read IOPS", je->elapsed_sec, je->iops[0], iops_str[0]);
+		graph_add_xy_data(ui->graphs.iops_graph, "Write IOPS", je->elapsed_sec, je->iops[1], iops_str[1]);
+		graph_add_xy_data(ui->graphs.bandwidth_graph, "Read Bandwidth", je->elapsed_sec, je->rate[0], rate_str[0]);
+		graph_add_xy_data(ui->graphs.bandwidth_graph, "Write Bandwidth", je->elapsed_sec, je->rate[1], rate_str[1]);
 
 		free(rate_str[0]);
 		free(rate_str[1]);
diff --git a/graph.c b/graph.c
index 6cf511d..aba095b 100644
--- a/graph.c
+++ b/graph.c
@@ -24,6 +24,7 @@
 #include <malloc.h>
 #include <math.h>
 #include <assert.h>
+#include <stdlib.h>
 
 #include <cairo.h>
 #include <gtk/gtk.h>
@@ -33,10 +34,12 @@
 
 struct xyvalue {
 	double x, y;
+	int gx, gy;
 };
 
 struct graph_value {
 	struct graph_value *next;
+	char *tooltip;
 	void *value;
 };
 
@@ -47,6 +50,7 @@
 	struct graph_label *next;
 	double r, g, b;
 	int value_count;
+	unsigned int tooltip_count;
 	struct graph *parent;
 };
 
@@ -533,6 +537,8 @@
 			continue;
 		cairo_set_source_rgb(cr, i->r, i->g, i->b);
 		for (j = i->values; j; j = j->next) {
+			struct xyvalue *xy = j->value;
+
 			tx = ((getx(j) - gminx) / (gmaxx - gminx)) * (x2 - x1) + x1;
 			ty = y2 - ((gety(j) - gminy) / (gmaxy - gminy)) * (y2 - y1);
 			if (first) {
@@ -541,6 +547,8 @@
 			} else {
 				cairo_line_to(cr, tx, ty);
 			}
+			xy->gx = tx;
+			xy->gy = ty;
 		}
 		cairo_stroke(cr);
 	}
@@ -606,12 +614,17 @@
 	bg->tail = i;
 }
 
-static void graph_label_add_value(struct graph_label *i, void *value)
+static void graph_label_add_value(struct graph_label *i, void *value,
+				  const char *tooltip)
 {
 	struct graph_value *x;
 
 	x = malloc(sizeof(*x));
 	x->value = value;
+	if (tooltip)
+		x->tooltip = strdup(tooltip);
+	else
+		x->tooltip = NULL;
 	x->next = NULL;
 	if (!i->tail) {
 		i->values = x;
@@ -620,6 +633,8 @@
 	}
 	i->tail = x;
 	i->value_count++;
+	if (x->tooltip)
+		i->tooltip_count++;
 
 	if (i->parent->per_label_limit != -1 &&
 		i->value_count > i->parent->per_label_limit) {
@@ -637,6 +652,10 @@
 		while (to_drop--) {
 			x = i->values;
 			i->values = i->values->next;
+			if (x->tooltip) {
+				free(x->tooltip);
+				i->tooltip_count--;
+			}
 			free(x->value);
 			free(x);
 			i->value_count--;
@@ -655,12 +674,12 @@
 	i = graph_find_label(bg, label);
 	if (!i)
 		return -1;
-	graph_label_add_value(i, d);
+	graph_label_add_value(i, d, NULL);
 	return 0;
 }
 
 int graph_add_xy_data(struct graph *bg, const char *label,
-		const double x, const double y)
+		      const double x, const double y, const char *tooltip)
 {
 	struct graph_label *i;
 	struct xyvalue *xy;
@@ -672,7 +691,8 @@
 	i = graph_find_label(bg, label);
 	if (!i)
 		return -1;
-	graph_label_add_value(i, xy);
+
+	graph_label_add_value(i, xy, tooltip);
 	return 0;
 }
 
@@ -756,4 +776,48 @@
 	g->bottom_extra = bottom_percent;	
 }
 
+int graph_has_tooltips(struct graph *g)
+{
+	struct graph_label *i;
 
+	for (i = g->labels; i; i = i->next)
+		if (i->tooltip_count)
+			return 1;
+
+	return 0;
+}
+
+int graph_contains_xy(struct graph *g, int x, int y)
+{
+	int first_x = g->xoffset;
+	int last_x = g->xoffset + g->xdim;
+	int first_y = g->yoffset;
+	int last_y = g->yoffset + g->ydim;
+
+	return (x >= first_x && x <= last_x) && (y >= first_y && y <= last_y);
+}
+
+static int xy_match(struct xyvalue *xy, int x, int y)
+{
+	int xdiff = abs(xy->gx - x);
+	int ydiff = abs(xy->gy - y);
+
+	return xdiff <= 20 && ydiff <= 10;
+}
+
+const char *graph_find_tooltip(struct graph *g, int x, int y)
+{
+	struct graph_label *i;
+	struct graph_value *j;
+
+	for (i = g->labels; i; i = i->next) {
+		for (j = i->values; j; j = j->next) {
+			struct xyvalue *xy = j->value;
+
+			if (xy_match(xy, x - g->xoffset, y))
+				return j->tooltip;
+		}
+	}
+
+	return NULL;
+}
diff --git a/graph.h b/graph.h
index a8390b5..cb1e2d5 100644
--- a/graph.h
+++ b/graph.h
@@ -50,7 +50,7 @@
 int graph_add_data(struct graph *g, const char *label, const double value);
 /* graph_add_data() is used to add data to the labels of a bar graph */
 int graph_add_xy_data(struct graph *g, const char *label,
-		const double x, const double y);
+		const double x, const double y, const char *tooltip);
 /* graph_add_xy_data is used to add data to the labels of a line graph */
 
 void graph_set_color(struct graph *g, const char *label,
@@ -81,5 +81,9 @@
  * so that the data doesn't go to the very edges.
  */
 
+extern int graph_has_tooltips(struct graph *g);
+extern const char *graph_find_tooltip(struct graph *g, int x, int y);
+extern int graph_contains_xy(struct graph *p, int x, int y);
+
 #endif
 
