warning, reading this will take awhile