pull aprt further to reduce complexity