added utility module and various utility classes
refactored to support optional