sort of working, super duper messy