--- net/linux-proc.c	2008-10-18 13:46:05.000000000 +0200
+++ disk/linux-proc.c	2008-10-18 13:41:33.000000000 +0200
@@ -99,6 +99,8 @@
 {
 	static gboolean first_call = TRUE;
 	static guint64 lastread = 0, lastwrite = 0;
+	static struct timeval lasttime;
+	static int lastdata[3];
 	static AutoScaler scaler;
 
 	glibtop_mountlist mountlist;
@@ -108,11 +110,13 @@
 
 	guint64 read, write;
 	guint64 readdiff, writediff;
+	struct timeval presenttime;
 
 
 	if(first_call)
 	{
 	    autoscaler_init(&scaler, 60, 500);
+	    gettimeofday(&lasttime, NULL);
 	}
 
 	read = write = 0;
@@ -128,6 +132,7 @@
 		    || strcmp(mountentries[i].type, "cifs") == 0)
 			continue;
 
+		gettimeofday(&presenttime, NULL);
 		glibtop_get_fsusage(&fsusage, mountentries[i].mountdir);
 		read += fsusage.read; write += fsusage.write;
 	}
@@ -147,11 +152,19 @@
 		return;
 	}
 
+	if (presenttime.tv_sec == lasttime.tv_sec) 
+	{
+		memcpy(data, lastdata, 3 * sizeof data[0]);
+		return;
+	}
 	max = autoscaler_get_max(&scaler, readdiff + writediff);
 
 	data[0] = (float)Maximum *  readdiff / (float)max;
 	data[1] = (float)Maximum * writediff / (float)max;
 	data[2] = (float)Maximum - (data [0] + data[1]);
+
+	memcpy(&lasttime, &presenttime, sizeof lasttime);
+	memcpy(lastdata, data, 3 * sizeof data[0]);
 }
 
 #if 0
