finished 4, could make it more efficient