we should probably break up this method