actually the code isn't so bad to use anymore