diff --git a/ChangeLog b/ChangeLog
index 6216f38e49b6c642a5c250e0207a0638165ec0bd..03942b0f73f3f3f4a9e3d93b37adb0bb92619bf6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -121,7 +121,7 @@
 	  arch/c5471 and arch/dm320 are deprecated and will be removed
 	  when the new c5471 and dm320 logic is verified.
 
-0.2.5 2007-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
+0.2.5 2007-05-19 Gregory Nutt <spudmonkey@racsa.co.cr>
 
 	* Corrected some build/configuration issues introduced with the
 	  last release.
@@ -129,7 +129,7 @@
 	  development board (untested)
 	* Added support for block devices.
 	* Simulated target now exports a VFAT filesystem
-	* Begin support for VFAT filesystem (not yet functional)
+	* Begin support for VFAT filesystem (missing functionalit)
 	* Added mount() and umount()
 	* Fix bug in memcmp return value
 	* Fix errors in timeslice calculation (several places)
@@ -137,5 +137,8 @@
 	* close() was not closing the underlying device.
 	* Added fsync()
 	* Added strspn() and strcspn()
+
+0.2.6 2007-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
+
 	* Started m68322
 
diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html
index 4050e7258c7a0eae1c6bc8e84bfe41e44ed170ec..965b575e755349e4645053ec4fb5ff8e5d66ae41 100644
--- a/Documentation/NuttX.html
+++ b/Documentation/NuttX.html
@@ -183,7 +183,7 @@
 </table>
 
 <p>
-   The seventh release of NuttX (nuttx-0.2.4) is available for download
+   The 8th release of NuttX (nuttx-0.2.5) is available for download
    from the <a href="http://sourceforge.net/project/showfiles.php?group_id=189573">SourceForge</a>
    website.
 </p>
@@ -248,7 +248,7 @@
     </p>
     <p>
       <b>STATUS:</b>
-        This port is in progress and should be available in the nuttx-0.2.5 release.
+        This port is in progress and should be available in the nuttx-0.2.6 release.
     </p>
   </td>
 </tr>
@@ -500,7 +500,7 @@ Other memory:
 	  arch/c5471 and arch/dm320 are deprecated and will be removed
 	  when the new c5471 and dm320 logic is verified.
 
-0.2.5 2007-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
+0.2.5 2007-05-19 Gregory Nutt <spudmonkey@racsa.co.cr>
 
 	* Corrected some build/configuration issues introduced with the
 	  last release.
@@ -508,7 +508,7 @@ Other memory:
 	  development board (untested)
 	* Added support for block devices.
 	* Simulated target now exports a VFAT filesystem
-	* Begin support for VFAT filesystem (not yet functional)
+	* Begin support for VFAT filesystem (missing functionalit)
 	* Added mount() and umount()
 	* Fix bug in memcmp return value
 	* Fix errors in timeslice calculation (several places)
@@ -516,6 +516,9 @@ Other memory:
 	* close() was not closing the underlying device.
 	* Added fsync()
 	* Added strspn() and strcspn()
+
+0.2.6 2007-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
+
 	* Started m68322
 </pre></ul>
 
diff --git a/ReleaseNotes b/ReleaseNotes
index 57ed2aab0007729439b1b255084991e3a3282379..7010da67374720197c8f98028e4e2b78dab5d8da 100644
--- a/ReleaseNotes
+++ b/ReleaseNotes
@@ -1,20 +1,18 @@
-nuttx-0.2.4
+nuttx-0.2.5
 ^^^^^^^^^^^^
 
