diff --git a/pom.xml b/pom.xml
index 9dcb3a2..a3ec04a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,8 +60,6 @@
                             Import-Package: \
                               <!-- WebConsole support is optional -->\
                               org.apache.felix.webconsole;resolution:=optional,\
-                              <!-- Support XSS API 1.x and 2.x - we use only classes from the API with same signature in both versions -->\
-                              org.apache.sling.xss;version="[1.0.0,3)",\
                               *
                             </bnd>
                         </configuration>
@@ -184,7 +182,7 @@
             <version>1.0-alpha-1</version>
             <scope>provided</scope>
         </dependency>
-        
+
         <!-- web console dependencies -->
         <dependency>
             <groupId>org.apache.felix</groupId>
@@ -199,12 +197,12 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.xss</artifactId>
-            <version>1.0.0</version>
+            <groupId>org.owasp.encoder</groupId>
+            <artifactId>encoder</artifactId>
+            <version>1.2.3</version>
             <scope>provided</scope>
         </dependency>
-        
+
         <!-- test dependencies -->
         <dependency>
             <groupId>org.apache.sling</groupId>
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationWebConsolePlugin.java b/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationWebConsolePlugin.java
index 4d6738e..d03e3cf 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationWebConsolePlugin.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationWebConsolePlugin.java
@@ -44,11 +44,11 @@
 import org.apache.sling.caconfig.management.ValueInfo;
 import org.apache.sling.caconfig.management.multiplexer.ContextPathStrategyMultiplexer;
 import org.apache.sling.caconfig.resource.spi.ContextResource;
-import org.apache.sling.xss.XSSAPI;
 import org.osgi.framework.Constants;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferencePolicyOption;
+import org.owasp.encoder.Encode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -77,9 +77,6 @@
     @Reference(policyOption = ReferencePolicyOption.GREEDY)
     private ContextPathStrategyMultiplexer contextPathStrategyMultiplexer;
 
-    @Reference(policyOption = ReferencePolicyOption.GREEDY)
-    private XSSAPI xss;
-
     @Override
     public String getLabel() {
         return LABEL;
@@ -177,8 +174,8 @@
                 while (contextResources.hasNext()) {
                     ContextResource contextResource = contextResources.next();
                     tableRows(pw);
-                    pw.println("<td>" + xss.encodeForHTML(contextResource.getResource().getPath()) + "</td>");
-                    pw.println("<td>" + xss.encodeForHTML(contextResource.getConfigRef()) + "</td>");
+                    pw.println("<td>" + Encode.forHtmlContent(contextResource.getResource().getPath()) + "</td>");
+                    pw.println("<td>" + Encode.forHtmlContent(contextResource.getConfigRef()) + "</td>");
                     pw.println("<td>" + contextResource.getServiceRanking() + "</td>");
                 }
                 tableEnd(pw);
@@ -219,7 +216,7 @@
                     for (ConfigurationData data : configDatas) {
                         tableRows(pw);
                         pw.println("<td colspan='6' style='background-color:#f3f3f3'>");
-                        pw.print("Path: " + xss.encodeForHTML(data.getResourcePath()));
+                        pw.print("Path: " + Encode.forHtmlContent(data.getResourcePath()));
                         pw.println("</td>");
 
                         for (String propertyName : data.getPropertyNames()) {
@@ -259,7 +256,7 @@
 
     private void info(PrintWriter pw, String text) {
         pw.print("<p class='statline ui-state-highlight'>");
-        pw.print(xss.encodeForHTML(text));
+        pw.print(Encode.forHtmlContent(text));
         pw.println("</p>");
     }
 
@@ -270,7 +267,7 @@
         pw.print("<th colspan=");
         pw.print(String.valueOf(colspan));
         pw.print(">");
-        pw.print(xss.encodeForHTML(title));
+        pw.print(Encode.forHtmlContent(title));
         pw.println("</th>");
         pw.println("</tr>");
         pw.println("</thead>");
@@ -291,12 +288,12 @@
 
     private void textField(PrintWriter pw, String label, String fieldName, String value, String... alertMessages) {
         pw.print("<td style='width:20%'>");
-        pw.print(xss.encodeForHTMLAttr(label));
+        pw.print(Encode.forHtmlContent(label));
         pw.println("</td>");
         pw.print("<td><input name='");
-        pw.print(xss.encodeForHTMLAttr(fieldName));
+        pw.print(Encode.forHtmlAttribute(fieldName));
         pw.print("' value='");
-        pw.print(xss.encodeForHTMLAttr(StringUtils.defaultString(value)));
+        pw.print(Encode.forHtmlAttribute(StringUtils.defaultString(value)));
         pw.print("' style='width:100%'/>");
         for (String alertMessage : alertMessages) {
             alertDiv(pw, alertMessage);
@@ -306,10 +303,10 @@
 
     private void selectField(PrintWriter pw, String label, String fieldName, String value, Collection<String> options) {
         pw.print("<td style='width:20%'>");
-        pw.print(xss.encodeForHTMLAttr(label));
+        pw.print(Encode.forHtmlContent(label));
         pw.println("</td>");
         pw.print("<td><select name='");
-        pw.print(xss.encodeForHTMLAttr(fieldName));
+        pw.print(Encode.forHtmlAttribute(fieldName));
         pw.print("' style='width:100%'>");
         pw.print("<option value=''>(please select)</option>");
         for (String option : options) {
@@ -318,7 +315,7 @@
                 pw.print(" selected");
             }
             pw.print(">");
-            pw.print(xss.encodeForHTMLAttr(option));
+            pw.print(Encode.forHtmlAttribute(option));
             pw.print("</option>");
         }
         pw.print("</select>");
@@ -327,10 +324,10 @@
 
     private void checkboxField(PrintWriter pw, String label, String fieldName, boolean checked) {
         pw.print("<td style='width:20%'>");
-        pw.print(xss.encodeForHTMLAttr(label));
+        pw.print(Encode.forHtmlContent(label));
         pw.println("</td>");
         pw.print("<td><input type='checkbox' name='");
-        pw.print(xss.encodeForHTMLAttr(fieldName));
+        pw.print(Encode.forHtmlAttribute(fieldName));
         pw.print("' value='true'");
         if (checked) {
             pw.print(" checked");
@@ -345,7 +342,7 @@
         pw.println("<div>");
         pw.println("<span class='ui-icon ui-icon-alert' style='float:left'></span>");
         pw.print("<span style='float:left'>");
-        pw.print(xss.encodeForHTML(text));
+        pw.print(Encode.forHtmlContent(text));
         pw.println("</span>");
         pw.println("</div>");
     }
@@ -354,7 +351,7 @@
         pw.print("<td");
         if (title.length > 0 && !StringUtils.isBlank(title[0])) {
             pw.print(" title='");
-            pw.print(xss.encodeForHTML(title[0]));
+            pw.print(Encode.forHtmlAttribute(title[0]));
             pw.print("'");
         }
         pw.print(">");
@@ -363,12 +360,12 @@
             if (value.getClass().isArray()) {
                 for (int i = 0; i < Array.getLength(value); i++) {
                     Object itemValue = Array.get(value, i);
-                    pw.print(xss.encodeForHTML(ObjectUtils.defaultIfNull(itemValue, "").toString()));
+                    pw.print(Encode.forHtmlContent(ObjectUtils.defaultIfNull(itemValue, "").toString()));
                     pw.println("<br>");
                 }
             }
             else {
-                pw.print(xss.encodeForHTML(value.toString()));
+                pw.print(Encode.forHtmlContent(value.toString()));
             }
         }
 
