rebuilt "on" method, now it's faster and easier