all complete but helper method