implemented what i could, most is broken