Merged Simple version, which is completed