move to self pattern instead of bind(this)