diff --git a/openapi_schema_validator/_keywords.py b/openapi_schema_validator/_keywords.py
index 08c8078..6692580 100644
--- a/openapi_schema_validator/_keywords.py
+++ b/openapi_schema_validator/_keywords.py
@@ -234,27 +234,21 @@ def additionalProperties(
             yield ValidationError(error % extras_msg(extras))
 
 
-def readOnly(
+def write_readOnly(
     validator: Validator,
     ro: bool,
     instance: Any,
     schema: Mapping[Hashable, Any],
 ) -> Iterator[ValidationError]:
-    if not getattr(validator, "write", True) or not ro:
-        return
-
     yield ValidationError(f"Tried to write read-only property with {instance}")
 
 
-def writeOnly(
+def read_writeOnly(
     validator: Validator,
     wo: bool,
     instance: Any,
     schema: Mapping[Hashable, Any],
 ) -> Iterator[ValidationError]:
-    if not getattr(validator, "read", True) or not wo:
-        return
-
     yield ValidationError(f"Tried to read write-only property with {instance}")
 
 
diff --git a/openapi_schema_validator/validators.py b/openapi_schema_validator/validators.py
index f541655..44b5a42 100644
--- a/openapi_schema_validator/validators.py
+++ b/openapi_schema_validator/validators.py
@@ -49,8 +49,8 @@
         "$ref": _keywords.ref,
         # fixed OAS fields
         "discriminator": oas_keywords.not_implemented,
-        "readOnly": oas_keywords.readOnly,
-        "writeOnly": oas_keywords.writeOnly,
+        "readOnly": oas_keywords.not_implemented,
+        "writeOnly": oas_keywords.not_implemented,
         "xml": oas_keywords.not_implemented,
         "externalDocs": oas_keywords.not_implemented,
         "example": oas_keywords.not_implemented,
@@ -68,16 +68,14 @@
     OAS30Validator,
     validators={
         "required": oas_keywords.read_required,
-        "readOnly": oas_keywords.not_implemented,
-        "writeOnly": oas_keywords.writeOnly,
+        "writeOnly": oas_keywords.read_writeOnly,
     },
 )
 OAS30WriteValidator = extend(
     OAS30Validator,
     validators={
         "required": oas_keywords.write_required,
-        "readOnly": oas_keywords.readOnly,
-        "writeOnly": oas_keywords.not_implemented,
+        "readOnly": oas_keywords.write_readOnly,
     },
 )
 
diff --git a/tests/integration/test_validators.py b/tests/integration/test_validators.py
index 9413581..07bc4df 100644
--- a/tests/integration/test_validators.py
+++ b/tests/integration/test_validators.py
@@ -596,6 +596,11 @@ def test_read_only(self):
             format_checker=oas30_format_checker,
         )
         assert validator.validate({"some_prop": "hello"}) is None
+        validator = OAS30Validator(
+            schema,
+            format_checker=oas30_format_checker,
+        )
+        assert validator.validate({"some_prop": "hello"}) is None
 
     def test_write_only(self):
         schema = {
@@ -617,6 +622,11 @@ def test_write_only(self):
             format_checker=oas30_format_checker,
         )
         assert validator.validate({"some_prop": "hello"}) is None
+        validator = OAS30Validator(
+            schema,
+            format_checker=oas30_format_checker,
+        )
+        assert validator.validate({"some_prop": "hello"}) is None
 
     def test_required_read_only(self):
         schema = {