there are pros and cons on both of the implementations