restructure to better match Dart conventions