almost finished need to test