using bind instead of self, added shrink