added selection change observer & made little optimization tweaks

#WIP :construction: