Refactored as constructor, behavior matches master