added @Nonnull where applicable