Almost finished, few bugs