probably gonna redo all of this