add checksums, refactor optionals