diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/GraphContext.java b/bval-jsr/src/main/java/org/apache/bval/jsr/GraphContext.java
index 9ab4141..24ec601 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/GraphContext.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/GraphContext.java
@@ -30,7 +30,6 @@
 import org.apache.bval.jsr.util.NodeImpl;
 import org.apache.bval.jsr.util.PathImpl;
 import org.apache.bval.util.Exceptions;
-import org.apache.bval.util.Validate;
 import org.apache.bval.util.reflection.TypeUtils;
 
 public class GraphContext {
@@ -46,8 +45,8 @@
 
     private GraphContext(ApacheFactoryContext validatorContext, PathImpl path, Object value, GraphContext parent) {
         super();
-        this.validatorContext = Validate.notNull(validatorContext, "validatorContext");
-        this.path = Validate.notNull(path, "path");
+        this.validatorContext = validatorContext;
+        this.path = path;
         this.value = value;
         this.parent = parent;
     }
@@ -65,16 +64,16 @@
     }
 
     public GraphContext child(NodeImpl node, Object value) {
-        Validate.notNull(node, "node");
+        // Validate.notNull(node, "node");
         final PathImpl p = PathImpl.copy(path);
         p.addNode(node);
         return new GraphContext(validatorContext, p, value, this);
     }
 
     public GraphContext child(Path p, Object value) {
-        Validate.notNull(p, "Path");
+        // Validate.notNull(p, "Path");
         final PathImpl impl = PathImpl.of(p);
-        Validate.isTrue(impl.isSubPathOf(path), "%s is not a subpath of %s", p, path);
+        // Validate.isTrue(impl.isSubPathOf(path), "%s is not a subpath of %s", p, path);
         return new GraphContext(validatorContext, impl == p ? PathImpl.copy(impl) : impl, value, this);
     }
 
@@ -120,7 +119,6 @@
     }
 
     public ContainerElementKey runtimeKey(ContainerElementKey key) {
-        Validate.notNull(key);
         if (value != null) {
             final Class<?> containerClass = key.getContainerClass();
             final Class<? extends Object> runtimeType = value.getClass();
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/PropertyD.java b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/PropertyD.java
index 38cfaaa..0b1a285 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/PropertyD.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/PropertyD.java
@@ -28,7 +28,6 @@
 import org.apache.bval.jsr.GraphContext;
 import org.apache.bval.jsr.util.Methods;
 import org.apache.bval.jsr.util.PathImpl;
-import org.apache.bval.util.Validate;
 import org.apache.bval.util.reflection.Reflection;
 import org.apache.commons.weaver.privilizer.Privilizing;
 import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
@@ -94,7 +93,6 @@
     }
 
     public final Stream<GraphContext> read(GraphContext context) {
-        Validate.notNull(context);
         if (context.getValue() == null) {
             return Stream.empty();
         }
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Group.java b/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Group.java
index d7dd994..9092eb8 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Group.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Group.java
@@ -34,7 +34,6 @@
 
 import org.apache.bval.util.Exceptions;
 import org.apache.bval.util.ObjectWrapper;
-import org.apache.bval.util.Validate;
 
 /**
  * Immutable object that wraps an interface representing a single group.
@@ -128,7 +127,7 @@
      * @param group
      */
     public Group(Class<?> group) {
-        this.group = Validate.notNull(group);
+        this.group = group;
     }
 
     /**
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupStrategy.java b/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupStrategy.java
index 0b53a26..343283c 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupStrategy.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/groups/GroupStrategy.java
@@ -29,7 +29,6 @@
 import java.util.stream.Collectors;
 
 import org.apache.bval.jsr.util.ToUnmodifiable;
-import org.apache.bval.util.Validate;
 
 /**
  * Group strategy interface.
@@ -78,8 +77,6 @@
         protected final boolean ordered;
 
         public Composite(Collection<? extends GroupStrategy> components, boolean ordered) {
-            Validate.isTrue(Validate.notNull(components).stream().noneMatch(Objects::isNull),
-                "null component not permitted");
             this.components = new LinkedHashSet<>(components);
             this.ordered = ordered;
         }
@@ -155,8 +152,6 @@
     };
 
     public static GroupStrategy redefining(GroupStrategy source, Map<Group, ? extends GroupStrategy> redefinitions) {
-        Validate.notNull(source, "source");
-
         if (!(redefinitions == null || redefinitions.isEmpty())) {
             if (redefinitions.containsValue(null)) {
                 redefinitions = redefinitions.entrySet().stream().filter(e -> e.getValue() != null)
@@ -174,7 +169,6 @@
     }
 
     public static GroupStrategy simple(Collection<? extends Group> coll) {
-        Validate.notNull(coll);
         if (coll.size() == 1) {
             return coll.iterator().next();
         }
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/valueextraction/ValueExtractors.java b/bval-jsr/src/main/java/org/apache/bval/jsr/valueextraction/ValueExtractors.java
index 430f267..89f50e3 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/valueextraction/ValueExtractors.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/valueextraction/ValueExtractors.java
@@ -257,7 +257,6 @@
     }
 
     public void add(ValueExtractor<?> extractor) {
-        Validate.notNull(extractor);
         final ContainerElementKey key = ContainerElementKey.forValueExtractor(extractor);
         if (key == null) {
             Exceptions.raise(IllegalStateException::new, "Computed null %s for %s",
