diff -upNr wmbattery/wmbattery.c wmbattery.patched/wmbattery.c
--- wmbattery/wmbattery.c	2008-02-01 20:45:20.000000000 -0500
+++ wmbattery.patched/wmbattery.c	2009-05-08 22:35:44.557620500 -0400
@@ -45,6 +45,7 @@ int use_sonypi = 0;
 int use_acpi = 0;
 int delay = 0;
 int always_estimate_remaining = 0;
+int granularity_estimate_remaining = 1;
 
 signed int low_pct = -1;
 signed int critical_pct = -1;
@@ -125,7 +126,8 @@ void estimate_timeleft(apm_info *cur_inf
 	}
 
 	/* No change: decrease estimate */
-	if (percent == cur_info->battery_percentage) {
+	if ((percent - cur_info->battery_percentage)
+	    / granularity_estimate_remaining == 0) {
 		estimate -= t - estimate_time;
 		estimate_time = t;
 		if (guessed_lately && estimate < 0)
@@ -206,7 +208,7 @@ char *parse_commandline(int argc, char *
 	extern char *optarg;
 	
   	while (c != -1) {
-  		c=getopt(argc, argv, "hd:g:f:b:w:c:l:ea:");
+  		c=getopt(argc, argv, "hd:g:f:b:w:c:l:es:a:");
 		switch (c) {
 		  case 'h':
 			printf("Usage: wmbattery [options]\n");
@@ -218,6 +220,7 @@ char *parse_commandline(int argc, char *
 			printf("\t-l percent\tlow percentage\n");
 			printf("\t-c percent\tcritical percentage\n");
 			printf("\t-e\t\tuse own time estimates\n");
+			printf("\t-s granularity\t\testimate only for changes greater than granularity%% (implies -e)\n");
 			printf("\t-a file\t\twhen critical send file to /dv/audio\n");
                		exit(0);
 		 	break;
@@ -251,6 +254,10 @@ char *parse_commandline(int argc, char *
 		  case 'e':
 			always_estimate_remaining = 1;
 			break;
+		  case 's':
+			always_estimate_remaining = 1;
+			granularity_estimate_remaining = atoi(optarg);
+			break;
 		  case 'a':
 			crit_audio_fn = strdup(optarg);
 			break;
