continued shape refactoring #19