Optimisations: use Symbol equal, and reduce silly cases and lets