version 1.0 - final implementation