try to implement skeleton(not finish yet)