V1.0, still need to check for bugs