refactored with mixins to allow for nested columns