Refactored to separate Path from Shape