-This is the 7th release of NuttX.  This release is only to roll out
-build changes to better support different SoC's that use the same
-processor architecture.  In particular, the two existing ARM architectures,
-c5471 and DM320 were combined into a single ARM directory.  This was done
-in preparation for an LPC2148 port that is currently in progress.  There
-is NO new functionality or significant bufixes in this release.
+This is the 8th release of NuttX.  This release includes:
+
+(1) Several bug fixes
+(2) Initial support for FAT filesystems.  Testing has not been
+    exhaustive and some functionality is missing (mkdir, stat, unlink
+    chmod, and rename functionality is not yet implemented).
+(3) Support for the NXP lpc2148 processor is included but is
+    untested as of this writing.  The current implementation includes
+    only support for serial console and timer interrupt.
 
 See the ChangeLog for a complete list of changes.
 
-This release has been verified on the Linux user-mode platform
-and the Neuros OSD using the test program under examples/ostest.
-The results of the testing is available in the source tree under
-configs/ntosd-dm320/doc/test-results and under configs/sim/doc/test-results.
-There are no known, critical defects but the project development status
-remains at 'beta' status pending further test and evaluation.
+This release has been verified only on the Linux user-mode platform.
 
-This tarball contains a complete CVS snapshot from April 28, 2007.
+This tarball contains a complete CVS snapshot from May 19, 2007.
diff --git a/fs/fs_fat32.c b/fs/fs_fat32.c
index a5b68831f9fee436e1f11ee28ad2f2d7b61254dd..f6c0ec421b9461ee1838622450492e204c906cdd 100644
--- a/fs/fs_fat32.c
+++ b/fs/fs_fat32.c
@@ -46,6 +46,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdlib.h>
+#include <unistd.h>
 #include <string.h>
 #include <semaphore.h>
 #include <assert.h>
@@ -829,6 +830,10 @@ static off_t fat_seek(FAR struct file *filp, off_t offset, int whence)
   struct inode         *inode;
   struct fat_mountpt_s *fs;
   struct fat_file_s    *ff;
+  sint32                cluster;
+  ssize_t               position;
+  unsigned int          clustersize;
+  unsigned int          sectoroffset;
   int                   ret;
 
   /* Sanity checks */
@@ -843,18 +848,208 @@ static off_t fat_seek(FAR struct file *filp, off_t offset, int whence)
 
   DEBUGASSERT(fs != NULL);
 
