First major pass at chat implementation