diff --git a/tsk/fs/yaffs.cpp b/tsk/fs/yaffs.cpp
index 66cb60489a309c9c602ea470bbafdbd9650617cc..0984cabee43e74913ce46eda69469afdedc3da74 100644
--- a/tsk/fs/yaffs.cpp
+++ b/tsk/fs/yaffs.cpp
@@ -615,26 +615,28 @@ static void
 static void
     yaffscache_objects_free(YAFFSFS_INFO *yfs)
 {
-    YaffsCacheObject *obj = yfs->cache_objects;
-    while(obj != NULL) {
-        YaffsCacheObject *to_free = obj;
+    if((yfs != NULL) && (yfs->cache_objects != NULL)){
+        YaffsCacheObject *obj = yfs->cache_objects;
+        while(obj != NULL) {
+            YaffsCacheObject *to_free = obj;
+
+            YaffsCacheVersion *ver = obj->yco_latest;
+            while(ver != NULL) {
+                YaffsCacheVersion *v_to_free = ver;
+                ver = ver->ycv_prior;
+                free(v_to_free);
+            }
 
-        YaffsCacheVersion *ver = obj->yco_latest;
-        while(ver != NULL) {
-            YaffsCacheVersion *v_to_free = ver;
-            ver = ver->ycv_prior;
-            free(v_to_free);
+            obj = obj->yco_next;
+            free(to_free);
         }
-
-        obj = obj->yco_next;
-        free(to_free);
     }
 }
 
 static void
     yaffscache_chunks_free(YAFFSFS_INFO *yfs)
 {
-    if(yfs->chunkMap != NULL){
+    if((yfs != NULL) && (yfs->chunkMap != NULL)){
         // Free the YaffsCacheChunks in each ChunkGroup
         std::map<unsigned int,YaffsCacheChunkGroup>::iterator iter;
         for( iter = yfs->chunkMap->begin(); iter != yfs->chunkMap->end(); ++iter ) {
@@ -649,7 +651,7 @@ static void
         // Free the map
         yfs->chunkMap->clear();
         delete yfs->chunkMap;
-	}
+    }
 
 }
 
@@ -2455,20 +2457,18 @@ static uint8_t
 static void
     yaffsfs_close(TSK_FS_INFO *fs)
 {
-    YAFFSFS_INFO *yfs = (YAFFSFS_INFO *)fs;
+    if(fs != NULL){
+        YAFFSFS_INFO *yfs = (YAFFSFS_INFO *)fs;
 
-    fs->tag = 0;
+        fs->tag = 0;
 
-    // Walk and free the cache structures
-    yaffscache_objects_free(yfs);
-	fprintf(stderr, "After objects free\n");
-	fflush(stderr);
-    yaffscache_chunks_free(yfs);
-	fprintf(stderr, "After chunks free\n");
+        // Walk and free the cache structures
+        yaffscache_objects_free(yfs);
+        yaffscache_chunks_free(yfs);
 
-    //tsk_deinit_lock(&yaffsfs->lock);
-
-    tsk_fs_free(fs);
+        //tsk_deinit_lock(&yaffsfs->lock);
+        tsk_fs_free(fs);
+	}
 }
 
 typedef struct _dir_open_cb_args {
@@ -2902,8 +2902,8 @@ TSK_FS_INFO *
     yaffs2_open(TSK_IMG_INFO * img_info, TSK_OFF_T offset,
     TSK_FS_TYPE_ENUM ftype, uint8_t test)
 {
-    YAFFSFS_INFO *yaffsfs;
-    TSK_FS_INFO *fs;
+    YAFFSFS_INFO *yaffsfs = NULL;
+    TSK_FS_INFO *fs = NULL;
     const unsigned int psize = img_info->page_size;
     const unsigned int ssize = img_info->spare_size;
     YaffsHeader * first_header = NULL;
@@ -2923,6 +2923,8 @@ TSK_FS_INFO *
 
     if ((yaffsfs = (YAFFSFS_INFO *) tsk_fs_malloc(sizeof(YAFFSFS_INFO))) == NULL)
         return NULL;
+    yaffsfs->cache_objects = NULL;
+    yaffsfs->chunkMap = NULL;
 
     // Read config file (if it exists)
     config_file_status = yaffs_load_config_file(img_info, configParams);
@@ -3096,7 +3098,6 @@ TSK_FS_INFO *
     */
     //tsk_init_lock(&yaffsfs->lock);
     yaffsfs->chunkMap = new std::map<uint32_t, YaffsCacheChunkGroup>;
-    yaffsfs->cache_objects = NULL;
     yaffsfs_cache_fs(yaffsfs);
 
     if (tsk_verbose) {