+  /* Map the offset according to the whence option */
+  switch (whence)
+  {
+      case SEEK_SET: /* The offset is set to offset bytes. */
+          position = offset;
+          break;
+
+      case SEEK_CUR: /* The offset is set to its current location plus
+                      * offset bytes. */
+
+          position = offset + ff->ff_position;
+          break;
+
+      case SEEK_END: /* The offset is set to the size of the file plus
+                      * offset bytes. */
+
+          position = offset + ff->ff_size;
+          break;
+
+      default:
+          return -EINVAL;
+  }
+
   /* Make sure that the mount is still healthy */
 
   fat_semtake(fs);
   ret = fat_checkmount(fs);
   if (ret != OK)
     {
-      fat_semgive(fs);
-      return ret;
+        goto errout_with_semaphore;
+    }
+
+  /* Check if there is unwritten data in the file buffer */
+
+  ret = fat_ffcacheflush(fs, ff);
+  if (ret < 0)
+  {
+      goto errout_with_semaphore;
+  }
+
+  /* Attempts to set the position beyound the end of file will
+   * work if the file is open for write access.
+   */
+
+  if (position > ff->ff_size && (ff->ff_oflags & O_WROK) == 0)
+    {
+        /* Otherwise, the position is limited to the file size */
+        position = ff->ff_size;
+    }
+
+  /* Set file position to the beginning of the file */
+
+  ff->ff_position         = 0;
+  ff->ff_sectorsincluster = 1;
+
+  /* Move file position if necessary */
+
+  if (position)
+    {
+        /* Get the start cluster of the file */
+
+        cluster = ff->ff_startcluster;
+        if (!cluster)
+        {
+            /* Create a new cluster chain if the file does not have one */
+
+            cluster = fat_createchain(fs);
+            if (cluster < 0)
+            {
+                ret = cluster;
+                goto errout_with_semaphore;
+            }
+            ff->ff_startcluster = cluster;
+        }
+
+        if (cluster)
+        {
+            /* If the file has a cluster chain, follow it to the
+             * requested position.
+             */
+
+            clustersize = fs->fs_fatsecperclus * fs->fs_hwsectorsize;
+            for (;;)
+            {
+                /* Skip over clusters prior to the one containing
+                 * the requested position.
+                 */
+
+                ff->ff_currentcluster = cluster;
+                if (position <= clustersize)
+                {
+                    break;
+                }
+
+                /* Extend the cluster chain if write in enabled.  NOTE:
+                 * this is not consistent with the lseek description:
+                 * "The  lseek() function allows the file offset to be
+                 * set beyond the end of the file (but this does not
+                 * change the size of the file).  If data is later written
+                 * at  this  point, subsequent reads of the data in the
+                 * gap (a "hole") return null bytes ('\0') until data
+                 * is actually written into the gap."
+                 */
+
+                if ((ff->ff_oflags & O_WROK) != 0)
+                {
+                    /* Extend the cluster chain (fat_extendchain
+                     * will follow the existing chain or add new
+                     * clusters as needed.
+                     */
+
+                    cluster = fat_extendchain(fs, cluster);
+                }
+                else
+                {
+                    /* Other we can only follong the existing chain */
+
+                    cluster = fat_getcluster(fs, cluster);
+                }
+
+                if (cluster < 0)
+                {
+                    /* An error occurred getting the cluster */
+
+                    ret = cluster;
+                    goto errout_with_semaphore;
+                }
+
+                /* Zero means that there is no further clusters available
+                 * in the chain.
+                 */
+
+                if (cluster == 0)
+                {
+                    /* At the position to the current locaiton and
+                     * break out.
+                     */
+
+                    position = clustersize;
+                    break;
+                }
+
+                if (cluster >= fs->fs_nclusters)
+                {
+                    ret = -ENOSPC;
+                    goto errout_with_semaphore;
+                }
+
+                /* Otherwise, update the position and continue looking */
+
+                ff->ff_position += clustersize;
+                position        -= clustersize;
+            }
+
+            /* We get here after we have found the sector containing
+             * the requested position.
+             */
+
+            sectoroffset = (position - 1) / fs->fs_hwsectorsize;
+
+            /* And get the current sector from the cluster and
+             * the sectoroffset into the cluster.
+             */
+
+            ff->ff_currentsector =
+                fat_cluster2sector(fs, cluster) + sectoroffset;
+
+            /* Load the sector corresponding to the position */
+
+            if ((position & SEC_NDXMASK(fs)) != 0)
+            {
+                ret = fat_ffcacheread(fs, ff, ff->ff_currentsector);
+                if (ret < 0)
+                {
+                    goto errout_with_semaphore;
+                }
+            }
+
+            /* Save the number of sectors left in the cluster */
+
+            ff->ff_sectorsincluster = fs->fs_fatsecperclus - sectoroffset;
+
+            /* And save the new file position */
+
+            ff->ff_position += position;
+        }
+    }
+
+  /* If we extended the size of the file, then mark the file as modified. */
+  
+  if ((ff->ff_oflags & O_WROK) != 0 &&  ff->ff_position > ff->ff_size)
+    {
+        ff->ff_size    = ff->ff_position;
+        ff->ff_bflags |= FFBUFF_MODIFIED;
     }
 
   fat_semgive(fs);
-  return -ENOSYS;
+  return OK;
+
+ errout_with_semaphore:
+  fat_semgive(fs);
+  return ret;
 }
 
 /****************************************************************************
@@ -959,7 +1154,7 @@ static int fat_sync(FAR struct file *filp)
        * in the sector using the saved directory index.
        */
 
-      direntry = &fs->fs_buffer[ff->ff_dirindex];
+      direntry = &fs->fs_buffer[ff->ff_dirindex * 32];
 
       /* Set the archive bit, set the write time, and update
        * anything that may have* changed in the directory