refactored to have names for patterns
working on introducing Cell