diff --git a/src/main/java/org/apache/xml/security/stax/ext/AbstractOutputProcessor.java b/src/main/java/org/apache/xml/security/stax/ext/AbstractOutputProcessor.java
index 4603d03..32374d2 100644
--- a/src/main/java/org/apache/xml/security/stax/ext/AbstractOutputProcessor.java
+++ b/src/main/java/org/apache/xml/security/stax/ext/AbstractOutputProcessor.java
@@ -53,8 +53,8 @@
     protected XMLSecurityConstants.Action action;
 
     private XMLSecurityConstants.Phase phase = XMLSecurityConstants.Phase.PROCESSING;
-    private Set<Object> beforeProcessors;
-    private Set<Object> afterProcessors;
+    private Set<Class<? extends OutputProcessor>> beforeProcessors;
+    private Set<Class<? extends OutputProcessor>> afterProcessors;
 
     protected AbstractOutputProcessor() throws XMLSecurityException {
         super();
@@ -85,7 +85,7 @@
     }
 
     @Override
-    public void addBeforeProcessor(Object processor) {
+    public void addBeforeProcessor(Class<? extends OutputProcessor> processor) {
         if (this.beforeProcessors == null) {
             this.beforeProcessors = new HashSet<>();
         }
@@ -93,7 +93,7 @@
     }
 
     @Override
-    public Set<Object> getBeforeProcessors() {
+    public Set<Class<? extends OutputProcessor>> getBeforeProcessors() {
         if (this.beforeProcessors == null) {
             return Collections.emptySet();
         }
@@ -101,7 +101,7 @@
     }
 
     @Override
-    public void addAfterProcessor(Object processor) {
+    public void addAfterProcessor(Class<? extends OutputProcessor> processor) {
         if (this.afterProcessors == null) {
             this.afterProcessors = new HashSet<>();
         }
@@ -109,7 +109,7 @@
     }
 
     @Override
-    public Set<Object> getAfterProcessors() {
+    public Set<Class<? extends OutputProcessor>> getAfterProcessors() {
         if (this.afterProcessors == null) {
             return Collections.emptySet();
         }
diff --git a/src/main/java/org/apache/xml/security/stax/ext/OutputProcessor.java b/src/main/java/org/apache/xml/security/stax/ext/OutputProcessor.java
index d8572d2..82df967 100644
--- a/src/main/java/org/apache/xml/security/stax/ext/OutputProcessor.java
+++ b/src/main/java/org/apache/xml/security/stax/ext/OutputProcessor.java
@@ -54,28 +54,28 @@
      *
      * @param processor
      */
-    void addBeforeProcessor(Object processor);
+    void addBeforeProcessor(Class<? extends OutputProcessor> processor);
 
     /**
      * This OutputProcessor will be added before the processors in this set
      *
      * @return The set with the named OutputProcessor
      */
-    Set<Object> getBeforeProcessors();
+    Set<Class<? extends OutputProcessor>> getBeforeProcessors();
 
     /**
      * Add this processor after the given processor
      *
      * @param processor
      */
-    void addAfterProcessor(Object processor);
+    void addAfterProcessor(Class<? extends OutputProcessor> processor);
 
     /**
      * This OutputProcessor will be added after the processors in this set
      *
      * @return The set with the named OutputProcessor
      */
-    Set<Object> getAfterProcessors();
+    Set<Class<? extends OutputProcessor>> getAfterProcessors();
 
     /**
      * The Phase in which this OutputProcessor should be applied
diff --git a/src/main/java/org/apache/xml/security/stax/impl/OutputProcessorChainImpl.java b/src/main/java/org/apache/xml/security/stax/impl/OutputProcessorChainImpl.java
index e6b45e9..4c79f87 100644
--- a/src/main/java/org/apache/xml/security/stax/impl/OutputProcessorChainImpl.java
+++ b/src/main/java/org/apache/xml/security/stax/impl/OutputProcessorChainImpl.java
@@ -117,8 +117,7 @@
 
             for (int i = endPhaseIdx - 1; i >= startPhaseIdx; i--) {
                 OutputProcessor outputProcessor = outputProcessors.get(i);
-                if (newOutputProcessor.getAfterProcessors().contains(outputProcessor)
-                        || newOutputProcessor.getAfterProcessors().contains(outputProcessor.getClass().getName())) {
+                if (newOutputProcessor.getAfterProcessors().contains(outputProcessor.getClass())) {
                     idxToInsert = i + 1;
                     break;
                 }
@@ -129,8 +128,7 @@
 
             for (int i = startPhaseIdx; i < endPhaseIdx; i++) {
                 OutputProcessor outputProcessor = outputProcessors.get(i);
-                if (newOutputProcessor.getBeforeProcessors().contains(outputProcessor)
-                        || newOutputProcessor.getBeforeProcessors().contains(outputProcessor.getClass().getName())) {
+                if (newOutputProcessor.getBeforeProcessors().contains(outputProcessor.getClass())) {
                     idxToInsert = i;
                     break;
                 }
@@ -142,8 +140,7 @@
 
             for (int i = startPhaseIdx; i < endPhaseIdx; i++) {
                 OutputProcessor outputProcessor = outputProcessors.get(i);
-                if (newOutputProcessor.getBeforeProcessors().contains(outputProcessor)
-                        || newOutputProcessor.getBeforeProcessors().contains(outputProcessor.getClass().getName())) {
+                if (newOutputProcessor.getBeforeProcessors().contains(outputProcessor.getClass())) {
                     idxToInsert = i;
                     found = true;
                     break;
@@ -154,8 +151,7 @@
             } else {
                 for (int i = endPhaseIdx - 1; i >= startPhaseIdx; i--) {
                     OutputProcessor outputProcessor = outputProcessors.get(i);
-                    if (newOutputProcessor.getAfterProcessors().contains(outputProcessor)
-                            || newOutputProcessor.getAfterProcessors().contains(outputProcessor.getClass().getName())) {
+                    if (newOutputProcessor.getAfterProcessors().contains(outputProcessor.getClass())) {
                         idxToInsert = i + 1;
                         break;
                     }
diff --git a/src/main/java/org/apache/xml/security/stax/impl/processor/output/AbstractEncryptOutputProcessor.java b/src/main/java/org/apache/xml/security/stax/impl/processor/output/AbstractEncryptOutputProcessor.java
index ad822a6..4cae594 100644
--- a/src/main/java/org/apache/xml/security/stax/impl/processor/output/AbstractEncryptOutputProcessor.java
+++ b/src/main/java/org/apache/xml/security/stax/impl/processor/output/AbstractEncryptOutputProcessor.java
@@ -146,9 +146,9 @@
                 throws XMLSecurityException {
 
             super();
-            this.addBeforeProcessor(AbstractEncryptEndingOutputProcessor.class.getName());
-            this.addBeforeProcessor(AbstractInternalEncryptionOutputProcessor.class.getName());
-            this.addAfterProcessor(AbstractEncryptOutputProcessor.class.getName());
+            this.addBeforeProcessor(AbstractEncryptEndingOutputProcessor.class);
+            this.addBeforeProcessor(AbstractInternalEncryptionOutputProcessor.class);
+            this.addAfterProcessor(AbstractEncryptOutputProcessor.class);
             this.setEncryptionPartDef(encryptionPartDef);
             this.setXmlSecStartElement(xmlSecStartElement);
             this.setEncoding(encoding);
diff --git a/src/main/java/org/apache/xml/security/stax/impl/processor/output/AbstractSignatureOutputProcessor.java b/src/main/java/org/apache/xml/security/stax/impl/processor/output/AbstractSignatureOutputProcessor.java
index c1c2efd..603bb74 100644
--- a/src/main/java/org/apache/xml/security/stax/impl/processor/output/AbstractSignatureOutputProcessor.java
+++ b/src/main/java/org/apache/xml/security/stax/impl/processor/output/AbstractSignatureOutputProcessor.java
@@ -264,7 +264,7 @@
         public InternalSignatureOutputProcessor(SignaturePartDef signaturePartDef, XMLSecStartElement xmlSecStartElement)
                 throws XMLSecurityException {
             super();
-            this.addBeforeProcessor(InternalSignatureOutputProcessor.class.getName());
+            this.addBeforeProcessor(InternalSignatureOutputProcessor.class);
             this.signaturePartDef = signaturePartDef;
             this.xmlSecStartElement = xmlSecStartElement;
         }
diff --git a/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLEncryptOutputProcessor.java b/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLEncryptOutputProcessor.java
index 1264d24..58d44c3 100644
--- a/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLEncryptOutputProcessor.java
+++ b/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLEncryptOutputProcessor.java
@@ -312,7 +312,7 @@
                         }
                     }
                 };
-        processor.getAfterProcessors().add(XMLEncryptOutputProcessor.class.getName());
+        processor.getAfterProcessors().add(XMLEncryptOutputProcessor.class);
         return processor;
     }
 }
diff --git a/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLSignatureEndingOutputProcessor.java b/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLSignatureEndingOutputProcessor.java
index fccb59b..e4651d0 100644
--- a/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLSignatureEndingOutputProcessor.java
+++ b/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLSignatureEndingOutputProcessor.java
@@ -50,7 +50,7 @@
 
     public XMLSignatureEndingOutputProcessor(XMLSignatureOutputProcessor signatureOutputProcessor) throws XMLSecurityException {
         super(signatureOutputProcessor);
-        this.addAfterProcessor(XMLSignatureOutputProcessor.class.getName());
+        this.addAfterProcessor(XMLSignatureOutputProcessor.class);
     }
 
     @Override
@@ -61,7 +61,7 @@
         this.signedInfoProcessor = new SignedInfoProcessor(signatureAlgorithm, signatureId, xmlSecStartElement);
         this.signedInfoProcessor.setXMLSecurityProperties(getSecurityProperties());
         this.signedInfoProcessor.setAction(getAction());
-        this.signedInfoProcessor.addAfterProcessor(XMLSignatureEndingOutputProcessor.class.getName());
+        this.signedInfoProcessor.addAfterProcessor(XMLSignatureEndingOutputProcessor.class);
         this.signedInfoProcessor.init(outputProcessorChain);
         return this.signedInfoProcessor;
     }
diff --git a/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLSignatureOutputProcessor.java b/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLSignatureOutputProcessor.java
index e98d3b7..41699a7 100644
--- a/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLSignatureOutputProcessor.java
+++ b/src/main/java/org/apache/xml/security/stax/impl/processor/output/XMLSignatureOutputProcessor.java
@@ -104,8 +104,8 @@
                     internalSignatureOutputProcessor = new InternalSignatureOutputProcessor(signaturePartDef, xmlSecStartElement);
                     internalSignatureOutputProcessor.setXMLSecurityProperties(getSecurityProperties());
                     internalSignatureOutputProcessor.setAction(getAction());
-                    internalSignatureOutputProcessor.addAfterProcessor(XMLSignatureOutputProcessor.class.getName());
-                    internalSignatureOutputProcessor.addBeforeProcessor(XMLSignatureEndingOutputProcessor.class.getName());
+                    internalSignatureOutputProcessor.addAfterProcessor(XMLSignatureOutputProcessor.class);
+                    internalSignatureOutputProcessor.addBeforeProcessor(XMLSignatureEndingOutputProcessor.class);
                     internalSignatureOutputProcessor.init(outputProcessorChain);
 
                     setActiveInternalSignatureOutputProcessor(internalSignatureOutputProcessor);
diff --git a/src/test/java/org/apache/xml/security/test/stax/OutputProcessorChainTest.java b/src/test/java/org/apache/xml/security/test/stax/OutputProcessorChainTest.java
index d6d49c8..1a31f8e 100644
--- a/src/test/java/org/apache/xml/security/test/stax/OutputProcessorChainTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/OutputProcessorChainTest.java
@@ -51,8 +51,8 @@
     abstract class AbstractOutputProcessor implements OutputProcessor {
 
         private XMLSecurityConstants.Phase phase = XMLSecurityConstants.Phase.PROCESSING;
-        private Set<Object> beforeProcessors = new HashSet<>();
-        private Set<Object> afterProcessors = new HashSet<>();
+        private Set<Class<? extends OutputProcessor>> beforeProcessors = new HashSet<>();
+        private Set<Class<? extends OutputProcessor>> afterProcessors = new HashSet<>();
 
         @Override
         public void setXMLSecurityProperties(XMLSecurityProperties xmlSecurityProperties) {
@@ -67,22 +67,22 @@
         }
 
         @Override
-        public void addBeforeProcessor(Object processor) {
+        public void addBeforeProcessor(Class<? extends OutputProcessor> processor) {
             this.beforeProcessors.add(processor);
         }
 
         @Override
-        public Set<Object> getBeforeProcessors() {
+        public Set<Class<? extends OutputProcessor>> getBeforeProcessors() {
             return beforeProcessors;
         }
 
         @Override
-        public void addAfterProcessor(Object processor) {
+        public void addAfterProcessor(Class<? extends OutputProcessor> processor) {
             this.afterProcessors.add(processor);
         }
 
         @Override
-        public Set<Object> getAfterProcessors() {
+        public Set<Class<? extends OutputProcessor>> getAfterProcessors() {
             return afterProcessors;
         }
 
@@ -186,18 +186,18 @@
         AbstractOutputProcessor outputProcessor4 = new AbstractOutputProcessor() {
         };
         outputProcessor4.setPhase(XMLSecurityConstants.Phase.POSTPROCESSING);
-        outputProcessor4.addBeforeProcessor(outputProcessor3.getClass().getName());
+        outputProcessor4.addBeforeProcessor(outputProcessor3.getClass());
         outputProcessorChain.addProcessor(outputProcessor4);
 
         AbstractOutputProcessor outputProcessor5 = new AbstractOutputProcessor() {
         };
         outputProcessor5.setPhase(XMLSecurityConstants.Phase.PREPROCESSING);
-        outputProcessor5.addBeforeProcessor(outputProcessor2.getClass().getName());
+        outputProcessor5.addBeforeProcessor(outputProcessor2.getClass());
         outputProcessorChain.addProcessor(outputProcessor5);
 
         AbstractOutputProcessor outputProcessor6 = new AbstractOutputProcessor() {
         };
-        outputProcessor6.addBeforeProcessor(outputProcessor1.getClass().getName());
+        outputProcessor6.addBeforeProcessor(outputProcessor1.getClass());
         outputProcessorChain.addProcessor(outputProcessor6);
 
         assertEquals(outputProcessorChain.getProcessors().get(0), outputProcessor5);
@@ -229,18 +229,18 @@
         AbstractOutputProcessor outputProcessor4 = new AbstractOutputProcessor() {
         };
         outputProcessor4.setPhase(XMLSecurityConstants.Phase.POSTPROCESSING);
-        outputProcessor4.addAfterProcessor(outputProcessor3.getClass().getName());
+        outputProcessor4.addAfterProcessor(outputProcessor3.getClass());
         outputProcessorChain.addProcessor(outputProcessor4);
 
         AbstractOutputProcessor outputProcessor5 = new AbstractOutputProcessor() {
         };
         outputProcessor5.setPhase(XMLSecurityConstants.Phase.PREPROCESSING);
-        outputProcessor5.addAfterProcessor(outputProcessor2.getClass().getName());
+        outputProcessor5.addAfterProcessor(outputProcessor2.getClass());
         outputProcessorChain.addProcessor(outputProcessor5);
 
         AbstractOutputProcessor outputProcessor6 = new AbstractOutputProcessor() {
         };
-        outputProcessor6.addAfterProcessor(outputProcessor1.getClass().getName());
+        outputProcessor6.addAfterProcessor(outputProcessor1.getClass());
         outputProcessorChain.addProcessor(outputProcessor6);
 
         assertEquals(outputProcessorChain.getProcessors().get(0), outputProcessor2);
@@ -273,14 +273,14 @@
 
         AbstractOutputProcessor outputProcessor5 = new AbstractOutputProcessor() {
         };
-        outputProcessor5.addBeforeProcessor("");
-        outputProcessor5.addAfterProcessor(outputProcessor3.getClass().getName());
+        outputProcessor5.addBeforeProcessor(outputProcessor4.getClass());
+        outputProcessor5.addAfterProcessor(outputProcessor3.getClass());
         outputProcessorChain.addProcessor(outputProcessor5);
 
         AbstractOutputProcessor outputProcessor6 = new AbstractOutputProcessor() {
         };
-        outputProcessor6.addBeforeProcessor(outputProcessor5.getClass().getName());
-        outputProcessor6.addAfterProcessor("");
+        outputProcessor6.addBeforeProcessor(outputProcessor5.getClass());
+        outputProcessor6.addAfterProcessor(outputProcessor3.getClass());
         outputProcessorChain.addProcessor(outputProcessor6);
 
         assertEquals(outputProcessorChain.getProcessors().get(0), outputProcessor1);
diff --git a/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamWriterTest.java b/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamWriterTest.java
index b2f3957..698bc40 100644
--- a/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamWriterTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamWriterTest.java
@@ -228,20 +228,20 @@
         }
 
         @Override
-        public void addBeforeProcessor(Object processor) {
+        public void addBeforeProcessor(Class<? extends OutputProcessor> processor) {
         }
 
         @Override
-        public Set<Object> getBeforeProcessors() {
+        public Set<Class<? extends OutputProcessor>> getBeforeProcessors() {
             return new HashSet<>();
         }
 
         @Override
-        public void addAfterProcessor(Object processor) {
+        public void addAfterProcessor(Class<? extends OutputProcessor> processor) {
         }
 
         @Override
-        public Set<Object> getAfterProcessors() {
+        public Set<Class<? extends OutputProcessor>> getAfterProcessors() {
             return new HashSet<>();
         }
 
