diff -ruN gtimer-1.1.6-old/main.c gtimer-1.1.6/main.c
--- gtimer-1.1.6-old/main.c	2006-05-20 22:22:46.000000000 -0700
+++ gtimer-1.1.6/main.c	2006-05-20 22:22:46.000000000 -0700
@@ -30,6 +30,10 @@
  *	http://www.cknudsen.com/gtimer/
  *
  * History:
+ *	18-Apr-2005	Fully stop timing and update the icons properly
+ *			after a reset from the idle window.
+ *			Subtract off the five minute initial period when
+ *			reverting after an idle.  (Russ Allbery)
  *	17-Apr-2005	Added configurability of the browser. (Russ Allbery)
  *	02-Jan-2004	Add time increment and decrement by one minute.
  *			Add more key shortcuts for increment/decrement.
@@ -1455,12 +1459,15 @@
   for ( timeAfterReset = loop = 0; loop < num_tasks; loop++ )  {
     if ( tasks[loop]->timer_on ) {
       tasks[loop]->timer_on = 0;
+      tasks[loop]->on_since = 0;
+      num_timing--;
     }
     if ( tasks[loop]->todays_entry ) {
       timeAfterReset += tasks[loop]->todays_entry->seconds;
     }
   }
   update_list ();
+  update_toolbar_buttons ();
 
   /* reset icon */
   gdk_window_set_icon ( GTK_WIDGET ( main_window )->window,
@@ -2618,7 +2625,13 @@
       /* we've been idle too long. mark time, save to file, then popup window */
       update_tasks ();
       save_all ();
-      taskMarkAll ();
+      for ( loop = 0; loop < num_tasks; loop++ ) {
+        if ( tasks[loop]->timer_on ) {
+          taskMark ( tasks[loop]->task, idle );
+        } else {
+          taskMark ( tasks[loop]->task, 0 );
+        }
+      }
       time ( &now );
       now -= idle;
       tm = localtime ( &now );
diff -ruN gtimer-1.1.6-old/task.c gtimer-1.1.6/task.c
--- gtimer-1.1.6-old/task.c	2003-02-11 13:46:00.000000000 -0800
+++ gtimer-1.1.6/task.c	2006-05-20 22:24:56.000000000 -0700
@@ -21,6 +21,8 @@
  *	Suite 330, Boston, MA  02111-1307, USA
  *
  * History:
+ *	17-Apr-2005	Add support for subtracting a particular offset
+ *			off of timers.  (Russ Allbery)
  *	09-Mar-2000	Added functions to allow for restoring to
  *			a previous state: taskMark(), taskMarkAll(),
  *			taskRestore(), taskRestoreAll()
@@ -156,14 +158,23 @@
 ** to restore the state of the task to what it was when this function
 ** was called.
 */
-void taskMark ( task )
+void taskMark ( task, offset )
 Task *task;
+int offset;
 {
   int i;
+  int seconds;
 
   for ( i = 0; i < task->num_entries; i++ ) {
     task->entries[i]->marked_seconds = task->entries[i]->seconds;
   }
+  if ( offset > 0 && task->num_entries > 0 ) {
+    seconds = task->entries[task->num_entries - 1]->marked_seconds;
+    seconds -= offset;
+    if ( seconds < 0 )
+      seconds = 0;
+    task->entries[task->num_entries - 1]->marked_seconds = seconds;
+  }
 }
 
 
@@ -174,13 +185,14 @@
 ** Other stuff like annotations doesn't apply here, but annotations shouldn't
 ** be added during idle time anyhow...
 */
-void taskMarkAll ()
+void taskMarkAll ( offset )
+int offset;
 {
   int loop;
 
   for ( loop = 0; loop <= max_task; loop++ ) {
     if ( tasks[loop] ) {
-      taskMark ( tasks[loop] );
+      taskMark ( tasks[loop], offset );
     }
   }
 }
diff -ruN gtimer-1.1.6-old/task.h gtimer-1.1.6/task.h
--- gtimer-1.1.6-old/task.h	2003-02-11 13:46:00.000000000 -0800
+++ gtimer-1.1.6/task.h	2006-05-20 22:22:46.000000000 -0700
@@ -20,6 +20,8 @@
  *	Free Software Foundation, Inc., 59 Temple Place,
  *	Suite 330, Boston, MA  02111-1307, USA
  *
+ *	17-Apr-2005	Add support for subtracting a particular offset
+ *			off of timers.  (Russ Allbery)
  */
 
 
@@ -63,8 +65,9 @@
 void taskAdd ( Task *task );
 int taskSave ( Task *task, char *taskdir );
 int taskSaveAll ( char *taskdir );
-void taskMark ( Task *task );
-void taskMarkAll ();
+/* rra 2005-04-17 - add an offset to subtract from running times */
+void taskMark ( Task *task, int offset );
+void taskMarkAll ( int offset );
 void taskRestore ( Task *task );
 void taskRestoreAll ();
 void taskClearAll ();
