diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java b/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
index 9a1c703..2ad3969 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
@@ -151,9 +151,9 @@
                 for (Iterator iter = processedHeaderQNames.iterator(); iter
                         .hasNext();) {
                     QName name = (QName) iter.next();
-                    Iterator omKids = header.getChildrenWithName(name);
+                    Iterator<SOAPHeaderBlock> omKids = header.getHeaderBlocksWithName(name);
                     if(omKids.hasNext()) {
-                        ((SOAPHeaderBlock)omKids.next()).setProcessed();
+                        omKids.next().setProcessed();
                     }
                 }
                 
@@ -264,9 +264,9 @@
                 for (Iterator iter = processedHeaderQNames.iterator(); iter
                         .hasNext();) {
                     QName name = (QName) iter.next();
-                    Iterator omKids = header.getChildrenWithName(name);
+                    Iterator<SOAPHeaderBlock> omKids = header.getHeaderBlocksWithName(name);
                     if(omKids.hasNext()) {
-                        ((SOAPHeaderBlock)omKids.next()).setProcessed();
+                        omKids.next().setProcessed();
                     }
                 }
                 
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcherConfig.java b/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcherConfig.java
index e1ae7e5..272b1eb 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcherConfig.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/TokenRequestDispatcherConfig.java
@@ -101,10 +101,10 @@
 
     private static void handleIssuers(OMElement configElem,
                                       TokenRequestDispatcherConfig conf) throws TrustException {
-        for (Iterator issuerElems = configElem.getChildrenWithName(ISSUER);
+        for (Iterator<OMElement> issuerElems = configElem.getChildrenWithName(ISSUER);
              issuerElems.hasNext();) {
 
-            OMElement element = (OMElement) issuerElems.next();
+            OMElement element = issuerElems.next();
 
             //get the class attr
             String issuerClass = element.getAttributeValue(CLASS_ATTR);
@@ -124,9 +124,9 @@
             processConfiguration(element, conf, issuerClass);
 
             //Process token types
-            for (Iterator tokenTypes = element.getChildrenWithName(TOKEN_TYPE);
+            for (Iterator<OMElement> tokenTypes = element.getChildrenWithName(TOKEN_TYPE);
                  tokenTypes.hasNext();) {
-                OMElement type = (OMElement) tokenTypes.next();
+                OMElement type = tokenTypes.next();
                 String value = type.getText();
                 if (value == null || value.trim().length() == 0) {
                     throw new TrustException("invalidTokenTypeDefinition",
@@ -147,10 +147,10 @@
     private static void handleValidators(OMElement configElem,
             TokenRequestDispatcherConfig conf) throws TrustException {
         
-        for (Iterator validatorElems = configElem.getChildrenWithName(VALIDATOR);
+        for (Iterator<OMElement> validatorElems = configElem.getChildrenWithName(VALIDATOR);
         validatorElems.hasNext();) {
 
-            OMElement element = (OMElement) validatorElems.next();
+            OMElement element = validatorElems.next();
 
            //get the class attr
            String validatorClass = element.getAttributeValue(CLASS_ATTR);
@@ -170,9 +170,9 @@
            processConfiguration(element, conf, validatorClass);
     
            //Process token types
-           for (Iterator tokenTypes = element.getChildrenWithName(TOKEN_TYPE);
+           for (Iterator<OMElement> tokenTypes = element.getChildrenWithName(TOKEN_TYPE);
                 tokenTypes.hasNext();) {
-               OMElement type = (OMElement) tokenTypes.next();
+               OMElement type = tokenTypes.next();
                String value = type.getText();
                if (value == null || value.trim().length() == 0) {
                    throw new TrustException("invalidTokenTypeDefinition",
@@ -193,10 +193,10 @@
     private static void handleRenewers(OMElement configElem,
             TokenRequestDispatcherConfig conf) throws TrustException {
         
-        for (Iterator renewerElems = configElem.getChildrenWithName(RENEWER);
+        for (Iterator<OMElement> renewerElems = configElem.getChildrenWithName(RENEWER);
         renewerElems.hasNext();) {
 
-            OMElement element = (OMElement) renewerElems.next();
+            OMElement element = renewerElems.next();
 
            //get the class attr
            String renewerClass = element.getAttributeValue(CLASS_ATTR);
@@ -216,9 +216,9 @@
            processConfiguration(element, conf, renewerClass);
     
            //Process token types
-           for (Iterator tokenTypes = element.getChildrenWithName(TOKEN_TYPE);
+           for (Iterator<OMElement> tokenTypes = element.getChildrenWithName(TOKEN_TYPE);
                 tokenTypes.hasNext();) {
-               OMElement type = (OMElement) tokenTypes.next();
+               OMElement type = tokenTypes.next();
                String value = type.getText();
                if (value == null || value.trim().length() == 0) {
                    throw new TrustException("invalidTokenTypeDefinition",
@@ -240,9 +240,9 @@
                                              TokenRequestDispatcherConfig conf,
                                              String implClass) {
 
-        for (Iterator configs = element.getChildrenWithName(CONFIGURATION_ELEMENT);
+        for (Iterator<OMElement> configs = element.getChildrenWithName(CONFIGURATION_ELEMENT);
              configs.hasNext();) {
-            OMElement configEle = (OMElement) configs.next();
+            OMElement configEle = configs.next();
             String configType =
                     configEle.getAttribute(new QName("type")).getAttributeValue().trim();
             if (configType.equalsIgnoreCase("file")) { //Process configuration file information
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuerConfig.java b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuerConfig.java
index 63de772..2b4aef4 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuerConfig.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuerConfig.java
@@ -235,9 +235,9 @@
         */
         if (trustedServices != null) {
             //Now process the trusted services
-            Iterator servicesIter = trustedServices.getChildrenWithName(SERVICE);
+            Iterator<OMElement> servicesIter = trustedServices.getChildrenWithName(SERVICE);
             while (servicesIter.hasNext()) {
-                OMElement service = (OMElement) servicesIter.next();
+                OMElement service = servicesIter.next();
                 OMAttribute aliasAttr = service.getAttribute(ALIAS);
                 if (aliasAttr == null) {
                     //The certificate alias is a must
diff --git a/modules/rampart-trust/src/test/java/org/apache/rahas/test/util/TestUtil.java b/modules/rampart-trust/src/test/java/org/apache/rahas/test/util/TestUtil.java
index 2908d9c..7cd9fee 100644
--- a/modules/rampart-trust/src/test/java/org/apache/rahas/test/util/TestUtil.java
+++ b/modules/rampart-trust/src/test/java/org/apache/rahas/test/util/TestUtil.java
@@ -311,9 +311,9 @@
                 for (Iterator iter = processedHeaderQNames.iterator(); iter
                         .hasNext();) {
                     QName name = (QName) iter.next();
-                    Iterator omKids = header.getChildrenWithName(name);
+                    Iterator<SOAPHeaderBlock> omKids = header.getHeaderBlocksWithName(name);
                     if(omKids.hasNext()) {
-                        ((SOAPHeaderBlock)omKids.next()).setProcessed();
+                        omKids.next().setProcessed();
                     }
                 }
 
@@ -417,9 +417,9 @@
                 for (Iterator iter = processedHeaderQNames.iterator(); iter
                         .hasNext();) {
                     QName name = (QName) iter.next();
-                    Iterator omKids = header.getChildrenWithName(name);
+                    Iterator<SOAPHeaderBlock> omKids = header.getHeaderBlocksWithName(name);
                     if(omKids.hasNext()) {
-                        ((SOAPHeaderBlock)omKids.next()).setProcessed();
+                        omKids.next().setProcessed();
                     }
                 }
 
