TODO: finish this god damn thing