handle empty results
make classes final
force ctor arg