diff --git a/ChangeLog b/ChangeLog
index 8b0af7911e834af8a8df7283bd04944f0c9cc6af..064a40dce20b9e9a3f2c7871ec233c49eba742c2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -169,7 +169,7 @@
 	* Restructured some Makefiles to better handle enabling and disabling
 	  NuttX features without having so much conditional compilation in the
 	  source files.
-	* tools/mkconfig.c: No long depends on asprintf() and _GNU_SOURCE and
+	* tools/mkconfig.c: No longer depends on asprintf() and _GNU_SOURCE and
 	  so should now build in non-GNU, non-GLIBC environments.
 	* include/nuttx/compiler.h: Fix for using SDCC with the Z80.
 	* include/assert.h & arch/pjrc-8051/src/up_assert.c: SDCC does support
@@ -178,5 +178,7 @@
 	  disabled.
 
 0.2.8 2007-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
+	* tools/Makefile.mkconfig: Under Cygwin, executable has a different name
+	* tools/mkdeps.sh & arch/arm/src/Makefile: Corrected a problem makeing dependencies
 	* Started m68322
 
diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html
index 20cd2db963af1ba839bff48b1aebacd0e96f74c0..34bad5d7db82b1fcedfae13cc8f4916f19706e90 100644
--- a/Documentation/NuttX.html
+++ b/Documentation/NuttX.html
@@ -613,6 +613,8 @@ Other memory:
 
 0.2.8 2007-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
 
+	* tools/Makefile.mkconfig: Under Cygwin, executable has a different name
+	* tools/mkdeps.sh & arch/arm/src/Makefile: Corrected a problem makeing dependencies
 	* Started m68322
 </pre></ul>
 
diff --git a/TODO b/TODO
index aaa68683cb2d9dcec80f27e57fdeffe588a4a9e0..c05ec796b55ad1c31994354491007404d68b768e 100644
--- a/TODO
+++ b/TODO
@@ -51,9 +51,6 @@ o Build system
 - Some names under arch are still incorrect.  These should be processor architecture
   names:  pjrc-8051 should be 805x
 - configs/pjrc-8051 should be configs/pjrc-87c52
-- 0.2.4 changes to create the arch/arm directory breaks dependency target in arch/arm/src.
-  Probably need to add the path to the chip or common subdirectorys when
-  running tools/mkdeps.sh
 
 o Applications & Tests
 
diff --git a/arch/arm/src/Makefile b/arch/arm/src/Makefile
index b02c4c9ec75c260b2bdbef4f299447df3d8928db..22d45a912967fc0bd9cbc4d630311c2bd65b7054 100644
--- a/arch/arm/src/Makefile
+++ b/arch/arm/src/Makefile
@@ -103,7 +103,7 @@ endif
 	@if [ -e board/Makefile ]; then \
 		$(MAKE) -C board TOPDIR=$(TOPDIR) depend ; \
 	fi
-	$(MKDEP) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep
+	$(MKDEP) --dep-debug --dep-path chip --dep-path common $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep
 	@touch $@
 
 depend: .depend
diff --git a/tools/mkdeps.sh b/tools/mkdeps.sh
index c2b81ec2e056127271fe0bb291fc5eb2cc0610a2..29c98e63e19a0b26cfae06a4cf7e49fb62ab7dfd 100755
--- a/tools/mkdeps.sh
+++ b/tools/mkdeps.sh
@@ -36,45 +36,112 @@
 
 function show_usage ()
 {
-  echo "$0  CC -- CFLAGS -- files"
+  echo ""
+  echo "$progname  [OPTIONS] CC -- CFLAGS -- file [file [file...]]"
+  echo ""
+  echo "Where:"
+  echo "  CC"
+  echo "    A variable number of arguments that define how to execute the compiler"
+  echo "  CFLAGS"
+  echo "    The compiler compilation flags"
+  echo "  file"
+  echo "    One or more C files whose dependencies will be checked.  Each file is expected"
+  echo "    to reside in the current directory unless --dep-path is provided on the command line"
+  echo ""
+  echo "And [OPTIONS] include:"
+  echo "  --dep-debug"
+  echo "    Enable script debug"
+  echo "  --dep-path <path>"
+  echo "    Do not look in the current directory for the file.  Instead, look in <path> to see"
+  echo "    if the file resides there.  --dep-path may be used multiple times to specifid"
+  echo "    multiple alternative location"
+  echo "  --help"
+  echo "    Shows this message and exits"
   exit 1
 }
 
-cc=
-cflags=
-files=
-args=
+function dodep ()
+{
+  unset fullpath
+  if [ -z "$altpath" ]; then
+    if [ -r $1 ]; then
+      fullpath=$1
+    else
+      echo "# ERROR: No readable file at $1"
+      show_usage
+    fi
+  else
+    for path in $altpath; do
+      tmppath=$path/$1
+      if [ -r $tmppath ]; then
+        fullpath=$tmppath
+        break;
+      fi
+    done
+    if [ -z "$fullpath" ]; then
+      echo "# ERROR: No readable file for $1 found at any location"
+      show_usage
+    fi
+  fi
+
+  $cc -M $cflags $fullpath || \
+    { echo "# ERROR: $cc -M $cflags $fullpath FAILED" ; exit 4 ; }
+}
+
+unset cc
+unset cflags
+unset files
+unset args
+unset altpath
 
 # Accumulate CFLAGS up to "--"
-for i in $* ; do
-  case $i in
+progname=$0
+while [ ! -z "$1" ]; do
+  case $1 in
   -- )
     cc=$cflags
     cflags=$args
     args=
     ;;
   --dep-debug )
-    set -x
+    if [ -z "$args" ]; then
+      set -x
+    else
+      args="$args $1"
+    fi
+    ;;
+  --dep-path )
+    if [ -z "$args" ]; then
+      shift
+      altpath="$altpath $1"
+    else
+      args="$args $1"
+    fi
+    ;;
+  --help )
+    show_usage
     ;;
   *)
-    args="$args $i"
+    args="$args $1"
     ;;
   esac
+  shift
 done
 files=$args
 
 if [ -z "$cc" ]; then
-  echo "No compiler specified"
+  echo "ERROR: No compiler specified"
+  show_usage
   exit 1
 fi
 
 if [ -z "$files" ]; then
   echo "No files specified"
+  show_usage
   exit 2
 fi
 
 for file in $files ; do
-  $cc -M $cflags $file || \
-    { echo "# $cc -M $cflags $file FAILED" ; exit 3 ; }
+    dodep $file
 done