Done with Observer, has all possible functionality I need