restructured (and broke) everything for client-side only