diff --git a/ChangeLog b/ChangeLog
index da2341872c79be8b0b705f55776256dba866d599..9e21a92cde1dc79ca5c10756ba788a57285b3154 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -102,5 +102,7 @@
 	* Improved sharebility of stdout among pthreads (only).  Nothing
 	  was broken, but by moving the mutual exclusion logic to a
 	  higher level, the printf output is more readable.
+	* Fixed a bug in file system cleanup:  A list was being deleted
+	  before the buffers contained in the list.
 	* Started m68322
 
diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html
index 80c51178aacbe66d55336e65e5fb0b2e3c255e60..50172c06d5523a20a285d7bedeb35dc2a4528fbd 100644
--- a/Documentation/NuttX.html
+++ b/Documentation/NuttX.html
@@ -463,6 +463,8 @@ Other memory:
 	* Improved sharebility of stdout among pthreads (only).  Nothing
 	  was broken, but by moving the mutual exclusion logic to a
 	  higher level, the printf output is more readable.
+	* Fixed a bug in file system cleanup:  A list was being deleted
+	  before the buffers contained in the list.
 	* Started m68322
 </pre></ul>
 
diff --git a/configs/ntosd-dm320/doc/test-result.txt b/configs/ntosd-dm320/doc/test-result.txt
index 2c36abc7d4e27d1032d9c86fdc5b07f6d1272e36..56fac5064a1dc55ff30b0b0fe022343b14279101 100644
--- a/configs/ntosd-dm320/doc/test-result.txt
+++ b/configs/ntosd-dm320/doc/test-result.txt
@@ -30,11 +30,11 @@ user_main: argv[4]="Arg4"
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
+mxordblk   fda4f0   fda4f0
 uordblks     53f0     53f0
-fordblks   fdcb20   fdcb20
+fordblks   fdc660   fdc660
 
 user_main: /dev/null test
 dev_null: Read 0 bytes from /dev/null
@@ -43,11 +43,11 @@ dev_null: Wrote 1024 bytes to /dev/null
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
+mxordblk   fda4f0   fda4f0
 uordblks     53f0     53f0
-fordblks   fdcb20   fdcb20
+fordblks   fdc660   fdc660
 
 user_main: mutex test
 Initializing mutex
@@ -60,11 +60,11 @@ Starting thread 2
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
+mxordblk   fda4f0   fda4f0
 uordblks     53f0     53f0
-fordblks   fdcb20   fdcb20
+fordblks   fdc660   fdc660
 
 user_main: cancel test
 cancel_test: Test 1: Normal Cancelation
@@ -115,11 +115,11 @@ cancel_test: PASS thread terminated with PTHREAD_CANCELED
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
+mxordblk   fda4f0   fda4f0
 uordblks     53f0     53f0
-fordblks   fdcb20   fdcb20
+fordblks   fdc660   fdc660
 
 user_main: semaphore test
 sem_test: Initializing semaphore to 0
@@ -153,11 +153,11 @@ poster_func: Thread 3 done
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
+mxordblk   fda4f0   fda4f0
 uordblks     53f0     53f0
-fordblks   fdcb20   fdcb20
+fordblks   fdc660   fdc660
 
 user_main: condition variable test
 cond_test: Initializing mutex
@@ -181,11 +181,11 @@ cond_test: 0 times, the waiter was in an unexpected state when the signaler ran
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
+mxordblk   fda4f0   fda4f0
 uordblks     53f0     53f0
-fordblks   fdcb20   fdcb20
+fordblks   fdc660   fdc660
 
 user_main: timed wait test
 thread_waiter: Initializing mutex
@@ -203,11 +203,11 @@ timedwait_test: waiter exited with result=12345678
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
+mxordblk   fda4f0   fda4f0
 uordblks     53f0     53f0
-fordblks   fdcb20   fdcb20
+fordblks   fdc660   fdc660
 
 user_main: message queue test
 mqueue_test: Starting receiver
