compelete first version