Add more inner methods
Finish basic function