Please keep in alphabetical order so utilities are easier to find.

Thanks,
	Anton


**********
* mkntfs *
**********

- Correct support for creating volumes with larger sector sizes (mft record
  size, cluster size, and index block size must be >= sector size), so for 1k,
  2k, and 4k sectors, we need to set the default mft record, cluster, and index
  block size to be at least the sector size.
- Correct the odd last partition sector not being accessible under 2.4 kernels
  by setting the device block size to the sector size (default is 1k on 2.4
  kernels and they can't cope with partial sectors).
- Got a report that creating a floppy with mkntfs failed.  Difference between
  this floppy and the floppy created by the special tool found on the net was
  said to be that the bitmap is 256kib on the special floppy while mkntfs will
  make it much smaller.  Need to verify this and experiment with the bitmap
  size to make it work.  Note, reporter was using win2k.


*************
* ntfsclone *
*************

- get rid of the unneeded lseek()'s during reads/writes (probably it 
  doesn't improve performance much, or any at all)
- catch if source and dest are the same
- disable consistency check for --metadata (e.g. if the check is crashing)
- option: --inode 
- option: --data
- metadata cloning: skip more non-needed inodes
- manual: document LFS issues (smbfs' lfs option, nfs)
- manual: mention optimized seeks
- manual: optimal backup if disks have bad sectors
- manual: ntfsclone guarantees the restored image works only
  if one restores to the exactly same partition. For example,
  one can not copy system partition to a different partition:
  minimum "hidden sectors" field and BOOT.INI need modifications.
  We could do these adjustments optionally.
- check if kernel block size = GCD(page size, device size) makes
  effect on performance (Al Viro says no)
- check whether the O_WRONLY -> O_RDWR change made effect on performance


***********
* ntfscmp *
***********

- compare mft record headers
- exit status is 0 if inputs are the same, 1 if different, other if trouble
- optionally ignore less interesting fields (e.g. attribute instance)
- new option: --metadata mode
- unnamed resident attributes with same type are ignored
- code cleanup, remove many cross-util duplicates
- handle deleted records
- performance: special handling for sparse files


**********
* ntfscp *
**********

- add ability to copy multiple files at once.


***********
* ntfsfix *
***********

- Cleanup to use ntfs_attr_* API for editing $MFTMirr, $Volume, and $LogFile.
  This has the immediate benefit of enabling attribute list support and making
  the code simpler.
- On ntfs 3.0+ volumes need to disable the usn journal if it is active.  This
  means deleting file $UsnJrnl from /$Extend directory.
- On ntfs 3.0+ volumes need to mark the quota out of date? - Probably, but
  it shouldn't cause any corruption not doing so for the moment so this is
  not a showstopper bug for the first release. (AIA)


*************
* ntfslabel *
*************

- Support ioctls for kernel driver and ntfsmount for reading/changing the label.


*************
* ntfsmount *
*************



**************
* ntfsresize *
**************

High priority
  - move ntfs consistency check to libntfs (for ntfsck, ntfsclone, etc)
  - use different exit codes (e.g. corrupt volume detected, unsupported case, 
    bad sectors, etc) 

Medium priority 
  - cope with the rare, unsupported cases, see man ntfsresize 'KNOWN ISSUES'
  - save $Bitmap if it was modified and an error occures (e.g. bad sector).
  - handle signals (^C, etc)

Low priority
  - fully support disks with bad sectors (attrlist attr, unknown bad sectors)
  - move volume start


****************
* ntfsundelete *
****************

- undelete by name rather than inode number
- support for compressed files
- support for internationalisation
- recover by type?
- mass undelete (using wildcards)
- display parent directory
- name "<none>" to MFTn
