this method is really big. can it be condensed into smaller responsibilities? (even with private methods)