a lot of dirty coding