remove dynamic casting because it leads to terrible design (which I was doing, so a major refactor of how that works is underway)