completed part 2, though not fully functioning yet