diff --git a/pom.xml b/pom.xml
index 2424af1..8ee015e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,7 +53,7 @@
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
             <version>3.8</version>
-            <scope>provided</scope>
+            <scope>compile</scope>
         </dependency>
     </dependencies>
 </project>
diff --git a/src/main/java/org/apache/sling/contentparser/testutils/mapsupport/ContentElement.java b/src/main/java/org/apache/sling/contentparser/testutils/mapsupport/ContentElement.java
index 37bb5ad..d5bb5ab 100644
--- a/src/main/java/org/apache/sling/contentparser/testutils/mapsupport/ContentElement.java
+++ b/src/main/java/org/apache/sling/contentparser/testutils/mapsupport/ContentElement.java
@@ -18,35 +18,71 @@
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 package org.apache.sling.contentparser.testutils.mapsupport;
 
+import java.util.LinkedHashMap;
 import java.util.Map;
 
+import org.apache.commons.lang3.StringUtils;
+
 /**
- * Represents a resource or node in the content hierarchy.
+ * Implements support for a {@link org.apache.sling.contentparser.api.ContentHandler} parsed resource to use during
+ * {@link org.apache.sling.contentparser.api.ContentParser} tests.
  */
-public interface ContentElement {
+public final class ContentElement {
+
+    private final String name;
+    private final Map<String, Object> properties;
+    private final Map<String, ContentElement> children = new LinkedHashMap<>();
+
+    ContentElement(String name, Map<String, Object> properties) {
+        this.name = name;
+        this.properties = properties;
+    }
 
     /**
-     * @return Resource name. The root resource has no name (null).
+     * Returns the name of the resource.
+     *
+     * @return resource name; the root resource has no name (null).
      */
-    String getName();
-    
+    public String getName() {
+        return name;
+    }
+
     /**
      * Properties of this resource.
-     * @return Properties (keys, values)
+     *
+     * @return this resource's properties (keys, values)
      */
-    Map<String, Object> getProperties();
-    
+    public Map<String, Object> getProperties() {
+        return properties;
+    }
+
     /**
-     * Get children of current resource. The Map preserves the ordering of children.
-     * @return Children (child names, child objects)
+     * Returns the children of this resource. The Map preserves the children's ordering.
+     *
+     * @return the children of this resource (child names, child objects)
      */
-    Map<String, ContentElement> getChildren();
-    
+    public Map<String, ContentElement> getChildren() {
+        return children;
+    }
+
     /**
-     * Get child or descendant
-     * @param path Relative path to address child or one of it's descendants (use "/" as hierarchy separator).
-     * @return Child or null if no child found with this path
+     * Returns the child with the specified {@code path}.
+     *
+     * @param path relative path to address child or one of its descendants (use "/" as hierarchy separator)
+     * @return child or {@code null} if no child was found for the specified {@code path}
      */
-    ContentElement getChild(String path);
-    
+    public ContentElement getChild(String path) {
+        String name = StringUtils.substringBefore(path, "/");
+        ContentElement child = children.get(name);
+        if (child == null) {
+            return null;
+        }
+        String remainingPath = StringUtils.substringAfter(path, "/");
+        if (StringUtils.isEmpty(remainingPath)) {
+            return child;
+        } else {
+            return child.getChild(remainingPath);
+        }
+    }
+
 }
diff --git a/src/main/java/org/apache/sling/contentparser/testutils/mapsupport/ContentElementHandler.java b/src/main/java/org/apache/sling/contentparser/testutils/mapsupport/ContentElementHandler.java
index c6e3f54..0714ae7 100644
--- a/src/main/java/org/apache/sling/contentparser/testutils/mapsupport/ContentElementHandler.java
+++ b/src/main/java/org/apache/sling/contentparser/testutils/mapsupport/ContentElementHandler.java
@@ -28,7 +28,7 @@
 /**
  * {@link ContentHandler} implementation that produces a tree of {@link ContentElement} items.
  */
-public class ContentElementHandler implements ContentHandler {
+public final class ContentElementHandler implements ContentHandler {
     
     private ContentElement root;
     private Pattern PATH_PATTERN = Pattern.compile("^((/[^/]+)*)(/([^/]+))$"); 
@@ -36,7 +36,7 @@
     @Override
     public void resource(String path, Map<String, Object> properties) {
         if (StringUtils.equals(path, "/")) {
-            root = new ContentElementImpl(null, properties);
+            root = new ContentElement(null, properties);
         }
         else {
             if (root == null) {
@@ -58,7 +58,7 @@
             if (parent == null) {
                 throw new RuntimeException("Parent '" + relativeParentPath + "' does not exist.");
             }
-            parent.getChildren().put(name, new ContentElementImpl(name, properties));
+            parent.getChildren().put(name, new ContentElement(name, properties));
         }
     }
     
diff --git a/src/main/java/org/apache/sling/contentparser/testutils/mapsupport/ContentElementImpl.java b/src/main/java/org/apache/sling/contentparser/testutils/mapsupport/ContentElementImpl.java
deleted file mode 100644
index 93ec66e..0000000
--- a/src/main/java/org/apache/sling/contentparser/testutils/mapsupport/ContentElementImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements.  See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership.  The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License.  You may obtain a copy of the License at
- ~
- ~   http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied.  See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
-package org.apache.sling.contentparser.testutils.mapsupport;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.apache.commons.lang3.StringUtils;
-
-final class ContentElementImpl implements ContentElement {
-    
-    private final String name;
-    private final Map<String, Object> properties;
-    private final Map<String, ContentElement> children = new LinkedHashMap<>();
-    
-    public ContentElementImpl(String name, Map<String, Object> properties) {
-        this.name = name;
-        this.properties = properties;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public Map<String, Object> getProperties() {
-        return properties;
-    }
-
-    @Override
-    public Map<String, ContentElement> getChildren() {
-        return children;
-    }
-
-    @Override
-    public ContentElement getChild(String path) {
-        String name = StringUtils.substringBefore(path, "/");
-        ContentElement child = children.get(name);
-        if (child == null) {
-          return null;
-        }
-        String remainingPath = StringUtils.substringAfter(path, "/");
-        if (StringUtils.isEmpty(remainingPath)) {
-          return child;
-        }
-        else {
-          return child.getChild(remainingPath);
-        }
-    }
-
-}