@@ -247,11 +247,11 @@ mqueue_test: receiver has already terminated
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
+mxordblk   fda4f0   fda4f0
 uordblks     53f0     53f0
-fordblks   fdcb20   fdcb20
+fordblks   fdc660   fdc660
 
 user_main: signal handler test
 sighand_test: Initializing semaphore to 0
@@ -263,6 +263,13 @@ waiter_main: Registering signal handler
 waiter_main: oact.sigaction=0 oact.sa_flags=0 oact.sa_mask=0
 waiter_main: Waiting on semaphore
 sighand_test: Signaling pid=16 with signo=17 sigvalue=42
+MALLOC(272)->207f0
+MALLOC(400)->20900
+MALLOC(656)->20a90
+MALLOC(1040)->20d20
+MALLOC(1040)->21130
+MALLOC(1040)->21540
+MALLOC(4112)->21950
 wakeup_action: Received signal 17
 wakeup_action: sival_int=42
 wakeup_action: si_code=1
@@ -270,15 +277,22 @@ wakeup_action: ucontext=0
 waiter_main: sem_wait() successfully interrupted by signal
 waiter_main: done
 sighand_test: done
+FREE(21950)
+FREE(20900)
+FREE(20d20)
+FREE(21130)
+FREE(21540)
+FREE(20a90)
+FREE(207f0)
 
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
-uordblks     53f0     5500
-fordblks   fdcb20   fdca10
+mxordblk   fda4f0   fda4f0
+uordblks     53f0     53f0
+fordblks   fdc660   fdc660
 
 user_main: POSIX timer test
 timer_test: Initializing semaphore to 0
@@ -328,11 +342,11 @@ timer_test: done
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
-uordblks     5500     5500
-fordblks   fdca10   fdca10
+mxordblk   fda4f0   fda4f0
+uordblks     53f0     53f0
+fordblks   fdc660   fdc660
 
 user_main: round-robin scheduler test
 rr_test: Starting sieve1 thread
@@ -351,11 +365,11 @@ rr_test: Done
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
-uordblks     5500     5500
-fordblks   fdca10   fdca10
+mxordblk   fda4f0   fda4f0
+uordblks     53f0     53f0
+fordblks   fdc660   fdc660
 
 user_main: barrier test
 barrier_test: Initializing barrier
@@ -411,18 +425,18 @@ barrier_test: Thread 7 completed with result=0
 End of test memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
-uordblks     5500     5500
-fordblks   fdca10   fdca10
+mxordblk   fda4f0   fda4f0
+uordblks     53f0     53f0
+fordblks   fdc660   fdc660
 
 Final memory usage:
 VARIABLE  BEFORE   AFTER
 ======== ======== ========
-arena      fe1f10   fe1f10
+arena      fe1a50   fe1a50
 ordblks         2        2
-mxordblk   fda9b0   fda9b0
-uordblks     53f0     5500
-fordblks   fdcb20   fdca10
+mxordblk   fda4f0   fda4f0
+uordblks     53f0     53f0
+fordblks   fdc660   fdc660
 user_main: Exitting
diff --git a/lib/lib_init.c b/lib/lib_init.c
index 0e820ff4ca115fdcf7336150026084855e98441d..8bf872c55ae5a3244e6f8c641b02200eddbfc73c 100644
--- a/lib/lib_init.c
+++ b/lib/lib_init.c
@@ -173,9 +173,9 @@ void lib_releaselist(FAR struct streamlist *list)
             /* Destroy the semaphore and release the filelist */
 
             (void)sem_destroy(&list->sl_sem);
-            sched_free(list);
 
-            /* Initialize each FILE structure */
+            /* Release each stream in the list */
+
 #if CONFIG_STDIO_BUFFER_SIZE > 0
             for (i = 0; i < CONFIG_NFILE_STREAMS; i++)
              {
@@ -190,6 +190,9 @@ void lib_releaselist(FAR struct streamlist *list)
                  }
              }
 #endif
+           /* Finally, release the list itself */
+
+            sched_free(list);
          }
      }
 }