seperate base and impl.
add an example.