Index: src/load-graph.cpp
===================================================================
--- src/load-graph.cpp	(revision 2282)
+++ src/load-graph.cpp	(working copy)
@@ -30,8 +30,9 @@
 #include "util.h"
 #include "gsm_color_button.h"
 
-#define NUM_POINTS 60
+#define NUM_POINTS 62	// remember we need to add 2 for the buffer
 #define GRAPH_MIN_HEIGHT 40
+#define MAX_FRAMES 5	// 0 = no limit
 
 enum {
 	CPU_TOTAL,
@@ -286,7 +287,9 @@
 	cairo_set_source_surface (cr, g->background_buffer, 0, 0);
 	cairo_paint (cr);
 
-	cairo_set_source_surface (cr, g->graph_buffer, g->graph_buffer_offset - g->render_counter, FRAME_WIDTH);
+	cairo_set_source_surface (cr, g->graph_buffer,
+			(int) (g->graph_buffer_offset - (g->render_counter + 1) * (g->graph_delx/g->frames_per_unit)),
+			FRAME_WIDTH);
 	cairo_rectangle (cr, g->rmargin + g->indent + FRAME_WIDTH + 1, FRAME_WIDTH - 1,
 			 g->draw_width - g->rmargin - g->indent - 1 , g->real_draw_height + FRAME_WIDTH - 1);
 	cairo_fill (cr);
@@ -310,9 +313,11 @@
 	g->draw_height = widget->allocation.height - 2 * FRAME_WIDTH;
 
 	// FIXME:
-	// g->frames_per_unit = g->draw_width/(NUM_POINTS);
-	// knock FRAMES down to 5 until cairo gets faster
-	g->frames_per_unit = 5;
+	g->frames_per_unit = g->draw_width/(NUM_POINTS);
+	// knock to MAX_FRAMES if more than 0
+	if (MAX_FRAMES > 0 && g->frames_per_unit > MAX_FRAMES){
+		g->frames_per_unit =  MAX_FRAMES;
+	}
 
 	if(g->timer_index) {
 		g_source_remove (g->timer_index);
