refactor via method extraction and spec new features