diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidator.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidator.java
index 2679e54..f7b7551 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidator.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidator.java
@@ -13,13 +13,16 @@
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private final TraversalHelperFactory traversalHelperFactory;
   private final ExtensionSchemaValidator schemaValidator;
+  private final ExtensionScopeValidator scopeValidator;
 
-  // TODO(b/161441872) : Inject ExtensionScopeValidator
   @Inject
   BaseExtendedValidator(
-      TraversalHelperFactory traversalHelperFactory, ExtensionSchemaValidator schemaValidator) {
+      TraversalHelperFactory traversalHelperFactory,
+      ExtensionSchemaValidator schemaValidator,
+      ExtensionScopeValidator scopeValidator) {
     this.traversalHelperFactory = traversalHelperFactory;
     this.schemaValidator = schemaValidator;
+    this.scopeValidator = scopeValidator;
   }
 
   @Override
@@ -40,15 +43,13 @@
   private ImmutableSet<ExtensionValidationMessage> validateSchemaAndScope(
       ImmutableSet<Extension> extensions) {
 
-    return
-        extensions.stream()
-            .filter(extension -> valueOfExtensionName(extension.getExtensionName()).isPresent())
-            .flatMap(
-                extension ->
-                    ImmutableSet.<ExtensionValidationMessage>builder()
-                        .addAll(extension.validate(schemaValidator)).build().stream())
-            .collect(ImmutableSet.toImmutableSet());
-
-    // TODO(b/161441872) : Add extension scope validation logic
+    return extensions.stream()
+        .filter(extension -> valueOfExtensionName(extension.getExtensionName()).isPresent())
+        .flatMap(
+            extension ->
+                ImmutableSet.<ExtensionValidationMessage>builder()
+                    .addAll(extension.validate(schemaValidator))
+                    .addAll(extension.validate(scopeValidator)).build().stream())
+        .collect(ImmutableSet.toImmutableSet());
   }
 }
diff --git a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidatorTest.java b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidatorTest.java
index 0ff912a..86be8d9 100644
--- a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidatorTest.java
+++ b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidatorTest.java
@@ -30,8 +30,11 @@
   @Mock private OpenApi3 openApiSpec;
   @Mock private Extension supportedExtension;
   @Mock private Extension unsupportedExtension;
+  @Mock private ExtensionValidationMessage schemaMessage;
+  @Mock private ExtensionValidationMessage scopeMessage;
 
-  @Mock private ExtensionSchemaValidator extensionSchemaValidator;
+  @Mock private ExtensionSchemaValidator schemaValidator;
+  @Mock private ExtensionScopeValidator scopeValidator;
   @Mock private TraversalHelperFactory traversalHelperFactory;
   @Mock private TraversalHelper traversalHelper;
   @InjectMocks private BaseExtendedValidator baseExtendedValidator;
@@ -55,7 +58,7 @@
   @Test
   public void validate_supportedExtension_callsExtensionValidate() {
     when(supportedExtension.getExtensionName()).thenReturn(X_SECURITY_TYPE.getExtensionName());
-    when(supportedExtension.validate(extensionSchemaValidator)).thenReturn(ImmutableSet.of());
+    when(supportedExtension.validate(any(ExtensionValidator.class))).thenReturn(ImmutableSet.of());
     when(traversalHelper.traverse()).thenReturn(ImmutableSet.of(supportedExtension));
 
     baseExtendedValidator.validate(openApiSpec);
@@ -73,15 +76,12 @@
   }
 
   @Test
-  public void validate_withExtensions_returnsExtensionValidationMessage() {
-    ExtensionValidationMessage message =
-        ExtensionValidationMessage.builder().setType("").setMessage("").setPath("").build();
-
+  public void validate_withExtensions_returnsExactExtensionValidationMessages() {
     when(supportedExtension.getExtensionName()).thenReturn(X_SECURITY_TYPE.getExtensionName());
     when(traversalHelper.traverse()).thenReturn(ImmutableSet.of(supportedExtension));
-    when(supportedExtension.validate(any(ExtensionValidator.class)))
-        .thenReturn(ImmutableSet.of(message));
+    when(supportedExtension.validate(schemaValidator)).thenReturn(ImmutableSet.of(schemaMessage));
+    when(supportedExtension.validate(scopeValidator)).thenReturn(ImmutableSet.of(scopeMessage));
 
-    assertThat(baseExtendedValidator.validate(openApiSpec)).hasSize(1);
+    assertThat(baseExtendedValidator.validate(openApiSpec)).hasSize(2);
   }
 }
