diff --git a/ChangeLog b/ChangeLog
index d7dc668..c4022c7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,21 @@
+2000-03-13  Tim Magill  <magill@gate.net>
+
+	* remake.c: 
+	(update_file_1): 
+	(check_dep): fixed problem with double colon rules and circular
+	precursor detection.
+
 2000-03-12  Tim Magill  <magill@gate.net>
 
 	* remake.c (update_goal_chain): re-arranged logic so that it makes
 	more sense.  After update_file(), the target status is used to
 	handle the goal and possibly remove it from the goal chain.
 	
+	* remake.c (update_file_1): simplified handling of files with no
+	command into a single block.
+
+	* remake.c (notice_finished_file): fixed obsolete comment.
+
 	* remake.c (update_file): If -q we can bail as soon as we detect
 	that something needs to be remade.
 
diff --git a/remake.c b/remake.c
index e0b1bc0..578cd0d 100644
--- a/remake.c
+++ b/remake.c
@@ -56,6 +56,20 @@
 
   
 
+/* the test for circular dependencies is based just on the 'updating'
+   bit in 'struct file'.  However double colon targets have seperate
+   'struct file's.  Therefore, we will lose if we don't notice that a
+   double colon targets are really the same file.  Use the 'struct
+   file' at the base of the double colon chain. */
+
+#define set_updating(file) (((file)->double_colon ? \
+	(file)->double_colon : (file))->updating = 1)
+#define clr_updating(file) (((file)->double_colon ? \
+	(file)->double_colon : (file))->updating = 0)
+#define tst_updating(file) (((file)->double_colon ? \
+	(file)->double_colon : (file))->updating)
+
+
 /* Incremented when a command is started (under -n, when one would be).  */
 unsigned int commands_started = 0;
 
@@ -373,7 +387,7 @@
   ++depth;
 
   /* Notice recursive update of the same file.  */
-  file->updating = 1;
+  set_updating(file);
 
   /* Looking at the file's modtime beforehand allows the possibility
      that its name may be changed by a VPATH search, and thus it may
@@ -383,27 +397,30 @@
 
   this_mtime = file_mtime (file);
   check_renamed (file);
-  noexist = this_mtime == (FILE_TIMESTAMP) -1;
+  must_make = noexist = this_mtime == (FILE_TIMESTAMP) -1;
   if (noexist)
     DBF (DB_BASIC, _("File `%s' does not exist.\n"));
 
-  must_make = noexist;
+
 
   /* If file was specified as a target with no commands,
      come up with some default commands.  */
 
-  if (!file->phony && file->cmds == 0 && !file->tried_implicit)
+  if (file->cmds == 0) 
     {
-      if (try_implicit_rule (file, depth))
-	DBF (DB_IMPLICIT, _("Found an implicit rule for `%s'.\n"));
-      else
-	DBF (DB_IMPLICIT, _("No implicit rule found for `%s'.\n"));
-    }
-  if (file->cmds == 0 && !file->is_target
-      && default_file != 0 && default_file->cmds != 0)
-    {
-      DBF (DB_IMPLICIT, _("Using default commands for `%s'.\n"));
-      file->cmds = default_file->cmds;
+      if (!file->phony && !file->tried_implicit)
+	{
+	  if (try_implicit_rule (file, depth))
+	    DBF (DB_IMPLICIT, _("Found an implicit rule for `%s'.\n"));
+	  else
+	    DBF (DB_IMPLICIT, _("No implicit rule found for `%s'.\n"));
+	}
+      if (!file->is_target
+	  && default_file != 0 && default_file->cmds != 0)
+	{
+	  DBF (DB_IMPLICIT, _("Using default commands for `%s'.\n"));
+	  file->cmds = default_file->cmds;
+	}
     }
 
   /* Update all non-intermediate files we depend on, if necessary,
@@ -420,7 +437,7 @@
       mtime = file_mtime (d->file);
       check_renamed (d->file);
 
-      if (d->file->updating)
+      if (tst_updating(d->file))
 	{
 	  error (NILF, _("Circular %s <- %s dependency dropped."),
 		 file->name, d->file->name);
@@ -498,7 +515,7 @@
 	  }
     }
 
-  file->updating = 0;
+  clr_updating(file);
 
   DBF (DB_VERBOSE, _("Finished prerequisites of target file `%s'.\n"));
 
@@ -666,9 +683,8 @@
     }
 }
 
-/* Set FILE's `updated' flag and re-check its mtime and the mtime's of all
-   files listed in its `also_make' member.  Under -t, this function also
-   touches FILE.
+/* re-check FILE's mtime and the mtime's of all files listed in its
+   `also_make' member.  Under -t, this function also touches FILE.
 
    On return, FILE->update_status will no longer be -1 if it was.  */
 
@@ -783,7 +799,7 @@
   target_state_t dep_status = ts_done;
 
   ++depth;
-  file->updating = 1;
+  set_updating(file);
 
   if (!file->intermediate)
     /* If this is a non-intermediate file, update it and record
@@ -834,7 +850,7 @@
 	  d = file->deps;
 	  while (d != 0)
 	    {
-	      if (d->file->updating)
+	      if (tst_updating(d->file))
 		{
 		  error (NILF, _("Circular %s <- %s dependency dropped."),
 			 file->name, d->file->name);
@@ -873,7 +889,7 @@
 	}
     }
 
-  file->updating = 0;
+  clr_updating(file);
   return dep_status;
 }
 
