This is the finished version 1.0