#27 fix design
#27 base implementation