mostly finished need more test