Should add argument check, otherwise almost finished