diff --git a/tsk/fs/ntfs_dent.cpp b/tsk/fs/ntfs_dent.cpp
index af5d09a4f63e2deb73f715a8ab6c6b29e516e0bf..1ba6b7d432e9f1df32b5c377419bea5d02b1452e 100644
--- a/tsk/fs/ntfs_dent.cpp
+++ b/tsk/fs/ntfs_dent.cpp
@@ -823,35 +823,33 @@ ntfs_dir_open_meta(TSK_FS_INFO * a_fs, TSK_FS_DIR ** a_fs_dir,
     fs_attr_root =
         tsk_fs_attrlist_get(fs_dir->fs_file->meta->attr,
         TSK_FS_ATTR_TYPE_NTFS_IDXROOT);
-    if (!fs_attr_root) {
-        tsk_error_errstr2_concat(" - dent_walk: $IDX_ROOT not found");
-        return TSK_COR;
-    }
-
-    if (fs_attr_root->flags & TSK_FS_ATTR_NONRES) {
-        tsk_error_reset();
-        tsk_error_set_errno(TSK_ERR_FS_INODE_COR);
-        tsk_error_set_errstr
+    // NOTE: We had one error reported on a system that did not have IDX_ROOT, but did have IDX_ALLOC
+    if (fs_attr_root) {
+        if (fs_attr_root->flags & TSK_FS_ATTR_NONRES) {
+            tsk_error_reset();
+            tsk_error_set_errno(TSK_ERR_FS_INODE_COR);
+            tsk_error_set_errstr
             ("dent_walk: $IDX_ROOT is not resident - it should be");
-        return TSK_COR;
-    }
-    idxroot = (ntfs_idxroot *) fs_attr_root->rd.buf;
+            return TSK_COR;
+        }
+        idxroot = (ntfs_idxroot *)fs_attr_root->rd.buf;
 
-    /* Verify that the attribute type is $FILE_NAME */
-    if (tsk_getu32(a_fs->endian, idxroot->type) == 0) {
-        tsk_error_reset();
-        tsk_error_set_errno(TSK_ERR_FS_INODE_COR);
-        tsk_error_set_errstr
+        /* Verify that the attribute type is $FILE_NAME */
+        if (tsk_getu32(a_fs->endian, idxroot->type) == 0) {
+            tsk_error_reset();
+            tsk_error_set_errno(TSK_ERR_FS_INODE_COR);
+            tsk_error_set_errstr
             ("dent_walk: Attribute type in index root is 0");
-        return TSK_COR;
-    }
-    else if (tsk_getu32(a_fs->endian, idxroot->type) != NTFS_ATYPE_FNAME) {
-        tsk_error_reset();
-        tsk_error_set_errno(TSK_ERR_FS_INODE_COR);
-        tsk_error_set_errstr("ERROR: Directory index is sorted by type: %"
-            PRIu32 ".\nOnly $FNAME is currently supported",
-            tsk_getu32(a_fs->endian, idxroot->type));
-        return TSK_COR;
+            return TSK_COR;
+        }
+        else if (tsk_getu32(a_fs->endian, idxroot->type) != NTFS_ATYPE_FNAME) {
+            tsk_error_reset();
+            tsk_error_set_errno(TSK_ERR_FS_INODE_COR);
+            tsk_error_set_errstr("ERROR: Directory index is sorted by type: %"
+                PRIu32 ".\nOnly $FNAME is currently supported",
+                tsk_getu32(a_fs->endian, idxroot->type));
+            return TSK_COR;
+        }
     }
 
     
@@ -924,49 +922,52 @@ ntfs_dir_open_meta(TSK_FS_INFO * a_fs, TSK_FS_DIR ** a_fs_dir,
 
 
     /* Now we return to processing the Index Root Attribute */
-    if (tsk_verbose)
-        tsk_fprintf(stderr,
-            "ntfs_dir_open_meta: Processing $IDX_ROOT of inum %" PRIuINUM
-            "\n", a_addr);
+    if (fs_attr_root) {
+
+        if (tsk_verbose)
+            tsk_fprintf(stderr,
+                "ntfs_dir_open_meta: Processing $IDX_ROOT of inum %" PRIuINUM
+                "\n", a_addr);
 
-    /* Get the header of the index entry list */
-    idxelist = &idxroot->list;
+        /* Get the header of the index entry list */
+        idxelist = &idxroot->list;
 
-    /* Verify the offset pointers */
-    if ((tsk_getu32(a_fs->endian, idxelist->seqend_off) <
+        /* Verify the offset pointers */
+        if ((tsk_getu32(a_fs->endian, idxelist->seqend_off) <
             tsk_getu32(a_fs->endian, idxelist->begin_off)) ||
-        (tsk_getu32(a_fs->endian, idxelist->bufend_off) <
-            tsk_getu32(a_fs->endian, idxelist->seqend_off)) ||
-        (((uintptr_t) idxelist + tsk_getu32(a_fs->endian,
+            (tsk_getu32(a_fs->endian, idxelist->bufend_off) <
+                tsk_getu32(a_fs->endian, idxelist->seqend_off)) ||
+                (((uintptr_t)idxelist + tsk_getu32(a_fs->endian,
                     idxelist->bufend_off)) >
-            ((uintptr_t) fs_attr_root->rd.buf +
-                fs_attr_root->rd.buf_size))) {
-        tsk_error_reset();
-        tsk_error_set_errno(TSK_ERR_FS_INODE_COR);
-        tsk_error_set_errstr
+                    ((uintptr_t)fs_attr_root->rd.buf +
+                        fs_attr_root->rd.buf_size))) {
+            tsk_error_reset();
+            tsk_error_set_errno(TSK_ERR_FS_INODE_COR);
+            tsk_error_set_errstr
             ("Error: Index list offsets are invalid on entry: %" PRIuINUM,
-            fs_dir->fs_file->meta->addr);
-        return TSK_COR;
-    }
+                fs_dir->fs_file->meta->addr);
+            return TSK_COR;
+        }
 
-    /* Get the offset to the start of the index entry list */
-    idxe = (ntfs_idxentry *) ((uintptr_t) idxelist +
-        tsk_getu32(a_fs->endian, idxelist->begin_off));
+        /* Get the offset to the start of the index entry list */
+        idxe = (ntfs_idxentry *)((uintptr_t)idxelist +
+            tsk_getu32(a_fs->endian, idxelist->begin_off));
 
-    retval_tmp = ntfs_proc_idxentry(ntfs, fs_dir,
-        (fs_dir->fs_file->meta->flags & TSK_FS_META_FLAG_UNALLOC) ? 1 : 0,
-        idxe,
-        tsk_getu32(a_fs->endian, idxelist->bufend_off) -
-        tsk_getu32(a_fs->endian, idxelist->begin_off),
-        tsk_getu32(a_fs->endian, idxelist->seqend_off) -
-        tsk_getu32(a_fs->endian, idxelist->begin_off));
+        retval_tmp = ntfs_proc_idxentry(ntfs, fs_dir,
+            (fs_dir->fs_file->meta->flags & TSK_FS_META_FLAG_UNALLOC) ? 1 : 0,
+            idxe,
+            tsk_getu32(a_fs->endian, idxelist->bufend_off) -
+            tsk_getu32(a_fs->endian, idxelist->begin_off),
+            tsk_getu32(a_fs->endian, idxelist->seqend_off) -
+            tsk_getu32(a_fs->endian, idxelist->begin_off));
 
-    // stop if we get an error, continue if we got corruption
-    if (retval_tmp == TSK_ERR) {
-        return TSK_ERR;
-    }
-    else if (retval_tmp == TSK_COR) {
-        retval_final = TSK_COR;
+        // stop if we get an error, continue if we got corruption
+        if (retval_tmp == TSK_ERR) {
+            return TSK_ERR;
+        }
+        else if (retval_tmp == TSK_COR) {
+            retval_final = TSK_COR;
+        }
     }
 
     /*
@@ -1002,6 +1003,23 @@ ntfs_dir_open_meta(TSK_FS_INFO * a_fs, TSK_FS_DIR ** a_fs_dir,
             return TSK_COR;
         }
 
+        /* Verify that the attribute type is $FILE_NAME */
+        if (tsk_getu32(a_fs->endian, fs_attr_idx->type) == 0) {
+            tsk_error_reset();
+            tsk_error_set_errno(TSK_ERR_FS_INODE_COR);
+            tsk_error_set_errstr
+            ("dent_walk: Attribute type in index alloc is 0");
+            return TSK_COR;
+        }
+        else if (tsk_getu32(a_fs->endian, fs_attr_idx->type) != NTFS_ATYPE_FNAME) {
+            tsk_error_reset();
+            tsk_error_set_errno(TSK_ERR_FS_INODE_COR);
+            tsk_error_set_errstr("ERROR: Directory index is sorted by type: %"
+                PRIu32 ".\nOnly $FNAME is currently supported",
+                tsk_getu32(a_fs->endian, fs_attr_idx->type));
+            return TSK_COR;
+        }
+
         /*
          * Copy the index allocation run into a big buffer
          */