first ver
a version that compile