slightly mucked up but stable enough