diff --git a/CHANGES.txt b/CHANGES.txt
index 53fda1fd4363ef584d2180b9b5513b9d14759928..82f35f041589165deded8df5e13d526b46331dda 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -77,6 +77,9 @@ after the initialized part of an NTFS file (VDL Slack).
 5/7/09: Update: Finish rest of 2367426 so that uninitialized file
 space is shown if slack space is requested.
 
+5/8/09: Update: Resolved issue 2596153 by changing arguments to the
+img_open functions.
+
 
 ---------------- VERSION 3.0.1 -------------- 
 11/11/08: Bug Fix: Fixed crashing bug in ifind on FAT file system.
diff --git a/tsk3/fs/fs_attr.c b/tsk3/fs/fs_attr.c
index 12fe109d38e1fb4c2b1511beed59f356dc4ac9b8..47785f75a3731a45998ca2ac215d7ac5204798ae 100644
--- a/tsk3/fs/fs_attr.c
+++ b/tsk3/fs/fs_attr.c
@@ -839,7 +839,7 @@ tsk_fs_attr_walk_nonres(const TSK_FS_ATTR * fs_attr,
                     if ((off + fs->block_size > fs_attr->nrd.initsize)
                         && ((a_flags & TSK_FS_FILE_READ_FLAG_SLACK) == 0)) {
                         memset(&buf[fs_attr->nrd.initsize - off], 0,
-                            fs->block_size - (fs_attr->nrd.initsize -
+                            fs->block_size - (size_t)(fs_attr->nrd.initsize -
                                 off));
                     }
                 }
@@ -1116,9 +1116,9 @@ tsk_fs_attr_read(const TSK_FS_ATTR * a_fs_attr, TSK_OFF_T a_offset,
                         meta->addr : 0);
             }
             // we return 0s for reads past the initsize (unless they want slack space)
-            else if (((data_run_cur->offset +
+            else if (((TSK_OFF_T)((data_run_cur->offset +
                         blkoffset_inrun) * fs->block_size +
-                    byteoffset_toread >= a_fs_attr->nrd.initsize)
+                    byteoffset_toread) >= a_fs_attr->nrd.initsize)
                 && ((a_flags & TSK_FS_FILE_READ_FLAG_SLACK) == 0)) {
                 memset(&a_buf[len_toread - len_remain], 0, len_inrun);
                 if (tsk_verbose)
@@ -1158,16 +1158,16 @@ tsk_fs_attr_read(const TSK_FS_ATTR * a_fs_attr, TSK_OFF_T a_offset,
                 }
 
                 // see if part of the data is in the non-initialized space
-                if (((data_run_cur->offset +
+                if (((TSK_OFF_T)((data_run_cur->offset +
                             blkoffset_inrun) * fs->block_size +
-                        byteoffset_toread + len_inrun >
+                        byteoffset_toread + len_inrun) >
                         a_fs_attr->nrd.initsize)
                     && ((a_flags & TSK_FS_FILE_READ_FLAG_SLACK) == 0)) {
                     size_t off =
-                        (data_run_cur->offset +
+                        (size_t)((data_run_cur->offset +
                         blkoffset_inrun) * fs->block_size +
                         byteoffset_toread + len_inrun -
-                        a_fs_attr->nrd.initsize;
+                        a_fs_attr->nrd.initsize);
                     memset(&a_buf[len_toread - len_remain + off], 0,
                         len_inrun - off);
                 }
diff --git a/tsk3/fs/ntfs.c b/tsk3/fs/ntfs.c
index 445c122b7d8c962ff1b74ee75f231cb4c449e41b..71c9295cfb1de18bb7371fca64d231c369029fcb 100644
--- a/tsk3/fs/ntfs.c
+++ b/tsk3/fs/ntfs.c
@@ -1513,7 +1513,7 @@ ntfs_file_read_special(const TSK_FS_ATTR * a_fs_attr,
                         (a_fs_attr->fs_file->meta->size - (a_offset +
                                 buf_idx)))
                         cpylen =
-                            (a_fs_attr->fs_file->meta->size - (a_offset +
+                            (size_t)(a_fs_attr->fs_file->meta->size - (a_offset +
                                 buf_idx));
 
                     memcpy(&a_buf[buf_idx], &comp.uncomp_buf[byteoffset],