throw exception if fails ; add readsome