current design and implementation are too dirty
current design and implementation are too dirty