completed refactor -- all features are held within self.features