add OptionalReader