added more explicit read/write methods to try and avoid using the general read/write