Revert 0e34d56..f6db5ef

This rolls back to commit 0e34d56e9dfffbe22d900ab092e9d2c574ca26aa.
Revert ef3f903..75d6ee9

This rolls back to commit ef3f903780bb1283cca76342b6361bd435217e9d.
refactor