feature 10 impl.
feature10, refined
rebased
test