In my experience, trying to accomodate a component to be `common` when in reality the behavior of the client and server are very different will bring problems. I wonder if we should split this into server and client.