Refactored, now handles observables as rob wanted it :D