remove this crap. too hard to understand