diff --git a/release-docs/LICENSE.txt b/LICENSE
similarity index 100%
rename from release-docs/LICENSE.txt
rename to LICENSE
diff --git a/release-docs/NOTICE.txt b/NOTICE
similarity index 100%
rename from release-docs/NOTICE.txt
rename to NOTICE
diff --git a/release-docs/README.txt b/README
similarity index 100%
rename from release-docs/README.txt
rename to README
diff --git a/apidocs/pom.xml b/apidocs/pom.xml
new file mode 100644
index 0000000..8a7a60c
--- /dev/null
+++ b/apidocs/pom.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.rampart</groupId>
+        <artifactId>rampart-project</artifactId>
+        <version>1.8.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <artifactId>apidocs</artifactId>
+    <name>Javadoc</name>
+    <packaging>pom</packaging>
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-policy</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-trust</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>site-javadoc</id>
+                        <phase>site</phase>
+                        <goals>
+                            <goal>javadoc-no-fork</goal>
+                        </goals>
+                        <configuration>
+                            <reportOutputDirectory>${project.reporting.outputDirectory}</reportOutputDirectory>
+                            <destDir>.</destDir>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>dist-javadoc</id>
+                        <phase>prepare-package</phase>
+                        <goals>
+                            <goal>javadoc-no-fork</goal>
+                        </goals>
+                        <configuration>
+                            <reportOutputDirectory>${project.build.directory}/apidocs</reportOutputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+                <configuration>
+                    <includeDependencySources>true</includeDependencySources>
+                    <dependencySourceIncludes>
+                        <dependencySourceInclude>${project.groupId}:*</dependencySourceInclude>
+                    </dependencySourceIncludes>
+                    <!-- There are no other modules that generate Javadoc we can link to -->
+                    <detectOfflineLinks>false</detectOfflineLinks>
+                    <breakiterator>true</breakiterator>
+                    <!-- The notimestamp, windowtitle and bottom parameters are chosen to minimize the number
+                         of changes between releases (to avoid mass changes when committing the site for a new release) -->
+                    <notimestamp>true</notimestamp>
+                    <windowtitle>Apache Rampart</windowtitle>
+                    <bottom><![CDATA[Copyright &copy; {organizationName}. All Rights Reserved.]]></bottom>
+                    <!-- doctitle only appears in the summary and we should include the version there -->
+                    <doctitle>Apache Rampart ${project.version}</doctitle>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <configuration>
+                            <descriptors>
+                                <descriptor>src/main/assembly/apidocs.xml</descriptor>
+                            </descriptors>
+                            <appendAssemblyId>false</appendAssemblyId>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/apidocs/src/main/assembly/apidocs.xml b/apidocs/src/main/assembly/apidocs.xml
new file mode 100644
index 0000000..4c4b6f1
--- /dev/null
+++ b/apidocs/src/main/assembly/apidocs.xml
@@ -0,0 +1,32 @@
+<?xml version="1.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.
+  -->
+<assembly>
+    <id>javadoc</id>
+    <includeBaseDirectory>false</includeBaseDirectory> 
+    <formats>
+        <format>zip</format>
+    </formats>
+    <fileSets>
+        <fileSet>
+            <directory>${project.build.directory}/apidocs</directory>
+            <outputDirectory>.</outputDirectory>
+        </fileSet>
+    </fileSets>
+</assembly>
diff --git a/build.xml b/build.xml
deleted file mode 100644
index e599718..0000000
--- a/build.xml
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-  ~ 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.
-  -->
-
-<project name="Apache Rampart release build" default="dist">
-
-    <property name="rampart.version" value="SNAPSHOT"/>
-    <property name="rampart.bin.dist" value="rampart"/>
-    <property name="rampart.src.dist" value="rampart-src"/>
-    <property name="rampart.docs.dist" value="rampart-docs"/>
-    
-    <property name="dir.dist" value="dist"/>
-    <property name="dir.dist.bin" value="${dir.dist}/bin/${rampart.bin.dist}-${rampart.version}"/>
-    <property name="dir.dist.src" value="${dir.dist}/src/${rampart.src.dist}-${rampart.version}"/>
-    <property name="dir.dist.docs" value="${dir.dist}/docs/${rampart.docs.dist}-${rampart.version}"/>
-    
-    <property name="dir.mvn2.repo" value="${user.home}/.m2/repository"/>
-    
-    <property name="version.bcprov13" value="132"/>
-    <property name="version.bcprov15" value="132"/>
-        
-    <property name="version.xmlsec" value="1.4.0"/>
-    <property name="version.opensaml" value="1.1"/>
-    <property name="version.wss4j" value="SNAPSHOT"/>
-    
-        
-    <condition property="jdk14.present">
-      <equals arg1="${ant.java.version}" arg2="1.4"/>
-    </condition>
-
-    <target name="init">
-    		<mkdir dir="${dir.dist}"/>
-    </target>
-    
-    <target name="dist" depends="clean, bin-dist, src-dist, docs-dist">
-        <copy todir="${dir.dist}" file="modules/rampart-mar/target/rampart-${rampart.version}.mar"/>
-		<copy todir="${dir.dist}" file="modules/rampart-trust-mar/target/rahas-${rampart.version}.mar"/>
-	    <copy todir="${dir.dist}" file="modules/rampart-core/target/rampart-core-${rampart.version}.jar"/>
-        <copy todir="${dir.dist}" file="modules/rampart-policy/target/rampart-policy-${rampart.version}.jar"/>
-        <copy todir="${dir.dist}" file="modules/rampart-trust/target/rampart-trust-${rampart.version}.jar"/>
-    </target>
-
-    <target name="bin-dist" depends="init">
-    		
-        <mkdir dir="${dir.dist.bin}"/>
-		
-        <copy todir="${dir.dist.bin}">
-            <fileset dir="release-docs">
-            </fileset>
-        </copy>
-        
-        <!-- Modules -->
-        <echo>Copying mars in to modules</echo>
-        <copy todir="${dir.dist.bin}" file="modules/rampart-mar/target/rampart-${rampart.version}.mar"/>
-        <copy todir="${dir.dist.bin}" file="modules/rampart-trust-mar/target/rahas-${rampart.version}.mar"/>
-        
-        <!-- All dep jars -->
-        <echo>Copying dependencies into lib</echo>
-        <mkdir dir="${dir.dist.bin}/lib"/>
-        
-        <copy todir="${dir.dist.bin}/lib" file="modules/rampart-core/target/rampart-core-${rampart.version}.jar"/>
-        <copy todir="${dir.dist.bin}/lib" file="modules/rampart-policy/target/rampart-policy-${rampart.version}.jar"/>
-        <copy todir="${dir.dist.bin}/lib" file="modules/rampart-trust/target/rampart-trust-${rampart.version}.jar"/>
-        <copy todir="${dir.dist.bin}/lib" file="${dir.mvn2.repo}/org/apache/santuario/xmlsec/${version.xmlsec}/xmlsec-${version.xmlsec}.jar"/>
-        <copy todir="${dir.dist.bin}/lib" file="${dir.mvn2.repo}/opensaml/opensaml/${version.opensaml}/opensaml-${version.opensaml}.jar"/>
-        <copy todir="${dir.dist.bin}/lib" file="${dir.mvn2.repo}/org/apache/ws/security/wss4j/${version.wss4j}/wss4j-${version.wss4j}.jar"/>
-        <antcall target="copy-bc-jar-14" />
-        <antcall target="copy-bc-jar-15" />
-
-        <echo>Copying samples</echo>
-        <!-- copy samples -->
-        <mkdir dir="${dir.dist.bin}/samples"/>
-        
-        <copy todir="${dir.dist.bin}/samples">
-            <fileset dir="modules/rampart-samples/">
-            </fileset>
-        </copy>
-        
-        <zip destfile="${dir.dist}/${rampart.bin.dist}-${rampart.version}.zip">
-            <zipfileset dir="${dir.dist.bin}/../"/>
-        </zip>
-        
-        <delete dir="${dir.dist.bin}/../"/>
-
-    </target>
-    
-    <target name="copy-bc-jar-14" if="${jdk14.present}">
-		<copy todir="${dir.dist.bin}/lib" file="${dir.mvn2.repo}/bouncycastle/bcprov-jdk13/${version.bcprov13}/bcprov-jdk13-${version.bcprov13}.jar"/>
-    </target>
-
-    <target name="copy-bc-jar-15" unless="${jdk14.present}">
-		<copy todir="${dir.dist.bin}/lib" file="${dir.mvn2.repo}/bouncycastle/bcprov-jdk15/${version.bcprov15}/bcprov-jdk15-${version.bcprov15}.jar"/>
-    </target>
-    
-    <target name="src-dist" depends="init">
-
-        <mkdir dir="${dir.dist.src}"/>
-		
-        <copy todir="${dir.dist.src}">
-            <fileset dir="release-docs">
-                <exclude name="build.xml"/>
-                <exclude name="README.txt"/>
-            </fileset>
-        </copy>
-        
-        <copy todir="${dir.dist.src}">
-			<fileset dir="modules">
-			    <include name="rampart-core/**/*"/>
-				<include name="rampart-policy/**/*"/>
-			    <include name="rampart-trust/**/*"/>
-			    <include name="rampart-samples/**/*"/>
-			    <exclude name=".svn"/>
-			</fileset>
-    		</copy>
-        
-        <zip destfile="${dir.dist}/${rampart.src.dist}-${rampart.version}.zip">
-            <zipfileset dir="${dir.dist.src}/../"/>
-        </zip>
-        
-        <delete dir="${dir.dist.src}/../"/>        
-    </target>
-
-    <target name="docs-dist">
-
-        <mkdir dir="${dir.dist.docs}"/>
-
-        <copy todir="${dir.dist.docs}">
-            <fileset dir="release-docs">
-                <exclude name="build.xml"/>
-                <exclude name="README.txt"/>
-            </fileset>
-        </copy>
-        
-        <mkdir dir="${dir.dist.docs}/core"/>
-        <mkdir dir="${dir.dist.docs}/policy"/>
-        <mkdir dir="${dir.dist.docs}/trust"/>
-        
-        <copy todir="${dir.dist.docs}/core">
-        		<fileset dir="modules/rampart-core/target/site/apidocs/">
-        		</fileset>
-        </copy>
-        
-        <copy todir="${dir.dist.docs}/policy">
-        		<fileset dir="modules/rampart-policy/target/site/apidocs/">
-        		</fileset>
-        </copy>
-
-        <copy todir="${dir.dist.docs}/trust">
-        		<fileset dir="modules/rampart-trust/target/site/apidocs/">
-        		</fileset>
-        </copy>
-        
-        <zip destfile="${dir.dist}/${rampart.docs.dist}-${rampart.version}.zip">
-            <zipfileset dir="${dir.dist.docs}/../"/>
-        </zip>
-            
-        <delete dir="${dir.dist.docs}/../"/>
-    </target>
-
-    <target name="clean">
-		<delete dir="${dir.dist}"/>
-    </target>
-    
-</project>
diff --git a/code-coverage/pom.xml b/code-coverage/pom.xml
new file mode 100644
index 0000000..568e9fc
--- /dev/null
+++ b/code-coverage/pom.xml
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.rampart</groupId>
+        <artifactId>rampart-project</artifactId>
+        <version>1.8.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <artifactId>code-coverage</artifactId>
+    <name>Code Coverage Report</name>
+    <packaging>pom</packaging>
+    <dependencies>
+        <!--
+          For each project that should appear in the coverage report, add the main artifact and the source JAR as dependency.
+          For each project that contributes code coverage, add a dependency to the jacoco.exec file
+          (i.e. classifier=jacoco and type=exec).
+        -->
+        
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-core</artifactId>
+            <version>${project.version}</version>
+            <classifier>sources</classifier>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-core</artifactId>
+            <version>${project.version}</version>
+            <classifier>jacoco</classifier>
+            <type>exec</type>
+        </dependency>
+        
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-policy</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-policy</artifactId>
+            <version>${project.version}</version>
+            <classifier>sources</classifier>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-policy</artifactId>
+            <version>${project.version}</version>
+            <classifier>jacoco</classifier>
+            <type>exec</type>
+        </dependency>
+        
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-trust</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-trust</artifactId>
+            <version>${project.version}</version>
+            <classifier>sources</classifier>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-trust</artifactId>
+            <version>${project.version}</version>
+            <classifier>jacoco</classifier>
+            <type>exec</type>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-integration</artifactId>
+            <version>${project.version}</version>
+            <classifier>jacoco</classifier>
+            <type>exec</type>
+        </dependency>
+        
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-tests</artifactId>
+            <version>${project.version}</version>
+            <classifier>jacoco</classifier>
+            <type>exec</type>
+        </dependency>
+        
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-sample</artifactId>
+            <version>${project.version}</version>
+            <classifier>jacoco</classifier>
+            <type>exec</type>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-jacoco-exec</id>
+                        <phase>site</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/jacoco/exec</outputDirectory>
+                            <includeClassifiers>jacoco</includeClassifiers>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>copy-sources</id>
+                        <phase>site</phase>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/jacoco/sources</outputDirectory>
+                            <includeClassifiers>sources</includeClassifiers>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>copy-classes</id>
+                        <phase>site</phase>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/jacoco/classes</outputDirectory>
+                            <includeTypes>jar</includeTypes>
+                            <excludeClassifiers>sources</excludeClassifiers>
+                            <excludeTransitive>true</excludeTransitive>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>jacoco-report</id>
+                        <phase>site</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target>
+                                <taskdef name="report" classname="org.jacoco.ant.ReportTask" />
+                                <report>
+                                    <executiondata>
+                                        <fileset dir="${project.build.directory}/jacoco/exec" />
+                                    </executiondata>
+                                    <structure name="Coverage Report">
+                                        <classfiles>
+                                            <fileset dir="${project.build.directory}/jacoco/classes" />
+                                        </classfiles>
+                                        <sourcefiles>
+                                            <fileset dir="${project.build.directory}/jacoco/sources" />
+                                        </sourcefiles>
+                                    </structure>
+                                    <html destdir="${project.reporting.outputDirectory}" />
+                                </report>
+                            </target>
+                        </configuration>
+                    </execution>  
+                </executions>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.jacoco</groupId>
+                        <artifactId>org.jacoco.ant</artifactId>
+                        <version>${jacoco.version}</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+            <plugin>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/etc/dist.py b/etc/dist.py
new file mode 100644
index 0000000..2f17490
--- /dev/null
+++ b/etc/dist.py
@@ -0,0 +1,45 @@
+#
+# 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.
+#
+
+from os import *
+from os.path import *
+from shutil import copyfile
+from shutil import rmtree
+from subprocess import call
+from xml.etree.ElementTree import parse
+
+root_dir = realpath(join(dirname(__file__), ".."))
+pom = parse(join(root_dir, "pom.xml"))
+release = pom.getroot().find("{http://maven.apache.org/POM/4.0.0}version").text
+dist_root = join(root_dir, "target", "dist")
+dist_dir = join(dist_root, release)
+
+if exists(dist_root):
+    rmtree(dist_root)
+call(["svn", "checkout", "https://dist.apache.org/repos/dist/dev/axis/axis2/java/rampart/", dist_root])
+mkdir(dist_dir)
+for classifier in [ "bin", "src" ]:
+    for suffix in [ "zip", "zip.asc", "zip.md5", "zip.sha1" ]:
+        file = "rampart-dist-" + release + "-" + classifier + "." + suffix
+        copyfile(join(root_dir, "modules", "distribution", "target", file), join(dist_dir, file))
+call(["svn", "add", dist_dir])
+if release.endswith("-SNAPSHOT"):
+    print "Skipping commit because version is a snapshot."
+else:
+    call(["svn", "commit", dist_dir])
diff --git a/modules/distribution/bin.xml b/modules/distribution/bin.xml
index be4c560..eb9be75 100644
--- a/modules/distribution/bin.xml
+++ b/modules/distribution/bin.xml
@@ -1,23 +1,23 @@
 <assembly>
     <id>bin</id>
-    <includeBaseDirectory>false</includeBaseDirectory>
+    <baseDirectory>rampart-${version}</baseDirectory>
     <formats>
         <format>zip</format>
     </formats>
     <dependencySets>
         <dependencySet>
-            <outputDirectory>${dist.dir}/modules</outputDirectory>
+            <outputDirectory>modules</outputDirectory>
             <includes>
                 <include>org.apache.rampart:rampart:mar</include>
                 <include>org.apache.rampart:rahas:mar</include>
             </includes>
         </dependencySet>
         <dependencySet>
-            <outputDirectory>${dist.dir}/lib</outputDirectory>
+            <outputDirectory>lib</outputDirectory>
             <includes>
                 <include>org.apache.santuario:xmlsec:jar</include>
                 <include>org.apache.ws.security:wss4j:jar</include>
-                <include>bouncycastle:bcprov-jdk15:jar</include>
+                <include>org.bouncycastle:bcprov-jdk15on:jar</include>
                 <include>org.apache.rampart:rampart-core:jar</include>
                 <include>org.apache.rampart:rampart-policy:jar</include>
                 <include>org.apache.rampart:rampart-trust:jar</include>
@@ -37,46 +37,48 @@
                 <include>org.owasp.esapi:esapi:jar</include>
             </includes>
         </dependencySet>
+        <dependencySet>
+            <outputDirectory>docs/apidocs</outputDirectory>
+            <includes>
+                <include>*:apidocs:zip</include>
+            </includes>
+            <useProjectArtifact>false</useProjectArtifact>
+            <unpack>true</unpack>
+        </dependencySet>
     </dependencySets>
     <fileSets>
         <fileSet>
-            <directory>target/apidocs</directory>
-            <outputDirectory>${dist.dir}/docs/apidocs</outputDirectory>
-        </fileSet>
-        <fileSet>
-            <directory>../documentation/target/site</directory>
-            <outputDirectory>${dist.dir}/docs</outputDirectory>
-        </fileSet>
-        <fileSet>
             <directory>../rampart-samples</directory>
-            <outputDirectory>${dist.dir}/samples</outputDirectory>
+            <outputDirectory>samples</outputDirectory>
+            <excludes>
+                <exclude>pom.xml</exclude>
+                <exclude>target/**</exclude>
+            </excludes>
         </fileSet>
         <fileSet>
             <directory>../../legal</directory>
-            <outputDirectory>${dist.dir}/lib</outputDirectory>
+            <outputDirectory>lib</outputDirectory>
+        </fileSet>
+        <fileSet>
+            <directory>src/main/files</directory>
+            <outputDirectory>.</outputDirectory>
         </fileSet>
     </fileSets>
 
     <files>
         <file>
-            <source>../../release-docs/README.txt</source>
-            <outputDirectory>${dist.dir}</outputDirectory>
-            <destName>README</destName>
+            <source>../../README</source>
             <filtered>true</filtered>
         </file>
         <file>
-            <source>../../release-docs/LICENSE.txt</source>
-            <outputDirectory>${dist.dir}</outputDirectory>
-            <destName>LICENSE</destName>
+            <source>../../LICENSE</source>
         </file>
         <file>
-            <source>../../release-docs/NOTICE.txt</source>
-            <outputDirectory>${dist.dir}</outputDirectory>
-            <destName>NOTICE</destName>
+            <source>../../NOTICE</source>
         </file>
         <file>
-            <source>../../release-docs/release-notes.html</source>
-            <outputDirectory>${dist.dir}</outputDirectory>
+            <source>../../src/site/markdown/release-notes/${release_version}.md</source>
+            <destName>RELEASE-NOTE</destName>
         </file>
     </files>
 
diff --git a/modules/distribution/pom.xml b/modules/distribution/pom.xml
index c4120ab..5cad000 100644
--- a/modules/distribution/pom.xml
+++ b/modules/distribution/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.rampart</groupId>
         <artifactId>rampart-project</artifactId>
-        <version>1.7.0-SNAPSHOT</version>
+        <version>1.8.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
@@ -36,42 +36,8 @@
     <build>
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <version>1.1</version>
-                <executions>
-                    <execution>
-                        <id>build-javadoc</id>
-                        <phase>package</phase>
-                        <configuration>
-                            <tasks>
-                                <javadoc packagenames="org.apache.rampart.*,org.apache.rahas.*" destdir="target/apidocs" author="true" breakiterator="true" version="true" use="true" windowtitle="Apache Rampart API">
-
-                                    <sourcepath>
-                                        <dirset dir="../..">
-                                            <include name="**/rampart-core/src/main/java" />
-                                            <include name="**/rampart-policy/src/main/java" />
-                                            <include name="**/rampart-trust/src/main/java" />
-                                        </dirset>
-                                    </sourcepath>
-
-                                    <classpath refid="maven.dependency.classpath" />
-                                    <classpath refid="maven.compile.classpath" />
-                                    <classpath refid="maven.runtime.classpath" />
-
-                                </javadoc>
-                            </tasks>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.codehaus.gmaven</groupId>
-                <artifactId>gmaven-plugin</artifactId>
-                <version>1.2</version>
+                <groupId>org.codehaus.gmavenplus</groupId>
+                <artifactId>gmavenplus-plugin</artifactId>
                 <executions>
                     <execution>
                         <id>generate-timestamp</id>
@@ -80,11 +46,14 @@
                             <goal>execute</goal>
                         </goals>
                         <configuration>
-                            <source>
-                                import java.util.Date 
-                                import java.text.MessageFormat 
-                                project.properties['buildTimestamp'] = MessageFormat.format("{0,date,MMM dd, yyyy}", new Date())
-                            </source>
+                            <scripts>
+                                <script>
+                                    import java.util.Date 
+                                    import java.text.MessageFormat 
+                                    project.properties['buildTimestamp'] = MessageFormat.format("{0,date,MMM dd, yyyy}", new Date())
+                                    project.properties['release_version'] = project.version.replaceAll("-SNAPSHOT", "")
+                                </script>
+                            </scripts>
                         </configuration>
                     </execution>
                 </executions>
@@ -108,6 +77,24 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>net.ju-n.maven.plugins</groupId>
+                <artifactId>checksum-maven-plugin</artifactId>
+                <version>1.2</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>artifacts</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 
@@ -140,14 +127,20 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>bouncycastle</groupId>
-            <artifactId>bcprov-jdk15</artifactId>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
             <version>${bcprov.jdk15.version}</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-jcl</artifactId>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>apidocs</artifactId>
+            <version>${project.version}</version>
+            <type>zip</type>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/modules/distribution/src.xml b/modules/distribution/src.xml
index 9c3575c..215f6a5 100644
--- a/modules/distribution/src.xml
+++ b/modules/distribution/src.xml
@@ -1,6 +1,6 @@
 <assembly>
     <id>src</id>
-    <includeBaseDirectory>false</includeBaseDirectory>
+    <baseDirectory>rampart-src-${project.version}</baseDirectory>
     <formats>
         <format>zip</format>
     </formats>
@@ -8,36 +8,56 @@
     <fileSets>
         <fileSet>
             <directory>../..</directory>
-            <outputDirectory>rampart-src-${project.version}</outputDirectory>
-            <includes>
-                <include>**/modules/**/*</include>
-                <include>**/pom.xml</include>
-                <include>src</include>
-                <include>release-docs/*</include>
-            </includes>
+            <useDefaultExcludes>true</useDefaultExcludes>
             <excludes>
-                <exclude>**/target</exclude>
-                <exclude>**/target/**/*</exclude>
-                <exclude>**/build</exclude>
-                <exclude>**/build/**/*</exclude>
-                <exclude>**/.settings</exclude>
-                <exclude>**/.classpath</exclude>
-                <exclude>**/.project</exclude>
-                <exclude>**/.wtpmodules</exclude>
-                <exclude>**/*.iml</exclude>
-                <exclude>**/.settings</exclude>
-                <exclude>**/.settings/**/*</exclude>
-                <exclude>**/.svn/**</exclude>
-                <exclude>release-docs/README.txt</exclude>
+                <!-- build output -->
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/).*${project.build.directory}.*]</exclude>
+                
+                <!-- NOTE: Most of the following excludes should not be required 
+                     if the standard release process is followed. This is because the 
+                     release plugin checks out project sources into a location like
+                     target/checkout, then runs the build from there. The result is
+                     a source-release archive that comes from a pretty clean directory
+                     structure.
+                     
+                     HOWEVER, if the release plugin is configured to run extra goals
+                     or generate a project website, it's definitely possible that some
+                     of these files will be present. So, it's safer to exclude them.
+                -->
+                     
+                <!-- IDEs -->
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?maven-eclipse\.xml]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.project]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.classpath]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.iws]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.idea(/.*)?]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?out(/.*)?]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.ipr]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.iml]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.settings(/.*)?]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.externalToolBuilders(/.*)?]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.deployables(/.*)?]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.wtpmodules(/.*)?]</exclude>
+                
+                <!-- misc -->
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?cobertura\.ser]</exclude>
+                
+                <!-- release-plugin temp files -->
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?pom\.xml\.releaseBackup]</exclude>
+                <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?release\.properties]</exclude>
+                
+                <exclude>README</exclude>
             </excludes>
         </fileSet>
-        <fileSet>
-            <directory>../..</directory>
-            <outputDirectory>rampart-src-${project.version}</outputDirectory>
-            <filtered>true</filtered>
-            <includes>
-                <include>release-docs/README.txt</include>
-            </includes>
-        </fileSet>
     </fileSets>
+    <files>
+        <file>
+            <source>../../README</source>
+            <filtered>true</filtered>
+        </file>
+        <file>
+            <source>../../src/site/markdown/release-notes/${release_version}.md</source>
+            <destName>RELEASE-NOTE</destName>
+        </file>
+    </files>
 </assembly>
diff --git a/release-docs/build.xml b/modules/distribution/src/main/files/build.xml
similarity index 96%
rename from release-docs/build.xml
rename to modules/distribution/src/main/files/build.xml
index 7a2dbd5..4740d70 100644
--- a/release-docs/build.xml
+++ b/modules/distribution/src/main/files/build.xml
@@ -19,7 +19,7 @@
 <project basedir="." default="setup">
 
 	<property name="lib.dir" value="lib"/>
-	<property name="modules.dir" value="."/>
+	<property name="modules.dir" value="modules"/>
 	
 	<property environment="env"/>
     	
diff --git a/modules/documentation/pom.xml b/modules/documentation/pom.xml
deleted file mode 100644
index dba341c..0000000
--- a/modules/documentation/pom.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-  ~ 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.
-  -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <parent>
-        <groupId>org.apache.rampart</groupId>
-        <artifactId>rampart-project</artifactId>
-        <version>1.7.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>rampart-documentation</artifactId>
-    <packaging>pom</packaging>
-    <name>Rampart - Documentation</name>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-site-plugin</artifactId>
-                <version>2.0-beta-5</version>
-                <inherited>false</inherited>
-                <executions>
-                    <execution>
-                        <phase>install</phase>
-                        <goals>
-                            <goal>site</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/modules/documentation/src/site/resources/css/maven-base.css b/modules/documentation/src/site/resources/css/maven-base.css
deleted file mode 100755
index b47862a..0000000
--- a/modules/documentation/src/site/resources/css/maven-base.css
+++ /dev/null
@@ -1,143 +0,0 @@
-body {
-  margin: 0px;
-  padding: 0px;
-}
-img {
-  border:none;
-}
-table {
-  padding:0px;
-  width: 100%;
-  margin-left: -2px;
-  margin-right: -2px;
-}
-acronym {
-  cursor: help;
-  border-bottom: 1px dotted #feb;
-}
-table.bodyTable th, table.bodyTable td {
-  padding: 2px 4px 2px 4px;
-  vertical-align: top;
-}
-div.clear{
-  clear:both;
-  visibility: hidden;
-}
-div.clear hr{
-  display: none;
-}
-#bannerLeft, #bannerRight {
-  font-size: xx-large;
-  font-weight: bold;
-}
-#bannerLeft img, #bannerRight img {
-  margin: 0px;
-}
-.xleft, #bannerLeft img {
-  float:left;
-}
-.xright, #bannerRight {
-  float:right;
-}
-#banner {
-  padding: 0px;
-}
-#banner img {
-  border: none;
-}
-#breadcrumbs {
-  padding: 3px 10px 3px 10px;
-}
-#leftColumn {
- width: 170px;
- float:left;
- overflow: auto;
-}
-#bodyColumn {
-  margin-right: 1.5em;
-  margin-left: 197px;
-}
-#legend {
-  padding: 8px 0 8px 0;
-}
-#navcolumn {
-  padding: 8px 4px 0 8px;
-}
-#navcolumn h5 {
-  margin: 0;
-  padding: 0;
-  font-size: small;
-}
-#navcolumn ul {
-  margin: 0;
-  padding: 0;
-  font-size: small;
-}
-#navcolumn li {
-  list-style-type: none;
-  background-image: none;
-  background-repeat: no-repeat;
-  background-position: 0 0.4em;
-  padding-left: 16px;
-  list-style-position: outside;
-  line-height: 1.2em;
-  font-size: smaller;
-}
-#navcolumn li.expanded {
-  background-image: url(../images/expanded.gif);
-}
-#navcolumn li.collapsed {
-  background-image: url(../images/collapsed.gif);
-}
-#poweredBy {
-  text-align: center;
-}
-#navcolumn img {
-  margin-top: 10px;
-  margin-bottom: 3px;
-}
-#poweredBy img {
-  display:block;
-  margin: 20px 0 20px 17px;
-}
-#search img {
-    margin: 0px;
-    display: block;
-}
-#search #q, #search #btnG {
-    border: 1px solid #999;
-    margin-bottom:10px;
-}
-#search form {
-    margin: 0px;
-}
-#lastPublished {
-  font-size: x-small;
-}
-.navSection {
-  margin-bottom: 2px;
-  padding: 8px;
-}
-.navSectionHead {
-  font-weight: bold;
-  font-size: x-small;
-}
-.section {
-  padding: 4px;
-}
-#footer {
-  padding: 3px 10px 3px 10px;
-  font-size: x-small;
-}
-#breadcrumbs {
-  font-size: x-small;
-  margin: 0pt;
-}
-.source {
-  padding: 12px;
-  margin: 1em 7px 1em 7px;
-}
-.source pre {
-  margin: 0px;
-  padding: 0px;
-}
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/css/maven-theme.css b/modules/documentation/src/site/resources/css/maven-theme.css
deleted file mode 100755
index 67bb41b..0000000
--- a/modules/documentation/src/site/resources/css/maven-theme.css
+++ /dev/null
@@ -1,129 +0,0 @@
-body {
-  padding: 0px 0px 10px 0px;
-}
-body, td, select, input, li{
-  font-family: Verdana, Helvetica, Arial, sans-serif;
-  font-size: 13px;
-}
-code{
-  font-family: Courier, monospace;
-  font-size: 13px;
-}
-#legend li.externalLink {
-  background: url(../images/external.png) left top no-repeat;
-  padding-left: 18px;
-}
-a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover {
-  background: url(../images/external.png) right center no-repeat;
-  padding-right: 18px;
-}
-#legend li.newWindow {
-  background: url(../images/newwindow.png) left top no-repeat;
-  padding-left: 18px;
-}
-a.newWindow, a.newWindow:link, a.newWindow:visited, a.newWindow:active, a.newWindow:hover {
-  background: url(../images/newwindow.png) right center no-repeat;
-  padding-right: 18px;
-}
-h2 {
-  padding: 4px 4px 4px 6px;
-  border: 1px solid #999;
-  color: #900;
-  background-color: #ddd;
-  font-weight:900;
-  font-size: x-large;
-}
-h3 {
-  padding: 4px 4px 4px 6px;
-  border: 1px solid #aaa;
-  color: #900;
-  background-color: #eee;
-  font-weight: normal;
-  font-size: large;
-}
-h4 {
-  padding: 4px 4px 4px 6px;
-  border: 1px solid #bbb;
-  color: #900;
-  background-color: #fff;
-  font-weight: normal;
-  font-size: large;
-}
-h5 {
-  padding: 4px 4px 4px 6px;
-  color: #900;
-  font-size: normal;
-}
-p {
-  line-height: 1.3em;
-  font-size: small;
-}
-#breadcrumbs {
-  border-top: 1px solid #aaa;
-  border-bottom: 1px solid #aaa;
-  background-color: #ccc;
-}
-#leftColumn {
-  margin: 10px 0 0 5px;
-  border: 1px solid #999;
-  background-color: #eee;
-}
-#navcolumn h5 {
-  font-size: smaller;
-  border-bottom: 1px solid #aaaaaa;
-  padding-top: 2px;
-  color: #000;
-}
-
-table.bodyTable th {
-  color: white;
-  background-color: #bbb;
-  text-align: left;
-  font-weight: bold;
-}
-
-table.bodyTable th, table.bodyTable td {
-  font-size: 1em;
-}
-
-table.bodyTable tr.a {
-  background-color: #ddd;
-}
-
-table.bodyTable tr.b {
-  background-color: #eee;
-}
-
-.source {
-  border: 1px solid #999;
-}
-dl {
-  padding: 4px 4px 4px 6px;
-  border: 1px solid #aaa;
-  background-color: #ffc;
-}
-dt {
-  color: #900;
-}
-#organizationLogo img, #projectLogo img, #projectLogo span{
-  margin: 8px;
-}
-#banner {
-  border-bottom: 1px solid #fff;
-}
-.errormark, .warningmark, .donemark, .infomark {
-  background: url(../images/icon_error_sml.gif) no-repeat;
-}
-
-.warningmark {
-  background-image: url(../images/icon_warning_sml.gif);
-}
-
-.donemark {
-  background-image: url(../images/icon_success_sml.gif);
-}
-
-.infomark {
-  background-image: url(../images/icon_info_sml.gif);
-}
-
diff --git a/modules/documentation/src/site/resources/css/print.css b/modules/documentation/src/site/resources/css/print.css
deleted file mode 100755
index 49aae7e..0000000
--- a/modules/documentation/src/site/resources/css/print.css
+++ /dev/null
@@ -1,7 +0,0 @@
-#banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks, #leftColumn, #navColumn {
-	display: none !important;
-}
-#bodyColumn, body.docs div.docs {
-	margin: 0 !important;
-	border: none !important
-}
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/css/site.css b/modules/documentation/src/site/resources/css/site.css
deleted file mode 100755
index 5182c6e..0000000
--- a/modules/documentation/src/site/resources/css/site.css
+++ /dev/null
@@ -1,272 +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.
- */
-.img-title {
-    text-align: center
-}
-
-.img {
-    text-align: center
-}
-
-.special-td {
-    font-family: Arial;
-    font-size: 10pt;
-    font-weight: bold
-}
-
-.special {
-    font-family: Arial;
-    font-weight: bold;
-    border-style: solid;
-    border-width: 1;
-    padding-left: 4;
-    padding-right: 4;
-    padding-top: 1;
-    padding-bottom: 1;
-    background-color: #C0C0C0;
-    font-size: 10pt
-}
-
-.xml {
-    font-family: Arial;
-    font-size: 10pt;
-    color: #0000FF;
-    font-style: italic
-}
-
-/*
-.code {
-    font-family: Courier New;
-    font-size: 10pt;
-    color: #800000
-}
-*/
-
-/*
------------------------------------------------------------------------
-Generic element styles
------------------------------------------------------------------------ */
-body {
-    color: #111;
-    font-family: "Trebuchet MS", Verdana, sans-serif;
-    font-size: 1em;
-    padding: 5;
-    padding-bottom:0px;
-    border-width: 0;
-    outline-width: 0;
-    list-style-position: outside;
-    display: block;
-
-    margin: 0 auto; /* center, not in IE5 */
-    height: auto !important; /* real browsers */
-    height: 100%; /* IE6: treaded as min-height*/
-
-    min-height: 100%; /* real browsers */
-    width: 980px;
-    background-image: url(../images/home-top.gif);
-    background-position: left top;
-    background-repeat: repeat-x;
-}
-
-#breadcrumbs {
-    background-image: url(../images/menu-back.gif);
-    background-position: left top;
-    background-repeat: repeat-x;
-    border-bottom: solid 1px #d4d4d4;
-    height: 28px;
-    font-size: 0.8em;
-    background-color: transparent;
-    border: 1px solid #6895c2;
-}
-
-#banner{
-    margin-top:10px;
-    padding-top:10px;
-    padding-bottom:10px;
-}
-#bannerLeft{
-    background-image: url(../images/apache-rampart-logo.jpg);
-    background-position: left top;
-    background-repeat: no-repeat;	
-    text-indent:-1700px;/*We do this to hide the text. This needs to be updated to a beter solution.*/
-    width:204px;
-    height:56px;
-    display:block;
-    float:left;
-}
-#bannerRight{
-    display:block;
-    float:right;
-    height:51px;
-    width:537px;
-}
-.xright, #bannerRight {
-    text-shadow: none;
-}
-
-#leftColumn {
-    border: none;
-    background-color: transparent;
-    margin: 1em 0 0 0;
-}
-
-#navcolumn {
-    padding: 0;
-}
-
-#navcolumn h5 {
-    background-color: #e8f4ff;
-    border-left: solid 1px #ff2700;
-    border-bottom: none;
-    font-size: 0.9em;
-    padding: 5px;
-    color: #333333;
-    font-weight: normal;
-}
-
-#navcolumn li {
-    font-size: 0.9em;
-    margin-top: 0.5em;
-    margin-bottom: 0.5em;
-}
-
-#bodyColumn {
-    margin-left: 190px;
-    margin-right: 0;
-}
-
-#contentBox {
-    color: #333333;
-}
-
-#contentBox p, #contentBox td, #contentBox li {
-    font-family: "Trebuchet MS", Verdana, sans-serif;
-	line-height: 1.5em;
-    font-size: 0.94em;
-}
-
-#contentBox p, #contentBox li {
-    text-align: justify;
-}
-
-a:link {
-    color: #039;
-}
-
-a:hover {
-    color: #03c;
-    text-decoration: none;
-}
-
-a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover {
-    background: none;
-    padding: 0;
-}
-
-table.bodyTable th {
-    background-color: #6f8aa5;
-}
-
-table.bodyTable tr.a {
-    background-color: #d1dce7;
-}
-
-table.bodyTable tr.b {
-    background-color: #eceef1;
-}
-
-h1 {
-    color: #4f4f4f;
-    font-size: 2.5em;
-    font-weight: normal;
-}
-
-h2 {
-    color: #646b71;
-    font-size: 1.7em;
-    background-color: transparent;
-    border: none;
-    padding: 0;
-    font-weight: normal;
-}
-
-h3 {
-    color: #7d858d;
-	font-weight: bold;
-    font-size: 1.2em;
-    background-color: transparent;
-    border: none;
-    padding: 0;
-}
-
-h4 {
-    color: #333333;
-    font-size: 1em;
-    font-weight: bold;
-    background-color: transparent;
-    border: none;
-    padding: 0;
-}
-
-th {
-    background-color: #f5f5f5;
-    height: 20;
-    paddong: 0px;
-    spacing: 0px;
-}
-
-table {
-    margin: 0;
-    padding: 0;
-    border: solid 0 #dcdcdc;
-}
-
-.header {
-    height: 80px;
-    background-image: url( ../images/doc_header.jpg );
-    background-repeat: no-repeat;
-    background-attachment: scroll;
-    background-position: left top;
-}
-
-pre, div.source {
-    border: 1px dotted;
-    background-color: #e2ecf6;
-    padding: 0.8em;
-    margin: 0;
-    overflow: auto;
-    font-size: 0.9em;
-}
-
-/* Xdoc generates <div class="source"><pre>...</pre></div> for <source> elements.
-   Because we already apply styles to every <pre>, we need to suppress styles here. */
-div.source pre {
-    border: none;
-    background-color: transparent;
-    padding: none;
-}
-#footer{
-    background-color:#E9E9E9;
-    color:#828282;
-    left:0;
-    padding-top:10px;
-    text-indent:10px;
-    width:100%;
-    height:100px;
-}
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/css/style.css b/modules/documentation/src/site/resources/css/style.css
deleted file mode 100755
index 7893e2f..0000000
--- a/modules/documentation/src/site/resources/css/style.css
+++ /dev/null
@@ -1,184 +0,0 @@
-/* page general styles */
-body{
-padding:0px;
-margin:0px;
-}
-a{
-color:#557f95;
-text-decoration:none;
-}
-a:hover{
-color:#000000;
-text-decoration:underline;
-}
-body, td, tr, input,h1,h2{
-font: 12px Verdana, Arial, Helvetica, sans-serif;
-line-height:18px;
-}
-h1{
-padding:0px;
-margin:0px;
-font-size:14px;
-font-weight:bold;
-height:22px;
-background-color:#bcbcbc;
-text-indent:10px;
-}
-h2{
-padding:0px;
-margin:0px;
-font-weight:bold;
-}
-h3{
-font-weight:bold;
-color:#777777;
-}
-p{
-padding-top:5px;
-padding-bottom:5px;
-line-height:18px;
-}
-/* page styles */
-.page-padding{
-padding-left:10px;
-padding-right:10px;
-}
-.page-external{
-/* Uncomment these lines to give a fixed width with centered positioning ....
-position:absolute;
-left:50%;
-width:980px;
-margin-left:-490px;
-border:solid 1px #83b0c0;
-*/
-}
-
-/* header styles */
-.header{
-background-image:url(../images/apache-rampart-banner-background.jpg);
-background-repeat:repeat-x;
-background-position:0px 0px;
-height:98px;
-}
-.header-logo{
-background-image:url(../images/apache-rampart-logo.jpg);
-background-repeat:no-repeat;
-background-position:0px 0px;
-height:103px;
-text-align:right;
-padding-right:10px;
-}
-.top-menu{
-background-image:url(../images/apache-rampart-banner.jpg);
-background-repeat:no-repeat;
-background-position:right 0px;
-padding-top:65px;
-}
-.top-menu a{
-color:#000000;
-text-decoration:none;
-}
-.top-menu a:hover{
-text-decoration:underline;
-}
-.top-menu-gap{
-padding-left:30px;
-}
-.last-update-text{
-color:#929292;
-}
-
-/* content text */
-.content{
-
-}
-.menu{
-width:179px;
-padding-left:10px;
-}
-.menu-top{
-text-indent:15px;
-height:23px;
-color:#ffffff;
-background-image:url(../images/apache-rampart-menu-top.jpg);
-background-repeat:no-repeat;
-background-position:left 0px;
-}
-.menu-middle{
-background-image:url(../images/apache-rampart-menu.jpg);
-background-repeat:no-repeat;
-background-position:0px 0px;
-background-color:#e5e5e5;
-border-left:solid 1px #b4b4b4;
-padding-top:5px;
-font-size:11px;
-}
-.menu-middle ul{
-padding:0px;
-margin:0px;
-list-style:none;
-padding-left:10px;
-}
-.menu-middle ul ul{
-padding-left:15px;
-}
-.menu-middle li{
-margin-top:3px;
-}
-.menu-selected{
-font-weight:bold;
-}
-.navHeadings{
-background-image:url(../images/apache-rampart-menu-button.gif);
-background-repeat:no-repeat;
-background-position:0px 5px;
-text-indent:15px;
-font-size:12px;
-color:#224351;
-}
-.navHeadings-link{
-display:block;
-}
-.menu-bottom-left{
-background-image:url(../images/apache-rampart-menu-bottom.jpg);
-background-repeat:no-repeat;
-background-position:0px 0px;
-background-color:#e5e5e5;
-width:15px;
-height:13px;
-float:left;
-}
-.menu-bottom-right{
-background-color:#e5e5e5;
-border-bottom:solid 1px #b4b4b4;
-height:13px;
-float:right;
-width:164px;
-}
-.content-back1{
-background-image:url(../images/apache-rampart-spliter.jpg);
-background-repeat:no-repeat;
-background-position:0px 0px;
-}
-.content-back2{
-background-image:url(../images/apache-rampart-content-back.jpg);
-background-repeat:repeat-y;
-background-position:0px 0px;
-background-color:#f3f3f3;
-border-bottom:solid 1px #b4b4b4;
-border-right:solid 1px #b4b4b4;
-margin-right:10px;
-}
-.content-display{
-margin-left:32px;
-padding-bottom:10px;
-}
-.poweredBy{
-margin-left:30px;
-margin-top:5px;
-}
-.footer{
-color:#929292;
-margin-top:10px;
-margin-left:10px;
-}
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/download/1.1/download.cgi b/modules/documentation/src/site/resources/download/1.1/download.cgi
deleted file mode 100644
index 8bdb438..0000000
--- a/modules/documentation/src/site/resources/download/1.1/download.cgi
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-# Wrapper script around mirrors.cgi script
-# (we must change to that directory in order for python to pick up the
-#  python includes correctly)
-cd /www/www.apache.org/dyn/mirrors
-/www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/download/1.2/download.cgi b/modules/documentation/src/site/resources/download/1.2/download.cgi
deleted file mode 100644
index 8bdb438..0000000
--- a/modules/documentation/src/site/resources/download/1.2/download.cgi
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-# Wrapper script around mirrors.cgi script
-# (we must change to that directory in order for python to pick up the
-#  python includes correctly)
-cd /www/www.apache.org/dyn/mirrors
-/www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/download/1.3/download.cgi b/modules/documentation/src/site/resources/download/1.3/download.cgi
deleted file mode 100644
index 8bdb438..0000000
--- a/modules/documentation/src/site/resources/download/1.3/download.cgi
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-# Wrapper script around mirrors.cgi script
-# (we must change to that directory in order for python to pick up the
-#  python includes correctly)
-cd /www/www.apache.org/dyn/mirrors
-/www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/download/1.4/download.cgi b/modules/documentation/src/site/resources/download/1.4/download.cgi
deleted file mode 100644
index 8bdb438..0000000
--- a/modules/documentation/src/site/resources/download/1.4/download.cgi
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-# Wrapper script around mirrors.cgi script
-# (we must change to that directory in order for python to pick up the
-#  python includes correctly)
-cd /www/www.apache.org/dyn/mirrors
-/www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/download/1.5.1/download.cgi b/modules/documentation/src/site/resources/download/1.5.1/download.cgi
deleted file mode 100644
index 8bdb438..0000000
--- a/modules/documentation/src/site/resources/download/1.5.1/download.cgi
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-# Wrapper script around mirrors.cgi script
-# (we must change to that directory in order for python to pick up the
-#  python includes correctly)
-cd /www/www.apache.org/dyn/mirrors
-/www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/download/1.5.2/download.cgi b/modules/documentation/src/site/resources/download/1.5.2/download.cgi
deleted file mode 100644
index 8bdb438..0000000
--- a/modules/documentation/src/site/resources/download/1.5.2/download.cgi
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-# Wrapper script around mirrors.cgi script
-# (we must change to that directory in order for python to pick up the
-#  python includes correctly)
-cd /www/www.apache.org/dyn/mirrors
-/www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/download/1.5/download.cgi b/modules/documentation/src/site/resources/download/1.5/download.cgi
deleted file mode 100644
index 8bdb438..0000000
--- a/modules/documentation/src/site/resources/download/1.5/download.cgi
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-# Wrapper script around mirrors.cgi script
-# (we must change to that directory in order for python to pick up the
-#  python includes correctly)
-cd /www/www.apache.org/dyn/mirrors
-/www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/download/1.6.0/download.cgi b/modules/documentation/src/site/resources/download/1.6.0/download.cgi
deleted file mode 100644
index 8bdb438..0000000
--- a/modules/documentation/src/site/resources/download/1.6.0/download.cgi
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-# Wrapper script around mirrors.cgi script
-# (we must change to that directory in order for python to pick up the
-#  python includes correctly)
-cd /www/www.apache.org/dyn/mirrors
-/www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/download/1.6.1/download.cgi b/modules/documentation/src/site/resources/download/1.6.1/download.cgi
deleted file mode 100644
index 8bdb438..0000000
--- a/modules/documentation/src/site/resources/download/1.6.1/download.cgi
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-# Wrapper script around mirrors.cgi script
-# (we must change to that directory in order for python to pick up the
-#  python includes correctly)
-cd /www/www.apache.org/dyn/mirrors
-/www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file
diff --git a/modules/documentation/src/site/resources/images/apache-rampart-banner-background.jpg b/modules/documentation/src/site/resources/images/apache-rampart-banner-background.jpg
deleted file mode 100755
index 29b5350..0000000
--- a/modules/documentation/src/site/resources/images/apache-rampart-banner-background.jpg
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/apache-rampart-banner.jpg b/modules/documentation/src/site/resources/images/apache-rampart-banner.jpg
deleted file mode 100644
index abcd2d1..0000000
--- a/modules/documentation/src/site/resources/images/apache-rampart-banner.jpg
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/apache-rampart-content-back.jpg b/modules/documentation/src/site/resources/images/apache-rampart-content-back.jpg
deleted file mode 100755
index 58f9b88..0000000
--- a/modules/documentation/src/site/resources/images/apache-rampart-content-back.jpg
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/apache-rampart-menu-bottom.jpg b/modules/documentation/src/site/resources/images/apache-rampart-menu-bottom.jpg
deleted file mode 100755
index 96c85e5..0000000
--- a/modules/documentation/src/site/resources/images/apache-rampart-menu-bottom.jpg
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/apache-rampart-menu-button.gif b/modules/documentation/src/site/resources/images/apache-rampart-menu-button.gif
deleted file mode 100755
index 319460c..0000000
--- a/modules/documentation/src/site/resources/images/apache-rampart-menu-button.gif
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/apache-rampart-menu-top.jpg b/modules/documentation/src/site/resources/images/apache-rampart-menu-top.jpg
deleted file mode 100755
index 12c593e..0000000
--- a/modules/documentation/src/site/resources/images/apache-rampart-menu-top.jpg
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/apache-rampart-menu.jpg b/modules/documentation/src/site/resources/images/apache-rampart-menu.jpg
deleted file mode 100755
index fad5611..0000000
--- a/modules/documentation/src/site/resources/images/apache-rampart-menu.jpg
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/apache-rampart-spliter.jpg b/modules/documentation/src/site/resources/images/apache-rampart-spliter.jpg
deleted file mode 100755
index 926622d..0000000
--- a/modules/documentation/src/site/resources/images/apache-rampart-spliter.jpg
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/breadcrumbs-bg.gif b/modules/documentation/src/site/resources/images/breadcrumbs-bg.gif
deleted file mode 100644
index 2d10304..0000000
--- a/modules/documentation/src/site/resources/images/breadcrumbs-bg.gif
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/external.png b/modules/documentation/src/site/resources/images/external.png
deleted file mode 100755
index 3f999fc..0000000
--- a/modules/documentation/src/site/resources/images/external.png
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/h2-bg.gif b/modules/documentation/src/site/resources/images/h2-bg.gif
deleted file mode 100644
index 0ddb32e..0000000
--- a/modules/documentation/src/site/resources/images/h2-bg.gif
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/home-top.gif b/modules/documentation/src/site/resources/images/home-top.gif
deleted file mode 100644
index 4103c66..0000000
--- a/modules/documentation/src/site/resources/images/home-top.gif
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/leftcolumn-bg.gif b/modules/documentation/src/site/resources/images/leftcolumn-bg.gif
deleted file mode 100644
index a2faa21..0000000
--- a/modules/documentation/src/site/resources/images/leftcolumn-bg.gif
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/logos/build-by-maven-black.png b/modules/documentation/src/site/resources/images/logos/build-by-maven-black.png
deleted file mode 100755
index 919fd0f..0000000
--- a/modules/documentation/src/site/resources/images/logos/build-by-maven-black.png
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/logos/build-by-maven-white.png b/modules/documentation/src/site/resources/images/logos/build-by-maven-white.png
deleted file mode 100755
index 7d44c9c..0000000
--- a/modules/documentation/src/site/resources/images/logos/build-by-maven-white.png
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/logos/maven-feather.png b/modules/documentation/src/site/resources/images/logos/maven-feather.png
deleted file mode 100755
index b5ada83..0000000
--- a/modules/documentation/src/site/resources/images/logos/maven-feather.png
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/menu-back.gif b/modules/documentation/src/site/resources/images/menu-back.gif
deleted file mode 100644
index 0bcccda..0000000
--- a/modules/documentation/src/site/resources/images/menu-back.gif
+++ /dev/null
Binary files differ
diff --git a/modules/documentation/src/site/site.xml b/modules/documentation/src/site/site.xml
deleted file mode 100644
index dce5c7d..0000000
--- a/modules/documentation/src/site/site.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-  ~  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.
-  -->
-
-<project name="Apache Rampart">
-
-	<bannerLeft>
-		<name>Apache Rampart</name>
-		<href>images/apache-rampart-logo.jpg</href>
-	</bannerLeft>
-	    
-    <bannerRight>
-        <src>images/apache-rampart-banner.jpg</src>
-        <href>http://www.apache.org</href>
-    </bannerRight>
-
-	<skin>
-		<groupId>org.apache.maven.skins</groupId>
-		<artifactId>maven-default-skin</artifactId>
-		<version>1.0</version>
-	</skin>
-
-	<publishDate format="dd MMM yyyy"/>
-
-	<body>
-		<links>
-			<item name="Apache Axis2/Java" href="http://axis.apache.org/axis2/java/core/" />
-		</links>
-		
-		<menu name="Apache Rampart">
-			<item name="Home" href="index.html" />
-			<item name="Downloads">
-			        <item name="Releases" href="download.html"/>
-			        <item name="Source Code" href="svn.html"/>
-			</item>
-		</menu>
-		<menu name="Documentation">
-		        <item name="Getting Started" href="quick-start.html"/>
-		        <item name="Samples" href="samples.html"/>
-		        <item name="FAQ" href="http://wiki.apache.org/ws/FrontPage/Rampart/FAQ"/>     
-		        <item name="Rampart Configuration" href="rampartconfig-guide.html"/>
-		        <item name="STS Configuration" href="setting-up-sts.html"/>
-		        <item name="Developer Guide" href="developer-guide.html"/>
-		        <item name="Build the Site" href="siteHowTo.html" /> 
-		</menu>
-		<menu name="Resources">
-		  <item name="Articles" href="articles.html" />
-		  <item name="Specifications" href="specifications.html"/>
-		  <item name="Online Javadocs" href="apidocs/index.html"/>
-		</menu>
-		<menu name="Project Information">
-		    <item name="Project Team" href="team-list.html" />
-		    <item name="Issue Tracking" href="http://issues.apache.org/jira/browse/Rampart" />
-		    <item name="Mailing Lists" href="mail-lists.html"/>
-		    <item name="Source Code"
-		       href="http://svn.apache.org/viewvc/axis/axis2/java/rampart/" />
-		    <item name="Dependencies" href="dependencies.html"/>
-		    <item name="License"
-		        href="http://www.apache.org/licenses/LICENSE-2.0.html" />
-		</menu>
-
-	</body>
-</project>
diff --git a/modules/documentation/src/site/xdoc/download.xml b/modules/documentation/src/site/xdoc/download.xml
deleted file mode 100644
index 556ed3c..0000000
--- a/modules/documentation/src/site/xdoc/download.xml
+++ /dev/null
@@ -1,135 +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.
-  -->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-    <body>
-        <h1>Download Apache Rampart Module</h1>
-        <h2>Apache Rampart Releases</h2>
-        <p>This page provides links to the release versions of Apache Rampart Java.</p>
-        <table border="1" style="border-collapse: collapse" width="93%" id="table1">
-            <tbody>
-                <tr>
-                    <th>Version</th>
-                    <th>Date</th>
-                    <th>Description</th>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="download/1.6.2/download.cgi">
-                            <strong>1.6.2</strong>
-                        </a>
-                    </td>
-                    <td>26 Apr 2012</td>
-                    <td>1.6.2 Release (Mirrored)</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="download/1.6.1/download.cgi">
-                            <strong>1.6.1</strong>
-                        </a>
-                    </td>
-                    <td>24 Sep 2011</td>
-                    <td>1.6.1 Release (Mirrored)</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="download/1.5.2/download.cgi">
-                            <strong>1.5.2</strong>
-                        </a>
-                    </td>
-                    <td>24 Sep 2011</td>
-                    <td>1.5.2 Release (Mirrored)</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="download/1.6.0/download.cgi">
-                            <strong>1.6.0</strong>
-                        </a>
-                    </td>
-                    <td>06 Jun 2011</td>
-                    <td>1.6.0 Release (Archived)</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="download/1.5.1/download.cgi">
-                            <strong>1.5.1</strong>
-                        </a>
-                    </td>
-                    <td>10 Jan 2011</td>
-                    <td>1.5.1 Release (Archived)</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="download/1.5/download.cgi">
-                            <strong>1.5</strong>
-                        </a>
-                    </td>
-                    <td>01 Feb 2010</td>
-                    <td>1.5 Release (Archived)</td>
-                </tr>       
-                <tr>
-                    <td>
-                        <a href="download/1.4/download.cgi">
-                            <strong>1.4</strong>
-                        </a>
-                    </td>
-                    <td>12 Jun 2008</td>
-                    <td>1.4 Release (Archived)</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="download/1.3/download.cgi">
-                            <strong>1.3</strong>
-                        </a>
-                    </td>
-                    <td>06 Sep 2007</td>
-                    <td>1.3 Release (Archived)</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="download/1.2/download.cgi">
-                            <strong>1.2</strong>
-                        </a>
-                    </td>
-                    <td>02 Jun 2007</td>
-                    <td>1.2 Release (Archived)</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="download/1.1/download.cgi">
-                            <strong>1.1</strong>
-                        </a>
-                    </td>
-                    <td>11 Dec 2006</td>
-                    <td>1.1 Release (Archived)</td>
-                </tr>
-            </tbody>
-        </table>
-        <p>
-            <strong>Apache Rampart Distributions : <a href="https://hudson.apache.org/hudson/job/Rampart/lastStableBuild/org.apache.rampart$rampart-dist/">Nightly builds</a>
-            </strong>
-        </p>
-        <p>
-            <strong>Maven Repository: <a href="http://people.apache.org/repo/m2-ibiblio-rsync-repository/">Released Apache Rampart jars</a> | <a href="http://repository.apache.org/snapshots/">Nightly SNAPSHOT</a>
-                <a href=""></a>
-            </strong>
-        </p>
-    </body>
-</html>
diff --git a/modules/documentation/src/site/xdoc/download/1.1/download.xml b/modules/documentation/src/site/xdoc/download/1.1/download.xml
deleted file mode 100644
index b8ce317..0000000
--- a/modules/documentation/src/site/xdoc/download/1.1/download.xml
+++ /dev/null
@@ -1,97 +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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content=
-"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
-<meta http-equiv="content-type" content="" />
-<title>Apache Rampart 1.1 Release</title>
-</head>
-<body>
-<!--Google Anayitcs tracking code-->
-<script type="text/javascript" src=
-"http://www.google-analytics.com/urchin.js">
-</script><script type="text/javascript">
-//<![CDATA[
-_uacct = "UA-1954378-3";
-urchinTracker();
-//]]>
-</script>
-<!--End of Google Anayitcs tracking code-->
-<h2>Apache Rampart 1.1 Release</h2>
-<div>
-<table border="1" cellpadding="1">
-<tbody>
-<tr>
-<th scope="col">Distribution Name</th>
-<th scope="col">Description</th>
-<!--<th scope="col">Items</th>-->
-<th scope="col">Download</th>
-</tr>
-<tr>
-<td><a name="std-bin" id="std-bin"></a><strong>Standard Binary
-Distribution</strong></td>
-<td>This is the complete version of Apache Rampart and will contain samples
-as well.</td>
-<td><a href="http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1.zip" title=
-"http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-1.1.zip');">zip</a>
-<a href="http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1.zip.md5"
-title="http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1.zip.md5">MD5</a>
-<a href="http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1.zip.asc"
-title="http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><a name="src" id="src"></a> <strong>Source
-Distribution</strong></td>
-<td>This will contain the sources of Apache Rampart distribution.</td>
-<td><a href="http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-src.zip" title=
-"http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-src.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-1.1-src.zip');">zip</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-src.zip.md5"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-src.zip.md5">MD5</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-src.zip.asc"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-src.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><strong>Documents Distribution</strong></td>
-<td>This will contain all the documentation in one package.</td>
-<td><a href="http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-docs.zip" title=
-"http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-docs.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-1.1-docs.zip');">zip</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-docs.zip.md5"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-docs.zip.md5">MD5</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-docs.zip.asc"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_1/rampart-1.1-docs.zip.asc">PGP</a></td>
-</tr>
-</tbody>
-</table>
-</div>
-</body>
-</html>
diff --git a/modules/documentation/src/site/xdoc/download/1.2/download.xml b/modules/documentation/src/site/xdoc/download/1.2/download.xml
deleted file mode 100644
index 70822ce..0000000
--- a/modules/documentation/src/site/xdoc/download/1.2/download.xml
+++ /dev/null
@@ -1,97 +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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content=
-"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
-<meta http-equiv="content-type" content="" />
-<title>Apache Rampart 1.2 Release</title>
-</head>
-<body>
-<!--Google Anayitcs tracking code-->
-<script type="text/javascript" src=
-"http://www.google-analytics.com/urchin.js">
-</script><script type="text/javascript">
-//<![CDATA[
-_uacct = "UA-1954378-3";
-urchinTracker();
-//]]>
-</script>
-<!--End of Google Anayitcs tracking code-->
-<h2>Apache Rampart 1.2 Release</h2>
-<div>
-<table border="1" cellpadding="1">
-<tbody>
-<tr>
-<th scope="col">Distribution Name</th>
-<th scope="col">Description</th>
-<!--<th scope="col">Items</th>-->
-<th scope="col">Download</th>
-</tr>
-<tr>
-<td><a name="std-bin" id="std-bin"></a><strong>Standard Binary
-Distribution</strong></td>
-<td>This is the complete version of Apache Rampart and will contain samples
-as well.</td>
-<td><a href="http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2.zip" title=
-"http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-1.2.zip');">zip</a>
-<a href="http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2.zip.md5"
-title="http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2.zip.md5">MD5</a>
-<a href="http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2.zip.asc"
-title="http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><a name="src" id="src"></a> <strong>Source
-Distribution</strong></td>
-<td>This will contain the sources of Apache Rampart distribution.</td>
-<td><a href="http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-src.zip" title=
-"http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-src.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-1.2-src.zip');">zip</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-src.zip.md5"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-src.zip.md5">MD5</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-src.zip.asc"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-src.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><strong>Documents Distribution</strong></td>
-<td>This will contain all the documentation in one package.</td>
-<td><a href="http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-docs.zip" title=
-"http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-docs.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-1.2-docs.zip');">zip</a>
-<a href=
-"hhttp://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-docs.zip.md5"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-docs.zip.md5">MD5</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-docs.zip.asc"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_2/rampart-1.2-docs.zip.asc">PGP</a></td>
-</tr>
-</tbody>
-</table>
-</div>
-</body>
-</html>
diff --git a/modules/documentation/src/site/xdoc/download/1.3/download.xml b/modules/documentation/src/site/xdoc/download/1.3/download.xml
deleted file mode 100644
index 50dde84..0000000
--- a/modules/documentation/src/site/xdoc/download/1.3/download.xml
+++ /dev/null
@@ -1,97 +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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content=
-"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
-<meta http-equiv="content-type" content="" />
-<title>Apache Rampart 1.3 Release</title>
-</head>
-<body>
-<!--Google Anayitcs tracking code-->
-<script type="text/javascript" src=
-"http://www.google-analytics.com/urchin.js">
-</script><script type="text/javascript">
-//<![CDATA[
-_uacct = "UA-1954378-3";
-urchinTracker();
-//]]>
-</script>
-<!--End of Google Anayitcs tracking code-->
-<h2>Apache Rampart 1.3 Release</h2>
-<div>
-<table border="1" cellpadding="1">
-<tbody>
-<tr>
-<th scope="col">Distribution Name</th>
-<th scope="col">Description</th>
-<!--<th scope="col">Items</th>-->
-<th scope="col">Download</th>
-</tr>
-<tr>
-<td><a name="std-bin" id="std-bin"></a><strong>Standard Binary
-Distribution</strong></td>
-<td>This is the complete version of Apache Rampart and will contain samples
-as well.</td>
-<td><a href="http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3.zip" title=
-"http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-1.3.zip');">zip</a>
-<a href="http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3.zip.md5"
-title="http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3.zip.md5">MD5</a>
-<a href="http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3.zip.asc"
-title="http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><a name="src" id="src"></a> <strong>Source
-Distribution</strong></td>
-<td>This will contain the sources of Apache Rampart distribution.</td>
-<td><a href="http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-src.zip" title=
-"http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-src.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-1.3-src.zip');">zip</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-src.zip.md5"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-src.zip.md5">MD5</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-src.zip.asc"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-src.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><strong>Documents Distribution</strong></td>
-<td>This will contain all the documentation in one package.</td>
-<td><a href="http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-docs.zip" title=
-"http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-docs.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-1.3-docs.zip');">zip</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-docs.zip.md5"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-docs.zip.md5">MD5</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-docs.zip.asc"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_3/rampart-1.3-docs.zip.asc">PGP</a></td>
-</tr>
-</tbody>
-</table>
-</div>
-</body>
-</html>
diff --git a/modules/documentation/src/site/xdoc/download/1.4/download.xml b/modules/documentation/src/site/xdoc/download/1.4/download.xml
deleted file mode 100644
index ca564c0..0000000
--- a/modules/documentation/src/site/xdoc/download/1.4/download.xml
+++ /dev/null
@@ -1,82 +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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content=
-"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
-<meta http-equiv="content-type" content="" />
-<title>Apache Rampart 1.4 Release</title>
-</head>
-<body>
-<!--Google Anayitcs tracking code-->
-<script type="text/javascript" src=
-"http://www.google-analytics.com/urchin.js">
-</script><script type="text/javascript">
-//<![CDATA[
-_uacct = "UA-1954378-3";
-urchinTracker();
-//]]>
-</script>
-<!--End of Google Anayitcs tracking code-->
-<h2>Apache Rampart 1.4 Release</h2>
-<div>
-<table border="1" cellpadding="1">
-<tbody>
-<tr>
-<th scope="col">Distribution Name</th>
-<th scope="col">Description</th>
-<!--<th scope="col">Items</th>-->
-<th scope="col">Download</th>
-</tr>
-<tr>
-<td><a name="std-bin" id="std-bin"></a><strong>Standard Binary
-Distribution</strong></td>
-<td>This is the complete version of Apache Rampart and will contain samples
-as well.</td>
-<td><a href="http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-bin.zip" title=
-"http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-bin.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-1.4.zip');">zip</a>
-<a href="http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-bin.zip.md5"
-title="http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-bin.zip.md5">MD5</a>
-<a href="http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-bin.zip.asc"
-title="http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-bin.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><a name="src" id="src"></a> <strong>Source
-Distribution</strong></td>
-<td>This will contain the sources of Apache Rampart distribution.</td>
-<td><a href="http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-src.zip" title=
-"http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-src.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.4-src.zip');">zip</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-src.zip.md5"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-src.zip.md5">MD5</a>
-<a href=
-"http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-src.zip.asc"
-title=
-"http://archive.apache.org/dist/ws/rampart/1_4/rampart-dist-1.4-src.zip.asc">PGP</a></td>
-</tr>
-</tbody>
-</table>
-</div>
-</body>
-</html>
diff --git a/modules/documentation/src/site/xdoc/download/1.5.1/download.xml b/modules/documentation/src/site/xdoc/download/1.5.1/download.xml
deleted file mode 100644
index a55e387..0000000
--- a/modules/documentation/src/site/xdoc/download/1.5.1/download.xml
+++ /dev/null
@@ -1,115 +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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content=
-"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
-<meta http-equiv="content-type" content="" />
-<title>Apache Rampart 1.5.1 Release</title>
-</head>
-<body>
-<!--Google Anayitcs tracking code-->
-<script type="text/javascript" src=
-"http://www.google-analytics.com/urchin.js">
-</script><script type="text/javascript">
-//<![CDATA[
-_uacct = "UA-1954378-3";
-urchinTracker();
-//]]>
-</script>
-<!--End of Google Anayitcs tracking code-->
-<h2>Apache Rampart 1.5.1 Release</h2>
-<div>
-<table border="1" cellpadding="1">
-<tbody>
-<tr>
-<th scope="col">Distribution Name</th>
-<th scope="col">Description</th>
-<!--<th scope="col">Items</th>-->
-<th scope="col">Download</th>
-</tr>
-<tr>
-<td><a name="std-bin" id="std-bin"></a><strong>Standard Binary
-Distribution</strong></td>
-<td>This is the complete version of Apache Rampart and will contain samples
-as well.</td>
-<td><a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-bin.zip" title=
-		"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-bin.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.5.1-bin.zip');">zip</a>
-<a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-bin.zip.md5"
-	title="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-bin.zip.md5">MD5</a>
-<a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-bin.zip.asc"
-	title="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-bin.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><a name="src" id="src"></a> <strong>Source
-Distribution</strong></td>
-<td>This will contain the sources of Apache Rampart distribution.</td>
-<td><a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-src.zip" title=
-		"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-src.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.5.1-src.zip');">zip</a>
-<a href=
-	"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-src.zip.md5"
-title=
-"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-src.zip.md5">MD5</a>
-<a href=
-	"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-src.zip.asc"
-title=
-"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5.1/rampart-dist-1.5.1-src.zip.asc">PGP</a></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div align="left"><br />
-<p>[if-any logo] <a href="[link]"><img align="right" src="[logo]"
-border="0" /></a>[end] The currently selected mirror is
-<b>[preferred]</b>. If you encounter a problem with this mirror,
-please select another mirror. If all mirrors are failing, there are
-<i>backup</i> mirrors (at the end of the mirrors list) that should
-be available.</p>
-<form action="[location]" method="get" id="SelectMirror" name="SelectMirror">
-Other mirrors: <select name="Preferred">
-[if-any http]
-  [for http]<option value="[http]">[http]</option>[end]
-[end]  
-[if-any ftp]
-  [for ftp]<option value="[ftp]">[ftp]</option>[end]
-[end]
-[if-any backup]
-  [for backup]<option value="[backup]">[backup] (backup)</option>[end]
-[end]
-</select><input type="submit" value="Change"/></form><p>You may also consult the <a class="externalLink" href="http://www.apache.org/mirrors/">complete list of mirrors</a>
-.</p>
-<p><strong>Note:</strong> when downloading from a mirror please
-check the <a href=
-"http://www.apache.org/dev/release-signing#md5">md5sum</a> and
-verify the <a href=
-"http://www.apache.org/dev/release-signing#openpgp">OpenPGP</a>
-compatible signature from the main Apache site. These can be
-downloaded by following the links above. This <a href=
-"http://www.apache.org/dist/axis/axis2/java/rampart/KEYS">KEYS</a> file contains
-the public keys that can be used for verifying signatures. It is
-recommended that (when possible)a <a href=
-"http://www.apache.org/dev/release-signing#web-of-trust">Web of
-trust</a> is used to confirm the identity of these keys.</p>
-</div>
-</body>
-</html>
diff --git a/modules/documentation/src/site/xdoc/download/1.5.2/download.xml b/modules/documentation/src/site/xdoc/download/1.5.2/download.xml
deleted file mode 100644
index 0ef5c7d..0000000
--- a/modules/documentation/src/site/xdoc/download/1.5.2/download.xml
+++ /dev/null
@@ -1,115 +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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content=
-"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
-<meta http-equiv="content-type" content="" />
-<title>Apache Rampart 1.5.2 Release</title>
-</head>
-<body>
-<!--Google Anayitcs tracking code-->
-<script type="text/javascript" src=
-"http://www.google-analytics.com/urchin.js">
-</script><script type="text/javascript">
-//<![CDATA[
-_uacct = "UA-1954378-3";
-urchinTracker();
-//]]>
-</script>
-<!--End of Google Anayitcs tracking code-->
-<h2>Apache Rampart 1.5.2 Release</h2>
-<div>
-<table border="1" cellpadding="1">
-<tbody>
-<tr>
-<th scope="col">Distribution Name</th>
-<th scope="col">Description</th>
-<!--<th scope="col">Items</th>-->
-<th scope="col">Download</th>
-</tr>
-<tr>
-<td><a name="std-bin" id="std-bin"></a><strong>Standard Binary
-Distribution</strong></td>
-<td>This is the complete version of Apache Rampart and will contain samples
-as well.</td>
-<td><a href="[preferred]/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-bin.zip" title=
-		"[preferred]/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-bin.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.5.2-bin.zip');">zip</a>
-<a href="http://www.apache.org/dist/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-bin.zip.md5"
-	title="http://www.apache.org/dist/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-bin.zip.md5">MD5</a>
-<a href="http://www.apache.org/dist/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-bin.zip.asc"
-	title="http://www.apache.org/dist/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-bin.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><a name="src" id="src"></a> <strong>Source
-Distribution</strong></td>
-<td>This will contain the sources of Apache Rampart distribution.</td>
-<td><a href="[preferred]/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-src.zip" title=
-		"[preferred]/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-src.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.5.2-src.zip');">zip</a>
-<a href=
-	"http://www.apache.org/dist/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-src.zip.md5"
-title=
-"http://www.apache.org/dist/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-src.zip.md5">MD5</a>
-<a href=
-	"http://www.apache.org/dist/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-src.zip.asc"
-title=
-"http://www.apache.org/dist/axis/axis2/java/rampart/1.5.2/rampart-dist-1.5.2-src.zip.asc">PGP</a></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div align="left"><br />
-<p>[if-any logo] <a href="[link]"><img align="right" src="[logo]"
-border="0" /></a>[end] The currently selected mirror is
-<b>[preferred]</b>. If you encounter a problem with this mirror,
-please select another mirror. If all mirrors are failing, there are
-<i>backup</i> mirrors (at the end of the mirrors list) that should
-be available.</p>
-<form action="[location]" method="get" id="SelectMirror" name="SelectMirror">
-Other mirrors: <select name="Preferred">
-[if-any http]
-  [for http]<option value="[http]">[http]</option>[end]
-[end]  
-[if-any ftp]
-  [for ftp]<option value="[ftp]">[ftp]</option>[end]
-[end]
-[if-any backup]
-  [for backup]<option value="[backup]">[backup] (backup)</option>[end]
-[end]
-</select><input type="submit" value="Change"/></form><p>You may also consult the <a class="externalLink" href="http://www.apache.org/mirrors/">complete list of mirrors</a>
-.</p>
-<p><strong>Note:</strong> when downloading from a mirror please
-check the <a href=
-"http://www.apache.org/dev/release-signing#md5">md5sum</a> and
-verify the <a href=
-"http://www.apache.org/dev/release-signing#openpgp">OpenPGP</a>
-compatible signature from the main Apache site. These can be
-downloaded by following the links above. This <a href=
-"http://www.apache.org/dist/axis/axis2/java/rampart/KEYS">KEYS</a> file contains
-the public keys that can be used for verifying signatures. It is
-recommended that (when possible)a <a href=
-"http://www.apache.org/dev/release-signing#web-of-trust">Web of
-trust</a> is used to confirm the identity of these keys.</p>
-</div>
-</body>
-</html>
diff --git a/modules/documentation/src/site/xdoc/download/1.5/download.xml b/modules/documentation/src/site/xdoc/download/1.5/download.xml
deleted file mode 100644
index 89f6c90..0000000
--- a/modules/documentation/src/site/xdoc/download/1.5/download.xml
+++ /dev/null
@@ -1,82 +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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content=
-"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
-<meta http-equiv="content-type" content="" />
-<title>Apache Rampart 1.5 Release</title>
-</head>
-<body>
-<!--Google Anayitcs tracking code-->
-<script type="text/javascript" src=
-"http://www.google-analytics.com/urchin.js">
-</script><script type="text/javascript">
-//<![CDATA[
-_uacct = "UA-1954378-3";
-urchinTracker();
-//]]>
-</script>
-<!--End of Google Anayitcs tracking code-->
-<h2>Apache Rampart 1.5 Release</h2>
-<div>
-<table border="1" cellpadding="1">
-<tbody>
-<tr>
-<th scope="col">Distribution Name</th>
-<th scope="col">Description</th>
-<!--<th scope="col">Items</th>-->
-<th scope="col">Download</th>
-</tr>
-<tr>
-<td><a name="std-bin" id="std-bin"></a><strong>Standard Binary
-Distribution</strong></td>
-<td>This is the complete version of Apache Rampart and will contain samples
-as well.</td>
-<td><a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-bin.zip" title=
-"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-bin.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-1.5.zip');">zip</a>
-<a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-bin.zip.md5"
-title="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-bin.zip.md5">MD5</a>
-<a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-bin.zip.asc"
-title="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-bin.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><a name="src" id="src"></a> <strong>Source
-Distribution</strong></td>
-<td>This will contain the sources of Apache Rampart distribution.</td>
-<td><a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-src.zip" title=
-"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-src.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.5-src.zip');">zip</a>
-<a href=
-"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-src.zip.md5"
-title=
-"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-src.zip.md5">MD5</a>
-<a href=
-"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-src.zip.asc"
-title=
-"http://archive.apache.org/dist/axis/axis2/java/rampart/1.5/rampart-dist-1.5-src.zip.asc">PGP</a></td>
-</tr>
-</tbody>
-</table>
-</div>
-</body>
-</html>
diff --git a/modules/documentation/src/site/xdoc/download/1.6.0/download.xml b/modules/documentation/src/site/xdoc/download/1.6.0/download.xml
deleted file mode 100644
index 1a15f8b..0000000
--- a/modules/documentation/src/site/xdoc/download/1.6.0/download.xml
+++ /dev/null
@@ -1,115 +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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content=
-"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
-<meta http-equiv="content-type" content="" />
-<title>Apache Rampart 1.6.0 Release</title>
-</head>
-<body>
-<!--Google Anayitcs tracking code-->
-<script type="text/javascript" src=
-"http://www.google-analytics.com/urchin.js">
-</script><script type="text/javascript">
-//<![CDATA[
-_uacct = "UA-1954378-3";
-urchinTracker();
-//]]>
-</script>
-<!--End of Google Anayitcs tracking code-->
-<h2>Apache Rampart 1.6.0 Release</h2>
-<div>
-<table border="1" cellpadding="1">
-<tbody>
-<tr>
-<th scope="col">Distribution Name</th>
-<th scope="col">Description</th>
-<!--<th scope="col">Items</th>-->
-<th scope="col">Download</th>
-</tr>
-<tr>
-<td><a name="std-bin" id="std-bin"></a><strong>Standard Binary
-Distribution</strong></td>
-<td>This is the complete version of Apache Rampart and will contain samples
-as well.</td>
-<td><a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-bin.zip" title=
-		"http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-bin.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.6.0-bin.zip');">zip</a>
-<a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-bin.zip.md5"
-	title="http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-bin.zip.md5">MD5</a>
-<a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-bin.zip.asc"
-	title="http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-bin.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><a name="src" id="src"></a> <strong>Source
-Distribution</strong></td>
-<td>This will contain the sources of Apache Rampart distribution.</td>
-<td><a href="http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-src.zip" title=
-		"http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-src.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.6.0-src.zip');">zip</a>
-<a href=
-	"http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-src.zip.md5"
-title=
-"http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-src.zip.md5">MD5</a>
-<a href=
-	"http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-src.zip.asc"
-title=
-"http://archive.apache.org/dist/axis/axis2/java/rampart/1.6.0/rampart-dist-1.6.0-src.zip.asc">PGP</a></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div align="left"><br />
-<p>[if-any logo] <a href="[link]"><img align="right" src="[logo]"
-border="0" /></a>[end] The currently selected mirror is
-<b>[preferred]</b>. If you encounter a problem with this mirror,
-please select another mirror. If all mirrors are failing, there are
-<i>backup</i> mirrors (at the end of the mirrors list) that should
-be available.</p>
-<form action="[location]" method="get" id="SelectMirror" name="SelectMirror">
-Other mirrors: <select name="Preferred">
-[if-any http]
-  [for http]<option value="[http]">[http]</option>[end]
-[end]  
-[if-any ftp]
-  [for ftp]<option value="[ftp]">[ftp]</option>[end]
-[end]
-[if-any backup]
-  [for backup]<option value="[backup]">[backup] (backup)</option>[end]
-[end]
-</select><input type="submit" value="Change"/></form><p>You may also consult the <a class="externalLink" href="http://www.apache.org/mirrors/">complete list of mirrors</a>
-.</p>
-<p><strong>Note:</strong> when downloading from a mirror please
-check the <a href=
-"http://www.apache.org/dev/release-signing#md5">md5sum</a> and
-verify the <a href=
-"http://www.apache.org/dev/release-signing#openpgp">OpenPGP</a>
-compatible signature from the main Apache site. These can be
-downloaded by following the links above. This <a href=
-"http://www.apache.org/dist/axis/axis2/java/rampart/KEYS">KEYS</a> file contains
-the public keys that can be used for verifying signatures. It is
-recommended that (when possible)a <a href=
-"http://www.apache.org/dev/release-signing#web-of-trust">Web of
-trust</a> is used to confirm the identity of these keys.</p>
-</div>
-</body>
-</html>
diff --git a/modules/documentation/src/site/xdoc/download/1.6.1/download.xml b/modules/documentation/src/site/xdoc/download/1.6.1/download.xml
deleted file mode 100644
index 877ebdc..0000000
--- a/modules/documentation/src/site/xdoc/download/1.6.1/download.xml
+++ /dev/null
@@ -1,115 +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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content=
-"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
-<meta http-equiv="content-type" content="" />
-<title>Apache Rampart 1.6.1 Release</title>
-</head>
-<body>
-<!--Google Anayitcs tracking code-->
-<script type="text/javascript" src=
-"http://www.google-analytics.com/urchin.js">
-</script><script type="text/javascript">
-//<![CDATA[
-_uacct = "UA-1954378-3";
-urchinTracker();
-//]]>
-</script>
-<!--End of Google Anayitcs tracking code-->
-<h2>Apache Rampart 1.6.1 Release</h2>
-<div>
-<table border="1" cellpadding="1">
-<tbody>
-<tr>
-<th scope="col">Distribution Name</th>
-<th scope="col">Description</th>
-<!--<th scope="col">Items</th>-->
-<th scope="col">Download</th>
-</tr>
-<tr>
-<td><a name="std-bin" id="std-bin"></a><strong>Standard Binary
-Distribution</strong></td>
-<td>This is the complete version of Apache Rampart and will contain samples
-as well.</td>
-<td><a href="[preferred]/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-bin.zip" title=
-		"[preferred]/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-bin.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.6.1-bin.zip');">zip</a>
-<a href="http://www.apache.org/dist/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-bin.zip.md5"
-	title="http://www.apache.org/dist/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-bin.zip.md5">MD5</a>
-<a href="http://www.apache.org/dist/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-bin.zip.asc"
-	title="http://www.apache.org/dist/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-bin.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><a name="src" id="src"></a> <strong>Source
-Distribution</strong></td>
-<td>This will contain the sources of Apache Rampart distribution.</td>
-<td><a href="[preferred]/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-src.zip" title=
-		"[preferred]/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-src.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.6.1-src.zip');">zip</a>
-<a href=
-	"http://www.apache.org/dist/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-src.zip.md5"
-title=
-"http://www.apache.org/dist/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-src.zip.md5">MD5</a>
-<a href=
-	"http://www.apache.org/dist/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-src.zip.asc"
-title=
-"http://www.apache.org/dist/axis/axis2/java/rampart/1.6.1/rampart-dist-1.6.1-src.zip.asc">PGP</a></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div align="left"><br />
-<p>[if-any logo] <a href="[link]"><img align="right" src="[logo]"
-border="0" /></a>[end] The currently selected mirror is
-<b>[preferred]</b>. If you encounter a problem with this mirror,
-please select another mirror. If all mirrors are failing, there are
-<i>backup</i> mirrors (at the end of the mirrors list) that should
-be available.</p>
-<form action="[location]" method="get" id="SelectMirror" name="SelectMirror">
-Other mirrors: <select name="Preferred">
-[if-any http]
-  [for http]<option value="[http]">[http]</option>[end]
-[end]  
-[if-any ftp]
-  [for ftp]<option value="[ftp]">[ftp]</option>[end]
-[end]
-[if-any backup]
-  [for backup]<option value="[backup]">[backup] (backup)</option>[end]
-[end]
-</select><input type="submit" value="Change"/></form><p>You may also consult the <a class="externalLink" href="http://www.apache.org/mirrors/">complete list of mirrors</a>
-.</p>
-<p><strong>Note:</strong> when downloading from a mirror please
-check the <a href=
-"http://www.apache.org/dev/release-signing#md5">md5sum</a> and
-verify the <a href=
-"http://www.apache.org/dev/release-signing#openpgp">OpenPGP</a>
-compatible signature from the main Apache site. These can be
-downloaded by following the links above. This <a href=
-"http://www.apache.org/dist/axis/axis2/java/rampart/KEYS">KEYS</a> file contains
-the public keys that can be used for verifying signatures. It is
-recommended that (when possible)a <a href=
-"http://www.apache.org/dev/release-signing#web-of-trust">Web of
-trust</a> is used to confirm the identity of these keys.</p>
-</div>
-</body>
-</html>
diff --git a/modules/documentation/src/site/xdoc/download/1.6.2/download.xml b/modules/documentation/src/site/xdoc/download/1.6.2/download.xml
deleted file mode 100644
index a3c7816..0000000
--- a/modules/documentation/src/site/xdoc/download/1.6.2/download.xml
+++ /dev/null
@@ -1,115 +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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta name="generator" content=
-"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
-<meta http-equiv="content-type" content="" />
-<title>Apache Rampart 1.6.2 Release</title>
-</head>
-<body>
-<!--Google Anayitcs tracking code-->
-<script type="text/javascript" src=
-"http://www.google-analytics.com/urchin.js">
-</script><script type="text/javascript">
-//<![CDATA[
-_uacct = "UA-1954378-3";
-urchinTracker();
-//]]>
-</script>
-<!--End of Google Anayitcs tracking code-->
-<h2>Apache Rampart 1.6.2 Release</h2>
-<div>
-<table border="1" cellpadding="1">
-<tbody>
-<tr>
-<th scope="col">Distribution Name</th>
-<th scope="col">Description</th>
-<!--<th scope="col">Items</th>-->
-<th scope="col">Download</th>
-</tr>
-<tr>
-<td><a name="std-bin" id="std-bin"></a><strong>Standard Binary
-Distribution</strong></td>
-<td>This is the complete version of Apache Rampart and will contain samples
-as well.</td>
-<td><a href="[preferred]/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-bin.zip" title=
-		"[preferred]/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-bin.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.6.2-bin.zip');">zip</a>
-<a href="http://www.apache.org/dist/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-bin.zip.md5"
-	title="http://www.apache.org/dist/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-bin.zip.md5">MD5</a>
-<a href="http://www.apache.org/dist/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-bin.zip.asc"
-	title="http://www.apache.org/dist/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-bin.zip.asc">PGP</a></td>
-</tr>
-<tr>
-<td><a name="src" id="src"></a> <strong>Source
-Distribution</strong></td>
-<td>This will contain the sources of Apache Rampart distribution.</td>
-<td><a href="[preferred]/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-src.zip" title=
-		"[preferred]/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-src.zip" onClick=
-"javascript:urchinTracker ('/downloads/rampart-dist-1.6.2-src.zip');">zip</a>
-<a href=
-	"http://www.apache.org/dist/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-src.zip.md5"
-title=
-"http://www.apache.org/dist/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-src.zip.md5">MD5</a>
-<a href=
-	"http://www.apache.org/dist/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-src.zip.asc"
-title=
-"http://www.apache.org/dist/axis/axis2/java/rampart/1.6.2/rampart-dist-1.6.2-src.zip.asc">PGP</a></td>
-</tr>
-</tbody>
-</table>
-</div>
-<div align="left"><br />
-<p>[if-any logo] <a href="[link]"><img align="right" src="[logo]"
-border="0" /></a>[end] The currently selected mirror is
-<b>[preferred]</b>. If you encounter a problem with this mirror,
-please select another mirror. If all mirrors are failing, there are
-<i>backup</i> mirrors (at the end of the mirrors list) that should
-be available.</p>
-<form action="[location]" method="get" id="SelectMirror" name="SelectMirror">
-Other mirrors: <select name="Preferred">
-[if-any http]
-  [for http]<option value="[http]">[http]</option>[end]
-[end]  
-[if-any ftp]
-  [for ftp]<option value="[ftp]">[ftp]</option>[end]
-[end]
-[if-any backup]
-  [for backup]<option value="[backup]">[backup] (backup)</option>[end]
-[end]
-</select><input type="submit" value="Change"/></form><p>You may also consult the <a class="externalLink" href="http://www.apache.org/mirrors/">complete list of mirrors</a>
-.</p>
-<p><strong>Note:</strong> when downloading from a mirror please
-check the <a href=
-"http://www.apache.org/dev/release-signing#md5">md5sum</a> and
-verify the <a href=
-"http://www.apache.org/dev/release-signing#openpgp">OpenPGP</a>
-compatible signature from the main Apache site. These can be
-downloaded by following the links above. This <a href=
-"http://www.apache.org/dist/axis/axis2/java/rampart/KEYS">KEYS</a> file contains
-the public keys that can be used for verifying signatures. It is
-recommended that (when possible)a <a href=
-"http://www.apache.org/dev/release-signing#web-of-trust">Web of
-trust</a> is used to confirm the identity of these keys.</p>
-</div>
-</body>
-</html>
diff --git a/modules/documentation/src/site/xdoc/index.xml b/modules/documentation/src/site/xdoc/index.xml
deleted file mode 100644
index b8e37e5..0000000
--- a/modules/documentation/src/site/xdoc/index.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!--
-  ~  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.
-  -->
-
-<document xmlns="http://maven.apache.org/XDOC/2.0"
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-          xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
-
-	<properties>
-		
-	</properties>
-
-	<body>
-        <h1>Apache Rampart - Axis2 Security Module</h1>
-		<section name="Welcome to Apache Rampart">
-			<p>Rampart is the security module of Axis2. It secures SOAP messages
-according to specifications in the WS-Security stack. Rampart implements the
-following specifications:</p>
-		</section>
-		
-		<section name="Features of Rampart Latest Version">
-		
-		    <ul>
-                <li><p>WS - Security 1.0</p></li>
-                <li><p>WS - Security 1.1</p></li>
-                <li><p>WS - Secure Conversation - February 2005</p></li>
-                <li><p>WS - Security Policy - 1.1 - July 2005</p></li>
-                <li><p>WS - Security Policy - 1.2</p></li>
-                <li><p>WS - Trust - February 2005</p></li>
-                <li><p>WS - Trust - WS-SX spec - EXPERIMENTAL</p></li>
-            </ul>
-        </section>
-        
-        <section name="Apache Rampart News">
-        <h3>April 26, 2012 : Apache Rampart 1.6.2 released</h3>
-        <p>Apache Rampart 1.6.2 is a maintenance release that update WSS4J to version 1.6.4 and OpenSAML to version 2.5.1. Apache Rampart 1.6.2 ensure compatibility with the latest Axis2 1.6.2 release.</p>
-
-        <h3>Sep 24, 2011 : Apache Rampart 1.5.2 and 1.6.1 released</h3>
-        <p>Both releases update WSS4J to version 1.5.12 and ensure compatibility with the latest
-        Axis2 releases from the corresponding branches. Rampart 1.5.2 is supported with Axis2 1.5.6
-        and Rampart 1.6.1 is supported with Axis2 1.6.1. Please note that Rampart 1.6.1 will not
-        work with Axis2 1.6.0 and that users of Axis2 1.6.1 are required to update to Rampart 1.6.1,
-        i.e. Rampart 1.6.0 doesn't work with Axis2 1.6.1.</p>
-        
-		<h3>Jun 06, 2011 : Apache Rampart 1.6.0 released</h3>
-        <p>Apache Rampart 1.6.0 was released with lots of bug fixes.</p>
-    
-		<h3>Jan 10, 2011 : Apache Rampart 1.5.1 released</h3>
-        <p>Apache Rampart 1.5.1 was released with lots of bug fixes.</p>
-
-		<h3>Feb 01, 2010 : Apache Rampart 1.5 released</h3>
-        <p>Apache Rampart 1.5 was released with lots of bug fixes and new features.</p>
-        <p>New features include</p>
-            <ul>
-                <li>SAML 2.0 support - Issuance </li>
-                <li>Key store caching</li>
-                <li>Signing / Encrypting with multiple keys</li>
-                <li>Tests for negative scenarios</li>
-            </ul>
-        <h3>Jun 12, 2008 : Apache Rampart 1.4 released</h3>  
-        <p>Apache Rampart 1.4 was released with lots of bug fixes and new features.</p>
-        <p>New features include</p>
-            <ul>
-                <li>WS Security 1.1</li>
-                <ul>
-                   <li>Encrypted headers</li>
-                   <li>Encrypted SHA1 references</li>
-                </ul>
-                <li>WS Security Policy 1.2 support</li>
-                <li>WS Trust</li>
-                <ul>
-                    <li>Renew binding</li>
-                    <li>Validation binding</li>
-                </ul>
-                <li>New configuration options</li>
-                <ul>
-                    <li>Ability to plug in Custom policy validators</li>
-                    <li>Ability to define certAlias different from username for signature</li>
-                    <li>Ability turn off mili second precision</li>
-                </ul>
-                <li>Ability to secure messages faults </li>
-                <li>Increased interoperability with WCF 3.5 </li>
-            </ul>   
-        </section>
-	</body>
-</document>
diff --git a/modules/rampart-core/pom.xml b/modules/rampart-core/pom.xml
index 1551d71..7d4b513 100644
--- a/modules/rampart-core/pom.xml
+++ b/modules/rampart-core/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.rampart</groupId>
         <artifactId>rampart-project</artifactId>
-        <version>1.7.0-SNAPSHOT</version>
+        <version>1.8.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
 
@@ -34,30 +34,38 @@
     <packaging>jar</packaging>
     <name>Rampart - Core</name>
 
-    <build>
-        <sourceDirectory>src/main/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <excludes>
-                    <exclude>**/*.java</exclude>                     
-                </excludes>
-            </resource>
-        </resources> 
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
     <dependencies>
         <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-kernel</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-mtompolicy</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>mex</artifactId>
+            <classifier>impl</classifier>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ws.security</groupId>
+            <artifactId>wss4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opensaml</groupId>
+            <artifactId>opensaml</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>xalan</groupId>
+            <artifactId>xalan</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.rampart</groupId>
             <artifactId>rampart-policy</artifactId>
             <version>${project.version}</version>
@@ -72,19 +80,15 @@
             <artifactId>axiom-dom</artifactId>
             <scope>runtime</scope>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ws.commons.axiom</groupId>
+            <artifactId>axiom-truth</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-site-plugin</artifactId>
-                <version>2.0-beta-5</version>
-                <configuration>
-                    <templateDirectory>${basedir}</templateDirectory>
-                    <menu ref="parent" />
-                </configuration>
-            </plugin>
-        </plugins>
-    </reporting>
 </project>
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/ExtendedPolicyValidatorCallbackHandler.java b/modules/rampart-core/src/main/java/org/apache/rampart/ExtendedPolicyValidatorCallbackHandler.java
index 6bd2f59..c2248b9 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/ExtendedPolicyValidatorCallbackHandler.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/ExtendedPolicyValidatorCallbackHandler.java
@@ -3,7 +3,6 @@
 import org.apache.ws.security.WSSecurityEngineResult;
 
 import java.util.List;
-import java.util.Vector;
 
 /**
  * This is an extension of the PolicyValidatorCallbackHandler. PolicyValidatorCallbackHandler uses Vector
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/NonceCache.java b/modules/rampart-core/src/main/java/org/apache/rampart/NonceCache.java
index a0681fa..27d2359 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/NonceCache.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/NonceCache.java
@@ -140,12 +140,12 @@
         rightNow.add(Calendar.SECOND, -(maxLifeTime));
         long timeBeforeMaxLifeTime = rightNow.getTimeInMillis();
         
-        Iterator iterator = mapIdNonce.entrySet().iterator();
+        Iterator<Map.Entry<Nonce, Calendar>> iterator = mapIdNonce.entrySet().iterator();
 
         while (iterator.hasNext()) {
 
-            Map.Entry pair = (Map.Entry)iterator.next();
-            Calendar itemDate = (Calendar)pair.getValue();
+            Map.Entry<Nonce, Calendar> pair = iterator.next();
+            Calendar itemDate = pair.getValue();
 
             long itemAddedTime = itemDate.getTimeInMillis();
 
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java b/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
index c0f62bd..6494d13 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
@@ -39,7 +39,6 @@
 
 import javax.xml.namespace.QName;
 import java.math.BigInteger;
-import java.security.KeyStore;
 import java.security.cert.X509Certificate;
 import java.util.*;
 
@@ -324,13 +323,34 @@
                 UsernameToken ut = (UsernameToken) token;
                 //Check presence of a UsernameToken
                 WSSecurityEngineResult utResult = WSSecurityUtil.fetchActionResult(results, WSConstants.UT);
+                
                 if (utResult == null && !ut.isOptional()) {
                     throw new RampartException("usernameTokenMissing");
                 }
+                
+                org.apache.ws.security.message.token.UsernameToken wssUt = 
+                		(org.apache.ws.security.message.token.UsernameToken) utResult.get(WSSecurityEngineResult.TAG_USERNAME_TOKEN);
+                
+                if(ut.isNoPassword() && wssUt.getPassword() != null) {
+                	throw new RampartException("invalidUsernameTokenType");
+                }
+                
+            	if(ut.isHashPassword() && !wssUt.isHashed()) {
+                	throw new RampartException("invalidUsernameTokenType");
+                } else if (!ut.isHashPassword() && (wssUt.getPassword() == null ||
+                        !wssUt.getPasswordType().equals(WSConstants.PASSWORD_TEXT))) {
+                	throw new RampartException("invalidUsernameTokenType");
+                }
+                
+                
 
             } else if (token instanceof IssuedToken) {
-                //TODO is is enough to check for ST_UNSIGNED results ??
-                WSSecurityEngineResult samlResult = WSSecurityUtil.fetchActionResult(results, WSConstants.ST_UNSIGNED);
+                WSSecurityEngineResult samlResult = WSSecurityUtil.fetchActionResult(results, WSConstants.ST_SIGNED);
+                // Then check for unsigned saml tokens
+                if (samlResult == null) {
+                    log.debug("No signed SAMLToken found. Looking for unsigned SAMLTokens");
+                    samlResult = WSSecurityUtil.fetchActionResult(results, WSConstants.ST_UNSIGNED);
+                }
                 if (samlResult == null) {
                     throw new RampartException("samlTokenMissing");
                 }
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java b/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
index b1f6970..a4d612b 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
@@ -27,17 +27,39 @@
 import org.apache.rahas.Token;
 import org.apache.rahas.TokenStorage;
 import org.apache.rampart.policy.RampartPolicyData;
+import org.apache.rampart.policy.model.KerberosConfig;
+import org.apache.rampart.policy.model.RampartConfig;
 import org.apache.rampart.saml.SAMLAssertionHandler;
 import org.apache.rampart.saml.SAMLAssertionHandlerFactory;
 import org.apache.rampart.util.Axis2Util;
 import org.apache.rampart.util.RampartUtil;
 import org.apache.ws.secpolicy.WSSPolicyException;
-import org.apache.ws.security.*;
+import org.apache.ws.secpolicy.model.KerberosToken;
+import org.apache.ws.secpolicy.model.SupportingToken;
+import org.apache.ws.secpolicy.model.UsernameToken;
+import org.apache.ws.security.NamePasswordCallbackHandler;
+import org.apache.ws.security.WSConstants;
+import org.apache.ws.security.WSPasswordCallback;
+import org.apache.ws.security.WSSConfig;
+import org.apache.ws.security.WSSecurityEngine;
+import org.apache.ws.security.WSSecurityEngineResult;
+import org.apache.ws.security.WSSecurityException;
+import org.apache.ws.security.WSUsernameTokenPrincipal;
 import org.apache.ws.security.components.crypto.Crypto;
+import org.apache.ws.security.validate.KerberosTokenDecoder;
+import org.apache.ws.security.validate.KerberosTokenValidator;
 
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
 import javax.xml.namespace.QName;
+
+import java.io.IOException;
 import java.security.cert.X509Certificate;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
 
 public class RampartEngine {
 
@@ -83,8 +105,93 @@
 		List<WSSecurityEngineResult> results;
 
 		WSSecurityEngine engine = new WSSecurityEngine();
+		
+		//Set rampart's configuration of WSS4J
+		engine.setWssConfig(rmd.getConfig());
 
-		ValidatorData data = new ValidatorData(rmd);
+        RampartConfig rampartConfig = rpd.getRampartConfig();
+        if (rampartConfig != null) {
+            WSSConfig config = engine.getWssConfig();
+
+            // Inbound Kerberos authentication for web services
+            // Check the service policy for Kerberos token and add KerberosTokenValidator for BINARY_TOKEN validation
+            SupportingToken endSupptokens = rpd.getEndorsingSupportingTokens();
+            if (endSupptokens != null && endSupptokens.getTokens() != null &&
+                endSupptokens.getTokens().size() > 0) {
+                
+                log.debug("Processing endorsing supporting tokens");
+                
+                for (org.apache.ws.secpolicy.model.Token token : endSupptokens.getTokens()) {
+                    if (token instanceof KerberosToken) {
+                        log.debug("KerberosToken is found as part of the endorsing supporting tokens.Check for KerberosConfig.");
+                        KerberosConfig kerberosConfig = rampartConfig.getKerberosConfig();
+                        
+                        if (null != kerberosConfig){
+                            log.debug("KerberosConfig is found.");
+                            log.debug("Creating KerberosTokenValidor with the available KerberosConfig.");
+                            KerberosTokenValidator kerberosValidator = new KerberosTokenValidator();
+                            
+                            KerberosTokenDecoder kerberosTokenDecoder = RampartUtil.getKerberosTokenDecoder(msgCtx, kerberosConfig);
+                            if (kerberosTokenDecoder != null) {
+                                kerberosValidator.setKerberosTokenDecoder(kerberosTokenDecoder);
+                            }
+                            kerberosValidator.setContextName(kerberosConfig.getJaasContext());
+                            kerberosValidator.setServiceName(kerberosConfig.getServicePrincipalName());
+                            String serviceNameForm = kerberosConfig.getServicePrincipalNameForm();
+                            
+                            if (KerberosConfig.USERNAME_NAME_FORM.equals(serviceNameForm)) {
+                                kerberosValidator.setUsernameServiceNameForm(true);    
+                            }
+                            
+                            String principalName = kerberosConfig.getPrincipalName();
+                            if (null == principalName){
+                                log.debug("Principal name is not available in the KerberosConfig.Using the Rampart configuration's user.");
+                                principalName = rampartConfig.getUser();
+                            }
+                            
+                            String password = kerberosConfig.getPrincipalPassword();
+                            if (password == null) {
+                                log.debug("Principal password is not available in the KerberosConfig.Trying with the configured Rampart password callback.");
+                                CallbackHandler handler = RampartUtil.getPasswordCB(rmd);
+
+                                if (handler != null) {
+                                    WSPasswordCallback[] cb = { 
+                                            new WSPasswordCallback(principalName, WSPasswordCallback.CUSTOM_TOKEN) 
+                                    };
+                                    
+                                    try {
+                                        handler.handle(cb);
+                                        if (cb[0].getPassword() != null && !"".equals(cb[0].getPassword())) {
+                                            password = cb[0].getPassword();
+                                        }
+                                    } catch (IOException e) {
+                                        throw new RampartException("errorInGettingPasswordForUser", new String[] { principalName }, e);
+                                    } catch (UnsupportedCallbackException e) {
+                                        throw new RampartException("errorInGettingPasswordForUser", new String[] { principalName }, e);
+                                    }
+                                } else{
+                                    log.debug("No Rampart password handler is configured.");
+                                }
+                            }
+                            
+                            if (principalName != null && password != null) {
+                                NamePasswordCallbackHandler cb = new NamePasswordCallbackHandler(principalName, password);                            
+                                kerberosValidator.setCallbackHandler(cb);
+                            }
+                            
+                            config.setValidator(WSSecurityEngine.BINARY_TOKEN, kerberosValidator);
+                            log.debug("KerberosTokenValidator is configured and set for BINARY_TOKEN.");
+                        } else {
+                            log.debug("KerberosConfig is not found.Skipping configurating and setting of a Kerberos validator.");
+                        }
+                    }
+                }
+            }
+            
+            engine.setWssConfig(config);
+        }
+
+        ValidatorData data = new ValidatorData(rmd);
 
 		SOAPHeader header = rmd.getMsgContext().getEnvelope().getHeader();
 		if(header == null) {
@@ -114,8 +221,20 @@
 			t0 = System.currentTimeMillis();
 		}
 
-		String actorValue = secHeader.getAttributeValue(new QName(rmd
-				.getSoapConstants().getEnvelopeURI(), "actor"));
+		//wss4j does not allow username tokens with no password per default, see https://issues.apache.org/jira/browse/WSS-420
+		//configure it to allow them explicitly if at least one username token assertion with no password requirement is found
+		if (!rmd.isInitiator()) {
+		    Collection<UsernameToken> usernameTokens = RampartUtil.getUsernameTokens(rpd);
+		    for (UsernameToken usernameTok : usernameTokens) {
+		        if (usernameTok.isNoPassword()) {
+		            log.debug("Found UsernameToken with no password assertion in policy, configuring ws security processing to allow username tokens without password." );
+		            engine.getWssConfig().setAllowUsernameTokenNoPassword(true);
+		            break;
+		        }
+		    }
+		}
+		
+		String actorValue = secHeader.getRole();
 
 		Crypto signatureCrypto = RampartUtil.getSignatureCrypto(rpd.getRampartConfig(), 
         		msgCtx.getAxisService().getClassLoader());
@@ -160,89 +279,90 @@
 		
 		//Store username in MessageContext property
 
-        for (int j = 0; j < results.size(); j++) {
-            WSSecurityEngineResult wser = (WSSecurityEngineResult) results.get(j);
-            final Integer actInt =
-                    (Integer) wser.get(WSSecurityEngineResult.TAG_ACTION);
-            if (WSConstants.ST_UNSIGNED == actInt.intValue()) {
+        if (results != null) {
+            for (int j = 0; j < results.size(); j++) {
+                WSSecurityEngineResult wser = (WSSecurityEngineResult) results.get(j);
+                final Integer actInt =
+                        (Integer) wser.get(WSSecurityEngineResult.TAG_ACTION);
+                if (WSConstants.ST_UNSIGNED == actInt.intValue()) {
 
-                Object samlAssertion = wser.get(WSSecurityEngineResult.TAG_SAML_ASSERTION);
+                    Object samlAssertion = wser.get(WSSecurityEngineResult.TAG_SAML_ASSERTION);
 
-                SAMLAssertionHandler samlAssertionHandler
-                        = SAMLAssertionHandlerFactory.createAssertionHandler(samlAssertion);
+                    SAMLAssertionHandler samlAssertionHandler
+                            = SAMLAssertionHandlerFactory.createAssertionHandler(samlAssertion);
 
-                if (samlAssertionHandler.isBearerAssertion()) {
-                    break;
-                }
-                //Store the token
-                try {
-                    TokenStorage store = rmd.getTokenStorage();
-                    if (store.getToken(samlAssertionHandler.getAssertionId()) == null) {
-                        Token token = new Token(samlAssertionHandler.getAssertionId(),
-                                samlAssertionHandler.getAssertionElement(),
-                                samlAssertionHandler.getDateNotBefore(),
-                                samlAssertionHandler.getDateNotOnOrAfter());
-
-                        token.setSecret(samlAssertionHandler.
-                                getAssertionKeyInfoSecret(signatureCrypto, tokenCallbackHandler));
-                        store.add(token);
+                    if (samlAssertionHandler.isBearerAssertion()) {
+                        break;
                     }
-                } catch (Exception e) {
-                    throw new RampartException(
-                            "errorInAddingTokenIntoStore", e);
-                }
-            } else if (WSConstants.UT == actInt) {
+                    //Store the token
+                    try {
+                        TokenStorage store = rmd.getTokenStorage();
+                        if (store.getToken(samlAssertionHandler.getAssertionId()) == null) {
+                            Token token = new Token(samlAssertionHandler.getAssertionId(),
+                                    samlAssertionHandler.getAssertionElement(),
+                                    samlAssertionHandler.getDateNotBefore(),
+                                    samlAssertionHandler.getDateNotOnOrAfter());
 
-		        WSUsernameTokenPrincipal userNameTokenPrincipal = (WSUsernameTokenPrincipal)wser.get(WSSecurityEngineResult.TAG_PRINCIPAL);
-
-                String username = userNameTokenPrincipal.getName();
-                msgCtx.setProperty(RampartMessageData.USERNAME, username);
-                
-                if (userNameTokenPrincipal.getNonce() != null) {
-                    // Check whether this is a replay attack. To verify that we need to check whether nonce value
-                    // is a repeating one
-                    int nonceLifeTimeInSeconds = 0;
-
-                    if (rpd.getRampartConfig() != null) {
-                        
-                        String stringLifeTime = rpd.getRampartConfig().getNonceLifeTime();
-
-                        try {
-                            nonceLifeTimeInSeconds = Integer.parseInt(stringLifeTime);
-
-                        } catch (NumberFormatException e) {
-                            log.error("Invalid value for nonceLifeTime in rampart configuration file.", e);
-                            throw new RampartException(
-                                        "invalidNonceLifeTime", e);
-
+                            token.setSecret(samlAssertionHandler.
+                                    getAssertionKeyInfoSecret(signatureCrypto, tokenCallbackHandler));
+                            store.add(token);
                         }
+                    } catch (Exception e) {
+                        throw new RampartException(
+                                "errorInAddingTokenIntoStore", e);
+                    }
+                } else if (WSConstants.UT == actInt) {
+
+                    WSUsernameTokenPrincipal userNameTokenPrincipal = (WSUsernameTokenPrincipal)wser.get(WSSecurityEngineResult.TAG_PRINCIPAL);
+
+                    String username = userNameTokenPrincipal.getName();
+                    msgCtx.setProperty(RampartMessageData.USERNAME, username);
+                    
+                    if (userNameTokenPrincipal.getNonce() != null) {
+                        // Check whether this is a replay attack. To verify that we need to check whether nonce value
+                        // is a repeating one
+                        int nonceLifeTimeInSeconds = 0;
+
+                        if (rpd.getRampartConfig() != null) {
+                            
+                            String stringLifeTime = rpd.getRampartConfig().getNonceLifeTime();
+
+                            try {
+                                nonceLifeTimeInSeconds = Integer.parseInt(stringLifeTime);
+
+                            } catch (NumberFormatException e) {
+                                log.error("Invalid value for nonceLifeTime in rampart configuration file.", e);
+                                throw new RampartException(
+                                            "invalidNonceLifeTime", e);
+
+                            }
+                        }
+
+                        String serviceEndpointName = msgCtx.getAxisService().getEndpointName();
+
+                        boolean valueRepeating = serviceNonceCache.isNonceRepeatingForService(serviceEndpointName, username, userNameTokenPrincipal.getNonce());
+
+                        if (valueRepeating){
+                            throw new RampartException("repeatingNonceValue", new Object[]{ userNameTokenPrincipal.getNonce(), username} );
+                        }
+
+                        serviceNonceCache.addNonceForService(serviceEndpointName, username, userNameTokenPrincipal.getNonce(), nonceLifeTimeInSeconds);
+                    }
+                } else if (WSConstants.SIGN == actInt) {
+                    X509Certificate cert = (X509Certificate) wser.get(WSSecurityEngineResult.TAG_X509_CERTIFICATE);
+
+                    if (rpd.isAsymmetricBinding() && cert == null && rpd.getInitiatorToken() != null
+                            && !rpd.getInitiatorToken().isDerivedKeys()) {
+
+                        // If symmetric binding is used, the certificate should be null.
+                        // If certificate is not null then probably initiator and
+                        // recipient are using 2 different bindings.
+                        throw new RampartException("invalidSignatureAlgo");
                     }
 
-                    String serviceEndpointName = msgCtx.getAxisService().getEndpointName();
-
-                    boolean valueRepeating = serviceNonceCache.isNonceRepeatingForService(serviceEndpointName, username, userNameTokenPrincipal.getNonce());
-
-                    if (valueRepeating){
-                        throw new RampartException("repeatingNonceValue", new Object[]{ userNameTokenPrincipal.getNonce(), username} );
-                    }
-
-                    serviceNonceCache.addNonceForService(serviceEndpointName, username, userNameTokenPrincipal.getNonce(), nonceLifeTimeInSeconds);
+                    msgCtx.setProperty(RampartMessageData.X509_CERT, cert);
                 }
-            } else if (WSConstants.SIGN == actInt) {
-                X509Certificate cert = (X509Certificate) wser.get(WSSecurityEngineResult.TAG_X509_CERTIFICATE);
-
-                if (rpd.isAsymmetricBinding() && cert == null && rpd.getInitiatorToken() != null
-                        && !rpd.getInitiatorToken().isDerivedKeys()) {
-
-                    // If symmetric binding is used, the certificate should be null.
-                    // If certificate is not null then probably initiator and
-                    // recipient are using 2 different bindings.
-                    throw new RampartException("invalidSignatureAlgo");
-                }
-
-                msgCtx.setProperty(RampartMessageData.X509_CERT, cert);
             }
-
         }
 
 		SOAPEnvelope env = Axis2Util.getSOAPEnvelopeFromDOMDocument(rmd.getDocument(), true);
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java b/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java
index 22f738c..b195b22 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/RampartMessageData.java
@@ -26,12 +26,14 @@
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.util.PolicyUtil;
 import org.apache.axis2.wsdl.WSDLConstants;
+import org.apache.neethi.Assertion;
 import org.apache.neethi.Policy;
 import org.apache.neethi.PolicyComponent;
 import org.apache.neethi.PolicyEngine;
 import org.apache.rahas.RahasConstants;
 import org.apache.rahas.SimpleTokenStore;
 import org.apache.rahas.TokenStorage;
+import org.apache.rampart.handler.RampartUsernameTokenValidator;
 import org.apache.rampart.handler.WSSHandlerConstants;
 import org.apache.rampart.policy.RampartPolicyBuilder;
 import org.apache.rampart.policy.RampartPolicyData;
@@ -46,6 +48,7 @@
 import org.apache.ws.security.SOAPConstants;
 import org.apache.ws.security.WSConstants;
 import org.apache.ws.security.WSSConfig;
+import org.apache.ws.security.WSSecurityEngine;
 import org.apache.ws.security.WSSecurityEngineResult;
 import org.apache.ws.security.WSSecurityException;
 import org.apache.ws.security.conversation.ConversationConstants;
@@ -175,6 +178,9 @@
             // Set the WSSConfig
             this.config = WSSConfig.getNewInstance();
             
+            //Update the UsernameToken validator
+            this.config.setValidator(WSSecurityEngine.USERNAME_TOKEN, RampartUsernameTokenValidator.class);
+            
             // First obtain the axis service as we have to do a null check, there can be situations 
             // where Axis Service is null
             AxisService axisService = msgCtx.getAxisService();            
@@ -256,7 +262,7 @@
             }
             
             if(this.servicePolicy != null){
-                List it = (List)this.servicePolicy.getAlternatives().next();
+                List<Assertion> it = this.servicePolicy.getAlternatives().next();
 
                 //Process policy and build policy data
                 this.policyData = RampartPolicyBuilder.build(it);
@@ -384,7 +390,7 @@
     private void setWSSecurityVersions(String namespace) throws RampartException {
 
         if (namespace == null || namespace.equals("")) {
-            throw new RampartException("Security policy namespace cannot be null.");
+            throw new RampartException("securityPolicyNamespaceCannotBeNull");
         }
 
         if (SP11Constants.SP_NS.equals(namespace)) {
@@ -425,7 +431,7 @@
             this.servicePolicy.addAssertion(rc);
         }
 
-        List it = (List) this.servicePolicy.getAlternatives().next();
+        List<Assertion> it = this.servicePolicy.getAlternatives().next();
 
         //Process policy and build policy data
         try {
@@ -444,14 +450,6 @@
     }
 
     /**
-     * @param document The document to set.
-     * @deprecated document is derived from MessageContext passed in constructor
-     */
-    public void setDocument(Document document) {
-        this.document = document;
-    }
-
-    /**
      * @return Returns the timeToLive.
      */
     public int getTimeToLive() {
@@ -502,14 +500,6 @@
     }
 
     /**
-     * @param msgContext The msgContext to set.
-     * @deprecated MessageContext is set in constructor
-     */
-    public void setMsgContext(MessageContext msgContext) {
-        this.msgContext = msgContext;
-    }
-
-    /**
      * @return Returns the policyData.
      */
     public RampartPolicyData getPolicyData() {
@@ -517,28 +507,6 @@
     }
 
     /**
-     * @param policyData The policyData to set.
-     * @deprecated Policy data determined within constructor
-     */
-    public void setPolicyData(RampartPolicyData policyData) throws RampartException {
-        this.policyData = policyData;
-        
-        try {
-            //if client side then check whether sig conf enabled 
-            //and get hold of the stored signature values
-            if(this.isInitiator && !this.sender && policyData.isSignatureConfirmation()) {
-                OperationContext opCtx = msgContext.getOperationContext();
-                MessageContext outMsgCtx = opCtx
-                        .getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
-                msgContext.setProperty(WSHandlerConstants.SEND_SIGV, outMsgCtx
-                        .getProperty(WSHandlerConstants.SEND_SIGV));
-            }
-        } catch (AxisFault e) {
-            throw new RampartException("errorGettingSignatureValuesForSigconf", e);
-        }
-    }
-
-    /**
      * @return Returns the secHeader.
      */
     public WSSecHeader getSecHeader() {
@@ -720,14 +688,6 @@
     }
 
     /**
-     * @param wstVersion The wstVersion to set.
-     * @deprecated This is defined by the class.
-     */
-    public void setWstVersion(int wstVersion) {
-        this.wstVersion = wstVersion;
-    }
-
-    /**
      * @return Returns the secConvVersion.
      */
     public int getSecConvVersion() {
@@ -741,13 +701,6 @@
         return servicePolicy;
     }
 
-    /**
-     * @param servicePolicy The servicePolicy to set.
-     * @deprecated servicePolicy determined in constructor
-     */
-    public void setServicePolicy(Policy servicePolicy) {
-        this.servicePolicy = servicePolicy;
-    }
     
     /**
      * @return Returns the timestampId.
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/builder/AsymmetricBindingBuilder.java b/modules/rampart-core/src/main/java/org/apache/rampart/builder/AsymmetricBindingBuilder.java
index 69473be..0572cd6 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/builder/AsymmetricBindingBuilder.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/builder/AsymmetricBindingBuilder.java
@@ -27,14 +27,12 @@
 import org.apache.rampart.policy.SupportingPolicyData;
 import org.apache.rampart.policy.model.RampartConfig;
 import org.apache.rampart.util.RampartUtil;
-import org.apache.ws.secpolicy.SPConstants;
 import org.apache.ws.secpolicy.model.AlgorithmSuite;
 import org.apache.ws.secpolicy.model.SupportingToken;
 import org.apache.ws.secpolicy.model.Token;
 import org.apache.ws.secpolicy.model.X509Token;
 import org.apache.ws.security.WSConstants;
 import org.apache.ws.security.WSEncryptionPart;
-import org.apache.ws.security.WSSConfig;
 import org.apache.ws.security.WSSecurityException;
 import org.apache.ws.security.conversation.ConversationException;
 import org.apache.ws.security.handler.WSHandlerConstants;
@@ -202,12 +200,12 @@
 
             // TODO may contain deifferent types of objects as values, therefore cannot use strongly type maps
             // need to figure out a way
-            HashMap sigSuppTokMap = null;
-            HashMap endSuppTokMap = null;
-            HashMap sgndEndSuppTokMap = null;
-            HashMap sgndEncSuppTokMap = null;
-            HashMap endEncSuppTokMap = null;
-            HashMap sgndEndEncSuppTokMap = null;
+            HashMap<Token,Object> sigSuppTokMap = null;
+            HashMap<Token,Object> endSuppTokMap = null;
+            HashMap<Token,Object> sgndEndSuppTokMap = null;
+            HashMap<Token,Object> sgndEncSuppTokMap = null;
+            HashMap<Token,Object> endEncSuppTokMap = null;
+            HashMap<Token,Object> sgndEndEncSuppTokMap = null;
             
             if(this.timestampElement != null){
             	sigParts.add(RampartUtil.createEncryptionPart(WSConstants.TIMESTAMP_TOKEN_LN,
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java b/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
index 98e0fed..6dc753c 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java
@@ -17,7 +17,10 @@
 package org.apache.rampart.builder;
 
 import org.apache.axiom.om.OMElement;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.AddressingHelper;
 import org.apache.axis2.client.Options;
+import org.apache.axis2.description.AxisEndpoint;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.rahas.EncryptedKeyToken;
@@ -28,6 +31,7 @@
 import org.apache.rampart.policy.RampartPolicyData;
 import org.apache.rampart.policy.SupportingPolicyData;
 import org.apache.rampart.policy.model.RampartConfig;
+import org.apache.rampart.policy.model.KerberosConfig;
 import org.apache.rampart.util.RampartUtil;
 import org.apache.ws.secpolicy.Constants;
 import org.apache.ws.secpolicy.SPConstants;
@@ -38,6 +42,7 @@
 import org.apache.ws.secpolicy.model.Token;
 import org.apache.ws.secpolicy.model.UsernameToken;
 import org.apache.ws.secpolicy.model.X509Token;
+import org.apache.ws.security.NamePasswordCallbackHandler;
 import org.apache.ws.security.WSConstants;
 import org.apache.ws.security.WSEncryptionPart;
 import org.apache.ws.security.WSPasswordCallback;
@@ -53,6 +58,7 @@
 import org.apache.ws.security.message.WSSecSignatureConfirmation;
 import org.apache.ws.security.message.WSSecTimestamp;
 import org.apache.ws.security.message.WSSecUsernameToken;
+import org.apache.ws.security.message.token.KerberosSecurity;
 import org.apache.ws.security.message.token.SecurityTokenReference;
 import org.apache.ws.security.util.WSSecurityUtil;
 import org.w3c.dom.Document;
@@ -231,20 +237,6 @@
         }
     }
     
-    //Deprecated after 1.5 release
-    @Deprecated 
-    protected WSSecSignature getSignatureBuider(RampartMessageData rmd, 
-                                                Token token) throws RampartException {
-    	return getSignatureBuilder(rmd, token, null);
-    }
-
-    //Deprecated after 1.5 release
-    @Deprecated
-    protected WSSecSignature getSignatureBuider(RampartMessageData rmd, Token token,
-                                                String userCertAlias) throws RampartException {
-    	return getSignatureBuilder(rmd, token, userCertAlias);
-    }
-    
     protected WSSecSignature getSignatureBuilder(RampartMessageData rmd, 
                                                  Token token)throws RampartException {
         return getSignatureBuilder(rmd, token, null);
@@ -351,20 +343,18 @@
      * @param suppTokens
      * @throws RampartException
      */
-    protected HashMap handleSupportingTokens(RampartMessageData rmd, SupportingToken suppTokens)
+    protected HashMap<Token,Object> handleSupportingTokens(RampartMessageData rmd, SupportingToken suppTokens)
             throws RampartException {
         
         //Create the list to hold the tokens
         // TODO putting different types of objects. Need to figure out a way to add single types of objects
-        HashMap endSuppTokMap = new HashMap();
+        HashMap<Token,Object> endSuppTokMap = new HashMap<Token,Object>();
         
         if(suppTokens != null && suppTokens.getTokens() != null &&
                 suppTokens.getTokens().size() > 0) {
             log.debug("Processing supporting tokens");
 
-            ArrayList tokens = suppTokens.getTokens();
-            for (Object objectToken : tokens) {
-                Token token = (Token) objectToken;
+            for (Token token : suppTokens.getTokens()) {
                 org.apache.rahas.Token endSuppTok = null;
                 if (token instanceof IssuedToken && rmd.isInitiator()) {
                     String id = RampartUtil.getIssuedToken(rmd, (IssuedToken) token);
@@ -424,8 +414,10 @@
                     //Add the UT
                     Element elem = utBuilder.getUsernameTokenElement();
                     elem = RampartUtil.insertSiblingAfter(rmd, this.getInsertionLocation(), elem);
-
-                    encryptedTokensIdList.add(utBuilder.getId());
+                    
+                    if (suppTokens.isEncryptedToken()) {
+                    	encryptedTokensIdList.add(utBuilder.getId());
+                    }
 
                     //Move the insert location to the next element
                     this.setInsertionLocation(elem);
@@ -488,17 +480,13 @@
     }
     
     
-    protected List<byte[]> doEndorsedSignatures(RampartMessageData rmd, HashMap tokenMap) throws RampartException {
-        
-        Set tokenSet = tokenMap.keySet();
+    protected List<byte[]> doEndorsedSignatures(RampartMessageData rmd, HashMap<Token,Object> tokenMap) throws RampartException {
         
         List<byte[]> sigValues = new ArrayList<byte[]>();
 
-        for (Object aTokenSet : tokenSet) {
-
-            Token token = (Token) aTokenSet;
-
-            Object tempTok = tokenMap.get(token);
+        for (Map.Entry<Token,Object> entry : tokenMap.entrySet()) {
+            Token token = entry.getKey();
+            Object tempTok = entry.getValue();
 
             // Migrating to a list
             List<WSEncryptionPart> sigParts = new ArrayList<WSEncryptionPart>();
@@ -864,5 +852,95 @@
         }
     }
 
-    
+    protected KerberosSecurity addKerberosToken(RampartMessageData rmd, Token token)
+            throws RampartException {
+        RampartPolicyData rpd = rmd.getPolicyData();
+        KerberosConfig krbConfig = rpd.getRampartConfig().getKerberosConfig();
+
+        if (krbConfig == null) {
+            throw new RampartException("noKerberosConfigDefined");
+        }
+
+        log.debug("Token inclusion: " + token.getInclusion());
+
+        String user = krbConfig.getPrincipalName();
+        if (user == null) {
+            user = rpd.getRampartConfig().getUser();
+        }
+        
+        String password = krbConfig.getPrincipalPassword();
+        if (password == null) {
+            CallbackHandler handler = RampartUtil.getPasswordCB(rmd);
+
+            if (handler != null) {
+                if (user == null) {
+                    log.debug("Password callback is configured but no user value is specified in the configuration");
+                    throw new RampartException("userMissing");
+                }
+                
+                //TODO We do not have a separate usage type for Kerberos token, let's use custom token
+                WSPasswordCallback[] cb = { new WSPasswordCallback(user, WSPasswordCallback.CUSTOM_TOKEN) };
+                try {
+                    handler.handle(cb);
+                    if (cb[0].getPassword() != null && !"".equals(cb[0].getPassword())) {
+                        password = cb[0].getPassword();
+                    }
+                } catch (IOException e) {
+                    throw new RampartException("errorInGettingPasswordForUser", new String[] { user }, e);
+                } catch (UnsupportedCallbackException e) {
+                    throw new RampartException("errorInGettingPasswordForUser", new String[] { user }, e);
+                }
+            }
+        }
+        
+        String principalName = null;
+        boolean isUsernameServiceNameForm = KerberosConfig.USERNAME_NAME_FORM.equals(krbConfig.getServicePrincipalNameForm());
+        
+        AxisEndpoint endpoint = rmd.getMsgContext().findEndpoint();
+        if (endpoint != null) {
+            if (log.isDebugEnabled()) {
+                log.debug("Identified endpoint: " + endpoint.getName() + ". Looking for SPN identity claim.");
+            }
+            
+            OMElement addressingIdentity = AddressingHelper.getAddressingIdentityParameterValue(endpoint);
+            if (addressingIdentity != null) {
+                OMElement spnClaim = addressingIdentity.getFirstChildWithName(AddressingConstants.QNAME_IDENTITY_SPN);
+                if (spnClaim != null) {
+                    principalName = spnClaim.getText();
+                    isUsernameServiceNameForm = false;
+                    if (log.isDebugEnabled()) {
+                        log.debug("Found SPN identity claim: " + principalName);
+                    }
+                }
+                else {
+                    OMElement upnClaim = addressingIdentity.getFirstChildWithName(AddressingConstants.QNAME_IDENTITY_UPN);
+                    if (upnClaim != null) {
+                        principalName = upnClaim.getText();
+                        isUsernameServiceNameForm = true;
+                        if (log.isDebugEnabled()) {
+                            log.debug("Found UPN identity claim: " + principalName);
+                        }
+                    } else if (log.isDebugEnabled()) {
+                        log.debug(String.format("Neither SPN nor UPN identity claim found in %s EPR element for endpoint %s.", addressingIdentity.getQName().toString(), endpoint.getName()));
+                    }
+                }
+            }
+        }
+        
+        if (principalName == null) {
+        	principalName = krbConfig.getServicePrincipalName();
+        }
+        
+        try {
+            KerberosSecurity bst = new KerberosSecurity(rmd.getDocument());
+            
+            NamePasswordCallbackHandler cb = new NamePasswordCallbackHandler(user, password);
+            bst.retrieveServiceTicket(krbConfig.getJaasContext(), cb, principalName, isUsernameServiceNameForm,
+                krbConfig.isRequstCredentialDelegation(), krbConfig.getDelegationCredential());
+            
+            return bst;
+        } catch (WSSecurityException e) {
+            throw new RampartException("errorInBuildingKereberosToken", e);
+        }
+    }
 }
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/builder/TransportBindingBuilder.java b/modules/rampart-core/src/main/java/org/apache/rampart/builder/TransportBindingBuilder.java
index 2bee572..de05429 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/builder/TransportBindingBuilder.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/builder/TransportBindingBuilder.java
@@ -32,6 +32,7 @@
 import org.apache.ws.secpolicy.model.AlgorithmSuite;
 import org.apache.ws.secpolicy.model.Header;
 import org.apache.ws.secpolicy.model.IssuedToken;
+import org.apache.ws.secpolicy.model.KerberosToken;
 import org.apache.ws.secpolicy.model.SecureConversationToken;
 import org.apache.ws.secpolicy.model.SignedEncryptedParts;
 import org.apache.ws.secpolicy.model.SupportingToken;
@@ -44,10 +45,16 @@
 import org.apache.ws.security.conversation.ConversationException;
 import org.apache.ws.security.handler.WSHandlerConstants;
 import org.apache.ws.security.message.*;
+import org.apache.ws.security.message.token.KerberosSecurity;
+import org.apache.ws.security.util.Base64;
+import org.apache.ws.security.util.WSSecurityUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import javax.crypto.SecretKey;
 import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.SignatureMethod;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -138,6 +145,8 @@
                     } else if (token instanceof SecureConversationToken) {
                         handleSecureConversationTokens(rmd, (SecureConversationToken) token);
                         signatureValues.add(doSecureConversationSignature(rmd, token, signdParts));
+                    } else if (token instanceof KerberosToken) {
+                        signatureValues.add(doKerberosTokenSignature(rmd, (KerberosToken)token, signdParts));
                     }
                 }
             }
@@ -292,6 +301,77 @@
         
     }
 
+    /**
+     * Generates a signature over the timestamp element (if any) using the Kerberos client/server session key.
+     * 
+     * @param rmd
+     * @param token
+     * @param signdParts 
+     */
+    private byte[] doKerberosTokenSignature(RampartMessageData rmd, KerberosToken token, SignedEncryptedParts signdParts) throws RampartException {
+        
+        Document doc = rmd.getDocument();
+        
+        List<WSEncryptionPart> sigParts = new ArrayList<WSEncryptionPart>();
+        
+        //TODO Shall we always include a timestamp?
+        if (this.timestampElement != null) {
+            sigParts.add(new WSEncryptionPart(rmd.getTimestampId()));
+        }
+        
+        if (signdParts != null) {
+            if (signdParts.isBody()) {
+                SOAPEnvelope env = rmd.getMsgContext().getEnvelope();
+                sigParts.add(new WSEncryptionPart(RampartUtil.addWsuIdToElement(env.getBody())));
+            }
+    
+            ArrayList headers = signdParts.getHeaders();
+            for (Iterator iterator = headers.iterator(); iterator.hasNext();) {
+                Header header = (Header) iterator.next();
+                WSEncryptionPart wep = new WSEncryptionPart(header.getName(), 
+                        header.getNamespace(),
+                        "Content");
+                sigParts.add(wep);
+            }
+        }
+
+        try {
+            KerberosSecurity kerberosBst = addKerberosToken(rmd, token);
+            kerberosBst.setID("Id-" + kerberosBst.hashCode());
+            
+            WSSecSignature sign = new WSSecSignature();
+            sign.setSignatureAlgorithm(SignatureMethod.HMAC_SHA1);
+            
+            if (token.isRequiresKeyIdentifierReference()) {
+                sign.setKeyIdentifierType(WSConstants.CUSTOM_KEY_IDENTIFIER);
+               
+                byte[] digestBytes = WSSecurityUtil.generateDigest(kerberosBst.getToken());
+                sign.setCustomTokenId(Base64.encode(digestBytes));
+                sign.setCustomTokenValueType(WSConstants.WSS_KRB_KI_VALUE_TYPE);
+            } else {
+                sign.setKeyIdentifierType(WSConstants.CUSTOM_SYMM_SIGNING);
+                
+                sign.setCustomTokenId(kerberosBst.getID());
+                sign.setCustomTokenValueType(kerberosBst.getValueType());
+            }
+            
+            SecretKey secretKey = kerberosBst.getSecretKey();
+            sign.setSecretKey(secretKey.getEncoded());
+            
+            sign.prepare(doc, null, rmd.getSecHeader());
+            
+            WSSecurityUtil.prependChildElement(rmd.getSecHeader().getSecurityHeader(), kerberosBst.getElement());
+            
+            List<Reference> referenceList = sign.addReferencesToSign(sigParts, rmd.getSecHeader());
+
+            sign.computeSignature(referenceList, false, null);
+
+            return sign.getSignatureValue();
+        } catch (WSSecurityException e) {
+            throw new RampartException("errorInSignatureWithKerberosToken", e);
+        }
+    }
+    
     private void appendToHeader(WSSecHeader secHeader, Element appendingChild) {
 
         // TODO this is bit dubious, before migration code was like "dkSig.appendSigToHeader(rmd.getSecHeader())"
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/handler/PostDispatchVerificationHandler.java b/modules/rampart-core/src/main/java/org/apache/rampart/handler/PostDispatchVerificationHandler.java
index 781cf37..6480b60 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/handler/PostDispatchVerificationHandler.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/handler/PostDispatchVerificationHandler.java
@@ -30,7 +30,6 @@
 import org.apache.neethi.PolicyEngine;
 import org.apache.rampart.RampartMessageData;
 import org.apache.rampart.policy.RampartPolicyData;
-import org.apache.rampart.util.HandlerParameterDecoder;
 import org.apache.rampart.util.RampartUtil;
 import org.apache.ws.secpolicy.model.Binding;
 import org.apache.ws.secpolicy.model.SupportingToken;
@@ -122,13 +121,13 @@
             return InvocationResponse.CONTINUE;
         }
         
-        Iterator alternatives = policy.getAlternatives();
+        Iterator<List<Assertion>> alternatives = policy.getAlternatives();
         
         boolean securityPolicyPresent = false;
         if(alternatives.hasNext()) {
-            List assertions = (List)alternatives.next();
-            for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-                Assertion assertion = (Assertion) iterator.next();
+            List<Assertion> assertions = alternatives.next();
+            for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+                Assertion assertion = iterator.next();
                 //Check for any *Binding assertion
                 if (assertion instanceof Binding) {
                     securityPolicyPresent = true;
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartUsernameTokenValidator.java b/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartUsernameTokenValidator.java
new file mode 100644
index 0000000..b8990b7
--- /dev/null
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/handler/RampartUsernameTokenValidator.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2004,2013 The Apache Software Foundation.
+ *
+ * Licensed 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.rampart.handler;
+
+import java.io.IOException;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.rampart.RampartConstants;
+import org.apache.ws.security.WSPasswordCallback;
+import org.apache.ws.security.WSSecurityException;
+import org.apache.ws.security.handler.RequestData;
+import org.apache.ws.security.message.token.UsernameToken;
+import org.apache.ws.security.validate.UsernameTokenValidator;
+
+/**
+ * Overriding the default UsernameTokenValidator provided by WSS4J because the
+ * default implementation expects the user to provide the plain text password to
+ * WSS4J for validation.
+ * 
+ */
+public class RampartUsernameTokenValidator extends UsernameTokenValidator {
+
+	private static Log mlog = LogFactory.getLog(RampartConstants.MESSAGE_LOG);
+
+	@Override
+	protected void verifyPlaintextPassword(UsernameToken usernameToken,
+			RequestData data) throws WSSecurityException {
+
+		String user = usernameToken.getName();
+		String password = usernameToken.getPassword();
+		String pwType = usernameToken.getPasswordType();
+
+		// Provide the password to the user for validation
+		WSPasswordCallback pwCb = new WSPasswordCallback(user, password,
+				pwType, WSPasswordCallback.USERNAME_TOKEN, data);
+		try {
+			data.getCallbackHandler().handle(new Callback[] { pwCb });
+		} catch (IOException e) {
+			if (mlog.isDebugEnabled()) {
+				mlog.debug(e);
+			}
+			throw new WSSecurityException(
+					WSSecurityException.FAILED_AUTHENTICATION);
+		} catch (UnsupportedCallbackException e) {
+			if (mlog.isDebugEnabled()) {
+				mlog.debug(e);
+			}
+			throw new WSSecurityException(
+					WSSecurityException.FAILED_AUTHENTICATION);
+		}
+
+	}
+}
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/handler/WSDoAllHandler.java b/modules/rampart-core/src/main/java/org/apache/rampart/handler/WSDoAllHandler.java
deleted file mode 100644
index 1c80f50..0000000
--- a/modules/rampart-core/src/main/java/org/apache/rampart/handler/WSDoAllHandler.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.handler;
-
-import org.apache.axis2.AxisFault;
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.description.HandlerDescription;
-import org.apache.axis2.description.Parameter;
-import org.apache.axis2.engine.Handler;
-import org.apache.rampart.util.Axis2Util;
-import org.apache.ws.security.handler.WSHandler;
-
-/**
- * Class WSDoAllHandler
- */
-public abstract class WSDoAllHandler extends WSHandler implements Handler {
-
-    /**
-     * Field EMPTY_HANDLER_METADATA
-     */
-    private static HandlerDescription EMPTY_HANDLER_METADATA =
-            new HandlerDescription("default Handler");
-
-    private final static String WSS_PASSWORD = "password";
-
-    private final static String WSS_USERNAME = "username";
-
-    /**
-     * Field handlerDesc
-     */
-    protected HandlerDescription handlerDesc;
-
-    /**
-     * In Axis2, the user cannot set inflow and outflow parameters.
-     * Therefore, we need to map the Axis2 specific inflow and outflow
-     * parameters to WSS4J params,
-     * <p/>
-     * Knowledge of inhandler and out handler is used to get the mapped value.
-     */
-    protected boolean inHandler;
-
-    /**
-     * Constructor AbstractHandler.
-     */
-    public WSDoAllHandler() {
-        handlerDesc = EMPTY_HANDLER_METADATA;
-    }
-
-    public abstract void processMessage(MessageContext msgContext) throws AxisFault;
-
-    /* (non-Javadoc)
-    * @see org.apache.axis2.engine.Handler#invoke(org.apache.axis2.context.MessageContext)
-    */
-    public InvocationResponse invoke(MessageContext msgContext) throws AxisFault {
-        //If the security module is not engaged for this service
-        //do not do any processing
-        if (msgContext.isEngaged(WSSHandlerConstants.SECURITY_MODULE_NAME)) {
-            this.processMessage(msgContext);
-        }
-        return InvocationResponse.CONTINUE;        
-    }
-
-    public void flowComplete(MessageContext msgContext)
-    {
-    }
-    
-    /**
-     * Method getName.
-     *
-     * @return Returns name.
-     */
-    public String getName() {
-        return handlerDesc.getName();
-    }
-
-    /**
-     * Method cleanup.
-     */
-    public void cleanup() {
-    }
-
-    /**
-     * Method getParameter.
-     *
-     * @param name
-     * @return Returns parameter.
-     */
-    public Parameter getParameter(String name) {
-        return handlerDesc.getParameter(name);
-    }
-
-    /**
-     * Method init.
-     *
-     * @param handlerdesc
-     */
-    public void init(HandlerDescription handlerdesc) {
-        this.handlerDesc = handlerdesc;
-    }
-
-    /**
-     * Gets the handler description.
-     *
-     * @return Returns handler description.
-     */
-    public HandlerDescription getHandlerDesc() {
-        return handlerDesc;
-    }
-
-    /* (non-Javadoc)
-     * @see java.lang.Object#toString()
-     */
-    public String toString() {
-        String name = this.getName();
-        return (name != null) ? name : "";
-    }
-
-
-    public Object getProperty(Object msgContext, String axisKey) {
-
-        int repetition = getCurrentRepetition(msgContext);
-
-        String key = Axis2Util.getKey(axisKey, inHandler, repetition);
-        Object property = ((MessageContext) msgContext).getProperty(key);
-        if (property == null) {
-            //Try the description hierarchy
-            Parameter parameter = ((MessageContext) msgContext).getParameter(key);
-            if (parameter != null) {
-                property = parameter.getValue();
-            }
-        }
-        return property;
-    }
-
-    /**
-     * Returns the repetition number from the message context
-     *
-     * @param msgContext
-     * @return Returns int.
-     */
-    protected int getCurrentRepetition(Object msgContext) {
-        //get the repetition from the message context
-        int repetition = 0;
-        if (!inHandler) {//We only need to repeat the out handler
-            Integer count = (Integer) ((MessageContext) msgContext).getProperty(WSSHandlerConstants.CURRENT_REPETITON);
-            if (count != null) { //When we are repeating the handler
-                repetition = count.intValue();
-            }
-        }
-        return repetition;
-    }
-
-    public String getPassword(Object msgContext) {
-        return (String) ((MessageContext) msgContext).getProperty(WSS_PASSWORD);
-    }
-
-    public void setPassword(Object msgContext, String password) {
-        ((MessageContext) msgContext).setProperty(WSS_PASSWORD, password);
-    }
-
-    public String getUsername(Object msgContext) {
-        return (String) ((MessageContext) msgContext).getProperty(WSS_USERNAME);
-    }
-
-    public void setUsername(Object msgContext, String username) {
-        ((MessageContext) msgContext).setProperty(WSS_USERNAME, username);
-    }
-
-    /**
-     * Gets option. Extracts the configuration values from the service.xml
-     * and/or axis2.xml. Values set in the service.xml takes priority over
-     * values of the axis2.xml
-     */
-    public Object getOption(String axisKey) {
-        Parameter parameter = this.handlerDesc.getParameter(axisKey);
-        return (parameter == null) ? null : parameter.getValue();
-    }
-
-    public void setProperty(Object msgContext, String key, Object value) {
-        ((MessageContext) msgContext).setProperty(key, value);
-    }
-
-    /**
-     * Overrides the class loader used to load the PW callback class.
-     *
-     * @param msgCtx MessageContext
-     * @return Returns class loader.
-     */
-    public java.lang.ClassLoader getClassLoader(Object msgCtx) {
-        try {
-            return ((MessageContext) msgCtx).getAxisService().getClassLoader();
-        } catch (Throwable t) {
-            return super.getClassLoader(msgCtx);
-        }
-    }
-}
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/handler/WSDoAllReceiver.java b/modules/rampart-core/src/main/java/org/apache/rampart/handler/WSDoAllReceiver.java
deleted file mode 100644
index 86280a4..0000000
--- a/modules/rampart-core/src/main/java/org/apache/rampart/handler/WSDoAllReceiver.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.handler;
-
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPHeader;
-import org.apache.axiom.soap.SOAPHeaderBlock;
-import org.apache.axis2.AxisFault;
-import org.apache.axis2.Constants;
-import org.apache.axis2.addressing.AddressingConstants;
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.rampart.RampartConstants;
-import org.apache.rampart.util.Axis2Util;
-import org.apache.rampart.util.HandlerParameterDecoder;
-import org.apache.rampart.util.RampartUtil;
-import org.apache.ws.security.*;
-import org.apache.ws.security.handler.RequestData;
-import org.apache.ws.security.handler.WSHandlerConstants;
-import org.apache.ws.security.handler.WSHandlerResult;
-import org.apache.ws.security.message.token.Timestamp;
-import org.apache.ws.security.util.WSSecurityUtil;
-import org.w3c.dom.Document;
-
-import javax.security.auth.callback.CallbackHandler;
-import javax.xml.namespace.QName;
-
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * @deprecated
- */
-public class WSDoAllReceiver extends WSDoAllHandler {
-
-    private static final Log log = LogFactory.getLog(WSDoAllReceiver.class);
-    private static Log mlog = LogFactory.getLog(RampartConstants.MESSAGE_LOG);
-
-    public WSDoAllReceiver() {
-        super();
-        inHandler = true;
-    }
-
-    public void processMessage(MessageContext msgContext) throws AxisFault {
-    	
-    	if(mlog.isDebugEnabled()){
-        	mlog.debug("*********************** WSDoAllReceiver recieved \n"+msgContext.getEnvelope());
-        }
-    	
-        boolean doDebug = log.isDebugEnabled();
-
-        if (doDebug) {
-            log.debug("WSDoAllReceiver: enter invoke() ");
-        }
-
-        String useDoomValue = (String) getProperty(msgContext,
-                WSSHandlerConstants.USE_DOOM);
-        boolean useDoom = useDoomValue != null
-                && Constants.VALUE_TRUE.equalsIgnoreCase(useDoomValue);
-
-        RequestData reqData = new RequestData();
-        try {
-
-            this.processBasic(msgContext, useDoom, reqData);
-        } catch (AxisFault axisFault) {
-            setAddressingInformationOnFault(msgContext);
-            throw axisFault;
-        } catch (Exception e) {
-            setAddressingInformationOnFault(msgContext);
-            throw new AxisFault(e.getMessage(), e);
-        } finally {
-
-            if (reqData != null) {
-                reqData.clear();
-                reqData = null;
-            }
-
-            if (doDebug) {
-                log.debug("WSDoAllReceiver: exit invoke()");
-            }
-        }
-
-    }
-
-    private void processBasic(MessageContext msgContext, boolean useDoom, RequestData reqData)
-            throws Exception {
-
-        // populate the properties
-        try {
-            HandlerParameterDecoder.processParameters(msgContext, true);
-        } catch (Exception e) {
-            throw new AxisFault("Configuration error", e);
-        }
-
-        // Retrieves signature crypto and set it to decryption crypto
-        RampartUtil.setDecryptionCrypto(msgContext);
-
-        reqData.setMsgContext(msgContext);
-
-        if (((getOption(WSSHandlerConstants.INFLOW_SECURITY)) == null) &&
-            ((getProperty(msgContext, WSSHandlerConstants.INFLOW_SECURITY)) == null)) {
-            
-            if (msgContext.isServerSide() && 
-                ((getOption(WSSHandlerConstants.INFLOW_SECURITY_SERVER)) == null) &&
-                ((getProperty(msgContext, WSSHandlerConstants.INFLOW_SECURITY_SERVER)) == null)) {
-            
-                return;
-            } else if (((getOption(WSSHandlerConstants.INFLOW_SECURITY_CLIENT)) == null) &&
-                    ((getProperty(msgContext, WSSHandlerConstants.INFLOW_SECURITY_CLIENT)) == null))  {
-                
-                return;
-            }
-        }
-        
-        List<java.lang.Integer> actions = new ArrayList<Integer>();
-        String action = null;
-        if ((action = (String) getOption(WSSHandlerConstants.ACTION_ITEMS)) == null) {
-            action = (String) getProperty(msgContext,
-                    WSSHandlerConstants.ACTION_ITEMS);
-        }
-        if (action == null) {
-            throw new AxisFault("WSDoAllReceiver: No action items defined");
-        }
-        int doAction = WSSecurityUtil.decodeAction(action, actions);
-
-        if (doAction == WSConstants.NO_SECURITY) {
-            return;
-        }
-
-        String actor = (String) getOption(WSHandlerConstants.ACTOR);
-
-        Document doc = null;
-
-        try {
-            doc = Axis2Util.getDocumentFromSOAPEnvelope(msgContext
-                    .getEnvelope(), useDoom);
-        } catch (WSSecurityException wssEx) {
-            throw new AxisFault(
-                    "WSDoAllReceiver: Error in converting to Document", wssEx);
-        }
-
-        // Do not process faults
-        SOAPConstants soapConstants = WSSecurityUtil.getSOAPConstants(doc
-                .getDocumentElement());
-        if (WSSecurityUtil.findElement(doc.getDocumentElement(), "Fault",
-                soapConstants.getEnvelopeURI()) != null) {
-            return;
-        }
-
-        /*
-         * To check a UsernameToken or to decrypt an encrypted message we need a
-         * password.
-         */
-        CallbackHandler cbHandler = null;
-        if ((doAction & (WSConstants.ENCR | WSConstants.UT)) != 0) {
-            cbHandler = getPasswordCallbackHandler(reqData);
-        }
-
-        // Copy the WSHandlerConstants.SEND_SIGV over to the new message
-        // context - if it exists, if signatureConfirmation in the response msg
-        String sigConfEnabled = null;
-        if ((sigConfEnabled = (String) getOption(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION)) == null) {
-            sigConfEnabled = (String) getProperty(msgContext,
-                    WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION);
-        }
-
-        // To handle sign confirmation of a sync response
-        // TODO Async response
-        if (!msgContext.isServerSide()
-                && !"false".equalsIgnoreCase(sigConfEnabled)) {
-            OperationContext opCtx = msgContext.getOperationContext();
-            MessageContext outMsgCtx = opCtx
-                    .getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
-            if (outMsgCtx != null) {
-                msgContext.setProperty(WSHandlerConstants.SEND_SIGV, outMsgCtx
-                        .getProperty(WSHandlerConstants.SEND_SIGV));
-            } else {
-                throw new WSSecurityException(
-                        "Cannot obtain request message context");
-            }
-        }
-
-        /*
-         * Get and check the Signature specific parameters first because they
-         * may be used for encryption too.
-         */
-
-        doReceiverAction(doAction, reqData);
-
-        List<WSSecurityEngineResult> wsResult = null;
-        try {
-            wsResult = secEngine.processSecurityHeader(doc, actor, cbHandler,
-                    reqData.getSigCrypto(), reqData.getDecCrypto());
-        } catch (WSSecurityException ex) {
-            throw new AxisFault("WSDoAllReceiver: security processing failed",
-                    ex);
-        }
-        if (wsResult == null) { // no security header found
-            if (doAction == WSConstants.NO_SECURITY) {
-                return;
-            } else {
-                throw new AxisFault(
-                        "WSDoAllReceiver: Incoming message does not contain required Security header");
-            }
-        }
-
-        if (reqData.getWssConfig().isEnableSignatureConfirmation()
-                && !msgContext.isServerSide()) {
-            checkSignatureConfirmation(reqData, wsResult);
-        }
-
-        /**
-         * Set the new SOAPEnvelope
-         */
-
-        msgContext.setEnvelope(Axis2Util.getSOAPEnvelopeFromDOMDocument(doc, useDoom));
-
-        /*
-         * After setting the new current message, probably modified because of
-         * decryption, we need to locate the security header. That is, we force
-         * Axis (with getSOAPEnvelope()) to parse the string, build the new
-         * header. Then we examine, look up the security header and set the
-         * header as processed.
-         * 
-         * Please note: find all header elements that contain the same actor
-         * that was given to processSecurityHeader(). Then check if there is a
-         * security header with this actor.
-         */
-        SOAPHeader header = null;
-        try {
-            header = msgContext.getEnvelope().getHeader();
-        } catch (OMException ex) {
-            throw new AxisFault(
-                    "WSDoAllReceiver: cannot get SOAP header after security processing",
-                    ex);
-        }
-
-        Iterator headers = header.examineHeaderBlocks(actor);
-
-        SOAPHeaderBlock headerBlock = null;
-
-        while (headers.hasNext()) { // Find the wsse header
-            SOAPHeaderBlock hb = (SOAPHeaderBlock) headers.next();
-            if (hb.getLocalName().equals(WSConstants.WSSE_LN)
-                    && hb.getNamespace().getNamespaceURI().equals(WSConstants.WSSE_NS)) {
-                headerBlock = hb;
-                break;
-            }
-        }
-
-        if(headerBlock != null) {
-            headerBlock.setProcessed();
-        }
-
-        /*
-         * Now we can check the certificate used to sign the message. In the
-         * following implementation the certificate is only trusted if either it
-         * itself or the certificate of the issuer is installed in the keystore.
-         * 
-         * Note: the method verifyTrust(X509Certificate) allows custom
-         * implementations with other validation algorithms for subclasses.
-         */
-
-        // Extract the signature action result from the action list
-        WSSecurityEngineResult actionResult = WSSecurityUtil.fetchActionResult(
-                wsResult, WSConstants.SIGN);
-
-        if (actionResult != null) {
-            X509Certificate returnCert = (X509Certificate)actionResult.get(WSSecurityEngineResult.TAG_X509_CERTIFICATE);
-
-            if (returnCert != null) {
-                CertificateValidator certificateValidator = new CertificateValidator();
-
-                if (!certificateValidator.validateCertificate(returnCert, reqData.getSigCrypto())) {
-                    throw new AxisFault(
-                            "WSDoAllReceiver: The certificate used for the signature is not trusted");
-                }
-            }
-        }
-
-        /*
-         * Perform further checks on the timestamp that was transmitted in the
-         * header. In the following implementation the timestamp is valid if it
-         * was created after (now-ttl), where ttl is set on server side, not by
-         * the client.
-         * 
-         * Note: the method verifyTimestamp(Timestamp) allows custom
-         * implementations with other validation algorithms for subclasses.
-         */
-
-        // Extract the timestamp action result from the action list
-        actionResult = WSSecurityUtil.fetchActionResult(wsResult,
-                WSConstants.TS);
-
-        if (actionResult != null) {
-            Timestamp timestamp = (Timestamp)actionResult.get(WSSecurityEngineResult.TAG_TIMESTAMP);
-
-            if (timestamp != null) {
-                String ttl = null;
-                if ((ttl = (String) getOption(WSHandlerConstants.TTL_TIMESTAMP)) == null) {
-                    ttl = (String) getProperty(msgContext,
-                            WSHandlerConstants.TTL_TIMESTAMP);
-                }
-                int ttl_i = 0;
-                if (ttl != null) {
-                    try {
-                        ttl_i = Integer.parseInt(ttl);
-                    } catch (NumberFormatException e) {
-                        ttl_i = reqData.getTimeToLive();
-                    }
-                }
-                if (ttl_i <= 0) {
-                    ttl_i = reqData.getTimeToLive();
-                }
-
-                // TODO configure future time to live
-                if (!timestamp.verifyCreated(ttl_i, 60)) {
-                    throw new AxisFault(
-                            "WSDoAllReceiver: The timestamp could not be validated");
-                }
-            }
-        }
-
-        /*
-         * now check the security actions: do they match, in right order?
-         */
-        if (!checkReceiverResults(wsResult, actions)) {
-            throw new AxisFault(
-                    "WSDoAllReceiver: security processing failed (actions mismatch)");
-
-        }
-        /*
-         * All ok up to this point. Now construct and setup the security result
-         * structure. The service may fetch this and check it. Also the
-         * DoAllSender will use this in certain situations such as:
-         * USE_REQ_SIG_CERT to encrypt
-         */
-        List<WSHandlerResult> results = null;
-        if ((results = (List<WSHandlerResult>) getProperty(msgContext,
-                WSHandlerConstants.RECV_RESULTS)) == null) {
-            results = new ArrayList<WSHandlerResult>();
-            msgContext.setProperty(WSHandlerConstants.RECV_RESULTS, results);
-        }
-        WSHandlerResult rResult = new WSHandlerResult(actor, wsResult);
-        results.add(0, rResult);
-    }
-
-    private void setAddressingInformationOnFault(MessageContext msgContext) {
-        SOAPEnvelope env = msgContext.getEnvelope();
-        SOAPHeader header = env.getHeader();
-
-        if (header != null) {
-            OMElement msgIdElem = header.getFirstChildWithName(new QName(
-                    AddressingConstants.Final.WSA_NAMESPACE,
-                    AddressingConstants.WSA_MESSAGE_ID));
-            if (msgIdElem == null) {
-                msgIdElem = header.getFirstChildWithName(new QName(
-                        AddressingConstants.Submission.WSA_NAMESPACE,
-                        AddressingConstants.WSA_MESSAGE_ID));
-            }
-            if (msgIdElem != null && msgIdElem.getText() != null) {
-                msgContext.getOptions().setMessageId(msgIdElem.getText());
-            }
-        }
-    }
-
-}
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/handler/WSDoAllSender.java b/modules/rampart-core/src/main/java/org/apache/rampart/handler/WSDoAllSender.java
deleted file mode 100644
index 28e57d5..0000000
--- a/modules/rampart-core/src/main/java/org/apache/rampart/handler/WSDoAllSender.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.handler;
-
-import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axis2.AxisFault;
-import org.apache.axis2.Constants;
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.rampart.RampartConstants;
-import org.apache.rampart.util.Axis2Util;
-import org.apache.rampart.util.HandlerParameterDecoder;
-import org.apache.rampart.util.MessageOptimizer;
-import org.apache.rampart.util.RampartUtil;
-import org.apache.ws.security.WSConstants;
-import org.apache.ws.security.WSSecurityException;
-import org.apache.ws.security.handler.RequestData;
-import org.apache.ws.security.handler.WSHandlerConstants;
-import org.apache.ws.security.util.WSSecurityUtil;
-import org.w3c.dom.Document;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @deprecated
- */
-public class WSDoAllSender extends WSDoAllHandler {
-    
-    private static final Log log = LogFactory.getLog(WSDoAllSender.class);
-    private static Log mlog = LogFactory.getLog(RampartConstants.MESSAGE_LOG);
-
-    // TODO can we get rid of this ?
-    private static final String SND_SECURITY = "SND_SECURITY";
-    
-    
-    public WSDoAllSender() {
-        super();
-        inHandler = false;
-    }
-
-
-      
-    public void processMessage(MessageContext msgContext) throws AxisFault {
-        
-              String useDoomValue = (String) getProperty(msgContext,
-                WSSHandlerConstants.USE_DOOM);
-        boolean useDoom = useDoomValue != null
-                && Constants.VALUE_TRUE.equalsIgnoreCase(useDoomValue);
-
-        RequestData reqData = new RequestData();
-
-        try {
-            //If the msgs are msgs to an STS then use basic WS-Sec
-            processBasic(msgContext, useDoom, reqData);
-            
-        } catch (Exception e) {
-            throw new AxisFault(e.getMessage(), e);
-        }
-        finally {
-            if(reqData != null) {
-                reqData.clear();
-                reqData = null;
-            }
-        }  
-        
-        if(mlog.isDebugEnabled()){
-        	mlog.debug("*********************** WSDoAllSender sent out \n"+msgContext.getEnvelope());
-        }
-    }
-    
-    /**
-     * This will carryout the WS-Security related operations.
-     * 
-     * @param msgContext
-     * @param useDoom
-     * @throws WSSecurityException
-     * @throws AxisFault
-     */
-    private void processBasic(MessageContext msgContext, boolean useDoom,
-            RequestData reqData) throws WSSecurityException, AxisFault {
-        boolean doDebug = log.isDebugEnabled();
-        
-        try {
-            HandlerParameterDecoder.processParameters(msgContext,false);
-        } catch (Exception e) {
-            throw new AxisFault("Configureation error", e);
-        }
-
-        // If encryption crypto is not already set use signatureCrypto as encryption crypto.
-        RampartUtil.setEncryptionCrypto(msgContext);
-        
-        if (doDebug) {
-            log.debug("WSDoAllSender: enter invoke()");
-        }
-        
-        /*
-         * Copy the RECV_RESULTS over to the current message context
-         * - IF available 
-         */
-        OperationContext opCtx = msgContext.getOperationContext();
-        MessageContext inMsgCtx;
-        if(opCtx != null && 
-                (inMsgCtx = opCtx.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE)) != null) {
-            msgContext.setProperty(WSHandlerConstants.RECV_RESULTS, 
-                    inMsgCtx.getProperty(WSHandlerConstants.RECV_RESULTS));
-        }
-        
-        
-        
-        reqData.setNoSerialization(false);
-        reqData.setMsgContext(msgContext);
-        
-        if (((getOption(WSSHandlerConstants.OUTFLOW_SECURITY)) == null) &&
-                ((getProperty(msgContext, WSSHandlerConstants.OUTFLOW_SECURITY)) == null)) {
-                
-                if (msgContext.isServerSide() && 
-                    ((getOption(WSSHandlerConstants.OUTFLOW_SECURITY_SERVER)) == null) &&
-                    ((getProperty(msgContext, WSSHandlerConstants.OUTFLOW_SECURITY_SERVER)) == null)) {
-                
-                    return;
-                } else if (((getOption(WSSHandlerConstants.OUTFLOW_SECURITY_CLIENT)) == null) &&
-                        ((getProperty(msgContext, WSSHandlerConstants.OUTFLOW_SECURITY_CLIENT)) == null))  {
-                    
-                    return;
-                }
-            }
-        
-        List<Integer> actions = new ArrayList<Integer>();
-        String action = null;
-        if ((action = (String) getOption(WSSHandlerConstants.ACTION_ITEMS)) == null) {
-            action = (String) getProperty(msgContext, WSSHandlerConstants.ACTION_ITEMS);
-        }
-        if (action == null) {
-            throw new AxisFault("WSDoAllReceiver: No action items defined");
-        }
-        
-        int doAction = WSSecurityUtil.decodeAction(action, actions);
-        if (doAction == WSConstants.NO_SECURITY) {
-            return;
-        }
-        
-        /*
-         * For every action we need a username, so get this now. The
-         * username defined in the deployment descriptor takes precedence.
-         */
-        reqData.setUsername((String) getOption(WSHandlerConstants.USER));
-        if (reqData.getUsername() == null || reqData.getUsername().length() == 0) {
-            String username = (String) getProperty(reqData.getMsgContext(), WSHandlerConstants.USER);
-            if (username != null) {
-                reqData.setUsername(username);
-            }
-        }
-        
-        /*
-         * Now we perform some set-up for UsernameToken and Signature
-         * functions. No need to do it for encryption only. Check if
-         * username is available and then get a passowrd.
-         */
-        if ((doAction & (WSConstants.SIGN | WSConstants.UT | WSConstants.UT_SIGN)) != 0) {
-            /*
-             * We need a username - if none throw an AxisFault. For
-             * encryption there is a specific parameter to get a username.
-             */
-            if (reqData.getUsername() == null
-                    || reqData.getUsername().length() == 0) {
-                throw new AxisFault(
-                "WSDoAllSender: Empty username for specified action");
-            }
-        }
-        
-        /*
-         * Now get the SOAPEvelope from the message context and convert it
-         * into a Document
-         * 
-         * Now we can perform our security operations on this request.
-         */
-        
-        
-        Document doc = null;
-        /*
-         * If the message context property conatins a document then this is
-         * a chained handler.
-         */
-        if ((doc = (Document) ((MessageContext)reqData.getMsgContext())
-                .getProperty(SND_SECURITY)) == null) {
-            try {
-                doc = Axis2Util.getDocumentFromSOAPEnvelope(msgContext.getEnvelope(), useDoom);
-            } catch (WSSecurityException wssEx) {
-                throw new AxisFault("WSDoAllReceiver: Error in converting to Document", wssEx);
-            }
-        }
-
-
-        doSenderAction(doAction, doc, reqData, actions, !msgContext.isServerSide());
-        
-        /*
-         * If noSerialization is false, this handler shall be the last (or
-         * only) one in a handler chain. If noSerialization is true, just
-         * set the processed Document in the transfer property. The next
-         * Axis WSS4J handler takes it and performs additional security
-         * processing steps.
-         *
-         */
-        if (reqData.isNoSerialization()) {
-            ((MessageContext)reqData.getMsgContext()).setProperty(SND_SECURITY,
-                    doc);
-        } else {
-            if(useDoom) {
-                msgContext.setEnvelope((SOAPEnvelope)doc.getDocumentElement());
-            } else {
-                msgContext.setEnvelope(Axis2Util.getSOAPEnvelopeFromDOMDocument(doc, useDoom));
-            }
-            ((MessageContext)reqData.getMsgContext()).setProperty(SND_SECURITY, null);
-        }
-        
-
-        /**
-         * If the optimizeParts parts are set then optimize them
-         */
-        String optimizeParts;
-        
-        if((optimizeParts = (String) getOption(WSSHandlerConstants.OPTIMIZE_PARTS)) == null) {
-            optimizeParts = (String)
-            getProperty(reqData.getMsgContext(), WSSHandlerConstants.OPTIMIZE_PARTS);
-        }
-        if(optimizeParts != null) {
-            // Optimize the Envelope
-            MessageOptimizer.optimize(msgContext.getEnvelope(),optimizeParts);
-        }
-        
-        //Enable handler repetition
-        Integer repeat;
-        int repeatCount;
-        if ((repeat = (Integer)getOption(WSSHandlerConstants.SENDER_REPEAT_COUNT)) == null) {
-            repeat = (Integer)
-            getProperty(reqData.getMsgContext(), WSSHandlerConstants.SENDER_REPEAT_COUNT);
-        }
-        
-        repeatCount = repeat.intValue();
-        
-        //Get the current repetition from message context
-        int repetition = this.getCurrentRepetition(msgContext);
-        
-        if(repeatCount > 0 && repetition < repeatCount) {
-            
-            reqData.clear();
-            reqData = null;
-            
-            // Increment the repetition to indicate the next repetition
-            // of the same handler
-            repetition++;
-            msgContext.setProperty(WSSHandlerConstants.CURRENT_REPETITON,
-                    Integer.valueOf(repetition));
-            
-            this.invoke(msgContext);
-        }
-        
-        if (doDebug) {
-            log.debug("WSDoAllSender: exit invoke()");
-        }
-    }
-    
-}
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/handler/config/InflowConfiguration.java b/modules/rampart-core/src/main/java/org/apache/rampart/handler/config/InflowConfiguration.java
deleted file mode 100644
index 147c114..0000000
--- a/modules/rampart-core/src/main/java/org/apache/rampart/handler/config/InflowConfiguration.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.handler.config;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axis2.description.Parameter;
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.ws.security.handler.WSHandlerConstants;
-
-import java.util.HashMap;
-import java.util.Iterator;
-
-/**
- * This is the representation of the inflow configurations of the security
- * module.
- * 
- * @deprecated
- */
-public class InflowConfiguration {
-	
-	private HashMap action = new HashMap();
-	
-	/**
-	 * Returns the configuration as an OMElement.
-	 * @return Returns Parameter.
-	 */
-	public Parameter getProperty() {
-        
-        if (! action.containsKey("items")) {
-            return null;
-        }
-                
-		OMFactory fac = OMAbstractFactory.getOMFactory();
-        //TODO: Find the constants for "Parameter" and "name"
-        OMElement paramElement = fac.createOMElement("Parameter",null);
-        paramElement.addAttribute(fac.createOMAttribute("name", null ,WSSHandlerConstants.INFLOW_SECURITY));
-		
-		OMElement actionElem = fac.createOMElement(
-				WSSHandlerConstants.ACTION, null);
-		
-		// Get the set of kes of the selected action
-		Iterator keys = action.keySet().iterator();
-
-		while (keys.hasNext()) {
-			String key = (String) keys.next();
-            String value = (String) action.get(key);
-            if(value != null && value.length() > 0) {
-                // Create an element with the name of the key
-    			OMElement elem = fac.createOMElement(key, null);
-    			// Set the text value of the element
-                elem.setText(value);
-    			// Add the element as a child of this action element
-    			actionElem.addChild(elem);
-            }
-		}
-		
-		paramElement.addChild(actionElem);
-		
-		Parameter param = new Parameter();
-		param.setParameterElement(paramElement);
-        param.setValue(paramElement);
-        param.setName(WSSHandlerConstants.INFLOW_SECURITY);
-		
-		return param;
-	}
-
-	/**
-	 * Returns the action items.
-	 * @return Returns String.
-	 */
-	public String getActionItems() {
-		return (String)this.action.get(WSSHandlerConstants.ACTION_ITEMS);
-	}
-
-	/**
-	 * Sets the action items.
-	 * @param actionItems
-	 */
-	public void setActionItems(String actionItems) {
-		this.action.put(WSSHandlerConstants.ACTION_ITEMS, actionItems);
-	}
-
-	/**
-	 * Returns the decryption property file.
-	 * @return Returns String.
-	 */
-	public String getDecryptionPropFile() {
-		return (String)this.action.get(WSHandlerConstants.DEC_PROP_FILE);
-	}
-
-	/**
-	 * Sets the decryption property file.
-	 * @param decryptionPropFile
-	 */
-	public void setDecryptionPropFile(String decryptionPropFile) {
-		this.action.put(WSHandlerConstants.DEC_PROP_FILE,decryptionPropFile);
-	}
-    
-    /**
-     * Sets the decryption property ref key.
-     * @param decryptionPropRefKey
-     */
-    public void setDecryptionPropRefKey(String decryptionPropRefKey) {
-        this.action.put(WSHandlerConstants.DEC_PROP_REF_ID,decryptionPropRefKey);
-    }
-
-	/**
-	 * Returns the password callback class name.
-	 * @return Returns String.
-	 */
-	public String getPasswordCallbackClass() {
-		return (String)this.action.get(WSHandlerConstants.PW_CALLBACK_CLASS);
-	}
-
-	/**
-	 * Sets the password callback class name.
-	 * @param passwordCallbackClass
-	 */
-	public void setPasswordCallbackClass(String passwordCallbackClass) {
-		this.action.put(WSHandlerConstants.PW_CALLBACK_CLASS,passwordCallbackClass);
-	}
-
-	/**
-	 * Returns the signature property file.
-	 * @return Returns String.
-	 */
-	public String getSignaturePropFile() {
-		return (String)this.action.get(WSHandlerConstants.SIG_PROP_FILE);
-	}
-
-	/**
-	 * Sets the signature property file.
-	 * @param signaturePropFile
-	 */
-	public void setSignaturePropFile(String signaturePropFile) {
-		this.action.put(WSHandlerConstants.SIG_PROP_FILE, signaturePropFile);
-	}
-    
-    /**
-     * Sets the signature property ref key.
-     * @param signaturePropRefId
-     */
-    public void setSignaturePropRefId(String signaturePropRefId) {
-        this.action.put(WSHandlerConstants.SIG_PROP_REF_ID, signaturePropRefId);
-    }
-	
-	/**
-	 * Sets whether signature confirmation should be enabled or not.
-	 * @param value
-	 */
-	public void setEnableSignatureConfirmation(boolean value) {
-		this.action.put(
-				WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, value?"true":"false");
-	}
-	
-	/**
-	 * Returns whether signature confirmation should be enabled or not.
-	 * @return Returns String.
-	 */
-	public String getEnableSignatureConfirmation() {
-		return (String) this.action
-				.get(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION);
-	}
-
-     /**
-     * This will set whether request or response evaluation should adhere to "Basic Security Profile"
-     * @param value true if evaluation should adhere to "Basic Security Profile" else false. Default is true.
-     */
-	public void setBSPCompliant(boolean value) {
-		this.action.put(
-				WSHandlerConstants.IS_BSP_COMPLIANT, value?"true":"false");
-	}
-
-
-    /**
-     * Gets whether security processing is configured to handle BSP compliant manner.
-     * "true" or "false"
-     * @return Returns "true" or "false".
-     */
-	public String getBSPCompliant() {
-		return (String) this.action
-				.get(WSHandlerConstants.IS_BSP_COMPLIANT);
-	}
-
-    
-}
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/handler/config/OutflowConfiguration.java b/modules/rampart-core/src/main/java/org/apache/rampart/handler/config/OutflowConfiguration.java
deleted file mode 100644
index 12d41cd..0000000
--- a/modules/rampart-core/src/main/java/org/apache/rampart/handler/config/OutflowConfiguration.java
+++ /dev/null
@@ -1,621 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.handler.config;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axis2.description.Parameter;
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.ws.security.handler.WSHandlerConstants;
-
-import java.util.HashMap;
-import java.util.Iterator;
-
-/**
- * This is the representation of the outflow configurations of the security
- * module.
- * 
- * @deprecated
- */
-public class OutflowConfiguration {
-
-	private HashMap[] actionList;
-
-	private int currentAction = 0;
-
-	/**
-	 * Creates a default outflow configuration instance with an action.
-	 */
-	public OutflowConfiguration() {
-		this.actionList = new HashMap[1];
-		this.actionList[0] = new HashMap();
-	}
-
-	/**
-	 * Creates a new outflow configuration instance with the given number of
-	 * actions.
-	 * 
-	 * @param actionCount
-	 */
-	public OutflowConfiguration(int actionCount) {
-		this.actionList = new HashMap[actionCount];
-		for (int i = 0; i < actionCount; i++) {
-			this.actionList[i] = new HashMap();
-		}
-	}
-
-	/**
-	 * Returns the configuration as an Parameter
-	 * 
-	 * @return Returns Parameter.
-	 */
-	public Parameter getProperty() {
-		
-
-        for (int i = 0; i < actionList.length; i++) {
-            HashMap action = actionList[i];
-            
-            if (! action.keySet().contains("items")) {
-                return null;
-            }
-        }
-                
-		OMFactory fac = OMAbstractFactory.getOMFactory();
-        //TODO: Find the constants for "Parameter" and "name"
-        OMElement paramElement = fac.createOMElement("Parameter",null);
-		paramElement.addAttribute(fac.createOMAttribute("name", null ,WSSHandlerConstants.OUTFLOW_SECURITY));
-
-		
-		for (int i = 0; i < this.actionList.length; i++) {
-			// Create the action element
-			OMElement actionElem = fac.createOMElement(
-					WSSHandlerConstants.ACTION, null);
-
-			// Get the current action
-			HashMap action = this.actionList[i];
-
-			// Get the set of kes of the selected action
-			Iterator keys = action.keySet().iterator();
-
-			while (keys.hasNext()) {
-				String key = (String) keys.next();
-                String value = (String) action.get(key);
-                if(value != null && value.length() > 0) {
-                    // Create an element with the name of the key
-    				OMElement elem = fac.createOMElement(key, null);
-    				// Set the text value of the element
-                    elem.setText(value);
-    				// Add the element as a child of this action element
-    				actionElem.addChild(elem);
-                }
-			}
-			
-			paramElement.addChild(actionElem);
-		}
-		
-		Parameter param = new Parameter();
-		param.setParameterElement(paramElement);
-        param.setValue(paramElement);
-        param.setName(WSSHandlerConstants.OUTFLOW_SECURITY);
-		return param;
-	}
-
-	/**
-	 * Moves to the next action. If this is called when the current action is the
-	 * last action then the current action will not change.
-	 * 
-	 * @throws Exception
-	 */
-	public void nextAction() {
-		if (currentAction < this.actionList.length - 1) {
-			this.currentAction++;
-		}
-	}
-
-	/**
-	 * Moves to previous action. If this is called when the current action is the
-	 * first option then then the current action will not change.
-	 * 
-	 * @throws Exception
-	 */
-	public void previousAction() {
-		if (this.currentAction > 0) {
-			this.currentAction--;
-		}
-	}
-
-	/**
-	 * Sets the action items.
-	 * 
-	 * @param actionItems
-	 */
-	public void setActionItems(String actionItems) {
-		this.actionList[this.currentAction].put(
-				WSSHandlerConstants.ACTION_ITEMS, actionItems);
-	}
-
-	/**
-	 * Returns the action items.
-	 * @return Returns String.
-	 */
-	public String getActionItems() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSSHandlerConstants.ACTION_ITEMS);
-	}
-	
-	/**
-	 * Sets the user of the current action.
-	 * 
-	 * @param user
-	 */
-	public void setUser(String user) {
-		this.actionList[this.currentAction].put(WSHandlerConstants.USER, user);
-	}
-
-	/**
-	 * Returns the user of the current action.
-	 * @return Returns String.
-	 */
-	public String getUser() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.USER);
-	}
-	
-	/**
-	 * Sets the name of the password callback class of the current action.
-	 * 
-	 * @param passwordCallbackClass
-	 */
-	public void setPasswordCallbackClass(String passwordCallbackClass) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.PW_CALLBACK_CLASS, passwordCallbackClass);
-	}
-
-	/**
-	 * Returns the name of the password callback class of the current action.
-	 * @return Returns String.
-	 */
-	public String getPasswordCallbackClass() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.PW_CALLBACK_CLASS);
-	}
-	
-	/**
-	 * Sets the signature property file of the current action.
-	 * 
-	 * @param signaturePropFile
-	 */
-	public void setSignaturePropFile(String signaturePropFile) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.SIG_PROP_FILE, signaturePropFile);
-	}
-
-    /**
-     * Sets the signature property ref key of the current action.
-     * 
-     * @param signaturePropRefId
-     */
-    public void setSignaturePropRefId(String signaturePropRefId) {
-        this.actionList[this.currentAction].put(
-                WSHandlerConstants.SIG_PROP_REF_ID, signaturePropRefId);
-    }
-    
-	/**
-	 * Returns the signature property file of the current action.
-	 * @return Returns String.
-	 */
-	public String getSignaturePropFile() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.SIG_PROP_FILE);
-	}
-	
-	/**
-	 * Sets the signatue key identifier of the current action.
-	 * 
-	 * @param signatureKeyIdentifier
-     * Valid values:
-     * <ul>
-     * <li>X509KeyIdentifier - {@link WSSHandlerConstants#X509_KEY_IDENTIFIER}</li>
-     * <li>SKIKeyIdentifier - {@link WSSHandlerConstants#SKI_KEY_IDENTIFIER}</li>
-     * <li>IssuerSerial - {@link WSSHandlerConstants#ISSUER_SERIAL}</li>
-     * <li>DirectReference - {@link WSSHandlerConstants#BST_DIRECT_REFERENCE}</li>
-     * <li>Thumbprint - {@link WSSHandlerConstants#THUMBPRINT_IDENTIFIER}</li>
-     * </ul> 
-	 */
-	public void setSignatureKeyIdentifier(String signatureKeyIdentifier) {
-		this.actionList[this.currentAction].put(WSHandlerConstants.SIG_KEY_ID,
-				signatureKeyIdentifier);
-	}
-
-	/**
-	 * Returns the signatue key identifier of the current action.
-	 * @return Returns String.
-	 */
-	public String getSignatureKeyIdentifier() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.SIG_KEY_ID);
-	}
-    
-    public void setSignatureAlgorithm(String signatureAlgo) {
-        this.actionList[this.currentAction].put(WSHandlerConstants.SIG_ALGO,
-                signatureAlgo);
-    }
-    
-    public String getSignatureAlgorithm() {
-        return (String) this.actionList[this.currentAction]
-                .get(WSHandlerConstants.SIG_ALGO);
-    }
-	
-	/**
-	 * Sets the encrypted key identifier of the current action.
-     * <br/>
-	 * @param encryptionKeyIdentifier
-     * Valid values:
-     * <ul>
-     * <li>X509KeyIdentifier - {@link WSSHandlerConstants#X509_KEY_IDENTIFIER}</li>
-     * <li>SKIKeyIdentifier - {@link WSSHandlerConstants#SKI_KEY_IDENTIFIER}</li>
-     * <li>IssuerSerial - {@link WSSHandlerConstants#ISSUER_SERIAL}</li>
-     * <li>DirectReference - {@link WSSHandlerConstants#BST_DIRECT_REFERENCE}</li>
-     * <li>EmbeddedKeyName - {@link WSSHandlerConstants#EMBEDDED_KEYNAME}</li>
-     * <li>Thumbprint - {@link WSSHandlerConstants#THUMBPRINT_IDENTIFIER}</li>
-     * </ul> 
-	 */
-	public void setEncryptionKeyIdentifier(String encryptionKeyIdentifier) {
-		this.actionList[this.currentAction].put(WSHandlerConstants.ENC_KEY_ID,
-				encryptionKeyIdentifier);
-	}
-
-	/**
-	 * Returns the encrypted key identifier of the current action.
-	 * @return Returns String.
-	 */
-	public String getEncryptionKeyIdentifier() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.ENC_KEY_ID);
-	}
-	
-	/**
-	 * Sets the encryption user of the current action.
-	 * 
-	 * @param encryptionUser
-	 */
-	public void setEncryptionUser(String encryptionUser) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.ENCRYPTION_USER, encryptionUser);
-	}
-
-	/**
-	 * Returns the encryption user of the current action.
-	 * @return Returns String.
-	 */
-	public String getEncryptionUser() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.ENCRYPTION_USER);
-	}
-	
-	/**
-	 * Sets the signature parts of the current action.
-	 * 
-	 * @param signatureParts
-	 */
-	public void setSignatureParts(String signatureParts) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.SIGNATURE_PARTS, signatureParts);
-	}
-	
-	/**
-	 * Returns the signature parts of the current action.
-	 * @return Returns String.
-	 */
-	public String getSignatureParts() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.SIGNATURE_PARTS);
-	}
-
-	/**
-	 * Sets the encryption parts of the current action.
-	 * 
-	 * @param encryptionParts
-	 */
-	public void setEncryptionParts(String encryptionParts) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.ENCRYPTION_PARTS, encryptionParts);
-	}
-	
-	/**
-	 * Returns the encryption parts of the current action.
-	 * @return Returns String.
-	 */
-	public String getEncryptionParts() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.ENCRYPTION_PARTS);
-	}	
-
-	/**
-	 * Sets the password type of the current action
-	 * 
-	 * @param passwordType
-	 */
-	public void setPasswordType(String passwordType) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.PASSWORD_TYPE, passwordType);
-	}
-
-	/**
-	 * Returns the password type of the current action.
-	 * @return Returns String.
-	 */
-	public String getPasswordType() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.PASSWORD_TYPE);
-	}
-	
-	/**
-	 * Sets the encryption symmetric algorithm of the current action
-	 * 
-	 * @param encryptionSymAlgorithm
-	 */
-	public void setEncryptionSymAlgorithm(String encryptionSymAlgorithm) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.ENC_SYM_ALGO, encryptionSymAlgorithm);
-	}
-
-	/**
-	 * Returns the encryption symmetric algorithm of the current action.
-	 * @return Returns String.
-	 */
-	public String getEncryptionSymAlgorithm() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.ENC_SYM_ALGO);
-	}
-	
-	/**
-	 * Sets the encryption key transport algorithm of the current action
-	 * 
-	 * @param encryptionKeyTransportAlgorithm
-	 */
-	public void setEncryptionKeyTransportAlgorithm(
-			String encryptionKeyTransportAlgorithm) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.ENC_KEY_TRANSPORT,
-				encryptionKeyTransportAlgorithm);
-	}
-
-	/**
-	 * Returns the encryption key transport algorithm of the current action.
-	 * @return Returns String.
-	 */
-	public String getEncryptionKeyTransportAlgorithm() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.ENC_KEY_TRANSPORT);
-	}
-
-	/**
-	 * Sets the embedded key callback class of the current action
-	 * 
-	 * @param embeddedKeyCallbackClass
-	 */
-	public void setEmbeddedKeyCallbackClass(String embeddedKeyCallbackClass) {
-		this.actionList[this.currentAction]
-				.put(WSHandlerConstants.ENC_CALLBACK_CLASS,
-						embeddedKeyCallbackClass);
-	}
-
-	/**
-	 * Returns the embedded key callback class of the current action.
-	 * 
-	 * @return Returns String.
-	 */
-	public String getEmbeddedKeyCallbackClass() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.ENC_CALLBACK_CLASS);
-	}
-
-	/**
-	 * Sets the XPath expression to selecte the elements with content of the
-	 * current action to be MTOM optimized.
-	 * 
-	 * @param optimizePartsXPathExpr
-	 */
-	public void setOptimizeParts(String optimizePartsXPathExpr) {
-		this.actionList[this.currentAction].put(
-				WSSHandlerConstants.OPTIMIZE_PARTS, optimizePartsXPathExpr);
-	}
-
-	/**
-	 * Returns the Path expression to selecte the elements with content of the
-	 * current action to be MTOM optimized.
-	 * 
-	 * @return Returns String.
-	 */
-	public String getOptimizeParts() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSSHandlerConstants.OPTIMIZE_PARTS);
-	}
-	
-	/**
-	 * Sets the SAML property file of the current action.
-	 * @param samlPropFile
-	 */
-	public void setSamlPropFile(String samlPropFile) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.SAML_PROP_FILE, samlPropFile);
-	}
-	
-	/**
-	 * Returns the SAML property file of the current action.
-	 * @return Returns String.
-	 */
-	public String getSamlPropFile() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.SAML_PROP_FILE);
-	}
-	
-	/**
-	 * Sets the encryption property file.
-	 * @param encPropFile
-	 */
-	public void setEncryptionPropFile(String encPropFile) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.ENC_PROP_FILE, encPropFile);
-	}
-	
-    /**
-     * Sets the encryption property ref key of the current action.
-     * 
-     * @param encryptionPropRefId
-     */
-    public void setEncryptionPropRefId(String encryptionPropRefId) {
-        this.actionList[this.currentAction].put(
-                WSHandlerConstants.ENC_PROP_REF_ID, encryptionPropRefId);
-    }
-    
-	/**
-	 * Returns the encryption property file. 
-	 * @return Returns String.
-	 */
-	public String getEncryptionPropFile() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.ENC_PROP_FILE);
-	}
-
-    /**
-     * Enable/Disable PrecisionInMilliseconds
-     * @param value
-     */
-    public void setPrecisionInMilliseconds(boolean value) {
-        this.actionList[this.currentAction].put(
-                WSHandlerConstants.TIMESTAMP_PRECISION, value?"true":"false");
-    }
-    
-    /**
-     * Returns whether PrecisionInMilliseconds is enabled or not
-     * @return Returns String.
-     */
-    public String getPrecisionInMilliseconds() {
-        return (String) this.actionList[this.currentAction]
-                .get(WSHandlerConstants.TIMESTAMP_PRECISION);
-    }
-    
-	/**
-	 * Option to add additional elements in the username token element.
-	 * Example: Nonce and Create elements
-	 * @param addUTElements
-	 */
-	public void setAddUTElements(String addUTElements) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.ADD_UT_ELEMENTS, addUTElements);
-	}
-	
-	/**
-	 * Returns the additional elements to be added to the username token element.
-	 */
-	public String getAddUTElements() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.ADD_UT_ELEMENTS);
-	}
-	
-	/**
-	 * Sets the text of the key name that needs to be sent.
-	 * @param embeddedKeyName
-	 */
-	public void setEmbeddedKeyName(String embeddedKeyName) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.ENC_KEY_NAME, embeddedKeyName);
-	}
-	
-	/**
-	 * Returns the text of the key name that needs to be sent.
-	 * @return Returns String.
-	 */
-	public String getEmbeddedKeyName() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.ENC_KEY_NAME);
-	}
-	
-	/**
-	 * Sets whether signature confirmation should be enabled or not.
-	 * @param value
-	 */
-	public void setEnableSignatureConfirmation(boolean value) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, value?"true":"false");
-	}
-	
-	/**
-	 * Returns whether signature confirmation should be enabled or not
-	 * @return Returns String.
-	 */
-	public String getEnableSignatureConfirmation() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION);
-	}
-	
-	/**
-	 * Sets whether signature confirmation should be enabled or not
-	 * @param value
-	 */
-	public void setPreserveOriginalEnvelope(boolean value) {
-		this.actionList[this.currentAction].put(
-				WSSHandlerConstants.PRESERVE_ORIGINAL_ENV, value?"true":"false");
-	}
-	
-	/**
-	 * Returns whether signature confirmation should be enabled or not.
-	 * @return Returns String.
-	 */
-	public String getPreserveOriginalEnvelope() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSSHandlerConstants.PRESERVE_ORIGINAL_ENV);
-	}
-
-    /**
-     * This will set whether request or response evaluation should adhere to "Basic Security Profile"
-     * @param value true if evaluation should adhere to "Basic Security Profile" else false. Default is true.
-     */
-	public void setBSPCompliant(boolean value) {
-		this.actionList[this.currentAction].put(
-				WSHandlerConstants.IS_BSP_COMPLIANT, value?"true":"false");
-	}
-
-
-    /**
-     * Gets whether security processing is configured to handle BSP compliant manner.
-     * "true" or "false"
-     * @return Returns "true" or "false".
-     */
-	public String getBSPCompliant() {
-		return (String) this.actionList[this.currentAction]
-				.get(WSHandlerConstants.IS_BSP_COMPLIANT);
-	}
-
-    
-    
-    public void setSignAllHeadersAndBody() {
-        this.actionList[this.currentAction].put(WSSHandlerConstants.SIGN_ALL_HEADERS, "true");
-        this.setSignBody();
-    }
-    
-    public void setSignBody() {
-        this.actionList[this.currentAction].put(WSSHandlerConstants.SIGN_BODY, "true");
-    }
-    
-    public void setEncryptBody() {
-        this.actionList[this.currentAction].put(WSSHandlerConstants.ENCRYPT_BODY, "true");
-    }
-}
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyBuilder.java b/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyBuilder.java
index fe7412f..0639d81 100755
--- a/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyBuilder.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyBuilder.java
@@ -36,7 +36,6 @@
 import org.apache.ws.secpolicy.model.SupportingToken;
 import org.apache.ws.secpolicy.model.SymmetricAsymmetricBindingBase;
 import org.apache.ws.secpolicy.model.SymmetricBinding;
-import org.apache.ws.secpolicy.model.TokenWrapper;
 import org.apache.ws.secpolicy.model.TransportBinding;
 import org.apache.ws.secpolicy.model.TransportToken;
 import org.apache.ws.secpolicy.model.Trust10;
@@ -65,15 +64,15 @@
      * 
      * @param topLevelAssertions
      *            The iterator of the top level policy assertions
-     * @return The compile Poilcy data block.
+     * @return The compile Policy data block.
      * @throws WSSPolicyException
      */
-    public static RampartPolicyData build(List topLevelAssertions)
+    public static RampartPolicyData build(List<Assertion> topLevelAssertions)
             throws WSSPolicyException {
         
         RampartPolicyData rpd = new RampartPolicyData();
         
-        for (Iterator iter = topLevelAssertions.iterator(); iter.hasNext();) {
+        for (Iterator<Assertion> iter = topLevelAssertions.iterator(); iter.hasNext();) {
             Assertion assertion = (Assertion) iter.next();
             if (assertion instanceof Binding) {
 
@@ -228,14 +227,14 @@
      */
     private static void processSignedEncryptedElements(
             SignedEncryptedElements see, RampartPolicyData rpd) {
-        Iterator it = see.getXPathExpressions().iterator();
+        Iterator<String> it = see.getXPathExpressions().iterator();
         if (see.isSignedElemets()) {
             while (it.hasNext()) {
-                rpd.setSignedElements((String) it.next());
+                rpd.setSignedElements(it.next());
             }
         } else {
             while (it.hasNext()) {
-                rpd.setEncryptedElements((String) it.next());
+                rpd.setEncryptedElements(it.next());
             }
         }
         rpd.addDeclaredNamespaces(see.getDeclaredNamespaces());
@@ -251,7 +250,7 @@
      */
     private static void processSignedEncryptedParts(SignedEncryptedParts sep,
             RampartPolicyData rpd) {
-        Iterator it = sep.getHeaders().iterator();
+        Iterator<Header> it = sep.getHeaders().iterator();
         if (sep.isSignedParts()) {
             rpd.setSignBody(sep.isBody());
             rpd.setSignAttachments(sep.isAttachments());
@@ -259,7 +258,7 @@
            	rpd.setSignBodyOptional(sep.isOptional());
            	rpd.setSignAttachmentsOptional(sep.isOptional());
             while (it.hasNext()) {
-                Header header = (Header) it.next();
+                Header header = it.next();
                 rpd.addSignedPart(header.getNamespace(), header.getName());
             }
         } else {
@@ -268,7 +267,7 @@
             rpd.setEncryptBodyOptional(sep.isOptional());
            	rpd.setEncryptAttachmentsOptional(sep.isOptional());
             while (it.hasNext()) {
-                Header header = (Header) it.next();
+                Header header = it.next();
                 rpd.setEncryptedParts(header.getNamespace(), header.getName(),"Header");
             }
         }
@@ -277,9 +276,9 @@
     private static void processContentEncryptedElements(ContentEncryptedElements cee,
             RampartPolicyData rpd) {
         
-        Iterator it = cee.getXPathExpressions().iterator();     
+        Iterator<String> it = cee.getXPathExpressions().iterator();     
         while (it.hasNext()) {
-            rpd.setContentEncryptedElements((String) it.next());
+            rpd.setContentEncryptedElements(it.next());
         }
         rpd.addDeclaredNamespaces(cee.getDeclaredNamespaces());
     }
@@ -287,9 +286,9 @@
     private static void processRequiredElements(RequiredElements req,
             RampartPolicyData rpd) {
         
-        Iterator it = req.getXPathExpressions().iterator();     
+        Iterator<String> it = req.getXPathExpressions().iterator();     
         while (it.hasNext()) {
-            rpd.setRequiredElements((String) it.next());
+            rpd.setRequiredElements(it.next());
         }
         rpd.addDeclaredNamespaces(req.getDeclaredNamespaces());
     }
@@ -363,14 +362,14 @@
      */
     private static void asymmetricBinding(AsymmetricBinding binding,
             RampartPolicyData rpd) throws WSSPolicyException {
-        TokenWrapper tokWrapper = binding.getRecipientToken();
-        TokenWrapper tokWrapper1 = binding.getInitiatorToken();
-        if (tokWrapper == null || tokWrapper1 == null) {
+    	RecipientToken rt = binding.getRecipientToken();
+    	InitiatorToken it = binding.getInitiatorToken();
+        if (rt == null || it == null) {
             throw new WSSPolicyException("Asymmetric binding should have both Initiator and " +
             		                                                "Recipient tokens defined");
         }
-        rpd.setRecipientToken(((RecipientToken) tokWrapper).getReceipientToken());
-        rpd.setInitiatorToken(((InitiatorToken) tokWrapper1).getInitiatorToken());
+        rpd.setRecipientToken(rt.getReceipientToken());
+        rpd.setInitiatorToken(it.getInitiatorToken());
     }
 
     private static void processSupportingTokens(SupportingToken token,
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java b/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
index 0281dd1..f67a56d 100755
--- a/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/policy/RampartPolicyData.java
@@ -35,7 +35,6 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Vector;
 
 public class RampartPolicyData {
 
@@ -126,8 +125,7 @@
     
     private List<String> contentEncryptedElements = new ArrayList<String>();
 
-    //TODO make this strongly type attribute
-    private HashMap declaredNamespaces = new HashMap();
+    private HashMap<String, String> declaredNamespaces = new HashMap<String, String>();
 
     /*
      * Holds the supporting tokens elements
@@ -528,11 +526,11 @@
         return signedParts;
     }
     
-    public HashMap getDeclaredNamespaces() {
+    public HashMap<String, String> getDeclaredNamespaces() {
         return declaredNamespaces;
     }
     
-    public void addDeclaredNamespaces(HashMap namespaces) {
+    public void addDeclaredNamespaces(HashMap<String, String> namespaces) {
         declaredNamespaces.putAll(namespaces);
     }
 
@@ -900,7 +898,7 @@
             
         case SPConstants.SUPPORTING_TOKEN_SIGNED_ENDORSING:
             if(this.signedEndorsingSupportingTokensIdMap == null) {
-                this.signedEndorsingSupportingTokensIdMap = new HashMap();
+                this.signedEndorsingSupportingTokensIdMap = new HashMap<Token,String>();
             }
             return null;
 
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/policy/SupportingPolicyData.java b/modules/rampart-core/src/main/java/org/apache/rampart/policy/SupportingPolicyData.java
index 92d86be..02418eb 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/policy/SupportingPolicyData.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/policy/SupportingPolicyData.java
@@ -1,53 +1,62 @@
-package org.apache.rampart.policy;
+/*
+ * 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.
+ */
 
-import java.util.Iterator;
+package org.apache.rampart.policy;
 
 import org.apache.ws.secpolicy.model.Header;
 import org.apache.ws.secpolicy.model.SupportingToken;
 
 public class SupportingPolicyData extends RampartPolicyData {
 
-	public void build(SupportingToken token) {
+    public void build(SupportingToken token) {
 
-		if (token.getSignedParts() != null && !token.getSignedParts().isOptional()) {
-			Iterator it = token.getSignedParts().getHeaders().iterator();
-			this.setSignBody(token.getSignedParts().isBody());
-			while (it.hasNext()) {
-				Header header = (Header) it.next();
-				this.addSignedPart(header.getNamespace(), header.getName());
-			}
-		}
+        if (token.getSignedParts() != null && !token.getSignedParts().isOptional()) {
+            this.setSignBody(token.getSignedParts().isBody());
+            for (Header header : token.getSignedParts().getHeaders()) {
+                this.addSignedPart(header.getNamespace(), header.getName());
+            }
+        }
 
-		if (token.getEncryptedParts() != null && !token.getEncryptedParts().isOptional()) {
-			Iterator it = token.getEncryptedParts().getHeaders().iterator();
-			this.setEncryptBody(token.getEncryptedParts().isBody());
-			while (it.hasNext()) {
-				Header header = (Header) it.next();
-				this.setEncryptedParts(header.getNamespace(), header.getName(),
-						"Header");
-			}
-		}
+        if (token.getEncryptedParts() != null && !token.getEncryptedParts().isOptional()) {
+            this.setEncryptBody(token.getEncryptedParts().isBody());
+            for (Header header : token.getEncryptedParts().getHeaders()) {
+                this.setEncryptedParts(header.getNamespace(), header.getName(),
+                        "Header");
+            }
+        }
 
-		if (token.getSignedElements() != null && !token.getSignedElements().isOptional()) {
-			Iterator it = token.getSignedElements().getXPathExpressions()
-					.iterator();
-			while (it.hasNext()) {
-				this.setSignedElements((String) it.next());
-			}
-			this.addDeclaredNamespaces(token.getSignedElements()
-					.getDeclaredNamespaces());
-		}
+        if (token.getSignedElements() != null && !token.getSignedElements().isOptional()) {
+            for (String xpath : token.getSignedElements().getXPathExpressions()) {
+                this.setSignedElements(xpath);
+            }
+            this.addDeclaredNamespaces(token.getSignedElements()
+                    .getDeclaredNamespaces());
+        }
 
-		if (token.getEncryptedElements() != null && !token.getEncryptedElements().isOptional()) {
-			Iterator it = token.getEncryptedElements().getXPathExpressions()
-					.iterator();
-			while (it.hasNext()) {
-				this.setEncryptedElements((String) it.next());
-			}
-			if (token.getSignedElements() == null) {
-				this.addDeclaredNamespaces(token.getEncryptedElements()
-						.getDeclaredNamespaces());
-			}
-		}
-	}
+        if (token.getEncryptedElements() != null && !token.getEncryptedElements().isOptional()) {
+            for (String xpath : token.getEncryptedElements().getXPathExpressions()) {
+                this.setEncryptedElements(xpath);
+            }
+            if (token.getSignedElements() == null) {
+                this.addDeclaredNamespaces(token.getEncryptedElements()
+                        .getDeclaredNamespaces());
+            }
+        }
+    }
 }
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/KerberosConfigBuilder.java b/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/KerberosConfigBuilder.java
new file mode 100644
index 0000000..05a3b63
--- /dev/null
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/KerberosConfigBuilder.java
@@ -0,0 +1,100 @@
+/*
+ * 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.rampart.policy.builders;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.AssertionBuilderFactory;
+import org.apache.neethi.builders.AssertionBuilder;
+import org.apache.rampart.policy.model.KerberosConfig;
+import org.apache.rampart.policy.model.RampartConfig;
+
+/**
+ * Builder for {@link KerberosConfig} assertion.
+ */
+public class KerberosConfigBuilder implements AssertionBuilder<OMElement> {
+    public Assertion build(OMElement element, AssertionBuilderFactory factory) 
+        throws IllegalArgumentException {
+
+        KerberosConfig kerberosConfig = new KerberosConfig();
+
+        OMElement childElement;
+
+        childElement = element.getFirstChildWithName(
+              new QName(RampartConfig.NS, KerberosConfig.JAAS_CONTEXT_LN));
+        if (childElement != null) {
+            if (null == kerberosConfig.getJaasContext()) {
+                kerberosConfig.setJaasContext(childElement.getText().trim());
+            }
+        }
+
+        childElement = element.getFirstChildWithName(
+              new QName(RampartConfig.NS, KerberosConfig.PRINCIPAL_NAME_LN));
+        if (childElement != null) {
+            if (null == kerberosConfig.getPrincipalName()) {
+                kerberosConfig.setPrincipalName(childElement.getText().trim());
+            }
+        }
+
+        childElement = element.getFirstChildWithName(
+            new QName(RampartConfig.NS, KerberosConfig.PRINCIPAL_PASSWORD_LN));
+        if (childElement != null) {
+            if (null == kerberosConfig.getPrincipalPassword()) {
+                kerberosConfig.setPrincipalPassword(childElement.getText().trim());
+            }
+        }
+
+        childElement = element.getFirstChildWithName(new QName(RampartConfig.NS,
+            KerberosConfig.SERVICE_PRINCIPAL_NAME_LN));
+        if (childElement != null) {
+            kerberosConfig.setServicePrincipalName(childElement.getText().trim());
+        }
+
+        childElement = element.getFirstChildWithName(new QName(RampartConfig.NS,
+            KerberosConfig.SERVICE_PRINCIPAL_NAME_FORM_LN));
+        if (childElement != null) {
+            kerberosConfig.setServicePrincipalNameForm(
+                 childElement.getText().trim());
+        }
+        
+        childElement = element.getFirstChildWithName(new QName(RampartConfig.NS,
+            KerberosConfig.KERBEROS_TOKEN_DECODER_CLASS_LN));
+        if (childElement != null) {
+            kerberosConfig.setKerberosTokenDecoderClass(
+                 childElement.getText().trim());
+        }
+        
+        childElement = element.getFirstChildWithName(new QName(
+            RampartConfig.NS, KerberosConfig.REQUEST_CREDENTIAL_DELEGATION_LN));
+        if (childElement != null) {
+            kerberosConfig.setRequstCredentialDelegation(Boolean.valueOf(childElement.getText().trim()));
+        }    
+
+        return kerberosConfig;
+    }
+
+    public QName[] getKnownElements() {
+        return new QName[] {
+            new QName(RampartConfig.NS, KerberosConfig.KERBEROS_LN) 
+        };
+    }
+}
+
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java b/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
index d111fbd..edce4cd 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/RampartConfigBuilder.java
@@ -22,6 +22,7 @@
 import org.apache.neethi.AssertionBuilderFactory;
 import org.apache.neethi.builders.AssertionBuilder;
 import org.apache.rampart.policy.model.CryptoConfig;
+import org.apache.rampart.policy.model.KerberosConfig;
 import org.apache.rampart.policy.model.OptimizePartsConfig;
 import org.apache.rampart.policy.model.RampartConfig;
 import org.apache.rampart.policy.model.SSLConfig;
@@ -89,6 +90,16 @@
         }
         
         childElement = element.getFirstChildWithName(new QName(
+                RampartConfig.NS, RampartConfig.KERBEROS_CONFIG));
+        if (childElement != null) {                             
+            KerberosConfig kerberosConfig = (KerberosConfig)new KerberosConfigBuilder().
+                                      build(childElement, 
+                                      factory);
+            rampartConfig.setKerberosConfig(kerberosConfig);
+            
+        }
+        
+        childElement = element.getFirstChildWithName(new QName(
                 RampartConfig.NS, RampartConfig.SIG_CRYPTO_LN));
         if (childElement != null) {
             rampartConfig.setSigCryptoConfig((CryptoConfig) factory
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/KerberosConfig.java b/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/KerberosConfig.java
new file mode 100644
index 0000000..2d13f97
--- /dev/null
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/KerberosConfig.java
@@ -0,0 +1,361 @@
+/*
+ * 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.rampart.policy.model;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.neethi.Assertion;
+import org.apache.neethi.Constants;
+import org.apache.neethi.PolicyComponent;
+import org.apache.rampart.RampartException;
+import org.ietf.jgss.GSSCredential;
+
+/**
+ * Container for Kerberos configuration options.
+ */
+public class KerberosConfig implements Assertion {
+
+    public final static String KERBEROS_LN = RampartConfig.KERBEROS_CONFIG;
+
+    public final static String JAAS_CONTEXT_LN = "jaasContext";
+
+    public final static String PRINCIPAL_NAME_LN = "principalName";
+
+    public final static String PRINCIPAL_PASSWORD_LN = "principalPassword";
+
+    public final static String SERVICE_PRINCIPAL_NAME_LN = "servicePrincipalName";
+
+    public final static String SERVICE_PRINCIPAL_NAME_FORM_LN = "servicePrincipalNameForm";
+
+    public final static String KERBEROS_TOKEN_DECODER_CLASS_LN = "kerberosTokenDecoderClass";
+    
+    public final static String REQUEST_CREDENTIAL_DELEGATION_LN  = "requestCredentialDelegation";
+    
+    public final static String DELEGATION_CREDENTIAL_LN = "delegationCredential";
+
+    /**
+     * Specifies that the service principal name should be interpreted as a 
+     * "host-based" name as specified in GSS API RFC, 
+     * section "4.1: Host-Based Service Name Form". 
+     * See <a href="http://www.ietf.org/rfc/rfc2743.txt">rfc2743 - GSS
+     * API, Version 2</a>.
+     */
+    public final static String HOST_BASED_NAME_FORM = "hostbased";
+
+    /**
+     * Specifies that the service principal name should be interpreted as a   
+     * "username" name as specified in GSS API RFC,
+     * section "4.2: User Name Form". 
+     * See <a href="http://www.ietf.org/rfc/rfc2743.txt">rfc2743 - GSS API, Version
+     * 2</a>.
+     */
+    public final static String USERNAME_NAME_FORM = "username";
+
+    private String jaasContext;
+
+    private String principalName;
+
+    private String principalPassword;
+
+    private String servicePrincipalName;
+
+    private String servicePrincipalNameForm;
+
+    private String kerberosTokenDecoderClass;
+    
+    private boolean requstCredentialDelegation;
+    
+    private GSSCredential delegationCredential;
+    
+    /**
+     * @return The JAAS context name to use to obtain a TGT (Ticket granting ticket).
+     */
+    public String getJaasContext() {
+        return jaasContext;
+    }
+
+    /**
+     * Sets the JAAS context name to use to obtain a TGT (Ticket granting ticket).
+     * @param jaasContext the jaasContext to set
+     */
+    public void setJaasContext(String jaasContext) {
+        this.jaasContext = jaasContext;
+    }
+
+    /**
+     * @return The principal name to use to obtain a TGT (Ticket granting ticket).
+     * This is usually the domain username.
+     * If not specified, Rampart will fall back to the Rampart configuration's 
+     * {@link RampartConfig#getUser() user}.
+     * Note that the principal name specified in JAAS configuration takes precedence
+     * over any principal name configured here.
+     */
+    public String getPrincipalName() {
+        return principalName;
+    }
+
+    /**
+     * Sets the principal name to use to obtain a TGT (Ticket granting ticket). 
+     * This is usually the domain username. If* not specified, Rampart will fall back 
+     * to the Rampart configuration's {@link RampartConfig#getUser() user}. 
+     * Note that the principal name specified in JAAS configuration takes precedence 
+     * over any principal name configured via this method.
+     * @param principalName the principalName to set
+     */
+    public void setPrincipalName(String principalName) {
+        this.principalName = principalName;
+    }
+
+    /**
+     * @return Returns the principal's clear-text password. If the password is not
+     * configured (null), Rampart will try to obtain it from any configured 
+     * {@link RampartConfig#getPwCbClass() password callback}. Note that any 
+     * principal password configured here will be ignored if the JAAS configuration 
+     * configures usage of a keytab file.
+     */
+    public String getPrincipalPassword() {
+        return principalPassword;
+    }
+
+    /**
+     * Sets the principal's clear-text password. If the password is not configured
+     * (null), Rampart will try to obtain it from any configured 
+     * {@link RampartConfig#getPwCbClass() password callback}. Note that any 
+     * principal password configured here will be ignored if the JAAS configuration 
+     * configures usage of a keytab file.
+     */
+    public void setPrincipalPassword(String principalPassword) {
+        this.principalPassword = principalPassword;
+    }
+
+    /**
+     * @return The service principal name to use to obtain a service ticket on the 
+     * client-side. Note that by default,
+     * this name is assumed to be in a {@link #HOST_BASED_NAME_FORM} unless the
+     * {@link #setServicePrincipalNameForm(String) service principal name form} is 
+     * explicitly configured.
+     */
+    public String getServicePrincipalName() {
+        return servicePrincipalName;
+    }
+
+    /**
+     * Sets service principal name to use to obtain a service ticket on the 
+     * client-side. Note that by default, this name is assumed to be in a 
+     * {@link #HOST_BASED_NAME_FORM} unless the 
+     * {@link #setServicePrincipalNameForm(String)
+     * service principal name form} is explicitly configured.
+     */
+    public void setServicePrincipalName(String servicePrincipalName) {
+        this.servicePrincipalName = servicePrincipalName;
+    }
+
+    /**
+     * Returns the service principal name form.
+     * @return Either {@value #HOST_BASED_NAME_FORM} or {@value #USERNAME_NAME_FORM}.   
+     * Default is: {@value #HOST_BASED_NAME_FORM}.
+     */
+    public String getServicePrincipalNameForm() {
+        if (servicePrincipalNameForm == null) {
+            return HOST_BASED_NAME_FORM;
+        }
+        return servicePrincipalNameForm;
+    }
+    
+    /**
+     * Configures a Kerberos token decoder implementation for decoding Kerberos v5 tokens on server side.
+     * The decoder will be used only if the Kerberos client/server session key cannot be obtained using Java's {@link com.sun.security.jgss.ExtendedGSSContext} API,
+     * which is normally the case when using Java version older than 1.7.0_b07, 
+     * see <a href="http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6710360"> JDK-6710360 : export Kerberos session key to applications</a>.
+     * <p>
+     * The class will be loaded using current service's {@link org.apache.axis2.description.AxisService#getClassLoader() classloader}.
+     * </p>
+     * 
+     * @param kerberosTokenValidatorClass A fully qualifier class name that implements {@link org.apache.ws.security.validate.KerberosTokenValidator}.
+     */
+    public void setKerberosTokenDecoderClass(String kerberosTokenDecoderClass) {
+        this.kerberosTokenDecoderClass = kerberosTokenDecoderClass;
+    }
+    
+    /**
+     * Returns the Kerberos token decoder implementation for decoding Kerberos v5 tokens on server side.
+     * The decoder will be used only if the Kerberos client/server session key cannot be obtained using Java's {@link com.sun.security.jgss.ExtendedGSSContext} API,
+     * which is normally the case when using Java version older than 1.7.0_b07, 
+     * see <a href="http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6710360"> JDK-6710360 : export Kerberos session key to applications</a>
+     * 
+     * @return A fully qualifier class name that implements {@link org.apache.ws.security.validate.KerberosTokenValidator} or <code>null</code> if no Kerberos token decoder is configured.
+     */
+    public String getKerberosTokenDecoderClass() {
+        return this.kerberosTokenDecoderClass;
+    }
+
+    /**
+     * Sets the service principal name form.
+     * @param servicePrincipalNameForm The service principal name form to set. 
+     * The given literal must be either {@value #HOST_BASED_NAME_FORM} or 
+     * {@value #USERNAME_NAME_FORM}.
+     * @throws IllegalArgumentException If the given 
+     * <code>servicePrincipalNameForm</code> is not one of:
+     * {@value #HOST_BASED_NAME_FORM} or {@value #USERNAME_NAME_FORM}.
+     */
+    public void setServicePrincipalNameForm(String servicePrincipalNameForm) 
+        throws IllegalArgumentException {
+
+        if (!HOST_BASED_NAME_FORM.equals(servicePrincipalNameForm) &&
+            !USERNAME_NAME_FORM.equals(servicePrincipalNameForm)) {
+            throw new IllegalArgumentException(
+               new RampartException("invalidServicePrincipalNameForm", 
+                                    new String[] {
+                                        servicePrincipalNameForm, 
+                                        HOST_BASED_NAME_FORM, 
+                                        USERNAME_NAME_FORM }));
+        }
+        this.servicePrincipalNameForm = servicePrincipalNameForm;
+    }
+    
+    /**
+     * If Kerberos credential delegation is requested, the initiator's TGT (Ticket granting ticket) is propagated to the receiver
+     * along with the TGS(Ticket granting service).
+     * 
+     * @return true if credential delegation is requested.
+     */
+    public boolean isRequstCredentialDelegation() {
+        return requstCredentialDelegation;
+    }
+
+    /**
+     * Enables Kerberos credential delegation. If credential delegation is requested, the initiator's TGT (Ticket
+     * granting ticket) is propagated to the receiver along with the TGS(Ticket granting service). <br/>
+     * <br/>
+     * 
+     * Enabling delegation requires <b>forwardable=true</b> property to be added to the <b>[libdefaults]</b> section in
+     * the Kerberos setup configuration.KDC should also be explicitly configured to allow delegation as it is considered
+     * a security issue and is disabled by default.
+     * 
+     * @param requstCredentialDelegation if true, credential delegation is requested.
+     */
+    public void setRequstCredentialDelegation(boolean requstCredentialDelegation) {
+        this.requstCredentialDelegation = requstCredentialDelegation;
+    }
+
+    /**
+     * The delegation credential is available when the initiator has explicitly requested delegation through
+     * {@link KerberosConfig#setRequstCredentialDelegation(boolean)} and the receiver has retrieved it and set it
+     * through {@link KerberosConfig#setDelegationCredential(GSSCredential)}.
+     * 
+     * If available, the delegation credential is used by the receiver to obtain a service ticket for another
+     * Kerberos protected WS on behalf of the initiator. The receiver's principal must have explicit privileges to use
+     * the delegated credential(TGT) for retrieval of the service ticket.
+     * 
+     * @return the client's TGT wrapped in {@link GSSCredential}
+     */
+    public GSSCredential getDelegationCredential() {
+        return delegationCredential;
+    }
+
+    /**
+     * Sets the delegation credential to be used by the receiver to obtain a service ticket for another
+     * Kerberos protected WS on behalf of the initiator. The receiver's principal must have explicit privileges to use
+     * the delegated credential(TGT) for retrieval of the service ticket.
+     * 
+     * @param delegationCredential the {@link GSSCredential} to use for obtaining a TGS
+     */
+    public void setDelegationCredential(GSSCredential delegationCredential) {
+        this.delegationCredential = delegationCredential;
+    }
+
+    public PolicyComponent normalize() {
+        throw new UnsupportedOperationException();
+    }
+
+    public QName getName() {
+        return new QName(RampartConfig.NS, KERBEROS_LN);
+    }
+
+    public boolean isOptional() {
+        return true;
+    }
+
+    public boolean isIgnorable() {
+        throw new UnsupportedOperationException();
+    }
+
+    public short getType() {
+        return Constants.TYPE_ASSERTION;
+    }
+
+    public boolean equal(PolicyComponent policyComponent) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void serialize(XMLStreamWriter writer) throws XMLStreamException {
+        String prefix = writer.getPrefix(RampartConfig.NS);
+
+        if (prefix == null) {
+            prefix = RampartConfig.NS;
+            writer.setPrefix(prefix, RampartConfig.NS);
+        }
+
+        if (getJaasContext() != null) {
+            writer.writeStartElement(RampartConfig.NS, JAAS_CONTEXT_LN);
+            writer.writeCharacters(getJaasContext());
+            writer.writeEndElement();
+        }
+
+        if (getPrincipalName() != null) {
+            writer.writeStartElement(RampartConfig.NS, PRINCIPAL_NAME_LN);
+            writer.writeCharacters(getPrincipalName());
+            writer.writeEndElement();
+        }
+
+        if (getPrincipalPassword() != null) {
+            writer.writeStartElement(RampartConfig.NS, PRINCIPAL_PASSWORD_LN);
+            writer.writeCharacters(getPrincipalPassword());
+            writer.writeEndElement();
+        }
+
+        if (getServicePrincipalName() != null) {
+            writer.writeStartElement(RampartConfig.NS, SERVICE_PRINCIPAL_NAME_LN);
+            writer.writeCharacters(getServicePrincipalName());
+            writer.writeEndElement();
+        }
+
+        if (this.servicePrincipalNameForm != null) {
+            writer.writeStartElement(RampartConfig.NS,
+                                     SERVICE_PRINCIPAL_NAME_FORM_LN);
+            writer.writeCharacters(this.servicePrincipalNameForm);
+            writer.writeEndElement();
+        }
+        
+        if (this.kerberosTokenDecoderClass != null) {
+            writer.writeStartElement(RampartConfig.NS,
+                                     KERBEROS_TOKEN_DECODER_CLASS_LN);
+            writer.writeCharacters(this.kerberosTokenDecoderClass);
+            writer.writeEndElement();
+        }
+        
+        if (this.requstCredentialDelegation) {
+            writer.writeStartElement(RampartConfig.NS, REQUEST_CREDENTIAL_DELEGATION_LN);
+            writer.writeCharacters(Boolean.toString(this.requstCredentialDelegation));
+            writer.writeEndElement();
+        }
+    }
+}
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java b/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
index 5bfba4f..bdad069 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/RampartConfig.java
@@ -114,6 +114,8 @@
 
     public final static String SSL_CONFIG = "sslConfig";
     
+    public final static String KERBEROS_CONFIG = "kerberosConfig";
+    
     private String user;
     
     private String userCertAlias;
@@ -150,7 +152,17 @@
     private String nonceLifeTime = Integer.toString(DEFAULT_NONCE_LIFE_TIME);
     
     private SSLConfig sslConfig;
+    
+    private KerberosConfig kerberosConfig;
+    
+    public KerberosConfig getKerberosConfig() {
+        return kerberosConfig;
+    }
 
+    public void setKerberosConfig(KerberosConfig kerberosConfig) {
+        this.kerberosConfig = kerberosConfig;
+    }
+    
     /*To set timeStampStrict in WSSConfig through rampartConfig - default value is false*/
     private boolean timeStampStrict = false;
     
@@ -392,6 +404,12 @@
             writer.writeEndElement();
         }
         
+        if (kerberosConfig != null) {
+            writer.writeStartElement(NS, KERBEROS_CONFIG);
+            kerberosConfig.serialize(writer);
+            writer.writeEndElement();
+        }
+        
         writer.writeEndElement();
 
     }
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 c76875b..9a1c703 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
@@ -20,19 +20,14 @@
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.OMXMLBuilderFactory;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.axiom.soap.SOAP12Constants;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axiom.soap.SOAPModelBuilder;
-import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
 import org.apache.rampart.handler.WSSHandlerConstants;
 import org.apache.ws.security.WSSecurityException;
 import org.apache.xml.security.utils.XMLUtils;
@@ -144,21 +139,9 @@
                     }
                 }
 
-                // Check the namespace and find SOAP version and factory
-                String nsURI = null;
-                OMMetaFactory metaFactory = OMAbstractFactory.getMetaFactory(OMAbstractFactory.FEATURE_DOM);
-                SOAPFactory factory;
-                if (env.getNamespace().getNamespaceURI().equals(
-                        SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI)) {
-                    nsURI = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
-                    factory = metaFactory.getSOAP11Factory();
-                } else {
-                    nsURI = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
-                    factory = metaFactory.getSOAP12Factory();
-                }
-
-                StAXSOAPModelBuilder stAXSOAPModelBuilder = new StAXSOAPModelBuilder(
-                        env.getXMLStreamReader(), factory, nsURI);
+                SOAPModelBuilder stAXSOAPModelBuilder = OMXMLBuilderFactory.createStAXSOAPModelBuilder(
+                        OMAbstractFactory.getMetaFactory(OMAbstractFactory.FEATURE_DOM),
+                        env.getXMLStreamReader());
                 SOAPEnvelope envelope = (stAXSOAPModelBuilder)
                         .getSOAPEnvelope();
                 envelope.getParent().build();
@@ -337,7 +320,7 @@
      * @return
      */
     public static OMElement toDOOM(OMFactory factory, OMElement element){
-        StAXOMBuilder builder = new StAXOMBuilder(factory, element.getXMLStreamReader());
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createStAXOMBuilder(factory, element.getXMLStreamReader());
         OMElement elem = builder.getDocumentElement();
         elem.build();
         return elem;
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/util/HandlerParameterDecoder.java b/modules/rampart-core/src/main/java/org/apache/rampart/util/HandlerParameterDecoder.java
deleted file mode 100644
index 4deb569..0000000
--- a/modules/rampart-core/src/main/java/org/apache/rampart/util/HandlerParameterDecoder.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.util;
-
-import org.apache.axiom.om.OMElement;
-import org.apache.axis2.AxisFault;
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.description.Parameter;
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-import org.apache.ws.security.WSSecurityException;
-import org.apache.ws.security.handler.WSHandlerConstants;
-
-import javax.xml.namespace.QName;
-
-import java.util.Iterator;
-
-/**
- * This is used to process the security parameters from the configuration files
- * 
- * Example: <code>
- <br>
-
- </code>
- * 
- */
-public class HandlerParameterDecoder {
-
-	/**
-	 * 
-	 * @param msgCtx
-	 * @param inflow
-	 * @throws WSSecurityException
-	 */
-	public static void processParameters(MessageContext msgCtx, boolean inflow)
-			throws Exception {
- 		Parameter inFlowSecParam;
-        	Parameter outFlowSecParam;
-        
-	        if(msgCtx.isServerSide()){
-            		inFlowSecParam = msgCtx.getParameter(WSSHandlerConstants.INFLOW_SECURITY_SERVER);
-            		outFlowSecParam = msgCtx.getParameter(WSSHandlerConstants.OUTFLOW_SECURITY_SERVER);
-       		 }else{
-            		inFlowSecParam = msgCtx.getParameter(WSSHandlerConstants.INFLOW_SECURITY_CLIENT);
-            		outFlowSecParam = msgCtx.getParameter(WSSHandlerConstants.OUTFLOW_SECURITY_CLIENT);
-        	}
-        
-        	//TODO: check whether policy is available 
-        	if(inFlowSecParam == null){
-            		inFlowSecParam = (Parameter)msgCtx.getProperty(WSSHandlerConstants.INFLOW_SECURITY);            
-       		}
-
-       	 	if(outFlowSecParam == null){
-            		outFlowSecParam = (Parameter)msgCtx.getProperty(WSSHandlerConstants.OUTFLOW_SECURITY);            
-       		 }
-		
-		//If the configs are not available in the file
-		if(inFlowSecParam == null) {
-			inFlowSecParam = msgCtx.getParameter(WSSHandlerConstants.INFLOW_SECURITY);
-		}
-		if(outFlowSecParam == null) {
-			outFlowSecParam = msgCtx.getParameter(WSSHandlerConstants.OUTFLOW_SECURITY);
-		}
-
-		int repetitionCount = -1;
-
-		/*
-		 * Populate the inflow parameters
-		 */
-		if (inFlowSecParam != null && inflow) {
-			OMElement inFlowParamElem = inFlowSecParam.getParameterElement();
-
-			OMElement actionElem = inFlowParamElem
-					.getFirstChildWithName(new QName(WSSHandlerConstants.ACTION));
-			if (actionElem == null) {
-				throw new Exception(
-						"Inflow configuration must contain an 'action' "
-								+ "elements the child of 'InflowSecurity' element");
-			}
-
-			Iterator childElements = actionElem.getChildElements();
-			while (childElements.hasNext()) {
-				OMElement element = (OMElement) childElements.next();
-				msgCtx.setProperty(element.getLocalName(), element.getText().trim());
-			}
-
-		}
-
-		/*
-		 * Populate the outflow parameters
-		 */
-		if (outFlowSecParam != null && !inflow) {
-			OMElement outFlowParamElem = outFlowSecParam.getParameterElement();
-			
-			Iterator childElements = outFlowParamElem.getChildElements();
-			while (childElements.hasNext()) {
-				OMElement element = (OMElement) childElements.next();
-				
-				if(!element.getLocalName().equals(WSSHandlerConstants.ACTION)) {
-					throw new Exception(
-							"Alian element '"
-									+ element.getLocalName()
-									+ "' in the 'OutFlowSecurity' element, " 
-									+ "only 'action' elements can be present");
-				}
-				
-                boolean signAllHeaders = false;
-                boolean signBody = false;
-                boolean encryptBody = false;
-                
-                repetitionCount++;
-				Iterator paramElements = element.getChildElements();
-				while (paramElements.hasNext()) {
-					OMElement elem = (OMElement) paramElements.next();
-                    String localName = elem.getLocalName();
-                    String text = elem.getText().trim();
-                    if(localName.equals(WSSHandlerConstants.SIGN_ALL_HEADERS)) {
-                        signAllHeaders = true;
-                    } else if(localName.equals(WSSHandlerConstants.SIGN_BODY)) {
-                        signBody = true;
-                    } else if(localName.equals(WSSHandlerConstants.ENCRYPT_BODY)) {
-                        encryptBody = true;
-                    } else {
-                        msgCtx.setProperty(Axis2Util.getKey(localName,
-							inflow,repetitionCount), text);
-                    }
-				}
-                
-                if(signAllHeaders || signBody || encryptBody) {
-                    handleSignEncrParts(signAllHeaders, signBody, encryptBody,
-                            msgCtx, repetitionCount);
-                }
-                
-				
-			}
-
-			msgCtx.setProperty(WSSHandlerConstants.SENDER_REPEAT_COUNT,
-					Integer.valueOf(repetitionCount));
-		}
-	}
-    
-    public static OutflowConfiguration getOutflowConfiguration(Parameter outflowConfigParam) throws AxisFault {
-        if (outflowConfigParam != null) {
-            OMElement outflowParamElem = outflowConfigParam.getParameterElement();
-
-            OMElement actionElem = outflowParamElem
-                    .getFirstChildWithName(new QName(WSSHandlerConstants.ACTION));
-            if (actionElem == null) {
-                throw new AxisFault(
-                        "Inflow configuration must contain an 'action' "
-                                + "elements the child of 'InflowSecurity' element");
-            }
-
-            OutflowConfiguration outflowConfiguration = new OutflowConfiguration();
-            
-            Iterator childElements = actionElem.getChildElements();
-            while (childElements.hasNext()) {
-                OMElement element = (OMElement) childElements.next();
-                
-                String localName = element.getLocalName();
-                String text = element.getText().trim();
-                if(localName.equals(WSHandlerConstants.PW_CALLBACK_CLASS)) {
-                    outflowConfiguration.setPasswordCallbackClass(text);
-                } else if(localName.equals(WSHandlerConstants.SIG_PROP_FILE)) {
-                    outflowConfiguration.setSignaturePropFile(text);
-                } else if(localName.equals(WSHandlerConstants.ENC_PROP_FILE)) {
-                    outflowConfiguration.setEncryptionPropFile(text);
-                } else if(localName.equals(WSHandlerConstants.ENC_CALLBACK_CLASS)) {
-                    outflowConfiguration.setEmbeddedKeyCallbackClass(text);
-                } else if(localName.equals(WSHandlerConstants.USER)) {
-                    outflowConfiguration.setUser(text);
-                } else if(localName.equals(WSHandlerConstants.ENCRYPTION_USER)) {
-                    outflowConfiguration.setEncryptionUser(text);
-                }
-            }
-            return outflowConfiguration;
-        }
-        return null;
-    }
-    
-    public static InflowConfiguration getInflowConfiguration(Parameter inflowConfigParam) throws AxisFault {
-
-        if (inflowConfigParam != null) {
-            OMElement inFlowParamElem = inflowConfigParam.getParameterElement();
-
-            OMElement actionElem = inFlowParamElem
-                    .getFirstChildWithName(new QName(WSSHandlerConstants.ACTION));
-            if (actionElem == null) {
-                throw new AxisFault(
-                        "Inflow configuration must contain an 'action' "
-                                + "elements the child of 'InflowSecurity' element");
-            }
-
-            InflowConfiguration inflowConfiguration = new InflowConfiguration();
-            
-            Iterator childElements = actionElem.getChildElements();
-            while (childElements.hasNext()) {
-                OMElement element = (OMElement) childElements.next();
-                
-                String localName = element.getLocalName();
-                String text = element.getText().trim();
-                
-                if(localName.equals(WSHandlerConstants.PW_CALLBACK_CLASS)) {
-                    inflowConfiguration.setPasswordCallbackClass(text);
-                } else if(localName.equals(WSHandlerConstants.SIG_PROP_FILE)) {
-                    inflowConfiguration.setSignaturePropFile(text);
-                } else if(localName.equals(WSHandlerConstants.DEC_PROP_FILE)) {
-                    inflowConfiguration.setDecryptionPropFile(text);
-                } else if (WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION
-                        .equals(localName)) {
-                    if ("false".equals(text)
-                            || "0".equals(text)) {
-                        inflowConfiguration
-                                .setEnableSignatureConfirmation(false);
-                    }
-                }
-            }
-            return inflowConfiguration;
-        }
-        return null;
-    }
-
-    private static void handleSignEncrParts(boolean signAllHeaders,
-            boolean signBody, boolean encrBody, MessageContext msgCtx,
-            int repetition) {
-        String soapNs = msgCtx.getEnvelope().getNamespace().getNamespaceURI();
-        if(signBody) {
-            //Add body signPart
-            String sigBodySigPart = "{Element}{" + soapNs + "}Body";
-            addSigPart(sigBodySigPart, msgCtx, repetition);
-        }
-        if(encrBody) {
-            //Encrypt body content
-            String encrBodyEncrPart = "{}{" + soapNs + "}Body";
-            addEncrPart(encrBodyEncrPart, msgCtx, repetition);
-        }
-        if(signAllHeaders) {
-            Iterator children = msgCtx.getEnvelope().getHeader().getChildElements();
-            while (children.hasNext()) {
-                OMElement element = (OMElement) children.next();
-                //Sign only the qualified headers
-                //TODO check whether we can sign the unqualified header elements
-                String ns = element.getNamespace().getNamespaceURI();
-                if(ns != null && ns.length() > 0) {
-                    addSigPart("{Element}{" + ns + "}" + element.getLocalName(),msgCtx, repetition);
-                }
-            }
-        }
-        
-    }
-    
-    private static void addSigPart(String sigPart, MessageContext msgCtx, int repetition) {
-        String key = Axis2Util.getKey(WSHandlerConstants.SIGNATURE_PARTS, false, repetition);
-        String existingSignParts = (String) msgCtx.getProperty(key);
-        if (existingSignParts != null && existingSignParts.length() > 0) {
-            // If the part is not already there as a sign part
-            if (existingSignParts.indexOf(sigPart) != -1) {
-                msgCtx.setProperty(key, existingSignParts + ";" + sigPart);
-            }
-        } else {
-            // If there are no signed parts
-            msgCtx.setProperty(key, sigPart);
-        }
-    }
-    
-    private static void addEncrPart(String encrPart, MessageContext msgCtx, int repetition) {
-        String key = Axis2Util.getKey(WSHandlerConstants.ENCRYPTION_PARTS, false, repetition);
-        String existingEncrParts = (String) msgCtx.getProperty(key);
-        if (existingEncrParts != null && existingEncrParts.length() > 0) {
-            if (existingEncrParts.indexOf(encrPart) != -1) {
-                msgCtx.setProperty(key, existingEncrParts + ";" + encrPart);
-            }
-        } else {
-            msgCtx.setProperty(key, encrPart);
-        }
-    }
-    
-}
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java b/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
index de28171..6035981 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
+++ b/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
@@ -29,6 +29,7 @@
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.dataretrieval.DRConstants;
 import org.apache.axis2.dataretrieval.client.MexClient;
+import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.mex.MexConstants;
 import org.apache.axis2.mex.MexException;
@@ -55,6 +56,7 @@
 import org.apache.rampart.policy.RampartPolicyData;
 import org.apache.rampart.policy.SupportingPolicyData;
 import org.apache.rampart.policy.model.CryptoConfig;
+import org.apache.rampart.policy.model.KerberosConfig;
 import org.apache.rampart.policy.model.RampartConfig;
 import org.apache.ws.secpolicy.SPConstants;
 import org.apache.ws.secpolicy.model.*;
@@ -75,6 +77,7 @@
 import org.apache.ws.security.message.WSSecEncryptedKey;
 import org.apache.ws.security.util.Loader;
 import org.apache.ws.security.util.WSSecurityUtil;
+import org.apache.ws.security.validate.KerberosTokenDecoder;
 import org.apache.xml.security.utils.Constants;
 import org.jaxen.JaxenException;
 import org.jaxen.XPath;
@@ -165,6 +168,64 @@
         return cbHandler;
     }
     
+    /**
+     * Instantiates any Kerberos token decoder implementation configured via {@link KerberosConfig#setKerberosTokenDecoderClass(String)}
+     * using the {@link AxisService#getClassLoader() class loader} of the specified message context's {@link MessageContext#getAxisService() service}.
+     * 
+     * @param msgContext The current message context. Must not be null and must contain a valid service instance.
+     * @param kerberosConfig Rampart's Kerberos configuration.
+     * 
+     * @return A new instance of {@link KerberosTokenDecoder} implementation configured via {@link KerberosConfig#setKerberosTokenDecoderClass(String)} or <code>null</code>
+     * if no Kerberos token decoder is configured.
+     * @throws RampartException If the class cannot be loaded or instantiated.
+     */
+    public static KerberosTokenDecoder getKerberosTokenDecoder(MessageContext msgContext, KerberosConfig kerberosConfig) throws RampartException {
+        if (kerberosConfig == null) {
+            throw new IllegalArgumentException("Kerberos config must not be null");
+        }
+        else if (msgContext == null) {
+            throw new IllegalArgumentException("Message context must not be null");
+        }
+        
+        AxisService service = msgContext.getAxisService();
+        if (service == null) {
+            throw new IllegalArgumentException("No service available in message context: " + msgContext.getLogIDString());
+        }
+        
+        KerberosTokenDecoder kerberosTokenDecoder;
+        
+        String kerberosTokenDecoderClass = kerberosConfig.getKerberosTokenDecoderClass();
+        if (kerberosTokenDecoderClass == null) {
+            if (log.isDebugEnabled()) {
+                log.debug("No Kerberos token decoder class configured for service: " + service.getName());
+            }
+            return null;
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug(String.format("Loading Kerberos token decoder class '%s' using class loader of service '%s'", kerberosTokenDecoderClass, service.getName()));
+        }
+        
+        ClassLoader classLoader = service.getClassLoader();
+        Class krbTokenDecoderClass;
+        try {
+            krbTokenDecoderClass = Loader.loadClass(classLoader, kerberosTokenDecoderClass);
+        } 
+        catch (ClassNotFoundException e) {
+            throw new RampartException("cannotLoadKrbTokenDecoderClass", 
+                    new String[] { kerberosTokenDecoderClass }, e);
+        }
+        
+        try {
+            kerberosTokenDecoder = (KerberosTokenDecoder) krbTokenDecoderClass.newInstance();
+        } catch (java.lang.Exception e) {
+            throw new RampartException("cannotCreateKrbTokenDecoderInstance",
+                    new String[] { kerberosTokenDecoderClass }, e);
+        }
+
+        return kerberosTokenDecoder;
+    }
+    
    /**
     * Returns an instance of PolicyValidatorCallbackHandler to be used to validate ws-security results.
     * 
@@ -1472,7 +1533,12 @@
                 String encrKeyId = (String) wsSecEngineResult.get(WSSecurityEngineResult.TAG_ID);
                 if (actInt == WSConstants.ENCR &&
                         encrKeyId != null) {
-                    return encrKeyId;
+                    if (encrKeyId.length() > 0) {
+                        return encrKeyId;
+                    }
+                    else if (log.isDebugEnabled()) {
+                        log.debug("Found encryption security processing result with empty id, skipping it: " + wsSecEngineResult);
+                    }
                 }
             }
         }
@@ -1924,4 +1990,58 @@
         QName value = code.getValueAsQName();
         return value == null ? false : value.getNamespaceURI().equals(WSConstants.WSSE_NS);
     }
+    
+    /**
+     * @param rpd Rampart policy data instance. Must not be null.
+     * @return A collection of all {@link UsernameToken} supporting token assertions in the specified Rampart policy instance. The method will check the following lists:
+     * <ul>
+     *     <li>{@link RampartPolicyData#getSupportingTokensList()}</li>
+     *     <li>{@link RampartPolicyData#getSignedSupportingTokens()}</li>
+     *     <li>{@link RampartPolicyData#getSignedEndorsingSupportingTokens()}</li>
+     *     <li>{@link RampartPolicyData#getEndorsingSupportingTokens()}</li>
+     *     <li>{@link RampartPolicyData#getEncryptedSupportingTokens()}</li>
+     *     <li>{@link RampartPolicyData#getSignedEncryptedSupportingTokens()}</li>
+     *     <li>{@link RampartPolicyData#getEndorsingEncryptedSupportingTokens()}</li>
+     *     <li>{@link RampartPolicyData#getSignedEndorsingEncryptedSupportingTokens()}</li>
+     * </ul>
+     */
+    public static Collection<UsernameToken> getUsernameTokens(RampartPolicyData rpd) {
+        Collection<UsernameToken> usernameTokens = new ArrayList<UsernameToken>();
+        
+        List<SupportingToken> supportingToks = rpd.getSupportingTokensList();
+        for (SupportingToken suppTok : supportingToks) {
+            usernameTokens.addAll(getUsernameTokens(suppTok));
+        }
+        
+        usernameTokens.addAll(getUsernameTokens(rpd.getSignedSupportingTokens()));
+        usernameTokens.addAll(getUsernameTokens(rpd.getSignedEndorsingSupportingTokens()));
+        usernameTokens.addAll(getUsernameTokens(rpd.getEndorsingSupportingTokens()));
+        usernameTokens.addAll(getUsernameTokens(rpd.getEncryptedSupportingTokens()));
+        usernameTokens.addAll(getUsernameTokens(rpd.getSignedEncryptedSupportingTokens()));
+        usernameTokens.addAll(getUsernameTokens(rpd.getEndorsingEncryptedSupportingTokens()));
+        usernameTokens.addAll(getUsernameTokens(rpd.getSignedEndorsingEncryptedSupportingTokens()));
+
+        return usernameTokens;
+    }
+    
+    /**
+     * @param suppTok The {@link SupportingToken} assertion to check for username tokens.
+     * @return A collection of all tokens in the specified <code>suppTok</code> SupportingToken assertion which are instances of {@link UsernameToken}.
+     * If the specified  <code>suppTok</code> SupportingToken assertion is <code>null</code>, an empty collection will be returned.
+     */
+    public static Collection<UsernameToken> getUsernameTokens(SupportingToken suppTok) {
+        
+        if (suppTok == null) {
+            return new ArrayList<UsernameToken>();
+        }
+        
+        Collection<UsernameToken> usernameTokens = new ArrayList<UsernameToken>();
+        for (org.apache.ws.secpolicy.model.Token token : suppTok.getTokens()) {
+            if (token instanceof UsernameToken) {
+                usernameTokens.add((UsernameToken)token);
+            }
+        }
+        
+        return usernameTokens;
+    }
 }
diff --git a/modules/rampart-core/src/main/java/META-INF/services/org.apache.neethi.builders.AssertionBuilder b/modules/rampart-core/src/main/resources/META-INF/services/org.apache.neethi.builders.AssertionBuilder
similarity index 73%
rename from modules/rampart-core/src/main/java/META-INF/services/org.apache.neethi.builders.AssertionBuilder
rename to modules/rampart-core/src/main/resources/META-INF/services/org.apache.neethi.builders.AssertionBuilder
index 34900b9..a641f80 100644
--- a/modules/rampart-core/src/main/java/META-INF/services/org.apache.neethi.builders.AssertionBuilder
+++ b/modules/rampart-core/src/main/resources/META-INF/services/org.apache.neethi.builders.AssertionBuilder
@@ -1,3 +1,4 @@
 org.apache.rampart.policy.builders.CryptoConfigBuilder
 org.apache.rampart.policy.builders.RampartConfigBuilder
-org.apache.rampart.policy.builders.SSLConfigBuilder
\ No newline at end of file
+org.apache.rampart.policy.builders.SSLConfigBuilder
+org.apache.rampart.policy.builders.KerberosConfigBuilder
\ No newline at end of file
diff --git a/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties b/modules/rampart-core/src/main/resources/org/apache/rampart/errors.properties
similarity index 89%
rename from modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
rename to modules/rampart-core/src/main/resources/org/apache/rampart/errors.properties
index 8e188b1..034b91d 100644
--- a/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
+++ b/modules/rampart-core/src/main/resources/org/apache/rampart/errors.properties
@@ -36,6 +36,7 @@
 errorInObtainingSct=Error in obtaining SCT from \"{0}\"
 errorInObtainingToken=Error in obtaining a token
 errorInExtractingMsgProps = Error in extracting message properties
+securityPolicyNamespaceCannotBeNull=Security policy namespace cannot be null
 userMissing = No user value in the rampart configuration policy
 cbHandlerMissing = Password CallbackHandler not specified in rampart configuration policy or the CallbackHandler instance not available in the MessageContext
 errorInGettingPasswordForUser = Error in getting password for user : \"{0}\"
@@ -46,6 +47,7 @@
 errorInDerivedKeyTokenSignature = Error in DerivedKeyToken signature
 errorInSignatureWithX509Token = Error in signature with X509Token
 errorInSignatureWithACustomToken = Error in signature with a custom token
+errorInSignatureWithKerberosToken = Error in signature with KerberosToken
 errorCreatingEncryptedKey = Error in creating an encrypted key
 errorGettingSignatureValuesForSigconf = Error in getting signature values for signature confirmation
 cannotLoadPWCBClass = Cannot load password callback class: {0}
@@ -103,4 +105,11 @@
 invalidNonceLifeTime = Invalid value for nonceLifeTime in rampart configuration file.
 invalidIssuerAddress = Invalid value for Issuer
 invalidSignatureAlgo=Invalid signature algorithm for Asymmetric binding
+invalidUsernameTokenType = Invalid UsernameToken Type.
 
+#Rampart Kerberos-specific errors
+invalidServicePrincipalNameForm = Invalid servicePrincipalNameForm found in Rampart configuration ({0}). The supported service principal name forms are: \"{1}\", \"{2}\".
+noKerberosConfigDefined = No kerberosConfig policy assertion defined in rampart config.
+errorInBuildingKereberosToken = Error in building kereberos token.
+cannotLoadKrbTokenDecoderClass = Cannot load Kerberos token decoder class: {0}
+cannotCreateKrbTokenDecoderInstance = Cannot create instance of Kerberos token decoder : {0}
\ No newline at end of file
diff --git a/modules/rampart-core/src/test/java/org/apache/rampart/policy/builders/KerberosConfigBuilderTest.java b/modules/rampart-core/src/test/java/org/apache/rampart/policy/builders/KerberosConfigBuilderTest.java
new file mode 100644
index 0000000..b0addbf
--- /dev/null
+++ b/modules/rampart-core/src/test/java/org/apache/rampart/policy/builders/KerberosConfigBuilderTest.java
@@ -0,0 +1,121 @@
+/*
+ * 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.rampart.policy.builders;
+
+import static com.google.common.truth.Truth.assertAbout;
+import static org.apache.axiom.truth.xml.XMLTruth.xml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamWriter;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyBuilder;
+import org.apache.rampart.policy.RampartPolicyBuilder;
+import org.apache.rampart.policy.RampartPolicyData;
+import org.apache.rampart.policy.model.KerberosConfig;
+import org.apache.rampart.policy.model.RampartConfig;
+import org.apache.ws.secpolicy.WSSPolicyException;
+
+public class KerberosConfigBuilderTest extends TestCase {
+
+    public static final String KERBEROS_CONFIG_POLICY_FILE = "kerberosConfig.policy";
+    
+    private static final Log log = LogFactory.getLog(KerberosConfigBuilderTest.class);
+    
+    public void testBuildKerberosConfig() throws WSSPolicyException {
+        Policy kerberosConfigPolicy = loadKerberosConfigPolicy();
+        assertNotNull(String.format("Failed to parse policy file: %s", KERBEROS_CONFIG_POLICY_FILE), kerberosConfigPolicy);
+        
+        Iterator<List<Assertion>> iter = kerberosConfigPolicy.getAlternatives();
+         
+        assertTrue(String.format("No policy alternatives found in policy file: %s", KERBEROS_CONFIG_POLICY_FILE), iter.hasNext());
+         
+         //Process policy and build policy data
+        RampartPolicyData policyData = RampartPolicyBuilder.build(iter.next());
+
+        RampartConfig rampartConfig = policyData.getRampartConfig();
+        assertNotNull(String.format("No rampartConfig found in policy file: %s", KERBEROS_CONFIG_POLICY_FILE), rampartConfig);
+        KerberosConfig kerberosConfig = rampartConfig.getKerberosConfig();
+        assertNotNull(String.format("No kerberosConfig found in policy file: %s", KERBEROS_CONFIG_POLICY_FILE), kerberosConfig);
+        
+        assertEquals("Kerberos jaas context name not configured as expected.", "alice", kerberosConfig.getJaasContext());
+        assertEquals("Kerberos principal name not configured as expected.", "alice", kerberosConfig.getPrincipalName());
+        assertEquals("Kerberos principal password not configured as expected.", "changeit", kerberosConfig.getPrincipalPassword());
+        assertEquals("Kerberos service principal name not configured as expected.", "bob/example.com", kerberosConfig.getServicePrincipalName());
+        assertEquals("Kerberos token decoder class not configured as expected.", "org.foo.KerberosTokenDecoderImpl", kerberosConfig.getKerberosTokenDecoderClass());
+        assertTrue("Request for Kerberos credential delegation is expected to be enabled.", kerberosConfig.isRequstCredentialDelegation());
+    }
+
+    public void testSerializeKerberosConfig() throws Exception {
+        Policy kerberosConfigPolicy = loadKerberosConfigPolicy();
+        assertNotNull(String.format("Failed to parse policy file: %s", KERBEROS_CONFIG_POLICY_FILE), kerberosConfigPolicy);
+        
+        //serialize the kerberos config policy
+        StringWriter writer = new StringWriter();
+        XMLStreamWriter streamWriter = null;
+        try {
+            streamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(writer);
+            kerberosConfigPolicy.serialize(streamWriter);
+        }
+        finally {
+            if (streamWriter != null) {
+                streamWriter.close();
+            }
+        }
+        
+        assertAbout(xml())
+                .that(writer.toString())
+                .ignoringWhitespace()
+                .hasSameContentAs(KerberosConfigBuilderTest.class.getResource(KERBEROS_CONFIG_POLICY_FILE));
+    }
+
+    private Policy loadKerberosConfigPolicy() {
+        InputStream kerberosConfigStream = null;
+        try {
+            kerberosConfigStream = this.getClass().getResourceAsStream(KERBEROS_CONFIG_POLICY_FILE);
+            PolicyBuilder builder = new PolicyBuilder();
+            return builder.getPolicy(kerberosConfigStream);
+        }
+        finally {
+            closeStream(kerberosConfigStream);
+        }
+    }
+    
+    private void closeStream(InputStream in) {
+        if (in != null) {
+            try {
+                in.close();
+            }
+            catch (IOException e) {
+                log.error("Failed to close input stream.", e);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/modules/rampart-core/src/test/resources/org/apache/rampart/policy/builders/kerberosConfig.policy b/modules/rampart-core/src/test/resources/org/apache/rampart/policy/builders/kerberosConfig.policy
new file mode 100644
index 0000000..f727eb6
--- /dev/null
+++ b/modules/rampart-core/src/test/resources/org/apache/rampart/policy/builders/kerberosConfig.policy
@@ -0,0 +1,22 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <rampart:RampartConfig xmlns:rampart="http://ws.apache.org/rampart/policy">
+                <rampart:timestampPrecisionInMilliseconds>true</rampart:timestampPrecisionInMilliseconds>
+                <rampart:timestampTTL>300</rampart:timestampTTL>
+                <rampart:timestampMaxSkew>300</rampart:timestampMaxSkew>
+                <rampart:timestampStrict>false</rampart:timestampStrict>
+                <rampart:nonceLifeTime>300</rampart:nonceLifeTime>
+                <rampart:kerberosConfig>
+                    <rampart:jaasContext>alice</rampart:jaasContext>
+                    <rampart:principalName>alice</rampart:principalName>
+                    <rampart:principalPassword>changeit</rampart:principalPassword>
+                    <rampart:servicePrincipalName>bob/example.com</rampart:servicePrincipalName>
+                    <rampart:servicePrincipalNameForm>username</rampart:servicePrincipalNameForm>
+                    <rampart:kerberosTokenDecoderClass>org.foo.KerberosTokenDecoderImpl</rampart:kerberosTokenDecoderClass>
+                    <rampart:requestCredentialDelegation>true</rampart:requestCredentialDelegation>
+                </rampart:kerberosConfig>
+            </rampart:RampartConfig>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
\ No newline at end of file
diff --git a/modules/rampart-integration/pom.xml b/modules/rampart-integration/pom.xml
index 4a0af24..485aa59 100644
--- a/modules/rampart-integration/pom.xml
+++ b/modules/rampart-integration/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.rampart</groupId>
         <artifactId>rampart-project</artifactId>
-        <version>1.7.0-SNAPSHOT</version>
+        <version>1.8.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
 
@@ -41,41 +41,6 @@
                 <artifactId>maven-dependency-plugin</artifactId>
                 <executions>
                     <execution>
-                        <id>copy-mars</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>copy</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>org.apache.rampart</groupId>
-                                    <artifactId>rampart</artifactId>
-                                    <version>${project.version}</version>
-                                    <type>mar</type>
-                                    <overWrite>true</overWrite>
-                                    <outputDirectory>target/artifacts</outputDirectory>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.rampart</groupId>
-                                    <artifactId>rahas</artifactId>
-                                    <version>${project.version}</version>
-                                    <type>mar</type>
-                                    <overWrite>true</overWrite>
-                                    <outputDirectory>target/artifacts</outputDirectory>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.axis2</groupId>
-                                    <artifactId>addressing</artifactId>
-                                    <version>${axis2.version}</version>
-                                    <type>mar</type>
-                                    <overWrite>true</overWrite>
-                                    <outputDirectory>target/artifacts</outputDirectory>
-                                </artifactItem>
-                            </artifactItems>
-                        </configuration>
-                    </execution>
-                    <execution>
                         <id>copy-endorsed</id>
                         <phase>process-resources</phase>
                         <goals>
@@ -90,85 +55,120 @@
                 </executions>
             </plugin>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
+                <groupId>org.apache.axis2</groupId>
+                <artifactId>axis2-repo-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>create-test-repo</id>
+                        <goals>
+                            <goal>create-test-repository</goal>
+                        </goals>
+                        <configuration>
+                            <modules>addressing,rampart</modules>
+                            <outputDirectory>target/test-classes</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>create-rampart-client-repo</id>
+                        <goals>
+                            <goal>create-test-repository</goal>
+                        </goals>
+                        <configuration>
+                            <modules>addressing,rampart,rahas</modules>
+                            <outputDirectory>target/test-resources/rampart_client_repo</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>create-rampart-service-repo</id>
+                        <goals>
+                            <goal>create-test-repository</goal>
+                        </goals>
+                        <configuration>
+                            <modules>addressing,rampart,rahas</modules>
+                            <axis2xml>src/test/resources/conf/axis2.xml</axis2xml>
+                            <outputDirectory>target/test-resources/rampart_service_repo</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>create-rahas-client-repo</id>
+                        <goals>
+                            <goal>create-test-repository</goal>
+                        </goals>
+                        <configuration>
+                            <modules>addressing,rampart</modules>
+                            <outputDirectory>target/test-resources/rahas_client_repo</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>create-rahas-service-repo-1</id>
+                        <goals>
+                            <goal>create-test-repository</goal>
+                        </goals>
+                        <configuration>
+                            <modules>addressing,rampart,rahas</modules>
+                            <axis2xml>src/test/resources/conf/axis2.xml</axis2xml>
+                            <outputDirectory>target/test-resources/rahas_service_repo_1</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>create-rahas-service-repo-3</id>
+                        <goals>
+                            <goal>create-test-repository</goal>
+                        </goals>
+                        <configuration>
+                            <modules>addressing,rampart,rahas</modules>
+                            <axis2xml>src/test/resources/conf/axis2.xml</axis2xml>
+                            <outputDirectory>target/test-resources/rahas_service_repo_3</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>create-default-security-client-repo</id>
+                        <goals>
+                            <goal>create-test-repository</goal>
+                        </goals>
+                        <configuration>
+                            <modules>addressing,rampart</modules>
+                            <axis2xml>src/test/resources/conf/axis2.xml</axis2xml>
+                            <configurationDirectory>conf</configurationDirectory>
+                            <outputDirectory>target/test-resources/default_security_client_repo</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>create-rahas-service-repo-5</id>
+                        <goals>
+                            <goal>create-test-repository</goal>
+                        </goals>
+                        <configuration>
+                            <modules>addressing,rampart,rahas</modules>
+                            <axis2xml>src/test/resources/conf/axis2.xml</axis2xml>
+                            <outputDirectory>target/test-resources/rahas_service_repo_5</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-antrun-plugin</artifactId>
-                <version>1.1</version>
                 <executions>
-                    <execution>
-                        <id>generate-source</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                        <configuration>
-                            <tasks>
-                                <java classname="org.apache.axis2.wsdl.WSDL2Java" fork="true">
-                                    <arg line="-uri src/main/resources/ping/ping.wsdl -ss -o target/generated-code -p org.apache.axis2.oasis.ping -d xmlbeans -g" />
-                                    <classpath refid="maven.dependency.classpath" />
-                                    <classpath refid="maven.compile.classpath" />
-                                    <classpath refid="maven.runtime.classpath" />
-                                </java>
-                                <!-- copy the service impl -->
-                                <copy file="src/main/resources/ping/src/org/apache/axis2/oasis/ping/PingPortSkeleton.java" tofile="target/generated-code/src/org/apache/axis2/oasis/ping/PingPortSkeleton.java" overwrite="yes" />
-                                <!-- Password callback class for the interop service -->
-                                <copy file="src/main/resources/ping/src/org/apache/axis2/security/PWCallback.java" tofile="target/generated-code/src/org/apache/axis2/security/PWCallback.java" overwrite="yes" />
-                                <!-- Interop client -->
-                                <copy file="src/main/resources/ping/src/org/apache/axis2/security/InteropScenarioClient.java" tofile="target/generated-code/src/org/apache/axis2/security/InteropScenarioClient.java" overwrite="yes" />
-
-                                <copy todir="target/test-classes">
-                                    <fileset dir="target/generated-code/resources">
-                                        <include name="**/*" />
-                                    </fileset>
-                                </copy>
-
-
-                                <javac srcdir="target/generated-code" destdir="target/classes" fork="true">
-                                    <classpath refid="maven.dependency.classpath" />
-                                    <classpath refid="maven.compile.classpath" />
-                                    <classpath refid="maven.runtime.classpath" />
-                                </javac>
-
-                            </tasks>
-                        </configuration>
-                    </execution>
+                   
                     <execution>
                         <id>create-test-resources</id>
                         <phase>process-test-resources</phase>
                         <configuration>
                             <tasks>
                                 <property name="addressing.mar" value="addressing-${axis2.version}.mar" />
-                                <copy file="target/artifacts/addressing-${axis2.version}.mar" tofile="target/test-classes/modules/addressing-${axis2.version}.mar" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-classes/modules/rampart-${project.version}.mar" />
 
                                 <mkdir dir="target/temp-ramp" />
                                 <mkdir dir="target/temp-ramp/META-INF" />
 
-                                <copy overwrite="yes" file="target/classes/org/apache/rampart/Service.class" tofile="target/temp-ramp/org/apache/rampart/Service.class" />
-                                <copy overwrite="yes" file="target/classes/org/apache/rampart/PWCallback.class" tofile="target/temp-ramp/org/apache/rampart/PWCallback.class" />
                                 <copy overwrite="yes" file="src/test/resources/rampart/store.jks" tofile="target/temp-ramp/store.jks" />
                                 <!--path id="ramp.client.props" location="test-resources/rampart"/-->
                                 <!--maven:addPath id="maven.dependency.classpath" refid="ramp.client.props" -->
                                 <mkdir dir="target/test-resources/rampart_client_repo" />
                                 <mkdir dir="target/test-resources/rampart_client_repo/conf" />
-                                <mkdir dir="target/test-resources/rampart_client_repo/modules" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/rampart_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="target/artifacts/rahas-${project.version}.mar" tofile="target/test-resources/rampart_client_repo/modules/rahas-${project.version}.mar" />
-                                <copy file="target/artifacts/addressing-${axis2.version}.mar" tofile="target/test-resources/rampart_client_repo/modules/addressing-${axis2.version}.mar" />
                                 <mkdir dir="target/test-resources/rampart_service_repo" />
                                 <mkdir dir="target/test-resources/rampart_service_repo/conf" />
                                 <mkdir dir="target/test-resources/rampart_service_repo/services" />
-                                <mkdir dir="target/test-resources/rampart_service_repo/modules" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/rampart_service_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="target/artifacts/rahas-${project.version}.mar" tofile="target/test-resources/rampart_service_repo/modules/rahas-${project.version}.mar" />
-                                <copy file="target/artifacts/addressing-${axis2.version}.mar" tofile="target/test-resources/rampart_service_repo/modules/addressing-${axis2.version}.mar" />
 
                                 <!-- Service 1 -->
                                 <copy overwrite="yes" file="src/test/resources/rampart/services-1.xml" tofile="target/temp-ramp/META-INF/services.xml" />
@@ -276,6 +276,10 @@
                                 <!-- Service 34 -->
                                 <copy overwrite="yes" file="src/test/resources/rampart/services-34.xml" tofile="target/temp-ramp/META-INF/services.xml" />
                                 <jar jarfile="target/test-resources/rampart_service_repo/services/SecureService34.aar" basedir="target/temp-ramp" />
+                                
+                                <!-- Service 35 -->
+                                <copy overwrite="yes" file="src/test/resources/rampart/services-35.xml" tofile="target/temp-ramp/META-INF/services.xml" />
+                                <jar jarfile="target/test-resources/rampart_service_repo/services/SecureService35.aar" basedir="target/temp-ramp" />
 
 
                                 <!-- Service SC-1 -->
@@ -294,27 +298,36 @@
                                 <jar jarfile="target/test-resources/rampart_service_repo/services/SecureServiceSC3.aar" basedir="target/temp-ramp" />
 
                                 <!-- Service SC-4 This is with standard secure conversation specification -->
-                                <copy overwrite="yes" file="src/test/resources/rampart/issuer.properties" tofile="target/temp-ramp/issuer.properties"/>
-                                <copy overwrite="yes" file="src/test/resources/rampart/services-sc-4.xml" tofile="target/temp-ramp/META-INF/services.xml"/>
-                                <jar jarfile="target/test-resources/rampart_service_repo/services/SecureServiceSC4.aar"  basedir="target/temp-ramp"/>
+                                <copy overwrite="yes" file="src/test/resources/rampart/issuer.properties" tofile="target/temp-ramp/issuer.properties" />
+                                <copy overwrite="yes" file="src/test/resources/rampart/services-sc-4.xml" tofile="target/temp-ramp/META-INF/services.xml" />
+                                <jar jarfile="target/test-resources/rampart_service_repo/services/SecureServiceSC4.aar" basedir="target/temp-ramp" />
 
                                 <!-- Service SC-5 This is with standard secure conversation specification -->
-                                <copy overwrite="yes" file="src/test/resources/rampart/issuer.properties" tofile="target/temp-ramp/issuer.properties"/>
-                                <copy overwrite="yes" file="src/test/resources/rampart/services-sc-5.xml" tofile="target/temp-ramp/META-INF/services.xml"/>
-                                <jar jarfile="target/test-resources/rampart_service_repo/services/SecureServiceSC5.aar" basedir="target/temp-ramp"/>
+                                <copy overwrite="yes" file="src/test/resources/rampart/issuer.properties" tofile="target/temp-ramp/issuer.properties" />
+                                <copy overwrite="yes" file="src/test/resources/rampart/services-sc-5.xml" tofile="target/temp-ramp/META-INF/services.xml" />
+                                <jar jarfile="target/test-resources/rampart_service_repo/services/SecureServiceSC5.aar" basedir="target/temp-ramp" />
 
                                 <!-- Service SC-6 This is with standard secure conversation specification -->
-                                <copy overwrite="yes" file="src/test/resources/rampart/issuer.properties" tofile="target/temp-ramp/issuer.properties"/>
-                                <copy overwrite="yes" file="src/test/resources/rampart/services-sc-6.xml" tofile="target/temp-ramp/META-INF/services.xml"/>
-                                <jar jarfile="target/test-resources/rampart_service_repo/services/SecureServiceSC6.aar" basedir="target/temp-ramp"/>
+                                <copy overwrite="yes" file="src/test/resources/rampart/issuer.properties" tofile="target/temp-ramp/issuer.properties" />
+                                <copy overwrite="yes" file="src/test/resources/rampart/services-sc-6.xml" tofile="target/temp-ramp/META-INF/services.xml" />
+                                <jar jarfile="target/test-resources/rampart_service_repo/services/SecureServiceSC6.aar" basedir="target/temp-ramp" />
+                                
+                                <!--  Kerberos Services -->
+                                <copy overwrite="yes" file="src/test/resources/rampart/kerberos/KerberosOverTransportKeytab.xml" tofile="target/temp-ramp/META-INF/services.xml" />
+                                <jar jarfile="target/test-resources/rampart_service_repo/services/KerberosOverTransportKeytab.aar" basedir="target/temp-ramp" />
+                                
+                                <copy overwrite="yes" file="src/test/resources/rampart/kerberos/KerberosOverTransportPWCB.xml" tofile="target/temp-ramp/META-INF/services.xml" />
+                                <jar jarfile="target/test-resources/rampart_service_repo/services/KerberosOverTransportPWCB.aar" basedir="target/temp-ramp" />
+                                
+                                <copy overwrite="yes" file="src/test/resources/rampart/kerberos/KerberosDelegation.xml" tofile="target/temp-ramp/META-INF/services.xml" />
+                                <jar jarfile="target/test-resources/rampart_service_repo/services/KerberosDelegation.aar" basedir="target/temp-ramp" />
+                                
 
                                 <!--
                                  Set up the infra for rahas tests and the rahas client repo
                                 -->
                                 <mkdir dir="target/temp-rahas" />
                                 <mkdir dir="target/temp-rahas/META-INF" />
-                                <copy overwrite="yes" file="target/classes/org/apache/rahas/Service.class" tofile="target/temp-rahas/org/apache/rahas/Service.class" />
-                                <copy overwrite="yes" file="target/classes/org/apache/rahas/PWCallback.class" tofile="target/temp-rahas/org/apache/rahas/PWCallback.class" />
                                 <copy overwrite="yes" todir="target/temp-rahas">
                                     <fileset dir="src/test/resources/rahas">
                                         <include name="issuer.properties" />
@@ -325,17 +338,10 @@
                                 <!--addPath id="maven.dependency.classpath" refid="rahas.client.props"-->
                                 <mkdir dir="target/test-resources/rahas_client_repo" />
                                 <mkdir dir="target/test-resources/rahas_client_repo/conf" />
-                                <mkdir dir="target/test-resources/rahas_client_repo/modules" />
-                                <copy file="target/artifacts/addressing-${axis2.version}.mar" tofile="target/test-resources/rahas_client_repo/modules/addressing-${axis2.version}.mar" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/rahas_client_repo/modules/rampart-${project.version}.mar" />
                                 <!-- Rahas Test1: SAML Token test -->
                                 <mkdir dir="target/test-resources/rahas_service_repo_1" />
                                 <mkdir dir="target/test-resources/rahas_service_repo_1/conf" />
                                 <mkdir dir="target/test-resources/rahas_service_repo_1/services" />
-                                <mkdir dir="target/test-resources/rahas_service_repo_1/modules" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/rahas_service_repo_1/modules/rampart-${project.version}.mar" />
-                                <copy file="target/artifacts/rahas-${project.version}.mar" tofile="target/test-resources/rahas_service_repo_1/modules/rahas-${project.version}.mar" />
-                                <copy file="target/artifacts/addressing-${axis2.version}.mar" tofile="target/test-resources/rahas_service_repo_1/modules/addressing-${axis2.version}.mar" />
                                 <!-- copy the services.xml and create the aar -->
                                 <copy overwrite="yes" file="src/test/resources/rahas/s1-services.xml" tofile="target/temp-rahas/META-INF/services.xml" />
                                 <jar jarfile="target/test-resources/rahas_service_repo_1/services/SecureService.aar" basedir="target/temp-rahas" />
@@ -346,211 +352,23 @@
                                 <mkdir dir="target/test-resources/rahas_service_repo_3" />
                                 <mkdir dir="target/test-resources/rahas_service_repo_3/conf" />
                                 <mkdir dir="target/test-resources/rahas_service_repo_3/services" />
-                                <mkdir dir="target/test-resources/rahas_service_repo_3/modules" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/rahas_service_repo_3/modules/rampart-${project.version}.mar" />
-                                <copy file="target/artifacts/rahas-${project.version}.mar" tofile="target/test-resources/rahas_service_repo_3/modules/rahas-${project.version}.mar" />
-                                <copy file="target/artifacts/addressing-${axis2.version}.mar" tofile="target/test-resources/rahas_service_repo_3/modules/addressing-${axis2.version}.mar" />
                                 <!-- copy the services.xml and create the aar -->
                                 <copy overwrite="yes" file="src/test/resources/rahas/s3-services.xml" tofile="target/temp-rahas/META-INF/services.xml" />
                                 <jar jarfile="target/test-resources/rahas_service_repo_3/services/SecureService.aar" basedir="target/temp-rahas" />
                                 <!--
                                  Rahas Test 3 & 4: RahasSAMLTokenUTForHoKTest and RahasSAMLTokenUTForHoKV1205Test : END
                                 -->
-                                <mkdir dir="target/test-resources/default_security_client_repo" />
-                                <mkdir dir="target/test-resources/default_security_client_repo/conf" />
-                                <mkdir dir="target/test-resources/default_security_client_repo/modules" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/default_security_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="target/artifacts/addressing-${axis2.version}.mar" tofile="target/test-resources/default_security_client_repo/modules/addressing-${axis2.version}.mar" />
-                                <copy file="src/test/resources/conf/axis2.xml" tofile="target/test-resources/default_security_client_repo/conf/axis2.xml" />
                                 <!--
                         RahasSAMLTokenAttributeTest
                         -->
                                 <mkdir dir="target/test-resources/rahas_service_repo_5" />
                                 <mkdir dir="target/test-resources/rahas_service_repo_5/conf" />
                                 <mkdir dir="target/test-resources/rahas_service_repo_5/services" />
-                                <mkdir dir="target/test-resources/rahas_service_repo_5/modules" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/rahas_service_repo_5/modules/rampart-${project.version}.mar" />
-                                <copy file="target/artifacts/rahas-${project.version}.mar" tofile="target/test-resources/rahas_service_repo_5/modules/rahas-${project.version}.mar" />
-                                <copy file="target/artifacts/addressing-${axis2.version}.mar" tofile="target/test-resources/rahas_service_repo_5/modules/addressing-${axis2.version}.mar" />
                                 <!-- copy the services.xml and create the aar -->
                                 <copy overwrite="yes" file="src/test/resources/rahas/s5-services.xml" tofile="target/temp-rahas/META-INF/services.xml" />
                                 <jar jarfile="target/test-resources/rahas_service_repo_5/services/SecureService.aar" basedir="target/temp-rahas" />
 
                                 <!--RahasAttributeTest END-->
-                                <!-- Scenario 1 -->
-                                <mkdir dir="target/test-resources/scenario1_client_repo" />
-                                <mkdir dir="target/test-resources/scenario1_client_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario1_client_repo/modules" />
-                                <mkdir dir="target/test-resources/scenario1_client_repo/services" />
-                                <mkdir dir="target/test-resources/scenario1_service_repo" />
-                                <mkdir dir="target/test-resources/scenario1_service_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario1_service_repo/services" />
-                                <mkdir dir="target/test-resources/scenario1_service_repo/modules" />
-                                <!-- setup scenario 1 client repository-->
-                                <copy file="src/test/resources/security/s1.client.axis2.xml" tofile="target/test-resources/scenario1_client_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario1_client_repo/modules/rampart-${project.version}.mar" />
-                                <!-- setup scenario 1 service repository-->
-                                <copy file="src/test/resources/security/s1.service.axis2.xml" tofile="target/test-resources/scenario1_service_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario1_service_repo/modules/rampart-${project.version}.mar" />
-
-                                <mkdir dir="target/temp-interop/META-INF" />
-
-                                <!-- Create the .aar file -->
-                                <copy file="src/test/resources/security/s1.service.xml" tofile="target/temp-interop/META-INF/services.xml" overwrite="true" />
-                                <jar jarfile="target/test-resources/scenario1_service_repo/services/PingPort.aar" basedir="target/temp-interop" />
-                                <!-- Scenario 2 - Setup the client and service repos -->
-                                <mkdir dir="target/test-resources/scenario2_client_repo" />
-                                <mkdir dir="target/test-resources/scenario2_client_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario2_client_repo/modules" />
-                                <mkdir dir="target/test-resources/scenario2_service_repo" />
-                                <mkdir dir="target/test-resources/scenario2_service_repo/ conf" />
-                                <mkdir dir="target/test-resources/scenario2_service_repo/services" />
-                                <mkdir dir="target/test-resources/scenario2_service_repo/modules" />
-                                <copy file="src/test/resources/security/s2.client.axis2.xml" tofile="target/test-resources/scenario2_client_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario2_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s2.service.axis2.xml" tofile="target/test-resources/scenario2_service_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario2_service_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s2.service.xml" tofile="target/temp-interop/META-INF/services.xml" overwrite="true" />
-                                <jar jarfile="target/test-resources/scenario2_service_repo/services/PingPort.aar" basedir="target/temp-interop" />
-
-                                <!-- Scenario 2a - set up repos -->
-                                <mkdir dir="target/test-resources/scenario2a_client_repo" />
-                                <mkdir dir="target/test-resources/scenario2a_client_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario2a_client_repo/modules" />
-                                <mkdir dir="target/test-resources/scenario2a_service_repo" />
-                                <mkdir dir="target/test-resources/scenario2a_service_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario2a_service_repo/services" />
-                                <mkdir dir="target/test-resources/scenario2a_service_repo/modules" />
-                                <copy file="src/test/resources/security/s2a.client.axis2.xml" tofile="target/test-resources/scenario2a_client_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario2a_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s2a.service.axis2.xml" tofile="target/test-resources/scenario2a_service_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario2a_service_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s2a.service.xml" tofile="target/temp-interop/META-INF/services.xml" overwrite="true" />
-                                <jar jarfile="target/test-resources/scenario2a_service_repo/services/PingPort.aar" basedir="target/temp-interop" />
-                                <!-- Scenario 3 -->
-                                <mkdir dir="target/test-resources/scenario3_client_repo" />
-                                <mkdir dir="target/test-resources/scenario3_client_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario3_client_repo/modules" />
-                                <mkdir dir="target/test-resources/scenario3_service_repo" />
-                                <mkdir dir="target/test-resources/scenario3_service_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario3_service_repo/services" />
-                                <mkdir dir="target/test-resources/scenario3_service_repo/modules" />
-                                <copy file="src/test/resources/security/s3.client.axis2.xml" tofile="target/test-resources/scenario3_client_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario3_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s3.service.axis2.xml" tofile="target/test-resources/scenario3_service_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario3_service_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s3.service.xml" tofile="target/temp-interop/META-INF/services.xml" overwrite="true" />
-                                <jar jarfile="target/test-resources/scenario3_service_repo/services/PingPort.aar" basedir="target/temp-interop" />
-
-                                <!-- Scenario 4 -->
-                                <mkdir dir="target/test-resources/scenario4_client_repo" />
-                                <mkdir dir="target/test-resources/scenario4_client_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario4_client_repo/modules" />
-                                <mkdir dir="target/test-resources/scenario4_service_repo" />
-                                <mkdir dir="target/test-resources/scenario4_service_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario4_service_repo/services" />
-                                <mkdir dir="target/test-resources/scenario4_service_repo/modules" />
-                                <copy file="src/test/resources/security/s4.client.axis2.xml" tofile="target/test-resources/scenario4_client_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario4_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s4.service.axis2.xml" tofile="target/test-resources/scenario4_service_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario4_service_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s4.service.xml" tofile="target/temp-interop/META-INF/services.xml" overwrite="true" />
-                                <jar jarfile="target/test-resources/scenario4_service_repo/services/PingPort.aar" basedir="target/temp-interop" />
-
-                                <!-- Scenario 5 -->
-                                <mkdir dir="target/test-resources/scenario5_client_repo" />
-                                <mkdir dir="target/test-resources/scenario5_client_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario5_client_repo/modules" />
-                                <mkdir dir="target/test-resources/scenario5_service_repo" />
-                                <mkdir dir="target/test-resources/scenario5_service_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario5_service_repo/services" />
-                                <mkdir dir="target/test-resources/scenario5_service_repo/modules" />
-                                <copy file="src/test/resources/security/s5.client.axis2.xml" tofile="target/test-resources/scenario5_client_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario5_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s5.service.axis2.xml" tofile="target/test-resources/scenario5_service_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario5_service_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s5.service.xml" tofile="target/temp-interop/META-INF/services.xml" overwrite="true" />
-                                <jar jarfile="target/test-resources/scenario5_service_repo/services/PingPort.aar" basedir="target/temp-interop" />
-
-                                <!-- Scenario 6 -->
-                                <mkdir dir="target/test-resources/scenario6_client_repo" />
-                                <mkdir dir="target/test-resources/scenario6_client_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario6_client_repo/modules" />
-                                <mkdir dir="target/test-resources/scenario6_service_repo" />
-                                <mkdir dir="target/test-resources/scenario6_service_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario6_service_repo/services" />
-                                <mkdir dir="target/test-resources/scenario6_service_repo/modules" />
-                                <copy file="src/test/resources/security/s6.client.axis2.xml" tofile="target/test-resources/scenario6_client_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario6_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s6.service.axis2.xml" tofile="target/test-resources/scenario6_service_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario6_service_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s6.service.xml" tofile="target/temp-interop/META-INF/services.xml" overwrite="true" />
-                                <jar jarfile="target/test-resources/scenario6_service_repo/services/PingPort.aar" basedir="target/temp-interop" />
-
-                                <!-- Scenario 7 -->
-                                <mkdir dir="target/test-resources/scenario7_client_repo" />
-                                <mkdir dir="target/test-resources/scenario7_client_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario7_client_repo/modules" />
-                                <mkdir dir="target/test-resources/scenario7_service_repo" />
-                                <mkdir dir="target/test-resources/scenario7_service_repo/conf" />
-                                <mkdir dir="target/test-resources/scenario7_service_repo/services" />
-                                <mkdir dir="target/test-resources/scenario7_service_repo/modules" />
-                                <copy file="src/test/resources/security/s7.client.axis2.xml" tofile="target/test-resources/scenario7_client_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario7_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s7.service.axis2.xml" tofile="target/test-resources/scenario7_service_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenario7_service_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/s7.service.xml" tofile="target/temp-interop/META-INF/services.xml" overwrite="true" />
-                                <jar jarfile="target/test-resources/scenario7_service_repo/services/PingPort.aar" basedir="target/temp-interop" />
-
-                                <!-- Scenario ST1 -->
-                                <mkdir dir="target/test-resources/scenarioST1_client_repo" />
-                                <mkdir dir="target/test-resources/scenarioST1_client_repo/conf" />
-                                <mkdir dir="target/test-resources/scenarioST1_client_repo/modules" />
-                                <mkdir dir="target/test-resources/scenarioST1_service_repo" />
-                                <mkdir dir="target/test-resources/scenarioST1_service_repo/conf" />
-                                <mkdir dir="target/test-resources/scenarioST1_service_repo/services" />
-                                <mkdir dir="target/test-resources/scenarioST1_service_repo/modules" />
-                                <copy file="src/test/resources/security/sST1.client.axis2.xml" tofile="target/test-resources/scenarioST1_client_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenarioST1_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/sST1.service.axis2.xml" tofile="target/test-resources/scenarioST1_service_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/scenarioST1_service_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/sST1.service.xml" tofile="target/temp-interop/META-INF/services.xml" overwrite="true" />
-                                <jar jarfile="target/test-resources/scenarioST1_service_repo/services/PingPort.aar" basedir="target/temp-interop" />
-
-                                <!-- MTOM Optimized Security Test -->
-                                <mkdir dir="target/test-resources/mtom_sec_client_repo" />
-                                <mkdir dir="target/test-resources/mtom_sec_client_repo/conf" />
-                                <mkdir dir="target/test-resources/mtom_sec_client_repo/modules" />
-                                <mkdir dir="target/test-resources/mtom_sec_service_repo" />
-                                <mkdir dir="target/test-resources/mtom_sec_service_repo/conf" />
-                                <mkdir dir="target/test-resources/mtom_sec_service_repo/services" />
-                                <mkdir dir="target/test-resources/mtom_sec_service_repo/modules" />
-                                <copy file="src/test/resources/security/secMtom.client.axis2.xml" tofile="target/test-resources/mtom_sec_client_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/mtom_sec_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/secMtom.service.axis2.xml" tofile="target/test-resources/mtom_sec_service_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/mtom_sec_service_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="src/test/resources/security/secMtom.service.xml" tofile="target/temp-interop/META-INF/services.xml" overwrite="true" />
-                                <jar jarfile="target/test-resources/mtom_sec_service_repo/services/PingPort.aar" basedir="target/temp-interop" />
-
-                                <!-- Test with addressing and MTOM  -->
-                                <mkdir dir="target/test-resources/complete_client_repo" />
-                                <mkdir dir="target/test-resources/complete_client_repo/conf" />
-                                <mkdir dir="target/test-resources/complete_client_repo/modules" />
-                                <mkdir dir="target/test-resources/complete_service_repo" />
-                                <mkdir dir="target/test-resources/complete_service_repo/conf" />
-                                <mkdir dir="target/test-resources/complete_service_repo/services" />
-                                <mkdir dir="target/test-resources/complete_service_repo/modules" />
-                                <!-- Test with addressing and MTOM client repository-->
-                                <copy file="src/test/resources/security/complete.client.axis2.xml" tofile="target/test-resources/complete_client_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/complete_client_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="target/artifacts/addressing-${axis2.version}.mar" tofile="target/test-resources/complete_client_repo/modules/addressing-${axis2.version}.mar" />
-                                <!-- Test with addressing and MTOMservice repository-->
-                                <copy file="src/test/resources/security/complete.service.axis2.xml" tofile="target/test-resources/complete_service_repo/conf/axis2.xml" />
-                                <copy file="target/artifacts/rampart-${project.version}.mar" tofile="target/test-resources/complete_service_repo/modules/rampart-${project.version}.mar" />
-                                <copy file="target/artifacts/addressing-${axis2.version}.mar" tofile="target/test-resources/complete_service_repo/modules/addressing-${axis2.version}.mar" />
-                                <copy file="src/test/resources/security/complete.service.xml" tofile="target/temp-interop/META-INF/services.xml" overwrite="true" />
-                                <!-- Create the .aar file -->
-                                <jar jarfile="target/test-resources/complete_service_repo/services/PingPort.aar" basedir="target/temp-interop" />
                             </tasks>
                         </configuration>
                         <goals>
@@ -581,7 +399,13 @@
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
                     <!-- Add the Xerces/Xalan versions expected by OpenSAML to the boot classpath so that the build succeeds on older 1.5 JDKs -->
-                    <argLine>-Xbootclasspath/p:${project.build.directory}/endorsed/xml-apis.jar${path.separator}${project.build.directory}/endorsed/xercesImpl.jar${path.separator}${project.build.directory}/endorsed/resolver.jar${path.separator}${project.build.directory}/endorsed/serializer.jar${path.separator}${project.build.directory}/endorsed/xalan.jar</argLine>
+                    <argLine>${jacoco.surefireArgLine} -Xbootclasspath/p:${project.build.directory}/endorsed/xml-apis.jar${path.separator}${project.build.directory}/endorsed/xercesImpl.jar${path.separator}${project.build.directory}/endorsed/resolver.jar${path.separator}${project.build.directory}/endorsed/serializer.jar${path.separator}${project.build.directory}/endorsed/xalan.jar</argLine>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
                 </configuration>
             </plugin>
         </plugins>
@@ -592,16 +416,37 @@
             <groupId>org.apache.rampart</groupId>
             <artifactId>rampart-policy</artifactId>
             <version>${project.version}</version>
+            <!--  Use Jetty's servlet api (2.5) -->
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.servlet</groupId>
+                    <artifactId>servlet-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.apache.rampart</groupId>
             <artifactId>rampart-trust</artifactId>
             <version>${project.version}</version>
+            <!--  Use Jetty's servlet api (2.5) -->
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.servlet</groupId>
+                    <artifactId>servlet-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.apache.rampart</groupId>
             <artifactId>rampart-core</artifactId>
             <version>${project.version}</version>
+            <!--  Use Jetty's servlet api (2.5) -->
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.servlet</groupId>
+                    <artifactId>servlet-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.apache.axis2</groupId>
@@ -629,10 +474,100 @@
             <version>${axis2.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.rampart</groupId>
+            <artifactId>rampart</artifactId>
+            <version>${project.version}</version>
+            <type>mar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.rampart</groupId>
+            <artifactId>rahas</artifactId>
+            <version>${project.version}</version>
+            <type>mar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>addressing</artifactId>
+            <type>mar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.directory.server</groupId>
+            <artifactId>apacheds-core-annotations</artifactId>
+            <version>2.0.0-M21</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>bouncycastle</groupId>
+                    <artifactId>bcprov-jdk15</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.directory.server</groupId>
+            <artifactId>apacheds-protocol-shared</artifactId>
+            <version>2.0.0-M21</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>bouncycastle</groupId>
+                    <artifactId>bcprov-jdk15</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.directory.server</groupId>
+            <artifactId>apacheds-protocol-kerberos</artifactId>
+            <version>2.0.0-M21</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>bouncycastle</groupId>
+                    <artifactId>bcprov-jdk15</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.directory.server</groupId>
+            <artifactId>apacheds-interceptor-kerberos</artifactId>
+            <version>2.0.0-M21</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>bouncycastle</groupId>
+                    <artifactId>bcprov-jdk15</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.directory.api</groupId>
+            <artifactId>api-ldap-codec-standalone</artifactId>
+            <version>1.0.0-M33</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.directory.api</groupId>
+            <artifactId>api-ldap-extras-codec-api</artifactId>
+            <version>1.0.0-M33</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.4</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+            <version>3.2</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ws.commons.axiom</groupId>
+            <artifactId>axiom-truth</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
-            <version>${junit.version}</version>
-            <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
@@ -642,20 +577,10 @@
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-testutils</artifactId>
+            <version>${axis2.version}</version>
+        </dependency>
     </dependencies>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-site-plugin</artifactId>
-                <version>2.0-beta-5</version>
-                <configuration>
-                    <templateDirectory>${basedir}</templateDirectory>
-                    <menu ref="parent" />
-                </configuration>
-            </plugin>
-        </plugins>
-    </reporting>
-
 </project>
diff --git a/modules/rampart-integration/src/main/java/org/apache/axis2/integration/TestConstants.java b/modules/rampart-integration/src/main/java/org/apache/axis2/integration/TestConstants.java
new file mode 100644
index 0000000..c20a517
--- /dev/null
+++ b/modules/rampart-integration/src/main/java/org/apache/axis2/integration/TestConstants.java
@@ -0,0 +1,25 @@
+/*
+ * 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.axis2.integration;
+
+public final class TestConstants {
+    public static final String TESTING_PATH = "target/test-resources/";
+    
+    private TestConstants() {}
+}
diff --git a/modules/rampart-integration/src/main/java/org/apache/axis2/integration/UtilServer.java b/modules/rampart-integration/src/main/java/org/apache/axis2/integration/UtilServer.java
deleted file mode 100644
index 40fbe74..0000000
--- a/modules/rampart-integration/src/main/java/org/apache/axis2/integration/UtilServer.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.integration;
-
-import junit.framework.TestCase;
-import org.apache.axis2.AxisFault;
-import org.apache.axis2.Constants;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-import org.apache.axis2.context.ServiceContext;
-import org.apache.axis2.context.ServiceGroupContext;
-import org.apache.axis2.deployment.DeploymentEngine;
-import org.apache.axis2.description.AxisModule;
-import org.apache.axis2.description.AxisService;
-import org.apache.axis2.description.AxisServiceGroup;
-import org.apache.axis2.description.TransportInDescription;
-import org.apache.axis2.engine.ListenerManager;
-import org.apache.axis2.transport.http.SimpleHTTPServer;
-
-import javax.xml.namespace.QName;
-import java.io.File;
-import java.io.FilenameFilter;
-
-public class UtilServer {
-    private static int count = 0;
-
-    private static SimpleHTTPServer receiver;
-
-    public static final int TESTING_PORT = 5555;
-
-    public static final String FAILURE_MESSAGE = "Intentional Failure";
-
-
-    public static synchronized void deployService(AxisService service)
-            throws AxisFault {
-        receiver.getConfigurationContext().getAxisConfiguration().addService(
-                service);
-    }
-
-    public static synchronized void unDeployService(QName service)
-            throws AxisFault {
-        receiver.getConfigurationContext().getAxisConfiguration()
-                .removeService(service.getLocalPart());
-    }
-
-    public static synchronized void unDeployClientService() throws AxisFault {
-        if (receiver.getConfigurationContext().getAxisConfiguration() != null) {
-            receiver.getConfigurationContext().getAxisConfiguration()
-                    .removeService("AnonymousService");
-        }
-    }
-
-    public static synchronized void start() throws Exception {
-        start(org.apache.axis2.Constants.TESTING_REPOSITORY);
-    }
-
-    public static synchronized void start(String repository) throws Exception {
-        if (count == 0) {
-            ConfigurationContext er = getNewConfigurationContext(repository);
-
-            receiver = new SimpleHTTPServer(er, TESTING_PORT);
-
-            try {
-                receiver.start();
-                ListenerManager listenerManager = er.getListenerManager();
-                TransportInDescription trsIn = new TransportInDescription(
-                        Constants.TRANSPORT_HTTP);
-                trsIn.setReceiver(receiver);
-                if (listenerManager == null) {
-                    listenerManager = new ListenerManager();
-                    listenerManager.init(er);
-                }
-                listenerManager.addListener(trsIn, true);
-                System.out.print("Server started on port "
-                        + TESTING_PORT + ".....");
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        try {
-            Thread.sleep(2000);
-        } catch (InterruptedException e1) {
-            throw new AxisFault("Thread interuptted", e1);
-        }
-
-
-        count++;
-    }
-
-    public static synchronized void start(String repository, String axis2xml) throws Exception {
-        if (count == 0) {
-            ConfigurationContext er = getNewConfigurationContext(repository, axis2xml);
-
-            receiver = new SimpleHTTPServer(er, TESTING_PORT);
-
-            try {
-                receiver.start();
-                System.out.print("Server started on port "
-                        + TESTING_PORT + ".....");
-            } catch (Exception e) {
-                throw new AxisFault(e.getMessage(), e);
-            }
-
-            try {
-                Thread.sleep(2000);
-            } catch (InterruptedException e1) {
-                throw new AxisFault("Thread interuptted", e1);
-            }
-
-        }
-        count++;
-    }
-
-    public static ConfigurationContext getNewConfigurationContext(
-            String repository) throws Exception {
-        File file = new File(repository);
-        if (!file.exists()) {
-            throw new Exception("repository directory "
-                    + file.getAbsolutePath() + " does not exists");
-        }
-        return ConfigurationContextFactory.createConfigurationContextFromFileSystem(file.getAbsolutePath(),
-                file.getAbsolutePath() + "/conf/axis2.xml");
-    }
-
-    public static ConfigurationContext getNewConfigurationContext(
-            String repository, String axis2xml) throws Exception {
-        File file = new File(repository);
-        if (!file.exists()) {
-            throw new Exception("repository directory "
-                    + file.getAbsolutePath() + " does not exists");
-        }
-        return ConfigurationContextFactory.createConfigurationContextFromFileSystem(file.getAbsolutePath(),
-                axis2xml);
-    }
-
-    public static synchronized void stop() throws AxisFault {
-        if (count == 1) {
-            receiver.stop();
-            while (receiver.isRunning()) {
-                try {
-                    Thread.sleep(1000);
-                } catch (InterruptedException e1) {
-                    //nothing to do here
-                }
-            }
-            count = 0;
-// tp.doStop();
-            System.out.print("Server stopped .....");
-        } else {
-            count--;
-        }
-        receiver.getConfigurationContext().terminate();
-    }
-
-    public static ConfigurationContext getConfigurationContext() {
-        return receiver.getConfigurationContext();
-    }
-
-    public static ServiceContext createAdressedEnabledClientSide(
-            AxisService service) throws AxisFault {
-        File file = getAddressingMARFile();
-        TestCase.assertTrue(file.exists());
-        ConfigurationContext configContext = ConfigurationContextFactory
-                .createConfigurationContextFromFileSystem(
-                        "target/test-resources/integrationRepo", null);
-        AxisModule axisModule = DeploymentEngine.buildModule(file,
-                configContext.getAxisConfiguration());
-        configContext.getAxisConfiguration().addModule(axisModule);
-
-        configContext.getAxisConfiguration().addService(service);
-
-        return new ServiceGroupContext(configContext, (AxisServiceGroup) service.getParent())
-                .getServiceContext(service);
-    }
-
-    static class AddressingFilter implements FilenameFilter {
-        public boolean accept(File dir, String name) {
-            return name.startsWith("addressing") && name.endsWith(".mar");
-        }
-    }
-
-    private static File getAddressingMARFile() {
-        File dir = new File(org.apache.axis2.Constants.TESTING_REPOSITORY + "/modules");
-        File[] files = dir.listFiles(new AddressingFilter());
-        TestCase.assertTrue(files.length == 1);
-        File file = files[0];
-        TestCase.assertTrue(file.exists());
-        return file;
-    }
-
-    public static ConfigurationContext createClientConfigurationContext() throws AxisFault {
-        File file = getAddressingMARFile();
-        TestCase.assertTrue(file.exists());
-
-        ConfigurationContext configContext = ConfigurationContextFactory .createConfigurationContextFromFileSystem(
-                "target/test-resources/integrationRepo",
-                "target/test-resources/integrationRepo/conf/axis2.xml");
-        AxisModule axisModule = DeploymentEngine.buildModule(file,
-                configContext.getAxisConfiguration());
-        configContext.getAxisConfiguration().addModule(axisModule);
-        return configContext;
-    }
-
-    public static ConfigurationContext createClientConfigurationContext(String repo) throws AxisFault {
-        return ConfigurationContextFactory .createConfigurationContextFromFileSystem(
-                repo,
-                repo + "/conf/axis2.xml");
-    }
-
-    public static ServiceContext createAdressedEnabledClientSide(
-            AxisService service, String clientHome) throws AxisFault {
-        File file = getAddressingMARFile();
-        TestCase.assertTrue(file.exists());
-
-        ConfigurationContext configContext = ConfigurationContextFactory
-                .createConfigurationContextFromFileSystem(clientHome, null);
-        AxisModule axisModule = DeploymentEngine.buildModule(file,
-                configContext.getAxisConfiguration());
-
-        configContext.getAxisConfiguration().addModule(axisModule);
-// sysContext.getAxisConfiguration().engageModule(moduleDesc.getName());
-
-        configContext.getAxisConfiguration().addService(service);
-
-        return new ServiceGroupContext(configContext, (AxisServiceGroup) service.getParent())
-                .getServiceContext(service);
-    }
-
-}
diff --git a/modules/rampart-integration/src/main/java/org/apache/axis2/integration/UtilServerBasedTestCase.java b/modules/rampart-integration/src/main/java/org/apache/axis2/integration/UtilServerBasedTestCase.java
deleted file mode 100644
index 248ec07..0000000
--- a/modules/rampart-integration/src/main/java/org/apache/axis2/integration/UtilServerBasedTestCase.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-* Copyright 2004-2006 The Apache Software Foundation.
-*
-* Licensed 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.axis2.integration;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-import junit.framework.TestCase;
-
-public class UtilServerBasedTestCase extends TestCase {
-
-    public UtilServerBasedTestCase() {
-        super(UtilServerBasedTestCase.class.getName());
-    }
-
-    public UtilServerBasedTestCase(java.lang.String string) {
-        super(string);
-    }
-
-    protected static Test getTestSetup(Test test) {
-        return new TestSetup(test) {
-            public void setUp() throws Exception {
-                UtilServer.start();
-            }
-
-            public void tearDown() throws Exception {
-                UtilServer.stop();
-            }
-        };
-    }
-
-    protected static Test getTestSetup2(Test test, final String param) {
-        return new TestSetup(test) {
-            public void setUp() throws Exception {
-                UtilServer.start(param);
-            }
-
-            public void tearDown() throws Exception {
-                UtilServer.stop();
-            }
-        };
-    }
-
-    protected static Test getTestSetup3(Test test, final String param1, final String param2) {
-        return new TestSetup(test) {
-            public void setUp() throws Exception {
-                UtilServer.start(param1, param2);
-            }
-
-            public void tearDown() throws Exception {
-                UtilServer.stop();
-            }
-        };
-    }
-}
diff --git a/modules/rampart-integration/src/main/java/org/apache/rahas/PWCallback.java b/modules/rampart-integration/src/main/java/org/apache/rahas/PWCallback.java
index ee636bb..08bf0d6 100755
--- a/modules/rampart-integration/src/main/java/org/apache/rahas/PWCallback.java
+++ b/modules/rampart-integration/src/main/java/org/apache/rahas/PWCallback.java
@@ -33,35 +33,6 @@
 public class PWCallback implements CallbackHandler {
 
 
-
-    /** Field key */
-
-    private static final byte[] key = {
-
-        (byte) 0x31, (byte) 0xfd, (byte) 0xcb, (byte) 0xda, (byte) 0xfb,
-
-        (byte) 0xcd, (byte) 0x6b, (byte) 0xa8, (byte) 0xe6, (byte) 0x19,
-
-        (byte) 0xa7, (byte) 0xbf, (byte) 0x51, (byte) 0xf7, (byte) 0xc7,
-
-        (byte) 0x3e, (byte) 0x80, (byte) 0xae, (byte) 0x98, (byte) 0x51,
-
-        (byte) 0xc8, (byte) 0x51, (byte) 0x34, (byte) 0x04,
-
-    };
-
-
-
-    /*
-
-     * (non-Javadoc)
-
-     * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[])
-
-     */
-
-
-
     /**
 
      * Method handle
@@ -150,11 +121,7 @@
 
                  */
 
-                if (pc.getUsage() == WSPasswordCallback.KEY_NAME) {
-
-                    pc.setKey(key);
-
-                } else if(pc.getIdentifier().equals("alice")) {
+                if(pc.getIdentifier().equals("alice")) {
 
                     pc.setPassword("password");
 
diff --git a/modules/rampart-integration/src/main/java/org/apache/rahas/TestClient.java b/modules/rampart-integration/src/main/java/org/apache/rahas/TestClient.java
index 88a957a..3b484c1 100644
--- a/modules/rampart-integration/src/main/java/org/apache/rahas/TestClient.java
+++ b/modules/rampart-integration/src/main/java/org/apache/rahas/TestClient.java
@@ -16,95 +16,54 @@
 
 package org.apache.rahas;
 
+import static org.apache.axis2.integration.TestConstants.TESTING_PATH;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+
 import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.AddressingConstants;
-import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-import org.apache.axis2.integration.UtilServer;
+import org.apache.axis2.context.ServiceContext;
+import org.apache.axis2.testutils.ClientHelper;
+import org.apache.axis2.testutils.JettyServer;
 import org.apache.neethi.Policy;
 import org.apache.neethi.PolicyEngine;
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
+import org.apache.rampart.RampartMessageData;
+import org.junit.Rule;
+import org.junit.Test;
 
-import javax.xml.namespace.QName;
+public abstract class TestClient {
 
-import junit.framework.TestCase;
+    @Rule
+    public final JettyServer server = new JettyServer(TESTING_PATH + getServiceRepo(), false);
 
-public abstract class TestClient extends TestCase {
-
-    protected int port = UtilServer.TESTING_PORT;
-
-    public TestClient(String name) {
-        super(name);
-    }
-
-    protected void setUp() throws Exception {
-        UtilServer.start(Constants.TESTING_PATH + getServiceRepo(), null);
-    }
-
-    protected void tearDown() throws Exception {
-        UtilServer.stop();
-    }
+    @Rule
+    public final ClientHelper clientHelper = new ClientHelper(server, TESTING_PATH + "rahas_client_repo");
 
     /**
      */
+    @Test
     public void testRequest() throws Exception {
-        // Get the repository location from the args
-        String repo = Constants.TESTING_PATH + "rahas_client_repo";
-
-        ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repo,
-                                                                                                                  null);
-        ServiceClient serviceClient = new ServiceClient(configContext, null);
-        Options options = new Options();
-
-        System.setProperty("javax.net.ssl.keyStorePassword", "password");
-        System.setProperty("javax.net.ssl.keyStoreType", "JKS");
-        System.setProperty("javax.net.ssl.trustStore", "/home/ruchith/Desktop/interop/certs/interop2.jks");
-        System.setProperty("javax.net.ssl.trustStorePassword", "password");
-        System.setProperty("javax.net.ssl.trustStoreType","JKS");
-
-        options.setTo(new EndpointReference("http://127.0.0.1:" + port + "/axis2/services/SecureService"));
-//        options.setTo(new EndpointReference("http://127.0.0.1:" + 9090 + "/axis2/services/UTSAMLHoK"));
-//        options.setTo(new EndpointReference("https://www-lk.wso2.com:8443/axis2/services/UTSAMLHoK"));
-//        options.setTo(new EndpointReference("https://192.18.49.133:2343/jaxws-s1-sts/sts"));
-//        options.setTo(new EndpointReference("https://207.200.37.116/SxSts/Scenario_1_IssuedTokenOverTransport_UsernameOverTransport"));
-//        options.setTo(new EndpointReference("http://localhost:9090/SxSts/Scenario_4_IssuedToken_MutualCertificate10"));
-
-//        options.setTo(new EndpointReference("http://127.0.0.1:" + 9090 + "/axis2/services/MutualCertsSAMLHoK"));
-//        options.setTo(new EndpointReference("http://www-lk.wso2.com:8888/axis2/services/MutualCertsSAMLHoK"));
-//        options.setTo(new EndpointReference("https://131.107.72.15/trust/Addressing2004/UserName"));
-//        options.setTo(new EndpointReference("https://131.107.72.15/trust/UserName"));
-//        options.setTo(new EndpointReference("http://127.0.0.1:" + 9090 + "/trust/X509WSS10"));
-//        options.setTo(new EndpointReference("https://131.107.72.15/trust/UserName"));
-//        options.setTo(new EndpointReference("http://127.0.0.1:" + 9090 + "/jaxws-s4-sts/sts"));
-//        options.setTo(new EndpointReference("http://127.0.0.1:9090/jaxws-s4/simple"));
-//        options.setTo(new EndpointReference("http://127.0.0.1:" + 9090 + "/axis2/services/UTSAMLBearer"));
+        ServiceClient serviceClient = clientHelper.createServiceClient("SecureService");
+        Options options = serviceClient.getOptions();
 
         options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
         options.setAction(this.getRequestAction());
 //        options.setProperty(AddressingConstants.WS_ADDRESSING_VERSION, this.getWSANamespace());
 
         options.setTimeOutInMilliSeconds(200 * 1000);
-        OutflowConfiguration clientOutflowConfiguration = getClientOutflowConfiguration();
-        if (clientOutflowConfiguration != null) {
-            configContext.setProperty(WSSHandlerConstants.OUTFLOW_SECURITY, clientOutflowConfiguration.getProperty());
-        }
-        InflowConfiguration clientInflowConfiguration = getClientInflowConfiguration();
-        if (clientInflowConfiguration != null) {
-            configContext.setProperty(WSSHandlerConstants.INFLOW_SECURITY, clientInflowConfiguration.getProperty());
-        }
 
+        ServiceContext context = serviceClient.getServiceContext();
+        context.setProperty(RampartMessageData.KEY_RAMPART_POLICY, loadPolicy());
+        
         serviceClient.engageModule("addressing");
         serviceClient.engageModule("rampart");
 
-        serviceClient.setOptions(options);
-
         //Blocking invocation
 
         OMElement result = serviceClient.sendReceive(getRequest());
@@ -118,9 +77,7 @@
 
     public abstract OMElement getRequest();
 
-    public abstract OutflowConfiguration getClientOutflowConfiguration();
-
-    public abstract InflowConfiguration getClientInflowConfiguration();
+    public abstract String getClientPolicyPath();
 
     public abstract String getServiceRepo();
 
@@ -172,9 +129,16 @@
     public abstract OMElement getRSTTemplate() throws TrustException;
 
     protected Policy getPolicy(String filePath) throws Exception {
-        StAXOMBuilder builder = new StAXOMBuilder(filePath);
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(filePath));
         OMElement elem = builder.getDocumentElement();
         return PolicyEngine.getPolicy(elem);
     }
+    
+    private Policy loadPolicy() throws Exception {
+    	String path = getClientPolicyPath();
+    	InputStream poilicyStream = TestClient.class.getResourceAsStream(path);
+		return PolicyEngine.getPolicy(poilicyStream);
+    }
+
 
 }
diff --git a/modules/rampart-integration/src/main/resources/ping/ping.wsdl b/modules/rampart-integration/src/main/resources/ping/ping.wsdl
deleted file mode 100644
index 788518d..0000000
--- a/modules/rampart-integration/src/main/resources/ping/ping.wsdl
+++ /dev/null
@@ -1,68 +0,0 @@
-<definitions xmlns:s1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
-             xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
-             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-             xmlns:s="http://www.w3.org/2001/XMLSchema"
-             xmlns:tns="http://xmlsoap.org/Ping"
-             xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
-             xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
-             xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
-             targetNamespace="http://xmlsoap.org/Ping"
-             xmlns="http://schemas.xmlsoap.org/wsdl/">
-    <types>
-        <s:schema elementFormDefault="qualified" targetNamespace="http://xmlsoap.org/Ping">
-            <s:import namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"/>
-            <s:element name="Ping" nillable="true" type="tns:ping"/>
-            <s:complexType name="ping">
-                <s:sequence>
-                    <s:element minOccurs="0" maxOccurs="1" name="ticket" type="tns:ticketType"/>
-                    <s:element minOccurs="1" maxOccurs="1" name="text" nillable="true" type="s:string"/>
-                </s:sequence>
-            </s:complexType>
-            <s:complexType name="ticketType">
-                <s:simpleContent>
-                    <s:extension base="s:string">
-                        <s:attribute ref="s1:Id"/>
-                    </s:extension>
-                </s:simpleContent>
-            </s:complexType>
-            <s:element name="PingResponse" nillable="true" type="tns:pingResponse"/>
-            <s:complexType name="pingResponse">
-                <s:sequence>
-                    <s:element minOccurs="1" maxOccurs="1" name="text" nillable="true" type="s:string"/>
-                </s:sequence>
-            </s:complexType>
-        </s:schema>
-        <s:schema elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
-            <s:attribute name="Id" type="s:string"/>
-        </s:schema>
-    </types>
-    <message name="PingRequest">
-        <part name="ping" element="tns:Ping"/>
-    </message>
-    <message name="PingResponse">
-        <part name="pingResponse" element="tns:PingResponse"/>
-    </message>
-    <portType name="PingPort">
-        <operation name="Ping" >
-            <input message="tns:PingRequest"/>
-            <output message="tns:PingResponse"/>
-        </operation>
-    </portType>
-    <binding name="PingBinding" type="tns:PingPort">
-        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
-        <operation name="Ping">
-            <soap:operation soapAction="urn:Ping" style="document"/>
-            <input>
-                <soap:body use="literal"/>
-            </input>
-            <output>
-                <soap:body use="literal"/>
-            </output>
-        </operation>
-    </binding>
-    <service name="PingPort">
-        <port name="Ping1" binding="tns:PingBinding">
-            <soap:address location="http://localhost:9080/pingservice/Ping1"/>
-        </port>
-    </service>
-</definitions>
diff --git a/modules/rampart-integration/src/main/resources/ping/src/org/apache/axis2/oasis/ping/PingPortSkeleton.java b/modules/rampart-integration/src/main/resources/ping/src/org/apache/axis2/oasis/ping/PingPortSkeleton.java
deleted file mode 100644
index 57ef4dd..0000000
--- a/modules/rampart-integration/src/main/resources/ping/src/org/apache/axis2/oasis/ping/PingPortSkeleton.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-* Copyright 2004,2005 The Apache Software Foundation.
-*
-* Licensed 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.axis2.oasis.ping;
-
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.AxisFault;
-import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.ws.security.WSConstants;
-import org.apache.ws.security.WSSecurityEngineResult;
-import org.apache.ws.security.handler.WSHandlerConstants;
-import org.apache.ws.security.handler.WSHandlerResult;
-import org.xmlsoap.ping.PingDocument;
-import org.xmlsoap.ping.PingResponse;
-import org.xmlsoap.ping.PingResponseDocument;
-
-import java.security.Principal;
-import java.util.List;
-
-/**
- * Auto generated java skeleton for the service by the Axis code generator
- */
-public class PingPortSkeleton{
-    /**
-     * Auto generated method signature
-     *
-     * @param param0
-     */
-    public PingResponseDocument ping
-            (PingDocument param0) {
-        List<WSHandlerResult> results = null;
-        MessageContext msgCtx = MessageContext.getCurrentMessageContext();
-        if ((results =
-                (List<WSHandlerResult>) msgCtx.getProperty(WSHandlerConstants.RECV_RESULTS))
-                == null) {
-            System.out.println("No security results!!");
-            throw new RuntimeException("No security results!!");
-        } else {
-            System.out.println("Number of results: " + results.size());
-            for (WSHandlerResult result : results) {
-                List<WSSecurityEngineResult> wsSecEngineResults = result.getResults();
-
-                for (WSSecurityEngineResult wser : wsSecEngineResults) {
-                    if (getAction(wser) != WSConstants.ENCR && getPrincipal(wser) != null) {
-                        System.out.println(getPrincipal(wser).getName());
-                    }
-                }
-            }
-            PingResponseDocument response = PingResponseDocument.Factory.newInstance();
-            PingResponse pingRes = response.addNewPingResponse();
-            pingRes.setText("Response: " + param0.getPing().getText());
-            return response;
-        }
-    }
-
-    private int getAction(WSSecurityEngineResult result) {
-        return (Integer)result.get(WSSecurityEngineResult.TAG_ACTION);
-    }
-
-    private Principal getPrincipal(WSSecurityEngineResult result) {
-        return (Principal)result.get(WSSecurityEngineResult.TAG_PRINCIPAL);
-    }
-
-}
-    
\ No newline at end of file
diff --git a/modules/rampart-integration/src/main/resources/ping/src/org/apache/axis2/security/InteropScenarioClient.java b/modules/rampart-integration/src/main/resources/ping/src/org/apache/axis2/security/InteropScenarioClient.java
deleted file mode 100644
index 4d2d889..0000000
--- a/modules/rampart-integration/src/main/resources/ping/src/org/apache/axis2/security/InteropScenarioClient.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.axiom.soap.SOAP12Constants;
-import org.apache.axis2.Constants;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-import org.apache.axis2.oasis.ping.PingPortStub;
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-import org.xmlsoap.ping.Ping;
-import org.xmlsoap.ping.PingDocument;
-import org.xmlsoap.ping.PingResponse;
-import org.xmlsoap.ping.PingResponseDocument;
-import org.xmlsoap.ping.TicketType;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-/**
- * Client for the interop service This MUST be used with the codegen'ed classes
- */
-public class InteropScenarioClient {
-
-    String soapNsURI = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
-
-    public InteropScenarioClient(boolean useSOAP12InStaticConfigTest) {
-        if (useSOAP12InStaticConfigTest) {
-            soapNsURI = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
-        }
-    }
-
-    public void invokeWithStaticConfig(String clientRepo, String url)
-            throws Exception {
-        TicketType ticket = TicketType.Factory.newInstance();
-        ticket.setId("MyticketId");
-
-        Ping ping = Ping.Factory.newInstance();
-        ping.setText("Testing rampart");
-        ping.setTicket(ticket);
-
-        PingDocument pingDoc = PingDocument.Factory.newInstance();
-        pingDoc.setPing(ping);
-
-        ConfigurationContext configCtx = ConfigurationContextFactory
-                        .createConfigurationContextFromFileSystem(clientRepo,
-                                clientRepo + "/conf/axis2.xml");
-        PingPortStub stub = new PingPortStub(configCtx, url);
-
-        // Enable MTOM to those scenarios where they are configured using:
-        // <optimizeParts>xpathExpression</optimizeParts>
-        stub._getServiceClient().getOptions().setProperty(
-                Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
-        stub._getServiceClient().getOptions().setSoapVersionURI(soapNsURI);
-        stub._getServiceClient().engageModule("rampart");
-
-        PingResponseDocument pingResDoc = stub.ping(pingDoc);
-
-        PingResponse pingRes = pingResDoc.getPingResponse();
-
-        System.out.println(pingRes.getText());
-    }
-
-    public void invokeWithGivenConfig(String clientRepo, String url,
-            OutflowConfiguration outflowConfig, InflowConfiguration inflowConfig)
-            throws Exception {
-        TicketType ticket = TicketType.Factory.newInstance();
-        ticket.setId("MyticketId"); // TODO need to figure out why "My ticket Id" is failing
-
-        Ping ping = Ping.Factory.newInstance();
-        ping.setText("Testing rampart");
-        ping.setTicket(ticket);
-
-        PingDocument pingDoc = PingDocument.Factory.newInstance();
-        pingDoc.setPing(ping);
-
-        PingPortStub stub = new PingPortStub(ConfigurationContextFactory
-                .createConfigurationContextFromFileSystem(clientRepo,
-                        clientRepo + "/conf/axis2.xml"), url);
-
-        // Enable MTOM to those scenarios where they are configured using:
-        // <optimizeParts>xpathExpression</optimizeParts>
-        stub._getServiceClient().getOptions().setProperty(
-                Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
-        // Engage the security module
-        stub._getServiceClient().engageModule("rampart");
-
-        if (outflowConfig != null) {
-            stub._getServiceClient().getServiceContext().setProperty(
-                    WSSHandlerConstants.OUTFLOW_SECURITY,
-                    outflowConfig.getProperty());
-        }
-        if (inflowConfig != null) {
-            stub._getServiceClient().getServiceContext().setProperty(
-                    WSSHandlerConstants.INFLOW_SECURITY,
-                    inflowConfig.getProperty());
-        }
-        PingResponseDocument pingResDoc = stub.ping(pingDoc);
-
-        PingResponse pingRes = pingResDoc.getPingResponse();
-
-        System.out.println(pingRes.getText());
-        stub = null;
-    }
-
-    public void invokeWithGivenConfigWithProRefs(String clientRepo, String url,
-            OutflowConfiguration outflowConfig, InflowConfiguration inflowConfig,
-            Hashtable propRefs)
-            throws Exception {
-        TicketType ticket = TicketType.Factory.newInstance();
-        ticket.setId("MyticketId"); // TODO need to figure out why "My ticket Id" is failing
-
-        Ping ping = Ping.Factory.newInstance();
-        ping.setText("Testing rampart");
-        ping.setTicket(ticket);
-
-        PingDocument pingDoc = PingDocument.Factory.newInstance();
-        pingDoc.setPing(ping);
-
-        PingPortStub stub = new PingPortStub(ConfigurationContextFactory
-                .createConfigurationContextFromFileSystem(clientRepo,
-                        clientRepo + "/conf/axis2.xml"), url);
-
-        // Enable MTOM to those scenarios where they are configured using:
-        // <optimizeParts>xpathExpression</optimizeParts>
-        stub._getServiceClient().getOptions().setProperty(
-                Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
-        // Engage the security module
-        stub._getServiceClient().engageModule("rampart");
-
-        if (outflowConfig != null) {
-            stub._getServiceClient().getServiceContext().setProperty(
-                    WSSHandlerConstants.OUTFLOW_SECURITY,
-                    outflowConfig.getProperty());
-        }
-        if (inflowConfig != null) {
-            stub._getServiceClient().getServiceContext().setProperty(
-                    WSSHandlerConstants.INFLOW_SECURITY,
-                    inflowConfig.getProperty());
-        }
-        
-        if(propRefs != null) {
-            Enumeration keysEnum = propRefs.keys();
-            while (keysEnum.hasMoreElements()) {
-                String refKey = (String) keysEnum.nextElement();
-                
-                stub._getServiceClient().getServiceContext().setProperty(refKey,
-                       propRefs.get(refKey));
-            }
-        }
-        
-        PingResponseDocument pingResDoc = stub.ping(pingDoc);
-
-        PingResponse pingRes = pingResDoc.getPingResponse();
-
-        System.out.println(pingRes.getText());
-        stub = null;
-    }
-}
diff --git a/modules/rampart-integration/src/main/resources/ping/src/org/apache/axis2/security/PWCallback.java b/modules/rampart-integration/src/main/resources/ping/src/org/apache/axis2/security/PWCallback.java
deleted file mode 100644
index a51b7e3..0000000
--- a/modules/rampart-integration/src/main/resources/ping/src/org/apache/axis2/security/PWCallback.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-
-import org.apache.ws.security.WSPasswordCallback;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import java.io.IOException;
-
-
-
-/**
-
- * Class PWCallback
-
- */
-
-public class PWCallback implements CallbackHandler {
-
-
-
-    /** Field key */
-
-    private static final byte[] key = {
-
-        (byte) 0x31, (byte) 0xfd, (byte) 0xcb, (byte) 0xda, (byte) 0xfb,
-
-        (byte) 0xcd, (byte) 0x6b, (byte) 0xa8, (byte) 0xe6, (byte) 0x19,
-
-        (byte) 0xa7, (byte) 0xbf, (byte) 0x51, (byte) 0xf7, (byte) 0xc7,
-
-        (byte) 0x3e, (byte) 0x80, (byte) 0xae, (byte) 0x98, (byte) 0x51,
-
-        (byte) 0xc8, (byte) 0x51, (byte) 0x34, (byte) 0x04,
-
-    };
-
-
-
-    /*
-
-     * (non-Javadoc)
-
-     * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[])
-
-     */
-
-
-
-    /**
-
-     * Method handle
-
-     * 
-
-     * @param callbacks 
-
-     * @throws java.io.IOException                  
-
-     * @throws javax.security.auth.callback.UnsupportedCallbackException 
-
-     */
-
-    public void handle(Callback[] callbacks)
-
-            throws IOException, UnsupportedCallbackException {
-
-
-
-        for (int i = 0; i < callbacks.length; i++) {
-
-            if (callbacks[i] instanceof WSPasswordCallback) {
-
-                WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
-
-
-
-                /*
-
-                 * This usage type is used only in case we received a
-
-                 * username token with a password of type PasswordText or
-
-                 * an unknown password type.
-
-                 * 
-
-                 * This case the WSPasswordCallback object contains the
-
-                 * identifier (aka username), the password we received, and
-
-                 * the password type string to identify the type.
-
-                 * 
-
-                 * Here we perform only a very simple check.
-
-                 */
-
-                if (pc.getUsage() == WSPasswordCallback.USERNAME_TOKEN_UNKNOWN) {
-
-                	if(pc.getIdentifier().equals("Ron") && pc.getPassword().equals("noR")) {
-
-                        return;
-
-                	}
-
-                    if (pc.getPassword().equals("sirhC")) {
-
-                        return;
-
-                    }               	
-
-                    throw new UnsupportedCallbackException(callbacks[i],
-
-                    "check failed");
-
-                }
-
-                /*
-
-                 * here call a function/method to lookup the password for
-
-                 * the given identifier (e.g. a user name or keystore alias)
-
-                 * e.g.: pc.setPassword(passStore.getPassword(pc.getIdentfifier))
-
-                 * for Testing we supply a fixed name here.
-
-                 */
-
-                if (pc.getUsage() == WSPasswordCallback.SECRET_KEY) {
-
-                    pc.setKey(key);
-
-                } else if(pc.getIdentifier().equals("alice")) {
-
-                    pc.setPassword("password");
-
-                } else if(pc.getIdentifier().equals("bob")) {
-
-                    pc.setPassword("password");
-
-                } else if(pc.getIdentifier().equals("Ron")) {
-
-                    pc.setPassword("noR");
-
-                } else {
-
-                    pc.setPassword("sirhC");
-
-                }
-
-            } else {
-
-                throw new UnsupportedCallbackException(callbacks[i],
-
-                        "Unrecognized Callback");
-
-            }
-
-        }
-
-    }
-
-}
-
-
diff --git a/modules/rampart-integration/src/test/java/org/apache/axis2/security/AddressingMTOMSecurityTest.java b/modules/rampart-integration/src/test/java/org/apache/axis2/security/AddressingMTOMSecurityTest.java
deleted file mode 100644
index a5690e6..0000000
--- a/modules/rampart-integration/src/test/java/org/apache/axis2/security/AddressingMTOMSecurityTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.axis2.Constants;
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-
-import java.util.Hashtable;
-import java.util.Properties;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-public class AddressingMTOMSecurityTest extends InteropTestBase {
-
-    protected OutflowConfiguration getOutflowConfiguration() {
-
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("Timestamp Signature Encrypt");
-        ofc.setUser("alice");
-        ofc.setEncryptionUser("bob");
-        ofc.setSignaturePropFile("interop.properties");
-        ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ofc.setSignatureKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-        ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-        ofc.setSignatureParts("{Element}{" + ADDR_NS + "}To;" +
-                                "{Element}{" + ADDR_NS + "}MessageID;" +
-                                "{Element}{" + WSU_NS + "}Timestamp");
-        ofc.setOptimizeParts(
-                "//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue");
-
-        return ofc;
-    }
-
-    protected InflowConfiguration getInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Timestamp Signature Encrypt");
-        ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ifc.setSignaturePropFile("interop.properties");
-
-        return ifc;
-    }
-
-    protected String getClientRepo() {
-        return COMPLETE_CLIENT_REPOSITORY;
-    }
-
-    protected String getServiceRepo() {
-        return COMPLETE_SERVICE_REPOSITORY;
-    }
-
-    protected boolean isUseSOAP12InStaticConfigTest() {
-        return true;
-    }
-
-    protected OutflowConfiguration getOutflowConfigurationWithRefs() {
-
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("Timestamp Signature Encrypt");
-        ofc.setUser("alice");
-        ofc.setEncryptionUser("bob");
-        ofc.setSignaturePropRefId("key1");
-        ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ofc.setSignatureKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-        ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-        ofc.setSignatureParts("{Element}{" + ADDR_NS + "}To;" +
-                                "{Element}{" + ADDR_NS + "}MessageID;" +
-                                "{Element}{" + WSU_NS + "}Timestamp");
-        ofc.setOptimizeParts(
-                "//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue");
-
-        return ofc;
-    }
-
-    protected InflowConfiguration getInflowConfigurationWithRefs() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Timestamp Signature Encrypt");
-        ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ifc.setSignaturePropRefId("key2");
-
-        return ifc;
-    }
-
-    protected Hashtable getPropertyRefs() {
-        Properties prop1 =  new Properties();
-        prop1.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-
-        Properties prop2 =  new Properties();
-        prop2.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-        
-        Hashtable table = new Hashtable();
-        table.put("key1", prop1);
-        table.put("key2", prop2);
-        
-        return table;
-    }
-
-}
diff --git a/modules/rampart-integration/src/test/java/org/apache/axis2/security/InteropTestBase.java b/modules/rampart-integration/src/test/java/org/apache/axis2/security/InteropTestBase.java
deleted file mode 100644
index 407a71e..0000000
--- a/modules/rampart-integration/src/test/java/org/apache/axis2/security/InteropTestBase.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.axis2.Constants;
-import org.apache.axis2.addressing.AddressingConstants;
-import org.apache.axis2.integration.UtilServer;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-import org.apache.ws.security.WSConstants;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.util.Hashtable;
-
-import junit.framework.TestCase;
-
-public abstract class InteropTestBase extends TestCase {
-
-    protected static final String SCENARIO1_SERVICE_REPOSITORY =
-            "scenario1_service_repo";
-
-    protected static final String SCENARIO1_CLIENT_REPOSITORY =
-            "scenario1_client_repo";
-
-    protected static final String SCENARIO2_SERVICE_REPOSITORY =
-            "scenario2_service_repo";
-
-    protected static final String SCENARIO2_CLIENT_REPOSITORY =
-            "scenario2_client_repo";
-
-    protected static final String SCENARIO2a_SERVICE_REPOSITORY =
-            "scenario2a_service_repo";
-
-    protected static final String SCENARIO2a_CLIENT_REPOSITORY =
-            "scenario2a_client_repo";
-
-    protected static final String SCENARIO3_SERVICE_REPOSITORY =
-            "scenario3_service_repo";
-
-    protected static final String SCENARIO3_CLIENT_REPOSITORY =
-            "scenario3_client_repo";
-
-    protected static final String SCENARIO4_SERVICE_REPOSITORY =
-            "scenario4_service_repo";
-
-    protected static final String SCENARIO4_CLIENT_REPOSITORY =
-            "scenario4_client_repo";
-
-    protected static final String SCENARIO5_SERVICE_REPOSITORY =
-            "scenario5_service_repo";
-
-    protected static final String SCENARIO5_CLIENT_REPOSITORY =
-            "scenario5_client_repo";
-
-    protected static final String SCENARIO6_SERVICE_REPOSITORY =
-            "scenario6_service_repo";
-
-    protected static final String SCENARIO6_CLIENT_REPOSITORY =
-            "scenario6_client_repo";
-
-    protected static final String SCENARIO7_SERVICE_REPOSITORY =
-            "scenario7_service_repo";
-
-    protected static final String SCENARIO7_CLIENT_REPOSITORY =
-            "scenario7_client_repo";
-
-    protected static final String SCENARIO_ST1_SERVICE_REPOSITORY =
-            "scenarioST1_service_repo";
-
-    protected static final String SCENARIO_ST1_CLIENT_REPOSITORY =
-            "scenarioST1_client_repo";
-
-    protected static final String SCENARIO_ST3_SERVICE_REPOSITORY =
-            "scenarioST3_service_repo";
-
-    protected static final String SCENARIO_ST3_CLIENT_REPOSITORY =
-            "scenarioST3_client_repo";
-
-    protected static final String SCENARIO_ST4_SERVICE_REPOSITORY =
-            "scenarioST4_service_repo";
-
-    protected static final String SCENARIO_ST4_CLIENT_REPOSITORY =
-            "scenarioST4_client_repo";
-
-    protected static final String MTOM_SEC_SERVICE_REPOSITORY =
-            "mtom_sec_service_repo";
-
-    protected static final String MTOM_SEC_CLIENT_REPOSITORY =
-            "mtom_sec_client_repo";
-
-    protected static final String COMPLETE_SERVICE_REPOSITORY =
-            "complete_service_repo";
-
-    protected static final String COMPLETE_CLIENT_REPOSITORY =
-            "complete_client_repo";
-
-    protected static final String DEFAULT_CLIENT_REPOSITORY =
-            "default_security_client_repo";
-
-    protected static final String WSSE_NS = WSConstants.WSSE_NS;
-
-    protected static final String WSU_NS = WSConstants.WSU_NS;
-
-    protected static final String ADDR_NS =
-            AddressingConstants.Final.WSA_NAMESPACE;
-
-    private String targetEpr = "http://127.0.0.1:" +
-//            5556 +
-            UtilServer.TESTING_PORT +
-            "/axis2/services/PingPort";
-
-    public InteropTestBase() {
-        super();
-    }
-
-    public InteropTestBase(String arg0) {
-        super(arg0);
-    }
-    
-    public void setUp() throws Exception {
-        UtilServer.start(Constants.TESTING_PATH + getServiceRepo());
-    }
-
-    public void tearDown() throws Exception {
-        UtilServer.stop();
-    }
-    /**
-     * Do test
-     */
-    public void testInteropWithConfigFiles() {
-        try {
-
-            Class interopScenarioClientClass = Class
-                    .forName("org.apache.axis2.security.InteropScenarioClient");
-
-            Constructor c = interopScenarioClientClass
-                    .getConstructor(new Class[]{boolean.class});
-            Object clientObj = c.newInstance(new Object[]{this
-                    .isUseSOAP12InStaticConfigTest() ? Boolean.TRUE
-                    : Boolean.FALSE});
-            Method m = interopScenarioClientClass.getMethod(
-                    "invokeWithStaticConfig", new Class[]{String.class,
-                    String.class});
-            m.invoke(clientObj, new Object[]{
-                    Constants.TESTING_PATH + getClientRepo(), targetEpr});
-
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail("Error in introperating with " + targetEpr
-                    + ", client configuration: " + getClientRepo());
-        }
-    }
-
-    public void testInteropWithDynamicConfig() {
-        try {
-            Class interopScenarioClientClass = Class
-                    .forName("org.apache.axis2.security.InteropScenarioClient");
-            Constructor c = interopScenarioClientClass
-                    .getConstructor(new Class[]{boolean.class});
-            Object clientObj = c.newInstance(new Object[]{this
-                    .isUseSOAP12InStaticConfigTest() ? Boolean.TRUE
-                    : Boolean.FALSE});
-            Method m = interopScenarioClientClass.getMethod(
-                    "invokeWithGivenConfig", new Class[]{String.class,
-                    String.class, OutflowConfiguration.class,
-                    InflowConfiguration.class});
-            m.invoke(clientObj, new Object[]{
-                    Constants.TESTING_PATH + DEFAULT_CLIENT_REPOSITORY,
-                    targetEpr, getOutflowConfiguration(),
-                    getInflowConfiguration()});
-
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail("Error in introperating with " + targetEpr
-                    + ", client configuration: " + getClientRepo());
-        }
-
-    }
-
-    public void testInteropWithDynamicConfigWithProfRefs() {
-        if(getPropertyRefs() != null) {
-            try {
-    
-                Class interopScenarioClientClass = Class
-                        .forName("org.apache.axis2.security.InteropScenarioClient");
-                Constructor c = interopScenarioClientClass
-                        .getConstructor(new Class[]{boolean.class});
-                Object clientObj = c.newInstance(new Object[]{this
-                        .isUseSOAP12InStaticConfigTest() ? Boolean.TRUE
-                        : Boolean.FALSE});
-                Method m = interopScenarioClientClass.getMethod(
-                        "invokeWithGivenConfigWithProRefs", new Class[]{
-                        String.class,
-                        String.class, OutflowConfiguration.class,
-                        InflowConfiguration.class, Hashtable.class});
-                m.invoke(clientObj, new Object[]{
-                        Constants.TESTING_PATH + DEFAULT_CLIENT_REPOSITORY,
-                        targetEpr, getOutflowConfigurationWithRefs(),
-                        getInflowConfigurationWithRefs(),
-                        getPropertyRefs()});
-            } catch (Exception e) {
-                e.printStackTrace();
-                fail("Error in introperating with " + targetEpr
-                        + ", client configuration: " + getClientRepo());
-            }
-        }
-    }
-    
-    protected abstract OutflowConfiguration getOutflowConfiguration();
-
-    protected abstract InflowConfiguration getInflowConfiguration();
-
-    protected abstract OutflowConfiguration getOutflowConfigurationWithRefs();
-
-    protected abstract InflowConfiguration getInflowConfigurationWithRefs();
-    
-    protected abstract Hashtable getPropertyRefs();
-    
-    protected abstract String getClientRepo();
-
-    protected abstract String getServiceRepo();
-
-    protected abstract boolean isUseSOAP12InStaticConfigTest();
-}
diff --git a/modules/rampart-integration/src/test/java/org/apache/axis2/security/MTOMOptimizedSecurityTest.java b/modules/rampart-integration/src/test/java/org/apache/axis2/security/MTOMOptimizedSecurityTest.java
deleted file mode 100644
index e96599e..0000000
--- a/modules/rampart-integration/src/test/java/org/apache/axis2/security/MTOMOptimizedSecurityTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-
-import java.util.Hashtable;
-import java.util.Properties;
-
-
-/**
- * Testing optimizing the base 64 elements with 
- * <code><parameter name="optimizeParts" locked="false">//xenc:Encrypted
- * Data/xenc:CipherData/xenc:CipherValue</parameter></code>
- */
-public class MTOMOptimizedSecurityTest extends InteropTestBase {
-
-
-	protected OutflowConfiguration getOutflowConfiguration() {
-		OutflowConfiguration ofc = new OutflowConfiguration();
-		
-		ofc.setActionItems("Signature Encrypt Timestamp");
-		ofc.setUser("alice");
-		ofc.setEncryptionUser("bob");
-		ofc.setSignaturePropFile("interop.properties");
-		ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-		ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-		ofc.setOptimizeParts("//xenc:EncryptedData/xenc:CipherData/" +
-                             "xenc:CipherValue");
-		
-		return ofc;
-	}
-
-	protected InflowConfiguration getInflowConfiguration() {
-		InflowConfiguration ifc = new InflowConfiguration();
-		
-		ifc.setActionItems("Signature Encrypt Timestamp");
-		ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ifc.setSignaturePropFile("interop.properties");
-		
-		return ifc;
-	}
-
-	protected String getClientRepo() {
-		return MTOM_SEC_CLIENT_REPOSITORY;
-	}
-
-	protected String getServiceRepo() {
-		return MTOM_SEC_SERVICE_REPOSITORY;
-	}
-
-	protected boolean isUseSOAP12InStaticConfigTest() {
-		return true;
-	}
-
-    protected OutflowConfiguration getOutflowConfigurationWithRefs() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-        
-        ofc.setActionItems("Signature Encrypt Timestamp");
-        ofc.setUser("alice");
-        ofc.setEncryptionUser("bob");
-        ofc.setSignaturePropRefId("key1");
-        ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-        ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-        ofc.setOptimizeParts("//xenc:EncryptedData/xenc:CipherData/" +
-                             "xenc:CipherValue");
-        
-        return ofc;
-    }
-
-    protected InflowConfiguration getInflowConfigurationWithRefs() {
-        InflowConfiguration ifc = new InflowConfiguration();
-        
-        ifc.setActionItems("Signature Encrypt Timestamp");
-        ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ifc.setSignaturePropRefId("key2");
-        
-        return ifc;
-    }
-
-    protected Hashtable getPropertyRefs() {
-        Properties prop1 =  new Properties();
-        prop1.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-
-        Properties prop2 =  new Properties();
-        prop2.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-        
-        Hashtable table = new Hashtable();
-        table.put("key1", prop1);
-        table.put("key2", prop2);
-        
-        return table;
-    }
-	
-}
diff --git a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario1Test.java b/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario1Test.java
deleted file mode 100644
index 505b507..0000000
--- a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario1Test.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-
-import java.util.Hashtable;
-
-
-/**
- * WS-Security interop scenario 1
- */
-public class Scenario1Test extends InteropTestBase {
-
-    
-	protected OutflowConfiguration getOutflowConfiguration() {
-		OutflowConfiguration ofc = new OutflowConfiguration();
-		ofc.setActionItems("UsernameToken");
-		ofc.setUser("Chris");
-		ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ofc.setPasswordType("PasswordText");
-		return ofc;
-	}
-
-	protected InflowConfiguration getInflowConfiguration() {
-		return null;
-	}
-
-	protected String getClientRepo() {
-		return SCENARIO1_CLIENT_REPOSITORY;
-	}
-
-	protected String getServiceRepo() {
-		return SCENARIO1_SERVICE_REPOSITORY;
-	}
-
-	protected boolean isUseSOAP12InStaticConfigTest() {
-		return true;
-	}
-
-    protected OutflowConfiguration getOutflowConfigurationWithRefs() {
-        return null;
-    }
-
-    protected InflowConfiguration getInflowConfigurationWithRefs() {
-        return null;
-    }
-
-    protected Hashtable getPropertyRefs() {
-        return null;
-    }
-
-}
diff --git a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario2Test.java b/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario2Test.java
deleted file mode 100644
index 2e626b7..0000000
--- a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario2Test.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-import org.apache.ws.security.WSConstants;
-
-import java.util.Hashtable;
-import java.util.Properties;
-
-/**
- * WS-Security inteorp scenario 2
- */
-public class Scenario2Test extends InteropTestBase {
-    
-	protected OutflowConfiguration getOutflowConfiguration() {
-		OutflowConfiguration ofc = new OutflowConfiguration();
-		
-		ofc.setActionItems("UsernameToken Encrypt");
-		ofc.setUser("Chris");
-		ofc.setAddUTElements("Nonce Created");
-		ofc.setEncryptionParts("{Element}{" + WSSE_NS + "}UsernameToken");
-		ofc.setEncryptionUser("bob");
-		ofc.setEncryptionPropFile("interop.properties");
-		ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-		ofc.setPasswordType(WSConstants.PW_TEXT);
-		ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-		
-		return ofc;
-	}
-
-	protected InflowConfiguration getInflowConfiguration() {
-		return null;
-	}
-
-	protected String getClientRepo() {
-		return SCENARIO2_CLIENT_REPOSITORY;
-	}
-
-	protected String getServiceRepo() {
-		return SCENARIO2_SERVICE_REPOSITORY;
-	}
-
-	protected boolean isUseSOAP12InStaticConfigTest() {
-		return true;
-	}
-
-    /* (non-Javadoc)
-     * @see org.apache.axis2.security.InteropTestBase#getOutflowConfigurationWithRefs()
-     */
-    protected OutflowConfiguration getOutflowConfigurationWithRefs() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-        
-        ofc.setActionItems("UsernameToken Encrypt");
-        ofc.setUser("Chris");
-        ofc.setAddUTElements("Nonce Created");
-        ofc.setEncryptionParts("{Element}{" + WSSE_NS + "}UsernameToken");
-        ofc.setEncryptionUser("bob");
-        ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-        ofc.setPasswordType(WSConstants.PW_TEXT);
-        ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-        
-        ofc.setEncryptionPropRefId("key1");
-        
-        return ofc;
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.axis2.security.InteropTestBase#getInflowConfigurationWithRefs()
-     */
-    protected InflowConfiguration getInflowConfigurationWithRefs() {
-        return null;
-    }
-
-    protected Hashtable getPropertyRefs() {
-        Properties prop1 =  new Properties();
-        prop1.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-        
-        Hashtable table = new Hashtable();
-        table.put("key1", prop1);
-        
-        return table;
-    }
-}
diff --git a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario2aTest.java b/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario2aTest.java
deleted file mode 100644
index 2cbf860..0000000
--- a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario2aTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-import org.apache.ws.security.WSConstants;
-
-import java.util.Hashtable;
-import java.util.Properties;
-
-
-/**
- * WS-Security interop scenario 2a
- */
-public class Scenario2aTest extends InteropTestBase {
-
-
-	protected OutflowConfiguration getOutflowConfiguration() {
-		OutflowConfiguration ofc = new OutflowConfiguration();
-		
-		ofc.setActionItems("UsernameTokenSignature Encrypt Timestamp");
-		ofc.setUser("Chris");
-		ofc.setEncryptionParts("{Element}{" + WSSE_NS + "}UsernameToken");
-		ofc.setEncryptionUser("bob");
-		ofc.setEncryptionPropFile("interop.properties");
-		ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-		ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-		
-		return ofc;
-	}
-
-	protected InflowConfiguration getInflowConfiguration() {
-		return null;
-	}
-
-	protected String getClientRepo() {
-		return SCENARIO2a_CLIENT_REPOSITORY;
-	}
-
-	protected String getServiceRepo() {
-		return SCENARIO2a_SERVICE_REPOSITORY;
-	}
-
-	protected boolean isUseSOAP12InStaticConfigTest() {
-		return true;
-	}
-
-    protected OutflowConfiguration getOutflowConfigurationWithRefs() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-        
-        ofc.setActionItems("UsernameTokenSignature Encrypt Timestamp");
-        ofc.setUser("Chris");
-        ofc.setEncryptionParts("{Element}{" + WSSE_NS + "}UsernameToken");
-        ofc.setEncryptionUser("bob");
-        ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-        ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-        
-        ofc.setEncryptionPropRefId("key1");
-        
-        return ofc;
-    }
-
-    protected InflowConfiguration getInflowConfigurationWithRefs() {
-        return null;
-    }
-
-    protected Hashtable getPropertyRefs() {
-        
-        Properties prop1 =  new Properties();
-        prop1.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-        
-        Hashtable table = new Hashtable();
-        table.put("key1", prop1);
-        
-        return table;
-        
-    }
-}
diff --git a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario3Test.java b/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario3Test.java
deleted file mode 100644
index 679cdce..0000000
--- a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario3Test.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-import org.apache.ws.security.WSConstants;
-
-import java.util.Hashtable;
-import java.util.Properties;
-
-/**
- * WS-Security interop scenario 3
- */
-public class Scenario3Test extends InteropTestBase {
-
-
-	protected OutflowConfiguration getOutflowConfiguration() {
-		OutflowConfiguration ofc = new OutflowConfiguration();
-		
-		ofc.setActionItems("Signature Encrypt Timestamp");
-		ofc.setUser("alice");
-		ofc.setEncryptionUser("bob");
-		ofc.setSignaturePropFile("interop.properties");
-		ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-		ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-		ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-		ofc.setEnableSignatureConfirmation(false);
-		
-		return ofc;
-	}
-
-	protected InflowConfiguration getInflowConfiguration() {
-		InflowConfiguration ifc = new InflowConfiguration();
-		ifc.setActionItems("Signature Encrypt Timestamp");
-		ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ifc.setSignaturePropFile("interop.properties");
-		ifc.setEnableSignatureConfirmation(false);
-		return ifc;
-	}
-
-	protected String getClientRepo() {
-		return SCENARIO3_CLIENT_REPOSITORY;
-	}
-
-	protected String getServiceRepo() {
-		return SCENARIO3_SERVICE_REPOSITORY;
-	}
-
-	protected boolean isUseSOAP12InStaticConfigTest() {
-		return true;
-	}
-
-    protected OutflowConfiguration getOutflowConfigurationWithRefs() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-        
-        ofc.setActionItems("Signature Encrypt Timestamp");
-        ofc.setUser("alice");
-        ofc.setEncryptionUser("bob");
-        ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-        ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-        ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-        ofc.setEnableSignatureConfirmation(false);
-        
-        ofc.setSignaturePropRefId("key1");
-        
-        return ofc;
-    }
-
-    protected InflowConfiguration getInflowConfigurationWithRefs() {
-        InflowConfiguration ifc = new InflowConfiguration();
-        ifc.setActionItems("Signature Encrypt Timestamp");
-        ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ifc.setEnableSignatureConfirmation(false);
-        
-        ifc.setSignaturePropRefId("key2");
-        
-        return ifc;
-    }
-
-    protected Hashtable getPropertyRefs() {
-        Properties prop1 =  new Properties();
-        prop1.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-
-        Properties prop2 =  new Properties();
-        prop2.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-        
-        Hashtable table = new Hashtable();
-        table.put("key1", prop1);
-        table.put("key2", prop2);
-        
-        return table;
-    }
-
-	
-}
diff --git a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario4Test.java b/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario4Test.java
deleted file mode 100644
index fb6565f..0000000
--- a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario4Test.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-import org.apache.ws.security.WSConstants;
-
-import java.util.Hashtable;
-import java.util.Properties;
-
-/**
- * WS-Security interop scenario 4
- */
-public class Scenario4Test extends InteropTestBase {
-
-
-	protected OutflowConfiguration getOutflowConfiguration() {
-		OutflowConfiguration ofc = new OutflowConfiguration();
-		
-		ofc.setActionItems("Signature Encrypt Timestamp");
-		ofc.setUser("alice");
-		ofc.setSignaturePropFile("interop.properties");
-		ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-		ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.EMBEDDED_KEYNAME);
-		ofc.setEmbeddedKeyName("SessionKey");
-		ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-		ofc.setEmbeddedKeyCallbackClass("org.apache.axis2.security.PWCallback");
-
-		return ofc;
-	}
-
-	protected InflowConfiguration getInflowConfiguration() {
-		InflowConfiguration ifc = new InflowConfiguration();
-		
-		ifc.setActionItems("Signature Encrypt Timestamp");
-		ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ifc.setSignaturePropFile("interop.properties");
-
-        /**
-         * This test is not "Basic Security Profile(BSP)" compatible. Cos we use
-         * KeyInfo/KeyName. Therefore setting this test as not BSP compatible.
-         */
-        ifc.setBSPCompliant(false);
-		
-		return ifc;
-	}
-
-	protected String getClientRepo() {
-		return SCENARIO4_CLIENT_REPOSITORY;
-	}
-
-	protected String getServiceRepo() {
-		return SCENARIO4_SERVICE_REPOSITORY;
-	}
-
-	protected boolean isUseSOAP12InStaticConfigTest() {
-		return true;
-	}
-
-    protected OutflowConfiguration getOutflowConfigurationWithRefs() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-        
-        ofc.setActionItems("Signature Encrypt Timestamp");
-        ofc.setUser("alice");
-        ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-        ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.EMBEDDED_KEYNAME);
-        ofc.setEmbeddedKeyName("SessionKey");
-        ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-        ofc.setEmbeddedKeyCallbackClass("org.apache.axis2.security.PWCallback");
-
-        ofc.setSignaturePropRefId("key1");
-        
-        return ofc;
-    }
-
-    protected InflowConfiguration getInflowConfigurationWithRefs() {
-        InflowConfiguration ifc = new InflowConfiguration();
-        
-        ifc.setActionItems("Signature Encrypt Timestamp");
-        ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        
-        ifc.setSignaturePropRefId("key2");
-        ifc.setBSPCompliant(false);
-        
-        return ifc;
-    }
-
-    protected Hashtable getPropertyRefs() {
-        Properties prop1 =  new Properties();
-        prop1.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-
-        Properties prop2 =  new Properties();
-        prop2.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-        
-        Hashtable table = new Hashtable();
-        table.put("key1", prop1);
-        table.put("key2", prop2);
-        
-        return table;
-    }
-
-}
diff --git a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario5Test.java b/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario5Test.java
deleted file mode 100644
index ef15ff4..0000000
--- a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario5Test.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-
-import java.util.Hashtable;
-import java.util.Properties;
-
-/**
- * WS-Security interop scenario 5
- */
-public class Scenario5Test extends InteropTestBase {
-
-
-	protected OutflowConfiguration getOutflowConfiguration() {
-		OutflowConfiguration ofc = new OutflowConfiguration(2);
-		
-		ofc.setActionItems("Signature");
-		ofc.setUser("alice");
-		ofc.setSignaturePropFile("interop.properties");
-		ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-		ofc.setSignatureParts("{}{http://xmlsoap.org/Ping}ticket");
-		
-		ofc.nextAction();
-		
-		ofc.setActionItems("Signature Timestamp");
-		ofc.setUser("alice");
-		ofc.setSignaturePropFile("interop.properties");
-		ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		
-		return ofc;
-	}
-
-	protected InflowConfiguration getInflowConfiguration() {
-		return null;
-	}
-
-	protected String getClientRepo() {
-		return SCENARIO5_CLIENT_REPOSITORY;
-	}
-
-	protected String getServiceRepo() {
-		return SCENARIO5_SERVICE_REPOSITORY;
-	}
-
-	protected boolean isUseSOAP12InStaticConfigTest() {
-		return true;
-	}
-
-    protected OutflowConfiguration getOutflowConfigurationWithRefs() {
-        OutflowConfiguration ofc = new OutflowConfiguration(2);
-        
-        ofc.setActionItems("Signature");
-        ofc.setUser("alice");
-        ofc.setSignaturePropRefId("key1");
-        ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-        ofc.setSignatureParts("{}{http://xmlsoap.org/Ping}ticket");
-        
-        ofc.nextAction();
-        
-        ofc.setActionItems("Signature Timestamp");
-        ofc.setUser("alice");
-        ofc.setSignaturePropRefId("key2");
-        ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        
-        return ofc;
-    }
-
-    protected InflowConfiguration getInflowConfigurationWithRefs() {
-        return null;
-    }
-
-    protected Hashtable getPropertyRefs() {
-        Properties prop1 =  new Properties();
-        prop1.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-
-        Properties prop2 =  new Properties();
-        prop2.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-        
-        Hashtable table = new Hashtable();
-        table.put("key1", prop1);
-        
-        //IMPORTANT: Note that the key of the first repetition has "1" appended to it
-        table.put("key21", prop2);
-        
-        return table;
-    }
-}
diff --git a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario6Test.java b/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario6Test.java
deleted file mode 100644
index 3a5033d..0000000
--- a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario6Test.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-import org.apache.ws.security.WSConstants;
-
-import java.util.Hashtable;
-import java.util.Properties;
-
-/**
- * WS-Security interop scenario 6
- */
-public class Scenario6Test extends InteropTestBase {
-	
-
-	protected OutflowConfiguration getOutflowConfiguration() {
-		OutflowConfiguration ofc = new OutflowConfiguration();
-		
-		ofc.setActionItems("Encrypt Signature Timestamp");
-		ofc.setUser("alice");
-		ofc.setSignaturePropFile("interop.properties");
-		ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-		ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-		ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-		ofc.setEmbeddedKeyCallbackClass("rg.apache.axis2.security.PWCallback");
-		
-		return ofc;
-	}
-
-	protected InflowConfiguration getInflowConfiguration() {
-		InflowConfiguration ifc = new InflowConfiguration();
-		
-		ifc.setActionItems("Encrypt Signature Timestamp");
-		ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ifc.setSignaturePropFile("interop.properties");
-		
-		return ifc;
-	}
-
-	protected String getClientRepo() {
-		return SCENARIO6_CLIENT_REPOSITORY;
-	}
-
-	protected String getServiceRepo() {
-		return SCENARIO6_SERVICE_REPOSITORY;
-	}
-
-	protected boolean isUseSOAP12InStaticConfigTest() {
-		return true;
-	}
-
-    protected OutflowConfiguration getOutflowConfigurationWithRefs() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-        
-        ofc.setActionItems("Encrypt Signature Timestamp");
-        ofc.setUser("alice");
-        ofc.setSignaturePropRefId("key1");
-        ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-        ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-        ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-        ofc.setEmbeddedKeyCallbackClass("rg.apache.axis2.security.PWCallback");
-        
-        return ofc;
-    }
-
-    protected InflowConfiguration getInflowConfigurationWithRefs() {
-        InflowConfiguration ifc = new InflowConfiguration();
-        
-        ifc.setActionItems("Encrypt Signature Timestamp");
-        ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ifc.setSignaturePropRefId("key2");
-        
-        return ifc;
-    }
-
-    protected Hashtable getPropertyRefs() {
-        Properties prop1 =  new Properties();
-        prop1.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-
-        Properties prop2 =  new Properties();
-        prop2.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-        
-        Hashtable table = new Hashtable();
-        table.put("key1", prop1);
-        table.put("key2", prop2);
-        
-        return table;
-    }
-}
diff --git a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario7Test.java b/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario7Test.java
deleted file mode 100644
index af3e63f..0000000
--- a/modules/rampart-integration/src/test/java/org/apache/axis2/security/Scenario7Test.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.axis2.security;
-
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-import org.apache.ws.security.WSConstants;
-
-import java.util.Hashtable;
-import java.util.Properties;
-
-/**
- * WS-Security interop scenario 7
- */
-public class Scenario7Test extends InteropTestBase {
-
-  
-	protected OutflowConfiguration getOutflowConfiguration() {
-		OutflowConfiguration ofc = new OutflowConfiguration();
-		
-		ofc.setActionItems("Signature Encrypt Timestamp");
-		ofc.setUser("alice");
-		ofc.setEncryptionUser("bob");
-		ofc.setSignaturePropFile("interop.properties");
-		ofc.setEncryptionPropFile("interop.properties");
-		ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-		ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-		ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-		ofc.setEmbeddedKeyCallbackClass("rg.apache.axis2.security.PWCallback");
-		ofc.setSignatureParts("{}{" + 
-                                SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI + 
-                                "}Body;STRTransform");
-		
-		return ofc;
-	}
-
-	protected InflowConfiguration getInflowConfiguration() {
-		InflowConfiguration ifc = new InflowConfiguration();
-		
-		ifc.setActionItems("Signature Encrypt Timestamp");
-		ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-		ifc.setSignaturePropFile("interop.properties");
-		ifc.setDecryptionPropFile("interop.properties");
-		
-		return ifc;
-	}
-
-	protected String getClientRepo() {
-		return SCENARIO7_CLIENT_REPOSITORY;
-	}
-
-	protected String getServiceRepo() {
-		return SCENARIO7_SERVICE_REPOSITORY;
-	}
-
-	protected boolean isUseSOAP12InStaticConfigTest() {
-		return false;
-	}
-
-    protected OutflowConfiguration getOutflowConfigurationWithRefs() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-        
-        ofc.setActionItems("Signature Encrypt Timestamp");
-        ofc.setUser("alice");
-        ofc.setEncryptionUser("bob");
-        ofc.setSignaturePropRefId("key1");
-        ofc.setEncryptionPropRefId("key2");
-        ofc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ofc.setEncryptionSymAlgorithm(WSConstants.TRIPLE_DES);
-        ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-        ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-        ofc.setEmbeddedKeyCallbackClass("rg.apache.axis2.security.PWCallback");
-        ofc.setSignatureParts("{}{" + 
-                                SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI + 
-                                "}Body;STRTransform");
-        
-        return ofc;
-    }
-
-    protected InflowConfiguration getInflowConfigurationWithRefs() {
-        InflowConfiguration ifc = new InflowConfiguration();
-        
-        ifc.setActionItems("Signature Encrypt Timestamp");
-        ifc.setPasswordCallbackClass("org.apache.axis2.security.PWCallback");
-        ifc.setSignaturePropRefId("key3");
-        ifc.setDecryptionPropRefKey("key4");
-        
-        return ifc;
-    }
-
-    protected Hashtable getPropertyRefs() {
-        Properties prop1 =  new Properties();
-        prop1.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop1.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-
-        Properties prop2 =  new Properties();
-        prop2.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop2.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-        
-        Properties prop3 =  new Properties();
-        prop3.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop3.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop3.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop3.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-
-        Properties prop4 =  new Properties();
-        prop4.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
-        prop4.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
-        prop4.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "password");
-        prop4.setProperty("org.apache.ws.security.crypto.merlin.file", "interop2.jks");
-        
-        Hashtable table = new Hashtable();
-        table.put("key1", prop1);
-        table.put("key2", prop2);
-        table.put("key3", prop3);
-        table.put("key4", prop4);
-        
-        return table;
-    }
-}
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenCertForHoKTest.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenCertForHoKTest.java
index 1adfb5c..546bac4 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenCertForHoKTest.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenCertForHoKTest.java
@@ -1,14 +1,4 @@
-package org.apache.rahas;
-
-import org.apache.rampart.handler.config.OutflowConfiguration;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.neethi.Policy;
-import org.apache.ws.secpolicy.SP11Constants;
-
-import javax.xml.namespace.QName;/*
+/*
  * Copyright 2004,2005 The Apache Software Foundation.                         
  *                                                                             
  * Licensed under the Apache License, Version 2.0 (the "License");             
@@ -24,32 +14,19 @@
  * limitations under the License.                                              
  */
 
+package org.apache.rahas;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.neethi.Policy;
+import org.apache.ws.secpolicy.SP11Constants;
+
+import static org.junit.Assert.assertNotNull;
+
+import javax.xml.namespace.QName;
+
 public class RahasSAML2TokenCertForHoKTest extends TestClient{
-    public RahasSAML2TokenCertForHoKTest(String name) {
-           super(name);
-       }
-
-       public OutflowConfiguration getClientOutflowConfiguration() {
-           OutflowConfiguration ofc = new OutflowConfiguration();
-
-           ofc.setActionItems("Signature Encrypt Timestamp");
-           ofc.setUser("alice");
-           ofc.setEncryptionUser("ip");
-           ofc.setSignaturePropFile("rahas/rahas-sec.properties");
-           ofc.setPasswordCallbackClass(PWCallback.class.getName());
-           return ofc;
-       }
-
-       public InflowConfiguration getClientInflowConfiguration() {
-           InflowConfiguration ifc = new InflowConfiguration();
-
-           ifc.setActionItems("Signature Encrypt Timestamp");
-           ifc.setPasswordCallbackClass(PWCallback.class.getName());
-           ifc.setSignaturePropFile("rahas/rahas-sec.properties");
-
-           return ifc;
-       }
-
        public String getServiceRepo() {
            return "rahas_service_repo_1";
        }
@@ -127,4 +104,9 @@
            return RahasConstants.VERSION_05_02;
        }
 
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/1.xml";
+	}
+
 }
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenTest.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenTest.java
index cdf406d..9e35c98 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenTest.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenTest.java
@@ -19,41 +19,14 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-import org.apache.rampart.handler.config.InflowConfiguration;
 import org.apache.neethi.Policy;
 import org.apache.ws.secpolicy.SP11Constants;
 
+import static org.junit.Assert.assertNotNull;
+
 import javax.xml.namespace.QName;
+
 public class RahasSAML2TokenTest extends TestClient{
-    /**
-     * @param name
-     */
-    public RahasSAML2TokenTest(String name) {
-        super(name);
-    }
-
-
-    public OutflowConfiguration getClientOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("Signature Encrypt Timestamp");
-        ofc.setUser("alice");
-        ofc.setSignaturePropFile("rahas/rahas-sec.properties");
-        ofc.setPasswordCallbackClass(PWCallback.class.getName());
-        return ofc;
-    }
-
-    public InflowConfiguration getClientInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Signature Encrypt Timestamp");
-        ifc.setPasswordCallbackClass(PWCallback.class.getName());
-        ifc.setSignaturePropFile("rahas/rahas-sec.properties");
-
-        return ifc;
-    }
-
     public String getServiceRepo() {
         return "rahas_service_repo_1";
     }
@@ -125,4 +98,10 @@
     public int getTrstVersion() {
         return RahasConstants.VERSION_05_02;
     }
+
+
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/1.xml";
+	}
 }
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenUTForBearerTest.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenUTForBearerTest.java
index 80a2989..76967c5 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenUTForBearerTest.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAML2TokenUTForBearerTest.java
@@ -20,8 +20,6 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.neethi.Policy;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
 import org.apache.ws.secpolicy.SP11Constants;
 import org.opensaml.Configuration;
 import org.opensaml.saml2.core.Assertion;
@@ -35,6 +33,10 @@
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
 import java.io.ByteArrayInputStream;
 import java.util.List;
 
@@ -43,11 +45,6 @@
  * @author Ruchith Fernando (ruchith.fernando@gmail.com)
  */
 public class RahasSAML2TokenUTForBearerTest extends TestClient {
-
-    public RahasSAML2TokenUTForBearerTest(String name) {
-        super(name);
-    }
-
     public OMElement getRequest() {
         try {
             OMElement rstElem = TrustUtil.createRequestSecurityTokenElement(RahasConstants.VERSION_05_02);
@@ -67,23 +64,6 @@
         }
     }
 
-    public OutflowConfiguration getClientOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("UsernameToken Timestamp");
-        ofc.setUser("joe");
-        ofc.setPasswordCallbackClass(PWCallback.class.getName());
-        return ofc;
-    }
-
-    public InflowConfiguration getClientInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Timestamp");
-
-        return ifc;
-    }
-
     public String getServiceRepo() {
         return "rahas_service_repo_3";
     }
@@ -171,4 +151,9 @@
         }
         return  assertion;
     }
+
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/3.xml";
+	}
 }
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenAttributeTest.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenAttributeTest.java
index 7579887..8acb16e 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenAttributeTest.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenAttributeTest.java
@@ -1,21 +1,16 @@
 package org.apache.rahas;
 
+import static org.junit.Assert.assertNotNull;
+
 import javax.xml.namespace.QName;
 
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.neethi.Policy;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
 import org.apache.ws.secpolicy.SP11Constants;
 
 public class RahasSAMLTokenAttributeTest  extends TestClient{
-    
-	public RahasSAMLTokenAttributeTest(String name) {
-        super(name);
-    }
-    
     public OMElement getRequest() {
         try {
             OMElement rstElem = TrustUtil.createRequestSecurityTokenElement(RahasConstants.VERSION_05_02);
@@ -35,23 +30,6 @@
         }
     }
 
-    public OutflowConfiguration getClientOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("UsernameToken Timestamp");
-        ofc.setUser("joe");
-        ofc.setPasswordCallbackClass(PWCallback.class.getName());
-        return ofc;
-    }
-
-    public InflowConfiguration getClientInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Timestamp");
-        
-        return ifc;
-    }
-
     public String getServiceRepo() {
         return "rahas_service_repo_5";
     }
@@ -99,4 +77,9 @@
     public int getTrstVersion() {
         return RahasConstants.VERSION_05_02;
     }
+
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/3.xml";
+	}
 }
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenCertForHoKTest.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenCertForHoKTest.java
index 45946e5..9bdcd87 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenCertForHoKTest.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenCertForHoKTest.java
@@ -20,40 +20,13 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.neethi.Policy;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
 import org.apache.ws.secpolicy.SP11Constants;
 
+import static org.junit.Assert.assertNotNull;
+
 import javax.xml.namespace.QName;
 
-
 public class RahasSAMLTokenCertForHoKTest extends TestClient {
-
-    public RahasSAMLTokenCertForHoKTest(String name) {
-        super(name);
-    }
-
-    public OutflowConfiguration getClientOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("Signature Encrypt Timestamp");
-        ofc.setUser("alice");
-        ofc.setEncryptionUser("ip");
-        ofc.setSignaturePropFile("rahas/rahas-sec.properties");
-        ofc.setPasswordCallbackClass(PWCallback.class.getName());
-        return ofc;
-    }
-
-    public InflowConfiguration getClientInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Signature Encrypt Timestamp");
-        ifc.setPasswordCallbackClass(PWCallback.class.getName());
-        ifc.setSignaturePropFile("rahas/rahas-sec.properties");
-        
-        return ifc;
-    }
-
     public String getServiceRepo() {
         return "rahas_service_repo_1";
     }
@@ -132,4 +105,9 @@
         return RahasConstants.VERSION_05_02;
     }
 
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/1.xml";
+	}
+
 }
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenCertForHoKV1205Test.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenCertForHoKV1205Test.java
index f01ffc4..006b9a0 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenCertForHoKV1205Test.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenCertForHoKV1205Test.java
@@ -20,21 +20,13 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.neethi.Policy;
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
 import org.apache.ws.secpolicy.SP12Constants;
-import org.apache.xml.security.encryption.XMLCipher;
+
+import static org.junit.Assert.assertNotNull;
 
 import javax.xml.namespace.QName;
 
 public class RahasSAMLTokenCertForHoKV1205Test extends TestClient {
-
-
-    public RahasSAMLTokenCertForHoKV1205Test(String name) {
-        super(name);
-    }
-
     public OMElement getRequest() {
         try {
             OMElement rstElem =
@@ -62,41 +54,6 @@
         }
     }
 
-    public OutflowConfiguration getClientOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-//        ofc.setActionItems("Timestamp Signature Encrypt");
-        ofc.setActionItems("Signature Encrypt Timestamp");
-        ofc.setUser("alice");
-        ofc.setEncryptionUser("ip");
-        ofc.setSignaturePropFile("rahas/rahas-sec.properties");
-        ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-        ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-        ofc.setEncryptionKeyTransportAlgorithm(XMLCipher.RSA_OAEP);
-//        ofc.setEncryptionSymAlgorithm(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES256);
-        ofc.setPasswordCallbackClass(PWCallback.class.getName());
-        ofc.setEnableSignatureConfirmation(false);
-//        ofc.setSignatureParts("{Element}{http://schemas.xmlsoap.org/soap/envelope/}Body;" +
-//                                "{Element}{" + RahasConstants.WSA_NS + "}To;" +
-//                                "{Element}{" + RahasConstants.WSA_NS + "}ReplyTo;" +
-//                                "{Element}{" + RahasConstants.WSA_NS + "}MessageID;" +
-//                                "{Element}{" + RahasConstants.WSA_NS + "}Action;" +
-//                                "{Element}{" + WSConstants.WSU_NS + "}Timestamp");
-
-        return ofc;
-    }
-
-    public InflowConfiguration getClientInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Signature Encrypt Timestamp");
-        ifc.setPasswordCallbackClass(PWCallback.class.getName());
-        ifc.setSignaturePropFile("rahas/rahas-sec.properties");
-        ifc.setEnableSignatureConfirmation(false);
-
-        return ifc;
-    }
-
     public String getServiceRepo() {
         return "rahas_service_repo_1";
     }
@@ -148,4 +105,9 @@
         return RahasConstants.VERSION_05_12;
     }
 
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/1.xml";
+	}
+
 }
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenTest.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenTest.java
index efd1f83..61ed5d2 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenTest.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenTest.java
@@ -20,43 +20,13 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.neethi.Policy;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
 import org.apache.ws.secpolicy.SP11Constants;
 
+import static org.junit.Assert.assertNotNull;
+
 import javax.xml.namespace.QName;
 
 public class RahasSAMLTokenTest extends TestClient {
-
-
-    /**
-     * @param name
-     */
-    public RahasSAMLTokenTest(String name) {
-        super(name);
-    }
-
-
-    public OutflowConfiguration getClientOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("Signature Encrypt Timestamp");
-        ofc.setUser("alice");
-        ofc.setSignaturePropFile("rahas/rahas-sec.properties");
-        ofc.setPasswordCallbackClass(PWCallback.class.getName());
-        return ofc;
-    }
-
-    public InflowConfiguration getClientInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Signature Encrypt Timestamp");
-        ifc.setPasswordCallbackClass(PWCallback.class.getName());
-        ifc.setSignaturePropFile("rahas/rahas-sec.properties");
-        
-        return ifc;
-    }
-
     public String getServiceRepo() {
         return "rahas_service_repo_1";
     }
@@ -127,4 +97,10 @@
     public int getTrstVersion() {
         return RahasConstants.VERSION_05_02;
     }
+
+
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/1.xml";
+	}
 }
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForBearerTest.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForBearerTest.java
index df2433c..93ed846 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForBearerTest.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForBearerTest.java
@@ -20,8 +20,6 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.neethi.Policy;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
 import org.apache.ws.secpolicy.SP11Constants;
 import org.opensaml.Configuration;
 import org.opensaml.saml1.core.Assertion;
@@ -36,6 +34,10 @@
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
 import java.io.ByteArrayInputStream;
 import java.util.List;
 
@@ -44,11 +46,6 @@
  * @author Ruchith Fernando (ruchith.fernando@gmail.com)
  */
 public class RahasSAMLTokenUTForBearerTest extends TestClient {
-
-    public RahasSAMLTokenUTForBearerTest(String name) {
-        super(name);
-    }
-
     public OMElement getRequest() {
         try {
             OMElement rstElem = TrustUtil.createRequestSecurityTokenElement(RahasConstants.VERSION_05_02);
@@ -68,23 +65,6 @@
         }
     }
 
-    public OutflowConfiguration getClientOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("UsernameToken Timestamp");
-        ofc.setUser("joe");
-        ofc.setPasswordCallbackClass(PWCallback.class.getName());
-        return ofc;
-    }
-
-    public InflowConfiguration getClientInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Timestamp");
-        
-        return ifc;
-    }
-
     public String getServiceRepo() {
         return "rahas_service_repo_3";
     }
@@ -172,4 +152,9 @@
         }
         return  assertion;
     }
+
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/3.xml";
+	}
 }
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForBearerV1205Test.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForBearerV1205Test.java
index 9a93afc..bfd771f 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForBearerV1205Test.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForBearerV1205Test.java
@@ -20,21 +20,13 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.neethi.Policy;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
 import org.apache.ws.secpolicy.SP12Constants;
 
+import static org.junit.Assert.assertNotNull;
+
 import javax.xml.namespace.QName;
 
 public class RahasSAMLTokenUTForBearerV1205Test extends TestClient {
-
-    /**
-     * @param name
-     */
-    public RahasSAMLTokenUTForBearerV1205Test(String name) {
-        super(name);
-    }
-
     public OMElement getRequest() {
         try {
             OMElement rstElem = TrustUtil.createRequestSecurityTokenElement(RahasConstants.VERSION_05_12);
@@ -54,23 +46,6 @@
         }
     }
 
-    public OutflowConfiguration getClientOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("UsernameToken Timestamp");
-        ofc.setUser("joe");
-        ofc.setPasswordCallbackClass(PWCallback.class.getName());
-        return ofc;
-    }
-
-    public InflowConfiguration getClientInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Timestamp");
-        
-        return ifc;
-    }
-
     public String getServiceRepo() {
         return "rahas_service_repo_3";
     }
@@ -122,4 +97,9 @@
     public int getTrstVersion() {
         return RahasConstants.VERSION_05_12;
     }
+
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/3.xml";
+	}
 }
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForHoKTest.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForHoKTest.java
index 677c10e..9e21c61 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForHoKTest.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForHoKTest.java
@@ -20,18 +20,13 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.neethi.Policy;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
 import org.apache.ws.secpolicy.SP11Constants;
 
+import static org.junit.Assert.assertNotNull;
+
 import javax.xml.namespace.QName;
 
 public class RahasSAMLTokenUTForHoKTest extends TestClient {
-
-    public RahasSAMLTokenUTForHoKTest(String name) {
-        super(name);
-    }
-
     public OMElement getRequest() {
         try {
             OMElement rstElem = TrustUtil.createRequestSecurityTokenElement(RahasConstants.VERSION_05_02);
@@ -51,23 +46,6 @@
         }
     }
 
-    public OutflowConfiguration getClientOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("UsernameToken Timestamp");
-        ofc.setUser("joe");
-        ofc.setPasswordCallbackClass(PWCallback.class.getName());
-        return ofc;
-    }
-
-    public InflowConfiguration getClientInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Timestamp");
-        
-        return ifc;
-    }
-
     public String getServiceRepo() {
         return "rahas_service_repo_3";
     }
@@ -116,4 +94,9 @@
     public int getTrstVersion() {
         return RahasConstants.VERSION_05_02;
     }
+
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/3.xml";
+	}
 }
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForHoKV1205Test.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForHoKV1205Test.java
index 9af8b92..d15ba09 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForHoKV1205Test.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenUTForHoKV1205Test.java
@@ -16,30 +16,22 @@
 
 package org.apache.rahas;
 
+import static org.junit.Assert.assertNotNull;
+
 import javax.xml.namespace.QName;
 
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.util.Base64;
+import org.apache.axiom.util.base64.Base64Utils;
 import org.apache.neethi.Policy;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
 import org.apache.ws.secpolicy.SP12Constants;
-import org.apache.ws.security.WSConstants;
 import org.apache.ws.security.util.WSSecurityUtil;
 
 public class RahasSAMLTokenUTForHoKV1205Test extends TestClient {
 
     byte[] clientEntr;
     
-    /**
-     * @param name
-     */
-    public RahasSAMLTokenUTForHoKV1205Test(String name) {
-        super(name);
-    }
-
     public OMElement getRequest() {
         try {
             OMElement rstElem = TrustUtil.createRequestSecurityTokenElement(RahasConstants.VERSION_05_12);
@@ -57,7 +49,7 @@
             byte[] nonce = WSSecurityUtil.generateNonce(16);
             clientEntr = nonce;
             OMElement entrElem = TrustUtil.createEntropyElement(RahasConstants.VERSION_05_12, rstElem);
-            TrustUtil.createBinarySecretElement(RahasConstants.VERSION_05_12, entrElem, RahasConstants.BIN_SEC_TYPE_NONCE).setText(Base64.encode(nonce));
+            TrustUtil.createBinarySecretElement(RahasConstants.VERSION_05_12, entrElem, RahasConstants.BIN_SEC_TYPE_NONCE).setText(Base64Utils.encode(nonce));
             TrustUtil.createComputedKeyAlgorithm(RahasConstants.VERSION_05_12,rstElem, RahasConstants.COMPUTED_KEY_PSHA1);
             
             return rstElem;
@@ -67,24 +59,6 @@
         }
     }
 
-    public OutflowConfiguration getClientOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("UsernameToken Timestamp");
-        ofc.setUser("joe");
-        ofc.setPasswordType(WSConstants.PW_TEXT);
-        ofc.setPasswordCallbackClass(PWCallback.class.getName());
-        return ofc;
-    }
-
-    public InflowConfiguration getClientInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Timestamp");
-        
-        return ifc;
-    }
-
     public String getServiceRepo() {
         return "rahas_service_repo_3";
     }
@@ -158,6 +132,11 @@
     public int getTrstVersion() {
         return RahasConstants.VERSION_05_12;
     }
+
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/3.xml";
+	}
     
 //    private void requestService(OMElement assertion, byte[] reqEnt, byte[] respEnt) throws Exception {
 //        
diff --git a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenV1205Test.java b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenV1205Test.java
index 9a3a9a7..3fddd7f 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenV1205Test.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rahas/RahasSAMLTokenV1205Test.java
@@ -20,24 +20,16 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.neethi.Policy;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
 import org.apache.ws.secpolicy.SP12Constants;
 
+import static org.junit.Assert.assertNotNull;
+
 import javax.xml.namespace.QName;
 
 /**
  * RahasSAMLTokenTest with the WS-SX namespaces
  */
 public class RahasSAMLTokenV1205Test extends TestClient {
-
-    /**
-     * @param name
-     */
-    public RahasSAMLTokenV1205Test(String name) {
-        super(name);
-    }
-
     public OMElement getRequest() {
         try {
             OMElement rstElem = TrustUtil.createRequestSecurityTokenElement(RahasConstants.VERSION_05_12);
@@ -56,25 +48,6 @@
             throw new RuntimeException(e);
         }
     }
-    public OutflowConfiguration getClientOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-
-        ofc.setActionItems("Signature Encrypt Timestamp");
-        ofc.setUser("alice");
-        ofc.setSignaturePropFile("rahas/rahas-sec.properties");
-        ofc.setPasswordCallbackClass(PWCallback.class.getName());
-        return ofc;
-    }
-
-    public InflowConfiguration getClientInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-
-        ifc.setActionItems("Signature Encrypt Timestamp");
-        ifc.setPasswordCallbackClass(PWCallback.class.getName());
-        ifc.setSignaturePropFile("rahas/rahas-sec.properties");
-        
-        return ifc;
-    }
 
     public String getServiceRepo() {
         return "rahas_service_repo_1";
@@ -129,4 +102,9 @@
         return RahasConstants.VERSION_05_12;
     }
 
+	@Override
+	public String getClientPolicyPath() {
+		return "/rahas/1.xml";
+	}
+
 }
diff --git a/modules/rampart-integration/src/test/java/org/apache/rampart/KerberosDelegationService.java b/modules/rampart-integration/src/test/java/org/apache/rampart/KerberosDelegationService.java
new file mode 100644
index 0000000..c007569
--- /dev/null
+++ b/modules/rampart-integration/src/test/java/org/apache/rampart/KerberosDelegationService.java
@@ -0,0 +1,78 @@
+/*
+ * 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.rampart;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.neethi.Policy;
+import org.apache.rampart.policy.model.KerberosConfig;
+import org.apache.rampart.policy.model.RampartConfig;
+
+public class KerberosDelegationService extends PolicyBasedResultsValidator{
+    public OMElement echo(OMElement elem) throws Exception {
+        final String serviceName = "KerberosOverTransportKeytab";
+
+        ServiceClient serviceClient = RampartKerberosTest.clientHelper.createServiceClient(serviceName, null, null);
+
+        RampartConfig rampartConfig = new RampartConfig();  
+        
+        KerberosConfig kerberosConfig = new KerberosConfig();
+        rampartConfig.setKerberosConfig(kerberosConfig);
+        kerberosConfig.setJaasContext("KerberosDelegation");
+        kerberosConfig.setDelegationCredential(KerberosDelegationServiceValidator.getDelegationCredential());
+
+        Policy policy = new Policy();
+        policy.addAssertion(rampartConfig);
+                
+        serviceClient.getAxisService().getPolicySubject().attachPolicyComponent(policy);
+        
+        //Blocking invocation
+        QName operation = new QName("http://rampart.apache.org", "echo");
+        OMElement echoElement = getEchoElement();
+        OMElement result = serviceClient.sendReceive(operation, echoElement);
+        return result;
+    }
+    
+    protected OMElement getEchoElement() {
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMNamespace omNs = fac.createOMNamespace(
+                "http://example1.org/example1", "example1");
+        OMElement method = fac.createOMElement("echo", omNs);
+        OMElement value = fac.createOMElement("Text", omNs);
+        value.addChild(fac.createOMText(value, "Testing Rampart with WS-SecPolicy"));
+        method.addChild(value);
+
+        return method;
+    }
+
+    /**
+     * New service method for testing negative scenario where service throws an exception
+     * @param element
+     * @return
+     * @throws Exception
+     */
+    public OMElement returnError(OMElement element) throws Exception {
+        throw new Exception("Testing negative scenarios with Apache Rampart. Intentional Exception");
+    }
+}
diff --git a/modules/rampart-integration/src/test/java/org/apache/rampart/KerberosDelegationServiceValidator.java b/modules/rampart-integration/src/test/java/org/apache/rampart/KerberosDelegationServiceValidator.java
new file mode 100644
index 0000000..32fc013
--- /dev/null
+++ b/modules/rampart-integration/src/test/java/org/apache/rampart/KerberosDelegationServiceValidator.java
@@ -0,0 +1,46 @@
+/*
+ * 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.rampart;
+
+import java.util.List;
+
+import org.apache.ws.security.WSConstants;
+import org.apache.ws.security.WSSecurityEngineResult;
+import org.ietf.jgss.GSSCredential;
+
+public class KerberosDelegationServiceValidator extends PolicyBasedResultsValidator {
+    private static GSSCredential delegationCredential;
+
+    @Override
+    public void validate(ValidatorData data, List<WSSecurityEngineResult> results) throws RampartException {
+        super.validate(data, results);
+        for (WSSecurityEngineResult wsSecEngineResult : results) {
+            Integer actInt = (Integer) wsSecEngineResult.get(WSSecurityEngineResult.TAG_ACTION);
+            if (actInt == WSConstants.BST) {                
+                delegationCredential = (GSSCredential) wsSecEngineResult.
+                                get(WSSecurityEngineResult.TAG_DELEGATION_CREDENTIAL);
+                break;
+            }
+        }
+    }
+    
+    static GSSCredential getDelegationCredential(){
+        return delegationCredential;
+    }
+}
diff --git a/modules/rampart-integration/src/test/java/org/apache/rampart/RampartKerberosTest.java b/modules/rampart-integration/src/test/java/org/apache/rampart/RampartKerberosTest.java
new file mode 100644
index 0000000..c9b27de
--- /dev/null
+++ b/modules/rampart-integration/src/test/java/org/apache/rampart/RampartKerberosTest.java
@@ -0,0 +1,296 @@
+/*
+ * 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.rampart;
+
+import static com.google.common.truth.Truth.assertAbout;
+import static org.apache.axiom.truth.xml.XMLTruth.xml;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.testutils.ClientHelper;
+import org.apache.axis2.testutils.JettyServer;
+import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.commons.io.IOUtils;
+import org.apache.neethi.Policy;
+import org.apache.rampart.policy.model.KerberosConfig;
+import org.apache.rampart.policy.model.RampartConfig;
+import org.apache.rampart.util.KerberosServer;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Test;
+
+/**
+ * Tests Kerberos authentication over transport binding using a Kerberos token as supporting endorsing token.
+ * The test will use Apache DS Kerberos server, see {@link KerberosServer}.
+ * 
+ * The test is tailored for Oracle Java execution since it uses <code>com.sun.security.auth.module.Krb5LoginModule</code> JAAS login module for Kerberos authentication.
+ */
+public class RampartKerberosTest {
+
+    /**
+     * Java system property for setting JAAS configuration file: {@value}
+     */
+    public static final String JAAS_CONF_SYS_PROP = "java.security.auth.login.config";
+    
+    /**
+     * Java system property for setting Kerberos 5 configuration file: {@value}
+     */
+    public static final String KRB5_CONF_SYS_PROP = "java.security.krb5.conf";
+    
+    /**
+     * JAAS configuration file to use: {@value}
+     * <p>
+     * Contains Kerberos login module entries for authenticating client and server principals:
+     * </p>
+     */
+    public static final String KERBEROS_JAAS_CONF = "src/test/resources/kerberos/jaas.conf";
+    
+    /**
+     * Kerberos configuration file <b>template</b> to use: {@value}
+     * <p>
+     * Specifies the Kerberos realm and KDC server to use, the configuration must contain a <code>KDC_PORT</code> literal
+     * which will be replaced with actual KDC server port.
+     * </p>
+     */
+    public static final String KERBEROS_CONF_TEMPLATE = "src/test/resources/kerberos/krb5.conf.template";
+    
+    /**
+     * A token literal in kerberos5 configuration file template that must be replaced with actual KDC port value: {@value}
+     */
+    public static final String KERBEROS_CONF_KDC_PORT_TOKEN = "KDC_PORT";
+    
+    @ClassRule
+    public static final JettyServer server = new JettyServer("target/test-resources/rampart_service_repo", true);
+    
+    @ClassRule
+    public static final ClientHelper clientHelper = new ClientHelper(server, "target/test-resources/rampart_client_repo") {
+        @Override
+        protected void configureServiceClient(ServiceClient serviceClient) throws Exception {
+            int timeout = 200000;
+            serviceClient.getOptions().setTimeOutInMilliSeconds(timeout);
+            serviceClient.getOptions().setProperty(HTTPConstants.SO_TIMEOUT, timeout);
+            serviceClient.getOptions().setProperty(HTTPConstants.CONNECTION_TIMEOUT, timeout);
+
+            serviceClient.engageModule("addressing");
+            serviceClient.engageModule("rampart");
+        }
+    };
+    
+    @ClassRule
+    public static final KerberosServer kerberosServer = new KerberosServer();
+    
+    /**
+     * Stores any original JAAS configuration set via {@link #JAAS_CONF_SYS_PROP} property to restore it after test execution.
+     */
+    protected String jaasConf;
+    
+    /**
+     * Stores any original Kerberos 5 configuration set via {@link #KRB5_CONF_SYS_PROP} property to restore it after test execution.
+     */
+    protected String krb5Conf;
+    
+    private static OMElement getEchoElement() {
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMNamespace omNs = fac.createOMNamespace(
+                "http://example1.org/example1", "example1");
+        OMElement method = fac.createOMElement("echo", omNs);
+        OMElement value = fac.createOMElement("Text", omNs);
+        value.addChild(fac.createOMText(value, "Testing Rampart with WS-SecPolicy"));
+        method.addChild(value);
+
+        return method;
+    }
+
+    @Test
+    public void testKerberosOverTransportKeytab() throws Exception {
+        final String serviceName = "KerberosOverTransportKeytab";
+        
+        ServiceClient serviceClient = clientHelper.createServiceClient(serviceName, null, null);
+
+        System.out.println("Testing WS-Sec: Kerberos scenario: " + serviceName);
+                
+        
+        RampartConfig rampartConfig = new RampartConfig();
+        KerberosConfig kerberosConfig = new KerberosConfig();
+        rampartConfig.setKerberosConfig(kerberosConfig);
+
+        kerberosConfig.setJaasContext(serviceName + "Client");        
+
+        Policy policy = new Policy();
+        policy.addAssertion(rampartConfig);                
+        serviceClient.getAxisService().getPolicySubject().attachPolicyComponent(policy);
+        
+        //Blocking invocation
+        QName operation = new QName("http://rampart.apache.org", "echo");
+        OMElement echoElement = getEchoElement();
+        OMElement result = serviceClient.sendReceive(operation, echoElement);
+        assertAbout(xml()).that(result).ignoringNamespaceDeclarations().hasSameContentAs(echoElement);
+    }
+    
+    @Test
+    public void testKerberosOverTransportPWCB() throws Exception {
+        final String serviceName = "KerberosOverTransportPWCB";
+        
+        ServiceClient serviceClient = clientHelper.createServiceClient(serviceName, null, null);
+
+        System.out.println("Testing WS-Sec: Kerberos scenario: " + serviceName);
+
+        RampartConfig rampartConfig = new RampartConfig();
+        rampartConfig.setUser("alice");        
+        rampartConfig.setPwCbClass(org.apache.rahas.PWCallback.class.getName());
+        
+        KerberosConfig kerberosConfig = new KerberosConfig();
+        rampartConfig.setKerberosConfig(kerberosConfig);
+
+        kerberosConfig.setJaasContext(serviceName + "Client");
+
+        Policy policy = new Policy();
+        policy.addAssertion(rampartConfig);        
+        serviceClient.getAxisService().getPolicySubject().attachPolicyComponent(policy);
+        
+        //Blocking invocation
+        QName operation = new QName("http://rampart.apache.org", "echo");
+        OMElement echoElement = getEchoElement();
+        OMElement result = serviceClient.sendReceive(operation, echoElement);
+        assertAbout(xml()).that(result).ignoringNamespaceDeclarations().hasSameContentAs(echoElement);
+    }
+    
+    @Test
+    public void testKerberosDelegation() throws Exception {
+        final String serviceName = "KerberosDelegation";
+
+        ServiceClient serviceClient = clientHelper.createServiceClient(serviceName, null, null);
+
+        System.out.println("Testing WS-Sec: Kerberos scenario: " + serviceName);
+                
+        
+        RampartConfig rampartConfig = new RampartConfig();
+        KerberosConfig kerberosConfig = new KerberosConfig();
+        rampartConfig.setKerberosConfig(kerberosConfig);
+
+        kerberosConfig.setJaasContext(serviceName + "Client");  
+        kerberosConfig.setRequstCredentialDelegation(true);
+
+        Policy policy = new Policy();
+        policy.addAssertion(rampartConfig);                
+        serviceClient.getAxisService().getPolicySubject().attachPolicyComponent(policy);
+        
+        //Blocking invocation
+        QName operation = new QName("http://rampart.apache.org", "echo");
+        OMElement echoElement = getEchoElement();
+        OMElement result = serviceClient.sendReceive(operation, echoElement);
+        assertAbout(xml()).that(result).ignoringNamespaceDeclarations().hasSameContentAs(echoElement);
+    }
+    
+    @Before
+    public void setUp() throws Exception {
+        System.setProperty("sun.security.krb5.debug", "true");
+        System.setProperty("sun.security.jgss.debug", "true");
+        
+        //configure JGSS
+        krb5Conf = System.getProperty(KRB5_CONF_SYS_PROP);
+        
+        File krb5ConfFile = generateKerberosConf();
+        System.out.println("Using Kerberos configuration file: " + krb5ConfFile.getAbsolutePath());
+        System.setProperty(KRB5_CONF_SYS_PROP, krb5ConfFile.getAbsolutePath());
+        
+        //configure JAAS
+        jaasConf = System.getProperty(JAAS_CONF_SYS_PROP);
+        System.out.println("Using Kerberos JAAS configuration file: " + new File(KERBEROS_JAAS_CONF).getAbsolutePath());
+        System.setProperty(JAAS_CONF_SYS_PROP, KERBEROS_JAAS_CONF);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        if (jaasConf != null) {
+            System.setProperty(JAAS_CONF_SYS_PROP, jaasConf);
+        }
+        else {
+            System.clearProperty(JAAS_CONF_SYS_PROP);
+        }
+        
+        if (krb5Conf != null) {
+            System.setProperty(KRB5_CONF_SYS_PROP, krb5Conf);
+        }
+        else {
+            System.clearProperty(KRB5_CONF_SYS_PROP);
+        }
+    }
+    
+    /**
+     * Generates a Kerberos configuration file (krb5.conf) out of the {@link #KERBEROS_CONF_TEMPLATE} file,
+     * replacing the {@link #KERBEROS_CONF_KDC_PORT_TOKEN} with actual KDC port.
+     * 
+     * @return The generated Kerberos configuration file. It will be generated under the following path:
+     * <code>target/tmp/{thisClassSimpleName}_krb5.conf</code>
+     * 
+     * @throws IOException 
+     */
+    protected File generateKerberosConf() throws IOException {
+        File tmpDir = new File("target" + File.separator + "tmp");
+        if (!tmpDir.exists() && !tmpDir.mkdirs()) {
+            throw new RuntimeException("Failed to create temp directory: " + tmpDir.getAbsolutePath());
+        }
+        
+        File krb5ConfTemplate = new File(KERBEROS_CONF_TEMPLATE);
+        if (!krb5ConfTemplate.exists()) {
+            throw new IllegalArgumentException("Cannot find kerberos configuration file template: " + krb5ConfTemplate.getAbsolutePath());
+        }
+        
+        FileInputStream krb5ConfTemplateIn = null;
+        String krb5ConfContent;
+        try {
+            krb5ConfTemplateIn = new FileInputStream(krb5ConfTemplate);
+            krb5ConfContent = IOUtils.toString(krb5ConfTemplateIn);
+        }
+        finally {
+            IOUtils.closeQuietly(krb5ConfTemplateIn);
+        }
+        
+        if (krb5ConfContent.indexOf(KERBEROS_CONF_KDC_PORT_TOKEN) == -1) {
+            throw new IllegalArgumentException(String.format("Cannot find any %s token in kerberos configuration file template: %s",
+                    KERBEROS_CONF_KDC_PORT_TOKEN, krb5ConfTemplate.getAbsolutePath()));
+        }
+            
+        krb5ConfContent = krb5ConfContent.replace(KERBEROS_CONF_KDC_PORT_TOKEN, String.valueOf(kerberosServer.getPort()));
+        
+        File krb5Conf = new File(tmpDir, this.getClass().getSimpleName() + "_krb5.conf");
+        FileOutputStream krb5ConfOut = null;
+        try {
+            krb5ConfOut = new FileOutputStream(krb5Conf);
+            IOUtils.write(krb5ConfContent, krb5ConfOut);
+        }
+        finally {
+            IOUtils.closeQuietly(krb5ConfOut);
+        }
+        
+        return krb5Conf;
+    }
+}
diff --git a/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java b/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java
index 7451dd4..1791434 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java
@@ -16,7 +16,10 @@
 
 package org.apache.rampart;
 
-import junit.framework.TestCase;
+import static org.apache.axis2.integration.TestConstants.TESTING_PATH;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
@@ -25,26 +28,47 @@
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
-import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
 import org.apache.axis2.context.ServiceContext;
-import org.apache.axis2.integration.UtilServer;
+import org.apache.axis2.testutils.ClientHelper;
+import org.apache.axis2.testutils.JettyServer;
 import org.apache.neethi.Policy;
 import org.apache.neethi.PolicyEngine;
+import org.junit.Rule;
+import org.junit.Test;
 
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
-
-public class RampartTest extends TestCase {
-
-    public final static int PORT = UtilServer.TESTING_PORT;
+public class RampartTest {
 
     private static ResourceBundle resources;
-
+    
+    @Rule
+    public final JettyServer server = new JettyServer(TESTING_PATH + "rampart_service_repo", false);
+    
+    @Rule
+    public final ClientHelper clientHelper = new ClientHelper(server, TESTING_PATH + "rampart_client_repo") {
+        @Override
+        protected void configureServiceClient(ServiceClient serviceClient) throws Exception {
+            serviceClient.engageModule("addressing");
+            serviceClient.engageModule("rampart");
+        }
+    };
+    
+    @Rule
+    public final JettyServer secureServer = new JettyServer(TESTING_PATH + "rampart_service_repo", true);
+    
+    @Rule
+    public final ClientHelper secureClientHelper = new ClientHelper(secureServer, TESTING_PATH + "rampart_client_repo") {
+        @Override
+        protected void configureServiceClient(ServiceClient serviceClient) throws Exception {
+            serviceClient.engageModule("addressing");
+            serviceClient.engageModule("rampart");
+        }
+    };
+    
     static {
         try {
             resources = ResourceBundle.getBundle("org.apache.rampart.errors");
@@ -53,40 +77,9 @@
         }
     }
 
-    public RampartTest(String name) {
-        super(name);
-    }
-
-    protected void setUp() throws Exception {
-        UtilServer.start(Constants.TESTING_PATH + "rampart_service_repo" ,null);
-    }
-    
-
-    protected void tearDown() throws Exception {
-        UtilServer.stop();
-    }
-
-    private ServiceClient getServiceClientInstance() throws AxisFault {
-
-        String repository = Constants.TESTING_PATH + "rampart_client_repo";
-
-        ConfigurationContext configContext = ConfigurationContextFactory.
-                createConfigurationContextFromFileSystem(repository, null);
-        ServiceClient serviceClient = new ServiceClient(configContext, null);
-
-
-        serviceClient.engageModule("addressing");
-        serviceClient.engageModule("rampart");
-
-        return serviceClient;
-
-    }
-
+    @Test
     public void testWithPolicy() {
         try {
-
-            ServiceClient serviceClient = getServiceClientInstance();
-
             //TODO : figure this out !!
             boolean basic256Supported = false;
             
@@ -96,7 +89,7 @@
             }
 
             //for (int i = 34; i <= 34; i++) { //<-The number of tests we have
-            for (int i = 1; i <= 34; i++) { //<-The number of tests we have
+            for (int i = 1; i <= 35; i++) { //<-The number of tests we have
                 if(!basic256Supported && (i == 3 || i == 4 || i == 5)) {
                     //Skip the Basic256 tests
                     continue;
@@ -106,25 +99,22 @@
                     // Testcase - 25 is failing, for the moment skipping it.
                     continue;
                 }
-                Options options = new Options();
+                
+                ServiceClient serviceClient = (i == 13 ? secureClientHelper : clientHelper).createServiceClient("SecureService" + i);
+                Options options = serviceClient.getOptions();
                 
                 if( i == 13 ) {
-                    continue; // Can't test Transport binding with Simple HTTP Server
                     //Username token created with user/pass from options
-                    //options.setUserName("alice");
-                    //options.setPassword("password");
+                    options.setUserName("alice");
+                    options.setPassword("password");
                 }
                 
                 System.out.println("Testing WS-Sec: custom scenario " + i);
                 options.setAction("urn:echo");
-                options.setTo(new EndpointReference("http://127.0.0.1:" +
-                                        PORT +  
-                                        "/axis2/services/SecureService" + i));
-                
+
                 ServiceContext context = serviceClient.getServiceContext();
                 context.setProperty(RampartMessageData.KEY_RAMPART_POLICY, 
                         loadPolicy("/rampart/policy/" + i + ".xml"));
-                serviceClient.setOptions(options);
                 
                 if (i == 31) {
                     OMNamespace omNamespace = OMAbstractFactory.getOMFactory().createOMNamespace(
@@ -178,22 +168,21 @@
                     //Skip the Basic256 tests
                     continue;
                 }
-                Options options = new Options();
+                
+                ServiceClient serviceClient = (i == 13 ? secureClientHelper : clientHelper).createServiceClient("SecureService" + i);
+                Options options = serviceClient.getOptions();
 
                 if (i == 13) {
-                    continue;
+                    //Username token created with user/pass from options
+                    options.setUserName("alice");
+                    options.setPassword("password");
                 }
-
                 System.out.println("Testing WS-Sec: negative scenario " + i);
                 options.setAction("urn:returnError");
-                options.setTo(new EndpointReference("http://127.0.0.1:" +
-                        PORT +
-                        "/axis2/services/SecureService" + i));
 
                 ServiceContext context = serviceClient.getServiceContext();
                 context.setProperty(RampartMessageData.KEY_RAMPART_POLICY,
                         loadPolicy("/rampart/policy/" + i + ".xml"));
-                serviceClient.setOptions(options);
 
                 try {
                     //Blocking invocation
@@ -207,21 +196,19 @@
 
             
             for (int i = 1; i <= 6; i++) { //<-The number of tests we have
-                
+                ServiceClient serviceClient;
                 if (i == 3 || i == 6) {
-                    continue; // Can't test Transport binding scenarios with Simple HTTP Server
+                    serviceClient = secureClientHelper.createServiceClient("SecureServiceSC" + i);
                 }
+                else {
+                    serviceClient = clientHelper.createServiceClient("SecureServiceSC" + i);
+                }
+                Options options = serviceClient.getOptions();
 
-                Options options = new Options();
                 System.out.println("Testing WS-SecConv: custom scenario " + i);
                 options.setAction("urn:echo");
-                options.setTo(new EndpointReference("http://127.0.0.1:" + PORT + "/axis2/services/SecureServiceSC" + i));
-
-                //Create a new service client instance for each secure conversation scenario
-                serviceClient = getServiceClientInstance();
 
                 serviceClient.getServiceContext().setProperty(RampartMessageData.KEY_RAMPART_POLICY, loadPolicy("/rampart/policy/sc-" + i + ".xml"));
-                serviceClient.setOptions(options);
 
                 //Blocking invocation
                 serviceClient.sendReceive(getEchoElement());
diff --git a/modules/rampart-integration/src/test/java/org/apache/rampart/util/KerberosServer.java b/modules/rampart-integration/src/test/java/org/apache/rampart/util/KerberosServer.java
new file mode 100644
index 0000000..e9533e3
--- /dev/null
+++ b/modules/rampart-integration/src/test/java/org/apache/rampart/util/KerberosServer.java
@@ -0,0 +1,207 @@
+/**
+ * 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.rampart.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.DatagramSocket;
+import java.nio.file.Files;
+import java.security.Provider;
+import java.security.Security;
+import java.util.List;
+
+import org.apache.axis2.testutils.PortAllocator;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.directory.api.ldap.model.entry.DefaultEntry;
+import org.apache.directory.api.ldap.model.ldif.LdifEntry;
+import org.apache.directory.api.ldap.model.ldif.LdifReader;
+import org.apache.directory.server.core.api.DirectoryService;
+import org.apache.directory.server.core.api.interceptor.Interceptor;
+import org.apache.directory.server.core.api.partition.Partition;
+import org.apache.directory.server.core.factory.DefaultDirectoryServiceFactory;
+import org.apache.directory.server.core.factory.DirectoryServiceFactory;
+import org.apache.directory.server.core.factory.PartitionFactory;
+import org.apache.directory.server.core.kerberos.KeyDerivationInterceptor;
+import org.apache.directory.server.kerberos.KerberosConfig;
+import org.apache.directory.server.kerberos.kdc.KdcServer;
+import org.apache.directory.server.protocol.shared.transport.Transport;
+import org.apache.directory.server.protocol.shared.transport.UdpTransport;
+import org.apache.directory.shared.kerberos.codec.types.EncryptionType;
+import org.junit.rules.ExternalResource;
+
+/**
+ * Runs an Apache DS Kerberos server.
+ */
+public final class KerberosServer extends ExternalResource {
+
+    private static final Log log = LogFactory.getLog(KerberosServer.class);
+    
+    /**
+     * The used DirectoryService instance
+     */
+    private DirectoryService directoryService;
+
+    /**
+     * The used KdcServer instance
+     */
+    private KdcServer kdcServer;
+
+    private Provider provider;
+    private int providerPos = 2;
+    
+    private File workDir;
+    
+    @Override
+    protected void before() throws Throwable {
+        int kdcPort = PortAllocator.allocatePort();
+        
+        DatagramSocket datagramSocket = new DatagramSocket(kdcPort);
+        datagramSocket.setReuseAddress(true);
+        datagramSocket.close();
+
+        //Ok, apache ds doesn't like the bouncy castle provider at position 2
+        //Caused by: KrbException: Integrity check on decrypted field failed (31) - Integrity check on decrypted field failed
+        Provider[] installedProviders = Security.getProviders();
+        for (int i = 0; i < installedProviders.length; i++) {
+            Provider installedProvider = installedProviders[i];
+            if ("BC".equals(installedProvider.getName())) {
+                provider = installedProvider;
+                providerPos = i;
+                Security.removeProvider("BC");
+                break;
+            }
+        }
+        if (provider != null) {
+            Security.addProvider(provider);
+        }
+        
+        workDir = Files.createTempDirectory("server-work").toFile();
+        
+        DirectoryServiceFactory directoryServiceFactory = new DefaultDirectoryServiceFactory();
+        directoryService = directoryServiceFactory.getDirectoryService();
+        directoryService.setAccessControlEnabled(false);
+        directoryService.setAllowAnonymousAccess(false);
+        directoryService.getChangeLog().setEnabled(true);
+        
+        List<Interceptor> interceptors = directoryService.getInterceptors();
+        interceptors.add(new KeyDerivationInterceptor());
+        directoryService.setInterceptors(interceptors);
+        directoryServiceFactory.init("defaultDS");
+
+        PartitionFactory partitionFactory = directoryServiceFactory.getPartitionFactory();
+        Partition partition = partitionFactory.createPartition(directoryService.getSchemaManager(),
+            directoryService.getDnFactory(), "example", "dc=example,dc=com", 1000, workDir);
+
+        partitionFactory.addIndex(partition, "objectClass", 1000);
+        partitionFactory.addIndex(partition, "dc", 1000);
+        partitionFactory.addIndex(partition, "ou", 1000);
+
+        partition.setSchemaManager(directoryService.getSchemaManager());
+        // Inject the partition into the DirectoryService
+        directoryService.addPartition(partition);
+
+        InputStream is = KerberosServer.class.getClassLoader().getResourceAsStream("kerberos/users.ldif");
+        LdifReader ldifReader = new LdifReader(is);
+        for (LdifEntry entry : ldifReader) {
+            directoryService.getAdminSession().add(new DefaultEntry(directoryService.getSchemaManager(), entry.getEntry()));
+        }
+        ldifReader.close();
+
+        KerberosConfig kerberosConfig = new KerberosConfig();
+        kerberosConfig.setServicePrincipal("krbtgt/EXAMPLE.COM@EXAMPLE.COM");
+        kerberosConfig.setPrimaryRealm("EXAMPLE.COM");
+        kerberosConfig.setSearchBaseDn("dc=example,dc=com");
+        kerberosConfig.setMaximumTicketLifetime(60000 * 1440);
+        kerberosConfig.setMaximumRenewableLifetime(60000 * 10080);
+        kerberosConfig.setEncryptionTypes(new EncryptionType[]{EncryptionType.AES128_CTS_HMAC_SHA1_96});
+        
+        kdcServer = new KdcServer(kerberosConfig);
+        kdcServer.setServiceName("DefaultKrbServer");        
+        
+        final String kdcHostname = "localhost";
+        log.info(String.format("Starting service on %s:%s", kdcHostname, kdcPort));
+        
+        UdpTransport udp = new UdpTransport(kdcHostname, kdcPort);
+        kdcServer.addTransports(udp);
+        kdcServer.setDirectoryService(directoryService);
+        kdcServer.start();
+    }
+
+    /**
+     * @return The Apache DS Kerberos server port.
+     * @throws IllegalArgumentException If server or respective transport are not initialized
+     */
+    public int getPort() throws IllegalArgumentException {
+        if (kdcServer == null) {
+            throw new IllegalStateException("Kerberos server is not initialized");
+        }
+
+        Transport[] transports =  kdcServer.getTransports();
+        if (transports == null || transports.length == 0) {
+            throw new IllegalStateException("Kerberos server does not configure any transports");
+        }
+        
+        for (Transport transport : transports) {
+            if (transport instanceof UdpTransport) {
+                return transport.getPort();
+            }
+        }
+        
+        throw new IllegalStateException(
+                String.format("Cannot identify Kerberos server port. List of transports does not contain an %s instance",
+                        UdpTransport.class.getName()));
+    } 
+    
+    @Override
+    protected void after() {
+        log.info("Stop called");
+        try {        
+            if (directoryService != null) {
+                try {
+                    directoryService.shutdown();
+                } catch (Exception ex) {
+                    log.error("Failed to stop server", ex);
+                } finally {
+                    try {
+                        FileUtils.deleteDirectory(workDir);
+                    }
+                    catch (IOException e) {
+                        log.error("Failed to delete Apache DS working directory: " + workDir.getAbsolutePath() , e);
+                    }
+                }
+                directoryService = null;
+            }
+        }
+        finally {
+            if (kdcServer != null) {
+                kdcServer.stop();
+                kdcServer = null;
+            }
+            
+            if (provider != null) {
+                //restore BC position
+                Security.removeProvider("BC");
+                Security.insertProviderAt(provider, providerPos);
+            }
+        }
+    }
+}
diff --git a/modules/rampart-integration/src/test/java/org/apache/rampart/util/KerberosTokenDecoderImpl.java b/modules/rampart-integration/src/test/java/org/apache/rampart/util/KerberosTokenDecoderImpl.java
new file mode 100644
index 0000000..8779ff1
--- /dev/null
+++ b/modules/rampart-integration/src/test/java/org/apache/rampart/util/KerberosTokenDecoderImpl.java
@@ -0,0 +1,156 @@
+/**
+ * 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.rampart.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.security.auth.Subject;
+
+import org.apache.directory.shared.kerberos.codec.KerberosDecoder;
+import org.apache.directory.shared.kerberos.components.EncTicketPart;
+import org.apache.ws.security.WSSecurityException;
+import org.apache.ws.security.validate.KerberosTokenDecoder;
+
+/**
+ * A copy of wss4j 2.0 Kerberos token decoder implementation.
+ * 
+ * @see org.apache.wss4j.common.kerberos.KerberosTokenDecoderImpl
+ * 
+ * TODO Once Rampart adopts wss4j 2.0, this class must be removed in favor of wss4j's
+ */
+public class KerberosTokenDecoderImpl implements KerberosTokenDecoder {
+    
+    private static final String KERBEROS_OID = "1.2.840.113554.1.2.2";
+
+    private byte[] serviceTicket;
+    private Subject subject;
+
+    private boolean decoded = false;
+    private EncTicketPart encTicketPart;
+
+    /**
+     * Clear all internal information
+     */
+    public void clear() {
+        serviceTicket = null;
+        subject = null;
+        decoded = false;
+        encTicketPart = null;
+    }
+
+    /**
+     * Set the AP-REQ Kerberos Token
+     *
+     * @param token the AP-REQ Kerberos Token
+     */
+    public void setToken(byte[] token) {
+        serviceTicket = token;
+    }
+
+    /**
+     * Set the Subject
+     *
+     * @param subject the Subject
+     */
+    public void setSubject(Subject subject) {
+        this.subject = subject;
+    }
+
+    /**
+     * Get the session key from the token
+     *
+     * @return the session key from the token
+     */
+    public byte[] getSessionKey() {
+        if (!decoded) {
+            decodeServiceTicket();
+        }
+        if (encTicketPart != null && encTicketPart.getKey() != null) {
+            return encTicketPart.getKey().getKeyValue();
+        }
+        return null;
+    }
+
+    /**
+     * Get the client principal name from the decoded service ticket.
+     *
+     * @return the client principal name
+     */
+    public String getClientPrincipalName() {
+        if (!decoded) {
+            decodeServiceTicket();
+        }
+        return encTicketPart.getCName().toString();
+    }
+
+    // Decode the service ticket.
+    private synchronized void decodeServiceTicket() {
+        parseServiceTicket(serviceTicket);
+        decoded = true;
+    }
+
+    // Parses the service ticket (GSS AP-REQ token)
+    private void parseServiceTicket(byte[] ticket) {
+        try {
+            // I didn't find a better way how to parse this Kerberos Message...
+            org.bouncycastle.asn1.ASN1InputStream asn1InputStream =
+                    new org.bouncycastle.asn1.ASN1InputStream(new ByteArrayInputStream(ticket));
+            org.bouncycastle.asn1.DERApplicationSpecific derToken =
+                    (org.bouncycastle.asn1.DERApplicationSpecific) asn1InputStream.readObject();
+            if (derToken == null || !derToken.isConstructed()) {
+                asn1InputStream.close();
+                throw new WSSecurityException("invalid kerberos token");
+            }
+            asn1InputStream.close();
+
+            asn1InputStream = new org.bouncycastle.asn1.ASN1InputStream(new ByteArrayInputStream(derToken.getContents()));
+            org.bouncycastle.asn1.DERObjectIdentifier kerberosOid =
+                    (org.bouncycastle.asn1.DERObjectIdentifier) asn1InputStream.readObject();
+            if (!kerberosOid.getId().equals(KERBEROS_OID)) {
+                asn1InputStream.close();
+                throw new WSSecurityException("invalid kerberos token");
+            }
+
+            int readLowByte = asn1InputStream.read() & 0xff;
+            int readHighByte = asn1InputStream.read() & 0xff;
+            int read = (readHighByte << 8) + readLowByte; //NOPMD
+            if (read != 0x01) {
+                throw new WSSecurityException("invalid kerberos token");
+            }
+            
+            this.encTicketPart = KerberosDecoder.decodeEncTicketPart(toByteArray(asn1InputStream));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static byte[] toByteArray(InputStream inputStream) throws IOException {
+        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        int read;
+        byte[] buf = new byte[1024];
+        while ((read = inputStream.read(buf)) != -1) {
+            byteArrayOutputStream.write(buf, 0, read);
+        }
+        return byteArrayOutputStream.toByteArray();
+    }
+}
diff --git a/modules/rampart-integration/src/test/resources/conf/axis2.xml b/modules/rampart-integration/src/test/resources/conf/axis2.xml
index d4d8ec2..12059a9 100755
--- a/modules/rampart-integration/src/test/resources/conf/axis2.xml
+++ b/modules/rampart-integration/src/test/resources/conf/axis2.xml
@@ -91,32 +91,16 @@
     <!-- ================================================= -->
     <!-- Transport Ins -->
     <!-- ================================================= -->
+    <!-- The default configuration assumes that AxisServlet only receives requests
+         through HTTP. To allow HTTPS as well, configure a second AxisServletListener
+         with name="https" and specify the port parameter on both receivers.
+         For more information, please have a look at the servlet transport documentation:
+         http://axis.apache.org/axis2/java/core/docs/servlet-transport.html -->
     <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills us         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname"                  locked="false">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer"              locked="false">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout"            locked="false">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay"         locked="false">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize" locked="false">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize"  locked="false">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime"       locked="false">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit"   locked="false">MILLISECONDS</parameter>            -->
-    </transportReceiver>
+                       class="org.apache.axis2.transport.http.AxisServletListener"/>
+                       
+    <transportReceiver name="https"
+                       class="org.apache.axis2.transport.http.AxisServletListener"/>
     
     <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
     <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
@@ -155,12 +139,12 @@
     <transportSender name="local"
                      class="org.apache.axis2.transport.local.LocalTransportSender"/>
     <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
+                     class="org.apache.axis2.transport.http.impl.httpclient4.HTTPClient4TransportSender">
         <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
         <parameter name="Transfer-Encoding" locked="false">chunked</parameter>
     </transportSender>
     <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
+                     class="org.apache.axis2.transport.http.impl.httpclient4.HTTPClient4TransportSender">
         <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
         <parameter name="Transfer-Encoding" locked="false">chunked</parameter>
     </transportSender>
@@ -179,9 +163,10 @@
     <!-- ================================================= -->
     <!-- Global Modules  -->
     <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
+    <!-- Comment this to disable Addressing 
     <module ref="addressing"/>
-
+    -->
+    
     <!--Configuring module , providing parameters for modules whether they refer or not-->
     <moduleConfig name="addressing">
         <parameter name="includeOptionalHeaders" locked="false">true</parameter>
diff --git a/modules/rampart-integration/src/test/resources/kerberos/alice.keytab b/modules/rampart-integration/src/test/resources/kerberos/alice.keytab
new file mode 100644
index 0000000..053b248
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/kerberos/alice.keytab
Binary files differ
diff --git a/modules/rampart-integration/src/test/resources/kerberos/bob.keytab b/modules/rampart-integration/src/test/resources/kerberos/bob.keytab
new file mode 100644
index 0000000..5be6b13
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/kerberos/bob.keytab
Binary files differ
diff --git a/modules/rampart-integration/src/test/resources/kerberos/jaas.conf b/modules/rampart-integration/src/test/resources/kerberos/jaas.conf
new file mode 100644
index 0000000..b236d4a
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/kerberos/jaas.conf
@@ -0,0 +1,49 @@
+KerberosOverTransportKeytab {
+    com.sun.security.auth.module.Krb5LoginModule required
+        useKeyTab=true
+        keyTab="target/test-classes/kerberos/bob.keytab"
+        principal=bob
+        storeKey=true
+        isInitiator=false
+        refreshKrb5Config=true;
+};
+
+KerberosOverTransportKeytabClient {
+    com.sun.security.auth.module.Krb5LoginModule required
+        useKeyTab=true
+        keyTab="target/test-classes/kerberos/alice.keytab"
+        principal=alice
+        refreshKrb5Config=true;
+};
+
+KerberosOverTransportPWCB {
+    com.sun.security.auth.module.Krb5LoginModule required
+        principal=bob
+        storeKey=true
+        isInitiator=false
+        refreshKrb5Config=true;
+};
+
+KerberosOverTransportPWCBClient {
+    com.sun.security.auth.module.Krb5LoginModule required
+        principal=alice
+        refreshKrb5Config=true;
+};
+
+KerberosDelegation {
+    com.sun.security.auth.module.Krb5LoginModule required
+        useKeyTab=true
+        keyTab="target/test-classes/kerberos/bob.keytab"
+        principal=bob
+        storeKey=true
+        isInitiator=true
+        refreshKrb5Config=true;
+};
+
+KerberosDelegationClient {
+    com.sun.security.auth.module.Krb5LoginModule required
+        useKeyTab=true
+        keyTab="target/test-classes/kerberos/alice.keytab"
+        principal=alice
+        refreshKrb5Config=true;
+};
\ No newline at end of file
diff --git a/modules/rampart-integration/src/test/resources/kerberos/krb5.conf.template b/modules/rampart-integration/src/test/resources/kerberos/krb5.conf.template
new file mode 100644
index 0000000..30a9ebf
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/kerberos/krb5.conf.template
@@ -0,0 +1,8 @@
+[libdefaults]
+	default_realm = EXAMPLE.COM
+	forwardable = true	
+
+[realms]
+	EXAMPLE.COM = {
+		kdc = localhost:KDC_PORT
+	}
\ No newline at end of file
diff --git a/modules/rampart-integration/src/test/resources/kerberos/readme b/modules/rampart-integration/src/test/resources/kerberos/readme
new file mode 100644
index 0000000..9c04c80
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/kerberos/readme
@@ -0,0 +1,9 @@
+In order to create alice.keytab and bob.keytab, in src/test/resources/kerberos directory, execute the following commands depending on the underlying OS:
+
+Windows:
+<java_home>/bin/ktab.exe -a alice@EXAMPLE.COM password -k alice.keytab
+<java_home>/bin/ktab.exe -a bob@EXAMPLE.COM password -k bob.keytab
+
+Unix (requires ktutil)
+ktutil add_entry -password -p alice@EXAMPLE.COM -k 1 -e aes128-cts-hmac-sha1-96\npassword\n write_kt alice.keytab\n quit
+ktutil add_entry -password -p bob@EXAMPLE.COM -k 1 -e aes128-cts-hmac-sha1-96\npassword\n write_kt bob.keytab\n quit 
\ No newline at end of file
diff --git a/modules/rampart-integration/src/test/resources/kerberos/users.ldif b/modules/rampart-integration/src/test/resources/kerberos/users.ldif
new file mode 100644
index 0000000..f0557ec
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/kerberos/users.ldif
@@ -0,0 +1,60 @@
+version: 1
+
+dn: dc=example,dc=com
+objectClass: top
+objectClass: domain
+objectClass: extensibleObject
+dc: example
+
+dn: ou=users,dc=example,dc=com
+objectClass: top
+objectClass: organizationalUnit
+ou: users
+
+dn: ou=services,dc=example,dc=com
+objectClass: top
+objectClass: organizationalUnit
+ou: services
+
+dn: krb5PrincipalName=bob@EXAMPLE.COM+uid=bob+sn=bob+cn=bob,ou=services,dc=example,dc=com
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: krb5KDCEntry
+objectClass: uidObject
+objectClass: person
+objectClass: krb5Principal
+objectClass: organizationalPerson
+cn: bob
+krb5KeyVersionNumber: 0
+krb5PrincipalName: bob@EXAMPLE.COM
+sn: bob
+uid: bob
+userPassword: password
+
+dn: uid=krbtgt+krb5PrincipalName=krbtgt/EXAMPLE.COM@EXAMPLE.COM+ou=TGT,ou=se
+ rvices,dc=example,dc=com
+objectClass: top
+objectClass: organizationalUnit
+objectClass: krb5KDCEntry
+objectClass: uidObject
+objectClass: krb5Principal
+krb5KeyVersionNumber: 0
+krb5PrincipalName: krbtgt/EXAMPLE.COM@EXAMPLE.COM
+ou: TGT
+uid: krbtgt
+userPassword: randomKey
+
+dn: cn=alice+krb5PrincipalName=alice@EXAMPLE.COM+uid=alice,ou=users,dc=example,dc=com
+objectClass: top
+objectClass: krb5KDCEntry
+objectClass: inetOrgPerson
+objectClass: uidObject
+objectClass: krb5Principal
+objectClass: person
+objectClass: organizationalPerson
+cn: alice
+krb5KeyVersionNumber: 0
+krb5PrincipalName: alice@EXAMPLE.COM
+sn: alice
+uid: alice
+userPassword: password
diff --git a/modules/rampart-integration/src/test/resources/log4j.properties b/modules/rampart-integration/src/test/resources/log4j.properties
index 8a80313..b81a5b4 100644
--- a/modules/rampart-integration/src/test/resources/log4j.properties
+++ b/modules/rampart-integration/src/test/resources/log4j.properties
@@ -23,3 +23,9 @@
 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
 log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %c - %m%n
 
+log4j.appender.JETTY=org.apache.log4j.ConsoleAppender
+log4j.appender.JETTY.layout=org.apache.log4j.PatternLayout
+log4j.appender.JETTY.layout.ConversionPattern=[%C{1}] - %m%n
+
+log4j.category.org.apache.axis2.integration.JettyServer=INFO, JETTY
+log4j.additivity.org.apache.axis2.integration.JettyServer = false
diff --git a/modules/rampart-integration/src/test/resources/rahas/1.xml b/modules/rampart-integration/src/test/resources/rahas/1.xml
new file mode 100644
index 0000000..9446a8c
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/rahas/1.xml
@@ -0,0 +1,74 @@
+<wsp:Policy wsu:Id="SigEncr" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+	<wsp:ExactlyOne>
+		<wsp:All>
+			<sp:AsymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+				<wsp:Policy>
+					<sp:InitiatorToken>
+						<wsp:Policy>
+							<sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+								<wsp:Policy>
+									<sp:WssX509V3Token10/>
+								</wsp:Policy>
+							</sp:X509Token>
+						</wsp:Policy>
+					</sp:InitiatorToken>
+					<sp:RecipientToken>
+						<wsp:Policy>
+							<sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
+								<wsp:Policy>
+									<sp:WssX509V3Token10/>
+								</wsp:Policy>
+							</sp:X509Token>
+						</wsp:Policy>
+					</sp:RecipientToken>
+					<sp:AlgorithmSuite>
+						<wsp:Policy>
+							<sp:Basic128/>
+						</wsp:Policy>
+					</sp:AlgorithmSuite>
+					<sp:Layout>
+						<wsp:Policy>
+							<sp:Strict/>
+						</wsp:Policy>
+					</sp:Layout>
+					<sp:IncludeTimestamp/>
+					<sp:OnlySignEntireHeadersAndBody/>
+				</wsp:Policy>
+			</sp:AsymmetricBinding>
+			<sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+				<wsp:Policy>
+					<sp:MustSupportRefKeyIdentifier/>
+					<sp:MustSupportRefIssuerSerial/>
+				</wsp:Policy>
+			</sp:Wss10>
+			<sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+				<sp:Body/>
+			</sp:SignedParts>
+			<sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+				<sp:Body/>
+			</sp:EncryptedParts>
+
+		<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> 
+				<ramp:user>alice</ramp:user>
+				<ramp:encryptionUser>ip</ramp:encryptionUser>
+				<ramp:passwordCallbackClass>org.apache.rahas.PWCallback</ramp:passwordCallbackClass>
+				
+				<ramp:signatureCrypto>
+					<ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+						<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+						<ramp:property name="org.apache.ws.security.crypto.merlin.file">rahas/rahas-sts.jks</ramp:property>
+						<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
+					</ramp:crypto>
+				</ramp:signatureCrypto>
+				<ramp:encryptionCypto>
+					<ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+						<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+						<ramp:property name="org.apache.ws.security.crypto.merlin.file">rahas/rahas-sts.jks</ramp:property>
+						<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
+					</ramp:crypto>
+				</ramp:encryptionCypto>
+			</ramp:RampartConfig>
+				
+		</wsp:All>
+	</wsp:ExactlyOne>
+</wsp:Policy>
diff --git a/modules/rampart-integration/src/test/resources/rahas/3.xml b/modules/rampart-integration/src/test/resources/rahas/3.xml
new file mode 100644
index 0000000..8fd5491
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/rahas/3.xml
@@ -0,0 +1,37 @@
+<wsp:Policy wsu:Id="UTOverTransport" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+<wsp:ExactlyOne>
+  <wsp:All>
+	<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+	  <wsp:Policy>
+		<sp:TransportToken>
+		  <wsp:Policy>
+			<!--  <sp:HttpsToken RequireClientCertificate="false"/>  -->
+		  </wsp:Policy>
+		</sp:TransportToken>
+		<sp:AlgorithmSuite>
+		  <wsp:Policy>
+			<sp:Basic128/>
+		  </wsp:Policy>
+		</sp:AlgorithmSuite>
+		<sp:Layout>
+		  <wsp:Policy>
+			<sp:Lax/>
+		  </wsp:Policy>
+		</sp:Layout>
+		<sp:IncludeTimestamp/>
+	  </wsp:Policy>
+	</sp:TransportBinding>
+	<sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+		<wsp:Policy>
+			<sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" />
+	  </wsp:Policy>
+	</sp:SignedSupportingTokens>
+	
+	<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> 
+		<ramp:user>joe</ramp:user>
+		<ramp:passwordCallbackClass>org.apache.rahas.PWCallback</ramp:passwordCallbackClass>
+	</ramp:RampartConfig>
+
+  </wsp:All>
+</wsp:ExactlyOne>
+</wsp:Policy>
diff --git a/modules/rampart-integration/src/test/resources/rahas/issuer.properties b/modules/rampart-integration/src/test/resources/rahas/issuer.properties
deleted file mode 100755
index 40abfa2..0000000
--- a/modules/rampart-integration/src/test/resources/rahas/issuer.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=password
-org.apache.ws.security.crypto.merlin.file=rahas-sts.jks
diff --git a/modules/rampart-integration/src/test/resources/rahas/rahas-sec.properties b/modules/rampart-integration/src/test/resources/rahas/rahas-sec.properties
deleted file mode 100755
index 9a97673..0000000
--- a/modules/rampart-integration/src/test/resources/rahas/rahas-sec.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=password
-org.apache.ws.security.crypto.merlin.file=rahas/rahas-sts.jks
-
diff --git a/modules/rampart-integration/src/test/resources/rahas/s1-services.xml b/modules/rampart-integration/src/test/resources/rahas/s1-services.xml
index 1bc8b06..7486b37 100644
--- a/modules/rampart-integration/src/test/resources/rahas/s1-services.xml
+++ b/modules/rampart-integration/src/test/resources/rahas/s1-services.xml
@@ -50,25 +50,79 @@
 			</trusted-services>
 		</saml-issuer-config>
     </parameter>
-	
-	<parameter name="InflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <signaturePropFile>issuer.properties</signaturePropFile>
-		<decryptionPropFile>issuer.properties</decryptionPropFile>
-		<passwordCallbackClass xmlns="">org.apache.rahas.PWCallback</passwordCallbackClass>
-      </action>
-    </parameter>
 
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <user>ip</user>
-		<encryptionUser>useReqSigCert</encryptionUser>
-		<signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-        <signaturePropFile xmlns="">issuer.properties</signaturePropFile>
-	    <passwordCallbackClass xmlns="">org.apache.rahas.PWCallback</passwordCallbackClass>
-      </action>
-    </parameter>
+    <wsp:Policy wsu:Id="SigEncr" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+	<wsp:ExactlyOne>
+		<wsp:All>
+			<sp:AsymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+				<wsp:Policy>
+					<sp:InitiatorToken>
+						<wsp:Policy>
+							<sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+								<wsp:Policy>
+									<sp:WssX509V3Token10/>
+								</wsp:Policy>
+							</sp:X509Token>
+						</wsp:Policy>
+					</sp:InitiatorToken>
+					<sp:RecipientToken>
+						<wsp:Policy>
+							<sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
+								<wsp:Policy>
+									<sp:WssX509V3Token10/>
+								</wsp:Policy>
+							</sp:X509Token>
+						</wsp:Policy>
+					</sp:RecipientToken>
+					<sp:AlgorithmSuite>
+						<wsp:Policy>
+							<sp:Basic128/>
+						</wsp:Policy>
+					</sp:AlgorithmSuite>
+					<sp:Layout>
+						<wsp:Policy>
+							<sp:Strict/>
+						</wsp:Policy>
+					</sp:Layout>
+					<sp:IncludeTimestamp/>
+					<sp:OnlySignEntireHeadersAndBody/>
+				</wsp:Policy>
+			</sp:AsymmetricBinding>
+			<sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+				<wsp:Policy>
+					<sp:MustSupportRefKeyIdentifier/>
+					<sp:MustSupportRefIssuerSerial/>
+				</wsp:Policy>
+			</sp:Wss10>
+			<sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+				<sp:Body/>
+			</sp:SignedParts>
+			<sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+				<sp:Body/>
+			</sp:EncryptedParts>
+			<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> 
+				<ramp:user>ip</ramp:user>
+				<ramp:encryptionUser>useReqSigCert</ramp:encryptionUser>
+				<ramp:passwordCallbackClass>org.apache.rahas.PWCallback</ramp:passwordCallbackClass>
+				
+				<ramp:signatureCrypto>
+					<ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+						<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+						<ramp:property name="org.apache.ws.security.crypto.merlin.file">rahas-sts.jks</ramp:property>
+						<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
+					</ramp:crypto>
+				</ramp:signatureCrypto>
+				<ramp:encryptionCypto>
+					<ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+						<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+						<ramp:property name="org.apache.ws.security.crypto.merlin.file">rahas-sts.jks</ramp:property>
+						<ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
+					</ramp:crypto>
+				</ramp:encryptionCypto>
+			</ramp:RampartConfig>
+		</wsp:All>
+	</wsp:ExactlyOne>
+	</wsp:Policy>
+
     
 </service>
diff --git a/modules/rampart-integration/src/test/resources/rahas/s3-services.xml b/modules/rampart-integration/src/test/resources/rahas/s3-services.xml
index 5d81ffd..df37b46 100644
--- a/modules/rampart-integration/src/test/resources/rahas/s3-services.xml
+++ b/modules/rampart-integration/src/test/resources/rahas/s3-services.xml
@@ -51,20 +51,42 @@
 		</saml-issuer-config>
     </parameter>
 
-	<parameter name="InflowSecurity">
-      <action>
-        <items>UsernameToken Timestamp</items>
-		<passwordCallbackClass xmlns="">org.apache.rahas.PWCallback</passwordCallbackClass>
-      </action>
-    </parameter>
+	<wsp:Policy wsu:Id="UTOverTransport" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+	<wsp:ExactlyOne>
+	  <wsp:All>
+		<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+		  <wsp:Policy>
+			<sp:TransportToken>
+			  <wsp:Policy>
+				<!--  <sp:HttpsToken RequireClientCertificate="false"/>  -->
+			  </wsp:Policy>
+			</sp:TransportToken>
+			<sp:AlgorithmSuite>
+			  <wsp:Policy>
+				<sp:Basic128/>
+			  </wsp:Policy>
+			</sp:AlgorithmSuite>
+			<sp:Layout>
+			  <wsp:Policy>
+				<sp:Lax/>
+			  </wsp:Policy>
+			</sp:Layout>
+			<sp:IncludeTimestamp/>
+		  </wsp:Policy>
+		</sp:TransportBinding>
+		<sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+			<wsp:Policy>
+				<sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" />
+		  </wsp:Policy>
+		</sp:SignedSupportingTokens>
+		
+		<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> 
+			<ramp:user>ip</ramp:user>
+			<ramp:passwordCallbackClass>org.apache.rampart.PWCallback</ramp:passwordCallbackClass>
+		</ramp:RampartConfig>
 
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp</items>
-        <user>ip</user>
-	    <passwordCallbackClass xmlns="">org.apache.rahas.PWCallback</passwordCallbackClass>
-		<enableSignatureConfirmation>false</enableSignatureConfirmation>
-      </action>
-    </parameter>
+	  </wsp:All>
+	</wsp:ExactlyOne>
+	</wsp:Policy>
 
 </service>
diff --git a/modules/rampart-integration/src/test/resources/rahas/s5-services.xml b/modules/rampart-integration/src/test/resources/rahas/s5-services.xml
index 406eccf..a2819b6 100644
--- a/modules/rampart-integration/src/test/resources/rahas/s5-services.xml
+++ b/modules/rampart-integration/src/test/resources/rahas/s5-services.xml
@@ -51,20 +51,44 @@
 		</saml-issuer-config>
     </parameter>
 
-	<parameter name="InflowSecurity">
-      <action>
-        <items>UsernameToken Timestamp</items>
-		<passwordCallbackClass xmlns="">org.apache.rahas.PWCallback</passwordCallbackClass>
-      </action>
-    </parameter>
 
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp</items>
-        <user>ip</user>
-	    <passwordCallbackClass xmlns="">org.apache.rahas.PWCallback</passwordCallbackClass>
-		<enableSignatureConfirmation>false</enableSignatureConfirmation>
-      </action>
-    </parameter>
+	<wsp:Policy wsu:Id="UTOverTransport" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+	<wsp:ExactlyOne>
+	  <wsp:All>
+		<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+		  <wsp:Policy>
+			<sp:TransportToken>
+			  <wsp:Policy>
+				<!--  <sp:HttpsToken RequireClientCertificate="false"/>  -->
+			  </wsp:Policy>
+			</sp:TransportToken>
+			<sp:AlgorithmSuite>
+			  <wsp:Policy>
+				<sp:Basic128/>
+			  </wsp:Policy>
+			</sp:AlgorithmSuite>
+			<sp:Layout>
+			  <wsp:Policy>
+				<sp:Lax/>
+			  </wsp:Policy>
+			</sp:Layout>
+			<sp:IncludeTimestamp/>
+		  </wsp:Policy>
+		</sp:TransportBinding>
+		<sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+			<wsp:Policy>
+				<sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" />
+		  </wsp:Policy>
+		</sp:SignedSupportingTokens>
+		
+		<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> 
+			<ramp:user>ip</ramp:user>
+			<ramp:passwordCallbackClass>org.apache.rampart.PWCallback</ramp:passwordCallbackClass>
+		</ramp:RampartConfig>
+
+	  </wsp:All>
+	</wsp:ExactlyOne>
+	</wsp:Policy>
+
 
 </service>
diff --git a/modules/rampart-integration/src/test/resources/rahas/saml.s1.properties b/modules/rampart-integration/src/test/resources/rahas/saml.s1.properties
deleted file mode 100644
index 90487b1..0000000
--- a/modules/rampart-integration/src/test/resources/rahas/saml.s1.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-org.apache.ws.security.saml.issuerClass=org.apache.ws.security.saml.SAMLIssuerImpl
-org.apache.ws.security.saml.issuer.cryptoProp.file=sctIssuer.properties
-org.apache.ws.security.saml.issuer.key.name=bob
-org.apache.ws.security.saml.issuer.key.password=security
-org.apache.ws.security.saml.issuer=www.example.com
-org.apache.ws.security.saml.subjectNameId.name=uid=joe,ou=people,ou=saml-demo,o=example.com
-org.apache.ws.security.saml.subjectNameId.qualifier=www.example.com
-org.apache.ws.security.saml.authenticationMethod=password
-#org.apache.ws.security.saml.confirmationMethod=senderVouches
diff --git a/modules/rampart-integration/src/test/resources/rahas/samlIssuer.properties b/modules/rampart-integration/src/test/resources/rahas/samlIssuer.properties
deleted file mode 100755
index c126c57..0000000
--- a/modules/rampart-integration/src/test/resources/rahas/samlIssuer.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=password
-org.apache.ws.security.crypto.merlin.file=sts.jks
diff --git a/modules/rampart-integration/src/test/resources/rampart/kerberos/KerberosDelegation.xml b/modules/rampart-integration/src/test/resources/rampart/kerberos/KerberosDelegation.xml
new file mode 100644
index 0000000..5ba8922
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/rampart/kerberos/KerberosDelegation.xml
@@ -0,0 +1,86 @@
+<service name="KerberosDelegation">
+
+    <module ref="addressing" />
+    <module ref="rampart" />
+
+    <parameter locked="false" name="ServiceClass">org.apache.rampart.KerberosDelegationService</parameter>
+
+    <transports>
+        <transport>https</transport>
+    </transports>
+    
+    <operation name="echo">
+        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
+        <actionMapping>urn:echo</actionMapping>
+    </operation>
+
+    <operation name="returnError">
+        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
+        <actionMapping>urn:returnError</actionMapping>
+    </operation>
+
+    <wsp:PolicyAttachment xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+
+        <wsp:AppliesTo>
+            <policy-subject identifier="binding:soap" />
+            <policy-subject identifier="binding:soap12" />
+        </wsp:AppliesTo>
+        
+        <wsp:Policy wsu:Id="KerberosOverTransport"
+            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+            xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
+            xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+        
+            <wsp:ExactlyOne>
+                <wsp:All>
+                    <sp:TransportBinding>
+                        <wsp:Policy>
+                            <sp:TransportToken>
+                                <wsp:Policy>
+                                    <sp:HttpsToken />
+                                </wsp:Policy>
+                            </sp:TransportToken>
+                            <sp:AlgorithmSuite>
+                                <wsp:Policy>
+                                    <sp:Basic128 />
+                                </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:IncludeTimestamp />
+                        </wsp:Policy>
+                    </sp:TransportBinding>
+                    <sp:EndorsingSupportingTokens>
+                        <wsp:Policy>
+                            <sp:KerberosToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once">
+                                <wsp:Policy>
+                                    <sp:WssGssKerberosV5ApReqToken11 />
+                                </wsp:Policy>
+                            </sp:KerberosToken>
+                        </wsp:Policy>
+                    </sp:EndorsingSupportingTokens>
+                    <sp:Wss11>
+                        <wsp:Policy />
+                    </sp:Wss11>
+                    <wsaw:UsingAddressing />
+                    
+                   <rampart:RampartConfig xmlns:rampart="http://ws.apache.org/rampart/policy">
+                        <rampart:kerberosConfig>
+                            <rampart:jaasContext>KerberosDelegation</rampart:jaasContext>
+                            <rampart:servicePrincipalNameForm>username</rampart:servicePrincipalNameForm>
+                            <rampart:kerberosTokenDecoderClass>org.apache.rampart.util.KerberosTokenDecoderImpl</rampart:kerberosTokenDecoderClass>
+                        </rampart:kerberosConfig>
+                        <rampart:policyValidatorCbClass>org.apache.rampart.KerberosDelegationServiceValidator</rampart:policyValidatorCbClass>                        
+                    </rampart:RampartConfig>
+                </wsp:All>
+            </wsp:ExactlyOne>
+        </wsp:Policy>
+
+    </wsp:PolicyAttachment>
+
+    <!-- Configure SPN using addressingIdentity extensibility element -->
+    <parameter name="addressingIdentity">
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+            <Upn>bob@EXAMPLE.COM</Upn>
+        </Identity>
+    </parameter>
+
+</service>
diff --git a/modules/rampart-integration/src/test/resources/rampart/kerberos/KerberosOverTransportKeytab.xml b/modules/rampart-integration/src/test/resources/rampart/kerberos/KerberosOverTransportKeytab.xml
new file mode 100644
index 0000000..27c4dc9
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/rampart/kerberos/KerberosOverTransportKeytab.xml
@@ -0,0 +1,85 @@
+<service name="KerberosOverTransportKeytab">
+
+    <module ref="addressing" />
+    <module ref="rampart" />
+
+    <parameter locked="false" name="ServiceClass">org.apache.rampart.Service</parameter>
+
+    <transports>
+        <transport>https</transport>
+    </transports>
+    
+    <operation name="echo">
+        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
+        <actionMapping>urn:echo</actionMapping>
+    </operation>
+
+    <operation name="returnError">
+        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
+        <actionMapping>urn:returnError</actionMapping>
+    </operation>
+
+    <wsp:PolicyAttachment xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+
+        <wsp:AppliesTo>
+            <policy-subject identifier="binding:soap" />
+            <policy-subject identifier="binding:soap12" />
+        </wsp:AppliesTo>
+        
+        <wsp:Policy wsu:Id="KerberosOverTransport"
+            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+            xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
+            xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+        
+            <wsp:ExactlyOne>
+                <wsp:All>
+                    <sp:TransportBinding>
+                        <wsp:Policy>
+                            <sp:TransportToken>
+                                <wsp:Policy>
+                                    <sp:HttpsToken />
+                                </wsp:Policy>
+                            </sp:TransportToken>
+                            <sp:AlgorithmSuite>
+                                <wsp:Policy>
+                                    <sp:Basic128 />
+                                </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:IncludeTimestamp />
+                        </wsp:Policy>
+                    </sp:TransportBinding>
+                    <sp:EndorsingSupportingTokens>
+                        <wsp:Policy>
+                            <sp:KerberosToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once">
+                                <wsp:Policy>
+                                    <sp:WssGssKerberosV5ApReqToken11 />
+                                </wsp:Policy>
+                            </sp:KerberosToken>
+                        </wsp:Policy>
+                    </sp:EndorsingSupportingTokens>
+                    <sp:Wss11>
+                        <wsp:Policy />
+                    </sp:Wss11>
+                    <wsaw:UsingAddressing />
+                    
+                    <rampart:RampartConfig xmlns:rampart="http://ws.apache.org/rampart/policy">
+                        <rampart:kerberosConfig>
+                            <rampart:jaasContext>KerberosOverTransportKeytab</rampart:jaasContext>
+                            <rampart:servicePrincipalNameForm>username</rampart:servicePrincipalNameForm>
+                            <rampart:kerberosTokenDecoderClass>org.apache.rampart.util.KerberosTokenDecoderImpl</rampart:kerberosTokenDecoderClass>
+                        </rampart:kerberosConfig>
+                    </rampart:RampartConfig>
+                </wsp:All>
+            </wsp:ExactlyOne>
+        </wsp:Policy>
+
+    </wsp:PolicyAttachment>
+
+    <!-- Configure SPN using addressingIdentity extensibility element -->
+    <parameter name="addressingIdentity">
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+            <Upn>bob@EXAMPLE.COM</Upn>
+        </Identity>
+    </parameter>
+
+</service>
diff --git a/modules/rampart-integration/src/test/resources/rampart/kerberos/KerberosOverTransportPWCB.xml b/modules/rampart-integration/src/test/resources/rampart/kerberos/KerberosOverTransportPWCB.xml
new file mode 100644
index 0000000..fc3a3a3
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/rampart/kerberos/KerberosOverTransportPWCB.xml
@@ -0,0 +1,88 @@
+<service name="KerberosOverTransportPWCB">
+
+    <module ref="addressing" />
+    <module ref="rampart" />
+
+    <parameter locked="false" name="ServiceClass">org.apache.rampart.Service</parameter>
+
+    <transports>
+        <transport>https</transport>
+    </transports>
+    
+    <operation name="echo">
+        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
+        <actionMapping>urn:echo</actionMapping>
+    </operation>
+
+    <operation name="returnError">
+        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
+        <actionMapping>urn:returnError</actionMapping>
+    </operation>
+
+    <wsp:PolicyAttachment xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+
+        <wsp:AppliesTo>
+            <policy-subject identifier="binding:soap" />
+            <policy-subject identifier="binding:soap12" />
+        </wsp:AppliesTo>
+        
+        <wsp:Policy wsu:Id="KerberosOverTransport"
+            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+            xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
+            xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+        
+            <wsp:ExactlyOne>
+                <wsp:All>
+                    <sp:TransportBinding>
+                        <wsp:Policy>
+                            <sp:TransportToken>
+                                <wsp:Policy>
+                                    <sp:HttpsToken />
+                                </wsp:Policy>
+                            </sp:TransportToken>
+                            <sp:AlgorithmSuite>
+                                <wsp:Policy>
+                                    <sp:Basic128 />
+                                </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:IncludeTimestamp />
+                        </wsp:Policy>
+                    </sp:TransportBinding>
+                    <sp:EndorsingSupportingTokens>
+                        <wsp:Policy>
+                            <sp:KerberosToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once">
+                                <wsp:Policy>
+                                    <sp:WssGssKerberosV5ApReqToken11 />
+                                </wsp:Policy>
+                            </sp:KerberosToken>
+                        </wsp:Policy>
+                    </sp:EndorsingSupportingTokens>
+                    <sp:Wss11>
+                        <wsp:Policy />
+                    </sp:Wss11>
+                    <wsaw:UsingAddressing />
+                    
+                    <rampart:RampartConfig xmlns:rampart="http://ws.apache.org/rampart/policy">
+                        <rampart:user>alice</rampart:user>
+                        <rampart:passwordCallbackClass>org.apache.rampart.PWCallback</rampart:passwordCallbackClass>
+                        
+                        <rampart:kerberosConfig>
+                            <rampart:jaasContext>KerberosOverTransportPWCB</rampart:jaasContext>
+                            <rampart:servicePrincipalNameForm>username</rampart:servicePrincipalNameForm>
+                            <rampart:kerberosTokenDecoderClass>org.apache.rampart.util.KerberosTokenDecoderImpl</rampart:kerberosTokenDecoderClass>
+                        </rampart:kerberosConfig>
+                    </rampart:RampartConfig>
+                </wsp:All>
+            </wsp:ExactlyOne>
+        </wsp:Policy>
+
+    </wsp:PolicyAttachment>
+
+    <!-- Configure SPN using addressingIdentity extensibility element -->
+    <parameter name="addressingIdentity">
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+            <Upn>bob@EXAMPLE.COM</Upn>
+        </Identity>
+    </parameter>
+
+</service>
diff --git a/modules/rampart-integration/src/test/resources/rampart/policy/35.xml b/modules/rampart-integration/src/test/resources/rampart/policy/35.xml
new file mode 100644
index 0000000..a19d25c
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/rampart/policy/35.xml
@@ -0,0 +1,76 @@
+<wsp:Policy wsu:Id="EncrSupTokensUTNoPasswd"
+    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
+    xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
+    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:SymmetricBinding>
+                <wsp:Policy>
+                    <sp:ProtectionToken>
+                        <wsp:Policy>
+                            <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
+                                <wsp:Policy>
+                                    <sp:RequireThumbprintReference />
+                                    <sp:WssX509V3Token10 />
+                                </wsp:Policy>
+                            </sp:X509Token>
+                        </wsp:Policy>
+                    </sp:ProtectionToken>
+                    <sp:AlgorithmSuite>
+                        <wsp:Policy>
+                            <sp:Basic128 />
+                        </wsp:Policy>
+                    </sp:AlgorithmSuite>
+                    <sp:Layout>
+                        <wsp:Policy>
+                            <sp:Lax />
+                        </wsp:Policy>
+                    </sp:Layout>
+                    <sp:OnlySignEntireHeadersAndBody />
+                </wsp:Policy>
+            </sp:SymmetricBinding>
+            <sp:EncryptedParts>
+                <sp:Body />
+            </sp:EncryptedParts>
+            <sp:SignedParts>
+                <sp:Body />
+            </sp:SignedParts>
+            <sp:EncryptedSupportingTokens>
+                <wsp:Policy>
+                    <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+                        <wsp:Policy>
+                            <wsp:ExactlyOne>
+                                <wsp:All>
+                                    <sp:WssUsernameToken11 />
+                                    <sp:NoPassword />
+                                </wsp:All>
+                            </wsp:ExactlyOne>
+                        </wsp:Policy>
+                    </sp:UsernameToken>
+                </wsp:Policy>
+            </sp:EncryptedSupportingTokens>
+            
+            <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
+                <ramp:user>alice</ramp:user>
+                <ramp:encryptionUser>bob</ramp:encryptionUser>
+                <ramp:passwordCallbackClass>org.apache.rampart.PWCallback</ramp:passwordCallbackClass>
+
+                <ramp:signatureCrypto>
+                    <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.file">rampart/store.jks</ramp:property>
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
+                    </ramp:crypto>
+                </ramp:signatureCrypto>
+                <ramp:encryptionCypto>
+                    <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.file">rampart/store.jks</ramp:property>
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
+                    </ramp:crypto>
+                </ramp:encryptionCypto>
+            </ramp:RampartConfig>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
diff --git a/modules/rampart-integration/src/test/resources/rampart/services-35.xml b/modules/rampart-integration/src/test/resources/rampart/services-35.xml
new file mode 100644
index 0000000..a0c1342
--- /dev/null
+++ b/modules/rampart-integration/src/test/resources/rampart/services-35.xml
@@ -0,0 +1,94 @@
+<service name="SecureService35">
+
+	<module ref="addressing"/>
+	<module ref="rampart"/>
+
+	<parameter locked="false" name="ServiceClass">org.apache.rampart.Service</parameter>
+
+	<operation name="echo">
+		<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
+		<actionMapping>urn:echo</actionMapping>
+	</operation>
+
+	 <operation name="returnError">
+        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
+        <actionMapping>urn:returnError</actionMapping>
+    </operation>
+
+    <wsp:Policy wsu:Id="EncrSupTokensUTNoPasswd"
+        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+        xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
+        xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
+        xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+        <wsp:ExactlyOne>
+            <wsp:All>
+                <sp:SymmetricBinding>
+                    <wsp:Policy>
+                        <sp:ProtectionToken>
+                            <wsp:Policy>
+                                <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
+                                    <wsp:Policy>
+                                        <sp:RequireThumbprintReference />
+                                        <sp:WssX509V3Token10 />
+                                    </wsp:Policy>
+                                </sp:X509Token>
+                            </wsp:Policy>
+                        </sp:ProtectionToken>
+                        <sp:AlgorithmSuite>
+                            <wsp:Policy>
+                                <sp:Basic128 />
+                            </wsp:Policy>
+                        </sp:AlgorithmSuite>
+                        <sp:Layout>
+                            <wsp:Policy>
+                                <sp:Lax />
+                            </wsp:Policy>
+                        </sp:Layout>
+                        <sp:OnlySignEntireHeadersAndBody />
+                    </wsp:Policy>
+                </sp:SymmetricBinding>
+                <sp:EncryptedParts>
+                    <sp:Body />
+                </sp:EncryptedParts>
+                <sp:SignedParts>
+                    <sp:Body />
+                </sp:SignedParts>
+                <sp:EncryptedSupportingTokens>
+                    <wsp:Policy>
+                        <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+                            <wsp:Policy>
+                                <wsp:ExactlyOne>
+                                    <wsp:All>
+                                        <sp:WssUsernameToken11 />
+                                        <sp:NoPassword />
+                                    </wsp:All>
+                                </wsp:ExactlyOne>
+                            </wsp:Policy>
+                        </sp:UsernameToken>
+                    </wsp:Policy>
+                </sp:EncryptedSupportingTokens>
+                
+                <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
+                    <ramp:user>bob</ramp:user>
+                    <ramp:encryptionUser>alice</ramp:encryptionUser>
+                    <ramp:passwordCallbackClass>org.apache.rampart.PWCallback</ramp:passwordCallbackClass>
+
+                    <ramp:signatureCrypto>
+                        <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+                            <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+                            <ramp:property name="org.apache.ws.security.crypto.merlin.file">rampart/store.jks</ramp:property>
+                            <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
+                        </ramp:crypto>
+                    </ramp:signatureCrypto>
+                    <ramp:encryptionCypto>
+                        <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+                            <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+                            <ramp:property name="org.apache.ws.security.crypto.merlin.file">rampart/store.jks</ramp:property>
+                            <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>
+                        </ramp:crypto>
+                    </ramp:encryptionCypto>
+                </ramp:RampartConfig>
+            </wsp:All>
+        </wsp:ExactlyOne>
+    </wsp:Policy>
+</service>
diff --git a/modules/rampart-integration/src/test/resources/security/complete.client.axis2.xml b/modules/rampart-integration/src/test/resources/security/complete.client.axis2.xml
deleted file mode 100644
index c1cf806..0000000
--- a/modules/rampart-integration/src/test/resources/security/complete.client.axis2.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-   
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <module ref="addressing"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <moduleConfig name="addressing">
-        <parameter name="includeOptionalHeaders" locked="false">true</parameter>
-    </moduleConfig>
-
-    <!-- Test with addressing and MTOM: Client's Configuration:START-->
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <user>alice</user>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-        <signatureKeyIdentifier>SKIKeyIdentifier</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionUser>bob</encryptionUser>
-        <signatureParts>{Element}{http://www.w3.org/2005/08/addressing}To;{Element}{http://www.w3.org/2005/08/addressing}MessageID;{Element}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}Timestamp</signatureParts>
-
-        <optimizeParts>//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue</optimizeParts>
-      </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <!-- Test with addressing and MTOM: Client's Configuration:END-->
-
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-
-
-  <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/complete.service.axis2.xml b/modules/rampart-integration/src/test/resources/security/complete.service.axis2.xml
deleted file mode 100644
index 7759bd7..0000000
--- a/modules/rampart-integration/src/test/resources/security/complete.service.axis2.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-    <parameter name="enableMTOM" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Engage the addressing module -->
-    <module ref="addressing"/>
-
-    <!-- Engage the security module -->
-    <module ref="rampart"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <moduleConfig name="addressing">
-        <parameter name="includeOptionalHeaders" locked="false">true</parameter>
-    </moduleConfig>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-    </transportReceiver>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-    <transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">
-          <parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>
-          <parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.port" locked="false">110</parameter>
-          <parameter name="transport.mail.replyToAddress" locked="false">axis2@127.0.0.1</parameter>
-      </transportReceiver> -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/>
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-    <transportSender name="https" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-   <transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender">
-       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
-       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
-   </transportSender>
-   -->
-  <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/complete.service.xml b/modules/rampart-integration/src/test/resources/security/complete.service.xml
deleted file mode 100644
index 7988cb1..0000000
--- a/modules/rampart-integration/src/test/resources/security/complete.service.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<service name="PingPort">
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.oasis.ping.PingPortSkeleton</parameter>
-	<!--Mounting the method Ping-->
-	<operation name="Ping">
-		<messageReceiver class="org.apache.axis2.oasis.ping.PingPortMessageReceiverInOut"/>
-	</operation>    
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <user>bob</user>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-        <signatureKeyIdentifier>SKIKeyIdentifier</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionUser>alice</encryptionUser>
-        <signatureParts>{Element}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}Timestamp</signatureParts>
-
-        <optimizeParts>//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue</optimizeParts>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/s1.client.axis2.xml b/modules/rampart-integration/src/test/resources/security/s1.client.axis2.xml
deleted file mode 100644
index 256b7eb..0000000
--- a/modules/rampart-integration/src/test/resources/security/s1.client.axis2.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Scenario 1: Client's Configuration:START-->
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>UsernameToken</items>
-        <user>Chris</user>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <passwordType>PasswordText</passwordType>
-      </action>
-    </parameter>
-    <!-- Scenario 1: Client's Configuration:END-->
-
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-
-   <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s1.service.axis2.xml b/modules/rampart-integration/src/test/resources/security/s1.service.axis2.xml
deleted file mode 100644
index 1c5bbf0..0000000
--- a/modules/rampart-integration/src/test/resources/security/s1.service.axis2.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Engage the security module -->
-    <module ref="rampart"/>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-    </transportReceiver>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-    <transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">
-          <parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>
-          <parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.port" locked="false">110</parameter>
-          <parameter name="transport.mail.replyToAddress" locked="false">axis2@127.0.0.1</parameter>
-      </transportReceiver> -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/>
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-   <transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender">
-       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
-       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
-   </transportSender>
-   -->
-   <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s1.service.xml b/modules/rampart-integration/src/test/resources/security/s1.service.xml
deleted file mode 100644
index d6afa98..0000000
--- a/modules/rampart-integration/src/test/resources/security/s1.service.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<service name="PingPort">
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.oasis.ping.PingPortSkeleton</parameter>
-	<!--Mounting the method Ping-->
-	<operation name="Ping">
-		<messageReceiver class="org.apache.axis2.oasis.ping.PingPortMessageReceiverInOut"/>
-	</operation>    
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>UsernameToken</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/s2.client.axis2.xml b/modules/rampart-integration/src/test/resources/security/s2.client.axis2.xml
deleted file mode 100644
index 334d060..0000000
--- a/modules/rampart-integration/src/test/resources/security/s2.client.axis2.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Scenario 2: Client's Configuration:START-->
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>UsernameToken Encrypt</items>
-        <user>Chris</user>
-        <addUTElements>Nonce Created</addUTElements>
-        <encryptionParts>{Element}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}UsernameToken</encryptionParts>
-        <encryptionUser>bob</encryptionUser>
-        <encryptionPropFile>interop.properties</encryptionPropFile>
-        <encryptionSymAlgorithm>http://www.w3.org/2001/04/xmlenc#tripledes-cbc</encryptionSymAlgorithm>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <passwordType>PasswordText</passwordType>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-      </action>
-    </parameter>
-
-    <!-- Scenario 2: Client's Configuration:END-->
-
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-
- <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s2.service.axis2.xml b/modules/rampart-integration/src/test/resources/security/s2.service.axis2.xml
deleted file mode 100644
index d0d3d19..0000000
--- a/modules/rampart-integration/src/test/resources/security/s2.service.axis2.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Engage the security module -->
-    <module ref="rampart"/>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-    </transportReceiver>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-    <transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">
-          <parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>
-          <parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.port" locked="false">110</parameter>
-          <parameter name="transport.mail.replyToAddress" locked="false">axis2@127.0.0.1</parameter>
-      </transportReceiver> -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/>
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-    <transportSender name="https" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-   <transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender">
-       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
-       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
-   </transportSender>
-   -->
-
-   <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s2.service.xml b/modules/rampart-integration/src/test/resources/security/s2.service.xml
deleted file mode 100644
index 77c8eac..0000000
--- a/modules/rampart-integration/src/test/resources/security/s2.service.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<service name="PingPort">
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.oasis.ping.PingPortSkeleton</parameter>
-	<!--Mounting the method Ping-->
-	<operation name="Ping">
-		<messageReceiver class="org.apache.axis2.oasis.ping.PingPortMessageReceiverInOut"/>
-	</operation>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>UsernameToken Encrypt</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <decryptionPropFile>interop.properties</decryptionPropFile>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/s2a.client.axis2.xml b/modules/rampart-integration/src/test/resources/security/s2a.client.axis2.xml
deleted file mode 100644
index e2c8f86..0000000
--- a/modules/rampart-integration/src/test/resources/security/s2a.client.axis2.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Scenario 2: Client's Configuration:START-->
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>UsernameTokenSignature Encrypt Timestamp</items>
-        <user>Chris</user>
-        <encryptionParts>{Element}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}UsernameToken</encryptionParts>
-        <encryptionUser>bob</encryptionUser>
-        <encryptionPropFile>interop.properties</encryptionPropFile>
-        <encryptionSymAlgorithm>http://www.w3.org/2001/04/xmlenc#tripledes-cbc</encryptionSymAlgorithm>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-      </action>
-    </parameter>
-
-    <!-- Scenario 2: Client's Configuration:END-->
-
-
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-
-<phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s2a.service.axis2.xml b/modules/rampart-integration/src/test/resources/security/s2a.service.axis2.xml
deleted file mode 100644
index 5c1add2..0000000
--- a/modules/rampart-integration/src/test/resources/security/s2a.service.axis2.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Engage the security module -->
-    <module ref="rampart"/>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-    </transportReceiver>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-    <transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">
-          <parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>
-          <parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.port" locked="false">110</parameter>
-          <parameter name="transport.mail.replyToAddress" locked="false">axis2@127.0.0.1</parameter>
-      </transportReceiver> -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/>
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-    <transportSender name="https" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-   <transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender">
-       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
-       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
-   </transportSender>
-   -->
-  <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s2a.service.xml b/modules/rampart-integration/src/test/resources/security/s2a.service.xml
deleted file mode 100644
index 4c5f6b3..0000000
--- a/modules/rampart-integration/src/test/resources/security/s2a.service.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<service name="PingPort">
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.oasis.ping.PingPortSkeleton</parameter>
-	<!--Mounting the method Ping-->
-	<operation name="Ping">
-		<messageReceiver class="org.apache.axis2.oasis.ping.PingPortMessageReceiverInOut"/>
-	</operation>    
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>UsernameTokenSignature UsernameTokenNoPassword Encrypt Timestamp</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <decryptionPropFile>interop.properties</decryptionPropFile>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/s3.client.axis2.xml b/modules/rampart-integration/src/test/resources/security/s3.client.axis2.xml
deleted file mode 100644
index 19ab019..0000000
--- a/modules/rampart-integration/src/test/resources/security/s3.client.axis2.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Scenario 3: Client's Configuration:START-->
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <user>alice</user>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionSymAlgorithm>http://www.w3.org/2001/04/xmlenc#tripledes-cbc</encryptionSymAlgorithm>
-        <encryptionUser>bob</encryptionUser>
-        <enableSignatureConfirmation>false</enableSignatureConfirmation>
-      </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-        <enableSignatureConfirmation>false</enableSignatureConfirmation>
-      </action>
-    </parameter>
-
-    <!-- Scenario 3: Client's Configuration:END-->
-
-
-
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-
-  <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s3.service.axis2.xml b/modules/rampart-integration/src/test/resources/security/s3.service.axis2.xml
deleted file mode 100644
index 8540d4e..0000000
--- a/modules/rampart-integration/src/test/resources/security/s3.service.axis2.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Engage the security module -->
-    <module ref="rampart"/>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-    </transportReceiver>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-    <transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">
-          <parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>
-          <parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.port" locked="false">110</parameter>
-          <parameter name="transport.mail.replyToAddress" locked="false">axis2@127.0.0.1</parameter>
-      </transportReceiver> -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/>
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-    <transportSender name="https" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-   <transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender">
-       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
-       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
-   </transportSender>
-   -->
-<phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s3.service.xml b/modules/rampart-integration/src/test/resources/security/s3.service.xml
deleted file mode 100644
index 12cf1c7..0000000
--- a/modules/rampart-integration/src/test/resources/security/s3.service.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<service name="PingPort">
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.oasis.ping.PingPortSkeleton</parameter>
-	<!--Mounting the method Ping-->
-	<operation name="Ping">
-		<messageReceiver class="org.apache.axis2.oasis.ping.PingPortMessageReceiverInOut"/>
-	</operation>    
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-        <enableSignatureConfirmation>false</enableSignatureConfirmation>
-      </action>
-    </parameter>
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <user>bob</user>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionSymAlgorithm>http://www.w3.org/2001/04/xmlenc#tripledes-cbc</encryptionSymAlgorithm>
-        <encryptionUser>alice</encryptionUser>
-        <enableSignatureConfirmation>false</enableSignatureConfirmation>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/s4.client.axis2.xml b/modules/rampart-integration/src/test/resources/security/s4.client.axis2.xml
deleted file mode 100644
index 58a3c95..0000000
--- a/modules/rampart-integration/src/test/resources/security/s4.client.axis2.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Scenario 4: Client's Configuration:START-->
-
-    <parameter name="OutflowSecurity">
-        <action>
-            <items>Signature Encrypt Timestamp</items>
-            <user>alice</user>
-            <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-            <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-            <encryptionKeyIdentifier>EmbeddedKeyName</encryptionKeyIdentifier>
-            <encryptionSymAlgorithm>http://www.w3.org/2001/04/xmlenc#tripledes-cbc</encryptionSymAlgorithm>
-            <signaturePropFile>interop.properties</signaturePropFile>
-            <embeddedKeyCallbackClass>org.apache.axis2.security.PWCallback</embeddedKeyCallbackClass>
-            <embeddedKeyName>SessionKey</embeddedKeyName>
-        </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-        <action>
-            <items>Signature Encrypt Timestamp</items>
-            <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-            <signaturePropFile>interop.properties</signaturePropFile>
-	    <isBSPCompliant>false</isBSPCompliant>
-        </action>
-    </parameter>
-
-    <!-- Scenario 4: Client's Configuration:END-->
-
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-   <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s4.service.axis2.xml b/modules/rampart-integration/src/test/resources/security/s4.service.axis2.xml
deleted file mode 100644
index 2425853..0000000
--- a/modules/rampart-integration/src/test/resources/security/s4.service.axis2.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Engage the security module -->
-    <module ref="rampart"/>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-    </transportReceiver>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-    <transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">
-          <parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>
-          <parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.port" locked="false">110</parameter>
-          <parameter name="transport.mail.replyToAddress" locked="false">axis2@127.0.0.1</parameter>
-      </transportReceiver> -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/>
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-   <transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender">
-       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
-       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
-   </transportSender>
-   -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s4.service.xml b/modules/rampart-integration/src/test/resources/security/s4.service.xml
deleted file mode 100644
index f39ab3e..0000000
--- a/modules/rampart-integration/src/test/resources/security/s4.service.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<service name="PingPort">
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.oasis.ping.PingPortSkeleton</parameter>
-	<!--Mounting the method Ping-->
-	<operation name="Ping">
-		<messageReceiver class="org.apache.axis2.oasis.ping.PingPortMessageReceiverInOut"/>
-	</operation>    
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-	<isBSPCompliant>false</isBSPCompliant>
-      </action>
-    </parameter>
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <user>bob</user>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signatureKeyIdentifier>SKIKeyIdentifier</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>EmbeddedKeyName</encryptionKeyIdentifier>
-        <encryptionSymAlgorithm>http://www.w3.org/2001/04/xmlenc#tripledes-cbc</encryptionSymAlgorithm>
-        <signaturePropFile>interop.properties</signaturePropFile>
-        <embeddedKeyCallbackClass>org.apache.axis2.security.PWCallback</embeddedKeyCallbackClass>
-        <embeddedKeyName>SessionKey</embeddedKeyName>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/s5.client.axis2.xml b/modules/rampart-integration/src/test/resources/security/s5.client.axis2.xml
deleted file mode 100644
index cab64a1..0000000
--- a/modules/rampart-integration/src/test/resources/security/s5.client.axis2.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Scenario 5: Client's Configuration:START-->
-
-    <parameter name="OutflowSecurity">
-
-        <action>
-            <items>Signature</items>
-            <user>alice</user>
-            <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-            <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-            <signatureParts>{}{http://xmlsoap.org/Ping}ticket</signatureParts>
-            <signaturePropFile>interop.properties</signaturePropFile>
-        </action>
-
-        <action>
-            <items>Signature Timestamp</items>
-            <user>alice</user>
-            <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-            <signaturePropFile>interop.properties</signaturePropFile>
-        </action>
-
-    </parameter>
-
-    <!-- Scenario 5: Client's Configuration:END-->
-   
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s5.service.axis2.xml b/modules/rampart-integration/src/test/resources/security/s5.service.axis2.xml
deleted file mode 100644
index c144ce2..0000000
--- a/modules/rampart-integration/src/test/resources/security/s5.service.axis2.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Engage the security module -->
-    <module ref="rampart"/>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-    </transportReceiver>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-    <transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">
-          <parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>
-          <parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.port" locked="false">110</parameter>
-          <parameter name="transport.mail.replyToAddress" locked="false">axis2@127.0.0.1</parameter>
-      </transportReceiver> -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/>
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-   <transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender">
-       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
-       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
-   </transportSender>
-   -->
-
-   <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s5.service.xml b/modules/rampart-integration/src/test/resources/security/s5.service.xml
deleted file mode 100644
index 6c9089d..0000000
--- a/modules/rampart-integration/src/test/resources/security/s5.service.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<service name="PingPort">
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.oasis.ping.PingPortSkeleton</parameter>
-	<!--Mounting the method Ping-->
-	<operation name="Ping">
-		<messageReceiver class="org.apache.axis2.oasis.ping.PingPortMessageReceiverInOut"/>
-	</operation>    
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Signature Signature Timestamp</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/s6.client.axis2.xml b/modules/rampart-integration/src/test/resources/security/s6.client.axis2.xml
deleted file mode 100644
index 38f768b..0000000
--- a/modules/rampart-integration/src/test/resources/security/s6.client.axis2.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Scenario 6: Client's Configuration:START-->
-
-    <parameter name="OutflowSecurity">
-        <action>
-            <items>Encrypt Signature Timestamp</items>
-            <user>alice</user>
-            <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-            <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-            <encryptionSymAlgorithm>http://www.w3.org/2001/04/xmlenc#tripledes-cbc</encryptionSymAlgorithm>
-            <encryptionUser>bob</encryptionUser>
-            <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-            <signaturePropFile>interop.properties</signaturePropFile>
-        </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-        <action>
-            <items>Encrypt Signature Timestamp</items>
-            <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-            <signaturePropFile>interop.properties</signaturePropFile>
-        </action>
-    </parameter>
-
-    <!-- Scenario 6: Client's Configuration:END-->
-
-
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s6.service.axis2.xml b/modules/rampart-integration/src/test/resources/security/s6.service.axis2.xml
deleted file mode 100644
index 6130df0..0000000
--- a/modules/rampart-integration/src/test/resources/security/s6.service.axis2.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Engage the security module -->
-    <module ref="rampart"/>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-    </transportReceiver>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-    <transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">
-          <parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>
-          <parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.port" locked="false">110</parameter>
-          <parameter name="transport.mail.replyToAddress" locked="false">axis2@127.0.0.1</parameter>
-      </transportReceiver> -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/>
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-   <transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender">
-       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
-       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
-   </transportSender>
-   -->
-
-  <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s6.service.xml b/modules/rampart-integration/src/test/resources/security/s6.service.xml
deleted file mode 100644
index c67c3d8..0000000
--- a/modules/rampart-integration/src/test/resources/security/s6.service.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<service name="PingPort">
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.oasis.ping.PingPortSkeleton</parameter>
-	<!--Mounting the method Ping-->
-	<operation name="Ping">
-		<messageReceiver class="org.apache.axis2.oasis.ping.PingPortMessageReceiverInOut"/>
-	</operation>    
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Encrypt Signature Timestamp</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Encrypt Signature Timestamp</items>
-        <user>bob</user>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <encryptionKeyIdentifier>DirectReference</encryptionKeyIdentifier>
-        <encryptionSymAlgorithm>http://www.w3.org/2001/04/xmlenc#tripledes-cbc</encryptionSymAlgorithm>
-        <encryptionUser>alice</encryptionUser>
-        <signatureKeyIdentifier>SKIKeyIdentifier</signatureKeyIdentifier>
-        <signaturePropFile>interop.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/s7.client.axis2.xml b/modules/rampart-integration/src/test/resources/security/s7.client.axis2.xml
deleted file mode 100644
index 53086c2..0000000
--- a/modules/rampart-integration/src/test/resources/security/s7.client.axis2.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Scenario 7: Client's Configuration:START-->
-
-    <parameter name="OutflowSecurity">
-        <action>
-            <items>Signature Encrypt Timestamp</items>
-            <user>alice</user>
-            <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-            <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-            <encryptionSymAlgorithm>http://www.w3.org/2001/04/xmlenc#tripledes-cbc</encryptionSymAlgorithm>
-            <encryptionUser>bob</encryptionUser>
-            <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-            <signaturePropFile>interop.properties</signaturePropFile>
-            <encryptionPropFile>interop.properties</encryptionPropFile>
-            <signatureParts>{}{http://schemas.xmlsoap.org/soap/envelope/}Body;STRTransform</signatureParts>
-        </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-        <action>
-            <items>Signature Encrypt Timestamp</items>
-            <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-            <signaturePropFile>interop.properties</signaturePropFile>
-            <decryptionPropFile>interop.properties</decryptionPropFile>
-        </action>
-    </parameter>
-
-    <!-- Scenario 7: Client's Configuration:END-->
-
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-   <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s7.service.axis2.xml b/modules/rampart-integration/src/test/resources/security/s7.service.axis2.xml
deleted file mode 100644
index 7d39a93..0000000
--- a/modules/rampart-integration/src/test/resources/security/s7.service.axis2.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Engage the security module -->
-    <module ref="rampart"/>
-
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-    </transportReceiver>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-    <transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">
-          <parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>
-          <parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.port" locked="false">110</parameter>
-          <parameter name="transport.mail.replyToAddress" locked="false">axis2@127.0.0.1</parameter>
-      </transportReceiver> -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/>
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-   <transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender">
-       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
-       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
-   </transportSender>
-   -->
-   <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/s7.service.xml b/modules/rampart-integration/src/test/resources/security/s7.service.xml
deleted file mode 100644
index f8111e7..0000000
--- a/modules/rampart-integration/src/test/resources/security/s7.service.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<service name="PingPort">
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.oasis.ping.PingPortSkeleton</parameter>
-	<!--Mounting the method Ping-->
-	<operation name="Ping">
-		<messageReceiver class="org.apache.axis2.oasis.ping.PingPortMessageReceiverInOut"/>
-	</operation> 
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-        <decryptionPropFile>interop.properties</decryptionPropFile>
-      </action>
-    </parameter>
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <user>bob</user>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <encryptionKeyIdentifier>DirectReference</encryptionKeyIdentifier>
-        <encryptionSymAlgorithm>http://www.w3.org/2001/04/xmlenc#tripledes-cbc</encryptionSymAlgorithm>
-        <encryptionUser>alice</encryptionUser>
-        <signatureKeyIdentifier>SKIKeyIdentifier</signatureKeyIdentifier>
-        <signaturePropFile>interop.properties</signaturePropFile>
-        <encryptionPropFile>interop.properties</encryptionPropFile>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/sST1.client.axis2.xml b/modules/rampart-integration/src/test/resources/security/sST1.client.axis2.xml
deleted file mode 100644
index 6af6407..0000000
--- a/modules/rampart-integration/src/test/resources/security/sST1.client.axis2.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Scenario ST1: Client's Configuration:START-->
-
-    <parameter name="OutflowSecurity">
-        <action>
-            <items>Timestamp SAMLTokenUnsigned</items>
-            <samlPropFile>axis2.saml.properties</samlPropFile>
-        </action>
-    </parameter>
-
-    <!-- Scenario ST1: Client's Configuration:END-->
-   
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/sST1.service.axis2.xml b/modules/rampart-integration/src/test/resources/security/sST1.service.axis2.xml
deleted file mode 100644
index 4a0c614..0000000
--- a/modules/rampart-integration/src/test/resources/security/sST1.service.axis2.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Engage the security module -->
-    <module ref="rampart"/>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-    </transportReceiver>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-    <transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">
-          <parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>
-          <parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.port" locked="false">110</parameter>
-          <parameter name="transport.mail.replyToAddress" locked="false">axis2@127.0.0.1</parameter>
-      </transportReceiver> -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/>
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-   <transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender">
-       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
-       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
-   </transportSender>
-   -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/sST1.service.xml b/modules/rampart-integration/src/test/resources/security/sST1.service.xml
deleted file mode 100644
index 1bb5dc7..0000000
--- a/modules/rampart-integration/src/test/resources/security/sST1.service.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<service name="PingPort">
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.oasis.ping.PingPortSkeleton</parameter>
-	<!--Mounting the method Ping-->
-	<operation name="Ping">
-		<messageReceiver class="org.apache.axis2.oasis.ping.PingPortMessageReceiverInOut"/>
-	</operation>    
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp SAMLTokenUnsigned</items>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/sc/s1-services.xml b/modules/rampart-integration/src/test/resources/security/sc/s1-services.xml
deleted file mode 100644
index 1d92054..0000000
--- a/modules/rampart-integration/src/test/resources/security/sc/s1-services.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<service name="SecureService">
-
-	<module ref="rampart"/>
-	<module ref="rahas"/>
-
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.security.sc.Service</parameter>
-
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-		<actionMapping>urn:echo</actionMapping>
-	</operation>
-
- <!--   <parameter name="sct-issuer-config">
-		<sct-issuer-config>
-			<proofToken>EncryptedKey</proofToken>
-			<cryptoProperties>sctIssuer.properties</cryptoProperties>
-			<addRequestedAttachedRef />
-		</sct-issuer-config>
-    </parameter>-->
-
-    <parameter name="sct-issuer-config">
-        <sct-issuer-config>
-            <addRequestedAttachedRef/>
-            <addRequestedUnattachedRef/>
-            <cryptoProperties>
-               <crypto provider="org.apache.ws.security.components.crypto.Merlin">
-                    <property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</property>
-                    <property name="org.apache.ws.security.crypto.merlin.file">sts.jks</property>
-                    <property name="org.apache.ws.security.crypto.merlin.keystore.password">password</property>
-                </crypto>
-            </cryptoProperties>
-
-            <!--
-               Key computation mechanism
-               1 - Use Request Entropy
-               2 - Provide Entropy
-               3 - Use Own Key
-            -->
-            <keyComputation>3</keyComputation>
-
-            <!--
-               proofKeyType element is valid only if the keyComputation is set to 3
-               i.e. Use Own Key
-
-               Valid values are: EncryptedKey & BinarySecret
-            -->
-            <proofKeyType>EncryptedKey</proofKeyType>
-        </sct-issuer-config>
-    </parameter>
-
-     <parameter name="token-canceler-config">
-		<token-canceler-config>
-			<!--<proofToken>EncryptedKey</proofToken>-->
-			<!--<cryptoProperties>sctIssuer.properties</cryptoProperties>-->
-			<!--<addRequestedAttachedRef />-->
-		</token-canceler-config>
-    </parameter>
-
-    <parameter xmlns="" name="sc-configuration">
-		<sc-configuration xmlns="">
-			<scope xmlns="">service</scope>
-			<passwordCallbackClass xmlns="">org.apache.axis2.security.sc.PWCallback</passwordCallbackClass>
-			<cryptoProperties xmlns="">sctIssuer.properties</cryptoProperties>
-		</sc-configuration>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature</items>
-        <signaturePropFile>sctIssuer.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <encryptionUser>useReqSigCert</encryptionUser>
-        <user>sts</user>
-        <signaturePropFile xmlns="">sctIssuer.properties</signaturePropFile>
-	<passwordCallbackClass xmlns="">org.apache.axis2.security.sc.PWCallback</passwordCallbackClass>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/sc/s2-services.xml b/modules/rampart-integration/src/test/resources/security/sc/s2-services.xml
deleted file mode 100644
index 8c942a6..0000000
--- a/modules/rampart-integration/src/test/resources/security/sc/s2-services.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<service name="SecureService">
-
-	<module ref="rampart"/>
-	<module ref="rahas"/>
-
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.security.sc.Service</parameter>
-
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-		<actionMapping>urn:echo</actionMapping>
-	</operation>    
-
-    <parameter name="sct-issuer-config">
-		<sct-issuer-config>
-			<addRequestedAttachedRef />
-			<addRequestedUnattachedRef />
-            <cryptoProperties>
-               <crypto provider="org.apache.ws.security.components.crypto.Merlin">
-                    <property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</property>
-                    <property name="org.apache.ws.security.crypto.merlin.file">sts.jks</property>
-                    <property name="org.apache.ws.security.crypto.merlin.keystore.password">password</property>
-                </crypto>
-            </cryptoProperties>
-
-            <!--
-               Key computation mechanism
-               1 - Use Request Entropy
-               2 - Provide Entropy
-               3 - Use Own Key
-            -->
-            <keyComputation>3</keyComputation>
-
-            <!--
-               proofKeyType element is valid only if the keyComputation is set to 3
-               i.e. Use Own Key
-
-               Valid values are: EncryptedKey & BinarySecret
-            -->
-            <proofKeyType>BinarySecret</proofKeyType>
-        </sct-issuer-config>
-    </parameter>
-    
-    <parameter xmlns="" name="sc-configuration">
-		<sc-configuration xmlns="">
-			<scope xmlns="">service</scope>
-			<passwordCallbackClass xmlns="">org.apache.axis2.security.sc.PWCallback</passwordCallbackClass>
-			<cryptoProperties xmlns="">sctIssuer.properties</cryptoProperties>
-		</sc-configuration>
-	</parameter>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature</items>
-        <signaturePropFile>sctIssuer.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp</items>
-      </action>
-    </parameter>
-    
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/sc/s3-services.xml b/modules/rampart-integration/src/test/resources/security/sc/s3-services.xml
deleted file mode 100644
index 754a0ca..0000000
--- a/modules/rampart-integration/src/test/resources/security/sc/s3-services.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<service name="SecureService">
-
-	<module ref="rampart"/>
-
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.security.sc.Service</parameter>
-
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-		<actionMapping>urn:echo</actionMapping>
-	</operation>    
-
-    <parameter name="sct-issuer-config">
-		<sct-issuer-config>
-            <cryptoProperties>
-               <crypto provider="org.apache.ws.security.components.crypto.Merlin">
-                    <property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</property>
-                    <property name="org.apache.ws.security.crypto.merlin.file">sts.jks</property>
-                    <property name="org.apache.ws.security.crypto.merlin.keystore.password">password</property>
-                </crypto>
-            </cryptoProperties>
-            <addRequestedAttachedRef />
-
-            <!--
-               Key computation mechanism
-               1 - Use Request Entropy
-               2 - Provide Entropy
-               3 - Use Own Key
-            -->
-            <keyComputation>3</keyComputation>
-
-            <!--
-               proofKeyType element is valid only if the keyComputation is set to 3
-               i.e. Use Own Key
-
-               Valid values are: EncryptedKey & BinarySecret
-            -->
-            <proofKeyType>BinarySecret</proofKeyType>
-        </sct-issuer-config>
-    </parameter>
-    
-    <parameter xmlns="" name="sc-configuration">
-		<sc-configuration xmlns="">
-			<scope xmlns="">service</scope>
-			<passwordCallbackClass xmlns="">org.apache.axis2.security.sc.PWCallback</passwordCallbackClass>
-			<cryptoProperties xmlns="">sctIssuer.properties</cryptoProperties>
-		</sc-configuration>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature</items>
-        <signaturePropFile>sctIssuer.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <encryptionUser>useReqSigCert</encryptionUser>
-        <user>sts</user>
-        <signaturePropFile xmlns="">sctIssuer.properties</signaturePropFile>
-	<passwordCallbackClass xmlns="">org.apache.axis2.security.sc.PWCallback</passwordCallbackClass>
-      </action>
-    </parameter>
-    
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/sc/s4-services.xml b/modules/rampart-integration/src/test/resources/security/sc/s4-services.xml
deleted file mode 100644
index 50b850a..0000000
--- a/modules/rampart-integration/src/test/resources/security/sc/s4-services.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<service name="SecureService">
-
-	<module ref="rampart"/>
-	<module ref="rahas"/>
-
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.security.sc.Service</parameter>
-
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-		<actionMapping>urn:echo</actionMapping>
-	</operation>    
-
-    <parameter name="sct-issuer-config">
-		<sct-issuer-config>
-            <cryptoProperties>
-               <crypto provider="org.apache.ws.security.components.crypto.Merlin">
-                    <property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</property>
-                    <property name="org.apache.ws.security.crypto.merlin.file">sts.jks</property>
-                    <property name="org.apache.ws.security.crypto.merlin.keystore.password">password</property>
-                </crypto>
-            </cryptoProperties>
-            <addRequestedAttachedRef />
-
-            <!--
-               Key computation mechanism
-               1 - Use Request Entropy
-               2 - Provide Entropy
-               3 - Use Own Key
-            -->
-            <keyComputation>3</keyComputation>
-
-            <!--
-               proofKeyType element is valid only if the keyComputation is set to 3
-               i.e. Use Own Key
-
-               Valid values are: EncryptedKey & BinarySecret
-            -->
-            <proofKeyType>BinarySecret</proofKeyType>
-        </sct-issuer-config>
-    </parameter>
-    
-    <parameter xmlns="" name="sc-configuration">
-		<sc-configuration xmlns="">
-			<scope xmlns="">service</scope>
-			<passwordCallbackClass xmlns="">org.apache.axis2.security.sc.PWCallback</passwordCallbackClass>
-			<cryptoProperties xmlns="">sctIssuer.properties</cryptoProperties>
-		</sc-configuration>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature</items>
-        <signaturePropFile>sctIssuer.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <encryptionUser>useReqSigCert</encryptionUser>
-        <user>sts</user>
-        <signaturePropFile xmlns="">sctIssuer.properties</signaturePropFile>
-	<passwordCallbackClass xmlns="">org.apache.axis2.security.sc.PWCallback</passwordCallbackClass>
-      </action>
-    </parameter>
-    
-</service>
diff --git a/modules/rampart-integration/src/test/resources/security/sc/sctIssuer.properties b/modules/rampart-integration/src/test/resources/security/sc/sctIssuer.properties
deleted file mode 100755
index c126c57..0000000
--- a/modules/rampart-integration/src/test/resources/security/sc/sctIssuer.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=password
-org.apache.ws.security.crypto.merlin.file=sts.jks
diff --git a/modules/rampart-integration/src/test/resources/security/sc/sec.jks b/modules/rampart-integration/src/test/resources/security/sc/sec.jks
deleted file mode 100755
index 7af24b2..0000000
--- a/modules/rampart-integration/src/test/resources/security/sc/sec.jks
+++ /dev/null
Binary files differ
diff --git a/modules/rampart-integration/src/test/resources/security/sc/sec.properties b/modules/rampart-integration/src/test/resources/security/sc/sec.properties
deleted file mode 100755
index 3c3298d..0000000
--- a/modules/rampart-integration/src/test/resources/security/sc/sec.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
-org.apache.ws.security.crypto.merlin.keystore.type=jks
-org.apache.ws.security.crypto.merlin.keystore.password=password
-org.apache.ws.security.crypto.merlin.file=sec.jks
-
diff --git a/modules/rampart-integration/src/test/resources/security/sc/sts.jks b/modules/rampart-integration/src/test/resources/security/sc/sts.jks
deleted file mode 100644
index 2db0a7c..0000000
--- a/modules/rampart-integration/src/test/resources/security/sc/sts.jks
+++ /dev/null
Binary files differ
diff --git a/modules/rampart-integration/src/test/resources/security/secMtom.client.axis2.xml b/modules/rampart-integration/src/test/resources/security/secMtom.client.axis2.xml
deleted file mode 100644
index 9d1a37b..0000000
--- a/modules/rampart-integration/src/test/resources/security/secMtom.client.axis2.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-    
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Scenario 3 with MTOM: Client's Configuration:START-->
-
-    <parameter name="OutflowSecurity">
-        <action>
-            <items>Signature Encrypt Timestamp</items>
-            <user>alice</user>
-            <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-            <signaturePropFile>interop.properties</signaturePropFile>
-            <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-            <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-            <encryptionUser>bob</encryptionUser>
-
-            <optimizeParts>//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue</optimizeParts>
-        </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-        <action>
-            <items>Signature Encrypt Timestamp</items>
-            <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-            <signaturePropFile>interop.properties</signaturePropFile>
-        </action>
-    </parameter>
-
-    <!-- Scenario 3 with MTOM: Client's Configuration:END-->
-
-
-   
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
-    </transportSender>
-
-  <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/secMtom.service.axis2.xml b/modules/rampart-integration/src/test/resources/security/secMtom.service.axis2.xml
deleted file mode 100644
index 092a6d7..0000000
--- a/modules/rampart-integration/src/test/resources/security/secMtom.service.axis2.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<axisconfig name="AxisJava2.0">
-    <parameter name="hotdeployment" locked="false">true</parameter>
-    <parameter name="hotupdate" locked="false">true</parameter>
-    <parameter name="enableMTOM" locked="false">true</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <messageReceiver mep="INOUT" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-
-    <!-- Engage the security module -->
-    <module ref="rampart"/>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port" locked="false">6060</parameter>
-    </transportReceiver>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-    <transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">
-          <parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>
-          <parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>
-          <parameter name="transport.mail.pop3.port" locked="false">110</parameter>
-          <parameter name="transport.mail.replyToAddress" locked="false">axis2@127.0.0.1</parameter>
-      </transportReceiver> -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/>
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
-    </transportSender>
-
-    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
-   <transportSender name="mail" class="org.apache.axis2.transport.mail.MailTransportSender">
-       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
-       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
-       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
-   </transportSender>
-   -->
-
-   <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-integration/src/test/resources/security/secMtom.service.xml b/modules/rampart-integration/src/test/resources/security/secMtom.service.xml
deleted file mode 100644
index 45f7a1f..0000000
--- a/modules/rampart-integration/src/test/resources/security/secMtom.service.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<service name="PingPort">
-	<parameter locked="false" name="ServiceClass">org.apache.axis2.oasis.ping.PingPortSkeleton</parameter>
-	<!--Mounting the method Ping-->
-	<operation name="Ping">
-		<messageReceiver class="org.apache.axis2.oasis.ping.PingPortMessageReceiverInOut"/>
-	</operation>    
-
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Signature Encrypt Timestamp</items>
-        <user>bob</user>
-        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
-        <signaturePropFile>interop.properties</signaturePropFile>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionUser>alice</encryptionUser>
-
-        <optimizeParts>//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue</optimizeParts>
-      </action>
-    </parameter>
-
-</service>
diff --git a/modules/rampart-mar/module.xml b/modules/rampart-mar/module.xml
index 31a7f44..2552cb3 100644
--- a/modules/rampart-mar/module.xml
+++ b/modules/rampart-mar/module.xml
@@ -9,9 +9,6 @@
         <handler name="PolicyBasedSecurityInHandler" class="org.apache.rampart.handler.RampartReceiver">
             <order phase="Security" phaseFirst="true"/>
         </handler>
-        <handler name="SecurityInHandler" class="org.apache.rampart.handler.WSDoAllReceiver">
-            <order phase="Security"/>
-        </handler>
         <handler name="PostDispatchVerificationHandler" class="org.apache.rampart.handler.PostDispatchVerificationHandler">
             <order phase="Dispatch" phaseLast="true"/>
         </handler>
@@ -19,18 +16,12 @@
     </InFlow>
 
     <OutFlow>
-        <handler name="SecurityOutHandler" class="org.apache.rampart.handler.WSDoAllSender">
-            <order phase="Security"/>
-        </handler>
         <handler name="PolicyBasedSecurityOutHandler" class="org.apache.rampart.handler.RampartSender">
             <order phase="Security" phaseLast="true"/>
         </handler>
     </OutFlow>
     
     <OutFaultFlow>
-        <handler name="SecurityOutHandler" class="org.apache.rampart.handler.WSDoAllSender">
-            <order phase="Security"/>
-        </handler>
         <handler name="PolicyBasedSecurityOutHandler" class="org.apache.rampart.handler.RampartSender">
             <order phase="Security" phaseLast="true"/>
         </handler>
@@ -40,9 +31,6 @@
         <handler name="PolicyBasedSecurityInHandler" class="org.apache.rampart.handler.RampartReceiver">
             <order phase="Security" phaseFirst="true"/>
         </handler>
-        <handler name="SecurityInHandler" class="org.apache.rampart.handler.WSDoAllReceiver">
-            <order phase="Security"/>
-        </handler>
     </InFaultFlow>
     
     <supported-policy-namespaces namespaces="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"/>
diff --git a/modules/rampart-mar/pom.xml b/modules/rampart-mar/pom.xml
index 66d7c3a..089ff7c 100644
--- a/modules/rampart-mar/pom.xml
+++ b/modules/rampart-mar/pom.xml
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache.rampart</groupId>
         <artifactId>rampart-project</artifactId>
-        <version>1.7.0-SNAPSHOT</version>
+        <version>1.8.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
 
@@ -34,31 +34,9 @@
     <packaging>mar</packaging>
     <name>Rampart - Mar</name>
 
-    <scm>
-		<connection>scm:svn:http://svn.apache.org/repos/asf/axis/axis2/java/rampart/trunk</connection>
-        <developerConnection>
-            scm:svn:https://svn.apache.org/repos/asf/axis/axis2/java/rampart/trunk
-        </developerConnection>
-		<url>http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk</url>
-    </scm>
-
     <build>
-        <sourceDirectory>src/main/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-            </resource>
-        </resources>
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-            <plugin>
                 <groupId>org.apache.axis2</groupId>
                 <artifactId>axis2-mar-maven-plugin</artifactId>
                 <extensions>true</extensions>
@@ -70,7 +48,6 @@
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>build-helper-maven-plugin</artifactId>
-                <version>1.0</version>
                 <executions>
                     <execution>
                         <id>aar</id>
diff --git a/modules/rampart-policy/pom.xml b/modules/rampart-policy/pom.xml
index 5ba4c78..0d38319 100644
--- a/modules/rampart-policy/pom.xml
+++ b/modules/rampart-policy/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.rampart</groupId>
         <artifactId>rampart-project</artifactId>
-        <version>1.7.0-SNAPSHOT</version>
+        <version>1.8.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
 
@@ -34,40 +34,24 @@
     <packaging>jar</packaging>
     <name>Rampart - Policy</name>
 
-    <build>
-        <sourceDirectory>src/main/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <excludes>
-                    <exclude>**/*.java</exclude>                     
-                </excludes>
-            </resource>
-        </resources> 
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-site-plugin</artifactId>
-                <version>2.0-beta-5</version>
-                <configuration>
-                    <templateDirectory>${basedir}</templateDirectory>
-                    <menu ref="parent" />
-                </configuration>
-            </plugin>
-        </plugins>
-    </reporting>
-
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-kernel</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ws.commons.axiom</groupId>
+            <artifactId>axiom-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ws.commons.axiom</groupId>
+            <artifactId>axiom-truth</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/Constants.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/Constants.java
index 60f28f8..d2b15f2 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/Constants.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/Constants.java
@@ -201,6 +201,10 @@
     public static final String XPATH_FILTER20 = "XPathFilter20";
 
     // /////////////////////////////////////////////////////////////////////
+    
+    public final static String WSS_KERBEROS_TOKEN11 = "http://docs.oasis-open.org/wss/oasis-wss-kerberos-token-profile-1.1#GSS_Kerberosv5_AP_REQ";
+    
+    // /////////////////////////////////////////////////////////////////////
 
     public static final QName ATTR_XPATH_VERSION = new QName(SP_NS, "XPathVersion", Constants.SP_PREFIX);
     
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SP11Constants.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SP11Constants.java
index 24bc380..99f4f77 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SP11Constants.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SP11Constants.java
@@ -258,6 +258,15 @@
 
     public static final QName BODY = new QName(SP11Constants.SP_NS, "Body");
     
+    public static final QName KERBEROS_TOKEN = new QName(SP11Constants.SP_NS,
+            SPConstants.KERBEROS_TOKEN, SP11Constants.SP_PREFIX);
+
+    public static final QName REQUIRE_KERBEROS_GSS_V5_TOKEN_11 = new QName(SP11Constants.SP_NS,
+            SPConstants.REQUIRE_KERBEROS_GSS_V5_TOKEN_11, SP11Constants.SP_PREFIX);
+
+    public static final QName REQUIRE_KERBEROS_V5_TOKEN_11 = new QName(SP11Constants.SP_NS,
+            SPConstants.REQUIRE_KERBEROS_V5_TOKEN_11, SP11Constants.SP_PREFIX);
+    
     public static int getInclusionFromAttributeValue(String value ) {
         
         if (INCLUDE_ALWAYS.equals(value)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SP12Constants.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SP12Constants.java
index 9cc040d..ff7e0d9 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SP12Constants.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SP12Constants.java
@@ -317,6 +317,15 @@
     
     ////////////////////////////////////////////////////////////////////////////////////////////////
     
+    public static final QName KERBEROS_TOKEN = new QName(SP12Constants.SP_NS,
+            SPConstants.KERBEROS_TOKEN, SP12Constants.SP_PREFIX);
+
+    public static final QName REQUIRE_KERBEROS_GSS_V5_TOKEN_11 = new QName(SP12Constants.SP_NS,
+            SPConstants.REQUIRE_KERBEROS_GSS_V5_TOKEN_11, SP12Constants.SP_PREFIX);
+
+    public static final QName REQUIRE_KERBEROS_V5_TOKEN_11 = new QName(SP12Constants.SP_NS,
+            SPConstants.REQUIRE_KERBEROS_V5_TOKEN_11, SP12Constants.SP_PREFIX);
+    
     public static int getInclusionFromAttributeValue(String value ) {
         
         if (INCLUDE_ALWAYS.equals(value)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SPConstants.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SPConstants.java
index dd834e7..1ca64db 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SPConstants.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/SPConstants.java
@@ -131,6 +131,7 @@
     
     public final static String USERNAME_TOKEN11 = "WssUsernameToken11";
 
+    public final static String KERBEROS_TOKEN = "KerberosToken";
     
     public final static String TRANSPORT_TOKEN = "TransportToken";
     
@@ -429,7 +430,7 @@
     
     public static final String HASH_PASSWORD = "HashPassword";
     
-
+    public static final String REQUIRE_KERBEROS_V5_TOKEN_11 = "WssKerberosV5ApReqToken11";
     
-
+    public static final String REQUIRE_KERBEROS_GSS_V5_TOKEN_11 = "WssGssKerberosV5ApReqToken11";
 }
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AbstractConfigurableSecurityAssertion.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AbstractConfigurableSecurityAssertion.java
index f790c73..c8b2793 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AbstractConfigurableSecurityAssertion.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AbstractConfigurableSecurityAssertion.java
@@ -22,16 +22,16 @@
 
 public abstract class AbstractConfigurableSecurityAssertion extends AbstractSecurityAssertion {
     
-    protected ArrayList configurations = null;
+    protected ArrayList<Assertion> configurations = null;
     
     public void addConfiguration(Assertion assertion) {
         if (configurations == null) {
-            configurations = new ArrayList();
+            configurations = new ArrayList<Assertion>();
         }
         configurations.add(assertion);
     }
     
-    public List getConfigurations() {
+    public List<Assertion> getConfigurations() {
         return configurations;
     }
     
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AbstractSecurityAssertion.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AbstractSecurityAssertion.java
index 8b207fb..b57663a 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AbstractSecurityAssertion.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AbstractSecurityAssertion.java
@@ -21,9 +21,6 @@
 
 import org.apache.neethi.Assertion;
 import org.apache.neethi.PolicyComponent;
-import org.apache.ws.secpolicy.SP12Constants;
-import org.apache.ws.secpolicy.SPConstants;
-import org.apache.ws.secpolicy.SP12Constants;
 
 public abstract class AbstractSecurityAssertion implements Assertion {
 
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AsymmetricBinding.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AsymmetricBinding.java
index 4feeaf7..c165ad7 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AsymmetricBinding.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/AsymmetricBinding.java
@@ -24,6 +24,7 @@
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.neethi.All;
+import org.apache.neethi.Assertion;
 import org.apache.neethi.ExactlyOne;
 import org.apache.neethi.Policy;
 import org.apache.neethi.PolicyComponent;
@@ -86,7 +87,7 @@
         }
 
         AlgorithmSuite algorithmSuite = getAlgorithmSuite();
-        List configs = algorithmSuite.getConfigurations();
+        List<Assertion> configs = algorithmSuite.getConfigurations();
 
         Policy policy = new Policy();
         ExactlyOne exactlyOne = new ExactlyOne();
@@ -96,7 +97,7 @@
         All wrapper;
         AsymmetricBinding asymmetricBinding;
 
-        for (Iterator iterator = configs.iterator(); iterator.hasNext();) {
+        for (Iterator<Assertion> iterator = configs.iterator(); iterator.hasNext();) {
             wrapper = new All();
             asymmetricBinding = new AsymmetricBinding(this.version);
 
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/ContentEncryptedElements.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/ContentEncryptedElements.java
index 0c441d8..ae4cfbf 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/ContentEncryptedElements.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/ContentEncryptedElements.java
@@ -25,15 +25,14 @@
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.neethi.PolicyComponent;
-import org.apache.ws.secpolicy.SP11Constants;
 import org.apache.ws.secpolicy.SP12Constants;
 import org.apache.ws.secpolicy.SPConstants;
 
 public class ContentEncryptedElements extends AbstractSecurityAssertion {
 
-    private ArrayList xPathExpressions = new ArrayList();
+    private ArrayList<String> xPathExpressions = new ArrayList<String>();
     
-    private HashMap declaredNamespaces = new HashMap();
+    private HashMap<String, String> declaredNamespaces = new HashMap<String, String>();
 
     private String xPathVersion;
 
@@ -44,7 +43,7 @@
     /**
      * @return Returns the xPathExpressions.
      */
-    public ArrayList getXPathExpressions() {
+    public ArrayList<String> getXPathExpressions() {
         return xPathExpressions;
     }
 
@@ -67,7 +66,7 @@
         xPathVersion = pathVersion;
     }
     
-    public HashMap getDeclaredNamespaces () {
+    public HashMap<String, String> getDeclaredNamespaces () {
         return declaredNamespaces;
     }
     
@@ -90,9 +89,9 @@
 
         String xpathExpression;
 
-        for (Iterator iterator = xPathExpressions.iterator(); iterator
+        for (Iterator<String> iterator = xPathExpressions.iterator(); iterator
                 .hasNext();) {
-            xpathExpression = (String) iterator.next();
+            xpathExpression = iterator.next();
             // <sp:XPath ..>
             writeStartElement(writer, prefix, SPConstants.XPATH_EXPR, namespaceURI);
             writer.writeCharacters(xpathExpression);
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/KerberosToken.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/KerberosToken.java
new file mode 100644
index 0000000..3963da9
--- /dev/null
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/KerberosToken.java
@@ -0,0 +1,152 @@
+/*
+ * 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.ws.secpolicy.model;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.ws.secpolicy.Constants;
+import org.apache.ws.secpolicy.SP11Constants;
+import org.apache.ws.secpolicy.SP12Constants;
+import org.apache.ws.secpolicy.SPConstants;
+
+public class KerberosToken extends Token {
+
+    private boolean requiresKerberosV5Token;
+
+    private boolean requiresGssKerberosV5Token;
+
+    private boolean requiresKeyIdentifierReference;
+
+    private String tokenVersionAndType = Constants.WSS_KERBEROS_TOKEN11;
+
+    public String getTokenVersionAndType() {
+        return tokenVersionAndType;
+    }
+
+    public void setTokenVersionAndType(String tokenVersionAndType) {
+        this.tokenVersionAndType = tokenVersionAndType;
+    }
+
+    public boolean isRequiresKerberosV5Token() {
+        return requiresKerberosV5Token;
+    }
+
+    public void setRequiresKerberosV5Token(boolean requiresKerberosV5Token) {
+        this.requiresKerberosV5Token = requiresKerberosV5Token;
+    }
+
+    public boolean isRequiresGssKerberosV5Token() {
+        return requiresGssKerberosV5Token;
+    }
+
+    public void setRequiresGssKerberosV5Token(boolean requiresGssKerberosV5Token) {
+        this.requiresGssKerberosV5Token = requiresGssKerberosV5Token;
+    }
+
+    public boolean isRequiresKeyIdentifierReference() {
+        return requiresKeyIdentifierReference;
+    }
+
+    public void setRequiresKeyIdentifierReference(boolean
+        requiresKeyIdentifierReference) {
+        this.requiresKeyIdentifierReference = requiresKeyIdentifierReference;
+    }
+
+    public KerberosToken(int version) {
+        setVersion(version);
+    }
+
+    public QName getName() {
+        if (version == SPConstants.SP_V12) {
+            return SP12Constants.KERBEROS_TOKEN;
+        } 
+        else {
+            return SP11Constants.KERBEROS_TOKEN;
+        }
+    }
+
+    public void serialize(XMLStreamWriter writer) throws XMLStreamException {
+        String localName = getName().getLocalPart();
+        String namespaceURI = getName().getNamespaceURI();
+
+        String prefix = writer.getPrefix(namespaceURI);
+
+        if (prefix == null) {
+            prefix = getName().getPrefix();
+            writer.setPrefix(prefix, namespaceURI);
+        }
+
+        // <sp:KerberosToken>
+        writer.writeStartElement(prefix, localName, namespaceURI);
+
+        String inclusion;
+
+        if (version == SPConstants.SP_V12) {
+            inclusion = SP12Constants.getAttributeValueFromInclusion(getInclusion());
+        } else {
+            inclusion = SP11Constants.getAttributeValueFromInclusion(getInclusion());
+        }
+
+        if (inclusion != null) {
+            writer.writeAttribute(prefix, namespaceURI,
+                                  SPConstants.ATTR_INCLUDE_TOKEN, inclusion);
+        }
+
+        String pPrefix = writer.getPrefix(SPConstants.POLICY.getNamespaceURI());
+        if (pPrefix == null) {
+            pPrefix = SPConstants.POLICY.getPrefix();
+            writer.setPrefix(pPrefix, SPConstants.POLICY.getNamespaceURI());
+        }
+
+        // <wsp:Policy>
+        writer.writeStartElement(pPrefix, SPConstants.POLICY.getLocalPart(),
+                                 SPConstants.POLICY.getNamespaceURI());
+
+        if (isRequiresKerberosV5Token()) {
+            // <sp:WssKerberosV5ApReqToken11 />
+            writer.writeStartElement(prefix,SPConstants.REQUIRE_KERBEROS_V5_TOKEN_11,
+                                     namespaceURI);
+            writer.writeEndElement();
+        }
+
+        if (isRequiresGssKerberosV5Token()) {
+            // <sp:WssGssKerberosV5ApReqToken11 ... />
+            writer.writeStartElement(prefix,
+                                     SPConstants.REQUIRE_KERBEROS_GSS_V5_TOKEN_11,
+                                     namespaceURI);
+            writer.writeEndElement();
+        }
+
+        if (isRequiresKeyIdentifierReference()) {
+            // <sp:RequireKeyIdentifierReference />
+            writer.writeStartElement(prefix,
+                                     SPConstants.REQUIRE_KEY_IDENTIFIRE_REFERENCE,
+                                     namespaceURI);
+            writer.writeEndElement();
+        }
+
+        // </wsp:Policy>
+        writer.writeEndElement();
+
+        // </sp:KerberosToken>
+        writer.writeEndElement();
+    }
+}
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/RequiredElements.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/RequiredElements.java
index e940d43..854afc4 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/RequiredElements.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/RequiredElements.java
@@ -31,9 +31,9 @@
 
 public class RequiredElements extends AbstractSecurityAssertion {
 
-    private ArrayList xPathExpressions = new ArrayList();
+    private ArrayList<String> xPathExpressions = new ArrayList<String>();
     
-    private HashMap declaredNamespaces = new HashMap();
+    private HashMap<String, String> declaredNamespaces = new HashMap<String, String>();
 
     private String xPathVersion;
 
@@ -44,7 +44,7 @@
     /**
      * @return Returns the xPathExpressions.
      */
-    public ArrayList getXPathExpressions() {
+    public ArrayList<String> getXPathExpressions() {
         return xPathExpressions;
     }
 
@@ -67,7 +67,7 @@
         xPathVersion = pathVersion;
     }
     
-    public HashMap getDeclaredNamespaces () {
+    public HashMap<String, String> getDeclaredNamespaces () {
         return declaredNamespaces;
     }
     
@@ -90,7 +90,7 @@
 
         String xpathExpression;
 
-        for (Iterator iterator = xPathExpressions.iterator(); iterator
+        for (Iterator<String> iterator = xPathExpressions.iterator(); iterator
                 .hasNext();) {
             xpathExpression = (String) iterator.next();
             // <sp:XPath ..>
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/RequiredParts.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/RequiredParts.java
index 3ccd530..af03d06 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/RequiredParts.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/RequiredParts.java
@@ -24,13 +24,12 @@
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.neethi.PolicyComponent;
-import org.apache.ws.secpolicy.SP11Constants;
 import org.apache.ws.secpolicy.SP12Constants;
 import org.apache.ws.secpolicy.SPConstants;
 
 public class RequiredParts extends AbstractSecurityAssertion {
     
-    private ArrayList headers = new ArrayList();
+    private ArrayList<Header> headers = new ArrayList<Header>();
     
     public RequiredParts(int version) {
         setVersion(version);
@@ -39,7 +38,7 @@
     /**
      * @return Returns the headers.
      */
-    public ArrayList getHeaders() {
+    public ArrayList<Header> getHeaders() {
         return this.headers;
     }
 
@@ -68,8 +67,8 @@
         writeStartElement(writer, prefix, localName, namespaceURI);
         
         Header header;        
-        for (Iterator iterator = headers.iterator(); iterator.hasNext();) {
-            header = (Header) iterator.next();
+        for (Iterator<Header> iterator = headers.iterator(); iterator.hasNext();) {
+            header = iterator.next();
             // <sp:Header Name=".." Namespace=".." />
             writeStartElement(writer, prefix, SPConstants.HEADER, namespaceURI);
             // Name attribute is optional
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SignedEncryptedElements.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SignedEncryptedElements.java
index 915f2f1..e5ba5f1 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SignedEncryptedElements.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SignedEncryptedElements.java
@@ -31,9 +31,9 @@
 
 public class SignedEncryptedElements extends AbstractSecurityAssertion {
 
-    private ArrayList xPathExpressions = new ArrayList();
+    private ArrayList<String> xPathExpressions = new ArrayList<String>();
     
-    private HashMap declaredNamespaces = new HashMap();
+    private HashMap<String, String> declaredNamespaces = new HashMap<String, String>();
 
     private String xPathVersion;
 
@@ -51,7 +51,7 @@
     /**
      * @return Returns the xPathExpressions.
      */
-    public ArrayList getXPathExpressions() {
+    public ArrayList<String> getXPathExpressions() {
         return xPathExpressions;
     }
 
@@ -81,7 +81,7 @@
         return signedElemets;
     }
     
-    public HashMap getDeclaredNamespaces () {
+    public HashMap<String, String> getDeclaredNamespaces () {
         return declaredNamespaces;
     }
     
@@ -104,9 +104,9 @@
 
         String xpathExpression;
 
-        for (Iterator iterator = xPathExpressions.iterator(); iterator
+        for (Iterator<String> iterator = xPathExpressions.iterator(); iterator
                 .hasNext();) {
-            xpathExpression = (String) iterator.next();
+            xpathExpression = iterator.next();
             // <sp:XPath ..>
             writeStartElement(writer, prefix, SPConstants.XPATH_EXPR, namespaceURI);
 
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SignedEncryptedParts.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SignedEncryptedParts.java
index cdf3576..543412e 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SignedEncryptedParts.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SignedEncryptedParts.java
@@ -34,7 +34,7 @@
     
     private boolean attachments;
     
-    private ArrayList headers = new ArrayList();
+    private ArrayList<Header> headers = new ArrayList<Header>();
     
     private boolean signedParts;
 
@@ -84,7 +84,7 @@
     /**
      * @return Returns the headers.
      */
-    public ArrayList getHeaders() {
+    public ArrayList<Header> getHeaders() {
         return this.headers;
     }
 
@@ -137,8 +137,8 @@
         }
         
         Header header;        
-        for (Iterator iterator = headers.iterator(); iterator.hasNext();) {
-            header = (Header) iterator.next();
+        for (Iterator<Header> iterator = headers.iterator(); iterator.hasNext();) {
+            header = iterator.next();
             // <sp:Header Name=".." Namespace=".." />
             writeStartElement(writer, prefix, SPConstants.HEADER, namespaceURI);
             // Name attribute is optional
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SupportingToken.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SupportingToken.java
index 9a0a7b5..5473529 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SupportingToken.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SupportingToken.java
@@ -43,7 +43,7 @@
 
     private AlgorithmSuite algorithmSuite;
 
-    private ArrayList tokens = new ArrayList();
+    private ArrayList<Token> tokens = new ArrayList<Token>();
 
     private SignedEncryptedElements signedElements;
 
@@ -84,7 +84,7 @@
     /**
      * @return Returns the token.
      */
-    public ArrayList getTokens() {
+    public ArrayList<Token> getTokens() {
         return tokens;
     }
 
@@ -289,25 +289,29 @@
         writeStartElement(writer, SPConstants.POLICY);
 
         Token token;
-        for (Iterator iterator = getTokens().iterator(); iterator.hasNext();) {
+        for (Iterator<Token> iterator = getTokens().iterator(); iterator.hasNext();) {
             // [Token Assertion] +
-            token = (Token) iterator.next();
+            token = iterator.next();
             token.serialize(writer);
         }
 
         
         if (signedParts != null) {
             signedParts.serialize(writer);
-            
-        } else if (signedElements != null) {
+        }
+        
+        if (signedElements != null) {
             signedElements.serialize(writer);
-            
-        } else if (encryptedParts != null) {
+        }
+        
+        if (encryptedParts != null) {
             encryptedParts.serialize(writer);
-            
-        } else if (encryptedElements != null) {
+        }
+        
+        if (encryptedElements != null) {
             encryptedElements.serialize(writer);
         }
+        
         // </wsp:Policy>
         writer.writeEndElement();
 
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SymmetricBinding.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SymmetricBinding.java
index b4c04f9..9ee821a 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SymmetricBinding.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/SymmetricBinding.java
@@ -24,12 +24,14 @@
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.neethi.All;
+import org.apache.neethi.Assertion;
 import org.apache.neethi.ExactlyOne;
 import org.apache.neethi.Policy;
 import org.apache.neethi.PolicyComponent;
 import org.apache.ws.secpolicy.SP11Constants;
 import org.apache.ws.secpolicy.SP12Constants;
 import org.apache.ws.secpolicy.SPConstants;
+import org.apache.ws.secpolicy.WSSPolicyException;
 
 public class SymmetricBinding extends SymmetricAsymmetricBindingBase {
 
@@ -52,11 +54,13 @@
 
     /**
      * @param encryptionToken The encryptionToken to set.
+     * @throws WSSPolicyException 
      */
-    public void setEncryptionToken(EncryptionToken encryptionToken)  {
+    public void setEncryptionToken(EncryptionToken encryptionToken) 
+    		throws WSSPolicyException  {
         if(this.protectionToken != null) {
-//            throw new WSSPolicyException("Cannot use an EncryptionToken in a " +
-//                    "SymmetricBinding when there is a ProtectionToken");
+            throw new WSSPolicyException("Cannot use an EncryptionToken in a " +
+                    "SymmetricBinding when there is a ProtectionToken");
         }
         this.encryptionToken = encryptionToken;
     }
@@ -70,12 +74,14 @@
 
     /**
      * @param protectionToken The protectionToken to set.
+     * @throws WSSPolicyException 
      */
-    public void setProtectionToken(ProtectionToken protectionToken)  {
+    public void setProtectionToken(ProtectionToken protectionToken) 
+    		throws WSSPolicyException  {
         if(this.encryptionToken != null || this.signatureToken != null) {
-//            throw new WSSPolicyException("Cannot use a ProtectionToken in a " +
-//            "SymmetricBinding when there is a SignatureToken or an" +
-//            "EncryptionToken");
+            throw new WSSPolicyException("Cannot use a ProtectionToken in a " +
+            "SymmetricBinding when there is a SignatureToken or an" +
+            "EncryptionToken");
         }
         this.protectionToken = protectionToken;
     }
@@ -89,11 +95,13 @@
 
     /**
      * @param signatureToken The signatureToken to set.
+     * @throws WSSPolicyException 
      */
-    public void setSignatureToken(SignatureToken signatureToken) {
+    public void setSignatureToken(SignatureToken signatureToken) 
+    		throws WSSPolicyException {
         if(this.protectionToken != null) {
-//            throw new WSSPolicyException("Cannot use a SignatureToken in a " +
-//                    "SymmetricBinding when there is a ProtectionToken");
+            throw new WSSPolicyException("Cannot use a SignatureToken in a " +
+                    "SymmetricBinding when there is a ProtectionToken");
         }
         this.signatureToken = signatureToken;
     }
@@ -113,7 +121,7 @@
         }
         
         AlgorithmSuite algorithmSuite = getAlgorithmSuite();
-        List configurations = algorithmSuite.getConfigurations();
+        List<Assertion> configurations = algorithmSuite.getConfigurations();
         
         Policy policy = new Policy();
         ExactlyOne exactlyOne = new ExactlyOne();
@@ -121,30 +129,33 @@
         All wrapper;
         SymmetricBinding symmetricBinding;
         
-        for (Iterator iterator = configurations.iterator(); iterator.hasNext();) {
-            wrapper = new All();
-            symmetricBinding = new SymmetricBinding(this.version);
-            
-            algorithmSuite = (AlgorithmSuite) iterator.next();
-            symmetricBinding.setAlgorithmSuite(algorithmSuite);
-            
-            symmetricBinding.setEncryptionToken(getEncryptionToken());
-            symmetricBinding.setEntireHeadersAndBodySignatures(isEntireHeadersAndBodySignatures());
-            symmetricBinding.setIncludeTimestamp(isIncludeTimestamp());
-            symmetricBinding.setLayout(getLayout());
-            symmetricBinding.setProtectionOrder(getProtectionOrder());
-            symmetricBinding.setProtectionToken(getProtectionToken());
-            symmetricBinding.setSignatureProtection(isSignatureProtection());
-            symmetricBinding.setSignatureToken(getSignatureToken());
-            symmetricBinding.setSignedEndorsingSupportingTokens(getSignedEndorsingSupportingTokens());
-            symmetricBinding.setSignedSupportingToken(getSignedSupportingToken());
-            symmetricBinding.setTokenProtection(isTokenProtection());
-            
-            symmetricBinding.setNormalized(true);
-            wrapper.addPolicyComponent(symmetricBinding);
-            exactlyOne.addPolicyComponent(wrapper);
+        try {
+	        for (Iterator<Assertion> iterator = configurations.iterator(); iterator.hasNext();) {
+	            wrapper = new All();
+	            symmetricBinding = new SymmetricBinding(this.version);
+	            
+	            algorithmSuite = (AlgorithmSuite) iterator.next();
+	            symmetricBinding.setAlgorithmSuite(algorithmSuite);
+	            
+	            symmetricBinding.setEncryptionToken(getEncryptionToken());
+	            symmetricBinding.setEntireHeadersAndBodySignatures(isEntireHeadersAndBodySignatures());
+	            symmetricBinding.setIncludeTimestamp(isIncludeTimestamp());
+	            symmetricBinding.setLayout(getLayout());
+	            symmetricBinding.setProtectionOrder(getProtectionOrder());
+	            symmetricBinding.setProtectionToken(getProtectionToken());
+	            symmetricBinding.setSignatureProtection(isSignatureProtection());
+	            symmetricBinding.setSignatureToken(getSignatureToken());
+	            symmetricBinding.setSignedEndorsingSupportingTokens(getSignedEndorsingSupportingTokens());
+	            symmetricBinding.setSignedSupportingToken(getSignedSupportingToken());
+	            symmetricBinding.setTokenProtection(isTokenProtection());
+	            
+	            symmetricBinding.setNormalized(true);
+	            wrapper.addPolicyComponent(symmetricBinding);
+	            exactlyOne.addPolicyComponent(wrapper);
+	        }
+        } catch (WSSPolicyException e) {
+        	throw new IllegalArgumentException(e);
         }
-        
         policy.addPolicyComponent(exactlyOne);
         return policy;
     }
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/TransportBinding.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/TransportBinding.java
index e9472cd..892cbc6 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/TransportBinding.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/TransportBinding.java
@@ -25,6 +25,7 @@
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.neethi.All;
+import org.apache.neethi.Assertion;
 import org.apache.neethi.ExactlyOne;
 import org.apache.neethi.Policy;
 import org.apache.neethi.PolicyComponent;
@@ -36,7 +37,7 @@
 
     private TransportToken transportToken;
 
-    private List transportBindings;
+    private List<TransportBinding> transportBindings;
     
     private boolean tokenProtection;
 
@@ -74,7 +75,7 @@
     }
     
 
-    public List getConfigurations() {
+    public List<TransportBinding> getConfigurations() {
         return transportBindings;
     }
 
@@ -87,7 +88,7 @@
 
     public void addConfiguration(TransportBinding transportBinding) {
         if (transportBindings == null) {
-            transportBindings = new ArrayList();
+            transportBindings = new ArrayList<TransportBinding>();
         }
         transportBindings.add(transportBinding);
     }
@@ -106,7 +107,7 @@
         }
 
         AlgorithmSuite algorithmSuite = getAlgorithmSuite();
-        List configurations = algorithmSuite.getConfigurations();
+        List<Assertion> configurations = algorithmSuite.getConfigurations();
 
         if (configurations != null && configurations.size() == 1) {
             setNormalized(true);
@@ -119,7 +120,7 @@
         All wrapper;
         TransportBinding transportBinding;
 
-        for (Iterator iterator = configurations.iterator(); iterator.hasNext();) {
+        for (Iterator<Assertion> iterator = configurations.iterator(); iterator.hasNext();) {
             wrapper = new All();
             transportBinding = new TransportBinding(this.getVersion());
 
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/Trust10.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/Trust10.java
index 9ad5b3d..474c395 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/Trust10.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/Trust10.java
@@ -23,7 +23,6 @@
 import org.apache.neethi.PolicyComponent;
 import org.apache.ws.secpolicy.SP11Constants;
 import org.apache.ws.secpolicy.SPConstants;
-import org.apache.ws.secpolicy.SP12Constants;
 
 /**
  * Model bean to capture Trust10 assertion info
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/Trust13.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/Trust13.java
index 56e14b2..7b1154d 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/Trust13.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/Trust13.java
@@ -21,7 +21,6 @@
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.neethi.PolicyComponent;
-import org.apache.ws.secpolicy.SP11Constants;
 import org.apache.ws.secpolicy.SPConstants;
 import org.apache.ws.secpolicy.SP12Constants;
 
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/UsernameToken.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/UsernameToken.java
index 2d99399..0558db7 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/UsernameToken.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy/model/UsernameToken.java
@@ -109,46 +109,41 @@
         if (inclusion != null) {
             writeAttribute(writer, prefix, namespaceURI, SPConstants.ATTR_INCLUDE_TOKEN, inclusion);
         }
-
-        if (isUseUTProfile10() || isUseUTProfile11()) {
-            // <wsp:Policy>
-            writeStartElement(writer, SPConstants.POLICY);
-
-            // CHECKME
-            if (isUseUTProfile10()) {
-                // <sp:WssUsernameToken10 />
-                writeStartElement(writer, prefix, SPConstants.USERNAME_TOKEN10 , namespaceURI);
-            } else {
-                // <sp:WssUsernameToken11 />
-                writeStartElement(writer, prefix, SPConstants.USERNAME_TOKEN11 , namespaceURI);
+        
+        // <wsp:Policy>
+        writeStartElement(writer, SPConstants.POLICY);
+        
+        if (version == SPConstants.SP_V12) {
+            
+            if (isNoPassword()) {
+                writeEmptyElement(writer, prefix, SPConstants.NO_PASSWORD, namespaceURI);
+            } else if (isHashPassword()){
+                writeEmptyElement(writer, prefix, SPConstants.HASH_PASSWORD, namespaceURI);
             }
             
-            if (version == SPConstants.SP_V12) {
-                
-                if (isNoPassword()) {
-                    writeEmptyElement(writer, prefix, SPConstants.NO_PASSWORD, namespaceURI);
-                } else if (isHashPassword()){
-                    writeEmptyElement(writer, prefix, SPConstants.HASH_PASSWORD, namespaceURI);
-                }
-                
-                if (isDerivedKeys()) {
-                    writeEmptyElement(writer, prefix, SPConstants.REQUIRE_DERIVED_KEYS, namespaceURI);
-                } else if (isExplicitDerivedKeys()) {
-                    writeEmptyElement(writer, prefix, SPConstants.REQUIRE_EXPLICIT_DERIVED_KEYS, namespaceURI);
-                } else if (isImpliedDerivedKeys()) {
-                    writeEmptyElement(writer, prefix, SPConstants.REQUIRE_IMPLIED_DERIVED_KEYS, namespaceURI);
-                }
-                
+            if (isDerivedKeys()) {
+                writeEmptyElement(writer, prefix, SPConstants.REQUIRE_DERIVED_KEYS, namespaceURI);
+            } else if (isExplicitDerivedKeys()) {
+                writeEmptyElement(writer, prefix, SPConstants.REQUIRE_EXPLICIT_DERIVED_KEYS, namespaceURI);
+            } else if (isImpliedDerivedKeys()) {
+                writeEmptyElement(writer, prefix, SPConstants.REQUIRE_IMPLIED_DERIVED_KEYS, namespaceURI);
             }
-            writer.writeEndElement();
-
-            // </wsp:Policy>
-            writer.writeEndElement();
-
+            
+        }
+        
+        if (isUseUTProfile10()) {
+            // <sp:WssUsernameToken10 />
+        	writeEmptyElement(writer, prefix, SPConstants.USERNAME_TOKEN10 , namespaceURI);
+        } else if(isUseUTProfile11()) {
+            // <sp:WssUsernameToken11 />
+        	writeEmptyElement(writer, prefix, SPConstants.USERNAME_TOKEN11 , namespaceURI);
         }
 
+        // </wsp:Policy>
         writer.writeEndElement();
+
         // </sp:UsernameToken>
+        writer.writeEndElement();
 
     }
 }
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/AlgorithmSuiteBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/AlgorithmSuiteBuilder.java
index cd6596c..444f567 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/AlgorithmSuiteBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/AlgorithmSuiteBuilder.java
@@ -40,8 +40,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
                  
-        Iterator iterAlterns = policy.getAlternatives();
-        List assertions = ((List) iterAlterns.next());
+        Iterator<List<Assertion>> iterAlterns = policy.getAlternatives();
+        List<Assertion> assertions = iterAlterns.next();
         
         processAlternative(assertions, algorithmSuite);
                 
@@ -49,8 +49,8 @@
         
     }
     
-    private void processAlternative(List assertions, AlgorithmSuite algorithmSuite) {        
-        Iterator iterator = assertions.iterator();
+    private void processAlternative(List<Assertion> assertions, AlgorithmSuite algorithmSuite) {        
+        Iterator<Assertion> iterator = assertions.iterator();
         Assertion assertion = ((Assertion) iterator.next());
         String name = assertion.getName().getLocalPart();
         try {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/AsymmetricBindingBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/AsymmetricBindingBuilder.java
index 773a163..b57eaca 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/AsymmetricBindingBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/AsymmetricBindingBuilder.java
@@ -43,8 +43,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), asymmetricBinding);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), asymmetricBinding);
             
             /*
              * since there should be only one alternative
@@ -55,13 +55,13 @@
         return asymmetricBinding;
     }
     
-    private void processAlternative(List assertions, AsymmetricBinding asymmetricBinding) {
+    private void processAlternative(List<Assertion> assertions, AsymmetricBinding asymmetricBinding) {
                
         Assertion assertion;
         QName name;
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            assertion = iterator.next();
             name = assertion.getName();
             
             if (SP11Constants.INITIATOR_TOKEN.equals(name)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/EncryptionTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/EncryptionTokenBuilder.java
new file mode 100644
index 0000000..72bb876
--- /dev/null
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/EncryptionTokenBuilder.java
@@ -0,0 +1,65 @@
+/*
+ * 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.ws.secpolicy11.builders;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.AssertionBuilderFactory;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyEngine;
+import org.apache.neethi.builders.AssertionBuilder;
+import org.apache.ws.secpolicy.SP11Constants;
+import org.apache.ws.secpolicy.SPConstants;
+import org.apache.ws.secpolicy.model.EncryptionToken;
+import org.apache.ws.secpolicy.model.Token;
+
+public class EncryptionTokenBuilder  implements AssertionBuilder<OMElement> {
+
+    public Assertion build(OMElement element, AssertionBuilderFactory factory) throws IllegalArgumentException {
+        EncryptionToken encrToken = new EncryptionToken(SPConstants.SP_V11);
+        
+        Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
+        policy = (Policy) policy.normalize(false);
+        
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), encrToken);
+            break; // since there should be only one alternative ..
+        }
+        
+        return encrToken;
+    }
+        
+    public QName[] getKnownElements() {
+        return new QName[] {SP11Constants.ENCRYPTION_TOKEN};
+    }
+
+    private void processAlternative(List<Assertion> assertions, EncryptionToken parent) {
+        Object token = assertions.get(0);
+        
+        if (token instanceof Token) {
+            parent.setToken((Token) token);
+        }
+    }
+}
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/InitiatorTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/InitiatorTokenBuilder.java
index 38ad413..52f8bdb 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/InitiatorTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/InitiatorTokenBuilder.java
@@ -40,19 +40,19 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false); 
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), initiatorToken);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), initiatorToken);
             break; // TODO process all the token that must be set ..
         }
         
         return initiatorToken;
     }
     
-    private void processAlternative(List assertions, InitiatorToken parent) {
+    private void processAlternative(List<Assertion> assertions, InitiatorToken parent) {
         
         Object token;
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
             token = iterator.next();
             
             if (token instanceof Token) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/IssuedTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/IssuedTokenBuilder.java
index 0df9307..46e81e3 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/IssuedTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/IssuedTokenBuilder.java
@@ -83,9 +83,9 @@
             Policy policy = PolicyEngine.getPolicy(policyElement);
             policy = (Policy) policy.normalize(false);
 
-            for (Iterator iterator = policy.getAlternatives(); iterator
+            for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator
                     .hasNext();) {
-                processAlternative((List) iterator.next(), issuedToken);
+                processAlternative(iterator.next(), issuedToken);
                 break; // since there should be only one alternative ..
             }
         }
@@ -97,12 +97,12 @@
         return new QName[] { SP11Constants.ISSUED_TOKEN };
     }
 
-    private void processAlternative(List assertions, IssuedToken parent) {
+    private void processAlternative(List<Assertion> assertions, IssuedToken parent) {
         Assertion assertion;
         QName name;
 
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            assertion = iterator.next();
             name = assertion.getName();
 
             if (SP11Constants.REQUIRE_DERIVED_KEYS.equals(name)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/KerberosTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/KerberosTokenBuilder.java
new file mode 100644
index 0000000..53719d0
--- /dev/null
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/KerberosTokenBuilder.java
@@ -0,0 +1,84 @@
+/*
+ * 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.ws.secpolicy11.builders;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.AssertionBuilderFactory;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyEngine;
+import org.apache.neethi.builders.AssertionBuilder;
+import org.apache.ws.secpolicy.SP11Constants;
+import org.apache.ws.secpolicy.SPConstants;
+import org.apache.ws.secpolicy.model.KerberosToken;
+
+/**
+ * Builder for {@link KerberosToken} assertion (WS Security Policy version 1.1)
+ */
+public class KerberosTokenBuilder implements AssertionBuilder<OMElement> {
+    public Assertion build(OMElement element, AssertionBuilderFactory arg1) 
+            throws IllegalArgumentException {
+        KerberosToken kerberosToken = new KerberosToken(SPConstants.SP_V11);
+
+        OMElement policyElement = element.getFirstElement();
+
+        // Process token inclusion
+        OMAttribute includeAttr = element.getAttribute(SP11Constants.INCLUDE_TOKEN);
+
+        if (includeAttr != null) {
+            int inclusion = SP11Constants.getInclusionFromAttributeValue(
+                                  includeAttr.getAttributeValue());
+            kerberosToken.setInclusion(inclusion);
+        }
+
+        if (policyElement != null) {
+            Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
+            policy = policy.normalize(false);
+            for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+                processAlternative(iterator.next(), kerberosToken);
+                 // there should be only one alternative
+                break;
+            }
+        }
+        return kerberosToken;
+    }
+
+    private void processAlternative(List<Assertion> assertions, KerberosToken parent) {
+        for (Assertion assertion : assertions) {
+            QName name = assertion.getName();
+            if (SP11Constants.REQUIRE_KERBEROS_V5_TOKEN_11.equals(name)) {
+                parent.setRequiresKerberosV5Token(true);
+            } else if (SP11Constants.REQUIRE_KERBEROS_GSS_V5_TOKEN_11.equals(name)) {
+                parent.setRequiresGssKerberosV5Token(true);
+            } else if (SP11Constants.REQUIRE_KEY_IDENTIFIRE_REFERENCE.equals(name)) {
+                parent.setRequiresKeyIdentifierReference(true);
+            }
+        }
+    }
+
+    public QName[] getKnownElements() {
+        return new QName[] { SP11Constants.KERBEROS_TOKEN };
+    }
+}
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/LayoutBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/LayoutBuilder.java
index 94b1e9d..6eb16d4 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/LayoutBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/LayoutBuilder.java
@@ -40,8 +40,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext(); ) {
-            processAlternative((List) iterator.next(), layout);         
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext(); ) {
+            processAlternative(iterator.next(), layout);         
             break; // there should be only one alternative
         }
                         
@@ -52,10 +52,10 @@
         return new QName[] {SP11Constants.LAYOUT};
     }
 
-    public void processAlternative(List assertions, Layout parent) {
+    public void processAlternative(List<Assertion> assertions, Layout parent) {
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            Assertion assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            Assertion assertion = iterator.next();
             QName qname = assertion.getName();
             
             if (SP11Constants.STRICT.equals(qname)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/ProtectionTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/ProtectionTokenBuilder.java
index 91c075a..fe4e882 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/ProtectionTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/ProtectionTokenBuilder.java
@@ -39,8 +39,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), protectionToken);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), protectionToken);
             break; // since there should be only one alternative ..
         }
         
@@ -51,7 +51,7 @@
         return new QName[] {SP11Constants.PROTECTION_TOKEN};
     }
 
-    private void processAlternative(List assertions, ProtectionToken parent) {
+    private void processAlternative(List<Assertion> assertions, ProtectionToken parent) {
         Object token = assertions.get(0);
         
         if (token instanceof Token) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/RecipientTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/RecipientTokenBuilder.java
index 41575c8..c1393fc 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/RecipientTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/RecipientTokenBuilder.java
@@ -40,8 +40,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), recipientToken);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), recipientToken);
             
             /* 
              * for the moment we will pick the first token specified in the policy
@@ -52,12 +52,12 @@
         return recipientToken;
     }
 
-    private void processAlternative(List assertions, RecipientToken parent) {
+    private void processAlternative(List<Assertion> assertions, RecipientToken parent) {
         
         Assertion assertion;
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            assertion = iterator.next();
             
             if (assertion instanceof Token) {
                 parent.setToken((Token) assertion);
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SignatureTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SignatureTokenBuilder.java
new file mode 100644
index 0000000..b81230f
--- /dev/null
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SignatureTokenBuilder.java
@@ -0,0 +1,65 @@
+/*
+ * 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.ws.secpolicy11.builders;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.AssertionBuilderFactory;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyEngine;
+import org.apache.neethi.builders.AssertionBuilder;
+import org.apache.ws.secpolicy.SP11Constants;
+import org.apache.ws.secpolicy.SPConstants;
+import org.apache.ws.secpolicy.model.SignatureToken;
+import org.apache.ws.secpolicy.model.Token;
+
+public class SignatureTokenBuilder  implements AssertionBuilder<OMElement> {
+
+    public Assertion build(OMElement element, AssertionBuilderFactory factory) throws IllegalArgumentException {
+    	SignatureToken sigToken = new SignatureToken(SPConstants.SP_V11);
+        
+        Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
+        policy = (Policy) policy.normalize(false);
+        
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), sigToken);
+            break; // since there should be only one alternative ..
+        }
+        
+        return sigToken;
+    }
+        
+    public QName[] getKnownElements() {
+        return new QName[] {SP11Constants.SIGNATURE_TOKEN};
+    }
+
+    private void processAlternative(List<Assertion> assertions, SignatureToken parent) {
+        Object token = assertions.get(0);
+        
+        if (token instanceof Token) {
+            parent.setToken((Token) token);
+        }
+    }
+}
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SignedPartsBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SignedPartsBuilder.java
index 8caa5f5..07df503 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SignedPartsBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SignedPartsBuilder.java
@@ -43,7 +43,7 @@
             processElement((OMElement) iterator.next(), signedEncryptedParts);
         }
 
-        // Presense of <sp:SignedParts/> enforces the requirement for sign body and all the header blocks
+        // Presence of <sp:SignedParts/> enforces the requirement for sign body and all the header blocks
         if(!element.getChildren().hasNext()){
             signedEncryptedParts.setBody(true);
             signedEncryptedParts.setSignAllHeaders(true);
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SupportingTokensBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SupportingTokensBuilder.java
index d37bbe8..5e9306c 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SupportingTokensBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SupportingTokensBuilder.java
@@ -62,8 +62,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
 
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), supportingToken);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), supportingToken);
             /*
              * for the moment we will say there should be only one alternative 
              */
@@ -80,11 +80,11 @@
                 SP11Constants.SIGNED_ENDORSING_SUPPORTING_TOKENS};
     }
 
-    private void processAlternative(List assertions, SupportingToken supportingToken) {
+    private void processAlternative(List<Assertion> assertions, SupportingToken supportingToken) {
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
 
-            Assertion primitive = (Assertion) iterator.next();
+            Assertion primitive = iterator.next();
             QName qname = primitive.getName();
 
             if (SP11Constants.ALGORITHM_SUITE.equals(qname)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SymmetricBindingBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SymmetricBindingBuilder.java
index 48011be..d3d2f72 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SymmetricBindingBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/SymmetricBindingBuilder.java
@@ -28,9 +28,12 @@
 import org.apache.neethi.builders.AssertionBuilder;
 import org.apache.ws.secpolicy.SP11Constants;
 import org.apache.ws.secpolicy.SPConstants;
+import org.apache.ws.secpolicy.WSSPolicyException;
 import org.apache.ws.secpolicy.model.AlgorithmSuite;
+import org.apache.ws.secpolicy.model.EncryptionToken;
 import org.apache.ws.secpolicy.model.Layout;
 import org.apache.ws.secpolicy.model.ProtectionToken;
+import org.apache.ws.secpolicy.model.SignatureToken;
 import org.apache.ws.secpolicy.model.SymmetricBinding;
 
 public class SymmetricBindingBuilder implements AssertionBuilder<OMElement> {
@@ -41,8 +44,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternatives((List) iterator.next(), symmetricBinding);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternatives(iterator.next(), symmetricBinding);
             
             /*
              * since there should be only one alternative ..
@@ -56,37 +59,47 @@
         return new QName[] {SP11Constants.SYMMETRIC_BINDING};
     }
     
-    private void processAlternatives(List assertions, SymmetricBinding symmetricBinding) {
+    private void processAlternatives(List<Assertion> assertions, SymmetricBinding symmetricBinding) {
         Assertion assertion;
         QName name;
-        
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            assertion = (Assertion) iterator.next();
-            name = assertion.getName();
-            
-            if (SP11Constants.ALGORITHM_SUITE.equals(name)) {
-                symmetricBinding.setAlgorithmSuite((AlgorithmSuite) assertion);
-                
-            } else if (SP11Constants.LAYOUT.equals(name)) {
-                symmetricBinding.setLayout((Layout) assertion);
-                
-            } else if (SP11Constants.INCLUDE_TIMESTAMP.equals(name)) {
-                symmetricBinding.setIncludeTimestamp(true);
-                
-            } else if (SP11Constants.PROTECTION_TOKEN.equals(name)) {
-                symmetricBinding.setProtectionToken((ProtectionToken) assertion);
-                
-            } else if (SPConstants.ENCRYPT_BEFORE_SIGNING.equals(name.getLocalPart())) {
-                symmetricBinding.setProtectionOrder(SPConstants.ENCRYPT_BEFORE_SIGNING);
-                
-            } else if (SPConstants.SIGN_BEFORE_ENCRYPTING.equals(name.getLocalPart())) {
-                symmetricBinding.setProtectionOrder(SPConstants.SIGN_BEFORE_ENCRYPTING);
-                
-            } else if (SPConstants.ONLY_SIGN_ENTIRE_HEADERS_AND_BODY.equals(name.getLocalPart())) {
-                symmetricBinding.setEntireHeadersAndBodySignatures(true);
-            } else if (SP11Constants.ENCRYPT_SIGNATURE.equals(name)) {
-                symmetricBinding.setSignatureProtection(true);
-            }
-        }        
+        try {
+	        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+	            assertion = iterator.next();
+	            name = assertion.getName();
+	            
+	            if (SP11Constants.ALGORITHM_SUITE.equals(name)) {
+	                symmetricBinding.setAlgorithmSuite((AlgorithmSuite) assertion);
+	                
+	            } else if (SP11Constants.LAYOUT.equals(name)) {
+	                symmetricBinding.setLayout((Layout) assertion);
+	                
+	            } else if (SP11Constants.INCLUDE_TIMESTAMP.equals(name)) {
+	                symmetricBinding.setIncludeTimestamp(true);
+	                
+	            } else if (SP11Constants.PROTECTION_TOKEN.equals(name)) {
+	                symmetricBinding.setProtectionToken((ProtectionToken) assertion);
+	                
+	            } else if (SPConstants.ENCRYPT_BEFORE_SIGNING.equals(name.getLocalPart())) {
+	                symmetricBinding.setProtectionOrder(SPConstants.ENCRYPT_BEFORE_SIGNING);
+	                
+	            } else if (SPConstants.SIGN_BEFORE_ENCRYPTING.equals(name.getLocalPart())) {
+	                symmetricBinding.setProtectionOrder(SPConstants.SIGN_BEFORE_ENCRYPTING);
+	                
+	            } else if (SPConstants.ONLY_SIGN_ENTIRE_HEADERS_AND_BODY.equals(name.getLocalPart())) {
+	                symmetricBinding.setEntireHeadersAndBodySignatures(true);
+	                
+	            } else if (SP11Constants.ENCRYPT_SIGNATURE.equals(name)) {
+	                symmetricBinding.setSignatureProtection(true);
+	                
+	            } else if (SP11Constants.ENCRYPTION_TOKEN.equals(name)) {
+	                symmetricBinding.setEncryptionToken((EncryptionToken) assertion);
+	                
+	            } else if (SP11Constants.SIGNATURE_TOKEN.equals(name)) {
+	                symmetricBinding.setSignatureToken((SignatureToken) assertion);
+	            }
+	        }
+        } catch (WSSPolicyException e) {
+        	throw new IllegalArgumentException(e);
+        }
     }
 }
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/TransportBindingBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/TransportBindingBuilder.java
index 4809b4c..a1198c8 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/TransportBindingBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/TransportBindingBuilder.java
@@ -42,8 +42,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), transportBinding, factory);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), transportBinding, factory);
             
             /*
              * since there should be only one alternative
@@ -58,11 +58,11 @@
         return new QName[] {SP11Constants.TRANSPORT_BINDING};
     }
 
-    private void processAlternative(List assertionList, TransportBinding parent, AssertionBuilderFactory factory) {
+    private void processAlternative(List<Assertion> assertionList, TransportBinding parent, AssertionBuilderFactory factory) {
         
-        for (Iterator iterator = assertionList.iterator(); iterator.hasNext(); ) {
+        for (Iterator<Assertion> iterator = assertionList.iterator(); iterator.hasNext(); ) {
             
-            Assertion primitive = (Assertion) iterator.next();
+            Assertion primitive = iterator.next();
             QName name = primitive.getName();
             
             if (name.equals(SP11Constants.ALGORITHM_SUITE)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/TransportTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/TransportTokenBuilder.java
index 1eeb524..e99eb0d 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/TransportTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/TransportTokenBuilder.java
@@ -20,7 +20,6 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
 import org.apache.neethi.Assertion;
 import org.apache.neethi.AssertionBuilderFactory;
@@ -43,8 +42,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), transportToken);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), transportToken);
             break; // since there should be only one alternative
         }
         
@@ -55,10 +54,10 @@
         return new QName[] {SP11Constants.TRANSPORT_TOKEN};
     }
     
-    private void processAlternative(List assertions, TransportToken parent) {
+    private void processAlternative(List<Assertion> assertions, TransportToken parent) {
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            Assertion primtive = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            Assertion primtive = iterator.next();
             QName qname = primtive.getName();
             
             if (SP11Constants.HTTPS_TOKEN.equals(qname)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/UsernameTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/UsernameTokenBuilder.java
index 74a70e7..d9a4016 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/UsernameTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/UsernameTokenBuilder.java
@@ -53,13 +53,13 @@
         
         OMElement policyElement = element.getFirstElement();
         
-        if (policyElement != null && !policyElement.getQName().equals(org.apache.neethi.Constants.Q_ELEM_POLICY)) {
+        if (policyElement != null && policyElement.getQName().equals(org.apache.neethi.Constants.Q_ELEM_POLICY)) {
         
             Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
             policy = (Policy) policy.normalize(false);
             
-            for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-                processAlternative((List) iterator.next(), usernameToken);
+            for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+                processAlternative(iterator.next(), usernameToken);
                 
                 /*
                  * since there should be only one alternative
@@ -75,10 +75,10 @@
         return new QName[] {SP11Constants.USERNAME_TOKEN};
     }
 
-    private void processAlternative(List assertions, UsernameToken parent) {
+    private void processAlternative(List<Assertion> assertions, UsernameToken parent) {
                 
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            Assertion assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            Assertion assertion = iterator.next();
             QName qname = assertion.getName();
             
             if (SP11Constants.WSS_USERNAME_TOKEN10.equals(qname)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/WSS10Builder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/WSS10Builder.java
index aeaf0c6..2102394 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/WSS10Builder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/WSS10Builder.java
@@ -40,8 +40,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), wss10);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), wss10);
             /*
              * since there should be only one alternative
              */
@@ -55,13 +55,13 @@
         return new QName[] {SP11Constants.WSS10};
     }
     
-    private void processAlternative(List assertions, Wss10 parent) {
+    private void processAlternative(List<Assertion> assertions, Wss10 parent) {
         
         Assertion assertion;
         QName name;
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext(); ) {
-            assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext(); ) {
+            assertion = iterator.next();
             name = assertion.getName();
             
             if (SP11Constants.MUST_SUPPORT_REF_KEY_IDENTIFIER.equals(name)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/WSS11Builder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/WSS11Builder.java
index 177ac5e..a084576 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/WSS11Builder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/WSS11Builder.java
@@ -39,8 +39,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
 
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), wss11);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), wss11);
             /*
              * since there should be only one alternative
              */
@@ -54,13 +54,13 @@
         return new QName[] {SP11Constants.WSS11};
     }
 
-    private void processAlternative(List assertions, Wss11 parent) {
+    private void processAlternative(List<Assertion> assertions, Wss11 parent) {
         
         Assertion assertion;
         QName name;
 
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            assertion = iterator.next();
             name = assertion.getName();
 
             if (SP11Constants.MUST_SUPPORT_REF_KEY_IDENTIFIER.equals(name)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/X509TokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/X509TokenBuilder.java
index c08cc21..5cd4b01 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/X509TokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy11/builders/X509TokenBuilder.java
@@ -77,9 +77,9 @@
             Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
             policy = (Policy) policy.normalize(false);
 
-            for (Iterator iterator = policy.getAlternatives(); iterator
+            for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator
                     .hasNext();) {
-                processAlternative((List) iterator.next(), x509Token);
+                processAlternative(iterator.next(), x509Token);
                 
                 /*
                  * since there should be only one alternative
@@ -105,12 +105,12 @@
         return x509Token;
     }
 
-    private void processAlternative(List assertions, X509Token parent) {
+    private void processAlternative(List<Assertion> assertions, X509Token parent) {
                 Assertion assertion;
         QName name;
 
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            assertion = iterator.next();
             name = assertion.getName();
 
             if (SP11Constants.REQUIRE_KEY_IDENTIFIRE_REFERENCE.equals(name)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/AlgorithmSuiteBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/AlgorithmSuiteBuilder.java
index 5a6b0ee..e484ed4 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/AlgorithmSuiteBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/AlgorithmSuiteBuilder.java
@@ -40,8 +40,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
                  
-        Iterator iterAlterns = policy.getAlternatives();
-        List assertions = ((List) iterAlterns.next());
+        Iterator<List<Assertion>> iterAlterns = policy.getAlternatives();
+        List<Assertion> assertions = iterAlterns.next();
         
         processAlternative(assertions, algorithmSuite);
                 
@@ -49,9 +49,9 @@
         
     }
     
-    private void processAlternative(List assertions, AlgorithmSuite algorithmSuite) {        
-        Iterator iterator = assertions.iterator();
-        Assertion assertion = ((Assertion) iterator.next());
+    private void processAlternative(List<Assertion> assertions, AlgorithmSuite algorithmSuite) {        
+        Iterator<Assertion> iterator = assertions.iterator();
+        Assertion assertion = iterator.next();
         String name = assertion.getName().getLocalPart();
         try {
             algorithmSuite.setAlgorithmSuite(name);
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/AsymmetricBindingBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/AsymmetricBindingBuilder.java
index d6cee0c..b29e061 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/AsymmetricBindingBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/AsymmetricBindingBuilder.java
@@ -43,8 +43,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), asymmetricBinding);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), asymmetricBinding);
             
             /*
              * since there should be only one alternative
@@ -55,13 +55,13 @@
         return asymmetricBinding;
     }
     
-    private void processAlternative(List assertions, AsymmetricBinding asymmetricBinding) {
+    private void processAlternative(List<Assertion> assertions, AsymmetricBinding asymmetricBinding) {
                
         Assertion assertion;
         QName name;
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            assertion = iterator.next();
             name = assertion.getName();
             
             if (SP12Constants.INITIATOR_TOKEN.equals(name)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/EncryptionTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/EncryptionTokenBuilder.java
new file mode 100644
index 0000000..5ee6e14
--- /dev/null
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/EncryptionTokenBuilder.java
@@ -0,0 +1,65 @@
+/*
+ * 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.ws.secpolicy12.builders;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.AssertionBuilderFactory;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyEngine;
+import org.apache.neethi.builders.AssertionBuilder;
+import org.apache.ws.secpolicy.SP12Constants;
+import org.apache.ws.secpolicy.SPConstants;
+import org.apache.ws.secpolicy.model.EncryptionToken;
+import org.apache.ws.secpolicy.model.Token;
+
+public class EncryptionTokenBuilder  implements AssertionBuilder<OMElement> {
+
+    public Assertion build(OMElement element, AssertionBuilderFactory factory) throws IllegalArgumentException {
+        EncryptionToken encrToken = new EncryptionToken(SPConstants.SP_V12);
+        
+        Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
+        policy = (Policy) policy.normalize(false);
+        
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), encrToken);
+            break; // since there should be only one alternative ..
+        }
+        
+        return encrToken;
+    }
+        
+    public QName[] getKnownElements() {
+        return new QName[] {SP12Constants.ENCRYPTION_TOKEN};
+    }
+
+    private void processAlternative(List<Assertion> assertions, EncryptionToken parent) {
+        Object token = assertions.get(0);
+        
+        if (token instanceof Token) {
+            parent.setToken((Token) token);
+        }
+    }
+}
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/HttpsTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/HttpsTokenBuilder.java
index c5faa09..b953ac0 100644
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/HttpsTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/HttpsTokenBuilder.java
@@ -54,8 +54,8 @@
             Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
             policy = (Policy) policy.normalize(false);
 
-            for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-                processAlternative((List) iterator.next(), httpsToken);
+            for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+                processAlternative(iterator.next(), httpsToken);
                 break; // since there should be only one alternative
             }
         }
@@ -82,10 +82,10 @@
      * @param assertions the list of assertions to be searched through.
      * @param parent the https token, that is to be populated with retrieved data.
      */
-    private void processAlternative(List assertions, HttpsToken parent) {
+    private void processAlternative(List<Assertion> assertions, HttpsToken parent) {
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            Assertion primtive = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            Assertion primtive = iterator.next();
             QName qname = primtive.getName();
             
             if (qname != null) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/InitiatorTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/InitiatorTokenBuilder.java
index dd4aba8..c9f3aa8 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/InitiatorTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/InitiatorTokenBuilder.java
@@ -40,19 +40,19 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false); 
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), initiatorToken);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), initiatorToken);
             break; // TODO process all the token that must be set ..
         }
         
         return initiatorToken;
     }
     
-    private void processAlternative(List assertions, InitiatorToken parent) {
+    private void processAlternative(List<Assertion> assertions, InitiatorToken parent) {
         
         Object token;
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
             token = iterator.next();
             
             if (token instanceof Token) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/IssuedTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/IssuedTokenBuilder.java
index f0fb936..ad06422 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/IssuedTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/IssuedTokenBuilder.java
@@ -84,9 +84,9 @@
             Policy policy = PolicyEngine.getPolicy(policyElement);
             policy = (Policy) policy.normalize(false);
 
-            for (Iterator iterator = policy.getAlternatives(); iterator
+            for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator
                     .hasNext();) {
-                processAlternative((List) iterator.next(), issuedToken);
+                processAlternative(iterator.next(), issuedToken);
                 break; // since there should be only one alternative ..
             }
         }
@@ -98,12 +98,12 @@
         return new QName[] { SP12Constants.ISSUED_TOKEN };
     }
 
-    private void processAlternative(List assertions, IssuedToken parent) {
+    private void processAlternative(List<Assertion> assertions, IssuedToken parent) {
         Assertion assertion;
         QName name;
 
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            assertion = iterator.next();
             name = assertion.getName();
 
             if (SP12Constants.REQUIRE_DERIVED_KEYS.equals(name)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/KerberosTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/KerberosTokenBuilder.java
new file mode 100644
index 0000000..59d2c66
--- /dev/null
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/KerberosTokenBuilder.java
@@ -0,0 +1,84 @@
+/*
+ * 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.ws.secpolicy12.builders;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.AssertionBuilderFactory;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyEngine;
+import org.apache.neethi.builders.AssertionBuilder;
+import org.apache.ws.secpolicy.SP12Constants;
+import org.apache.ws.secpolicy.SPConstants;
+import org.apache.ws.secpolicy.model.KerberosToken;
+
+/**
+ * Builder for {@link KerberosToken} assertion (WS Security Policy version 1.2)
+ */
+public class KerberosTokenBuilder implements AssertionBuilder<OMElement> {
+    public Assertion build(OMElement element, AssertionBuilderFactory arg1) 
+            throws IllegalArgumentException {
+        KerberosToken kerberosToken = new KerberosToken(SPConstants.SP_V12);
+
+        OMElement policyElement = element.getFirstElement();
+
+        // Process token inclusion
+        OMAttribute includeAttr = element.getAttribute(SP12Constants.INCLUDE_TOKEN);
+
+        if (includeAttr != null) {
+            int inclusion = SP12Constants.getInclusionFromAttributeValue(
+                                  includeAttr.getAttributeValue());
+            kerberosToken.setInclusion(inclusion);
+        }
+
+        if (policyElement != null) {
+            Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
+            policy = policy.normalize(false);
+            for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+                processAlternative(iterator.next(), kerberosToken);
+                 // there should be only one alternative
+                break;
+            }
+        }
+        return kerberosToken;
+    }
+
+    private void processAlternative(List<Assertion> assertions, KerberosToken parent) {
+        for (Assertion assertion : assertions) {
+            QName name = assertion.getName();
+            if (SP12Constants.REQUIRE_KERBEROS_V5_TOKEN_11.equals(name)) {
+                parent.setRequiresKerberosV5Token(true);
+            } else if (SP12Constants.REQUIRE_KERBEROS_GSS_V5_TOKEN_11.equals(name)) {
+                parent.setRequiresGssKerberosV5Token(true);
+            } else if (SP12Constants.REQUIRE_KEY_IDENTIFIRE_REFERENCE.equals(name)) {
+                parent.setRequiresKeyIdentifierReference(true);
+            }
+        }
+    }
+
+    public QName[] getKnownElements() {
+        return new QName[] { SP12Constants.KERBEROS_TOKEN };
+    }
+}
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/LayoutBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/LayoutBuilder.java
index f599df2..a717b1a 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/LayoutBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/LayoutBuilder.java
@@ -38,8 +38,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext(); ) {
-            processAlternative((List) iterator.next(), layout);         
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext(); ) {
+            processAlternative(iterator.next(), layout);         
             break; // there should be only one alternative
         }
                         
@@ -50,10 +50,10 @@
         return new QName[] {SP12Constants.LAYOUT};
     }
 
-    public void processAlternative(List assertions, Layout parent) {
+    public void processAlternative(List<Assertion> assertions, Layout parent) {
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            Assertion assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            Assertion assertion = iterator.next();
             QName qname = assertion.getName();
             
             if (SP12Constants.STRICT.equals(qname)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/ProtectionTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/ProtectionTokenBuilder.java
index 15d7bf4..860a81a 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/ProtectionTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/ProtectionTokenBuilder.java
@@ -39,8 +39,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), protectionToken);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), protectionToken);
             break; // since there should be only one alternative ..
         }
         
@@ -51,7 +51,7 @@
         return new QName[] {SP12Constants.PROTECTION_TOKEN};
     }
 
-    private void processAlternative(List assertions, ProtectionToken parent) {
+    private void processAlternative(List<Assertion> assertions, ProtectionToken parent) {
         Object token = assertions.get(0);
         
         if (token instanceof Token) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/RecipientTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/RecipientTokenBuilder.java
index 0e36654..b15692e 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/RecipientTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/RecipientTokenBuilder.java
@@ -40,8 +40,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), recipientToken);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), recipientToken);
             
             /* 
              * for the moment we will pick the first token specified in the policy
@@ -52,11 +52,11 @@
         return recipientToken;
     }
 
-    private void processAlternative(List assertions, RecipientToken parent) {
+    private void processAlternative(List<Assertion> assertions, RecipientToken parent) {
         
         Assertion assertion;
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
             assertion = (Assertion) iterator.next();
             
             if (assertion instanceof Token) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SignatureTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SignatureTokenBuilder.java
new file mode 100644
index 0000000..123e4e5
--- /dev/null
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SignatureTokenBuilder.java
@@ -0,0 +1,65 @@
+/*
+ * 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.ws.secpolicy12.builders;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.AssertionBuilderFactory;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyEngine;
+import org.apache.neethi.builders.AssertionBuilder;
+import org.apache.ws.secpolicy.SP12Constants;
+import org.apache.ws.secpolicy.SPConstants;
+import org.apache.ws.secpolicy.model.SignatureToken;
+import org.apache.ws.secpolicy.model.Token;
+
+public class SignatureTokenBuilder  implements AssertionBuilder<OMElement> {
+
+    public Assertion build(OMElement element, AssertionBuilderFactory factory) throws IllegalArgumentException {
+    	SignatureToken sigToken = new SignatureToken(SPConstants.SP_V12);
+        
+        Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
+        policy = (Policy) policy.normalize(false);
+        
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), sigToken);
+            break; // since there should be only one alternative ..
+        }
+        
+        return sigToken;
+    }
+        
+    public QName[] getKnownElements() {
+        return new QName[] {SP12Constants.SIGNATURE_TOKEN};
+    }
+
+    private void processAlternative(List<Assertion> assertions, SignatureToken parent) {
+        Object token = assertions.get(0);
+        
+        if (token instanceof Token) {
+            parent.setToken((Token) token);
+        }
+    }
+}
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SignedPartsBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SignedPartsBuilder.java
index 7e796a4..d008781 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SignedPartsBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SignedPartsBuilder.java
@@ -45,7 +45,7 @@
 					.booleanValue());
 		}
 
-        //presense of <sp:SignedParts/> enforces the requirement for sign body and all the header blocks
+        //Presence of <sp:SignedParts/> enforces the requirement for sign body and all the header blocks
         if(!element.getChildren().hasNext()){
             signedEncryptedParts.setBody(true);
             signedEncryptedParts.setSignAllHeaders(true);
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SupportingTokensBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SupportingTokensBuilder.java
index 8aab7eb..a01dd65 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SupportingTokensBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SupportingTokensBuilder.java
@@ -78,8 +78,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
 
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), supportingToken);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), supportingToken);
             /*
              * for the moment we will say there should be only one alternative 
              */
@@ -101,11 +101,11 @@
                 };
     }
 
-    private void processAlternative(List assertions, SupportingToken supportingToken) {
+    private void processAlternative(List<Assertion> assertions, SupportingToken supportingToken) {
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
 
-            Assertion primitive = (Assertion) iterator.next();
+            Assertion primitive = iterator.next();
             QName qname = primitive.getName();
 
             if (SP12Constants.ALGORITHM_SUITE.equals(qname)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SymmetricBindingBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SymmetricBindingBuilder.java
index ec9bfbd..fc62786 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SymmetricBindingBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/SymmetricBindingBuilder.java
@@ -28,9 +28,12 @@
 import org.apache.neethi.builders.AssertionBuilder;
 import org.apache.ws.secpolicy.SPConstants;
 import org.apache.ws.secpolicy.SP12Constants;
+import org.apache.ws.secpolicy.WSSPolicyException;
 import org.apache.ws.secpolicy.model.AlgorithmSuite;
+import org.apache.ws.secpolicy.model.EncryptionToken;
 import org.apache.ws.secpolicy.model.Layout;
 import org.apache.ws.secpolicy.model.ProtectionToken;
+import org.apache.ws.secpolicy.model.SignatureToken;
 import org.apache.ws.secpolicy.model.SymmetricBinding;
 
 public class SymmetricBindingBuilder implements AssertionBuilder<OMElement> {
@@ -41,8 +44,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternatives((List) iterator.next(), symmetricBinding);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternatives(iterator.next(), symmetricBinding);
             
             /*
              * since there should be only one alternative ..
@@ -56,37 +59,47 @@
         return new QName[] {SP12Constants.SYMMETRIC_BINDING};
     }
     
-    private void processAlternatives(List assertions, SymmetricBinding symmetricBinding) {
+    private void processAlternatives(List<Assertion> assertions, SymmetricBinding symmetricBinding) {
         Assertion assertion;
         QName name;
-        
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            assertion = (Assertion) iterator.next();
-            name = assertion.getName();
-            
-            if (SP12Constants.ALGORITHM_SUITE.equals(name)) {
-                symmetricBinding.setAlgorithmSuite((AlgorithmSuite) assertion);
-                
-            } else if (SP12Constants.LAYOUT.equals(name)) {
-                symmetricBinding.setLayout((Layout) assertion);
-                
-            } else if (SP12Constants.INCLUDE_TIMESTAMP.equals(name)) {
-                symmetricBinding.setIncludeTimestamp(true);
-                
-            } else if (SP12Constants.PROTECTION_TOKEN.equals(name)) {
-                symmetricBinding.setProtectionToken((ProtectionToken) assertion);
-                
-            } else if (SP12Constants.ENCRYPT_BEFORE_SIGNING.equals(name)) {
-                symmetricBinding.setProtectionOrder(SPConstants.ENCRYPT_BEFORE_SIGNING);
-                
-            } else if (SP12Constants.SIGN_BEFORE_ENCRYPTING.equals(name)) {
-                symmetricBinding.setProtectionOrder(SPConstants.SIGN_BEFORE_ENCRYPTING);
-                
-            } else if (SP12Constants.ONLY_SIGN_ENTIRE_HEADERS_AND_BODY.equals(name)) {
-                symmetricBinding.setEntireHeadersAndBodySignatures(true);
-            } else if (SP12Constants.ENCRYPT_SIGNATURE.equals(name)) {
-                symmetricBinding.setSignatureProtection(true);
-            }
-        }        
+        try {
+	        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+	            assertion = iterator.next();
+	            name = assertion.getName();
+	            
+	            if (SP12Constants.ALGORITHM_SUITE.equals(name)) {
+	                symmetricBinding.setAlgorithmSuite((AlgorithmSuite) assertion);
+	                
+	            } else if (SP12Constants.LAYOUT.equals(name)) {
+	                symmetricBinding.setLayout((Layout) assertion);
+	                
+	            } else if (SP12Constants.INCLUDE_TIMESTAMP.equals(name)) {
+	                symmetricBinding.setIncludeTimestamp(true);
+	                
+	            } else if (SP12Constants.PROTECTION_TOKEN.equals(name)) {
+	                symmetricBinding.setProtectionToken((ProtectionToken) assertion);
+	                
+	            } else if (SP12Constants.ENCRYPT_BEFORE_SIGNING.equals(name)) {
+	                symmetricBinding.setProtectionOrder(SPConstants.ENCRYPT_BEFORE_SIGNING);
+	                
+	            } else if (SP12Constants.SIGN_BEFORE_ENCRYPTING.equals(name)) {
+	                symmetricBinding.setProtectionOrder(SPConstants.SIGN_BEFORE_ENCRYPTING);
+	                
+	            } else if (SP12Constants.ONLY_SIGN_ENTIRE_HEADERS_AND_BODY.equals(name)) {
+	                symmetricBinding.setEntireHeadersAndBodySignatures(true);
+	                
+	            } else if (SP12Constants.ENCRYPT_SIGNATURE.equals(name)) {
+	                symmetricBinding.setSignatureProtection(true);
+	                
+	            } else if (SP12Constants.ENCRYPTION_TOKEN.equals(name)) {
+	                symmetricBinding.setEncryptionToken((EncryptionToken) assertion);
+	                
+	            } else if (SP12Constants.SIGNATURE_TOKEN.equals(name)) {
+	                symmetricBinding.setSignatureToken((SignatureToken) assertion);
+	            } 
+	        }
+        } catch (WSSPolicyException e) {
+        	throw new IllegalArgumentException(e);
+        }
     }
 }
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/TransportBindingBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/TransportBindingBuilder.java
index 8b8a542..e9bb2ab 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/TransportBindingBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/TransportBindingBuilder.java
@@ -42,8 +42,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), transportBinding, factory);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), transportBinding, factory);
             
             /*
              * since there should be only one alternative
@@ -58,11 +58,11 @@
         return new QName[] {SP12Constants.TRANSPORT_BINDING};
     }
 
-    private void processAlternative(List assertionList, TransportBinding parent, AssertionBuilderFactory factory) {
+    private void processAlternative(List<Assertion> assertionList, TransportBinding parent, AssertionBuilderFactory factory) {
         
-        for (Iterator iterator = assertionList.iterator(); iterator.hasNext(); ) {
+        for (Iterator<Assertion> iterator = assertionList.iterator(); iterator.hasNext(); ) {
             
-            Assertion primitive = (Assertion) iterator.next();
+            Assertion primitive = iterator.next();
             QName name = primitive.getName();
             
             if (name.equals(SP12Constants.ALGORITHM_SUITE)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/TransportTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/TransportTokenBuilder.java
index f232061..4363f76 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/TransportTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/TransportTokenBuilder.java
@@ -37,8 +37,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
 
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), transportToken);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), transportToken);
             break; // since there should be only one alternative
         }
 
@@ -49,8 +49,8 @@
         return new QName[] {SP12Constants.TRANSPORT_TOKEN};
     }
 
-    private void processAlternative(List assertions, TransportToken parent) {
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
+    private void processAlternative(List<Assertion> assertions, TransportToken parent) {
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
             Assertion primtive = (Assertion) iterator.next();
             QName qname = primtive.getName();
                 if(SP12Constants.HTTPS_TOKEN.equals(qname)){
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/UsernameTokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/UsernameTokenBuilder.java
index f3d901b..4924ddf 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/UsernameTokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/UsernameTokenBuilder.java
@@ -58,8 +58,8 @@
             Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
             policy = (Policy) policy.normalize(false);
             
-            for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-                processAlternative((List) iterator.next(), usernameToken);
+            for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+                processAlternative(iterator.next(), usernameToken);
                 
                 /*
                  * since there should be only one alternative
@@ -75,9 +75,9 @@
         return new QName[] {SP12Constants.USERNAME_TOKEN};
     }
 
-    private void processAlternative(List assertions, UsernameToken parent) {
+    private void processAlternative(List<Assertion> assertions, UsernameToken parent) {
              
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
             Assertion assertion = (Assertion) iterator.next();
             QName qname = assertion.getName();
             
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/WSS10Builder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/WSS10Builder.java
index f993b51..b744eda 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/WSS10Builder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/WSS10Builder.java
@@ -40,8 +40,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
         
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), wss10);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), wss10);
             /*
              * since there should be only one alternative
              */
@@ -55,13 +55,13 @@
         return new QName[] {SP12Constants.WSS10};
     }
     
-    private void processAlternative(List assertions, Wss10 parent) {
+    private void processAlternative(List<Assertion> assertions, Wss10 parent) {
         
         Assertion assertion;
         QName name;
         
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext(); ) {
-            assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext(); ) {
+            assertion = iterator.next();
             name = assertion.getName();
             
             if (SP12Constants.MUST_SUPPORT_REF_KEY_IDENTIFIER.equals(name)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/WSS11Builder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/WSS11Builder.java
index 079080c..2accec0 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/WSS11Builder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/WSS11Builder.java
@@ -39,8 +39,8 @@
         Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
         policy = (Policy) policy.normalize(false);
 
-        for (Iterator iterator = policy.getAlternatives(); iterator.hasNext();) {
-            processAlternative((List) iterator.next(), wss11);
+        for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator.hasNext();) {
+            processAlternative(iterator.next(), wss11);
             /*
              * since there should be only one alternative
              */
@@ -54,13 +54,13 @@
         return new QName[] {SP12Constants.WSS11};
     }
 
-    private void processAlternative(List assertions, Wss11 parent) {
+    private void processAlternative(List<Assertion> assertions, Wss11 parent) {
         
         Assertion assertion;
         QName name;
 
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            assertion = iterator.next();
             name = assertion.getName();
 
             if (SP12Constants.MUST_SUPPORT_REF_KEY_IDENTIFIER.equals(name)) {
diff --git a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/X509TokenBuilder.java b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/X509TokenBuilder.java
index fba587c..9a418c3 100755
--- a/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/X509TokenBuilder.java
+++ b/modules/rampart-policy/src/main/java/org/apache/ws/secpolicy12/builders/X509TokenBuilder.java
@@ -79,9 +79,9 @@
             Policy policy = PolicyEngine.getPolicy(element.getFirstElement());
             policy = (Policy) policy.normalize(false);
 
-            for (Iterator iterator = policy.getAlternatives(); iterator
+            for (Iterator<List<Assertion>> iterator = policy.getAlternatives(); iterator
                     .hasNext();) {
-                processAlternative((List) iterator.next(), x509Token);
+                processAlternative(iterator.next(), x509Token);
                 
                 /*
                  * since there should be only one alternative
@@ -107,12 +107,12 @@
         return x509Token;
     }
 
-    private void processAlternative(List assertions, X509Token parent) {
+    private void processAlternative(List<Assertion> assertions, X509Token parent) {
                 Assertion assertion;
         QName name;
 
-        for (Iterator iterator = assertions.iterator(); iterator.hasNext();) {
-            assertion = (Assertion) iterator.next();
+        for (Iterator<Assertion> iterator = assertions.iterator(); iterator.hasNext();) {
+            assertion = iterator.next();
             name = assertion.getName();
 
             if (SP12Constants.REQUIRE_KEY_IDENTIFIRE_REFERENCE.equals(name)) {
diff --git a/modules/rampart-policy/src/main/java/META-INF/services/org.apache.neethi.builders.AssertionBuilder b/modules/rampart-policy/src/main/resources/META-INF/services/org.apache.neethi.builders.AssertionBuilder
similarity index 88%
rename from modules/rampart-policy/src/main/java/META-INF/services/org.apache.neethi.builders.AssertionBuilder
rename to modules/rampart-policy/src/main/resources/META-INF/services/org.apache.neethi.builders.AssertionBuilder
index a384ca6..4201a92 100644
--- a/modules/rampart-policy/src/main/java/META-INF/services/org.apache.neethi.builders.AssertionBuilder
+++ b/modules/rampart-policy/src/main/resources/META-INF/services/org.apache.neethi.builders.AssertionBuilder
@@ -21,6 +21,9 @@
 org.apache.ws.secpolicy11.builders.SymmetricBindingBuilder
 org.apache.ws.secpolicy11.builders.IssuedTokenBuilder
 org.apache.ws.secpolicy11.builders.RequiredElementsBuilder
+org.apache.ws.secpolicy11.builders.SignatureTokenBuilder
+org.apache.ws.secpolicy11.builders.EncryptionTokenBuilder
+org.apache.ws.secpolicy11.builders.KerberosTokenBuilder
 org.apache.ws.secpolicy12.builders.AlgorithmSuiteBuilder
 org.apache.ws.secpolicy12.builders.AsymmetricBindingBuilder
 org.apache.ws.secpolicy12.builders.EncryptedElementsBuilder
@@ -45,4 +48,7 @@
 org.apache.ws.secpolicy12.builders.IssuedTokenBuilder
 org.apache.ws.secpolicy12.builders.RequiredElementsBuilder
 org.apache.ws.secpolicy12.builders.ContentEncryptedElementsBuilder
-org.apache.ws.secpolicy12.builders.HttpsTokenBuilder
\ No newline at end of file
+org.apache.ws.secpolicy12.builders.HttpsTokenBuilder
+org.apache.ws.secpolicy12.builders.SignatureTokenBuilder
+org.apache.ws.secpolicy12.builders.EncryptionTokenBuilder
+org.apache.ws.secpolicy12.builders.KerberosTokenBuilder
\ No newline at end of file
diff --git a/modules/rampart-policy/src/test/java/org/apache/ws/secpolicy/KerberosPolicyTest.java b/modules/rampart-policy/src/test/java/org/apache/ws/secpolicy/KerberosPolicyTest.java
new file mode 100644
index 0000000..26c2c92
--- /dev/null
+++ b/modules/rampart-policy/src/test/java/org/apache/ws/secpolicy/KerberosPolicyTest.java
@@ -0,0 +1,212 @@
+/*
+ * 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.ws.secpolicy;
+
+import static com.google.common.truth.Truth.assertAbout;
+import static org.apache.axiom.truth.xml.XMLTruth.xml;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import junit.framework.TestCase;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
+import org.apache.neethi.All;
+import org.apache.neethi.Assertion;
+import org.apache.neethi.ExactlyOne;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyComponent;
+import org.apache.neethi.PolicyEngine;
+import org.apache.ws.secpolicy.model.KerberosToken;
+import org.apache.ws.secpolicy.model.SupportingToken;
+import org.apache.ws.secpolicy.model.Token;
+
+/**
+ * Tests building and serialization of {@link KerberosToken} assertion.
+ */
+public class KerberosPolicyTest extends TestCase {
+    public void testKerberosGssKeyRefPolicy11() throws Exception {
+        System.out.println(getName());
+        File policyFile = new File("src/test/resources/policy/kerberos-gss-keyref-11.xml");
+        Policy policy = loadPolicy(policyFile);
+        KerberosToken kerberosToken = getKerberosEndorsingSupportingToken(policyFile, policy, SP11Constants.SP_NS);
+        assertKerberosTokenMatches(kerberosToken, SP11Constants.KERBEROS_TOKEN, true, true, false);
+        assertPolicyEquals(policyFile, policy);
+    }
+
+    public void testKerberosGssPolicy11() throws Exception {
+        File policyFile = new File("src/test/resources/policy/kerberos-gss-11.xml");
+        Policy policy = loadPolicy(policyFile);
+        KerberosToken kerberosToken = getKerberosEndorsingSupportingToken(policyFile, policy, SP11Constants.SP_NS);
+        assertKerberosTokenMatches(kerberosToken, SP11Constants.KERBEROS_TOKEN, false, true, false);
+        assertPolicyEquals(policyFile, policy);
+    }
+    
+    public void testKerberosKeyRefPolicy11() throws Exception {
+        File policyFile = new File("src/test/resources/policy/kerberos-keyref-11.xml");
+        Policy policy = loadPolicy(policyFile);
+        KerberosToken kerberosToken = getKerberosEndorsingSupportingToken(policyFile, policy, SP11Constants.SP_NS);
+        assertKerberosTokenMatches(kerberosToken, SP11Constants.KERBEROS_TOKEN, true, false, true);
+        assertPolicyEquals(policyFile, policy);
+    }
+    
+    public void testKerberosPolicy11() throws Exception {
+        File policyFile = new File("src/test/resources/policy/kerberos-11.xml");
+        Policy policy = loadPolicy(policyFile);
+        KerberosToken kerberosToken = getKerberosEndorsingSupportingToken(policyFile, policy, SP11Constants.SP_NS);
+        assertKerberosTokenMatches(kerberosToken, SP11Constants.KERBEROS_TOKEN, false, false, true);
+        assertPolicyEquals(policyFile, policy);
+    }
+    
+    public void testKerberosGssKeyRefPolicy12() throws Exception {
+        File policyFile = new File("src/test/resources/policy/kerberos-gss-keyref-12.xml");
+        Policy policy = loadPolicy(policyFile);
+        KerberosToken kerberosToken = getKerberosEndorsingSupportingToken(policyFile, policy, SP12Constants.SP_NS);
+        assertKerberosTokenMatches(kerberosToken, SP12Constants.KERBEROS_TOKEN, true, true, false);
+        assertPolicyEquals(policyFile, policy);
+    }
+
+    public void testKerberosGssPolicy12() throws Exception {
+        File policyFile = new File("src/test/resources/policy/kerberos-gss-12.xml");
+        Policy policy = loadPolicy(policyFile);
+        KerberosToken kerberosToken = getKerberosEndorsingSupportingToken(policyFile, policy, SP12Constants.SP_NS);
+        assertKerberosTokenMatches(kerberosToken, SP12Constants.KERBEROS_TOKEN, false, true, false);
+        assertPolicyEquals(policyFile, policy);
+    }
+    
+    public void testKerberosKeyRefPolicy12() throws Exception {
+        File policyFile = new File("src/test/resources/policy/kerberos-keyref-12.xml");
+        Policy policy = loadPolicy(policyFile);
+        KerberosToken kerberosToken = getKerberosEndorsingSupportingToken(policyFile, policy, SP12Constants.SP_NS);
+        assertKerberosTokenMatches(kerberosToken, SP12Constants.KERBEROS_TOKEN, true, false, true);
+        assertPolicyEquals(policyFile, policy);
+    }
+    
+    public void testKerberosPolicy12() throws Exception {
+        File policyFile = new File("src/test/resources/policy/kerberos-12.xml");
+        Policy policy = loadPolicy(policyFile);
+        KerberosToken kerberosToken = getKerberosEndorsingSupportingToken(policyFile, policy, SP12Constants.SP_NS);
+        assertKerberosTokenMatches(kerberosToken, SP12Constants.KERBEROS_TOKEN, false, false, true);
+        assertPolicyEquals(policyFile, policy);
+    }
+    
+    private KerberosToken getKerberosEndorsingSupportingToken(File policyFile, Policy policy, String namespace) throws XMLStreamException {
+        ExactlyOne exactlyOne = (ExactlyOne) policy.getAssertions().get(0);
+        All all = (All) exactlyOne.getFirstPolicyComponent();
+        List<PolicyComponent> assertions = all.getAssertions();
+        
+        QName endSuppTokens = new QName(namespace, SPConstants.ENDORSING_SUPPORTING_TOKENS);
+        SupportingToken endorsingSupportingTokens = (SupportingToken) findAssertion(assertions, endSuppTokens);
+        assertNotNull(String.format("Cannot find any '%s' assertion in policy: %s", endSuppTokens, printPolicy(policy)), endorsingSupportingTokens);
+        
+        ArrayList<Token> supportingTokens = endorsingSupportingTokens.getTokens();
+        assertTrue(String.format("Cannot find any supporting tokens in policy: %s", printPolicy(policy)), supportingTokens.size() > 0);
+
+        KerberosToken kerberosToken = findKerberosToken(supportingTokens);
+        assertNotNull(String.format("Cannot find any Kerberos token in policy: %s", printPolicy(policy)), kerberosToken);
+        
+        return kerberosToken;
+    }
+    
+    private void assertKerberosTokenMatches(KerberosToken kerberosToken, QName expectedName, boolean requiresKeyIdentifierRef,
+        boolean requiresGssKerberosV5, boolean requiresKerberosV5) {
+        assertTrue(String.format("Expected KerberosToken '%s' but got: %s", expectedName, kerberosToken.getName()),
+            expectedName.equals(kerberosToken.getName()));
+        assertEquals("Expected Kerberos token that must be included once.", SPConstants.INCLUDE_TOKEN_ONCE, kerberosToken.getInclusion());
+        assertEquals("Expected KerberosToken that " + (requiresKeyIdentifierRef ? "requires" : "does NOT require") + " key identifier reference",
+            requiresKeyIdentifierRef, kerberosToken.isRequiresKeyIdentifierReference());
+        assertEquals("Expected KerberosToken that " + (requiresGssKerberosV5 ? "requires" : "does NOT require") + " GSS-API KerberosV5 mechanism token", 
+            requiresGssKerberosV5, kerberosToken.isRequiresGssKerberosV5Token());
+        assertEquals("Expected KerberosToken that " + (requiresGssKerberosV5 ? "requires" : "does NOT require") + " KerberosV5 mechanism token", 
+            requiresKerberosV5, kerberosToken.isRequiresKerberosV5Token());
+    }
+    
+    private void assertPolicyEquals(File expected, Policy actual) throws Exception {
+        StringWriter writer = new StringWriter();
+        serializePolicy(actual, writer);
+        assertAbout(xml())
+                .that(writer.toString())
+                .ignoringWhitespace()
+                .ignoringNamespaceDeclarations()
+                .hasSameContentAs(expected);
+    }
+    
+    private Policy loadPolicy(File file) throws IOException {
+        FileReader reader = null;
+        try {
+            reader = new FileReader(file);
+            OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(reader);
+            OMElement policyElement = builder.getDocumentElement();
+            return PolicyEngine.getPolicy(policyElement);
+        }
+        finally {
+            if (reader != null) {
+                reader.close();
+            }
+        }
+    }
+
+    private String serializePolicy(Policy policy, Writer writer) throws XMLStreamException {
+        StringWriter stringWriter = new StringWriter();
+        XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(writer);
+        policy.serialize(xmlWriter);
+        xmlWriter.flush();
+        
+        return stringWriter.toString();
+    }
+    
+    private String printPolicy(Policy policy) throws XMLStreamException {
+        StringWriter writer = new StringWriter();
+        serializePolicy(policy, writer);
+        
+        return writer.toString();
+    }
+    
+    private Assertion findAssertion(List<PolicyComponent> policyComponents, QName name) {
+        for (PolicyComponent policyComponent : policyComponents) {
+            if (policyComponent instanceof Assertion && ((Assertion)policyComponent).getName().equals(name)) {
+                return (Assertion)policyComponent;
+            }
+        }
+        
+        return null;
+    }
+    
+    private KerberosToken findKerberosToken(ArrayList<Token> tokens) {
+        for (Token token : tokens) {
+            if (token instanceof KerberosToken) {
+                return (KerberosToken)token;
+            }
+        }
+        
+        return null;
+    }
+}
diff --git a/modules/rampart-policy/src/test/resources/policy/kerberos-11.xml b/modules/rampart-policy/src/test/resources/policy/kerberos-11.xml
new file mode 100644
index 0000000..2ccdde0
--- /dev/null
+++ b/modules/rampart-policy/src/test/resources/policy/kerberos-11.xml
@@ -0,0 +1,16 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
+    xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:EndorsingSupportingTokens>
+                <wsp:Policy>
+                    <sp:KerberosToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once">
+                        <wsp:Policy>
+                            <sp:WssKerberosV5ApReqToken11 />
+                        </wsp:Policy>
+                    </sp:KerberosToken>
+                </wsp:Policy>
+            </sp:EndorsingSupportingTokens>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
\ No newline at end of file
diff --git a/modules/rampart-policy/src/test/resources/policy/kerberos-12.xml b/modules/rampart-policy/src/test/resources/policy/kerberos-12.xml
new file mode 100644
index 0000000..a272956
--- /dev/null
+++ b/modules/rampart-policy/src/test/resources/policy/kerberos-12.xml
@@ -0,0 +1,16 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
+    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:EndorsingSupportingTokens>
+                <wsp:Policy>
+                    <sp:KerberosToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Once">
+                        <wsp:Policy>
+                            <sp:WssKerberosV5ApReqToken11 />
+                        </wsp:Policy>
+                    </sp:KerberosToken>
+                </wsp:Policy>
+            </sp:EndorsingSupportingTokens>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
\ No newline at end of file
diff --git a/modules/rampart-policy/src/test/resources/policy/kerberos-gss-11.xml b/modules/rampart-policy/src/test/resources/policy/kerberos-gss-11.xml
new file mode 100644
index 0000000..c947931
--- /dev/null
+++ b/modules/rampart-policy/src/test/resources/policy/kerberos-gss-11.xml
@@ -0,0 +1,16 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
+    xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:EndorsingSupportingTokens>
+                <wsp:Policy>
+                    <sp:KerberosToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once">
+                        <wsp:Policy>
+                            <sp:WssGssKerberosV5ApReqToken11 />
+                        </wsp:Policy>
+                    </sp:KerberosToken>
+                </wsp:Policy>
+            </sp:EndorsingSupportingTokens>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
\ No newline at end of file
diff --git a/modules/rampart-policy/src/test/resources/policy/kerberos-gss-12.xml b/modules/rampart-policy/src/test/resources/policy/kerberos-gss-12.xml
new file mode 100644
index 0000000..9998a48
--- /dev/null
+++ b/modules/rampart-policy/src/test/resources/policy/kerberos-gss-12.xml
@@ -0,0 +1,16 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
+    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:EndorsingSupportingTokens>
+                <wsp:Policy>
+                    <sp:KerberosToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Once">
+                        <wsp:Policy>
+                            <sp:WssGssKerberosV5ApReqToken11 />
+                        </wsp:Policy>
+                    </sp:KerberosToken>
+                </wsp:Policy>
+            </sp:EndorsingSupportingTokens>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
\ No newline at end of file
diff --git a/modules/rampart-policy/src/test/resources/policy/kerberos-gss-keyref-11.xml b/modules/rampart-policy/src/test/resources/policy/kerberos-gss-keyref-11.xml
new file mode 100644
index 0000000..9b70e3f
--- /dev/null
+++ b/modules/rampart-policy/src/test/resources/policy/kerberos-gss-keyref-11.xml
@@ -0,0 +1,18 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
+    xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:EndorsingSupportingTokens>
+                <wsp:Policy>
+                    <sp:KerberosToken
+                        sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once">
+                        <wsp:Policy>
+                            <sp:WssGssKerberosV5ApReqToken11 />
+                            <sp:RequireKeyIdentifierReference />
+                        </wsp:Policy>
+                    </sp:KerberosToken>
+                </wsp:Policy>
+            </sp:EndorsingSupportingTokens>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
diff --git a/modules/rampart-policy/src/test/resources/policy/kerberos-gss-keyref-12.xml b/modules/rampart-policy/src/test/resources/policy/kerberos-gss-keyref-12.xml
new file mode 100644
index 0000000..a8474ae
--- /dev/null
+++ b/modules/rampart-policy/src/test/resources/policy/kerberos-gss-keyref-12.xml
@@ -0,0 +1,17 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
+    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:EndorsingSupportingTokens>
+                <wsp:Policy>
+                    <sp:KerberosToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Once">
+                        <wsp:Policy>
+                            <sp:WssGssKerberosV5ApReqToken11 />
+                            <sp:RequireKeyIdentifierReference />
+                        </wsp:Policy>
+                    </sp:KerberosToken>
+                </wsp:Policy>
+            </sp:EndorsingSupportingTokens>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
diff --git a/modules/rampart-policy/src/test/resources/policy/kerberos-keyref-11.xml b/modules/rampart-policy/src/test/resources/policy/kerberos-keyref-11.xml
new file mode 100644
index 0000000..6d0322a
--- /dev/null
+++ b/modules/rampart-policy/src/test/resources/policy/kerberos-keyref-11.xml
@@ -0,0 +1,17 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
+   xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:EndorsingSupportingTokens>
+                <wsp:Policy>
+                    <sp:KerberosToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once">
+                        <wsp:Policy>
+                            <sp:WssKerberosV5ApReqToken11 />
+                            <sp:RequireKeyIdentifierReference />
+                        </wsp:Policy>
+                    </sp:KerberosToken>
+                </wsp:Policy>
+            </sp:EndorsingSupportingTokens>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
\ No newline at end of file
diff --git a/modules/rampart-policy/src/test/resources/policy/kerberos-keyref-12.xml b/modules/rampart-policy/src/test/resources/policy/kerberos-keyref-12.xml
new file mode 100644
index 0000000..6bf4ba6
--- /dev/null
+++ b/modules/rampart-policy/src/test/resources/policy/kerberos-keyref-12.xml
@@ -0,0 +1,17 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
+   xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:EndorsingSupportingTokens>
+                <wsp:Policy>
+                    <sp:KerberosToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Once">
+                        <wsp:Policy>
+                            <sp:WssKerberosV5ApReqToken11 />
+                            <sp:RequireKeyIdentifierReference />
+                        </wsp:Policy>
+                    </sp:KerberosToken>
+                </wsp:Policy>
+            </sp:EndorsingSupportingTokens>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
\ No newline at end of file
diff --git a/modules/rampart-samples/README.txt b/modules/rampart-samples/README.txt
index 136798c..6a3d376 100644
--- a/modules/rampart-samples/README.txt
+++ b/modules/rampart-samples/README.txt
@@ -11,8 +11,8 @@
     
     - keys   - The keystore files that contains the keys used by the samples
 
-Please use Apache Ant with the build.xml file available here to copy all jars
-and mars to required places.
+Please use Apache Ant with the build.xml file available in the top level directory
+to copy all jars and mars to required places.
 
     - Please copy log4j.jar to AXIS2_HOME/lib directory before trying out samples.
 
diff --git a/modules/rampart-samples/basic/README.txt b/modules/rampart-samples/basic/README.txt
deleted file mode 100644
index 18f66b1..0000000
--- a/modules/rampart-samples/basic/README.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-********************************************************************************
-**************************** Apache Rampart Samples ****************************
-********************************************************************************
-
-This is a set of Apache Rampart samples which uses configuraiton parameters 
-to configure rampart.
-
-Each "sampleX" directory contains :
-
-    - client.axis2.xml - Client configuration
-    - services.xml - Service configuration
-    - src - Source of the sample
-    - README.txt - you have to read this :-)
-
-We use two parameters named "InflowSecurity" and "OutflowSecurity" within
-these files to configure rampart.
-
-01.) Rampart Engaged and no configuration
-02.) UsernameToken authentication
-03.) UsernameToken authentication with a plain text password
-04.) Message integrity and non-repudiation with signature
-05.) Encryption
-06.) Sign and encrypt a messages
-07.) Encrypt and sign messages
-08.) Signing twice
-09.) Encryption with a key known to both parties
-10.) MTOM Optimizing base64 content in the secured message
-11.) Dynamic configuration : Get rid of the config files ... let's use code!
-
-You can use the ant build script provided here to run these samples.
-
-Exmaple: Running sample - 01
-    - Start two shell instnaces and change to the directory where this file is
-    - To start the service: 
-      $ ant service.01
-    - To run client: 
-      $ ant client.01
-
---------------------------------------------------------------------------------
-NOTE: To view the messages exchanged
-    - Change the "client.port" property in the "build.xml" to an available port
-    	  E.g. : <property name="client.port" value="9080"/>
-    	- Setup tcpmon (http://ws.apache.org/commons/tcpmon/) to listen on the above
-    	  port and to point to port 8080 (value of the service.port property)
\ No newline at end of file
diff --git a/modules/rampart-samples/basic/build.xml b/modules/rampart-samples/basic/build.xml
deleted file mode 100644
index 294e020..0000000
--- a/modules/rampart-samples/basic/build.xml
+++ /dev/null
@@ -1,265 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<project basedir="." default="clean">
-
-	<property name="service.repos.dir" value="build/service_repositories"/>
-	<property name="client.repos.dir" value="build/client_repositories"/>
-	<property name="temp.dir" value="build/temp"/>
-	<property name="keys.dir" value="../keys"/>
-	<property name="temp.client.dir" value="build/temp_client"/>
-	
-	<property name="client.port" value="8080"/>
-	<property name="server.port" value="8080"/>
-	
-	<property name="sample.services.url" value="http://localhost:${client.port}/axis2/services"/>
-	
-    <property environment="env"/>
-    	
-    <property name="lib.dir" value="${env.AXIS2_HOME}/lib"/>
-    
-    <path id="runtime.classpath">
-        <fileset dir="${lib.dir}">
-            <include name="**/*.jar"/>
-        </fileset>
-        <pathelement location="${env.AXIS2_HOME}/conf"/>
-    </path>
-    
-	<target name="check.dependency" unless="env.AXIS2_HOME">
-        <echo message="AXIS2_HOME must be set"/>
-    </target>
-	
-	<!-- Sample Service 01 -->
-	<target name="service.01" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.service.repo sample.number="01"/>
-	</target>
-
-	<!-- Sample Client 01 -->
-	<target name="client.01" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.and.run.client sample.number="01"/>
-	</target>
-	
-	<!-- Sample Service 02 -->
-	<target name="service.02" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.service.repo sample.number="02"/>
-	</target>
-
-	<!-- Sample Client 02 -->
-	<target name="client.02" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.and.run.client sample.number="02"/>
-	</target>
-
-	<!-- Sample Service 03 -->
-	<target name="service.03" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.service.repo sample.number="03"/>
-	</target>
-
-	<!-- Sample Client 03 -->
-	<target name="client.03" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.and.run.client sample.number="03"/>
-	</target>
-
-	<!-- Sample Service 04 -->
-	<target name="service.04" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.service.repo sample.number="04"/>
-	</target>
-
-	<!-- Sample Client 04 -->
-	<target name="client.04" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.and.run.client sample.number="04"/>
-	</target>
-
-	<!-- Sample Service 05 -->
-	<target name="service.05" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.service.repo sample.number="05"/>
-	</target>
-
-	<!-- Sample Client 05 -->
-	<target name="client.05" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.and.run.client sample.number="05"/>
-	</target>
-	
-	<!-- Sample Service 06 -->
-	<target name="service.06" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.service.repo sample.number="06"/>
-	</target>
-
-	<!-- Sample Client 06 -->
-	<target name="client.06" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.and.run.client sample.number="06"/>
-	</target>
-	
-	<!-- Sample Service 07 -->
-	<target name="service.07" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.service.repo sample.number="07"/>
-	</target>
-
-	<!-- Sample Client 07 -->
-	<target name="client.07" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.and.run.client sample.number="07"/>
-	</target>
-
-	<!-- Sample Service 08 -->
-	<target name="service.08" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.service.repo sample.number="08"/>
-	</target>
-
-	<!-- Sample Client 08 -->
-	<target name="client.08" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.and.run.client sample.number="08"/>
-	</target>
-
-	<!-- Sample Service 09 -->
-	<target name="service.09" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.service.repo sample.number="09"/>
-	</target>
-
-	<!-- Sample Client 09 -->
-	<target name="client.09" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.and.run.client sample.number="09"/>
-	</target>
-
-	<!-- Sample Service 10 -->
-	<target name="service.10" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.service.repo sample.number="10"/>
-	</target>
-
-	<!-- Sample Client 10 -->
-	<target name="client.10" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.and.run.client sample.number="10"/>
-	</target>
-	
-	<!-- Sample Service 11 -->
-	<target name="service.11" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.service.repo sample.number="11"/>
-	</target>
-
-	<!-- Sample Client 11 -->
-	<target name="client.11" if="env.AXIS2_HOME" depends="check.dependency">
-		<create.and.run.client sample.number="11"/>
-	</target>
-	
-	
-	<target name="clean">
-		<delete dir="build" />
-	</target>
-	
-	<!-- Macro to create a service repo for a given sample -->
-	<macrodef name="create.service.repo">
-	   	<attribute name="sample.number" default="sample"/>
-	   	<sequential>
-	   		
-	   		<property name="modules.dir" value="${env.AXIS2_HOME}/repository/modules/"/>
-	   		
-	   		<mkdir dir="${service.repos.dir}/sample@{sample.number}"/>
-	   		<mkdir dir="${service.repos.dir}/sample@{sample.number}/services"/>
-	   		<mkdir dir="${service.repos.dir}/sample@{sample.number}/modules"/>
-	   		
-	   		<!-- copy modules -->
-	   		<copy todir="${service.repos.dir}/sample@{sample.number}/modules">
-	   		    <fileset dir="${modules.dir}">
-	   		        <include name="addressing-*.mar"/>
-	   		        <include name="rampart-*.mar"/>
-	   		    </fileset>
-	   		</copy>
-	   		
-	   		<!-- create service -->
-	   		<mkdir dir="${temp.dir}"/>
-	   		<mkdir dir="${temp.dir}/META-INF"/>
-	   		
-	   		<!-- Compile service -->
-            <javac srcdir="sample@{sample.number}/src" destdir="${temp.dir}">
-                    <classpath>
-                            <fileset dir="${lib.dir}">
-                                    <include name="**/*.jar"/>
-                            </fileset>
-                    </classpath>
-                    <exclude name="**/Client.java"/>
-            </javac>
-	   		
-	   		<copy file="sample@{sample.number}/services.xml" tofile="${temp.dir}/META-INF/services.xml" overwrite="true"/>
-	   		<copy file="${keys.dir}/service.jks" tofile="${temp.dir}/service.jks" overwrite="true"/>
-	   		<copy file="${keys.dir}/service.properties" tofile="${temp.dir}/service.properties" overwrite="true"/>
-
-	   		<jar destfile="${service.repos.dir}/sample@{sample.number}/services/sample@{sample.number}.aar">
-				<fileset dir="${temp.dir}"></fileset>
-			</jar>
-	   		
-			<delete dir="${temp.dir}" />
-	   		<!-- start SimpleHTTPserver -->
-            <java classname="org.apache.axis2.transport.http.SimpleHTTPServer" fork="true">
-                    <arg value="${service.repos.dir}/sample@{sample.number}"/>
-                    <arg value="-p${server.port}"/>
-                	<classpath refid="runtime.classpath"/>
-            </java>
-
-	   </sequential>
-	</macrodef>
-
-	<macrodef name="create.and.run.client">
-	   	<attribute name="sample.number" default="sample"/>
-	   	<sequential>
-	   		
-	   		<property name="modules.dir" value="${env.AXIS2_HOME}/repository/modules/"/>
-	   		
-	   		<!-- Create the client repo -->
-	   		<mkdir dir="${client.repos.dir}/sample@{sample.number}"/>
-	   		<mkdir dir="${client.repos.dir}/sample@{sample.number}/conf"/>
-	   		<mkdir dir="${client.repos.dir}/sample@{sample.number}/modules"/>
-	   		
-	   		<!-- Copy axis2.xml file -->
-	   		<copy file="sample@{sample.number}/client.axis2.xml" tofile="${client.repos.dir}/sample@{sample.number}/conf/axis2.xml" overwrite="true"/>
-	   		
-	   		<!-- copy modules -->
-	   		<copy todir="${client.repos.dir}/sample@{sample.number}/modules">
-	   		    <fileset dir="${modules.dir}">
-	   		        <include name="addressing-*.mar"/>
-	   		        <include name="rampart-*.mar"/>
-	   		    </fileset>
-	   		</copy>
-	   		
-	   		<mkdir dir="${temp.client.dir}"/>
-	   		
-	   		<!-- Compile client -->
-            <javac srcdir="sample@{sample.number}/src" destdir="${temp.client.dir}">
-                    <classpath>
-	                    <fileset dir="${lib.dir}">
-                            <include name="**/*.jar"/>
-	                    </fileset>
-                    </classpath>
-                    <exclude name="**/SimpleService.java"/>
-            </javac>
-
-	   		<copy file="${keys.dir}/client.jks" tofile="${temp.client.dir}/client.jks" overwrite="true"/>
-	   		<copy file="${keys.dir}/client.properties" tofile="${temp.client.dir}/client.properties" overwrite="true"/>
-
-	   		
-	   		<!-- Run client -->
-            <java classname="org.apache.rampart.samples.sample@{sample.number}.Client" fork="true">
-                    <arg value="${sample.services.url}/sample@{sample.number}"/>
-                    <arg value="${client.repos.dir}/sample@{sample.number}"/>
-                    <classpath>
-                        <path refid="runtime.classpath"/>
-                  		<dirset dir="${temp.client.dir}" />
-                    </classpath>
-            </java>
-
-<!--	   		<delete dir="${temp.client.dir}"/> -->
-		</sequential>		
-	</macrodef>
-
-</project>
diff --git a/modules/rampart-samples/basic/sample01/README.txt b/modules/rampart-samples/basic/sample01/README.txt
deleted file mode 100644
index a4c35f9..0000000
--- a/modules/rampart-samples/basic/sample01/README.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Rampart Engaged and no configuration
-
-This sample shows that Apache Rampart does not work on the messages when simply
-engagd without any configuration
-
-Note: <module ref="rampart"/> in both client.axis2.xml and services.xml
\ No newline at end of file
diff --git a/modules/rampart-samples/basic/sample01/client.axis2.xml b/modules/rampart-samples/basic/sample01/client.axis2.xml
deleted file mode 100644
index 5a1988b..0000000
--- a/modules/rampart-samples/basic/sample01/client.axis2.xml
+++ /dev/null
@@ -1,465 +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.
-  -->
-
-<axisconfig name="AxisJava2.0">
-    <!-- ================================================= -->
-    <!-- Parameters -->
-    <!-- ================================================= -->
-    <parameter name="hotdeployment">true</parameter>
-    <parameter name="hotupdate">false</parameter>
-    <parameter name="enableMTOM">false</parameter>
-    <parameter name="enableSwA">false</parameter>
-
-    <!--Uncomment if you want to enable file caching for attachments -->
-    <!--parameter name="cacheAttachments">true</parameter>
-    <parameter name="attachmentDIR"></parameter>
-    <parameter name="sizeThreshold">4000</parameter-->
-
-    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
-    <!--In some server environments, the available memory heap is limited and can fill up under load -->
-    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
-    <!--to reduce the memory needed for the cached WSDL definitions. -->
-    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
-                                                       
-    <!--This will give out the timout of the configuration contexts, in milliseconds-->
-    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
-
-    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
-    <!--that behavior.-->
-    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
-
-    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
-    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
-    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
-    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
-    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
-
-    <parameter name="userName">admin</parameter>
-    <parameter name="password">axis2</parameter>
-
-    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
-    <!--ServicesDirectory only works on the following cases-->
-    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
-    <!---When creating URL Based configurator with URL “file://”  -->
-    <!--- War based configurator with expanded case , -->
-
-    <!--All the other scenarios it will be ignored.-->
-    <!--<parameter name="ServicesDirectory">service</parameter>-->
-    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
-    <!--<parameter name="ModulesDirectory">modules</parameter>-->
-
-
-
-    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
-    <!--root which can configured using the following contextRoot parameter-->
-    <!--<parameter name="contextRoot">axis2</parameter>-->
-
-    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
-    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
-    <!--context path to proper Axis2 servlets-->
-    <!--<parameter name="servicePath">services</parameter>-->
-    <!--<parameter name="restPath">rest</parameter>-->
-
-    <!-- Following parameter will completely disable REST handling in Axis2-->
-    <parameter name="disableREST" locked="true">false</parameter>
-    
-    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
-    <parameter name="disableSOAP12" locked="true">false</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
-    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
-    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
-    
-
-    <!-- Following parameter will set the host name for the epr-->
-    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
-
-    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
-    <!-- use this parameter to override autodetected url -->
-    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
-
-
-    <!--    The way of adding listener to the system-->
-    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
-    <!--    </listener>-->
-
-    <!-- ================================================= -->
-    <!-- Message Receivers -->
-    <!-- ================================================= -->
-    <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
-    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
-    <!--any operation -->
-    <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
-     <messageReceivers>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-    </messageReceivers>
-
-    <!-- ================================================= -->
-    <!-- Message Formatter -->
-    <!-- ================================================= -->
-    <!--Following content type to message formatter mapping can be used to implement support for different message -->
-    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageFormatters>
-        <messageFormatter contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
-        <messageFormatter contentType="multipart/form-data"
-                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
-        <messageFormatter contentType="application/xml"
-                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
-        <messageFormatter contentType="text/xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-        <messageFormatter contentType="application/soap+xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-    </messageFormatters>
-
-    <!-- ================================================= -->
-    <!-- Message Builders -->
-    <!-- ================================================= -->
-    <!--Following content type to builder mapping can be used to implement support for different message -->
-    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageBuilders>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
-        <messageBuilder contentType="multipart/form-data"
-                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
-    </messageBuilders>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port">8080</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
-    </transportReceiver>
-
-    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
-    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
-        <parameter name="myTopicConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="myQueueConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="default">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-    </transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Listener  -->
-
-    <!-- the non blocking http transport based on HttpCore + NIO extensions
-    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
-        <parameter name="port" locked="false">9000</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportReceiver>-->
-
-    <!-- the non blocking https transport based on HttpCore + SSL-NIO extensions
-    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
-        <parameter name="port" locked="false">9002</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="SSLVerifyClient">require</parameter>
-            supports optional|require or defaults to none -->
-    <!--</transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Listener  -->
-    <!-- This is a sample configuration. It assumes a mail server running in localhost.
-         Listener pops  messages that comes to the email address red@localhost. Users
-         password is red. Listener connect to the server every 3000 milliseconds.
-         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. 
-         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-     -->
-    <!-- ================================================= -->
-    <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
-        <parameter name="mail.pop3.host">localhost</parameter>
-        <parameter name="mail.pop3.user">red</parameter>
-        <parameter name="mail.store.protocol">pop3</parameter>
-        <parameter name="transport.mail.pop3.password">red</parameter>
-        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
-        <parameter name="transport.listener.interval">3000</parameter>
-    </transportReceiver>-->
-
-    <!--Uncomment if you want to have TCP transport support-->
-    <!--transportReceiver name="tcp"
-                       class="org.apache.axis2.transport.tcp.TCPServer">
-        <parameter name="port">6060</parameter-->>
-        <!--If you want to give your own host address for EPR generation-->
-        <!--uncomment the following paramter , and set it as you required.-->
-        <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
-    <!-- /transportReceiver -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <!-- transportSender name="tcp"
-                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
-    <transportSender name="local"
-                     class="org.apache.axis2.transport.local.LocalTransportSender"/ -->
-    <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-
-        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
-        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
-    </transportSender>
-
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-    </transportSender>
-    <transportSender name="java"
-                     class="org.apache.axis2.transport.java.JavaTransportSender"/>
-
-    <!--<transportSender name="jms"-->
-                     <!--class="org.apache.axis2.transport.jms.JMSSender"/>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Sender  -->
-
-    <!-- the non-blocking http transport sender based on HttpCore + NIO extensions
-    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportSender>-->
-
-    <!-- the non-blocking https transport sender based on HttpCore + NIO SSL extensions
-    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
-            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
-    <!--</transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Sender  -->
-    <!--Only need to uncomment the sender. Configuration is achieved with every client.
-        At any instant mail host should be given. Sample configuration has been given.
-        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-   -->
-    <!-- ================================================= -->
-   <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
-        <parameter name="mail.smtp.host">localhost</parameter>
-    </transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Global Modules  -->
-    <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
-    <module ref="addressing"/>
-    <module ref="rampart"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <!--<moduleConfig name="addressing">-->
-    <!--<parameter name="addressingPara">N/A</parameter>-->
-    <!--</moduleConfig>-->
-
-    <!-- ================================================= -->
-    <!-- Clustering  -->
-    <!-- ================================================= -->
-    <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
-    <!--
-    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
-        <parameter name="param1">value1</parameter>
-        <parameter name="domain">apache.axis2.domain</parameter>
-        <parameter name="synchronizeAll">true</parameter>
-        <parameter name="maxRetries">10</parameter>
-        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
-            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
-        </configurationManager>
-        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
-            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
-        </contextManager>
-    </cluster>
-    -->
-
-    <!-- ================================================= -->
-    <!-- Phases  -->
-    <!-- ================================================= -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-samples/basic/sample01/services.xml b/modules/rampart-samples/basic/sample01/services.xml
deleted file mode 100644
index f76daf9..0000000
--- a/modules/rampart-samples/basic/sample01/services.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<!-- services.xml of sample-1 : No Security-->
-<service>
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
-	</operation>    
-	<parameter name="ServiceClass" locked="false">org.apache.rampart.samples.sample01.SimpleService</parameter>
-	
-	<module ref="rampart" />
-	
-</service>
diff --git a/modules/rampart-samples/basic/sample01/src/org/apache/rampart/samples/sample01/Client.java b/modules/rampart-samples/basic/sample01/src/org/apache/rampart/samples/sample01/Client.java
deleted file mode 100644
index b47c6be..0000000
--- a/modules/rampart-samples/basic/sample01/src/org/apache/rampart/samples/sample01/Client.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample01;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-
-public class Client {
-
-    public static void main(String[] args) throws Exception {
-        
-        if(args.length != 2) {
-            System.out.println("Usage: $java Client endpoint_address client_repo_path");
-        }
-        
-        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml");
-        
-        ServiceClient client = new ServiceClient(ctx, null);
-        Options options = new Options();
-        options.setAction("urn:echo");
-        options.setTo(new EndpointReference(args[0]));
-        client.setOptions(options);
-        
-        OMElement response = client.sendReceive(getPayload("Hello world"));
-        
-        System.out.println(response);
-        
-    }
-    
-    private static OMElement getPayload(String value) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace ns = factory.createOMNamespace("http://sample01.samples.rampart.apache.org","ns1");
-        OMElement elem = factory.createOMElement("echo", ns);
-        OMElement childElem = factory.createOMElement("param0", null);
-        childElem.setText(value);
-        elem.addChild(childElem);
-        
-        return elem;
-    }
-    
-}
diff --git a/modules/rampart-samples/basic/sample01/src/org/apache/rampart/samples/sample01/SimpleService.java b/modules/rampart-samples/basic/sample01/src/org/apache/rampart/samples/sample01/SimpleService.java
deleted file mode 100644
index 3247722..0000000
--- a/modules/rampart-samples/basic/sample01/src/org/apache/rampart/samples/sample01/SimpleService.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright  2003-2005 The Apache Software Foundation.
- *
- *  Licensed 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.rampart.samples.sample01;
-
-public class SimpleService {
-    
-    public String echo(String arg) {
-        return arg;
-    }
-}
diff --git a/modules/rampart-samples/basic/sample02/README.txt b/modules/rampart-samples/basic/sample02/README.txt
deleted file mode 100644
index de24747..0000000
--- a/modules/rampart-samples/basic/sample02/README.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-UsernameToken authentication
-
-The client is configured to add a UsernameToken to the outgoing message.
-	- See the "OutflowSecurity" parameter in the client.axis2.xml
-	
-The service is configured to process it.
-	- See the "InflowSecurity" parameter in the services.xml
-
-Note how org.apache.rampart.samples.sample02.PWCBHandler supplies the password 
-to wss4j to compute the digest for comparison.
diff --git a/modules/rampart-samples/basic/sample02/client.axis2.xml b/modules/rampart-samples/basic/sample02/client.axis2.xml
deleted file mode 100644
index f292c27..0000000
--- a/modules/rampart-samples/basic/sample02/client.axis2.xml
+++ /dev/null
@@ -1,474 +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.
-  -->
-
-<axisconfig name="AxisJava2.0">
-    <module ref="rampart" />
-    
-    <parameter name="OutflowSecurity">
-        <action>
-            <items>UsernameToken Timestamp</items>
-            <user>bob</user>
-            <passwordCallbackClass>org.apache.rampart.samples.sample02.PWCBHandler</passwordCallbackClass>
-        </action>
-    </parameter>
-    
-    <!-- ================================================= -->
-    <!-- Parameters -->
-    <!-- ================================================= -->
-    <parameter name="hotdeployment">true</parameter>
-    <parameter name="hotupdate">false</parameter>
-    <parameter name="enableMTOM">false</parameter>
-    <parameter name="enableSwA">false</parameter>
-
-    <!--Uncomment if you want to enable file caching for attachments -->
-    <!--parameter name="cacheAttachments">true</parameter>
-    <parameter name="attachmentDIR"></parameter>
-    <parameter name="sizeThreshold">4000</parameter-->
-
-    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
-    <!--In some server environments, the available memory heap is limited and can fill up under load -->
-    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
-    <!--to reduce the memory needed for the cached WSDL definitions. -->
-    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
-                                                       
-    <!--This will give out the timout of the configuration contexts, in milliseconds-->
-    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
-
-    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
-    <!--that behavior.-->
-    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
-
-    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
-    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
-    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
-    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
-    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
-
-    <parameter name="userName">admin</parameter>
-    <parameter name="password">axis2</parameter>
-
-    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
-    <!--ServicesDirectory only works on the following cases-->
-    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
-    <!---When creating URL Based configurator with URL “file://”  -->
-    <!--- War based configurator with expanded case , -->
-
-    <!--All the other scenarios it will be ignored.-->
-    <!--<parameter name="ServicesDirectory">service</parameter>-->
-    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
-    <!--<parameter name="ModulesDirectory">modules</parameter>-->
-
-
-
-    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
-    <!--root which can configured using the following contextRoot parameter-->
-    <!--<parameter name="contextRoot">axis2</parameter>-->
-
-    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
-    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
-    <!--context path to proper Axis2 servlets-->
-    <!--<parameter name="servicePath">services</parameter>-->
-    <!--<parameter name="restPath">rest</parameter>-->
-
-    <!-- Following parameter will completely disable REST handling in Axis2-->
-    <parameter name="disableREST" locked="true">false</parameter>
-    
-    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
-    <parameter name="disableSOAP12" locked="true">false</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
-    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
-    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
-    
-
-    <!-- Following parameter will set the host name for the epr-->
-    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
-
-    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
-    <!-- use this parameter to override autodetected url -->
-    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
-
-
-    <!--    The way of adding listener to the system-->
-    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
-    <!--    </listener>-->
-
-    <!-- ================================================= -->
-    <!-- Message Receivers -->
-    <!-- ================================================= -->
-    <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
-    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
-    <!--any operation -->
-    <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
-     <messageReceivers>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-    </messageReceivers>
-
-    <!-- ================================================= -->
-    <!-- Message Formatter -->
-    <!-- ================================================= -->
-    <!--Following content type to message formatter mapping can be used to implement support for different message -->
-    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageFormatters>
-        <messageFormatter contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
-        <messageFormatter contentType="multipart/form-data"
-                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
-        <messageFormatter contentType="application/xml"
-                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
-        <messageFormatter contentType="text/xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-        <messageFormatter contentType="application/soap+xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-    </messageFormatters>
-
-    <!-- ================================================= -->
-    <!-- Message Builders -->
-    <!-- ================================================= -->
-    <!--Following content type to builder mapping can be used to implement support for different message -->
-    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageBuilders>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
-        <messageBuilder contentType="multipart/form-data"
-                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
-    </messageBuilders>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port">8080</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
-    </transportReceiver>
-
-    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
-    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
-        <parameter name="myTopicConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="myQueueConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="default">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-    </transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Listener  -->
-
-    <!-- the non blocking http transport based on HttpCore + NIO extensions
-    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
-        <parameter name="port" locked="false">9000</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportReceiver>-->
-
-    <!-- the non blocking https transport based on HttpCore + SSL-NIO extensions
-    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
-        <parameter name="port" locked="false">9002</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="SSLVerifyClient">require</parameter>
-            supports optional|require or defaults to none -->
-    <!--</transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Listener  -->
-    <!-- This is a sample configuration. It assumes a mail server running in localhost.
-         Listener pops  messages that comes to the email address red@localhost. Users
-         password is red. Listener connect to the server every 3000 milliseconds.
-         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. 
-         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-     -->
-    <!-- ================================================= -->
-    <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
-        <parameter name="mail.pop3.host">localhost</parameter>
-        <parameter name="mail.pop3.user">red</parameter>
-        <parameter name="mail.store.protocol">pop3</parameter>
-        <parameter name="transport.mail.pop3.password">red</parameter>
-        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
-        <parameter name="transport.listener.interval">3000</parameter>
-    </transportReceiver>-->
-
-    <!--Uncomment if you want to have TCP transport support-->
-    <!--transportReceiver name="tcp"
-                       class="org.apache.axis2.transport.tcp.TCPServer">
-        <parameter name="port">6060</parameter-->>
-        <!--If you want to give your own host address for EPR generation-->
-        <!--uncomment the following paramter , and set it as you required.-->
-        <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
-    <!-- /transportReceiver -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <!-- transportSender name="tcp"
-                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
-    <transportSender name="local"
-                     class="org.apache.axis2.transport.local.LocalTransportSender"/ -->
-    <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-
-        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
-        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
-    </transportSender>
-
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-    </transportSender>
-    <transportSender name="java"
-                     class="org.apache.axis2.transport.java.JavaTransportSender"/>
-
-    <!--<transportSender name="jms"-->
-                     <!--class="org.apache.axis2.transport.jms.JMSSender"/>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Sender  -->
-
-    <!-- the non-blocking http transport sender based on HttpCore + NIO extensions
-    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportSender>-->
-
-    <!-- the non-blocking https transport sender based on HttpCore + NIO SSL extensions
-    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
-            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
-    <!--</transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Sender  -->
-    <!--Only need to uncomment the sender. Configuration is achieved with every client.
-        At any instant mail host should be given. Sample configuration has been given.
-        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-   -->
-    <!-- ================================================= -->
-   <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
-        <parameter name="mail.smtp.host">localhost</parameter>
-    </transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Global Modules  -->
-    <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
-    <module ref="addressing"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <!--<moduleConfig name="addressing">-->
-    <!--<parameter name="addressingPara">N/A</parameter>-->
-    <!--</moduleConfig>-->
-
-    <!-- ================================================= -->
-    <!-- Clustering  -->
-    <!-- ================================================= -->
-    <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
-    <!--
-    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
-        <parameter name="param1">value1</parameter>
-        <parameter name="domain">apache.axis2.domain</parameter>
-        <parameter name="synchronizeAll">true</parameter>
-        <parameter name="maxRetries">10</parameter>
-        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
-            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
-        </configurationManager>
-        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
-            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
-        </contextManager>
-    </cluster>
-    -->
-
-    <!-- ================================================= -->
-    <!-- Phases  -->
-    <!-- ================================================= -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-samples/basic/sample02/services.xml b/modules/rampart-samples/basic/sample02/services.xml
deleted file mode 100644
index ac94b4b..0000000
--- a/modules/rampart-samples/basic/sample02/services.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<!-- services.xml of sample-2 : Timestamp and UsernameToken-->
-<service>
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
-	</operation>    
-	<parameter name="ServiceClass" locked="false">org.apache.rampart.samples.sample02.SimpleService</parameter>
-	
-	<module ref="rampart" />
-	
-	<parameter name="InflowSecurity">
-      <action>
-        <items>UsernameToken Timestamp</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample02.PWCBHandler</passwordCallbackClass>
-      </action>
-    </parameter>
-</service>
diff --git a/modules/rampart-samples/basic/sample02/src/org/apache/rampart/samples/sample02/Client.java b/modules/rampart-samples/basic/sample02/src/org/apache/rampart/samples/sample02/Client.java
deleted file mode 100644
index 542ed61..0000000
--- a/modules/rampart-samples/basic/sample02/src/org/apache/rampart/samples/sample02/Client.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample02;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-
-public class Client {
-
-    public static void main(String[] args) throws Exception {
-        
-        if(args.length != 2) {
-            System.out.println("Usage: $java Client endpoint_address client_repo_path");
-        }
-        
-        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml");
-        
-        ServiceClient client = new ServiceClient(ctx, null);
-        Options options = new Options();
-        options.setAction("urn:echo");
-        options.setTo(new EndpointReference(args[0]));
-        client.setOptions(options);
-        
-        OMElement response = client.sendReceive(getPayload("Hello world"));
-        
-        System.out.println(response);
-        
-    }
-    
-    private static OMElement getPayload(String value) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace ns = factory.createOMNamespace("http://sample02.samples.rampart.apache.org","ns1");
-        OMElement elem = factory.createOMElement("echo", ns);
-        OMElement childElem = factory.createOMElement("param0", null);
-        childElem.setText(value);
-        elem.addChild(childElem);
-        
-        return elem;
-    }
-    
-}
diff --git a/modules/rampart-samples/basic/sample02/src/org/apache/rampart/samples/sample02/PWCBHandler.java b/modules/rampart-samples/basic/sample02/src/org/apache/rampart/samples/sample02/PWCBHandler.java
deleted file mode 100644
index 84c3c5d..0000000
--- a/modules/rampart-samples/basic/sample02/src/org/apache/rampart/samples/sample02/PWCBHandler.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample02;
-
-import org.apache.ws.security.WSPasswordCallback;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-import java.io.IOException;
-
-public class PWCBHandler implements CallbackHandler {
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
-            String id = pwcb.getIdentifier();
-            if("bob".equals(id)) {
-                pwcb.setPassword("bobPW");
-            }
-        }
-    }
-
-}
diff --git a/modules/rampart-samples/basic/sample02/src/org/apache/rampart/samples/sample02/SimpleService.java b/modules/rampart-samples/basic/sample02/src/org/apache/rampart/samples/sample02/SimpleService.java
deleted file mode 100644
index 3249257..0000000
--- a/modules/rampart-samples/basic/sample02/src/org/apache/rampart/samples/sample02/SimpleService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright  2003-2005 The Apache Software Foundation.
- *
- *  Licensed 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.rampart.samples.sample02;
-
-public class SimpleService {
-    
-    public String echo(String arg) {
-        return arg;
-    }
-}
diff --git a/modules/rampart-samples/basic/sample03/README.txt b/modules/rampart-samples/basic/sample03/README.txt
deleted file mode 100644
index 1446348..0000000
--- a/modules/rampart-samples/basic/sample03/README.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-UsernameToken authentication with a plain text password
-
-The client is configured to add a UsernameToken to the outgoing message.
-	- See the "OutflowSecurity" parameter in the client.axis2.xml
-	- Note the <passwordType>PasswordText</passwordType> element
-	
-The service is configured to process it.
-	- See the "InflowSecurity" parameter in the services.xml
-
-Note how org.apache.rampart.samples.sample03.PWCBHandler authenticates the 
-password
-
diff --git a/modules/rampart-samples/basic/sample03/client.axis2.xml b/modules/rampart-samples/basic/sample03/client.axis2.xml
deleted file mode 100644
index 0913fc2..0000000
--- a/modules/rampart-samples/basic/sample03/client.axis2.xml
+++ /dev/null
@@ -1,475 +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.
-  -->
-
-<axisconfig name="AxisJava2.0">
-    <module ref="rampart" />
-    
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>UsernameToken</items>
-        <user>bob</user>
-        <passwordCallbackClass>org.apache.rampart.samples.sample03.PWCBHandler</passwordCallbackClass>
-        <passwordType>PasswordText</passwordType>
-      </action>
-    </parameter>
-
-    <!-- ================================================= -->
-    <!-- Parameters -->
-    <!-- ================================================= -->
-    <parameter name="hotdeployment">true</parameter>
-    <parameter name="hotupdate">false</parameter>
-    <parameter name="enableMTOM">false</parameter>
-    <parameter name="enableSwA">false</parameter>
-
-    <!--Uncomment if you want to enable file caching for attachments -->
-    <!--parameter name="cacheAttachments">true</parameter>
-    <parameter name="attachmentDIR"></parameter>
-    <parameter name="sizeThreshold">4000</parameter-->
-
-    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
-    <!--In some server environments, the available memory heap is limited and can fill up under load -->
-    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
-    <!--to reduce the memory needed for the cached WSDL definitions. -->
-    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
-                                                       
-    <!--This will give out the timout of the configuration contexts, in milliseconds-->
-    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
-
-    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
-    <!--that behavior.-->
-    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
-
-    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
-    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
-    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
-    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
-    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
-
-    <parameter name="userName">admin</parameter>
-    <parameter name="password">axis2</parameter>
-
-    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
-    <!--ServicesDirectory only works on the following cases-->
-    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
-    <!---When creating URL Based configurator with URL “file://”  -->
-    <!--- War based configurator with expanded case , -->
-
-    <!--All the other scenarios it will be ignored.-->
-    <!--<parameter name="ServicesDirectory">service</parameter>-->
-    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
-    <!--<parameter name="ModulesDirectory">modules</parameter>-->
-
-
-
-    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
-    <!--root which can configured using the following contextRoot parameter-->
-    <!--<parameter name="contextRoot">axis2</parameter>-->
-
-    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
-    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
-    <!--context path to proper Axis2 servlets-->
-    <!--<parameter name="servicePath">services</parameter>-->
-    <!--<parameter name="restPath">rest</parameter>-->
-
-    <!-- Following parameter will completely disable REST handling in Axis2-->
-    <parameter name="disableREST" locked="true">false</parameter>
-    
-    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
-    <parameter name="disableSOAP12" locked="true">false</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
-    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
-    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
-    
-
-    <!-- Following parameter will set the host name for the epr-->
-    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
-
-    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
-    <!-- use this parameter to override autodetected url -->
-    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
-
-
-    <!--    The way of adding listener to the system-->
-    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
-    <!--    </listener>-->
-
-    <!-- ================================================= -->
-    <!-- Message Receivers -->
-    <!-- ================================================= -->
-    <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
-    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
-    <!--any operation -->
-    <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
-     <messageReceivers>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-    </messageReceivers>
-
-    <!-- ================================================= -->
-    <!-- Message Formatter -->
-    <!-- ================================================= -->
-    <!--Following content type to message formatter mapping can be used to implement support for different message -->
-    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageFormatters>
-        <messageFormatter contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
-        <messageFormatter contentType="multipart/form-data"
-                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
-        <messageFormatter contentType="application/xml"
-                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
-        <messageFormatter contentType="text/xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-        <messageFormatter contentType="application/soap+xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-    </messageFormatters>
-
-    <!-- ================================================= -->
-    <!-- Message Builders -->
-    <!-- ================================================= -->
-    <!--Following content type to builder mapping can be used to implement support for different message -->
-    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageBuilders>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
-        <messageBuilder contentType="multipart/form-data"
-                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
-    </messageBuilders>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port">8080</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
-    </transportReceiver>
-
-    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
-    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
-        <parameter name="myTopicConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="myQueueConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="default">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-    </transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Listener  -->
-
-    <!-- the non blocking http transport based on HttpCore + NIO extensions
-    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
-        <parameter name="port" locked="false">9000</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportReceiver>-->
-
-    <!-- the non blocking https transport based on HttpCore + SSL-NIO extensions
-    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
-        <parameter name="port" locked="false">9002</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="SSLVerifyClient">require</parameter>
-            supports optional|require or defaults to none -->
-    <!--</transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Listener  -->
-    <!-- This is a sample configuration. It assumes a mail server running in localhost.
-         Listener pops  messages that comes to the email address red@localhost. Users
-         password is red. Listener connect to the server every 3000 milliseconds.
-         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. 
-         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-     -->
-    <!-- ================================================= -->
-    <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
-        <parameter name="mail.pop3.host">localhost</parameter>
-        <parameter name="mail.pop3.user">red</parameter>
-        <parameter name="mail.store.protocol">pop3</parameter>
-        <parameter name="transport.mail.pop3.password">red</parameter>
-        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
-        <parameter name="transport.listener.interval">3000</parameter>
-    </transportReceiver>-->
-
-    <!--Uncomment if you want to have TCP transport support-->
-    <!--transportReceiver name="tcp"
-                       class="org.apache.axis2.transport.tcp.TCPServer">
-        <parameter name="port">6060</parameter-->>
-        <!--If you want to give your own host address for EPR generation-->
-        <!--uncomment the following paramter , and set it as you required.-->
-        <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
-    <!-- /transportReceiver -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <!-- transportSender name="tcp"
-                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
-    <transportSender name="local"
-                     class="org.apache.axis2.transport.local.LocalTransportSender"/ -->
-    <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-
-        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
-        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
-    </transportSender>
-
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-    </transportSender>
-    <transportSender name="java"
-                     class="org.apache.axis2.transport.java.JavaTransportSender"/>
-
-    <!--<transportSender name="jms"-->
-                     <!--class="org.apache.axis2.transport.jms.JMSSender"/>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Sender  -->
-
-    <!-- the non-blocking http transport sender based on HttpCore + NIO extensions
-    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportSender>-->
-
-    <!-- the non-blocking https transport sender based on HttpCore + NIO SSL extensions
-    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
-            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
-    <!--</transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Sender  -->
-    <!--Only need to uncomment the sender. Configuration is achieved with every client.
-        At any instant mail host should be given. Sample configuration has been given.
-        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-   -->
-    <!-- ================================================= -->
-   <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
-        <parameter name="mail.smtp.host">localhost</parameter>
-    </transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Global Modules  -->
-    <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
-    <module ref="addressing"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <!--<moduleConfig name="addressing">-->
-    <!--<parameter name="addressingPara">N/A</parameter>-->
-    <!--</moduleConfig>-->
-
-    <!-- ================================================= -->
-    <!-- Clustering  -->
-    <!-- ================================================= -->
-    <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
-    <!--
-    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
-        <parameter name="param1">value1</parameter>
-        <parameter name="domain">apache.axis2.domain</parameter>
-        <parameter name="synchronizeAll">true</parameter>
-        <parameter name="maxRetries">10</parameter>
-        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
-            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
-        </configurationManager>
-        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
-            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
-        </contextManager>
-    </cluster>
-    -->
-
-    <!-- ================================================= -->
-    <!-- Phases  -->
-    <!-- ================================================= -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-samples/basic/sample03/services.xml b/modules/rampart-samples/basic/sample03/services.xml
deleted file mode 100644
index 1d0e6c5..0000000
--- a/modules/rampart-samples/basic/sample03/services.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<!-- services.xml of sample-3 : Timestamp and UsernameToken (with plaintext password)-->
-<service>
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
-	</operation>    
-	<parameter name="ServiceClass" locked="false">org.apache.rampart.samples.sample03.SimpleService</parameter>
-	
-	<module ref="rampart" />
-	
-	<parameter name="InflowSecurity">
-      <action>
-        <items>UsernameToken</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample03.PWCBHandler</passwordCallbackClass>
-      </action>
-    </parameter>
-</service>
diff --git a/modules/rampart-samples/basic/sample03/src/org/apache/rampart/samples/sample03/Client.java b/modules/rampart-samples/basic/sample03/src/org/apache/rampart/samples/sample03/Client.java
deleted file mode 100644
index 9aa0c34..0000000
--- a/modules/rampart-samples/basic/sample03/src/org/apache/rampart/samples/sample03/Client.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample03;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-
-public class Client {
-
-    public static void main(String[] args) throws Exception {
-        
-        if(args.length != 2) {
-            System.out.println("Usage: $java Client endpoint_address client_repo_path");
-        }
-        
-        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml");
-        
-        ServiceClient client = new ServiceClient(ctx, null);
-        Options options = new Options();
-        options.setAction("urn:echo");
-        options.setTo(new EndpointReference(args[0]));
-        client.setOptions(options);
-        
-        OMElement response = client.sendReceive(getPayload("Hello world"));
-        
-        System.out.println(response);
-        
-    }
-    
-    private static OMElement getPayload(String value) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace ns = factory.createOMNamespace("http://sample03.samples.rampart.apache.org","ns1");
-        OMElement elem = factory.createOMElement("echo", ns);
-        OMElement childElem = factory.createOMElement("param0", null);
-        childElem.setText(value);
-        elem.addChild(childElem);
-        
-        return elem;
-    }
-    
-}
diff --git a/modules/rampart-samples/basic/sample03/src/org/apache/rampart/samples/sample03/PWCBHandler.java b/modules/rampart-samples/basic/sample03/src/org/apache/rampart/samples/sample03/PWCBHandler.java
deleted file mode 100644
index c3459d6..0000000
--- a/modules/rampart-samples/basic/sample03/src/org/apache/rampart/samples/sample03/PWCBHandler.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample03;
-
-import org.apache.ws.security.WSPasswordCallback;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-import java.io.IOException;
-
-public class PWCBHandler implements CallbackHandler {
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-
-        for (int i = 0; i < callbacks.length; i++) {
-            
-            //When the server side need to authenticate the user
-            WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
-            if (pwcb.getUsage() == WSPasswordCallback.USERNAME_TOKEN_UNKNOWN) {
-                if(pwcb.getIdentifier().equals("bob") && pwcb.getPassword().equals("bobPW")) {
-                    //If authentication successful, simply return
-                    return;
-                } else {
-                    throw new UnsupportedCallbackException(callbacks[i], "check failed");
-                }
-            }
-            
-            //When the client requests for the password to be added in to the 
-            //UT element
-            pwcb.setPassword("bobPW");
-        }
-    }
-
-}
diff --git a/modules/rampart-samples/basic/sample03/src/org/apache/rampart/samples/sample03/SimpleService.java b/modules/rampart-samples/basic/sample03/src/org/apache/rampart/samples/sample03/SimpleService.java
deleted file mode 100644
index 630cf80..0000000
--- a/modules/rampart-samples/basic/sample03/src/org/apache/rampart/samples/sample03/SimpleService.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright  2003-2005 The Apache Software Foundation.
- *
- *  Licensed 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.rampart.samples.sample03;
-
-import org.apache.axis2.AxisFault;
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.ws.security.WSConstants;
-import org.apache.ws.security.WSSecurityEngineResult;
-import org.apache.ws.security.WSUsernameTokenPrincipal;
-import org.apache.ws.security.handler.WSHandlerConstants;
-import org.apache.ws.security.handler.WSHandlerResult;
-
-import java.util.Vector;
-
-public class SimpleService {
-
-    public String echo(String arg) {
-    	return arg;
-    }
-}
diff --git a/modules/rampart-samples/basic/sample04/README.txt b/modules/rampart-samples/basic/sample04/README.txt
deleted file mode 100644
index df4599d..0000000
--- a/modules/rampart-samples/basic/sample04/README.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Message integrity and non-repudiation with signature
-
-Both client and servce are configured to sign the outgoing message and to verify
-the signature of the incoming message using their key pairs.
-	- See the "OutflowSecurity" and "InflowSecurity" parameters in the 
-      client.axis2.xml and serivces.xml files
-	
diff --git a/modules/rampart-samples/basic/sample04/client.axis2.xml b/modules/rampart-samples/basic/sample04/client.axis2.xml
deleted file mode 100644
index 6bef65d..0000000
--- a/modules/rampart-samples/basic/sample04/client.axis2.xml
+++ /dev/null
@@ -1,483 +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.
-  -->
-
-<axisconfig name="AxisJava2.0">
-    <module ref="rampart" />
-    
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature</items>
-        <user>client</user>
-        <signaturePropFile>client.properties</signaturePropFile>
-        <passwordCallbackClass>org.apache.rampart.samples.sample04.PWCBHandler</passwordCallbackClass>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-      </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature</items>
-        <signaturePropFile>client.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <!-- ================================================= -->
-    <!-- Parameters -->
-    <!-- ================================================= -->
-    <parameter name="hotdeployment">true</parameter>
-    <parameter name="hotupdate">false</parameter>
-    <parameter name="enableMTOM">false</parameter>
-    <parameter name="enableSwA">false</parameter>
-
-    <!--Uncomment if you want to enable file caching for attachments -->
-    <!--parameter name="cacheAttachments">true</parameter>
-    <parameter name="attachmentDIR"></parameter>
-    <parameter name="sizeThreshold">4000</parameter-->
-
-    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
-    <!--In some server environments, the available memory heap is limited and can fill up under load -->
-    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
-    <!--to reduce the memory needed for the cached WSDL definitions. -->
-    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
-                                                       
-    <!--This will give out the timout of the configuration contexts, in milliseconds-->
-    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
-
-    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
-    <!--that behavior.-->
-    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
-
-    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
-    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
-    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
-    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
-    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
-
-    <parameter name="userName">admin</parameter>
-    <parameter name="password">axis2</parameter>
-
-    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
-    <!--ServicesDirectory only works on the following cases-->
-    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
-    <!---When creating URL Based configurator with URL “file://”  -->
-    <!--- War based configurator with expanded case , -->
-
-    <!--All the other scenarios it will be ignored.-->
-    <!--<parameter name="ServicesDirectory">service</parameter>-->
-    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
-    <!--<parameter name="ModulesDirectory">modules</parameter>-->
-
-
-
-    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
-    <!--root which can configured using the following contextRoot parameter-->
-    <!--<parameter name="contextRoot">axis2</parameter>-->
-
-    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
-    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
-    <!--context path to proper Axis2 servlets-->
-    <!--<parameter name="servicePath">services</parameter>-->
-    <!--<parameter name="restPath">rest</parameter>-->
-
-    <!-- Following parameter will completely disable REST handling in Axis2-->
-    <parameter name="disableREST" locked="true">false</parameter>
-    
-    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
-    <parameter name="disableSOAP12" locked="true">false</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
-    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
-    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
-    
-
-    <!-- Following parameter will set the host name for the epr-->
-    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
-
-    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
-    <!-- use this parameter to override autodetected url -->
-    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
-
-
-    <!--    The way of adding listener to the system-->
-    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
-    <!--    </listener>-->
-
-    <!-- ================================================= -->
-    <!-- Message Receivers -->
-    <!-- ================================================= -->
-    <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
-    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
-    <!--any operation -->
-    <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
-     <messageReceivers>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-    </messageReceivers>
-
-    <!-- ================================================= -->
-    <!-- Message Formatter -->
-    <!-- ================================================= -->
-    <!--Following content type to message formatter mapping can be used to implement support for different message -->
-    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageFormatters>
-        <messageFormatter contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
-        <messageFormatter contentType="multipart/form-data"
-                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
-        <messageFormatter contentType="application/xml"
-                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
-        <messageFormatter contentType="text/xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-        <messageFormatter contentType="application/soap+xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-    </messageFormatters>
-
-    <!-- ================================================= -->
-    <!-- Message Builders -->
-    <!-- ================================================= -->
-    <!--Following content type to builder mapping can be used to implement support for different message -->
-    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageBuilders>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
-        <messageBuilder contentType="multipart/form-data"
-                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
-    </messageBuilders>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port">8080</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
-    </transportReceiver>
-
-    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
-    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
-        <parameter name="myTopicConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="myQueueConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="default">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-    </transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Listener  -->
-
-    <!-- the non blocking http transport based on HttpCore + NIO extensions
-    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
-        <parameter name="port" locked="false">9000</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportReceiver>-->
-
-    <!-- the non blocking https transport based on HttpCore + SSL-NIO extensions
-    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
-        <parameter name="port" locked="false">9002</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="SSLVerifyClient">require</parameter>
-            supports optional|require or defaults to none -->
-    <!--</transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Listener  -->
-    <!-- This is a sample configuration. It assumes a mail server running in localhost.
-         Listener pops  messages that comes to the email address red@localhost. Users
-         password is red. Listener connect to the server every 3000 milliseconds.
-         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. 
-         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-     -->
-    <!-- ================================================= -->
-    <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
-        <parameter name="mail.pop3.host">localhost</parameter>
-        <parameter name="mail.pop3.user">red</parameter>
-        <parameter name="mail.store.protocol">pop3</parameter>
-        <parameter name="transport.mail.pop3.password">red</parameter>
-        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
-        <parameter name="transport.listener.interval">3000</parameter>
-    </transportReceiver>-->
-
-    <!--Uncomment if you want to have TCP transport support-->
-    <!--transportReceiver name="tcp"
-                       class="org.apache.axis2.transport.tcp.TCPServer">
-        <parameter name="port">6060</parameter-->>
-        <!--If you want to give your own host address for EPR generation-->
-        <!--uncomment the following paramter , and set it as you required.-->
-        <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
-    <!-- /transportReceiver -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <!-- transportSender name="tcp"
-                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
-    <transportSender name="local"
-                     class="org.apache.axis2.transport.local.LocalTransportSender"/ -->
-    <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-
-        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
-        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
-    </transportSender>
-
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-    </transportSender>
-    <transportSender name="java"
-                     class="org.apache.axis2.transport.java.JavaTransportSender"/>
-
-    <!--<transportSender name="jms"-->
-                     <!--class="org.apache.axis2.transport.jms.JMSSender"/>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Sender  -->
-
-    <!-- the non-blocking http transport sender based on HttpCore + NIO extensions
-    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportSender>-->
-
-    <!-- the non-blocking https transport sender based on HttpCore + NIO SSL extensions
-    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
-            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
-    <!--</transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Sender  -->
-    <!--Only need to uncomment the sender. Configuration is achieved with every client.
-        At any instant mail host should be given. Sample configuration has been given.
-        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-   -->
-    <!-- ================================================= -->
-   <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
-        <parameter name="mail.smtp.host">localhost</parameter>
-    </transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Global Modules  -->
-    <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
-    <module ref="addressing"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <!--<moduleConfig name="addressing">-->
-    <!--<parameter name="addressingPara">N/A</parameter>-->
-    <!--</moduleConfig>-->
-
-    <!-- ================================================= -->
-    <!-- Clustering  -->
-    <!-- ================================================= -->
-    <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
-    <!--
-    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
-        <parameter name="param1">value1</parameter>
-        <parameter name="domain">apache.axis2.domain</parameter>
-        <parameter name="synchronizeAll">true</parameter>
-        <parameter name="maxRetries">10</parameter>
-        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
-            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
-        </configurationManager>
-        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
-            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
-        </contextManager>
-    </cluster>
-    -->
-
-    <!-- ================================================= -->
-    <!-- Phases  -->
-    <!-- ================================================= -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-samples/basic/sample04/services.xml b/modules/rampart-samples/basic/sample04/services.xml
deleted file mode 100644
index daff4d3..0000000
--- a/modules/rampart-samples/basic/sample04/services.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<!-- services.xml of sample-4 : Signature only -->
-<service>
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
-	</operation>    
-	<parameter name="ServiceClass" locked="false">org.apache.rampart.samples.sample04.SimpleService</parameter>
-
-	<module ref="rampart" />
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature</items>
-        <signaturePropFile>service.properties</signaturePropFile>
-      </action>
-    </parameter>
-	
-	<parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature</items>
-        <user>service</user>
-        <passwordCallbackClass>org.apache.rampart.samples.sample04.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>service.properties</signaturePropFile>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-      </action>
-    </parameter>
-    
-</service>
diff --git a/modules/rampart-samples/basic/sample04/src/org/apache/rampart/samples/sample04/Client.java b/modules/rampart-samples/basic/sample04/src/org/apache/rampart/samples/sample04/Client.java
deleted file mode 100644
index e27bf8f..0000000
--- a/modules/rampart-samples/basic/sample04/src/org/apache/rampart/samples/sample04/Client.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample04;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-
-public class Client {
-
-    public static void main(String[] args) throws Exception {
-        
-        if(args.length != 2) {
-            System.out.println("Usage: $java Client endpoint_address client_repo_path");
-        }
-        
-        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml");
-        
-        ServiceClient client = new ServiceClient(ctx, null);
-        Options options = new Options();
-        options.setAction("urn:echo");
-        options.setTo(new EndpointReference(args[0]));
-        client.setOptions(options);
-        
-        OMElement response = client.sendReceive(getPayload("Hello world"));
-        
-        System.out.println(response);
-        
-    }
-    
-    private static OMElement getPayload(String value) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace ns = factory.createOMNamespace("http://sample04.samples.rampart.apache.org","ns1");
-        OMElement elem = factory.createOMElement("echo", ns);
-        OMElement childElem = factory.createOMElement("param0", null);
-        childElem.setText(value);
-        elem.addChild(childElem);
-        
-        return elem;
-    }
-    
-}
diff --git a/modules/rampart-samples/basic/sample04/src/org/apache/rampart/samples/sample04/PWCBHandler.java b/modules/rampart-samples/basic/sample04/src/org/apache/rampart/samples/sample04/PWCBHandler.java
deleted file mode 100644
index 39dbe59..0000000
--- a/modules/rampart-samples/basic/sample04/src/org/apache/rampart/samples/sample04/PWCBHandler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample04;
-
-import org.apache.ws.security.WSPasswordCallback;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-import java.io.IOException;
-
-public class PWCBHandler implements CallbackHandler {
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
-            
-            String id = pwcb.getIdentifier();
-            if("client".equals(id)) {
-                pwcb.setPassword("apache");
-            } else if("service".equals(id)) {
-                pwcb.setPassword("apache");
-            }
-        }
-    }
-
-}
diff --git a/modules/rampart-samples/basic/sample04/src/org/apache/rampart/samples/sample04/SimpleService.java b/modules/rampart-samples/basic/sample04/src/org/apache/rampart/samples/sample04/SimpleService.java
deleted file mode 100644
index 9132949..0000000
--- a/modules/rampart-samples/basic/sample04/src/org/apache/rampart/samples/sample04/SimpleService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.apache.rampart.samples.sample04;
-/*
-
- * Copyright  2003-2005 The Apache Software Foundation.
- *
- *  Licensed 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.
- *
- */
-
-public class SimpleService {
-    
-    public String echo(String arg) {
-        return arg;
-    }
-}
diff --git a/modules/rampart-samples/basic/sample05/README.txt b/modules/rampart-samples/basic/sample05/README.txt
deleted file mode 100644
index 8ca2fd8..0000000
--- a/modules/rampart-samples/basic/sample05/README.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Encrypting messages
-
-Both client and servce are configured to encrypt the outgoing message and to 
-decrypt incoming message using their key pairs.
-	- See the "OutflowSecurity" and "InflowSecurity" parameters in the 
-      client.axis2.xml and serivces.xml files
-	
diff --git a/modules/rampart-samples/basic/sample05/client.axis2.xml b/modules/rampart-samples/basic/sample05/client.axis2.xml
deleted file mode 100644
index 1e2a613..0000000
--- a/modules/rampart-samples/basic/sample05/client.axis2.xml
+++ /dev/null
@@ -1,482 +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.
-  -->
-
-<axisconfig name="AxisJava2.0">
-    <module ref="rampart" />
-
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Encrypt</items>
-        <encryptionUser>service</encryptionUser>
-        <encryptionPropFile>client.properties</encryptionPropFile>
-      </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Encrypt</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample05.PWCBHandler</passwordCallbackClass>
-        <decryptionPropFile>client.properties</decryptionPropFile>
-      </action>
-    </parameter>
-
-    <!-- ================================================= -->
-    <!-- Parameters -->
-    <!-- ================================================= -->
-    <parameter name="hotdeployment">true</parameter>
-    <parameter name="hotupdate">false</parameter>
-    <parameter name="enableMTOM">false</parameter>
-    <parameter name="enableSwA">false</parameter>
-
-    <!--Uncomment if you want to enable file caching for attachments -->
-    <!--parameter name="cacheAttachments">true</parameter>
-    <parameter name="attachmentDIR"></parameter>
-    <parameter name="sizeThreshold">4000</parameter-->
-
-    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
-    <!--In some server environments, the available memory heap is limited and can fill up under load -->
-    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
-    <!--to reduce the memory needed for the cached WSDL definitions. -->
-    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
-                                                       
-    <!--This will give out the timout of the configuration contexts, in milliseconds-->
-    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
-
-    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
-    <!--that behavior.-->
-    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
-
-    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
-    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
-    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
-    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
-    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
-
-    <parameter name="userName">admin</parameter>
-    <parameter name="password">axis2</parameter>
-
-    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
-    <!--ServicesDirectory only works on the following cases-->
-    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
-    <!---When creating URL Based configurator with URL “file://”  -->
-    <!--- War based configurator with expanded case , -->
-
-    <!--All the other scenarios it will be ignored.-->
-    <!--<parameter name="ServicesDirectory">service</parameter>-->
-    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
-    <!--<parameter name="ModulesDirectory">modules</parameter>-->
-
-
-
-    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
-    <!--root which can configured using the following contextRoot parameter-->
-    <!--<parameter name="contextRoot">axis2</parameter>-->
-
-    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
-    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
-    <!--context path to proper Axis2 servlets-->
-    <!--<parameter name="servicePath">services</parameter>-->
-    <!--<parameter name="restPath">rest</parameter>-->
-
-    <!-- Following parameter will completely disable REST handling in Axis2-->
-    <parameter name="disableREST" locked="true">false</parameter>
-    
-    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
-    <parameter name="disableSOAP12" locked="true">false</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
-    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
-    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
-    
-
-    <!-- Following parameter will set the host name for the epr-->
-    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
-
-    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
-    <!-- use this parameter to override autodetected url -->
-    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
-
-
-    <!--    The way of adding listener to the system-->
-    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
-    <!--    </listener>-->
-
-    <!-- ================================================= -->
-    <!-- Message Receivers -->
-    <!-- ================================================= -->
-    <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
-    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
-    <!--any operation -->
-    <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
-     <messageReceivers>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-    </messageReceivers>
-
-    <!-- ================================================= -->
-    <!-- Message Formatter -->
-    <!-- ================================================= -->
-    <!--Following content type to message formatter mapping can be used to implement support for different message -->
-    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageFormatters>
-        <messageFormatter contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
-        <messageFormatter contentType="multipart/form-data"
-                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
-        <messageFormatter contentType="application/xml"
-                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
-        <messageFormatter contentType="text/xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-        <messageFormatter contentType="application/soap+xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-    </messageFormatters>
-
-    <!-- ================================================= -->
-    <!-- Message Builders -->
-    <!-- ================================================= -->
-    <!--Following content type to builder mapping can be used to implement support for different message -->
-    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageBuilders>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
-        <messageBuilder contentType="multipart/form-data"
-                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
-    </messageBuilders>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port">8080</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
-    </transportReceiver>
-
-    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
-    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
-        <parameter name="myTopicConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="myQueueConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="default">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-    </transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Listener  -->
-
-    <!-- the non blocking http transport based on HttpCore + NIO extensions
-    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
-        <parameter name="port" locked="false">9000</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportReceiver>-->
-
-    <!-- the non blocking https transport based on HttpCore + SSL-NIO extensions
-    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
-        <parameter name="port" locked="false">9002</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="SSLVerifyClient">require</parameter>
-            supports optional|require or defaults to none -->
-    <!--</transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Listener  -->
-    <!-- This is a sample configuration. It assumes a mail server running in localhost.
-         Listener pops  messages that comes to the email address red@localhost. Users
-         password is red. Listener connect to the server every 3000 milliseconds.
-         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. 
-         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-     -->
-    <!-- ================================================= -->
-    <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
-        <parameter name="mail.pop3.host">localhost</parameter>
-        <parameter name="mail.pop3.user">red</parameter>
-        <parameter name="mail.store.protocol">pop3</parameter>
-        <parameter name="transport.mail.pop3.password">red</parameter>
-        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
-        <parameter name="transport.listener.interval">3000</parameter>
-    </transportReceiver>-->
-
-    <!--Uncomment if you want to have TCP transport support-->
-    <!--transportReceiver name="tcp"
-                       class="org.apache.axis2.transport.tcp.TCPServer">
-        <parameter name="port">6060</parameter-->>
-        <!--If you want to give your own host address for EPR generation-->
-        <!--uncomment the following paramter , and set it as you required.-->
-        <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
-    <!-- /transportReceiver -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <!-- transportSender name="tcp"
-                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
-    <transportSender name="local"
-                     class="org.apache.axis2.transport.local.LocalTransportSender"/ -->
-    <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-
-        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
-        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
-    </transportSender>
-
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-    </transportSender>
-    <transportSender name="java"
-                     class="org.apache.axis2.transport.java.JavaTransportSender"/>
-
-    <!--<transportSender name="jms"-->
-                     <!--class="org.apache.axis2.transport.jms.JMSSender"/>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Sender  -->
-
-    <!-- the non-blocking http transport sender based on HttpCore + NIO extensions
-    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportSender>-->
-
-    <!-- the non-blocking https transport sender based on HttpCore + NIO SSL extensions
-    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
-            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
-    <!--</transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Sender  -->
-    <!--Only need to uncomment the sender. Configuration is achieved with every client.
-        At any instant mail host should be given. Sample configuration has been given.
-        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-   -->
-    <!-- ================================================= -->
-   <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
-        <parameter name="mail.smtp.host">localhost</parameter>
-    </transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Global Modules  -->
-    <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
-    <module ref="addressing"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <!--<moduleConfig name="addressing">-->
-    <!--<parameter name="addressingPara">N/A</parameter>-->
-    <!--</moduleConfig>-->
-
-    <!-- ================================================= -->
-    <!-- Clustering  -->
-    <!-- ================================================= -->
-    <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
-    <!--
-    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
-        <parameter name="param1">value1</parameter>
-        <parameter name="domain">apache.axis2.domain</parameter>
-        <parameter name="synchronizeAll">true</parameter>
-        <parameter name="maxRetries">10</parameter>
-        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
-            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
-        </configurationManager>
-        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
-            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
-        </contextManager>
-    </cluster>
-    -->
-
-    <!-- ================================================= -->
-    <!-- Phases  -->
-    <!-- ================================================= -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-samples/basic/sample05/services.xml b/modules/rampart-samples/basic/sample05/services.xml
deleted file mode 100644
index 2b329a8..0000000
--- a/modules/rampart-samples/basic/sample05/services.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<!-- services.xml of sample-5 : Encryption only -->
-<service>
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
-	</operation>    
-	<parameter name="ServiceClass" locked="false">org.apache.rampart.samples.sample05.SimpleService</parameter>
-	
-	<module ref="rampart" />
-		
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Encrypt</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample05.PWCBHandler</passwordCallbackClass>
-        <decryptionPropFile>service.properties</decryptionPropFile>
-      </action>
-    </parameter>
-    
-	<parameter name="OutflowSecurity">
-      <action>
-        <items>Encrypt</items>
-        <encryptionUser>client</encryptionUser>
-        <encryptionPropFile>service.properties</encryptionPropFile>
-      </action>
-    </parameter>
-
-
-	
-</service>
diff --git a/modules/rampart-samples/basic/sample05/src/org/apache/rampart/samples/sample05/Client.java b/modules/rampart-samples/basic/sample05/src/org/apache/rampart/samples/sample05/Client.java
deleted file mode 100644
index 7695f88..0000000
--- a/modules/rampart-samples/basic/sample05/src/org/apache/rampart/samples/sample05/Client.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample05;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-
-public class Client {
-
-    public static void main(String[] args) throws Exception {
-        
-        if(args.length != 2) {
-            System.out.println("Usage: $java Client endpoint_address client_repo_path");
-        }
-        
-        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml");
-        
-        ServiceClient client = new ServiceClient(ctx, null);
-        Options options = new Options();
-        options.setAction("urn:echo");
-        options.setTo(new EndpointReference(args[0]));
-        client.setOptions(options);
-        
-        OMElement response = client.sendReceive(getPayload("Hello world"));
-        
-        System.out.println(response);
-        
-    }
-    
-    private static OMElement getPayload(String value) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace ns = factory.createOMNamespace("http://sample05.samples.rampart.apache.org","ns1");
-        OMElement elem = factory.createOMElement("echo", ns);
-        OMElement childElem = factory.createOMElement("param0", null);
-        childElem.setText(value);
-        elem.addChild(childElem);
-        
-        return elem;
-    }
-    
-}
diff --git a/modules/rampart-samples/basic/sample05/src/org/apache/rampart/samples/sample05/PWCBHandler.java b/modules/rampart-samples/basic/sample05/src/org/apache/rampart/samples/sample05/PWCBHandler.java
deleted file mode 100644
index 8976f73..0000000
--- a/modules/rampart-samples/basic/sample05/src/org/apache/rampart/samples/sample05/PWCBHandler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample05;
-
-import org.apache.ws.security.WSPasswordCallback;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-import java.io.IOException;
-
-public class PWCBHandler implements CallbackHandler {
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
-            
-            String id = pwcb.getIdentifier();
-            if("client".equals(id)) {
-                pwcb.setPassword("apache");
-            } else if("service".equals(id)) {
-                pwcb.setPassword("apache");
-            }
-        }
-    }
-
-}
diff --git a/modules/rampart-samples/basic/sample05/src/org/apache/rampart/samples/sample05/SimpleService.java b/modules/rampart-samples/basic/sample05/src/org/apache/rampart/samples/sample05/SimpleService.java
deleted file mode 100644
index 083a322..0000000
--- a/modules/rampart-samples/basic/sample05/src/org/apache/rampart/samples/sample05/SimpleService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.apache.rampart.samples.sample05;
-/*
-
- * Copyright  2003-2005 The Apache Software Foundation.
- *
- *  Licensed 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.
- *
- */
-
-public class SimpleService {
-    
-    public String echo(String arg) {
-        return arg;
-    }
-}
diff --git a/modules/rampart-samples/basic/sample06/README.txt b/modules/rampart-samples/basic/sample06/README.txt
deleted file mode 100644
index 54642b5..0000000
--- a/modules/rampart-samples/basic/sample06/README.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Sign and encrypt messages
-
-Both client and servce are configured to first sign and then encrypt the 
-outgoing message and to decrypt and verify the incoming message using their 
-key pairs.
-	- See the "OutflowSecurity" and "InflowSecurity" parameters in the 
-      client.axis2.xml and serivces.xml files
-	
diff --git a/modules/rampart-samples/basic/sample06/client.axis2.xml b/modules/rampart-samples/basic/sample06/client.axis2.xml
deleted file mode 100644
index f3d11f4..0000000
--- a/modules/rampart-samples/basic/sample06/client.axis2.xml
+++ /dev/null
@@ -1,488 +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.
-  -->
-
-<axisconfig name="AxisJava2.0">
-
-    <!--Signature and Encryption : Using the request's certificate-->
-    <module ref="rampart" />
-    
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <user>client</user>
-        <passwordCallbackClass>org.apache.rampart.samples.sample06.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>client.properties</signaturePropFile>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionUser>service</encryptionUser>
-      </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample06.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>client.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <!-- ================================================= -->
-    <!-- Parameters -->
-    <!-- ================================================= -->
-    <parameter name="hotdeployment">true</parameter>
-    <parameter name="hotupdate">false</parameter>
-    <parameter name="enableMTOM">false</parameter>
-    <parameter name="enableSwA">false</parameter>
-
-    <!--Uncomment if you want to enable file caching for attachments -->
-    <!--parameter name="cacheAttachments">true</parameter>
-    <parameter name="attachmentDIR"></parameter>
-    <parameter name="sizeThreshold">4000</parameter-->
-
-    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
-    <!--In some server environments, the available memory heap is limited and can fill up under load -->
-    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
-    <!--to reduce the memory needed for the cached WSDL definitions. -->
-    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
-                                                       
-    <!--This will give out the timout of the configuration contexts, in milliseconds-->
-    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
-
-    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
-    <!--that behavior.-->
-    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
-
-    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
-    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
-    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
-    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
-    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
-
-    <parameter name="userName">admin</parameter>
-    <parameter name="password">axis2</parameter>
-
-    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
-    <!--ServicesDirectory only works on the following cases-->
-    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
-    <!---When creating URL Based configurator with URL “file://”  -->
-    <!--- War based configurator with expanded case , -->
-
-    <!--All the other scenarios it will be ignored.-->
-    <!--<parameter name="ServicesDirectory">service</parameter>-->
-    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
-    <!--<parameter name="ModulesDirectory">modules</parameter>-->
-
-
-
-    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
-    <!--root which can configured using the following contextRoot parameter-->
-    <!--<parameter name="contextRoot">axis2</parameter>-->
-
-    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
-    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
-    <!--context path to proper Axis2 servlets-->
-    <!--<parameter name="servicePath">services</parameter>-->
-    <!--<parameter name="restPath">rest</parameter>-->
-
-    <!-- Following parameter will completely disable REST handling in Axis2-->
-    <parameter name="disableREST" locked="true">false</parameter>
-    
-    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
-    <parameter name="disableSOAP12" locked="true">false</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
-    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
-    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
-    
-
-    <!-- Following parameter will set the host name for the epr-->
-    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
-
-    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
-    <!-- use this parameter to override autodetected url -->
-    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
-
-
-    <!--    The way of adding listener to the system-->
-    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
-    <!--    </listener>-->
-
-    <!-- ================================================= -->
-    <!-- Message Receivers -->
-    <!-- ================================================= -->
-    <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
-    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
-    <!--any operation -->
-    <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
-     <messageReceivers>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-    </messageReceivers>
-
-    <!-- ================================================= -->
-    <!-- Message Formatter -->
-    <!-- ================================================= -->
-    <!--Following content type to message formatter mapping can be used to implement support for different message -->
-    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageFormatters>
-        <messageFormatter contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
-        <messageFormatter contentType="multipart/form-data"
-                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
-        <messageFormatter contentType="application/xml"
-                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
-        <messageFormatter contentType="text/xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-        <messageFormatter contentType="application/soap+xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-    </messageFormatters>
-
-    <!-- ================================================= -->
-    <!-- Message Builders -->
-    <!-- ================================================= -->
-    <!--Following content type to builder mapping can be used to implement support for different message -->
-    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageBuilders>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
-        <messageBuilder contentType="multipart/form-data"
-                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
-    </messageBuilders>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port">8080</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
-    </transportReceiver>
-
-    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
-    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
-        <parameter name="myTopicConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="myQueueConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="default">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-    </transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Listener  -->
-
-    <!-- the non blocking http transport based on HttpCore + NIO extensions
-    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
-        <parameter name="port" locked="false">9000</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportReceiver>-->
-
-    <!-- the non blocking https transport based on HttpCore + SSL-NIO extensions
-    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
-        <parameter name="port" locked="false">9002</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="SSLVerifyClient">require</parameter>
-            supports optional|require or defaults to none -->
-    <!--</transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Listener  -->
-    <!-- This is a sample configuration. It assumes a mail server running in localhost.
-         Listener pops  messages that comes to the email address red@localhost. Users
-         password is red. Listener connect to the server every 3000 milliseconds.
-         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. 
-         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-     -->
-    <!-- ================================================= -->
-    <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
-        <parameter name="mail.pop3.host">localhost</parameter>
-        <parameter name="mail.pop3.user">red</parameter>
-        <parameter name="mail.store.protocol">pop3</parameter>
-        <parameter name="transport.mail.pop3.password">red</parameter>
-        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
-        <parameter name="transport.listener.interval">3000</parameter>
-    </transportReceiver>-->
-
-    <!--Uncomment if you want to have TCP transport support-->
-    <!--transportReceiver name="tcp"
-                       class="org.apache.axis2.transport.tcp.TCPServer">
-        <parameter name="port">6060</parameter-->>
-        <!--If you want to give your own host address for EPR generation-->
-        <!--uncomment the following paramter , and set it as you required.-->
-        <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
-    <!-- /transportReceiver -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <!-- transportSender name="tcp"
-                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
-    <transportSender name="local"
-                     class="org.apache.axis2.transport.local.LocalTransportSender"/ -->
-    <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-
-        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
-        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
-    </transportSender>
-
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-    </transportSender>
-    <transportSender name="java"
-                     class="org.apache.axis2.transport.java.JavaTransportSender"/>
-
-    <!--<transportSender name="jms"-->
-                     <!--class="org.apache.axis2.transport.jms.JMSSender"/>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Sender  -->
-
-    <!-- the non-blocking http transport sender based on HttpCore + NIO extensions
-    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportSender>-->
-
-    <!-- the non-blocking https transport sender based on HttpCore + NIO SSL extensions
-    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
-            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
-    <!--</transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Sender  -->
-    <!--Only need to uncomment the sender. Configuration is achieved with every client.
-        At any instant mail host should be given. Sample configuration has been given.
-        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-   -->
-    <!-- ================================================= -->
-   <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
-        <parameter name="mail.smtp.host">localhost</parameter>
-    </transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Global Modules  -->
-    <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
-    <module ref="addressing"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <!--<moduleConfig name="addressing">-->
-    <!--<parameter name="addressingPara">N/A</parameter>-->
-    <!--</moduleConfig>-->
-
-    <!-- ================================================= -->
-    <!-- Clustering  -->
-    <!-- ================================================= -->
-    <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
-    <!--
-    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
-        <parameter name="param1">value1</parameter>
-        <parameter name="domain">apache.axis2.domain</parameter>
-        <parameter name="synchronizeAll">true</parameter>
-        <parameter name="maxRetries">10</parameter>
-        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
-            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
-        </configurationManager>
-        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
-            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
-        </contextManager>
-    </cluster>
-    -->
-
-    <!-- ================================================= -->
-    <!-- Phases  -->
-    <!-- ================================================= -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-samples/basic/sample06/services.xml b/modules/rampart-samples/basic/sample06/services.xml
deleted file mode 100644
index 2c9b865..0000000
--- a/modules/rampart-samples/basic/sample06/services.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<!-- services.xml of sample-6 : Signature and Encryption : Using the request's certificate-->
-<service>
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
-	</operation>    
-	<parameter name="ServiceClass" locked="false">org.apache.rampart.samples.sample06.SimpleService</parameter>
-	
-	<module ref="rampart" />
-	
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample06.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>service.properties</signaturePropFile>
-      </action>
-    </parameter>
-    
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <user>service</user>
-        <passwordCallbackClass>org.apache.rampart.samples.sample06.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>service.properties</signaturePropFile>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionUser>useReqSigCert</encryptionUser>
-      </action>
-    </parameter>
-    
-</service>
diff --git a/modules/rampart-samples/basic/sample06/src/org/apache/rampart/samples/sample06/Client.java b/modules/rampart-samples/basic/sample06/src/org/apache/rampart/samples/sample06/Client.java
deleted file mode 100644
index 441950c..0000000
--- a/modules/rampart-samples/basic/sample06/src/org/apache/rampart/samples/sample06/Client.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample06;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-
-public class Client {
-
-    public static void main(String[] args) throws Exception {
-        
-        if(args.length != 2) {
-            System.out.println("Usage: $java Client endpoint_address client_repo_path");
-        }
-        
-        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml");
-        
-        ServiceClient client = new ServiceClient(ctx, null);
-        Options options = new Options();
-        options.setAction("urn:echo");
-        options.setTo(new EndpointReference(args[0]));
-        client.setOptions(options);
-        
-        OMElement response = client.sendReceive(getPayload("Hello world"));
-        
-        System.out.println(response);
-        
-    }
-    
-    private static OMElement getPayload(String value) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace ns = factory.createOMNamespace("http://sample06.samples.rampart.apache.org","ns1");
-        OMElement elem = factory.createOMElement("echo", ns);
-        OMElement childElem = factory.createOMElement("param0", null);
-        childElem.setText(value);
-        elem.addChild(childElem);
-        
-        return elem;
-    }
-    
-}
diff --git a/modules/rampart-samples/basic/sample06/src/org/apache/rampart/samples/sample06/PWCBHandler.java b/modules/rampart-samples/basic/sample06/src/org/apache/rampart/samples/sample06/PWCBHandler.java
deleted file mode 100644
index 5adb7d5..0000000
--- a/modules/rampart-samples/basic/sample06/src/org/apache/rampart/samples/sample06/PWCBHandler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample06;
-
-import org.apache.ws.security.WSPasswordCallback;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-import java.io.IOException;
-
-public class PWCBHandler implements CallbackHandler {
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
-            
-            String id = pwcb.getIdentifier();
-            if("client".equals(id)) {
-                pwcb.setPassword("apache");
-            } else if("service".equals(id)) {
-                pwcb.setPassword("apache");
-            }
-        }
-    }
-
-}
diff --git a/modules/rampart-samples/basic/sample06/src/org/apache/rampart/samples/sample06/SimpleService.java b/modules/rampart-samples/basic/sample06/src/org/apache/rampart/samples/sample06/SimpleService.java
deleted file mode 100644
index 185825e..0000000
--- a/modules/rampart-samples/basic/sample06/src/org/apache/rampart/samples/sample06/SimpleService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.apache.rampart.samples.sample06;
-/*
-
- * Copyright  2003-2005 The Apache Software Foundation.
- *
- *  Licensed 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.
- *
- */
-
-public class SimpleService {
-    
-    public String echo(String arg) {
-        return arg;
-    }
-}
diff --git a/modules/rampart-samples/basic/sample07/README.txt b/modules/rampart-samples/basic/sample07/README.txt
deleted file mode 100644
index f524604..0000000
--- a/modules/rampart-samples/basic/sample07/README.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Encrypt and sign messages
-
-Both client and servce are configured to first encrypt and then sign the 
-outgoing message and to verify and decrypt the incoming message using their 
-key pairs.
-	- See the "OutflowSecurity" and "InflowSecurity" parameters in the 
-      client.axis2.xml and serivces.xml files
-	
diff --git a/modules/rampart-samples/basic/sample07/client.axis2.xml b/modules/rampart-samples/basic/sample07/client.axis2.xml
deleted file mode 100644
index 79b5dcd..0000000
--- a/modules/rampart-samples/basic/sample07/client.axis2.xml
+++ /dev/null
@@ -1,487 +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.
-  -->
-
-<axisconfig name="AxisJava2.0">
-    
-    <module ref="rampart" />
-    
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Encrypt Signature</items>
-        <user>client</user>
-        <passwordCallbackClass>org.apache.rampart.samples.sample07.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>client.properties</signaturePropFile>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionUser>service</encryptionUser>
-      </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Encrypt Signature</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample07.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>client.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <!-- ================================================= -->
-    <!-- Parameters -->
-    <!-- ================================================= -->
-    <parameter name="hotdeployment">true</parameter>
-    <parameter name="hotupdate">false</parameter>
-    <parameter name="enableMTOM">false</parameter>
-    <parameter name="enableSwA">false</parameter>
-
-    <!--Uncomment if you want to enable file caching for attachments -->
-    <!--parameter name="cacheAttachments">true</parameter>
-    <parameter name="attachmentDIR"></parameter>
-    <parameter name="sizeThreshold">4000</parameter-->
-
-    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
-    <!--In some server environments, the available memory heap is limited and can fill up under load -->
-    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
-    <!--to reduce the memory needed for the cached WSDL definitions. -->
-    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
-                                                       
-    <!--This will give out the timout of the configuration contexts, in milliseconds-->
-    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
-
-    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
-    <!--that behavior.-->
-    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
-
-    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
-    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
-    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
-    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
-    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
-
-    <parameter name="userName">admin</parameter>
-    <parameter name="password">axis2</parameter>
-
-    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
-    <!--ServicesDirectory only works on the following cases-->
-    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
-    <!---When creating URL Based configurator with URL “file://”  -->
-    <!--- War based configurator with expanded case , -->
-
-    <!--All the other scenarios it will be ignored.-->
-    <!--<parameter name="ServicesDirectory">service</parameter>-->
-    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
-    <!--<parameter name="ModulesDirectory">modules</parameter>-->
-
-
-
-    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
-    <!--root which can configured using the following contextRoot parameter-->
-    <!--<parameter name="contextRoot">axis2</parameter>-->
-
-    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
-    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
-    <!--context path to proper Axis2 servlets-->
-    <!--<parameter name="servicePath">services</parameter>-->
-    <!--<parameter name="restPath">rest</parameter>-->
-
-    <!-- Following parameter will completely disable REST handling in Axis2-->
-    <parameter name="disableREST" locked="true">false</parameter>
-    
-    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
-    <parameter name="disableSOAP12" locked="true">false</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
-    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
-    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
-    
-
-    <!-- Following parameter will set the host name for the epr-->
-    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
-
-    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
-    <!-- use this parameter to override autodetected url -->
-    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
-
-
-    <!--    The way of adding listener to the system-->
-    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
-    <!--    </listener>-->
-
-    <!-- ================================================= -->
-    <!-- Message Receivers -->
-    <!-- ================================================= -->
-    <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
-    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
-    <!--any operation -->
-    <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
-     <messageReceivers>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-    </messageReceivers>
-
-    <!-- ================================================= -->
-    <!-- Message Formatter -->
-    <!-- ================================================= -->
-    <!--Following content type to message formatter mapping can be used to implement support for different message -->
-    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageFormatters>
-        <messageFormatter contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
-        <messageFormatter contentType="multipart/form-data"
-                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
-        <messageFormatter contentType="application/xml"
-                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
-        <messageFormatter contentType="text/xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-        <messageFormatter contentType="application/soap+xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-    </messageFormatters>
-
-    <!-- ================================================= -->
-    <!-- Message Builders -->
-    <!-- ================================================= -->
-    <!--Following content type to builder mapping can be used to implement support for different message -->
-    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageBuilders>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
-        <messageBuilder contentType="multipart/form-data"
-                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
-    </messageBuilders>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port">8080</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
-    </transportReceiver>
-
-    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
-    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
-        <parameter name="myTopicConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="myQueueConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="default">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-    </transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Listener  -->
-
-    <!-- the non blocking http transport based on HttpCore + NIO extensions
-    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
-        <parameter name="port" locked="false">9000</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportReceiver>-->
-
-    <!-- the non blocking https transport based on HttpCore + SSL-NIO extensions
-    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
-        <parameter name="port" locked="false">9002</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="SSLVerifyClient">require</parameter>
-            supports optional|require or defaults to none -->
-    <!--</transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Listener  -->
-    <!-- This is a sample configuration. It assumes a mail server running in localhost.
-         Listener pops  messages that comes to the email address red@localhost. Users
-         password is red. Listener connect to the server every 3000 milliseconds.
-         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. 
-         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-     -->
-    <!-- ================================================= -->
-    <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
-        <parameter name="mail.pop3.host">localhost</parameter>
-        <parameter name="mail.pop3.user">red</parameter>
-        <parameter name="mail.store.protocol">pop3</parameter>
-        <parameter name="transport.mail.pop3.password">red</parameter>
-        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
-        <parameter name="transport.listener.interval">3000</parameter>
-    </transportReceiver>-->
-
-    <!--Uncomment if you want to have TCP transport support-->
-    <!--transportReceiver name="tcp"
-                       class="org.apache.axis2.transport.tcp.TCPServer">
-        <parameter name="port">6060</parameter-->>
-        <!--If you want to give your own host address for EPR generation-->
-        <!--uncomment the following paramter , and set it as you required.-->
-        <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
-    <!-- /transportReceiver -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <!-- transportSender name="tcp"
-                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
-    <transportSender name="local"
-                     class="org.apache.axis2.transport.local.LocalTransportSender"/ -->
-    <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-
-        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
-        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
-    </transportSender>
-
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-    </transportSender>
-    <transportSender name="java"
-                     class="org.apache.axis2.transport.java.JavaTransportSender"/>
-
-    <!--<transportSender name="jms"-->
-                     <!--class="org.apache.axis2.transport.jms.JMSSender"/>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Sender  -->
-
-    <!-- the non-blocking http transport sender based on HttpCore + NIO extensions
-    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportSender>-->
-
-    <!-- the non-blocking https transport sender based on HttpCore + NIO SSL extensions
-    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
-            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
-    <!--</transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Sender  -->
-    <!--Only need to uncomment the sender. Configuration is achieved with every client.
-        At any instant mail host should be given. Sample configuration has been given.
-        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-   -->
-    <!-- ================================================= -->
-   <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
-        <parameter name="mail.smtp.host">localhost</parameter>
-    </transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Global Modules  -->
-    <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
-    <module ref="addressing"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <!--<moduleConfig name="addressing">-->
-    <!--<parameter name="addressingPara">N/A</parameter>-->
-    <!--</moduleConfig>-->
-
-    <!-- ================================================= -->
-    <!-- Clustering  -->
-    <!-- ================================================= -->
-    <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
-    <!--
-    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
-        <parameter name="param1">value1</parameter>
-        <parameter name="domain">apache.axis2.domain</parameter>
-        <parameter name="synchronizeAll">true</parameter>
-        <parameter name="maxRetries">10</parameter>
-        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
-            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
-        </configurationManager>
-        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
-            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
-        </contextManager>
-    </cluster>
-    -->
-
-    <!-- ================================================= -->
-    <!-- Phases  -->
-    <!-- ================================================= -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-samples/basic/sample07/services.xml b/modules/rampart-samples/basic/sample07/services.xml
deleted file mode 100644
index 0b12f2b..0000000
--- a/modules/rampart-samples/basic/sample07/services.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<!-- services.xml of sample-7 : Encryption and Signature -->
-<service>
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
-	</operation>    
-	<parameter name="ServiceClass" locked="false">org.apache.rampart.samples.sample07.SimpleService</parameter>
-		
-    <module ref="rampart" />
-	
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Encrypt Signature</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample07.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>service.properties</signaturePropFile>
-      </action>
-    </parameter>
-    
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Encrypt Signature</items>
-        <user>service</user>
-        <passwordCallbackClass>org.apache.rampart.samples.sample07.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>service.properties</signaturePropFile>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionUser>useReqSigCert</encryptionUser>
-      </action>
-    </parameter>
-</service>
diff --git a/modules/rampart-samples/basic/sample07/src/org/apache/rampart/samples/sample07/Client.java b/modules/rampart-samples/basic/sample07/src/org/apache/rampart/samples/sample07/Client.java
deleted file mode 100644
index c05d746..0000000
--- a/modules/rampart-samples/basic/sample07/src/org/apache/rampart/samples/sample07/Client.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample07;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-
-public class Client {
-
-    public static void main(String[] args) throws Exception {
-        
-        if(args.length != 2) {
-            System.out.println("Usage: $java Client endpoint_address client_repo_path");
-        }
-        
-        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml");
-        
-        ServiceClient client = new ServiceClient(ctx, null);
-        Options options = new Options();
-        options.setAction("urn:echo");
-        options.setTo(new EndpointReference(args[0]));
-        client.setOptions(options);
-        
-        OMElement response = client.sendReceive(getPayload("Hello world"));
-        
-        System.out.println(response);
-        
-    }
-    
-    private static OMElement getPayload(String value) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace ns = factory.createOMNamespace("http://sample07.samples.rampart.apache.org","ns1");
-        OMElement elem = factory.createOMElement("echo", ns);
-        OMElement childElem = factory.createOMElement("param0", null);
-        childElem.setText(value);
-        elem.addChild(childElem);
-        
-        return elem;
-    }
-    
-}
diff --git a/modules/rampart-samples/basic/sample07/src/org/apache/rampart/samples/sample07/PWCBHandler.java b/modules/rampart-samples/basic/sample07/src/org/apache/rampart/samples/sample07/PWCBHandler.java
deleted file mode 100644
index c698649..0000000
--- a/modules/rampart-samples/basic/sample07/src/org/apache/rampart/samples/sample07/PWCBHandler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample07;
-
-import org.apache.ws.security.WSPasswordCallback;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-import java.io.IOException;
-
-public class PWCBHandler implements CallbackHandler {
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
-            
-            String id = pwcb.getIdentifier();
-            if("client".equals(id)) {
-                pwcb.setPassword("apache");
-            } else if("service".equals(id)) {
-                pwcb.setPassword("apache");
-            }
-        }
-    }
-
-}
diff --git a/modules/rampart-samples/basic/sample07/src/org/apache/rampart/samples/sample07/SimpleService.java b/modules/rampart-samples/basic/sample07/src/org/apache/rampart/samples/sample07/SimpleService.java
deleted file mode 100644
index cd14fc0..0000000
--- a/modules/rampart-samples/basic/sample07/src/org/apache/rampart/samples/sample07/SimpleService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.apache.rampart.samples.sample07;
-/*
-
- * Copyright  2003-2005 The Apache Software Foundation.
- *
- *  Licensed 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.
- *
- */
-
-public class SimpleService {
-    
-    public String echo(String arg) {
-        return arg;
-    }
-}
diff --git a/modules/rampart-samples/basic/sample08/README.txt b/modules/rampart-samples/basic/sample08/README.txt
deleted file mode 100644
index 4643e47..0000000
--- a/modules/rampart-samples/basic/sample08/README.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Signing twice
-
-The client is configured to sign the outgoing message twice
-	- See the "OutflowSecurity" parameter in the client.axis2.xml
-	- Note the aditional <action> element that defines the second signature.
-	
-The service is configured to process it.
-	- See the "InflowSecurity" parameter in the services.xml. Not that we 
-      simply use "Signature Signature" as action items.
-
diff --git a/modules/rampart-samples/basic/sample08/client.axis2.xml b/modules/rampart-samples/basic/sample08/client.axis2.xml
deleted file mode 100644
index 87715ed..0000000
--- a/modules/rampart-samples/basic/sample08/client.axis2.xml
+++ /dev/null
@@ -1,488 +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.
-  -->
-
-<axisconfig name="AxisJava2.0">
-
-    <module ref="rampart" />
-
-    <!-- sample-8 : Double Signature -->
-    <parameter name="OutflowSecurity">
-
-        <action>
-            <items>Timestamp Signature</items>
-            <user>client</user>
-            <passwordCallbackClass>org.apache.rampart.samples.sample08.PWCBHandler</passwordCallbackClass>
-            <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-            <signatureParts>{Element}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}Timestamp</signatureParts>
-            <signaturePropFile>client.properties</signaturePropFile>
-        </action>
-
-        <action>
-            <items>Signature</items>
-            <user>client</user>
-            <passwordCallbackClass>org.apache.rampart.samples.sample08.PWCBHandler</passwordCallbackClass>
-            <signaturePropFile>client.properties</signaturePropFile>
-        </action>
-
-    </parameter>
-
-    <!-- ================================================= -->
-    <!-- Parameters -->
-    <!-- ================================================= -->
-    <parameter name="hotdeployment">true</parameter>
-    <parameter name="hotupdate">false</parameter>
-    <parameter name="enableMTOM">false</parameter>
-    <parameter name="enableSwA">false</parameter>
-
-    <!--Uncomment if you want to enable file caching for attachments -->
-    <!--parameter name="cacheAttachments">true</parameter>
-    <parameter name="attachmentDIR"></parameter>
-    <parameter name="sizeThreshold">4000</parameter-->
-
-    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
-    <!--In some server environments, the available memory heap is limited and can fill up under load -->
-    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
-    <!--to reduce the memory needed for the cached WSDL definitions. -->
-    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
-                                                       
-    <!--This will give out the timout of the configuration contexts, in milliseconds-->
-    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
-
-    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
-    <!--that behavior.-->
-    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
-
-    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
-    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
-    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
-    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
-    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
-
-    <parameter name="userName">admin</parameter>
-    <parameter name="password">axis2</parameter>
-
-    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
-    <!--ServicesDirectory only works on the following cases-->
-    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
-    <!---When creating URL Based configurator with URL “file://”  -->
-    <!--- War based configurator with expanded case , -->
-
-    <!--All the other scenarios it will be ignored.-->
-    <!--<parameter name="ServicesDirectory">service</parameter>-->
-    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
-    <!--<parameter name="ModulesDirectory">modules</parameter>-->
-
-
-
-    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
-    <!--root which can configured using the following contextRoot parameter-->
-    <!--<parameter name="contextRoot">axis2</parameter>-->
-
-    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
-    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
-    <!--context path to proper Axis2 servlets-->
-    <!--<parameter name="servicePath">services</parameter>-->
-    <!--<parameter name="restPath">rest</parameter>-->
-
-    <!-- Following parameter will completely disable REST handling in Axis2-->
-    <parameter name="disableREST" locked="true">false</parameter>
-    
-    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
-    <parameter name="disableSOAP12" locked="true">false</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
-    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
-    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
-    
-
-    <!-- Following parameter will set the host name for the epr-->
-    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
-
-    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
-    <!-- use this parameter to override autodetected url -->
-    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
-
-
-    <!--    The way of adding listener to the system-->
-    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
-    <!--    </listener>-->
-
-    <!-- ================================================= -->
-    <!-- Message Receivers -->
-    <!-- ================================================= -->
-    <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
-    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
-    <!--any operation -->
-    <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
-     <messageReceivers>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-    </messageReceivers>
-
-    <!-- ================================================= -->
-    <!-- Message Formatter -->
-    <!-- ================================================= -->
-    <!--Following content type to message formatter mapping can be used to implement support for different message -->
-    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageFormatters>
-        <messageFormatter contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
-        <messageFormatter contentType="multipart/form-data"
-                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
-        <messageFormatter contentType="application/xml"
-                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
-        <messageFormatter contentType="text/xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-        <messageFormatter contentType="application/soap+xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-    </messageFormatters>
-
-    <!-- ================================================= -->
-    <!-- Message Builders -->
-    <!-- ================================================= -->
-    <!--Following content type to builder mapping can be used to implement support for different message -->
-    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageBuilders>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
-        <messageBuilder contentType="multipart/form-data"
-                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
-    </messageBuilders>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port">8080</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
-    </transportReceiver>
-
-    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
-    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
-        <parameter name="myTopicConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="myQueueConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="default">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-    </transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Listener  -->
-
-    <!-- the non blocking http transport based on HttpCore + NIO extensions
-    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
-        <parameter name="port" locked="false">9000</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportReceiver>-->
-
-    <!-- the non blocking https transport based on HttpCore + SSL-NIO extensions
-    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
-        <parameter name="port" locked="false">9002</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="SSLVerifyClient">require</parameter>
-            supports optional|require or defaults to none -->
-    <!--</transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Listener  -->
-    <!-- This is a sample configuration. It assumes a mail server running in localhost.
-         Listener pops  messages that comes to the email address red@localhost. Users
-         password is red. Listener connect to the server every 3000 milliseconds.
-         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. 
-         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-     -->
-    <!-- ================================================= -->
-    <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
-        <parameter name="mail.pop3.host">localhost</parameter>
-        <parameter name="mail.pop3.user">red</parameter>
-        <parameter name="mail.store.protocol">pop3</parameter>
-        <parameter name="transport.mail.pop3.password">red</parameter>
-        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
-        <parameter name="transport.listener.interval">3000</parameter>
-    </transportReceiver>-->
-
-    <!--Uncomment if you want to have TCP transport support-->
-    <!--transportReceiver name="tcp"
-                       class="org.apache.axis2.transport.tcp.TCPServer">
-        <parameter name="port">6060</parameter-->>
-        <!--If you want to give your own host address for EPR generation-->
-        <!--uncomment the following paramter , and set it as you required.-->
-        <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
-    <!-- /transportReceiver -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <!-- transportSender name="tcp"
-                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
-    <transportSender name="local"
-                     class="org.apache.axis2.transport.local.LocalTransportSender"/ -->
-    <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-
-        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
-        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
-    </transportSender>
-
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-    </transportSender>
-    <transportSender name="java"
-                     class="org.apache.axis2.transport.java.JavaTransportSender"/>
-
-    <!--<transportSender name="jms"-->
-                     <!--class="org.apache.axis2.transport.jms.JMSSender"/>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Sender  -->
-
-    <!-- the non-blocking http transport sender based on HttpCore + NIO extensions
-    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportSender>-->
-
-    <!-- the non-blocking https transport sender based on HttpCore + NIO SSL extensions
-    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
-            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
-    <!--</transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Sender  -->
-    <!--Only need to uncomment the sender. Configuration is achieved with every client.
-        At any instant mail host should be given. Sample configuration has been given.
-        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-   -->
-    <!-- ================================================= -->
-   <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
-        <parameter name="mail.smtp.host">localhost</parameter>
-    </transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Global Modules  -->
-    <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
-    <module ref="addressing"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <!--<moduleConfig name="addressing">-->
-    <!--<parameter name="addressingPara">N/A</parameter>-->
-    <!--</moduleConfig>-->
-
-    <!-- ================================================= -->
-    <!-- Clustering  -->
-    <!-- ================================================= -->
-    <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
-    <!--
-    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
-        <parameter name="param1">value1</parameter>
-        <parameter name="domain">apache.axis2.domain</parameter>
-        <parameter name="synchronizeAll">true</parameter>
-        <parameter name="maxRetries">10</parameter>
-        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
-            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
-        </configurationManager>
-        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
-            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
-        </contextManager>
-    </cluster>
-    -->
-
-    <!-- ================================================= -->
-    <!-- Phases  -->
-    <!-- ================================================= -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-samples/basic/sample08/services.xml b/modules/rampart-samples/basic/sample08/services.xml
deleted file mode 100644
index 38a8ce2..0000000
--- a/modules/rampart-samples/basic/sample08/services.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<!-- services.xml of sample-8 : Double Signature -->
-<service>
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
-	</operation>    
-	<parameter name="ServiceClass" locked="false">org.apache.rampart.samples.sample08.SimpleService</parameter>
-	
-	<module ref="rampart" />
-	
-	<parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature Signature</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample08.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>service.properties</signaturePropFile>
-      </action>
-    </parameter>
-    
-</service>
diff --git a/modules/rampart-samples/basic/sample08/src/org/apache/rampart/samples/sample08/Client.java b/modules/rampart-samples/basic/sample08/src/org/apache/rampart/samples/sample08/Client.java
deleted file mode 100644
index c08c279..0000000
--- a/modules/rampart-samples/basic/sample08/src/org/apache/rampart/samples/sample08/Client.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample08;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-
-public class Client {
-
-    public static void main(String[] args) throws Exception {
-        
-        if(args.length != 2) {
-            System.out.println("Usage: $java Client endpoint_address client_repo_path");
-        }
-        
-        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml");
-        
-        ServiceClient client = new ServiceClient(ctx, null);
-        Options options = new Options();
-        options.setAction("urn:echo");
-        options.setTo(new EndpointReference(args[0]));
-        client.setOptions(options);
-        
-        OMElement response = client.sendReceive(getPayload("Hello world"));
-        
-        System.out.println(response);
-        
-    }
-    
-    private static OMElement getPayload(String value) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace ns = factory.createOMNamespace("http://sample08.samples.rampart.apache.org","ns1");
-        OMElement elem = factory.createOMElement("echo", ns);
-        OMElement childElem = factory.createOMElement("param0", null);
-        childElem.setText(value);
-        elem.addChild(childElem);
-        
-        return elem;
-    }
-    
-}
diff --git a/modules/rampart-samples/basic/sample08/src/org/apache/rampart/samples/sample08/PWCBHandler.java b/modules/rampart-samples/basic/sample08/src/org/apache/rampart/samples/sample08/PWCBHandler.java
deleted file mode 100644
index 4ec18ce..0000000
--- a/modules/rampart-samples/basic/sample08/src/org/apache/rampart/samples/sample08/PWCBHandler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample08;
-
-import org.apache.ws.security.WSPasswordCallback;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-import java.io.IOException;
-
-public class PWCBHandler implements CallbackHandler {
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
-            
-            String id = pwcb.getIdentifier();
-            if("client".equals(id)) {
-                pwcb.setPassword("apache");
-            } else if("service".equals(id)) {
-                pwcb.setPassword("apache");
-            }
-        }
-    }
-
-}
diff --git a/modules/rampart-samples/basic/sample08/src/org/apache/rampart/samples/sample08/SimpleService.java b/modules/rampart-samples/basic/sample08/src/org/apache/rampart/samples/sample08/SimpleService.java
deleted file mode 100644
index a61f706..0000000
--- a/modules/rampart-samples/basic/sample08/src/org/apache/rampart/samples/sample08/SimpleService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.apache.rampart.samples.sample08;
-/*
-
- * Copyright  2003-2005 The Apache Software Foundation.
- *
- *  Licensed 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.
- *
- */
-
-public class SimpleService {
-    
-    public String echo(String arg) {
-        return arg;
-    }
-}
diff --git a/modules/rampart-samples/basic/sample09/README.txt b/modules/rampart-samples/basic/sample09/README.txt
deleted file mode 100644
index 7202cc6..0000000
--- a/modules/rampart-samples/basic/sample09/README.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Encryption with a key known to both parties
-
-Both client and servce are configured to encrypt the outgoing message and to 
-decrypt incoming message using a known named key
-	- See the "OutflowSecurity" and "InflowSecurity" parameters in the 
-      client.axis2.xml and serivces.xml files
-    - Note the use of <EmbeddedKeyName>SessionKey</EmbeddedKeyName>
-    - Note that org.apache.rampart.samples.sample09.PWCBHandler sets the key
diff --git a/modules/rampart-samples/basic/sample09/client.axis2.xml b/modules/rampart-samples/basic/sample09/client.axis2.xml
deleted file mode 100644
index b6d6101..0000000
--- a/modules/rampart-samples/basic/sample09/client.axis2.xml
+++ /dev/null
@@ -1,487 +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.
-  -->
-
-<axisconfig name="AxisJava2.0">
-
-    <module ref="rampart" />
-
-    <parameter name="OutflowSecurity">
-        <action>
-            <items>Encrypt</items>
-            <user>client</user>
-            <encryptionKeyIdentifier>EmbeddedKeyName</encryptionKeyIdentifier>
-            <embeddedKeyCallbackClass>org.apache.rampart.samples.sample09.PWCBHandler</embeddedKeyCallbackClass>
-            <encryptionPropFile>client.properties</encryptionPropFile> 
-            <embeddedKeyName>SessionKey</embeddedKeyName>
-        </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-        <action>
-            <items>Encrypt</items>
-            <passwordCallbackClass>org.apache.rampart.samples.sample09.PWCBHandler</passwordCallbackClass>
-            <decryptionPropFile>client.properties</decryptionPropFile>
-            <isBSPCompliant>false</isBSPCompliant>
-        </action>
-    </parameter>
-
-    <!-- ================================================= -->
-    <!-- Parameters -->
-    <!-- ================================================= -->
-    <parameter name="hotdeployment">true</parameter>
-    <parameter name="hotupdate">false</parameter>
-    <parameter name="enableMTOM">false</parameter>
-    <parameter name="enableSwA">false</parameter>
-
-    <!--Uncomment if you want to enable file caching for attachments -->
-    <!--parameter name="cacheAttachments">true</parameter>
-    <parameter name="attachmentDIR"></parameter>
-    <parameter name="sizeThreshold">4000</parameter-->
-
-    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
-    <!--In some server environments, the available memory heap is limited and can fill up under load -->
-    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
-    <!--to reduce the memory needed for the cached WSDL definitions. -->
-    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
-                                                       
-    <!--This will give out the timout of the configuration contexts, in milliseconds-->
-    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
-
-    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
-    <!--that behavior.-->
-    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
-
-    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
-    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
-    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
-    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
-    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
-
-    <parameter name="userName">admin</parameter>
-    <parameter name="password">axis2</parameter>
-
-    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
-    <!--ServicesDirectory only works on the following cases-->
-    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
-    <!---When creating URL Based configurator with URL “file://”  -->
-    <!--- War based configurator with expanded case , -->
-
-    <!--All the other scenarios it will be ignored.-->
-    <!--<parameter name="ServicesDirectory">service</parameter>-->
-    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
-    <!--<parameter name="ModulesDirectory">modules</parameter>-->
-
-
-
-    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
-    <!--root which can configured using the following contextRoot parameter-->
-    <!--<parameter name="contextRoot">axis2</parameter>-->
-
-    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
-    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
-    <!--context path to proper Axis2 servlets-->
-    <!--<parameter name="servicePath">services</parameter>-->
-    <!--<parameter name="restPath">rest</parameter>-->
-
-    <!-- Following parameter will completely disable REST handling in Axis2-->
-    <parameter name="disableREST" locked="true">false</parameter>
-    
-    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
-    <parameter name="disableSOAP12" locked="true">false</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
-    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
-    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
-    
-
-    <!-- Following parameter will set the host name for the epr-->
-    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
-
-    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
-    <!-- use this parameter to override autodetected url -->
-    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
-
-
-    <!--    The way of adding listener to the system-->
-    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
-    <!--    </listener>-->
-
-    <!-- ================================================= -->
-    <!-- Message Receivers -->
-    <!-- ================================================= -->
-    <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
-    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
-    <!--any operation -->
-    <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
-     <messageReceivers>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-    </messageReceivers>
-
-    <!-- ================================================= -->
-    <!-- Message Formatter -->
-    <!-- ================================================= -->
-    <!--Following content type to message formatter mapping can be used to implement support for different message -->
-    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageFormatters>
-        <messageFormatter contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
-        <messageFormatter contentType="multipart/form-data"
-                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
-        <messageFormatter contentType="application/xml"
-                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
-        <messageFormatter contentType="text/xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-        <messageFormatter contentType="application/soap+xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-    </messageFormatters>
-
-    <!-- ================================================= -->
-    <!-- Message Builders -->
-    <!-- ================================================= -->
-    <!--Following content type to builder mapping can be used to implement support for different message -->
-    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageBuilders>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
-        <messageBuilder contentType="multipart/form-data"
-                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
-    </messageBuilders>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port">8080</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
-    </transportReceiver>
-
-    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
-    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
-        <parameter name="myTopicConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="myQueueConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="default">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-    </transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Listener  -->
-
-    <!-- the non blocking http transport based on HttpCore + NIO extensions
-    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
-        <parameter name="port" locked="false">9000</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportReceiver>-->
-
-    <!-- the non blocking https transport based on HttpCore + SSL-NIO extensions
-    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
-        <parameter name="port" locked="false">9002</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="SSLVerifyClient">require</parameter>
-            supports optional|require or defaults to none -->
-    <!--</transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Listener  -->
-    <!-- This is a sample configuration. It assumes a mail server running in localhost.
-         Listener pops  messages that comes to the email address red@localhost. Users
-         password is red. Listener connect to the server every 3000 milliseconds.
-         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. 
-         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-     -->
-    <!-- ================================================= -->
-    <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
-        <parameter name="mail.pop3.host">localhost</parameter>
-        <parameter name="mail.pop3.user">red</parameter>
-        <parameter name="mail.store.protocol">pop3</parameter>
-        <parameter name="transport.mail.pop3.password">red</parameter>
-        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
-        <parameter name="transport.listener.interval">3000</parameter>
-    </transportReceiver>-->
-
-    <!--Uncomment if you want to have TCP transport support-->
-    <!--transportReceiver name="tcp"
-                       class="org.apache.axis2.transport.tcp.TCPServer">
-        <parameter name="port">6060</parameter-->>
-        <!--If you want to give your own host address for EPR generation-->
-        <!--uncomment the following paramter , and set it as you required.-->
-        <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
-    <!-- /transportReceiver -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <!-- transportSender name="tcp"
-                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
-    <transportSender name="local"
-                     class="org.apache.axis2.transport.local.LocalTransportSender"/ -->
-    <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-
-        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
-        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
-    </transportSender>
-
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-    </transportSender>
-    <transportSender name="java"
-                     class="org.apache.axis2.transport.java.JavaTransportSender"/>
-
-    <!--<transportSender name="jms"-->
-                     <!--class="org.apache.axis2.transport.jms.JMSSender"/>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Sender  -->
-
-    <!-- the non-blocking http transport sender based on HttpCore + NIO extensions
-    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportSender>-->
-
-    <!-- the non-blocking https transport sender based on HttpCore + NIO SSL extensions
-    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
-            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
-    <!--</transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Sender  -->
-    <!--Only need to uncomment the sender. Configuration is achieved with every client.
-        At any instant mail host should be given. Sample configuration has been given.
-        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-   -->
-    <!-- ================================================= -->
-   <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
-        <parameter name="mail.smtp.host">localhost</parameter>
-    </transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Global Modules  -->
-    <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
-    <module ref="addressing"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <!--<moduleConfig name="addressing">-->
-    <!--<parameter name="addressingPara">N/A</parameter>-->
-    <!--</moduleConfig>-->
-
-    <!-- ================================================= -->
-    <!-- Clustering  -->
-    <!-- ================================================= -->
-    <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
-    <!--
-    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
-        <parameter name="param1">value1</parameter>
-        <parameter name="domain">apache.axis2.domain</parameter>
-        <parameter name="synchronizeAll">true</parameter>
-        <parameter name="maxRetries">10</parameter>
-        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
-            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
-        </configurationManager>
-        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
-            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
-        </contextManager>
-    </cluster>
-    -->
-
-    <!-- ================================================= -->
-    <!-- Phases  -->
-    <!-- ================================================= -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-samples/basic/sample09/services.xml b/modules/rampart-samples/basic/sample09/services.xml
deleted file mode 100644
index 9a12629..0000000
--- a/modules/rampart-samples/basic/sample09/services.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<!-- services.xml of sample-9 : Encryption using a known key -->
-<service>
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
-	</operation>    
-	<parameter name="ServiceClass" locked="false">org.apache.rampart.samples.sample09.SimpleService</parameter>
-	
-	<module ref="rampart" />
-	
-    <parameter name="InflowSecurity">
-        <action>
-            <items>Encrypt</items>
-            <passwordCallbackClass>org.apache.rampart.samples.sample09.PWCBHandler</passwordCallbackClass>
-            <decryptionPropFile>service.properties</decryptionPropFile>
-            <isBSPCompliant>false</isBSPCompliant>
-        </action>
-    </parameter>
-    
-    <parameter name="OutflowSecurity">
-        <action>
-            <items>Encrypt</items>
-            <user>service</user>
-            <encryptionKeyIdentifier>EmbeddedKeyName</encryptionKeyIdentifier>
-            <encryptionPropFile>service.properties</encryptionPropFile>
-            <embeddedKeyCallbackClass>org.apache.rampart.samples.sample09.PWCBHandler</embeddedKeyCallbackClass>
-            <embeddedKeyName>SessionKey</embeddedKeyName>
-        </action>
-    </parameter>
-    
-</service>
diff --git a/modules/rampart-samples/basic/sample09/src/org/apache/rampart/samples/sample09/Client.java b/modules/rampart-samples/basic/sample09/src/org/apache/rampart/samples/sample09/Client.java
deleted file mode 100644
index 9478f1e..0000000
--- a/modules/rampart-samples/basic/sample09/src/org/apache/rampart/samples/sample09/Client.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample09;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-
-public class Client {
-
-    public static void main(String[] args) throws Exception {
-        
-        if(args.length != 2) {
-            System.out.println("Usage: $java Client endpoint_address client_repo_path");
-        }
-        
-        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml");
-        
-        ServiceClient client = new ServiceClient(ctx, null);
-        Options options = new Options();
-        options.setAction("urn:echo");
-        options.setTo(new EndpointReference(args[0]));
-        client.setOptions(options);
-        
-        OMElement response = client.sendReceive(getPayload("Hello world"));
-        
-        System.out.println(response);
-        
-    }
-    
-    private static OMElement getPayload(String value) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace ns = factory.createOMNamespace("http://sample09.samples.rampart.apache.org","ns1");
-        OMElement elem = factory.createOMElement("echo", ns);
-        OMElement childElem = factory.createOMElement("param0", null);
-        childElem.setText(value);
-        elem.addChild(childElem);
-        
-        return elem;
-    }
-    
-}
diff --git a/modules/rampart-samples/basic/sample09/src/org/apache/rampart/samples/sample09/PWCBHandler.java b/modules/rampart-samples/basic/sample09/src/org/apache/rampart/samples/sample09/PWCBHandler.java
deleted file mode 100644
index b1911f7..0000000
--- a/modules/rampart-samples/basic/sample09/src/org/apache/rampart/samples/sample09/PWCBHandler.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample09;
-
-import org.apache.ws.security.WSPasswordCallback;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-import java.io.IOException;
-
-public class PWCBHandler implements CallbackHandler {
-
-    private static final byte[] key = {
-
-    (byte) 0x31, (byte) 0xfd, (byte) 0xcb, (byte) 0xda, (byte) 0xfb,
-
-    (byte) 0xcd, (byte) 0x6b, (byte) 0xa8, (byte) 0xe6, (byte) 0x19,
-
-    (byte) 0xa7, (byte) 0xbf, (byte) 0x51, (byte) 0xf7, (byte) 0xc7,
-
-    (byte) 0x3e };
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            WSPasswordCallback pwcb = (WSPasswordCallback) callbacks[i];
-
-            if (pwcb.getUsage() == WSPasswordCallback.SECRET_KEY) {
-                pwcb.setKey(key);
-            }
-        }
-    }
-
-}
diff --git a/modules/rampart-samples/basic/sample09/src/org/apache/rampart/samples/sample09/SimpleService.java b/modules/rampart-samples/basic/sample09/src/org/apache/rampart/samples/sample09/SimpleService.java
deleted file mode 100644
index 7862caf..0000000
--- a/modules/rampart-samples/basic/sample09/src/org/apache/rampart/samples/sample09/SimpleService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.apache.rampart.samples.sample09;
-/*
-
- * Copyright  2003-2005 The Apache Software Foundation.
- *
- *  Licensed 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.
- *
- */
-
-public class SimpleService {
-    
-    public String echo(String arg) {
-        return arg;
-    }
-}
diff --git a/modules/rampart-samples/basic/sample10/README.txt b/modules/rampart-samples/basic/sample10/README.txt
deleted file mode 100644
index 0ad0c6a..0000000
--- a/modules/rampart-samples/basic/sample10/README.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Sign and encrypt messages
-
-Both client and servce are configured to first sign and then encrypt the 
-outgoing message and to decrypt and verify the incoming message using their 
-key pairs.
-	- See the "OutflowSecurity" and "InflowSecurity" parameters in the 
-      client.axis2.xml and serivces.xml files
-    - Note the use of <optimizeParts>[xpath expression]</optimizeParts>
diff --git a/modules/rampart-samples/basic/sample10/client.axis2.xml b/modules/rampart-samples/basic/sample10/client.axis2.xml
deleted file mode 100644
index 66ae032..0000000
--- a/modules/rampart-samples/basic/sample10/client.axis2.xml
+++ /dev/null
@@ -1,491 +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.
-  -->
-
-<axisconfig name="AxisJava2.0">
-    <module ref="rampart" />
-
-    <!-- sample-10 : MTOM optimize encrypted content -->
-    
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <user>client</user>
-        <passwordCallbackClass>org.apache.rampart.samples.sample10.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>client.properties</signaturePropFile>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionUser>service</encryptionUser>
-        
-        <optimizeParts>//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue</optimizeParts>
-        
-      </action>
-    </parameter>
-
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample10.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>client.properties</signaturePropFile>
-      </action>
-    </parameter>
-
-    <!-- ================================================= -->
-    <!-- Parameters -->
-    <!-- ================================================= -->
-    <parameter name="hotdeployment">true</parameter>
-    <parameter name="hotupdate">false</parameter>
-    <parameter name="enableMTOM">true</parameter>
-    <parameter name="enableSwA">false</parameter>
-
-    <!--Uncomment if you want to enable file caching for attachments -->
-    <!--parameter name="cacheAttachments">true</parameter>
-    <parameter name="attachmentDIR"></parameter>
-    <parameter name="sizeThreshold">4000</parameter-->
-
-    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
-    <!--In some server environments, the available memory heap is limited and can fill up under load -->
-    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
-    <!--to reduce the memory needed for the cached WSDL definitions. -->
-    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
-                                                       
-    <!--This will give out the timout of the configuration contexts, in milliseconds-->
-    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
-
-    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
-    <!--that behavior.-->
-    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
-
-    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
-    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
-    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
-    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
-    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
-
-    <parameter name="userName">admin</parameter>
-    <parameter name="password">axis2</parameter>
-
-    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
-    <!--ServicesDirectory only works on the following cases-->
-    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
-    <!---When creating URL Based configurator with URL “file://”  -->
-    <!--- War based configurator with expanded case , -->
-
-    <!--All the other scenarios it will be ignored.-->
-    <!--<parameter name="ServicesDirectory">service</parameter>-->
-    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
-    <!--<parameter name="ModulesDirectory">modules</parameter>-->
-
-
-
-    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
-    <!--root which can configured using the following contextRoot parameter-->
-    <!--<parameter name="contextRoot">axis2</parameter>-->
-
-    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
-    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
-    <!--context path to proper Axis2 servlets-->
-    <!--<parameter name="servicePath">services</parameter>-->
-    <!--<parameter name="restPath">rest</parameter>-->
-
-    <!-- Following parameter will completely disable REST handling in Axis2-->
-    <parameter name="disableREST" locked="true">false</parameter>
-    
-    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
-    <parameter name="disableSOAP12" locked="true">false</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
-    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
-    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
-    
-
-    <!-- Following parameter will set the host name for the epr-->
-    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
-
-    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
-    <!-- use this parameter to override autodetected url -->
-    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
-
-
-    <!--    The way of adding listener to the system-->
-    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
-    <!--    </listener>-->
-
-    <!-- ================================================= -->
-    <!-- Message Receivers -->
-    <!-- ================================================= -->
-    <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
-    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
-    <!--any operation -->
-    <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
-     <messageReceivers>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-    </messageReceivers>
-
-    <!-- ================================================= -->
-    <!-- Message Formatter -->
-    <!-- ================================================= -->
-    <!--Following content type to message formatter mapping can be used to implement support for different message -->
-    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageFormatters>
-        <messageFormatter contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
-        <messageFormatter contentType="multipart/form-data"
-                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
-        <messageFormatter contentType="application/xml"
-                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
-        <messageFormatter contentType="text/xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-        <messageFormatter contentType="application/soap+xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-    </messageFormatters>
-
-    <!-- ================================================= -->
-    <!-- Message Builders -->
-    <!-- ================================================= -->
-    <!--Following content type to builder mapping can be used to implement support for different message -->
-    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageBuilders>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
-        <messageBuilder contentType="multipart/form-data"
-                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
-    </messageBuilders>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port">8080</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
-    </transportReceiver>
-
-    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
-    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
-        <parameter name="myTopicConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="myQueueConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="default">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-    </transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Listener  -->
-
-    <!-- the non blocking http transport based on HttpCore + NIO extensions
-    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
-        <parameter name="port" locked="false">9000</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportReceiver>-->
-
-    <!-- the non blocking https transport based on HttpCore + SSL-NIO extensions
-    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
-        <parameter name="port" locked="false">9002</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="SSLVerifyClient">require</parameter>
-            supports optional|require or defaults to none -->
-    <!--</transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Listener  -->
-    <!-- This is a sample configuration. It assumes a mail server running in localhost.
-         Listener pops  messages that comes to the email address red@localhost. Users
-         password is red. Listener connect to the server every 3000 milliseconds.
-         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. 
-         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-     -->
-    <!-- ================================================= -->
-    <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
-        <parameter name="mail.pop3.host">localhost</parameter>
-        <parameter name="mail.pop3.user">red</parameter>
-        <parameter name="mail.store.protocol">pop3</parameter>
-        <parameter name="transport.mail.pop3.password">red</parameter>
-        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
-        <parameter name="transport.listener.interval">3000</parameter>
-    </transportReceiver>-->
-
-    <!--Uncomment if you want to have TCP transport support-->
-    <!--transportReceiver name="tcp"
-                       class="org.apache.axis2.transport.tcp.TCPServer">
-        <parameter name="port">6060</parameter-->>
-        <!--If you want to give your own host address for EPR generation-->
-        <!--uncomment the following paramter , and set it as you required.-->
-        <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
-    <!-- /transportReceiver -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <!-- transportSender name="tcp"
-                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
-    <transportSender name="local"
-                     class="org.apache.axis2.transport.local.LocalTransportSender"/ -->
-    <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-
-        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
-        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
-    </transportSender>
-
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-    </transportSender>
-    <transportSender name="java"
-                     class="org.apache.axis2.transport.java.JavaTransportSender"/>
-
-    <!--<transportSender name="jms"-->
-                     <!--class="org.apache.axis2.transport.jms.JMSSender"/>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Sender  -->
-
-    <!-- the non-blocking http transport sender based on HttpCore + NIO extensions
-    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportSender>-->
-
-    <!-- the non-blocking https transport sender based on HttpCore + NIO SSL extensions
-    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
-            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
-    <!--</transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Sender  -->
-    <!--Only need to uncomment the sender. Configuration is achieved with every client.
-        At any instant mail host should be given. Sample configuration has been given.
-        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-   -->
-    <!-- ================================================= -->
-   <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
-        <parameter name="mail.smtp.host">localhost</parameter>
-    </transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Global Modules  -->
-    <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
-    <module ref="addressing"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <!--<moduleConfig name="addressing">-->
-    <!--<parameter name="addressingPara">N/A</parameter>-->
-    <!--</moduleConfig>-->
-
-    <!-- ================================================= -->
-    <!-- Clustering  -->
-    <!-- ================================================= -->
-    <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
-    <!--
-    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
-        <parameter name="param1">value1</parameter>
-        <parameter name="domain">apache.axis2.domain</parameter>
-        <parameter name="synchronizeAll">true</parameter>
-        <parameter name="maxRetries">10</parameter>
-        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
-            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
-        </configurationManager>
-        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
-            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
-        </contextManager>
-    </cluster>
-    -->
-
-    <!-- ================================================= -->
-    <!-- Phases  -->
-    <!-- ================================================= -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-samples/basic/sample10/services.xml b/modules/rampart-samples/basic/sample10/services.xml
deleted file mode 100644
index 8cada6d..0000000
--- a/modules/rampart-samples/basic/sample10/services.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<!-- services.xml of sample-10 : MTOM optimize encrypted content -->
-<service>
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
-	</operation>    
-	<parameter name="ServiceClass" locked="false">org.apache.rampart.samples.sample10.SimpleService</parameter>
-	
-	<module ref="rampart" />
-	
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample10.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>service.properties</signaturePropFile>
-      </action>
-    </parameter>
-    
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <user>service</user>
-        <passwordCallbackClass>org.apache.rampart.samples.sample10.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>service.properties</signaturePropFile>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionUser>useReqSigCert</encryptionUser>
-      </action>
-    </parameter>
-    
-</service>
diff --git a/modules/rampart-samples/basic/sample10/src/org/apache/rampart/samples/sample10/Client.java b/modules/rampart-samples/basic/sample10/src/org/apache/rampart/samples/sample10/Client.java
deleted file mode 100644
index 1704002..0000000
--- a/modules/rampart-samples/basic/sample10/src/org/apache/rampart/samples/sample10/Client.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample10;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-
-public class Client {
-
-    public static void main(String[] args) throws Exception {
-        
-        if(args.length != 2) {
-            System.out.println("Usage: $java Client endpoint_address client_repo_path");
-        }
-        
-        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml");
-        
-        ServiceClient client = new ServiceClient(ctx, null);
-        Options options = new Options();
-        options.setAction("urn:echo");
-        options.setTo(new EndpointReference(args[0]));
-        client.setOptions(options);
-        
-        OMElement response = client.sendReceive(getPayload("Hello world"));
-        
-        System.out.println(response);
-        
-    }
-    
-    private static OMElement getPayload(String value) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace ns = factory.createOMNamespace("http://sample10.samples.rampart.apache.org","ns1");
-        OMElement elem = factory.createOMElement("echo", ns);
-        OMElement childElem = factory.createOMElement("param0", null);
-        childElem.setText(value);
-        elem.addChild(childElem);
-        
-        return elem;
-    }
-    
-}
diff --git a/modules/rampart-samples/basic/sample10/src/org/apache/rampart/samples/sample10/PWCBHandler.java b/modules/rampart-samples/basic/sample10/src/org/apache/rampart/samples/sample10/PWCBHandler.java
deleted file mode 100644
index 9e35df8..0000000
--- a/modules/rampart-samples/basic/sample10/src/org/apache/rampart/samples/sample10/PWCBHandler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample10;
-
-import org.apache.ws.security.WSPasswordCallback;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-import java.io.IOException;
-
-public class PWCBHandler implements CallbackHandler {
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
-            
-            String id = pwcb.getIdentifier();
-            if("client".equals(id)) {
-                pwcb.setPassword("apache");
-            } else if("service".equals(id)) {
-                pwcb.setPassword("apache");
-            }
-        }
-    }
-
-}
diff --git a/modules/rampart-samples/basic/sample10/src/org/apache/rampart/samples/sample10/SimpleService.java b/modules/rampart-samples/basic/sample10/src/org/apache/rampart/samples/sample10/SimpleService.java
deleted file mode 100644
index 93743ea..0000000
--- a/modules/rampart-samples/basic/sample10/src/org/apache/rampart/samples/sample10/SimpleService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.apache.rampart.samples.sample10;
-/*
-
- * Copyright  2003-2005 The Apache Software Foundation.
- *
- *  Licensed 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.
- *
- */
-
-public class SimpleService {
-    
-    public String echo(String arg) {
-        return arg;
-    }
-}
diff --git a/modules/rampart-samples/basic/sample11/README.txt b/modules/rampart-samples/basic/sample11/README.txt
deleted file mode 100644
index 2a60545..0000000
--- a/modules/rampart-samples/basic/sample11/README.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Dynamic configuration : Get rid of the config files ... let's use code!
-
-Both client and servce are configured to first sign and then encrypt the 
-outgoing message and to decrypt and verify the incoming message using their 
-key pairs.
-	- Note that we don't use any parameters in the client.axis2.xml
-    - See org.apache.rampart.samples.sample11.Client's getOutflowConfiguration()
-      getInflowConfiguration() methods and their usage.
diff --git a/modules/rampart-samples/basic/sample11/client.axis2.xml b/modules/rampart-samples/basic/sample11/client.axis2.xml
deleted file mode 100644
index ab60d0c..0000000
--- a/modules/rampart-samples/basic/sample11/client.axis2.xml
+++ /dev/null
@@ -1,464 +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.
-  -->
-
-<axisconfig name="AxisJava2.0">
-    <!-- ================================================= -->
-    <!-- Parameters -->
-    <!-- ================================================= -->
-    <parameter name="hotdeployment">true</parameter>
-    <parameter name="hotupdate">false</parameter>
-    <parameter name="enableMTOM">false</parameter>
-    <parameter name="enableSwA">false</parameter>
-
-    <!--Uncomment if you want to enable file caching for attachments -->
-    <!--parameter name="cacheAttachments">true</parameter>
-    <parameter name="attachmentDIR"></parameter>
-    <parameter name="sizeThreshold">4000</parameter-->
-
-    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
-    <!--In some server environments, the available memory heap is limited and can fill up under load -->
-    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
-    <!--to reduce the memory needed for the cached WSDL definitions. -->
-    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
-                                                       
-    <!--This will give out the timout of the configuration contexts, in milliseconds-->
-    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
-
-    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
-    <!--that behavior.-->
-    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
-
-    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
-    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
-    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
-    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
-    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
-
-    <parameter name="userName">admin</parameter>
-    <parameter name="password">axis2</parameter>
-
-    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
-    <!--ServicesDirectory only works on the following cases-->
-    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
-    <!---When creating URL Based configurator with URL “file://”  -->
-    <!--- War based configurator with expanded case , -->
-
-    <!--All the other scenarios it will be ignored.-->
-    <!--<parameter name="ServicesDirectory">service</parameter>-->
-    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
-    <!--<parameter name="ModulesDirectory">modules</parameter>-->
-
-
-
-    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
-    <!--root which can configured using the following contextRoot parameter-->
-    <!--<parameter name="contextRoot">axis2</parameter>-->
-
-    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
-    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
-    <!--context path to proper Axis2 servlets-->
-    <!--<parameter name="servicePath">services</parameter>-->
-    <!--<parameter name="restPath">rest</parameter>-->
-
-    <!-- Following parameter will completely disable REST handling in Axis2-->
-    <parameter name="disableREST" locked="true">false</parameter>
-    
-    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
-    <parameter name="disableSOAP12" locked="true">false</parameter>
-
-    <!-- ================================================= -->
-    <!-- Deployers -->
-    <!-- ================================================= -->
-
-    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
-    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
-        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
-        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
-    </deployer>
-    
-    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
-    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
-    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
-    
-
-    <!-- Following parameter will set the host name for the epr-->
-    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
-
-    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
-    <!-- use this parameter to override autodetected url -->
-    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
-
-
-    <!--    The way of adding listener to the system-->
-    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
-    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
-    <!--    </listener>-->
-
-    <!-- ================================================= -->
-    <!-- Message Receivers -->
-    <!-- ================================================= -->
-    <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
-    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
-    <!--any operation -->
-    <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
-     <messageReceivers>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
-                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
-        <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
-                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
-    </messageReceivers>
-
-    <!-- ================================================= -->
-    <!-- Message Formatter -->
-    <!-- ================================================= -->
-    <!--Following content type to message formatter mapping can be used to implement support for different message -->
-    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageFormatters>
-        <messageFormatter contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
-        <messageFormatter contentType="multipart/form-data"
-                         class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
-        <messageFormatter contentType="application/xml"
-                         class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
-        <messageFormatter contentType="text/xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-        <messageFormatter contentType="application/soap+xml"
-                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
-    </messageFormatters>
-
-    <!-- ================================================= -->
-    <!-- Message Builders -->
-    <!-- ================================================= -->
-    <!--Following content type to builder mapping can be used to implement support for different message -->
-    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
-    <messageBuilders>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/xml"
-                         class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
-        <messageBuilder contentType="application/x-www-form-urlencoded"
-                         class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
-        <messageBuilder contentType="multipart/form-data"
-                         class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
-    </messageBuilders>
-
-    <!-- ================================================= -->
-    <!-- Transport Ins -->
-    <!-- ================================================= -->
-    <transportReceiver name="http"
-                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
-        <parameter name="port">8080</parameter>
-        <!-- Here is the complete list of supported parameters (see example settings further below):
-            port: the port to listen on (default 6060)
-            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
-            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
-            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
-            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
-                                false to minimize bandwidth consumption by combining segments
-            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
-            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
-                                       note that default queue never fills up:  see HttpFactory
-            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
-                                  note that no such threads can exist with default unbounded request queue
-            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
-        -->
-        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
-        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
-        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
-        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
-        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
-        <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter>                     -->
-        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
-        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
-    </transportReceiver>
-
-    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
-    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
-        <parameter name="myTopicConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="myQueueConnectionFactory">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-
-        <parameter name="default">
-            <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
-            <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
-            <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
-        </parameter>
-    </transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Listener  -->
-
-    <!-- the non blocking http transport based on HttpCore + NIO extensions
-    <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.HttpCoreNIOListener">
-        <parameter name="port" locked="false">9000</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportReceiver>-->
-
-    <!-- the non blocking https transport based on HttpCore + SSL-NIO extensions
-    <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
-        <parameter name="port" locked="false">9002</parameter>
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="SSLVerifyClient">require</parameter>
-            supports optional|require or defaults to none -->
-    <!--</transportReceiver>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Listener  -->
-    <!-- This is a sample configuration. It assumes a mail server running in localhost.
-         Listener pops  messages that comes to the email address red@localhost. Users
-         password is red. Listener connect to the server every 3000 milliseconds.
-         Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. 
-         http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-     -->
-    <!-- ================================================= -->
-    <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
-        <parameter name="mail.pop3.host">localhost</parameter>
-        <parameter name="mail.pop3.user">red</parameter>
-        <parameter name="mail.store.protocol">pop3</parameter>
-        <parameter name="transport.mail.pop3.password">red</parameter>
-        <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
-        <parameter name="transport.listener.interval">3000</parameter>
-    </transportReceiver>-->
-
-    <!--Uncomment if you want to have TCP transport support-->
-    <!--transportReceiver name="tcp"
-                       class="org.apache.axis2.transport.tcp.TCPServer">
-        <parameter name="port">6060</parameter-->>
-        <!--If you want to give your own host address for EPR generation-->
-        <!--uncomment the following paramter , and set it as you required.-->
-        <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
-    <!-- /transportReceiver -->
-
-    <!-- ================================================= -->
-    <!-- Transport Outs -->
-    <!-- ================================================= -->
-
-    <!-- transportSender name="tcp"
-                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
-    <transportSender name="local"
-                     class="org.apache.axis2.transport.local.LocalTransportSender"/ -->
-    <transportSender name="http"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-
-        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
-        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
-    </transportSender>
-
-    <transportSender name="https"
-                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
-        <parameter name="PROTOCOL">HTTP/1.1</parameter>
-        <parameter name="Transfer-Encoding">chunked</parameter>
-    </transportSender>
-    <transportSender name="java"
-                     class="org.apache.axis2.transport.java.JavaTransportSender"/>
-
-    <!--<transportSender name="jms"-->
-                     <!--class="org.apache.axis2.transport.jms.JMSSender"/>-->
-
-    <!-- ================================================= -->
-    <!-- Non-blocking http/s Transport Sender  -->
-
-    <!-- the non-blocking http transport sender based on HttpCore + NIO extensions
-    <transportSender name="http"  class="org.apache.axis2.transport.nhttp.HttpCoreNIOSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-    </transportSender>-->
-
-    <!-- the non-blocking https transport sender based on HttpCore + NIO SSL extensions
-    <transportSender name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender">
-        <parameter name="non-blocking" locked="false">true</parameter>
-        <parameter name="keystore" locked="false">
-            <KeyStore>
-                <Location>identity.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-                <KeyPassword>password</KeyPassword>
-            </KeyStore>
-        </parameter>
-        <parameter name="truststore" locked="false">
-            <TrustStore>
-                <Location>trust.jks</Location>
-                <Type>JKS</Type>
-                <Password>password</Password>
-            </TrustStore>
-        </parameter>-->
-        <!--<parameter name="HostnameVerifier">DefaultAndLocalhost</parameter>
-            supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
-    <!--</transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Mail Transport Sender  -->
-    <!--Only need to uncomment the sender. Configuration is achieved with every client.
-        At any instant mail host should be given. Sample configuration has been given.
-        http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
-   -->
-    <!-- ================================================= -->
-   <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
-        <parameter name="mail.smtp.host">localhost</parameter>
-    </transportSender>-->
-
-    <!-- ================================================= -->
-    <!-- Global Modules  -->
-    <!-- ================================================= -->
-    <!-- Comment this to disable Addressing -->
-    <module ref="addressing"/>
-
-    <!--Configuring module , providing parameters for modules whether they refer or not-->
-    <!--<moduleConfig name="addressing">-->
-    <!--<parameter name="addressingPara">N/A</parameter>-->
-    <!--</moduleConfig>-->
-
-    <!-- ================================================= -->
-    <!-- Clustering  -->
-    <!-- ================================================= -->
-    <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
-    <!--
-    <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
-        <parameter name="param1">value1</parameter>
-        <parameter name="domain">apache.axis2.domain</parameter>
-        <parameter name="synchronizeAll">true</parameter>
-        <parameter name="maxRetries">10</parameter>
-        <configurationManager class="org.apache.axis2.cluster.configuration.TribesConfigurationManager">
-            <listener class="org.apache.axis2.cluster.configuration.DefaultConfigurationManagerListener"/>
-        </configurationManager>
-        <contextManager class="org.apache.axis2.cluster.context.TribesContextManager">
-            <listener class="org.apache.axis2.cluster.context.DefaultContextManagerListener"/>
-        </contextManager>
-    </cluster>
-    -->
-
-    <!-- ================================================= -->
-    <!-- Phases  -->
-    <!-- ================================================= -->
-    <phaseOrder type="InFlow">
-        <!--  System predefined phases       -->
-        <phase name="Transport">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
-                <order phase="Transport"/>
-            </handler>
-        </phase>
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--  System predefined phases       -->
-        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
-        <phase name="OperationInPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutPhase"/>
-        <!--system predefined phase-->
-        <!--these phase will run irrespective of the service-->
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-    <phaseOrder type="InFaultFlow">
-        <phase name="Addressing">
-             <handler name="AddressingBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
-                 <order phase="Addressing"/>
-            </handler>
-        </phase>
-        <phase name="Security"/>
-        <phase name="PreDispatch"/>
-        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
-            <handler name="RequestURIBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
-            <handler name="SOAPActionBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
-            <handler name="RequestURIOperationDispatcher"
-                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
-            <handler name="SOAPMessageBodyBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
-
-            <handler name="HTTPLocationBasedDispatcher"
-                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
-        </phase>
-        <phase name="RMPhase"/>
-        <!--      user can add his own phases to this area  -->
-        <phase name="OperationInFaultPhase"/>
-        <phase name="soapmonitorPhase"/>
-    </phaseOrder>
-    <phaseOrder type="OutFaultFlow">
-        <!--      user can add his own phases to this area  -->
-        <phase name="soapmonitorPhase"/>
-        <phase name="OperationOutFaultPhase"/>
-        <phase name="RMPhase"/>
-        <phase name="PolicyDetermination"/>
-        <phase name="MessageOut"/>
-        <phase name="Security"/>
-    </phaseOrder>
-</axisconfig>
-
diff --git a/modules/rampart-samples/basic/sample11/services.xml b/modules/rampart-samples/basic/sample11/services.xml
deleted file mode 100644
index 28715e1..0000000
--- a/modules/rampart-samples/basic/sample11/services.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<!-- services.xml of sample-11 : Dynamic client configuration -->
-<service>
-	<operation name="echo">
-		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
-	</operation>    
-	<parameter name="ServiceClass" locked="false">org.apache.rampart.samples.sample11.SimpleService</parameter>
-	
-		<module ref="rampart" />
-	
-    <parameter name="InflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <passwordCallbackClass>org.apache.rampart.samples.sample11.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>service.properties</signaturePropFile>
-      </action>
-    </parameter>
-    
-    <parameter name="OutflowSecurity">
-      <action>
-        <items>Timestamp Signature Encrypt</items>
-        <user>service</user>
-        <passwordCallbackClass>org.apache.rampart.samples.sample11.PWCBHandler</passwordCallbackClass>
-        <signaturePropFile>service.properties</signaturePropFile>
-        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
-        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
-        <encryptionUser>useReqSigCert</encryptionUser>
-      </action>
-    </parameter>
-</service>
diff --git a/modules/rampart-samples/basic/sample11/src/org/apache/rampart/samples/sample11/Client.java b/modules/rampart-samples/basic/sample11/src/org/apache/rampart/samples/sample11/Client.java
deleted file mode 100644
index 5d53eb1..0000000
--- a/modules/rampart-samples/basic/sample11/src/org/apache/rampart/samples/sample11/Client.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample11;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.client.Options;
-import org.apache.axis2.client.ServiceClient;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-import org.apache.axis2.description.Parameter;
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.rampart.handler.config.InflowConfiguration;
-import org.apache.rampart.handler.config.OutflowConfiguration;
-
-public class Client {
-
-    public static void main(String[] args) throws Exception {
-        
-        if(args.length != 2) {
-            System.out.println("Usage: $java Client endpoint_address client_repo_path");
-        }
-        
-        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml");
-        
-        ServiceClient client = new ServiceClient(ctx, null);
-        Options options = new Options();
-        options.setAction("urn:echo");
-        options.setTo(new EndpointReference(args[0]));
-        
-        //Set the rampart parameters
-        options.setProperty(WSSHandlerConstants.OUTFLOW_SECURITY, getOutflowConfiguration());
-        options.setProperty(WSSHandlerConstants.INFLOW_SECURITY, getInflowConfiguration());
-        
-        client.setOptions(options);
-        
-        //Engage rampart
-        client.engageModule("rampart");
-        
-        OMElement response = client.sendReceive(getPayload("Hello world"));
-        
-        System.out.println(response);
-        
-    }
-    
-    private static OMElement getPayload(String value) {
-        OMFactory factory = OMAbstractFactory.getOMFactory();
-        OMNamespace ns = factory.createOMNamespace("http://sample11.samples.rampart.apache.org","ns1");
-        OMElement elem = factory.createOMElement("echo", ns);
-        OMElement childElem = factory.createOMElement("param0", null);
-        childElem.setText(value);
-        elem.addChild(childElem);
-        
-        return elem;
-    }
-    
-    private static Parameter getOutflowConfiguration() {
-        OutflowConfiguration ofc = new OutflowConfiguration();
-        ofc.setActionItems("Timestamp Signature Encrypt");
-        ofc.setUser("client");
-        ofc.setPasswordCallbackClass("org.apache.rampart.samples.sample11.PWCBHandler");
-        ofc.setSignaturePropFile("client.properties");
-        ofc.setSignatureKeyIdentifier(WSSHandlerConstants.BST_DIRECT_REFERENCE);
-        ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.ISSUER_SERIAL);
-        ofc.setEncryptionUser("service");
-        
-        return ofc.getProperty();
-    }
-    
-    private static Parameter getInflowConfiguration() {
-        InflowConfiguration ifc = new InflowConfiguration();
-        ifc.setActionItems("Timestamp Signature Encrypt");
-        ifc.setPasswordCallbackClass("org.apache.rampart.samples.sample11.PWCBHandler");
-        ifc.setSignaturePropFile("client.properties");
-        
-        return ifc.getProperty();
-    }
-    
-}
diff --git a/modules/rampart-samples/basic/sample11/src/org/apache/rampart/samples/sample11/PWCBHandler.java b/modules/rampart-samples/basic/sample11/src/org/apache/rampart/samples/sample11/PWCBHandler.java
deleted file mode 100644
index bc66753..0000000
--- a/modules/rampart-samples/basic/sample11/src/org/apache/rampart/samples/sample11/PWCBHandler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.samples.sample11;
-
-import org.apache.ws.security.WSPasswordCallback;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-import java.io.IOException;
-
-public class PWCBHandler implements CallbackHandler {
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
-            
-            String id = pwcb.getIdentifier();
-            if("client".equals(id)) {
-                pwcb.setPassword("apache");
-            } else if("service".equals(id)) {
-                pwcb.setPassword("apache");
-            }
-        }
-    }
-
-}
diff --git a/modules/rampart-samples/basic/sample11/src/org/apache/rampart/samples/sample11/SimpleService.java b/modules/rampart-samples/basic/sample11/src/org/apache/rampart/samples/sample11/SimpleService.java
deleted file mode 100644
index 012bd62..0000000
--- a/modules/rampart-samples/basic/sample11/src/org/apache/rampart/samples/sample11/SimpleService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.apache.rampart.samples.sample11;
-/*
-
- * Copyright  2003-2005 The Apache Software Foundation.
- *
- *  Licensed 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.
- *
- */
-
-public class SimpleService {
-    
-    public String echo(String arg) {
-        return arg;
-    }
-}
diff --git a/modules/rampart-samples/build.xml b/modules/rampart-samples/build.xml
deleted file mode 100644
index 708bc83..0000000
--- a/modules/rampart-samples/build.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- !
- ! Copyright 2006 The Apache Software Foundation.
- !
- ! Licensed 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.
- !-->
-<project basedir="." default="setup">
-
-	<property name="lib.dir" value="../lib"/>
-	<property name="modules.dir" value="../modules"/>
-	
-	<property environment="env"/>
-    	
-	<target name="check.dependency" unless="env.AXIS2_HOME">
-        <echo message="AXIS2_HOME must be set"/>
-    </target>
-
-	<!-- Copy the required jars and mars appropriately -->
-	<target name="setup" if="env.AXIS2_HOME" depends="check.dependency">
-		
-   		<property name="axis2.modules.dir" value="${env.AXIS2_HOME}/repository/modules/"/>
-   		<property name="axis2.lib.dir" value="${env.AXIS2_HOME}/lib"/>
-		
-		<copy todir="${axis2.lib.dir}">
-	        <fileset dir="${lib.dir}">
-	                <include name="**/*.jar"/>
-	        </fileset>
-		</copy>
-		
-		<copy todir="${axis2.modules.dir}">
-	        <fileset dir="${modules.dir}">
-	                <include name="**/*.mar"/>
-	        </fileset>
-		</copy>
-				
-	</target>
-	
-</project>
diff --git a/modules/rampart-samples/keys/service.jks b/modules/rampart-samples/keys/service.jks
index dec41cb..faa0a20 100644
--- a/modules/rampart-samples/keys/service.jks
+++ b/modules/rampart-samples/keys/service.jks
Binary files differ
diff --git a/modules/rampart-samples/policy/build.xml b/modules/rampart-samples/policy/build.xml
index 69268e9..e9f6dea 100644
--- a/modules/rampart-samples/policy/build.xml
+++ b/modules/rampart-samples/policy/build.xml
@@ -18,12 +18,13 @@
 
 <project basedir="." default="clean">
 
-	<property name="service.repos.dir" value="build/service_repositories"/>
-	<property name="client.repos.dir" value="build/client_repositories"/>
-	<property name="temp.dir" value="build/temp"/>
+	<property name="build.dir" value="build"/>
+	<property name="service.repos.dir" value="${build.dir}/service_repositories"/>
+	<property name="client.repos.dir" value="${build.dir}/client_repositories"/>
+	<property name="temp.dir" value="${build.dir}/temp"/>
 	<property name="keys.dir" value="../keys"/>
-	<property name="temp.client.dir" value="build/temp_client"/>
-    <property name="endorsed.dir" value="build/endorsed"/>
+	<property name="temp.client.dir" value="${build.dir}/temp_client"/>
+    <property name="endorsed.dir" value="${build.dir}/endorsed"/>
 	
 	<property name="client.port" value="8080"/>
 	<property name="server.port" value="8080"/>
@@ -34,6 +35,8 @@
     
     <property name="lib.dir" value="${env.AXIS2_HOME}/lib"/>
     
+    <property name="vmargs" value=""/>
+    
     <path id="runtime.classpath">
         <fileset dir="${lib.dir}">
             <include name="**/*.jar"/>
@@ -125,6 +128,16 @@
         <create.and.run.client sample.number="08"/>
     </target>
 
+    <!--Sample Service 09-->
+    <target name="service.09" if="env.AXIS2_HOME" depends="check.dependency">
+        <create.service.repo sample.number="09"/>
+    </target>
+
+    <!--Sample Client 09-->
+    <target  name="client.09" if="env.AXIS2_HOME" depends="check.dependency">
+        <create.and.run.client sample.number="09"/>
+    </target>
+
     <target name="setup">
 	<mkdir dir="${endorsed.dir}"/>
         <get src="http://repo2.maven.org/maven2/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"
@@ -133,7 +146,7 @@
 
 
 	<target name="clean">
-		<delete dir="build" />
+		<delete dir="${build.dir}" />
 	</target>
 	
 	<!-- Macro to create a service repo for a given sample -->
@@ -170,7 +183,11 @@
                     <exclude name="**/Client.java"/>
             </javac>
 	   		
-	   		<copy file="sample@{sample.number}/services.xml" tofile="${temp.dir}/META-INF/services.xml" overwrite="true"/>
+            <copy file="sample@{sample.number}/services.xml" tofile="${temp.dir}/META-INF/services.xml" overwrite="true">
+                <filterset>
+                    <filter token="port" value="${server.port}"/>
+                </filterset>
+            </copy>
 	   		<copy file="${keys.dir}/service.jks" tofile="${temp.dir}/service.jks" overwrite="true"/>
 	   		<copy file="${keys.dir}/sts.jks" tofile="${temp.dir}/sts.jks" overwrite="true"/>
 	   		<copy file="${keys.dir}/service.properties" tofile="${temp.dir}/service.properties" overwrite="true"/>
@@ -185,7 +202,7 @@
                     <arg value="${service.repos.dir}/sample@{sample.number}"/>
                     <arg value="-p${server.port}"/>
                     <classpath refid="runtime.classpath"/>
-                    <jvmarg value="-Djava.endorsed.dirs=${endorsed.dir}"/>
+                    <jvmarg line="-Djava.endorsed.dirs=${endorsed.dir} ${vmargs}"/>
             </java>
 
 	   </sequential>
@@ -225,8 +242,16 @@
                     <exclude name="**/Client.java"/>
             </javac>
             
-            <copy file="sample@{sample.number}/services.xml" tofile="${temp.dir}/META-INF/services.xml" overwrite="true"/>
-            <copy file="sample@{sample.number}/mex_policy.xml" tofile="${temp.dir}/mex_policy.xml" overwrite="true"/>
+            <copy file="sample@{sample.number}/services.xml" tofile="${temp.dir}/META-INF/services.xml" overwrite="true">
+                <filterset>
+                    <filter token="port" value="${server.port}"/>
+                </filterset>
+            </copy>
+            <copy file="sample@{sample.number}/mex_policy.xml" tofile="${temp.dir}/mex_policy.xml" overwrite="true">
+                <filterset>
+                    <filter token="port" value="${server.port}"/>
+                </filterset>
+            </copy>
             <copy file="${keys.dir}/service.jks" tofile="${temp.dir}/service.jks" overwrite="true"/>
             <copy file="${keys.dir}/sts.jks" tofile="${temp.dir}/sts.jks" overwrite="true"/>
             <copy file="${keys.dir}/service.properties" tofile="${temp.dir}/service.properties" overwrite="true"/>
@@ -241,7 +266,7 @@
                     <arg value="${service.repos.dir}/sample@{sample.number}"/>
                     <arg value="-p${server.port}"/>
                     <classpath refid="runtime.classpath"/>
-                    <jvmarg value="-Djava.endorsed.dirs=${endorsed.dir}"/>
+                    <jvmarg line="-Djava.endorsed.dirs=${endorsed.dir} ${vmargs}"/>
             </java>
 
        </sequential>
@@ -280,17 +305,26 @@
 
 	   		<copy file="${keys.dir}/client.jks" tofile="${temp.client.dir}/client.jks" overwrite="true"/>
 	   		<copy file="${keys.dir}/client.properties" tofile="${temp.client.dir}/client.properties" overwrite="true"/>
+            <copy todir="${temp.client.dir}" overwrite="true">
+                <fileset dir="sample@{sample.number}">
+                    <include name="*policy*.xml"/>
+                </fileset>
+                <filterset>
+                    <filter token="port" value="${client.port}"/>
+                </filterset>
+            </copy>
 
 	   		
 	   		<!-- Run client -->
-            <java classname="org.apache.rampart.samples.policy.sample@{sample.number}.Client" fork="true">
+            <java classname="org.apache.rampart.samples.policy.sample@{sample.number}.Client" fork="true" failonerror="true">
                     <arg value="${sample.services.url}/sample@{sample.number}"/>
                     <arg value="${client.repos.dir}/sample@{sample.number}"/>
-                    <arg value="sample@{sample.number}/policy.xml"/>
+                    <arg value="${temp.client.dir}/policy.xml"/>
                     <classpath>
                         <path refid="runtime.classpath"/>
                   		<dirset dir="${temp.client.dir}" />
                     </classpath>
+                    <jvmarg line="${vmargs}"/>
             </java>
 
 <!--	   		<delete dir="${temp.client.dir}"/> -->
diff --git a/modules/rampart-samples/policy/sample01/README.txt b/modules/rampart-samples/policy/sample01/README.txt
index ad75ce6..dd87594 100644
--- a/modules/rampart-samples/policy/sample01/README.txt
+++ b/modules/rampart-samples/policy/sample01/README.txt
@@ -3,6 +3,16 @@
 The policy uses a TransportBinding and requires a SignedSupportingToken which 
 is a UsernameToken and the inclusion of a TimeStamp. 
 
-Note that Rampart does not enforce the use of HTTPS transport and that 
+Note that Rampart enforces the use of HTTPS transport and that 
 {http://ws.apache.org/rampart/policy}RampartConfig assertion provides
-additional information required to secure the message.
\ No newline at end of file
+additional information required to secure the message.
+
+The policy included in the services.xml file has the following comment :
+<!--<sp:HttpsToken RequireClientCertificate="false"/> -->
+
+If you uncomment this and deploy the service you will see the following error message :
+org.apache.axis2.AxisFault: Expected transport is "https" but incoming transport found : "http"
+
+You can find a complete tutorial on transport level
+security here:
+http://wso2.org/library/3190
\ No newline at end of file
diff --git a/modules/rampart-samples/policy/sample01/services.xml b/modules/rampart-samples/policy/sample01/services.xml
index bd4eb39..423923f 100644
--- a/modules/rampart-samples/policy/sample01/services.xml
+++ b/modules/rampart-samples/policy/sample01/services.xml
@@ -32,7 +32,8 @@
 			  <wsp:Policy>
 				<sp:TransportToken>
 				  <wsp:Policy>
-					<sp:HttpsToken RequireClientCertificate="false"/>
+				  	<!-- REMOVED TO MAKE THE SAMPLE RUN WITH THE axis2server-->
+					<!--<sp:HttpsToken RequireClientCertificate="false"/> -->
 				  </wsp:Policy>
 				</sp:TransportToken>
 				<sp:AlgorithmSuite>
diff --git a/modules/rampart-samples/policy/sample01/src/org/apache/rampart/samples/policy/sample01/Client.java b/modules/rampart-samples/policy/sample01/src/org/apache/rampart/samples/policy/sample01/Client.java
index 4e0600f..279ba9c 100644
--- a/modules/rampart-samples/policy/sample01/src/org/apache/rampart/samples/policy/sample01/Client.java
+++ b/modules/rampart-samples/policy/sample01/src/org/apache/rampart/samples/policy/sample01/Client.java
@@ -20,7 +20,8 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
@@ -30,6 +31,8 @@
 import org.apache.neethi.PolicyEngine;
 import org.apache.rampart.RampartMessageData;
 
+import java.io.FileInputStream;
+
 import javax.xml.namespace.QName;
 
 public class Client {
@@ -59,7 +62,7 @@
     }
     
     private static Policy loadPolicy(String xmlPath) throws Exception {
-        StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(xmlPath));
         return PolicyEngine.getPolicy(builder.getDocumentElement());
     }
     
diff --git a/modules/rampart-samples/policy/sample02/src/org/apache/rampart/samples/policy/sample02/Client.java b/modules/rampart-samples/policy/sample02/src/org/apache/rampart/samples/policy/sample02/Client.java
index 6cd1f11..0239d84 100644
--- a/modules/rampart-samples/policy/sample02/src/org/apache/rampart/samples/policy/sample02/Client.java
+++ b/modules/rampart-samples/policy/sample02/src/org/apache/rampart/samples/policy/sample02/Client.java
@@ -20,7 +20,8 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
@@ -30,6 +31,8 @@
 import org.apache.neethi.PolicyEngine;
 import org.apache.rampart.RampartMessageData;
 
+import java.io.FileInputStream;
+
 import javax.xml.namespace.QName;
 
 public class Client {
@@ -59,7 +62,7 @@
     }
     
     private static Policy loadPolicy(String xmlPath) throws Exception {
-        StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(xmlPath));
         return PolicyEngine.getPolicy(builder.getDocumentElement());
     }
     
diff --git a/modules/rampart-samples/policy/sample03/src/org/apache/rampart/samples/policy/sample03/Client.java b/modules/rampart-samples/policy/sample03/src/org/apache/rampart/samples/policy/sample03/Client.java
index 6fd3507..6adc113 100644
--- a/modules/rampart-samples/policy/sample03/src/org/apache/rampart/samples/policy/sample03/Client.java
+++ b/modules/rampart-samples/policy/sample03/src/org/apache/rampart/samples/policy/sample03/Client.java
@@ -20,7 +20,8 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
@@ -30,6 +31,8 @@
 import org.apache.neethi.PolicyEngine;
 import org.apache.rampart.RampartMessageData;
 
+import java.io.FileInputStream;
+
 import javax.xml.namespace.QName;
 
 public class Client {
@@ -59,7 +62,7 @@
     }
     
     private static Policy loadPolicy(String xmlPath) throws Exception {
-        StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(xmlPath));
         return PolicyEngine.getPolicy(builder.getDocumentElement());
     }
     
diff --git a/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/Client.java b/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/Client.java
index ac6a5a0..3588828 100644
--- a/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/Client.java
+++ b/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/Client.java
@@ -20,7 +20,8 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
@@ -31,6 +32,8 @@
 import org.apache.neethi.PolicyEngine;
 import org.apache.rampart.RampartMessageData;
 
+import java.io.FileInputStream;
+
 import javax.xml.namespace.QName;
 
 public class Client {
@@ -67,7 +70,7 @@
     }
     
     private static Policy loadPolicy(String xmlPath) throws Exception {
-        StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(xmlPath));
         return PolicyEngine.getPolicy(builder.getDocumentElement());
     }
     
diff --git a/modules/rampart-samples/policy/sample05/policy.xml b/modules/rampart-samples/policy/sample05/policy.xml
index 1807e03..6fd65f3 100755
--- a/modules/rampart-samples/policy/sample05/policy.xml
+++ b/modules/rampart-samples/policy/sample05/policy.xml
@@ -35,7 +35,7 @@
 					<wsp:Policy>
 						<sp:IssuedToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
 							<Issuer xmlns="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-								<Address xmlns="http://www.w3.org/2005/08/addressing">http://localhost:8080/axis2/services/STS</Address>
+								<Address xmlns="http://www.w3.org/2005/08/addressing">http://localhost:@port@/axis2/services/STS</Address>
 							</Issuer>
 							<sp:RequestSecurityTokenTemplate>
 								<t:TokenType xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust">http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1</t:TokenType>
diff --git a/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/Client.java b/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/Client.java
index 9a34b7c..abaf622 100644
--- a/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/Client.java
+++ b/modules/rampart-samples/policy/sample05/src/org/apache/rampart/samples/policy/sample05/Client.java
@@ -20,7 +20,8 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
@@ -37,6 +38,9 @@
 import org.apache.ws.secpolicy.SP11Constants;
 import org.opensaml.common.xml.SAMLConstants;
 
+import java.io.FileInputStream;
+import java.net.URL;
+
 import javax.xml.namespace.QName;
 
 public class Client {
@@ -55,7 +59,7 @@
 		String action = TrustUtil.getActionValue(RahasConstants.VERSION_05_02, RahasConstants.RST_ACTION_ISSUE);
 		stsClient.setAction(action);
 		
-		Token responseToken = stsClient.requestSecurityToken(loadPolicy("sample05/policy.xml"), "http://localhost:8080/axis2/services/STS", loadPolicy("sample05/sts_policy.xml"), null);
+		Token responseToken = stsClient.requestSecurityToken(loadPolicy("sample05/policy.xml"), new URL(new URL(args[0]), "/axis2/services/STS").toString(), loadPolicy("sample05/sts_policy.xml"), null);
 		
 	        System.out.println("\n############################# Requested Token ###################################\n");
 	        System.out.println(responseToken.getToken().toString());
@@ -83,7 +87,7 @@
 	}
 
 	private static Policy loadPolicy(String xmlPath) throws Exception {
-		StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(xmlPath));
 		return PolicyEngine.getPolicy(builder.getDocumentElement());
 	}
 	
diff --git a/modules/rampart-samples/policy/sample06/policy.xml b/modules/rampart-samples/policy/sample06/policy.xml
index 24728d8..dbcf50c 100755
--- a/modules/rampart-samples/policy/sample06/policy.xml
+++ b/modules/rampart-samples/policy/sample06/policy.xml
@@ -35,7 +35,7 @@
 					<wsp:Policy>
 						<sp:IssuedToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
 							<Issuer xmlns="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-								<Address xmlns="http://www.w3.org/2005/08/addressing">http://localhost:8080/axis2/services/STS</Address>
+								<Address xmlns="http://www.w3.org/2005/08/addressing">http://localhost:@port@/axis2/services/STS</Address>
 								<Metadata xmlns="http://www.w3.org/2005/08/addressing">
                                     <mex:Metadata
                                         xmlns:mex="http://schemas.xmlsoap.org/ws/2004/09/mex"
@@ -43,7 +43,7 @@
                                         <mex:MetadataSection Dialect="http://schemas.xmlsoap.org/ws/2004/09/mex">
                                             <mex:MetadataReference>
                                                 <Address
-                                                    xmlns="http://www.w3.org/2005/08/addressing">http://localhost:8080/axis2/services/mex</Address>
+                                                    xmlns="http://www.w3.org/2005/08/addressing">http://localhost:@port@/axis2/services/mex</Address>
                                             </mex:MetadataReference>
                                         </mex:MetadataSection>
                                     </mex:Metadata>
@@ -104,4 +104,4 @@
 			</ramp:RampartConfig>
 		</wsp:All>
 	</wsp:ExactlyOne>
-</wsp:Policy>
\ No newline at end of file
+</wsp:Policy>
diff --git a/modules/rampart-samples/policy/sample06/services.xml b/modules/rampart-samples/policy/sample06/services.xml
index b86f1fb..70a2373 100755
--- a/modules/rampart-samples/policy/sample06/services.xml
+++ b/modules/rampart-samples/policy/sample06/services.xml
@@ -183,7 +183,7 @@
                                         <mex:MetadataSection Dialect="http://schemas.xmlsoap.org/ws/2004/09/mex">
                                             <mex:MetadataReference>
                                                 <Address
-                                                    xmlns="http://www.w3.org/2005/08/addressing">http://localhost:8080/axis2/services/mex</Address>
+                                                    xmlns="http://www.w3.org/2005/08/addressing">http://localhost:@port@/axis2/services/mex</Address>
                                             </mex:MetadataReference>
                                         </mex:MetadataSection>
                                     </mex:Metadata>
diff --git a/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/Client.java b/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/Client.java
index df23146..16b9446 100755
--- a/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/Client.java
+++ b/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/Client.java
@@ -20,7 +20,8 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
@@ -35,6 +36,7 @@
 import org.apache.ws.secpolicy.SP11Constants;
 import org.opensaml.common.xml.SAMLConstants;
 
+import java.io.FileInputStream;
 
 import javax.xml.namespace.QName;
 
@@ -67,7 +69,7 @@
 	}
 
     private static Policy loadPolicy(String xmlPath) throws Exception {
-        StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(xmlPath));
         return PolicyEngine.getPolicy(builder.getDocumentElement());
     }
 	
diff --git a/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/MexService.java b/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/MexService.java
index 2b8a12f..2ad338f 100644
--- a/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/MexService.java
+++ b/modules/rampart-samples/policy/sample06/src/org/apache/rampart/samples/policy/sample06/MexService.java
@@ -22,10 +22,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.xml.stream.XMLStreamException;
-
 import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.mex.MexConstants;
 import org.apache.axis2.mex.om.Metadata;
@@ -56,12 +55,10 @@
             
             File file = new File("sample06/mex_policy.xml");
             System.out.println(file.getAbsolutePath());
-            StAXOMBuilder builder = new StAXOMBuilder(new FileInputStream(file));
+            OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(file));
             return builder.getDocumentElement();
         } catch (FileNotFoundException e) {
             throw new AxisFault("Error reading the file",e);
-        } catch (XMLStreamException e) {
-            throw new AxisFault("Error parsing the file",e);
         }
     }
 
diff --git a/modules/rampart-samples/policy/sample07/src/org/apache/rampart/samples/policy/sample07/Client.java b/modules/rampart-samples/policy/sample07/src/org/apache/rampart/samples/policy/sample07/Client.java
index 0b5f3b3..9c5d875 100644
--- a/modules/rampart-samples/policy/sample07/src/org/apache/rampart/samples/policy/sample07/Client.java
+++ b/modules/rampart-samples/policy/sample07/src/org/apache/rampart/samples/policy/sample07/Client.java
@@ -20,7 +20,8 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
@@ -30,6 +31,8 @@
 import org.apache.neethi.PolicyEngine;
 import org.apache.rampart.RampartMessageData;
 
+import java.io.FileInputStream;
+
 import javax.xml.namespace.QName;
 
 public class Client {
@@ -59,7 +62,7 @@
     }
     
     private static Policy loadPolicy(String xmlPath) throws Exception {
-        StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(xmlPath));
         return PolicyEngine.getPolicy(builder.getDocumentElement());
     }
     
diff --git a/modules/rampart-samples/policy/sample08/policy.xml b/modules/rampart-samples/policy/sample08/policy.xml
index f1a09da..b19491a 100644
--- a/modules/rampart-samples/policy/sample08/policy.xml
+++ b/modules/rampart-samples/policy/sample08/policy.xml
@@ -35,7 +35,7 @@
 					<wsp:Policy>
 						<sp:IssuedToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
 							<Issuer xmlns="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-								<Address xmlns="http://www.w3.org/2005/08/addressing">http://localhost:8080/axis2/services/STS</Address>
+								<Address xmlns="http://www.w3.org/2005/08/addressing">http://localhost:@port@/axis2/services/STS</Address>
 							</Issuer>
 							<sp:RequestSecurityTokenTemplate>
 								<t:TokenType xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust">http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0</t:TokenType>
diff --git a/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/Client.java b/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/Client.java
index 1167487..e3372cf 100644
--- a/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/Client.java
+++ b/modules/rampart-samples/policy/sample08/src/org/apache/rampart/samples/policy/sample08/Client.java
@@ -19,7 +19,8 @@
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.ConfigurationContextFactory;
 import org.apache.neethi.Policy;
@@ -31,6 +32,9 @@
 import org.apache.ws.secpolicy.SP11Constants;
 import org.opensaml.common.xml.SAMLConstants;
 
+import java.io.FileInputStream;
+import java.net.URL;
+
 import javax.xml.namespace.QName;
 
 public class Client {
@@ -49,7 +53,7 @@
 		String action = TrustUtil.getActionValue(RahasConstants.VERSION_05_02, RahasConstants.RST_ACTION_ISSUE);
 		stsClient.setAction(action);
 		
-		Token responseToken = stsClient.requestSecurityToken(loadPolicy("sample08/policy.xml"), "http://localhost:8080/axis2/services/STS", loadPolicy("sample08/sts_policy.xml"), null);
+		Token responseToken = stsClient.requestSecurityToken(loadPolicy("sample08/policy.xml"), new URL(new URL(args[0]), "/axis2/services/STS").toString(), loadPolicy("sample08/sts_policy.xml"), null);
 		
 	        System.out.println("\n############################# Requested SAML 2.0 Token ###################################\n");
 	        System.out.println(responseToken.getToken().toString());
@@ -59,7 +63,7 @@
 	}
 
 	private static Policy loadPolicy(String xmlPath) throws Exception {
-		StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
+	    OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(xmlPath));
 		return PolicyEngine.getPolicy(builder.getDocumentElement());
 	}
 	
diff --git a/modules/rampart-samples/policy/sample09/README.txt b/modules/rampart-samples/policy/sample09/README.txt
new file mode 100644
index 0000000..67955cf
--- /dev/null
+++ b/modules/rampart-samples/policy/sample09/README.txt
@@ -0,0 +1,4 @@
+Different security policies to secure request and response messages.
+
+1. Request message is secured with encrypt only policy with symmetric binding.
+2. Response message is secured with sign only policy with symmetric binding.
\ No newline at end of file
diff --git a/modules/rampart-samples/policy/sample09/client_in_policy.xml b/modules/rampart-samples/policy/sample09/client_in_policy.xml
new file mode 100644
index 0000000..1f3ce97
--- /dev/null
+++ b/modules/rampart-samples/policy/sample09/client_in_policy.xml
@@ -0,0 +1,70 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
+            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+            wsu:Id="SignOnly">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:SymmetricBinding
+                    xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                <wsp:Policy>
+                    <sp:ProtectionToken>
+                        <wsp:Policy>
+                            <sp:X509Token
+                                    sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
+                                <wsp:Policy>
+                                    <sp:RequireThumbprintReference/>
+                                    <sp:WssX509V3Token10/>
+                                </wsp:Policy>
+                            </sp:X509Token>
+                        </wsp:Policy>
+                    </sp:ProtectionToken>
+                    <sp:AlgorithmSuite>
+                        <wsp:Policy>
+                            <sp:Basic256/>
+                        </wsp:Policy>
+                    </sp:AlgorithmSuite>
+                    <sp:Layout>
+                        <wsp:Policy>
+                            <sp:Lax/>
+                        </wsp:Policy>
+                    </sp:Layout>
+                    <sp:IncludeTimestamp/>
+                    <sp:OnlySignEntireHeadersAndBody/>
+                </wsp:Policy>
+            </sp:SymmetricBinding>
+            <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                <sp:Body/>
+            </sp:SignedParts>
+            <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                <wsp:Policy>
+                    <sp:MustSupportRefKeyIdentifier/>
+                    <sp:MustSupportRefIssuerSerial/>
+                    <sp:MustSupportRefThumbprint/>
+                    <sp:RequireSignatureConfirmation/>
+                </wsp:Policy>
+            </sp:Wss11>
+            <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                <wsp:Policy>
+                    <sp:RequireClientEntropy/>
+                    <sp:RequireServerEntropy/>
+                    <sp:MustSupportIssuedTokens/>
+                </wsp:Policy>
+            </sp:Trust10>
+            <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
+            <ramp:user>client</ramp:user>
+            <ramp:encryptionUser>service</ramp:encryptionUser>
+            <ramp:passwordCallbackClass>org.apache.rampart.samples.policy.sample09.PWCBHandler
+            </ramp:passwordCallbackClass>
+
+            <ramp:signatureCrypto>
+                <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+                    <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+                    <ramp:property name="org.apache.ws.security.crypto.merlin.file">client.jks</ramp:property>
+                    <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">apache
+                    </ramp:property>
+                </ramp:crypto>
+            </ramp:signatureCrypto>
+
+        </ramp:RampartConfig>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
diff --git a/modules/rampart-samples/policy/sample09/client_out_policy.xml b/modules/rampart-samples/policy/sample09/client_out_policy.xml
new file mode 100644
index 0000000..48de841
--- /dev/null
+++ b/modules/rampart-samples/policy/sample09/client_out_policy.xml
@@ -0,0 +1,79 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
+            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+            wsu:Id="EncryptOnly">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:SymmetricBinding
+                    xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                <wsp:Policy>
+                    <sp:ProtectionToken>
+                        <wsp:Policy>
+                            <sp:X509Token
+                                    sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
+                                <wsp:Policy>
+                                    <sp:RequireThumbprintReference/>
+                                    <sp:WssX509V3Token10/>
+                                </wsp:Policy>
+                            </sp:X509Token>
+                        </wsp:Policy>
+                    </sp:ProtectionToken>
+                    <sp:AlgorithmSuite>
+                        <wsp:Policy>
+                            <sp:Basic256/>
+                        </wsp:Policy>
+                    </sp:AlgorithmSuite>
+                    <sp:Layout>
+                        <wsp:Policy>
+                            <sp:Lax/>
+                        </wsp:Policy>
+                    </sp:Layout>
+                    <sp:IncludeTimestamp/>
+                    <sp:OnlySignEntireHeadersAndBody/>
+                </wsp:Policy>
+            </sp:SymmetricBinding>
+            <sp:EncryptedParts
+                    xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                <sp:Body/>
+            </sp:EncryptedParts>
+            <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                <wsp:Policy>
+                    <sp:MustSupportRefKeyIdentifier/>
+                    <sp:MustSupportRefIssuerSerial/>
+                    <sp:MustSupportRefThumbprint/>
+                    <sp:RequireSignatureConfirmation/>
+                </wsp:Policy>
+            </sp:Wss11>
+            <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                <wsp:Policy>
+                    <sp:RequireClientEntropy/>
+                    <sp:RequireServerEntropy/>
+                    <sp:MustSupportIssuedTokens/>
+                </wsp:Policy>
+            </sp:Trust10>
+            <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
+                <ramp:user>client</ramp:user>
+                <ramp:encryptionUser>service</ramp:encryptionUser>
+                <ramp:passwordCallbackClass>org.apache.rampart.samples.policy.sample09.PWCBHandler
+                </ramp:passwordCallbackClass>
+
+                <ramp:encryptionCypto>
+                    <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.file">client.jks</ramp:property>
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">apache
+                        </ramp:property>
+                    </ramp:crypto>
+                </ramp:encryptionCypto>
+                <ramp:signatureCrypto>
+                    <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.file">client.jks</ramp:property>
+                        <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">apache
+                        </ramp:property>
+                    </ramp:crypto>
+                </ramp:signatureCrypto>
+            </ramp:RampartConfig>
+
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
diff --git a/modules/rampart-samples/policy/sample09/services.xml b/modules/rampart-samples/policy/sample09/services.xml
new file mode 100644
index 0000000..f3cf087
--- /dev/null
+++ b/modules/rampart-samples/policy/sample09/services.xml
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+<!-- services.xml for sample09 with different in,out policies -->
+<service>
+    <operation name="echo">
+        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </operation>
+    <parameter name="ServiceClass" locked="false">org.apache.rampart.samples.policy.sample09.SimpleService</parameter>
+
+    <module ref="rampart"/>
+    <module ref="addressing"/>
+
+    <wsp:PolicyAttachment xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+        <wsp:AppliesTo>
+            <policy-subject identifier="binding:soap11/operation:echo/in"/>
+            <policy-subject identifier="binding:soap12/operation:echo/in"/>
+        </wsp:AppliesTo>
+        <wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
+                    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+                    wsu:Id="EncryptOnly">
+            <wsp:ExactlyOne>
+                <wsp:All>
+                    <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                        <wsp:Policy>
+                            <sp:ProtectionToken>
+                                <wsp:Policy>
+                                    <sp:X509Token
+                                            sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
+                                        <wsp:Policy>
+                                            <sp:RequireThumbprintReference/>
+                                            <sp:WssX509V3Token10/>
+                                        </wsp:Policy>
+                                    </sp:X509Token>
+                                </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                                <wsp:Policy>
+                                    <sp:Basic256/>
+                                </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                                <wsp:Policy>
+                                    <sp:Lax/>
+                                </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp/>
+                            <sp:OnlySignEntireHeadersAndBody/>
+                        </wsp:Policy>
+                    </sp:SymmetricBinding>
+                    <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                        <sp:Body/>
+                    </sp:EncryptedParts>
+                    <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                        <wsp:Policy>
+                            <sp:MustSupportRefKeyIdentifier/>
+                            <sp:MustSupportRefIssuerSerial/>
+                            <sp:MustSupportRefThumbprint/>
+                            <sp:RequireSignatureConfirmation/>
+                        </wsp:Policy>
+                    </sp:Wss11>
+                    <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                        <wsp:Policy>
+                            <sp:RequireClientEntropy/>
+                            <sp:RequireServerEntropy/>
+                            <sp:MustSupportIssuedTokens/>
+                        </wsp:Policy>
+                    </sp:Trust10>
+                    <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
+                        <ramp:user>service</ramp:user>
+                        <ramp:encryptionUser>service</ramp:encryptionUser>
+                        <ramp:passwordCallbackClass>org.apache.rampart.samples.policy.sample09.PWCBHandler
+                        </ramp:passwordCallbackClass>
+
+                        <ramp:encryptionCypto>
+                            <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+                                <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+                                <ramp:property name="org.apache.ws.security.crypto.merlin.file">service.jks</ramp:property>
+                                <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">apache
+                                </ramp:property>
+                            </ramp:crypto>
+                        </ramp:encryptionCypto>
+                        <ramp:signatureCrypto>
+                            <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+                                <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+                                <ramp:property name="org.apache.ws.security.crypto.merlin.file">service.jks</ramp:property>
+                                <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">apache
+                                </ramp:property>
+                            </ramp:crypto>
+                        </ramp:signatureCrypto>
+                        
+                    </ramp:RampartConfig>
+                    
+                </wsp:All>
+            </wsp:ExactlyOne>
+        </wsp:Policy>
+    </wsp:PolicyAttachment>
+    <wsp:PolicyAttachment xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+        <wsp:AppliesTo>
+            <policy-subject identifier="binding:soap11/operation:echo/out"/>
+            <policy-subject identifier="binding:soap12/operation:echo/out"/>
+        </wsp:AppliesTo>
+        <wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
+                    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+                    wsu:Id="SignOnly">
+            <wsp:ExactlyOne>
+                <wsp:All>
+                    <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                        <wsp:Policy>
+                            <sp:ProtectionToken>
+                                <wsp:Policy>
+                                    <sp:X509Token
+                                            sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
+                                        <wsp:Policy>
+                                            <sp:RequireThumbprintReference/>
+                                            <sp:WssX509V3Token10/>
+                                        </wsp:Policy>
+                                    </sp:X509Token>
+                                </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                                <wsp:Policy>
+                                    <sp:Basic256/>
+                                </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                                <wsp:Policy>
+                                    <sp:Lax/>
+                                </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp/>
+                            <sp:OnlySignEntireHeadersAndBody/>
+                        </wsp:Policy>
+                    </sp:SymmetricBinding>
+                    <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                        <sp:Body/>
+                    </sp:SignedParts>
+                    <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                        <wsp:Policy>
+                            <sp:MustSupportRefKeyIdentifier/>
+                            <sp:MustSupportRefIssuerSerial/>
+                            <sp:MustSupportRefThumbprint/>
+                            <sp:RequireSignatureConfirmation/>
+                        </wsp:Policy>
+                    </sp:Wss11>
+                    <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                        <wsp:Policy>
+                            <sp:RequireClientEntropy/>
+                            <sp:RequireServerEntropy/>
+                            <sp:MustSupportIssuedTokens/>
+                        </wsp:Policy>
+                    </sp:Trust10>
+                    <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
+                    <ramp:user>service</ramp:user>
+                    <ramp:encryptionUser>service</ramp:encryptionUser>
+                    <ramp:passwordCallbackClass>org.apache.rampart.samples.policy.sample09.PWCBHandler
+                    </ramp:passwordCallbackClass>
+
+                    <ramp:signatureCrypto>
+                        <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">
+                            <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>
+                            <ramp:property name="org.apache.ws.security.crypto.merlin.file">service.jks</ramp:property>
+                            <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">apache
+                            </ramp:property>
+                        </ramp:crypto>
+                    </ramp:signatureCrypto>
+                    
+                </ramp:RampartConfig>
+                </wsp:All>
+            </wsp:ExactlyOne>
+        </wsp:Policy>
+
+    </wsp:PolicyAttachment>
+
+</service>
\ No newline at end of file
diff --git a/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/Client.java b/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/Client.java
new file mode 100644
index 0000000..62f3dcd
--- /dev/null
+++ b/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/Client.java
@@ -0,0 +1,84 @@
+/*
+ * 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.rampart.samples.policy.sample09;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.ConfigurationContextFactory;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyEngine;
+import org.apache.rampart.RampartMessageData;
+
+import java.io.File;
+import java.io.FileInputStream;
+
+public class Client {
+
+    public static void main(String[] args) throws Exception {
+        
+        if(args.length != 3) {
+            System.out.println("Usage: $java Client endpoint_address client_repo_path policy_xml_path");
+        }
+        
+        ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], null);
+        
+        ServiceClient client = new ServiceClient(ctx, null);
+        Options options = new Options();
+        options.setAction("urn:echo");
+        options.setTo(new EndpointReference(args[0]));
+        //load and attach in/out sec policies
+        File policyPath= new File(args[2]).getParentFile();
+        options.setProperty(RampartMessageData.KEY_RAMPART_IN_POLICY, loadPolicy(new File(policyPath, "client_in_policy.xml")));
+        options.setProperty(RampartMessageData.KEY_RAMPART_OUT_POLICY, loadPolicy(new File(policyPath, "/client_out_policy.xml")));
+        client.setOptions(options);
+        
+        client.engageModule("addressing");
+        client.engageModule("rampart");
+
+        OMElement response = client.sendReceive(getPayload("Hello world"));
+        
+        System.out.println(response);
+        
+    }
+    
+    private static Policy loadPolicy(File xmlPath) throws Exception {
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(xmlPath));
+        return PolicyEngine.getPolicy(builder.getDocumentElement());
+    }
+    
+    private static OMElement getPayload(String value) {
+        OMFactory factory = OMAbstractFactory.getOMFactory();
+        OMNamespace ns = factory.createOMNamespace("http://sample09.policy.samples.rampart.apache.org","ns1");
+        OMElement elem = factory.createOMElement("echo", ns);
+        OMElement childElem = factory.createOMElement("param0", ns);
+        childElem.setText(value);
+        elem.addChild(childElem);
+        
+        return elem;
+    }
+    
+}
diff --git a/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/PWCBHandler.java b/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/PWCBHandler.java
new file mode 100644
index 0000000..2d62ae1
--- /dev/null
+++ b/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/PWCBHandler.java
@@ -0,0 +1,44 @@
+/*
+ * 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.rampart.samples.policy.sample09;
+
+import org.apache.ws.security.WSPasswordCallback;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+import java.io.IOException;
+
+public class PWCBHandler implements CallbackHandler {
+
+    public void handle(Callback[] callbacks) throws IOException,
+            UnsupportedCallbackException {
+        for (int i = 0; i < callbacks.length; i++) {
+            WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
+            String id = pwcb.getIdentifier();
+            if("client".equals(id)) {
+                pwcb.setPassword("apache");
+            } else if("service".equals(id)) {
+                pwcb.setPassword("apache");
+            }
+        }
+    }
+
+}
diff --git a/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/SimpleService.java b/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/SimpleService.java
new file mode 100644
index 0000000..e1a56c4
--- /dev/null
+++ b/modules/rampart-samples/policy/sample09/src/org/apache/rampart/samples/policy/sample09/SimpleService.java
@@ -0,0 +1,25 @@
+/*
+ * 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.rampart.samples.policy.sample09;
+
+public class SimpleService {
+    public String echo(String arg) {
+        return arg;
+    }
+}
diff --git a/modules/rampart-samples/pom.xml b/modules/rampart-samples/pom.xml
index 610ca93..844379a 100644
--- a/modules/rampart-samples/pom.xml
+++ b/modules/rampart-samples/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.rampart</groupId>
         <artifactId>rampart-project</artifactId>
-        <version>1.7.0-SNAPSHOT</version>
+        <version>1.8.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
 
@@ -37,76 +37,146 @@
     <build>
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
-                <version>1.7</version>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
                 <executions>
                     <execution>
-                        <phase>generate-sources</phase>
+                        <id>prepare-agent-for-client</id>
                         <goals>
-                            <goal>add-source</goal>
+                            <goal>prepare-agent</goal>
                         </goals>
                         <configuration>
-                            <sources>
-                                <source>basic/sample01/src</source>
-                                <source>basic/sample02/src</source>
-                                <source>basic/sample03/src</source>
-                                <source>basic/sample04/src</source>
-                                <source>basic/sample05/src</source>
-                                <source>basic/sample06/src</source>
-                                <source>basic/sample07/src</source>
-                                <source>basic/sample08/src</source>
-                                <source>basic/sample09/src</source>
-                                <source>basic/sample10/src</source>
-                                <source>basic/sample11/src</source>
-                                <source>policy/sample01/src</source>
-                                <source>policy/sample02/src</source>
-                                <source>policy/sample03/src</source>
-                                <source>policy/sample04/src</source>
-                                <source>policy/sample05/src</source>
-                                <source>policy/sample06/src</source>
-                                <source>policy/sample07/src</source>
-                                <source>policy/sample08/src</source>
-                                <source>policy/sample-tomcat/src</source>
-                            </sources>
+                            <propertyName>jacoco.argLineTemplate</propertyName>
+                            <sessionId>mvn:${project.groupId}:${project.artifactId}:${project.version}:@id@</sessionId>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.axis2</groupId>
+                <artifactId>axis2-repo-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>create-test-repository</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/axis2/repository</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>generate-test-resources</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/axis2/lib</outputDirectory>
+                            <includeTypes>jar</includeTypes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <systemPropertyVariables>
+                        <jacoco.argLineTemplate>${jacoco.argLineTemplate}</jacoco.argLineTemplate>
+                    </systemPropertyVariables>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 
     <dependencies>
         <dependency>
-            <groupId>org.apache.rampart</groupId>
-            <artifactId>rampart-policy</artifactId>
-            <version>${project.version}</version>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.rampart</groupId>
-            <artifactId>rampart-trust</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.rampart</groupId>
-            <artifactId>rampart-core</artifactId>
-            <version>${project.version}</version>
+            <groupId>org.apache.ant</groupId>
+            <artifactId>ant</artifactId>
+            <version>1.9.6</version>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.sun</groupId>
+            <artifactId>tools</artifactId>
+            <version>1.7.0</version>
+            <scope>system</scope>
+            <systemPath>${java.home}/../lib/tools.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>addressing</artifactId>
+            <type>mar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart</artifactId>
+            <version>${project.version}</version>
+            <type>mar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rahas</artifactId>
+            <version>${project.version}</version>
+            <type>mar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-transport-http</artifactId>
+            <version>${axis2.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-transport-local</artifactId>
+            <version>${axis2.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-adb</artifactId>
+            <version>${axis2.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.axis2</groupId>
+            <artifactId>axis2-testutils</artifactId>
+            <version>${axis2.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rampart-core</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
         </dependency>
     </dependencies>
 </project>
diff --git a/modules/rampart-samples/src/test/conf/log4j.properties b/modules/rampart-samples/src/test/conf/log4j.properties
new file mode 100644
index 0000000..b319014
--- /dev/null
+++ b/modules/rampart-samples/src/test/conf/log4j.properties
@@ -0,0 +1,24 @@
+#
+# 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.
+#
+
+log4j.rootCategory=INFO, CONSOLE
+
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %c - %m%n
diff --git a/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/Controller.java b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/Controller.java
new file mode 100644
index 0000000..e916134
--- /dev/null
+++ b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/Controller.java
@@ -0,0 +1,82 @@
+/*
+ * 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.rampart.samples.runner;
+
+import org.apache.axis2.testutils.PortAllocator;
+import org.apache.tools.ant.Project;
+
+final class Controller {
+    private final Sample sample;
+    private boolean serverReady;
+    private boolean serverStopped;
+    private boolean serverStopDetected;
+
+    Controller(Sample sample) {
+        this.sample = sample;
+    }
+
+    void execute() throws InterruptedException {
+        int port = PortAllocator.allocatePort();
+        Logger logger = new Logger();
+        logger.setErrorPrintStream(System.err);
+        logger.setOutputPrintStream(System.out);
+        logger.setMessageOutputLevel(Project.MSG_INFO);
+        ServerWatcher serverWatcher = new ServerWatcher(this, port);
+        new Thread(serverWatcher).start();
+        try {
+            Thread serverRunnerThread = new Thread(new ServerRunner(this, sample, logger, port));
+            serverRunnerThread.start();
+            try {
+                synchronized (this) {
+                    if (!serverStopped && !serverReady) {
+                        wait();
+                    } else if (serverStopped) {
+                        return;
+                    }
+                }
+                sample.runClient(logger, port);
+            } finally {
+                logger.shutdown();
+                serverRunnerThread.interrupt();
+                synchronized (this) {
+                    while (!serverStopDetected) {
+                        wait();
+                    }
+                }
+            }
+        } finally {
+            serverWatcher.stop();
+        }
+    }
+    
+    synchronized void serverStopped() {
+        serverStopped = true;
+        notifyAll();
+    }
+
+    synchronized void serverReady() {
+        serverReady = true;
+        notifyAll();
+    }
+    
+    synchronized void serverStopDetected() {
+        serverStopDetected = true;
+        notifyAll();
+    }
+}
diff --git a/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/Logger.java b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/Logger.java
new file mode 100644
index 0000000..3893e60
--- /dev/null
+++ b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/Logger.java
@@ -0,0 +1,38 @@
+/*
+ * 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.rampart.samples.runner;
+
+import java.io.PrintStream;
+
+import org.apache.tools.ant.DefaultLogger;
+
+final class Logger extends DefaultLogger {
+    private boolean shutdown;
+
+    @Override
+    protected synchronized void printMessage(String message, PrintStream stream, int priority) {
+        if (!shutdown) {
+            super.printMessage(message, stream, priority);
+        }
+    }
+    
+    void shutdown() {
+        this.shutdown = true;
+    }
+}
diff --git a/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/Sample.java b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/Sample.java
new file mode 100644
index 0000000..83a5510
--- /dev/null
+++ b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/Sample.java
@@ -0,0 +1,64 @@
+/*
+ * 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.rampart.samples.runner;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildLogger;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelper;
+
+final class Sample {
+    private final String group;
+    private final String sampleId;
+
+    Sample(String group, String sampleId) {
+        this.group = group;
+        this.sampleId = sampleId;
+    }
+
+    private void run(BuildLogger logger, int port, String target) {
+        Project project = new Project();
+        File targetDir = new File("target");
+        project.setUserProperty("env.AXIS2_HOME", new File(targetDir, "axis2").getAbsolutePath());
+        project.setUserProperty("build.dir", new File(targetDir, "build").getAbsolutePath());
+        project.setUserProperty("client.port", String.valueOf(port));
+        project.setUserProperty("server.port", String.valueOf(port));
+        StringBuilder vmargs = new StringBuilder();
+        vmargs.append("-Dlog4j.configuration=");
+        vmargs.append(new File("src/test/conf/log4j.properties").getAbsoluteFile().toURI().toString());
+        String jacocoArgLineTemplate = System.getProperty("jacoco.argLineTemplate");
+        if (jacocoArgLineTemplate != null) {
+            vmargs.append(" ");
+            vmargs.append(jacocoArgLineTemplate.replace("@id@", group + ":" + target));
+        }
+        project.setUserProperty("vmargs", vmargs.toString());
+        ProjectHelper.configureProject(project, new File(group + "/build.xml"));
+        project.addBuildListener(logger);
+        project.executeTarget(target);
+    }
+    
+    void runServer(BuildLogger logger, int port) {
+        run(logger, port, "service." + sampleId);
+    }
+    
+    void runClient(BuildLogger logger, int port) {
+        run(logger, port, "client." + sampleId);
+    }
+}
diff --git a/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/SampleTest.java b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/SampleTest.java
new file mode 100644
index 0000000..1a1427b
--- /dev/null
+++ b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/SampleTest.java
@@ -0,0 +1,50 @@
+/*
+ * 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.rampart.samples.runner;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+public class SampleTest extends TestCase {
+    private final Sample sample;
+    
+    public SampleTest(String group, String id) {
+        super(group + "/" + id);
+        this.sample = new Sample(group, id);
+    }
+
+    @Override
+    protected void runTest() throws Throwable {
+        new Controller(sample).execute();
+    }
+
+    public static TestSuite suite() {
+        TestSuite suite = new TestSuite();
+        suite.addTest(new SampleTest("policy", "01"));
+        suite.addTest(new SampleTest("policy", "02"));
+        suite.addTest(new SampleTest("policy", "03"));
+        suite.addTest(new SampleTest("policy", "04"));
+        suite.addTest(new SampleTest("policy", "05"));
+        suite.addTest(new SampleTest("policy", "06"));
+        suite.addTest(new SampleTest("policy", "07"));
+        suite.addTest(new SampleTest("policy", "08"));
+        suite.addTest(new SampleTest("policy", "09"));
+        return suite;
+    }
+}
diff --git a/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/ServerRunner.java b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/ServerRunner.java
new file mode 100644
index 0000000..7f4b237
--- /dev/null
+++ b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/ServerRunner.java
@@ -0,0 +1,43 @@
+/*
+ * 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.rampart.samples.runner;
+
+import org.apache.tools.ant.BuildLogger;
+
+final class ServerRunner implements Runnable {
+    private final Controller controller;
+    private final Sample sample;
+    private final BuildLogger logger;
+    private final int port;
+
+    ServerRunner(Controller controller, Sample sample, BuildLogger logger, int port) {
+        this.controller = controller;
+        this.sample = sample;
+        this.logger = logger;
+        this.port = port;
+    }
+
+    public void run() {
+        try {
+            sample.runServer(logger, port);
+        } finally {
+            controller.serverStopped();
+        }
+    }
+}
diff --git a/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/ServerWatcher.java b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/ServerWatcher.java
new file mode 100644
index 0000000..d8d6e1f
--- /dev/null
+++ b/modules/rampart-samples/src/test/java/org/apache/rampart/samples/runner/ServerWatcher.java
@@ -0,0 +1,86 @@
+/*
+ * 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.rampart.samples.runner;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.ConnectException;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+final class ServerWatcher implements Runnable {
+    private final Controller controller;
+    private final URL url;
+    private boolean serverWasReady;
+    private boolean stopped;
+    
+    ServerWatcher(Controller controller, int port) {
+        this.controller = controller;
+        try {
+            url = new URL("http", "localhost", port, "/axis2/services/");
+        } catch (MalformedURLException ex) {
+            throw new Error("Unexpected exception", ex);
+        }
+    }
+    
+    public synchronized void run() {
+        while (true) {
+            if (stopped) {
+                return;
+            }
+            try {
+                HttpURLConnection connection = (HttpURLConnection)url.openConnection();
+                int responseCode = connection.getResponseCode();
+                InputStream in = connection.getInputStream();
+                try {
+                    byte[] buffer = new byte[1024];
+                    while (in.read(buffer) != -1) {
+                        // Just loop;
+                    }
+                } finally {
+                    in.close();
+                }
+                if (responseCode == 200) {
+                    if (!serverWasReady) {
+                        serverWasReady = true;
+                        controller.serverReady();
+                    }
+                }
+            } catch (ConnectException ex) {
+                if (serverWasReady) {
+                    controller.serverStopDetected();
+                    return;
+                }
+            } catch (IOException ex) {
+                // Just continue trying
+            }
+            try {
+                wait(100);
+            } catch (InterruptedException ex) {
+                return;
+            }
+        }
+    }
+
+    public synchronized void stop() {
+        stopped = true;
+        notifyAll();
+    }
+}
diff --git a/modules/rampart-tests/pom.xml b/modules/rampart-tests/pom.xml
index 2d2b615..9156d97 100644
--- a/modules/rampart-tests/pom.xml
+++ b/modules/rampart-tests/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.rampart</groupId>
         <artifactId>rampart-project</artifactId>
-        <version>1.7.0-SNAPSHOT</version>
+        <version>1.8.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
 
@@ -48,11 +48,9 @@
         </testResources>
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
+                <artifactId>maven-deploy-plugin</artifactId>
                 <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
+                    <skip>true</skip>
                 </configuration>
             </plugin>
         </plugins>
@@ -82,20 +80,10 @@
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-site-plugin</artifactId>
-                <version>2.0-beta-5</version>
-                <configuration>
-                    <templateDirectory>${basedir}</templateDirectory>
-                    <menu ref="parent" />
-                </configuration>
-            </plugin>
-        </plugins>
-    </reporting>
-
 </project>
diff --git a/modules/rampart-tests/src/test/java/org/apache/rahas/SimpleTokenStoreTest.java b/modules/rampart-tests/src/test/java/org/apache/rahas/SimpleTokenStoreTest.java
index cd99ffe..98cce91 100644
--- a/modules/rampart-tests/src/test/java/org/apache/rahas/SimpleTokenStoreTest.java
+++ b/modules/rampart-tests/src/test/java/org/apache/rahas/SimpleTokenStoreTest.java
@@ -23,9 +23,8 @@
 
 import junit.framework.TestCase;
 
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.util.Date;
@@ -156,7 +155,6 @@
 
     public void testSerialize()
         throws Exception {
-        String fileName = "test.ser";
 
         OMFactory factory = OMAbstractFactory.getOMFactory();
         OMNamespace ns1 = factory.createOMNamespace("bar", "x");
@@ -167,30 +165,13 @@
         SimpleTokenStore store = new SimpleTokenStore();
         store.add(t);
 
-        FileOutputStream fos = null;
-        ObjectOutputStream out = null;
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream(baos);
 
-        try {
-            fos = new FileOutputStream(fileName);
-            out = new ObjectOutputStream(fos);
-            out.writeObject(store);
-        } finally {
-            out.close();
-        }
+        out.writeObject(store);
 
-        SimpleTokenStore store2 = null;
-        FileInputStream fis = null;
-        ObjectInputStream in = null;
-        try {
-            fis = new FileInputStream(fileName);
-            in = new ObjectInputStream(fis);
-            store2 = (SimpleTokenStore)in.readObject();
-            in.close();
-        } catch (IOException ex) {
-            ex.printStackTrace();
-        } catch (ClassNotFoundException ex) {
-            ex.printStackTrace();
-        }
+        ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
+        SimpleTokenStore store2 = (SimpleTokenStore)in.readObject();
 
         assertEquals(store.getToken("#1232122").getId(), store2.getToken("#1232122").getId());
         assertEquals(store.getToken("#1232122").getCreated(), store2.getToken("#1232122").getCreated());
diff --git a/modules/rampart-tests/src/test/java/org/apache/rampart/AsymmetricBindingBuilderTest.java b/modules/rampart-tests/src/test/java/org/apache/rampart/AsymmetricBindingBuilderTest.java
index fcb1674..0d8a2a0 100644
--- a/modules/rampart-tests/src/test/java/org/apache/rampart/AsymmetricBindingBuilderTest.java
+++ b/modules/rampart-tests/src/test/java/org/apache/rampart/AsymmetricBindingBuilderTest.java
@@ -38,7 +38,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
 
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.WSSE_NS, WSConstants.BINARY_TOKEN_LN));
@@ -59,7 +59,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.SIG_NS, WSConstants.SIG_LN));
@@ -79,7 +79,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.WSSE_NS, WSConstants.BINARY_TOKEN_LN));
@@ -102,7 +102,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.WSSE_NS, WSConstants.BINARY_TOKEN_LN));
@@ -124,7 +124,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
@@ -148,7 +148,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
@@ -170,7 +170,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
@@ -191,7 +191,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.WSSE_NS,WSConstants.BINARY_TOKEN_LN));
diff --git a/modules/rampart-tests/src/test/java/org/apache/rampart/MessageBuilderTestBase.java b/modules/rampart-tests/src/test/java/org/apache/rampart/MessageBuilderTestBase.java
index 528db6c..b8b16cb 100644
--- a/modules/rampart-tests/src/test/java/org/apache/rampart/MessageBuilderTestBase.java
+++ b/modules/rampart-tests/src/test/java/org/apache/rampart/MessageBuilderTestBase.java
@@ -20,8 +20,6 @@
 import org.apache.axiom.om.OMXMLBuilderFactory;
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.context.ConfigurationContext;
@@ -74,7 +72,7 @@
      * @throws AxisFault
      */
     protected MessageContext getMsgCtx12() throws Exception {
-        return initMsgCtxFromMessage("test-resources/policy/soapmessage.xml");
+        return initMsgCtxFromMessage("test-resources/policy/soapmessage12.xml");
     }
 
     /**
@@ -116,7 +114,7 @@
         return PolicyEngine.getPolicy(builder.getDocumentElement());
     }
 
-    protected void verifySecHeader(Iterator qnameList, SOAPEnvelope env) {
+    protected void verifySecHeader(Iterator<QName> qnameList, SOAPEnvelope env) {
         Iterator secHeaderChildren =
                 env.getHeader().
                         getFirstChildWithName(new QName(WSConstants.WSSE_NS,
@@ -139,16 +137,4 @@
                  "next expected element" + qnameList.next().toString());
         }
     }
-
-    public String getContentTypeForEnvelope(SOAPEnvelope env) {
-        String contentType = SOAP11Constants.SOAP_11_CONTENT_TYPE;  //default
-        if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(env.getNamespace().getNamespaceURI())) {
-            contentType = SOAP11Constants.SOAP_11_CONTENT_TYPE;
-        }
-        else if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(env.getNamespace().getNamespaceURI())) {
-            contentType = SOAP12Constants.SOAP_12_CONTENT_TYPE;
-        }
-        return contentType;
-    }
-
 }
diff --git a/modules/rampart-tests/src/test/java/org/apache/rampart/PolicyAssertionsTest.java b/modules/rampart-tests/src/test/java/org/apache/rampart/PolicyAssertionsTest.java
index 5d5a8ed..29c62be 100644
--- a/modules/rampart-tests/src/test/java/org/apache/rampart/PolicyAssertionsTest.java
+++ b/modules/rampart-tests/src/test/java/org/apache/rampart/PolicyAssertionsTest.java
@@ -16,7 +16,9 @@
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axis2.builder.SOAPBuilder;
 import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisService;
 import org.apache.neethi.Policy;
+import org.apache.ws.security.handler.WSHandlerConstants;
 
 import java.io.ByteArrayInputStream;
 
@@ -80,4 +82,80 @@
         }
 
     }
+
+    public void testHashedPasswordRequiredValid() throws Exception {
+
+        MessageContext ctx = getMsgCtx();
+
+        String policyXml = "test-resources/policy/rampart-hashed-password.xml";
+        Policy policy = loadPolicy(policyXml);
+
+        ctx.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy);
+
+        ctx.getOptions().setUserName( "Ron" );
+        ctx.getOptions().setPassword( "noR" );
+        
+        MessageBuilder builder = new MessageBuilder();
+        builder.build(ctx);
+
+        // Building the SOAP envelope from the OMElement
+        SOAPBuilder soapBuilder = new SOAPBuilder();
+        SOAPEnvelope env = ctx.getEnvelope();
+        ByteArrayInputStream inStream = new ByteArrayInputStream(env.toString().getBytes());
+        env = (SOAPEnvelope) soapBuilder.processDocument(inStream, "text/xml", ctx);
+        ctx.setEnvelope(env);
+
+        ctx.setServerSide(true);
+        AxisService axisService = ctx.getAxisService();            
+        axisService.removeParameter(axisService.getParameter(RampartMessageData.PARAM_CLIENT_SIDE));
+
+        ctx.setProperty(WSHandlerConstants.PW_CALLBACK_REF, new TestCBHandler());
+
+        RampartEngine engine = new RampartEngine();
+        engine.process(ctx);
+
+    }
+
+    public void testHashedPasswordRequiredInvalid() throws Exception {
+
+        MessageContext ctx = getMsgCtx();
+
+        String policyXml = "test-resources/policy/rampart-plaintext-password.xml";
+        Policy policy = loadPolicy(policyXml);
+
+        ctx.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy);
+
+        ctx.getOptions().setUserName( "Ron" );
+        ctx.getOptions().setPassword( "noR" );
+        
+        MessageBuilder builder = new MessageBuilder();
+        builder.build(ctx);
+
+        // Building the SOAP envelope from the OMElement
+        SOAPBuilder soapBuilder = new SOAPBuilder();
+        SOAPEnvelope env = ctx.getEnvelope();
+        ByteArrayInputStream inStream = new ByteArrayInputStream(env.toString().getBytes());
+        env = (SOAPEnvelope) soapBuilder.processDocument(inStream, "text/xml", ctx);
+        ctx.setEnvelope(env);
+
+        ctx.setServerSide(true);
+        AxisService axisService = ctx.getAxisService();            
+        axisService.removeParameter(axisService.getParameter(RampartMessageData.PARAM_CLIENT_SIDE));
+
+        policyXml = "test-resources/policy/rampart-hashed-password.xml";
+        policy = loadPolicy(policyXml);
+
+        ctx.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy);
+        ctx.setProperty(WSHandlerConstants.PW_CALLBACK_REF, new TestCBHandler());
+
+        RampartEngine engine = new RampartEngine();
+
+        try {
+            engine.process(ctx);
+            fail(" This should have thrown RampartException: Invalid UsernameToken Type.");
+        } catch (RampartException expected) {
+            // Ignore intentionally as the test is supposed to throw an exception
+        }
+
+    }
 }
diff --git a/modules/rampart-tests/src/test/java/org/apache/rampart/RampartEngineTest.java b/modules/rampart-tests/src/test/java/org/apache/rampart/RampartEngineTest.java
index 95a1e25..77e54d7 100644
--- a/modules/rampart-tests/src/test/java/org/apache/rampart/RampartEngineTest.java
+++ b/modules/rampart-tests/src/test/java/org/apache/rampart/RampartEngineTest.java
@@ -26,74 +26,41 @@
 import org.apache.neethi.Policy;
 import org.apache.ws.security.WSConstants;
 import org.apache.ws.security.WSSecurityEngineResult;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
 
+@RunWith(JUnit4.class)
 public class RampartEngineTest extends MessageBuilderTestBase {
-
-    public RampartEngineTest(String name) {
-        super(name);
-    }
-
+    /**
+     * Tests that Rampart complains about missing security header in request.
+     * 
+     * @throws Exception
+     */
+    @Test(expected=RampartException.class)
     public void testEmptySOAPMessage() throws Exception {
-
-        try {
-            MessageContext ctx = getMsgCtx();
-
-            String policyXml = "test-resources/policy/rampart-asymm-binding-6-3des-r15.xml";
-            Policy policy = this.loadPolicy(policyXml);
-
-            ctx.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy);
-
-            RampartEngine engine = new RampartEngine();
-            engine.process(ctx);
-        }
-        catch (RampartException e) {
-            assertEquals("Expected rampart to complain about missing security header",
-                         "Missing wsse:Security header in request", e.getMessage());
-        }
-    }
-
-    public void testValidSOAPMessage() throws Exception {
-
         MessageContext ctx = getMsgCtx();
 
         String policyXml = "test-resources/policy/rampart-asymm-binding-6-3des-r15.xml";
-        Policy policy = loadPolicy(policyXml);
+        Policy policy = this.loadPolicy(policyXml);
 
         ctx.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy);
 
-        MessageBuilder builder = new MessageBuilder();
-        builder.build(ctx);
-
-        // Building the SOAP envelope from the OMElement
-        buildSOAPEnvelope(ctx);
-
         RampartEngine engine = new RampartEngine();
-        List<WSSecurityEngineResult> results = engine.process(ctx);
-
-        /*
-        The principle purpose of the test case is to verify that the above processes
-        without throwing an exception. However, perform a minimal amount of validation on the
-        results.
-        */
-        assertNotNull("RampartEngine returned null result", results);
-        //verify cert was stored
-        X509Certificate usedCert = null;
-        for (WSSecurityEngineResult result : results) {
-            Integer action = (Integer) result.get(WSSecurityEngineResult.TAG_ACTION);
-            if (action == WSConstants.SIGN) {
-                //the result is for the signature, which contains the used certificate
-                usedCert = (X509Certificate) result.get(WSSecurityEngineResult.TAG_X509_CERTIFICATE);
-                break;
-            }
-        }
-        assertNotNull("Result of processing did not include a certificate", usedCert);
+        engine.process(ctx);
     }
 
+    @Test
+    public void testValidSOAPMessage() throws Exception {
+        runRampartEngine(getMsgCtx(), "test-resources/policy/rampart-asymm-binding-6-3des-r15.xml");
+    }
+
+    @Test
     public void testValidSOAP12Message() throws Exception {
+        runRampartEngine(getMsgCtx12(), "test-resources/policy/rampart-asymm-binding-6-3des-r15.xml");
+    }
 
-        MessageContext ctx = getMsgCtx12();
-
-        String policyXml = "test-resources/policy/rampart-asymm-binding-6-3des-r15.xml";
+    private void runRampartEngine(MessageContext ctx, String policyXml) throws Exception {
         Policy policy = loadPolicy(policyXml);
 
         ctx.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy);
@@ -130,7 +97,7 @@
         SOAPBuilder soapBuilder = new SOAPBuilder();
         SOAPEnvelope env = ctx.getEnvelope();
         ByteArrayInputStream inStream = new ByteArrayInputStream(env.toString().getBytes());
-        env = (SOAPEnvelope) soapBuilder.processDocument(inStream, getContentTypeForEnvelope(env), ctx);
+        env = (SOAPEnvelope) soapBuilder.processDocument(inStream, env.getVersion().getMediaType().toString(), ctx);
         ctx.setEnvelope(env);
     }
 }
diff --git a/modules/rampart-tests/src/test/java/org/apache/rampart/SymmetricBindingBuilderTest.java b/modules/rampart-tests/src/test/java/org/apache/rampart/SymmetricBindingBuilderTest.java
index e86a4ca..2f5b1df 100644
--- a/modules/rampart-tests/src/test/java/org/apache/rampart/SymmetricBindingBuilderTest.java
+++ b/modules/rampart-tests/src/test/java/org/apache/rampart/SymmetricBindingBuilderTest.java
@@ -17,7 +17,6 @@
 package org.apache.rampart;
 
 import java.util.ArrayList;
-import java.util.Vector;
 
 import javax.xml.namespace.QName;
 
@@ -40,7 +39,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
@@ -89,7 +88,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
@@ -113,7 +112,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
@@ -137,7 +136,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
@@ -159,7 +158,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
         
-        ArrayList list = new ArrayList();
+        ArrayList<QName> list = new ArrayList<QName>();
         
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
diff --git a/modules/rampart-tests/src/test/java/org/apache/rampart/TransportBindingBuilderTest.java b/modules/rampart-tests/src/test/java/org/apache/rampart/TransportBindingBuilderTest.java
index 6def58e..850af3e 100644
--- a/modules/rampart-tests/src/test/java/org/apache/rampart/TransportBindingBuilderTest.java
+++ b/modules/rampart-tests/src/test/java/org/apache/rampart/TransportBindingBuilderTest.java
@@ -38,7 +38,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
 
-        List list = new ArrayList();
+        List<QName> list = new ArrayList<QName>();
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.WSSE_NS, WSConstants.USERNAME_TOKEN_LN));
         list.add(new QName(WSConstants.WSSE_NS, WSConstants.BINARY_TOKEN_LN));
@@ -57,7 +57,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
 
-        List list = new ArrayList();
+        List<QName> list = new ArrayList<QName>();
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.WSSE_NS, WSConstants.USERNAME_TOKEN_LN));
         list.add(new QName(WSConstants.SIG_NS, WSConstants.SIG_LN));
@@ -75,7 +75,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
 
-        List list = new ArrayList();
+        List<QName> list = new ArrayList<QName>();
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         list.add(new QName(WSConstants.WSSE_NS, WSConstants.USERNAME_TOKEN_LN));
         list.add(new QName(WSConstants.ENC_NS, WSConstants.ENC_KEY_LN));
@@ -97,7 +97,7 @@
         MessageBuilder builder = new MessageBuilder();
         builder.build(ctx);
 
-        List list = new ArrayList();
+        List<QName> list = new ArrayList<QName>();
         list.add(new QName(WSConstants.WSU_NS, WSConstants.TIMESTAMP_TOKEN_LN));
         this.verifySecHeader(list.iterator(), ctx.getEnvelope());
     }
diff --git a/modules/rampart-tests/src/test/java/org/apache/rampart/handler/config/InflowConfigurationTest.java b/modules/rampart-tests/src/test/java/org/apache/rampart/handler/config/InflowConfigurationTest.java
deleted file mode 100644
index 4f2ca7b..0000000
--- a/modules/rampart-tests/src/test/java/org/apache/rampart/handler/config/InflowConfigurationTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.handler.config;
-
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.ws.security.handler.WSHandlerConstants;
-
-import junit.framework.TestCase;
-
-public class InflowConfigurationTest extends TestCase {
-
-	public InflowConfigurationTest() {
-		super();
-	}
-
-	public InflowConfigurationTest(String name) {
-		super(name);
-	}
-	
-	public void testGetProperty() {
-		String actionItems = "Timestamp Signature Encrypt";
-		String sigPropFile = "sig.properties";
-		String decPropFile = "enc.properties";
-		String pwcb = "org.apache.axis2.security.PWCallback";
-		
-		InflowConfiguration ifc = new InflowConfiguration();
-		
-		ifc.setActionItems(actionItems);
-		ifc.setSignaturePropFile(sigPropFile);
-		ifc.setDecryptionPropFile(decPropFile);
-		ifc.setPasswordCallbackClass(pwcb);
-		
-		// Check whether the props are there
-		assertTrue("Action items missing", -1 < ifc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSSHandlerConstants.ACTION_ITEMS + ">"
-								+ actionItems + "</"
-								+ WSSHandlerConstants.ACTION_ITEMS + ">"));
-		
-		assertTrue("passwordCallbackClass missing", -1 < ifc.getProperty().getParameterElement()
-				.toString().indexOf(
-						"<" + WSHandlerConstants.PW_CALLBACK_CLASS + ">" + pwcb
-								+ "</" + WSHandlerConstants.PW_CALLBACK_CLASS
-								+ ">"));
-
-		assertTrue("sigPropFile missing", -1 < ifc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.SIG_PROP_FILE + ">"
-								+ sigPropFile + "</"
-								+ WSHandlerConstants.SIG_PROP_FILE + ">"));
-		
-		assertTrue("decPropFile missing", -1 < ifc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.DEC_PROP_FILE + ">"
-								+ decPropFile + "</"
-								+ WSHandlerConstants.DEC_PROP_FILE + ">"));
-	}
-
-}
diff --git a/modules/rampart-tests/src/test/java/org/apache/rampart/handler/config/OutflowConfigurationTest.java b/modules/rampart-tests/src/test/java/org/apache/rampart/handler/config/OutflowConfigurationTest.java
deleted file mode 100644
index 01f786a..0000000
--- a/modules/rampart-tests/src/test/java/org/apache/rampart/handler/config/OutflowConfigurationTest.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed 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.rampart.handler.config;
-
-import junit.framework.TestCase;
-import org.apache.rampart.handler.WSSHandlerConstants;
-import org.apache.ws.security.WSConstants;
-import org.apache.ws.security.handler.WSHandlerConstants;
-
-/**
- * Tests the org.apache.axis2.security.handler.config.OutflowConfiguration
- */
-public class OutflowConfigurationTest extends TestCase {
-
-	public OutflowConfigurationTest() {
-		super();
-	}
-
-	public OutflowConfigurationTest(String name) {
-		super(name);
-	}
-
-	/**
-	 * This sets all the possible properties that can be set with 
-	 * the outflow configuration
-	 */
-	public void testGetProperty() {
-
-		OutflowConfiguration ofc = new OutflowConfiguration();
-
-		String actionItems = "Timestamp Signature Encrypt";
-		String user = "alice";
-		String pwcb = "org.apache.axis2.security.PWCallback";
-		String sigKeyId = "interop.properties";
-		String sigParts = "{Element}{http://schemas.xmlsoap.org/ws/2004/08/"
-				+ "addressing}MessageID;{Element}{http://docs.oasis-open.org/wss/"
-				+ "2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}Timestamp";
-		String optimizeParts = "//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue";
-		String embeddedKeyCallbackClass = "org.apache.axis2.security.PWCallback";
-		String encrUser = "bob";
-		String samlPropFile = "saml.properties";
-		String sigPropFile = "sig.properties";
-		String encPropFile = "enc.properties";
-
-		// Setting the properties in the ofc
-		ofc.setActionItems(actionItems);
-		ofc.setUser(user);
-		ofc.setPasswordCallbackClass(pwcb);
-		ofc.setSignatureKeyIdentifier(sigKeyId);
-		ofc.setEncryptionKeyIdentifier(WSSHandlerConstants.SKI_KEY_IDENTIFIER);
-		ofc.setSignatureParts(sigParts);
-		ofc.setOptimizeParts(optimizeParts);
-		ofc.setEmbeddedKeyCallbackClass(embeddedKeyCallbackClass);
-		ofc.setEncryptionKeyTransportAlgorithm(WSConstants.KEYTRANSPORT_RSA15);
-		ofc.setEncryptionSymAlgorithm(WSConstants.AES_128);
-		ofc.setEncryptionUser(encrUser);
-		ofc.setPasswordType(WSConstants.PW_DIGEST);
-		ofc.setSamlPropFile(samlPropFile);
-		ofc.setSignaturePropFile(sigPropFile);
-		ofc.setEncryptionPropFile(encPropFile);
-
-		// Check whether the props are there
-		assertTrue("Action items missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSSHandlerConstants.ACTION_ITEMS + ">"
-								+ actionItems + "</"
-								+ WSSHandlerConstants.ACTION_ITEMS + ">"));
-
-		assertTrue("User missing", -1 < ofc.getProperty().getParameterElement().toString().indexOf(
-				"<" + WSHandlerConstants.USER + ">" + user + "</"
-						+ WSHandlerConstants.USER + ">"));
-
-		assertTrue("passwordCallbackClass missing", -1 < ofc.getProperty().getParameterElement()
-				.toString().indexOf(
-						"<" + WSHandlerConstants.PW_CALLBACK_CLASS + ">" + pwcb
-								+ "</" + WSHandlerConstants.PW_CALLBACK_CLASS
-								+ ">"));
-
-		assertTrue("sigKeyId missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.SIG_KEY_ID + ">" + sigKeyId
-								+ "</" + WSHandlerConstants.SIG_KEY_ID + ">"));
-
-		assertTrue("encKeyId missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.ENC_KEY_ID + ">"
-								+ WSSHandlerConstants.SKI_KEY_IDENTIFIER + "</"
-								+ WSHandlerConstants.ENC_KEY_ID + ">"));
-
-		assertTrue("signature parts missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.SIGNATURE_PARTS + ">"
-								+ sigParts + "</"
-								+ WSHandlerConstants.SIGNATURE_PARTS + ">"));
-
-		assertTrue("optimize parts missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSSHandlerConstants.OPTIMIZE_PARTS + ">"
-								+ optimizeParts + "</"
-								+ WSSHandlerConstants.OPTIMIZE_PARTS + ">"));
-
-		assertTrue("EmbeddedKeyCallbackClass missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.ENC_CALLBACK_CLASS + ">"
-								+ embeddedKeyCallbackClass + "</"
-								+ WSHandlerConstants.ENC_CALLBACK_CLASS + ">"));
-
-		assertTrue("encryptionKeyTransportAlgorithm missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.ENC_KEY_TRANSPORT + ">"
-								+ WSConstants.KEYTRANSPORT_RSA15 + "</"
-								+ WSHandlerConstants.ENC_KEY_TRANSPORT + ">"));
-
-		assertTrue("encryptionSymAlgorithm missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.ENC_SYM_ALGO + ">"
-								+ WSConstants.AES_128 + "</"
-								+ WSHandlerConstants.ENC_SYM_ALGO + ">"));
-
-		assertTrue("encrUser missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.ENCRYPTION_USER + ">"
-								+ encrUser + "</"
-								+ WSHandlerConstants.ENCRYPTION_USER + ">"));
-
-		assertTrue("passwordType missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.PASSWORD_TYPE + ">"
-								+ WSConstants.PW_DIGEST + "</"
-								+ WSHandlerConstants.PASSWORD_TYPE + ">"));
-
-		assertTrue("samlPropFile missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.SAML_PROP_FILE + ">"
-								+ samlPropFile + "</"
-								+ WSHandlerConstants.SAML_PROP_FILE + ">"));
-
-		assertTrue("sigPropFile missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.SIG_PROP_FILE + ">"
-								+ sigPropFile + "</"
-								+ WSHandlerConstants.SIG_PROP_FILE + ">"));
-		assertTrue("encPropFile missing", -1 < ofc.getProperty().getParameterElement().toString()
-				.indexOf(
-						"<" + WSHandlerConstants.ENC_PROP_FILE + ">"
-								+ encPropFile + "</"
-								+ WSHandlerConstants.ENC_PROP_FILE + ">"));
-	}
-	
-	/**
-	 * This tests multiple action configurations
-	 */
-	public void testMultipleActions() {
-		OutflowConfiguration ofc = new OutflowConfiguration(2);
-
-		String actionItems1 = "Timestamp Signature Encrypt";
-		String user1 = "alice";
-
-		String actionItems2 = "Signature Encrypt Timestamp";
-		String user2 = "alice2";
-		
-		ofc.setActionItems(actionItems1);
-		ofc.setUser(user1);
-		
-		ofc.nextAction();
-		
-		ofc.setActionItems(actionItems2);
-		ofc.setUser(user2);
-
-		assertEquals("Action items mismatch", actionItems2, ofc.getActionItems());
-		assertEquals("Action items mismatch", user2, ofc.getUser());
-		
-		ofc.previousAction();
-		
-		assertEquals("Action items mismatch", actionItems1, ofc.getActionItems());
-		assertEquals("Action items mismatch", user1, ofc.getUser());
-		
-	}
-
-}
diff --git a/modules/rampart-tests/src/test/java/org/apache/ws/secpolicy/model/SecpolicyModelTest.java b/modules/rampart-tests/src/test/java/org/apache/ws/secpolicy/model/SecpolicyModelTest.java
index acefd3e..e2d9c89 100644
--- a/modules/rampart-tests/src/test/java/org/apache/ws/secpolicy/model/SecpolicyModelTest.java
+++ b/modules/rampart-tests/src/test/java/org/apache/ws/secpolicy/model/SecpolicyModelTest.java
@@ -35,12 +35,12 @@
     
     public void testSymmBinding() throws Exception {
         Policy p = this.getPolicy("test-resources/policy-symm-binding.xml");
-        List assertions = (List)p.getAlternatives().next();
+        List<Assertion> assertions = (List<Assertion>)p.getAlternatives().next();
         
         boolean symmBindingFound = false;
         
-        for (Iterator iter = assertions.iterator(); iter.hasNext();) {
-            Assertion assertion = (Assertion) iter.next();
+        for (Iterator<Assertion> iter = assertions.iterator(); iter.hasNext();) {
+            Assertion assertion = iter.next();
             if(assertion instanceof SymmetricBinding) {
                 symmBindingFound = true;
                 SymmetricBinding binding = (SymmetricBinding)assertion;
@@ -67,11 +67,22 @@
     public void testAsymmBinding() throws Exception {
         this.getPolicy("test-resources/policy-asymm-binding.xml");
     }
-    
+
     public void testTransportBinding() throws Exception {
         this.getPolicy("test-resources/policy-transport-binding.xml");
     }
     
+    public void testSymmBindingWithBothProtectionTokenAndEncryptionToken() throws Exception {
+    	boolean exceptionThrown = false;
+    	try {
+    		this.getPolicy("test-resources/policy-symm-binding-fault1.xml");
+    	} catch (IllegalArgumentException e) {
+    		exceptionThrown = true;
+    	}
+    	assertTrue("Policy cannot contain both ProtectionToken and EncryptionToken",
+    			exceptionThrown);
+    }
+    
     private Policy getPolicy(String filePath) throws Exception {
         OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(new FileInputStream(filePath));
         OMElement elem = builder.getDocumentElement();
diff --git a/modules/rampart-tests/test-resources/axis2.xml b/modules/rampart-tests/test-resources/axis2.xml
index 2219d74..48eb3b1 100644
--- a/modules/rampart-tests/test-resources/axis2.xml
+++ b/modules/rampart-tests/test-resources/axis2.xml
@@ -20,7 +20,7 @@
     <parameter name="passwordCallbackClass" locked="false">
         org.apache.axis2.security.PWCallback</parameter>
 
-    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
+    <transportSender name="http" class="org.apache.axis2.transport.http.impl.httpclient4.HTTPClient4TransportSender">
         <parameter name="PROTOCOL" locked="false">HTTP/1.0</parameter>
     </transportSender>
 
diff --git a/modules/rampart-tests/test-resources/policy-symm-binding-fault1.xml b/modules/rampart-tests/test-resources/policy-symm-binding-fault1.xml
new file mode 100644
index 0000000..aa19666
--- /dev/null
+++ b/modules/rampart-tests/test-resources/policy-symm-binding-fault1.xml
@@ -0,0 +1,64 @@
+<wsp:Policy wsu:Id="3" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+	<wsp:ExactlyOne>
+		<wsp:All>
+			<sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+				<wsp:Policy>
+					<sp:ProtectionToken>
+						<wsp:Policy>
+							<sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
+								<wsp:Policy>
+									<sp:RequireDerivedKeys/>
+									<sp:RequireThumbprintReference/>
+									<sp:WssX509V3Token10/>
+								</wsp:Policy>
+							</sp:X509Token>
+						</wsp:Policy>
+					</sp:ProtectionToken>
+					<sp:EncryptionToken>
+						<wsp:Policy>
+							<sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
+								<wsp:Policy>
+									<sp:RequireDerivedKeys/>
+									<sp:RequireThumbprintReference/>
+									<sp:WssX509V3Token10/>
+								</wsp:Policy>
+							</sp:X509Token>
+						</wsp:Policy>
+					</sp:EncryptionToken>
+					<sp:AlgorithmSuite>
+						<wsp:Policy>
+							<sp:Basic128/>
+						</wsp:Policy>
+					</sp:AlgorithmSuite>
+					<sp:Layout>
+						<wsp:Policy>
+							<sp:Strict/>
+						</wsp:Policy>
+					</sp:Layout>
+					<sp:IncludeTimestamp/>
+					<sp:EncryptSignature/>
+					<sp:OnlySignEntireHeadersAndBody/>
+				</wsp:Policy>
+			</sp:SymmetricBinding>
+			<sp:EndorsingSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+				<wsp:Policy>
+					<sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+						<wsp:Policy>
+							<sp:RequireThumbprintReference/>
+							<sp:WssX509V3Token10/>
+						</wsp:Policy>
+					</sp:X509Token>
+				</wsp:Policy>
+			</sp:EndorsingSupportingTokens>
+			<sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+				<wsp:Policy>
+					<sp:MustSupportRefKeyIdentifier/>
+					<sp:MustSupportRefIssuerSerial/>
+					<sp:MustSupportRefThumbprint/>
+					<sp:MustSupportRefEncryptedKey/>
+					<sp:RequireSignatureConfirmation/>
+				</wsp:Policy>
+			</sp:Wss11>
+		</wsp:All>
+	</wsp:ExactlyOne>
+</wsp:Policy>
diff --git a/modules/rampart-tests/test-resources/policy/rampart-hashed-password.xml b/modules/rampart-tests/test-resources/policy/rampart-hashed-password.xml
new file mode 100644
index 0000000..7a250df
--- /dev/null
+++ b/modules/rampart-tests/test-resources/policy/rampart-hashed-password.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsp:Policy wsu:Id="UTOverTransport"
+            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+            xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+  <wsp:ExactlyOne>
+    <wsp:All>
+      <sp:SignedSupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+        <wsp:Policy>
+          <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+            <wsp:Policy>
+              <sp:HashPassword/>
+            </wsp:Policy>
+          </sp:UsernameToken>
+        </wsp:Policy>
+      </sp:SignedSupportingTokens>
+    </wsp:All>
+  </wsp:ExactlyOne>
+</wsp:Policy>
diff --git a/modules/rampart-tests/test-resources/policy/rampart-plaintext-password.xml b/modules/rampart-tests/test-resources/policy/rampart-plaintext-password.xml
new file mode 100644
index 0000000..05b9cac
--- /dev/null
+++ b/modules/rampart-tests/test-resources/policy/rampart-plaintext-password.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsp:Policy wsu:Id="UTOverTransport"
+            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
+            xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+  <wsp:ExactlyOne>
+    <wsp:All>
+      <sp:SignedSupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+        <wsp:Policy>
+          <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"/>
+        </wsp:Policy>
+      </sp:SignedSupportingTokens>
+    </wsp:All>
+  </wsp:ExactlyOne>
+</wsp:Policy>
diff --git a/modules/rampart-tests/test-resources/policy/soapmessage12.xml b/modules/rampart-tests/test-resources/policy/soapmessage12.xml
new file mode 100644
index 0000000..c8e5d0b
--- /dev/null
+++ b/modules/rampart-tests/test-resources/policy/soapmessage12.xml
@@ -0,0 +1,57 @@
+<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
+                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
+                  xmlns:axis2="http://ws.apache.org/namespaces/axis2">
+    <soapenv:Header xmlns:fabrikam="http://example.com/fabrikam">
+        <wsa:MessageID soapenv:mustUnderstand="0">
+            uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5</wsa:MessageID>
+        <wsa:To soapenv:mustUnderstand="0">http://localhost:8081/axis/services/BankPort</wsa:To>
+        <wsa:From axis2:AttrExt="123456789" soapenv:mustUnderstand="0" >
+            <wsa:Address>
+                http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
+            <wsa:ReferenceParameters>
+                <fabrikam:CustomerKey>123456789</fabrikam:CustomerKey>
+            </wsa:ReferenceParameters>
+            <wsa:ReferenceProperties>
+                <fabrikam:ShoppingCart>ABCDEFG</fabrikam:ShoppingCart>
+            </wsa:ReferenceProperties>
+            <axis2:EPRExt axis2:AttrExt="123456789">123456789</axis2:EPRExt>
+        </wsa:From>
+        <wsa:Action>http://ws.apache.org/tests/action</wsa:Action>
+        <wsa:ReplyTo axis2:AttrExt="123456789">
+            <wsa:Address>http://example.com/fabrikam/acct</wsa:Address>
+            <wsa:ReferenceParameters>
+                <fabrikam:CustomerKey>123456789</fabrikam:CustomerKey>
+            </wsa:ReferenceParameters>
+            <wsa:ReferenceProperties>
+                <fabrikam:ShoppingCart>ABCDEFG</fabrikam:ShoppingCart>
+            </wsa:ReferenceProperties>
+            <axis2:EPRExt axis2:AttrExt="123456789">123456789</axis2:EPRExt>
+        </wsa:ReplyTo>
+        
+        <wsa:FaultTo axis2:AttrExt="123456789">
+            <wsa:Address>http://example.com/fabrikam/fault</wsa:Address>
+            <wsa:ReferenceParameters>
+                <fabrikam:CustomerKey>123456789</fabrikam:CustomerKey>
+            </wsa:ReferenceParameters>
+            <wsa:ReferenceProperties>
+                <fabrikam:ShoppingCart>ABCDEFG</fabrikam:ShoppingCart>
+            </wsa:ReferenceProperties>
+            <axis2:EPRExt axis2:AttrExt="123456789">123456789</axis2:EPRExt>
+        </wsa:FaultTo>
+        <wsa:RelatesTo>http://some.previous.message</wsa:RelatesTo>
+        <wsa:RelatesTo RelationshipType="axis2:some.custom.relationship">http://identifier.of.other.message/</wsa:RelatesTo>
+        
+    </soapenv:Header>
+    <soapenv:Body>
+        <ns1:getBalance soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
+                        xmlns:ns1="http://localhost:8081/axis/services/BankPort">
+            <accountNo href="#id0"/>
+        </ns1:getBalance>
+        <multiRef id="id0" soapenc:root="0"
+                  soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
+                  xsi:type="xsd:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
+            1001</multiRef>
+    </soapenv:Body>
+</soapenv:Envelope>
\ No newline at end of file
diff --git a/modules/rampart-trust-mar/pom.xml b/modules/rampart-trust-mar/pom.xml
index f08bcf7..c5de97e 100644
--- a/modules/rampart-trust-mar/pom.xml
+++ b/modules/rampart-trust-mar/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.rampart</groupId>
         <artifactId>rampart-project</artifactId>
-        <version>1.7.0-SNAPSHOT</version>
+        <version>1.8.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
     
@@ -35,30 +35,9 @@
     <packaging>mar</packaging>
     <name>Rampart - Trust-Mar</name>
 
-    <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/axis/axis2/java/rampart/trunk</connection>
-        <developerConnection>
-            scm:svn:https://svn.apache.org/repos/asf/axis/axis2/java/rampart/trunk</developerConnection>
-        <url>http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk</url>
-    </scm>
-
     <build>
-        <sourceDirectory>src/main/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-            </resource>
-        </resources>
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-            <plugin>
                 <groupId>org.apache.axis2</groupId>
                 <artifactId>axis2-mar-maven-plugin</artifactId>
                 <extensions>true</extensions>
diff --git a/modules/rampart-trust/pom.xml b/modules/rampart-trust/pom.xml
index adf100c..a4b5452 100644
--- a/modules/rampart-trust/pom.xml
+++ b/modules/rampart-trust/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.rampart</groupId>
         <artifactId>rampart-project</artifactId>
-        <version>1.7.0-SNAPSHOT</version>
+        <version>1.8.0-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
 
@@ -35,31 +35,8 @@
     <name>Rampart - Trust</name>
 
     <build>
-        <sourceDirectory>src/main/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <excludes>
-                    <exclude>**/*.java</exclude>                     
-                </excludes>
-            </resource>
-        </resources> 
-        <testResources>
-            <testResource>
-                <directory>${project.basedir}/src/test/resources</directory>
-            </testResource>
-        </testResources>
-
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-            <plugin>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <!--configuration>
                         <includes>
@@ -82,6 +59,28 @@
             <scope>runtime</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.ws.security</groupId>
+            <artifactId>wss4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opensaml</groupId>
+            <artifactId>opensaml</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>xalan</groupId>
+            <artifactId>xalan</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <scope>test</scope>
@@ -92,19 +91,4 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-site-plugin</artifactId>
-                <version>2.0-beta-5</version>
-                <configuration>
-                    <templateDirectory>${basedir}</templateDirectory>
-                    <menu ref="parent" />
-                </configuration>
-            </plugin>
-        </plugins>
-    </reporting>
-
 </project>
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java b/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java
index 7194688..2f0b906 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/RahasData.java
@@ -19,7 +19,7 @@
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMXMLBuilderFactory;
-import org.apache.axiom.om.util.Base64;
+import org.apache.axiom.util.base64.Base64Utils;
 import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.context.MessageContext;
 import org.apache.ws.security.WSConstants;
@@ -395,7 +395,7 @@
             OMElement binSecElem = entropyElem.getFirstElement();
             if (binSecElem != null && binSecElem.getText() != null
                 && !"".equals(binSecElem.getText())) {
-                this.requestEntropy = Base64.decode(binSecElem.getText());
+                this.requestEntropy = Base64Utils.decode(binSecElem.getText());
             } else {
                 throw new TrustException("malformedEntropyElement",
                                          new String[]{entropyElem.toString()});
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/STSMessageReceiver.java b/modules/rampart-trust/src/main/java/org/apache/rahas/STSMessageReceiver.java
index 944ad45..553af5f 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/STSMessageReceiver.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/STSMessageReceiver.java
@@ -39,7 +39,7 @@
                     .getParameter(TokenRequestDispatcherConfig.CONFIG_PARAM_KEY);
             Parameter paramFile = inMessage
                     .getParameter(TokenRequestDispatcherConfig.CONFIG_FILE_KEY);
-            TokenRequestDispatcher dispatcher = null;
+            TokenRequestDispatcher dispatcher;
             if (param != null) {
                 dispatcher = new TokenRequestDispatcher(param
                         .getParameterElement().getFirstChildWithName(
@@ -53,12 +53,8 @@
                                 .getProperty(TokenRequestDispatcherConfig.CONFIG_PARAM_KEY));
             }
             
-            if(dispatcher != null) {
-                SOAPEnvelope responseEnv = dispatcher.handle(inMessage, outMessage);
-                outMessage.setEnvelope(responseEnv);
-            } else {
-                throw new TrustException("missingDispatcherConfiguration");
-            }
+            SOAPEnvelope responseEnv = dispatcher.handle(inMessage, outMessage);
+			outMessage.setEnvelope(responseEnv);
         } catch (TrustException e) {
             e.printStackTrace();
             //Log the exception
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java b/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java
index 61ebc08..74e0e56 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java
@@ -23,7 +23,12 @@
 import javax.xml.namespace.QName;
 
 import java.io.Serializable;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -86,17 +91,13 @@
     }
 
     public String[] getTokenIdentifiers() throws TrustException {       
-        List identifiers = new ArrayList();
-        
         readLock.lock();
         try {
-            for (Iterator iterator = tokens.keySet().iterator(); iterator.hasNext();) {
-                identifiers.add(iterator.next());
-            }
+            Set identifiers = tokens.keySet();
+            return (String[]) identifiers.toArray(new String[identifiers.size()]);
         } finally {
             readLock.unlock();
         }
-        return (String[]) identifiers.toArray(new String[identifiers.size()]);
     }
 
     public Token[] getValidTokens() throws TrustException {
@@ -116,8 +117,7 @@
         return getTokens(Token.EXPIRED);
     }
 
-    private Token[] getTokens(int[] states) throws TrustException {
-        processTokenExpiry();
+    private Token[] getTokens(int... states) throws TrustException {
         List tokens = new ArrayList();
         
         readLock.lock();
@@ -125,6 +125,7 @@
         try {
             for (Iterator iterator = this.tokens.values().iterator(); iterator.hasNext();) {
                 Token token = (Token) iterator.next();
+                processTokenExpiry(token);
                 for (int i = 0; i < states.length; i++) {
                     if (token.getState() == states[i]) {
                         tokens.add(token);
@@ -138,28 +139,7 @@
         return (Token[]) tokens.toArray(new Token[tokens.size()]);
     }
 
-    private Token[] getTokens(int state) throws TrustException {
-        processTokenExpiry();
-        List tokens = new ArrayList();
-        
-        readLock.lock();
-        
-        try {
-            for (Iterator iterator = this.tokens.values().iterator(); iterator.hasNext();) {
-                Token token = (Token) iterator.next();
-                if (token.getState() == state) {
-                    tokens.add(token);
-                }
-            }
-        } finally {
-            readLock.unlock();
-        }
-        return (Token[]) tokens.toArray(new Token[tokens.size()]);
-    }
-
     public Token getToken(String id) throws TrustException {
-        processTokenExpiry();
-        
         readLock.lock();
         
         Token token;
@@ -172,6 +152,7 @@
                 //Try to find the token using attached refs & unattached refs
                 for (Iterator iterator = this.tokens.values().iterator(); iterator.hasNext();) {
                     Token tempToken = (Token) iterator.next();
+                    processTokenExpiry(tempToken);
                     OMElement elem = tempToken.getAttachedReference();
                     if(elem != null && id.equals(this.getIdFromSTR(elem))) {
                         token = tempToken;
@@ -182,7 +163,8 @@
                     }
                     
                 }
-                
+            } else {
+                processTokenExpiry(token);
             }
         
         } finally {
@@ -202,20 +184,10 @@
         }        
     }
     
-    protected void processTokenExpiry() throws TrustException {
-        
-        readLock.lock();
-        
-        try {
-            for (Iterator iterator = tokens.values().iterator(); iterator.hasNext();) {
-                Token token = (Token) iterator.next();
-                if (token.getExpires() != null &&
-                    token.getExpires().getTime() < System.currentTimeMillis()) {
-                    token.setState(Token.EXPIRED);
-                }
-            }
-        } finally {
-            readLock.unlock();
+    protected void processTokenExpiry(Token token) throws TrustException {
+        if (token.getExpires() != null &&
+            token.getExpires().getTime() < System.currentTimeMillis()) {
+            token.setState(Token.EXPIRED);
         }
     }
     
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java b/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java
index 200b48c..2416a5b 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/client/STSClient.java
@@ -20,9 +20,9 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMNode;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.om.util.Base64;
+import org.apache.axiom.om.OMXMLBuilderFactory;
 import org.apache.axiom.soap.SOAP12Constants;
+import org.apache.axiom.util.base64.Base64Utils;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.addressing.EndpointReference;
@@ -474,10 +474,10 @@
                                                           BINARY_SECRET))) {
                 //First check for the binary secret
                 String b64Secret = child.getText();
-                secret = Base64.decode(b64Secret);
+                secret = Base64Utils.decode(b64Secret);
             } else if (child.getQName().equals(new QName(ns, WSConstants.ENC_KEY_LN))) {
 
-                Element domChild = (Element) new StAXOMBuilder(
+                Element domChild = (Element)OMXMLBuilderFactory.createStAXOMBuilder(
                         OMAbstractFactory.getMetaFactory(
                                 OMAbstractFactory.FEATURE_DOM).getOMFactory(),
                         child.getXMLStreamReader()).getDocumentElement();
@@ -505,7 +505,7 @@
                 if (binSecElem != null && binSecElem.getText() != null
                     && !"".equals(binSecElem.getText().trim())) {
 
-                    byte[] serviceEntr = Base64.decode(binSecElem.getText());
+                    byte[] serviceEntr = Base64Utils.decode(binSecElem.getText());
 
                     //Right now we only use PSHA1 as the computed key algo                    
                     P_SHA1 p_sha1 = new P_SHA1();
@@ -718,10 +718,10 @@
                     this.requestorEntropy =
                             WSSecurityUtil.generateNonce(this.algorithmSuite.
                                     getMaximumSymmetricKeyLength()/8);
-                    binSec.setText(Base64.encode(this.requestorEntropy));
+                    binSec.setText(Base64Utils.encode(this.requestorEntropy));
 
                     if (log.isDebugEnabled()) {
-                        log.debug("Clien entropy : " + Base64.encode(this.requestorEntropy));
+                        log.debug("Clien entropy : " + Base64Utils.encode(this.requestorEntropy));
                     }
 
                     // Add the ComputedKey element
@@ -744,10 +744,10 @@
                     this.requestorEntropy =
                             WSSecurityUtil.generateNonce(this.algorithmSuite.
                                     getMaximumSymmetricKeyLength()/8);
-                    binSec.setText(Base64.encode(this.requestorEntropy));
+                    binSec.setText(Base64Utils.encode(this.requestorEntropy));
 
                     if (log.isDebugEnabled()) {
-                        log.debug("Clien entropy : " + Base64.encode(this.requestorEntropy));
+                        log.debug("Clien entropy : " + Base64Utils.encode(this.requestorEntropy));
                     }
 
                     // Add the ComputedKey element
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAML2TokenIssuer.java b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAML2TokenIssuer.java
index 8d7b312..2e32a92 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAML2TokenIssuer.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAML2TokenIssuer.java
@@ -136,7 +136,7 @@
      *       <wst:TokenType>...</wst:TokenType>
      *       <wst:RequestedSecurityToken>...</wst:RequestedSecurityToken>
      *       ...
-     *       <wsp:AppliesTo xmlns:wsp="...”>...</wsp:AppliesTo>
+     *       <wsp:AppliesTo xmlns:wsp="...">...</wsp:AppliesTo>
      *       <wst:RequestedAttachedReference>
      *       ...
      *       </wst:RequestedAttachedReference>
@@ -359,7 +359,7 @@
      *           ...
      *       </saml2:NameID>
      *       <saml2:SubjectConfirmation
-     *               Method=”urn:oasis:names:tc:SAML:2.0:cm:holder-of-key”>
+     *               Method="urn:oasis:names:tc:SAML:2.0:cm:holder-of-key">
      *           <saml2:SubjectConfirmationData
      *                   xsi:type="saml2:KeyInfoConfirmationDataType">
      *               <ds:KeyInfo>
@@ -441,8 +441,8 @@
      * <saml:Subject>
      *       <saml:NameIdentifier
      *                   NameQualifier="www.example.com"
-     *                   Format=“urn:oasis:names:tc:SAML:1.1:nameid-
-     *           format:X509SubjectName”>
+     *                   Format="urn:oasis:names:tc:SAML:1.1:nameid-
+     *           format:X509SubjectName">
      *           uid=joe,ou=people,ou=saml-demo,o=baltimore.com
      *       </saml:NameIdentifier>
      *       <saml:SubjectConfirmation>
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SCTIssuerConfig.java b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SCTIssuerConfig.java
index 5d0f231..891c2fc 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SCTIssuerConfig.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SCTIssuerConfig.java
@@ -17,7 +17,8 @@
 package org.apache.rahas.impl;
 
 import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.rahas.TrustException;
 
 import javax.xml.namespace.QName;
@@ -68,10 +69,10 @@
     public static SCTIssuerConfig load(String configFilePath)
             throws TrustException {
         FileInputStream fis;
-        StAXOMBuilder builder;
+        OMXMLParserWrapper builder;
         try {
             fis = new FileInputStream(configFilePath);
-            builder = new StAXOMBuilder(fis);
+            builder = OMXMLBuilderFactory.createOMBuilder(fis);
         } catch (Exception e) {
             throw new TrustException("errorLoadingConfigFile",
                     new String[] { configFilePath });
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenCancelerConfig.java b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenCancelerConfig.java
index a125c23..bddc9ba 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenCancelerConfig.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenCancelerConfig.java
@@ -16,7 +16,8 @@
 package org.apache.rahas.impl;
 
 import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.rahas.TrustException;
 
 import javax.xml.namespace.QName;
@@ -68,10 +69,10 @@
     public static TokenCancelerConfig load(String configFilePath)
             throws TrustException {
         FileInputStream fis;
-        StAXOMBuilder builder;
+        OMXMLParserWrapper builder;
         try {
             fis = new FileInputStream(configFilePath);
-            builder = new StAXOMBuilder(fis);
+            builder = OMXMLBuilderFactory.createOMBuilder(fis);
         } catch (Exception e) {
             throw new TrustException("errorLoadingConfigFile", new String[] { configFilePath });
         }
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenIssuerUtil.java b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenIssuerUtil.java
index 620d078..27319cf 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenIssuerUtil.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/TokenIssuerUtil.java
@@ -18,7 +18,7 @@
 import java.security.SecureRandom;
 
 import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.util.Base64;
+import org.apache.axiom.util.base64.Base64Utils;
 import org.apache.rahas.RahasConstants;
 import org.apache.rahas.RahasData;
 import org.apache.rahas.Token;
@@ -94,7 +94,7 @@
             //set the RPT to include a ComputedKey element
 
             OMElement respEntrElem = TrustUtil.createEntropyElement(wstVersion, rstrElem);
-            String entr = Base64.encode(data.getResponseEntropy());
+            String entr = Base64Utils.encode(data.getResponseEntropy());
             OMElement binSecElem = TrustUtil.createBinarySecretElement(wstVersion,
                                                             respEntrElem,
                                                             RahasConstants.BIN_SEC_TYPE_NONCE);
@@ -141,7 +141,7 @@
                 OMElement binSecElem = TrustUtil.createBinarySecretElement(wstVersion,
                                                                            reqProofTokElem,
                                                                            null);
-                binSecElem.setText(Base64.encode(secret));
+                binSecElem.setText(Base64Utils.encode(secret));
                 token.setSecret(secret);
             } else {
                 throw new IllegalArgumentException(config.proofKeyType);
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLUtils.java b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLUtils.java
index 01e0676..dd58343 100644
--- a/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLUtils.java
+++ b/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLUtils.java
@@ -1,5 +1,6 @@
 package org.apache.rahas.impl.util;
 
+import org.apache.axiom.util.UIDGenerator;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.rahas.RahasConstants;
@@ -25,8 +26,6 @@
 import org.opensaml.xml.security.SecurityHelper;
 import org.opensaml.xml.security.credential.Credential;
 import org.opensaml.xml.signature.*;
-import org.opensaml.xml.signature.KeyInfo;
-import org.opensaml.xml.signature.X509Data;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -386,7 +385,7 @@
      * This method creates the final SAML assertion. The final SAML assertion would looks like as follows,
      *  <saml:Assertion  AssertionID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc"
      *                   IssueInstant="2003-04-17T00:46:02Z"
-     *                   Issuer=”www.opensaml.org”
+     *                   Issuer="www.opensaml.org"
      *                   MajorVersion="1"
      *                   MinorVersion="1"
      *                   xmlns="urn:oasis:names:tc:SAML:1.0:assertion">
@@ -436,7 +435,8 @@
         assertion.setIssuer(issuerName);
         assertion.setConditions(SAMLUtils.createConditions(notBefore, notOnOrAfter));
         assertion.getStatements().addAll(statements);
-
+        assertion.setID(UIDGenerator.generateUID());
+        assertion.setIssueInstant(new DateTime());
         return assertion;
     }
 
@@ -565,7 +565,7 @@
         // Encoding type set to http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0
         // #Base64Binary
         keyIdentifier.setEncodingType(KeyIdentifier.ENCODING_TYPE_BASE64_BINARY);
-        keyIdentifier.setValueType(WSSecurityConstants.THUMB_PRINT_SHA1);
+        keyIdentifier.setValueType(WSSecurityConstants.WS_SECURITY11_NS+"#ThumbprintSHA1");
         keyIdentifier.setValue(getThumbprintSha1(certificate));
 
         securityTokenReference.getUnknownXMLObjects().add(keyIdentifier);
diff --git a/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties b/modules/rampart-trust/src/main/resources/org/apache/rahas/errors.properties
similarity index 100%
rename from modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties
rename to modules/rampart-trust/src/main/resources/org/apache/rahas/errors.properties
diff --git a/pom.xml b/pom.xml
index 4666ecf..75a4a3d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache</groupId>
         <artifactId>apache</artifactId>
-        <version>8</version>
+        <version>17</version>
     </parent>
 
     <groupId>org.apache.rampart</groupId>
@@ -33,7 +33,7 @@
     <artifactId>rampart-project</artifactId>
     <packaging>pom</packaging>
     <description> WS-Security, WS-Trust and WS-SecureConversation implementaion for Apache Axis2 </description>
-    <version>1.7.0-SNAPSHOT</version>
+    <version>1.8.0-SNAPSHOT</version>
     <name>Apache Rampart</name>
     <url>http://axis.apache.org/axis2/java/rampart</url>
 
@@ -118,6 +118,13 @@
         <url>http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk</url>
     </scm>
 
+    <distributionManagement>
+        <site>
+            <id>site</id>
+            <url>scm:svn:https://svn.apache.org/repos/asf/axis/site/axis2/java/rampart-staging</url>
+        </site>
+    </distributionManagement>
+    
     <build>
         <pluginManagement>
             <plugins>
@@ -126,16 +133,66 @@
                     <configuration>
                         <autoVersionSubmodules>true</autoVersionSubmodules>
                         <preparationGoals>clean install</preparationGoals>
+                        <tagNameFormat>v@{project.version}</tagNameFormat>
                     </configuration>
                 </plugin>
                 <plugin>
                     <groupId>org.apache.axis2</groupId>
                     <artifactId>axis2-mar-maven-plugin</artifactId>
-                    <version>1.5.4</version>
+                    <version>${axis2.version}</version>
                 </plugin>
                 <plugin>
                     <artifactId>maven-surefire-plugin</artifactId>
                     <version>2.10</version>
+                    <configuration>
+                        <argLine>${jacoco.surefireArgLine}</argLine>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>build-helper-maven-plugin</artifactId>
+                    <version>1.7</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.codehaus.gmavenplus</groupId>
+                    <artifactId>gmavenplus-plugin</artifactId>
+                    <version>1.5</version>
+                    <dependencies>
+                        <dependency>
+                            <groupId>org.codehaus.groovy</groupId>
+                            <artifactId>groovy-all</artifactId>
+                            <version>2.4.4</version>
+                        </dependency>
+                    </dependencies>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-dependency-plugin</artifactId>
+                    <version>2.6</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-antrun-plugin</artifactId>
+                    <version>1.7</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.axis2</groupId>
+                    <artifactId>axis2-repo-maven-plugin</artifactId>
+                    <version>${axis2.version}</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-site-plugin</artifactId>
+                    <version>3.4</version>
+                    <configuration>
+                        <!-- Required by maven-scm-publish-plugin -->
+                        <skipDeploy>true</skipDeploy>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-assembly-plugin</artifactId>
+                    <version>2.6</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-javadoc-plugin</artifactId>
+                    <version>2.10.3</version>
                 </plugin>
             </plugins>
         </pluginManagement>
@@ -157,110 +214,240 @@
                                     <banPluginRepositories>true</banPluginRepositories>
                                     <!-- We still need to allow the Apache snapshot repository -->
                                     <allowSnapshotRepositories>true</allowSnapshotRepositories>
+                                    <allowSnapshotPluginRepositories>true</allowSnapshotPluginRepositories>
                                 </requireNoRepositories>
                             </rules>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.codehaus.gmavenplus</groupId>
+                <artifactId>gmavenplus-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>initialize</id>
+                        <phase>initialize</phase>
+                        <goals>
+                            <goal>execute</goal>
+                        </goals>
+                        <configuration>
+                            <scripts>
+                                <script>
+                                    <!-- Skip Jacoco if necessary -->
+                                    if (project.packaging == 'pom' || project.properties['skipTests'] == 'true') {
+                                        project.properties['skipJacoco'] = 'true'
+                                    }
+                                </script>
+                            </scripts>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>prepare-site</id>
+                        <phase>pre-site</phase>
+                        <goals>
+                            <goal>execute</goal>
+                        </goals>
+                        <configuration>
+                            <scripts>
+                                <script>
+                                    import java.util.Date
+                                    import java.text.MessageFormat
+                                    project.properties['release_date'] = MessageFormat.format("{0,date,MMMMM dd, yyyy}", new Date())
+                                    project.properties['release_version'] = project.version.replaceAll("-SNAPSHOT", "")
+                                    project.properties['skipSiteSite'] = String.valueOf(!new File(project.basedir, 'src/site/site.xml').exists())
+                                </script>
+                            </scripts>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>check-site</id>
+                        <phase>post-site</phase>
+                        <goals>
+                            <goal>execute</goal>
+                        </goals>
+                        <configuration>
+                            <scripts>
+                                <script>
+                                    project.properties['skipSiteStage'] = String.valueOf(!new File(project.reporting.outputDirectory).exists())
+                                </script>
+                            </scripts>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <version>${jacoco.version}</version>
+                <executions>
+                    <execution>
+                        <id>prepare-agent-for-surefire</id>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                        <configuration>
+                            <propertyName>jacoco.surefireArgLine</propertyName>
+                            <!-- Anonymize the session ID (by default it contains the name of the host executing the build) -->
+                            <sessionId>mvn:${project.groupId}:${project.artifactId}:${project.version}:surefire</sessionId>
+                        </configuration>
+                    </execution>
+                </executions>
+                <configuration>
+                    <skip>${skipJacoco}</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>attach-jacoco-exec</id>
+                        <phase>test</phase>
+                        <goals>
+                            <goal>attach-artifact</goal>
+                        </goals>
+                        <configuration>
+                            <skipAttach>${skipJacoco}</skipAttach>
+                            <artifacts>
+                                <artifact>
+                                    <file>${project.build.directory}/jacoco.exec</file>
+                                    <classifier>jacoco</classifier>
+                                    <type>exec</type>
+                                </artifact>
+                            </artifacts>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <!-- We need (some of) the source JARs for the code coverage analysis. -->
+                <artifactId>maven-source-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>source-jars</id>
+                        <goals>
+                            <goal>jar-no-fork</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+            </plugin>
             
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>2.0</version>
                 <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
+                    <source>1.6</source>
+                    <target>1.6</target>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>animal-sniffer-maven-plugin</artifactId>
+                <version>1.14</version>
+                <executions>
+                    <execution>
+                        <id>check</id>
+                        <phase>verify</phase>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                        <configuration>
+                            <signature>
+                                <groupId>org.codehaus.mojo.signature</groupId>
+                                <artifactId>java16</artifactId>
+                                <version>1.1</version>
+                            </signature>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
 
             <plugin>
                 <artifactId>maven-site-plugin</artifactId>
-                <version>2.0-beta-5</version>
-                <inherited>false</inherited>
+                <executions>
+                    <execution>
+                        <id>default-site</id>
+                        <phase>site</phase>
+                        <goals>
+                            <goal>site</goal>
+                        </goals>
+                        <configuration>
+                            <skip>${skipSiteSite}</skip>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>site-stage</id>
+                        <phase>site-deploy</phase>
+                        <goals>
+                            <goal>stage</goal>
+                        </goals>
+                        <configuration>
+                            <skip>${skipSiteStage}</skip>
+                        </configuration>
+                    </execution>
+                </executions>
+                <configuration>
+                    <!-- Don't deploy; we use maven-scm-publish-plugin -->
+                    <skipDeploy>true</skipDeploy>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-scm-publish-plugin</artifactId>
+                <version>1.0-beta-2</version>
             </plugin>
         </plugins>
     </build>
 
-
-    <dependencies>
-
-        <!-- Axis2 and Axiom Dependencies -->
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-kernel</artifactId>
-            <version>${axis2.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>mex</artifactId>
-            <version>${axis2.version}</version>
-            <classifier>impl</classifier>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-mtompolicy</artifactId>
-            <version>${axis2.version}</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>addressing</artifactId>
-            <type>mar</type>
-            <version>${axis2.version}</version>
-            <scope>compile</scope>
-        </dependency>
-
-        <!-- Other Rampart Dependencies -->
-        <dependency>
-            <groupId>org.apache.ws.security</groupId>
-            <artifactId>wss4j</artifactId>
-            <version>${wss4j.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>xalan</groupId>
-            <artifactId>xalan</artifactId>
-            <version>2.7.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.opensaml</groupId>
-            <artifactId>opensaml</artifactId>
-            <version>${opensaml.version}</version>
-            <exclusions>
-                <!-- Don't allow OpenSAML to impose a particular logging implementation -->
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>jcl-over-slf4j</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>log4j-over-slf4j</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.3</version>
-        </dependency>
-        <dependency>
-            <groupId>bouncycastle</groupId>
-            <artifactId>bcprov-jdk15</artifactId>
-            <version>${bcprov.jdk15.version}</version>
-        </dependency>
-
-        <!-- Junit Dependency -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>${junit.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-    </dependencies>
-
+    <reporting>
+        <plugins>
+            <plugin>
+                <artifactId>maven-project-info-reports-plugin</artifactId>
+                <version>2.8.1</version>
+                <reportSets>
+                    <reportSet>
+                        <reports>
+                            <report>project-team</report>
+                            <report>dependencies</report>
+                            <report>mailing-list</report>
+                        </reports>
+                    </reportSet>
+                </reportSets>
+            </plugin>
+        </plugins>
+    </reporting>
+    
     <dependencyManagement>
         <dependencies>
+            <!-- Axis2 dependencies -->
+            <dependency>
+                <groupId>org.apache.axis2</groupId>
+                <artifactId>axis2-kernel</artifactId>
+                <version>${axis2.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.axis2</groupId>
+                <artifactId>axis2-mtompolicy</artifactId>
+                <version>${axis2.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.axis2</groupId>
+                <artifactId>mex</artifactId>
+                <version>${axis2.version}</version>
+                <classifier>impl</classifier>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.axis2</groupId>
+                <artifactId>addressing</artifactId>
+                <version>${axis2.version}</version>
+                <type>mar</type>
+            </dependency>
+            
             <!-- Since Rampart depends on DOOM, but axiom-dom is not a transitive
                  dependency, we need to manage the Axiom version. -->
             <dependency>
@@ -278,7 +465,49 @@
                 <artifactId>axiom-dom</artifactId>
                 <version>${axiom.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.apache.ws.commons.axiom</groupId>
+                <artifactId>axiom-truth</artifactId>
+                <version>${axiom.version}</version>
+            </dependency>
 
+            <!-- Other Rampart Dependencies -->
+            <dependency>
+                <groupId>org.apache.ws.security</groupId>
+                <artifactId>wss4j</artifactId>
+                <version>${wss4j.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.bouncycastle</groupId>
+                <artifactId>bcprov-jdk15on</artifactId>
+                <version>${bcprov.jdk15.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>xalan</groupId>
+                <artifactId>xalan</artifactId>
+                <version>2.7.1</version>
+            </dependency>
+            <dependency>
+                <groupId>org.opensaml</groupId>
+                <artifactId>opensaml</artifactId>
+                <version>${opensaml.version}</version>
+                <exclusions>
+                    <!-- Don't allow OpenSAML to impose a particular logging implementation -->
+                    <exclusion>
+                        <groupId>org.slf4j</groupId>
+                        <artifactId>jcl-over-slf4j</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.slf4j</groupId>
+                        <artifactId>log4j-over-slf4j</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.bouncycastle</groupId>
+                        <artifactId>bcprov-jdk15</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            
             <dependency>
                 <groupId>org.slf4j</groupId>
                 <artifactId>slf4j-log4j12</artifactId>
@@ -320,21 +549,17 @@
                     </exclusion>
                 </exclusions>
             </dependency>
+            <dependency>
+                <groupId>junit</groupId>
+                <artifactId>junit</artifactId>
+                <version>4.12</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
     <profiles>
         <profile>
             <id>apache-release</id>
-            <activation>
-                <property>
-                    <name>release</name>
-                </property>
-            </activation>
-            <modules>
-                <module>modules/documentation</module>
-                <module>modules/distribution</module>
-            </modules>
             <build>
                 <plugins>
                     <plugin>
@@ -355,22 +580,26 @@
                             </execution>
                         </executions>
                     </plugin>
+                    <plugin>
+                        <artifactId>maven-source-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <!-- Skip the execution configured in org.apache:apache. We use our own configuration. -->
+                                <id>attach-sources</id>
+                                <phase>none</phase>
+                                <goals>
+                                    <goal>jar</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
                 </plugins>
             </build>
         </profile>
-        
-        <profile>
-            <!-- Profile that includes all modules. This is handy when using maven-release-plugin
-                 for anything else than doing a release. -->
-            <id>everything</id>
-            <modules>
-                <module>modules/documentation</module>
-                <module>modules/distribution</module>
-            </modules>
-        </profile>
     </profiles>
 
     <modules>
+        <module>apidocs</module>
         <module>modules/rampart-policy</module>
         <module>modules/rampart-trust</module>
         <module>modules/rampart-core</module>
@@ -378,24 +607,35 @@
         <module>modules/rampart-mar</module>
         <module>modules/rampart-trust-mar</module>
         <module>modules/rampart-integration</module>
-        <!-- Compile sample codes -->
-        <module>modules/rampart-samples</module>
+        <module>modules/rampart-samples</module> <!-- Compile sample codes -->
+        <module>modules/distribution</module>
+        <module>code-coverage</module>
     </modules>
 
     <properties>
-        <axis2.version>1.7.0-SNAPSHOT</axis2.version>
-        <axiom.version>1.2.14-SNAPSHOT</axiom.version>
+        <axis2.version>1.8.0-SNAPSHOT</axis2.version>
+        <axiom.version>1.3.0-SNAPSHOT</axiom.version>
 
-        <wss4j.version>1.6.4</wss4j.version>
+        <wss4j.version>1.6.19</wss4j.version>
         <opensaml.version>2.5.1-1</opensaml.version>
 
-        <bcprov.jdk15.version>140</bcprov.jdk15.version>
+        <bcprov.jdk15.version>1.49</bcprov.jdk15.version>
 
-        <junit.version>3.8.2</junit.version>
-
-        <!-- distribution properties -->
-        <dist.dir>rampart-${project.version}</dist.dir>
         <failIfNoTests>false</failIfNoTests>
 
+        <jacoco.version>0.7.5.201505241946</jacoco.version>
     </properties>
+
+    <pluginRepositories>
+         <pluginRepository>
+             <id>apache.snapshots</id>
+             <url>http://repository.apache.org/snapshots/</url>
+             <snapshots>
+                 <enabled>true</enabled>
+             </snapshots>
+             <releases>
+                 <enabled>false</enabled>
+             </releases>
+         </pluginRepository>
+    </pluginRepositories>
 </project>
diff --git a/release-docs/ChangeLog.txt b/release-docs/ChangeLog.txt
deleted file mode 100644
index e491892..0000000
--- a/release-docs/ChangeLog.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-This file contains a listing of all Jira issues that have been closed
-for a given release.
-
-Release 1.6.0 - 06 Jun 2011
-===========================
-** Bug
-    * [RAMPART-327] - SVN locations mentioned in the developer guide are obsoleted
-    * [RAMPART-326] - Soap faults would not be secured if parameter based configuration is used
-    * [RAMPART-317] - Rampart Trust implementation does not properly handle SAML token with Bearer subject confirmation method
-    * [RAMPART-305] - If Rampart detects a security error a HTML page is send to the client instead of a SOAP fault
-    * [RAMPART-299] - Rampart ignores BootstrapPolicy settings in message exchange with WS-SecureConversation STS
-    * [RAMPART-398] - Client using SymmetricBinding runs slower and slower as more requests are made
-    * [RAMPART-264] - PolicyBasedResultsValidator fails on ContentEncryptedElements and EncryptedElements
-    * [RAMPART-236] - Error in service method is not properly handled for parameter based WS-Security (issue in RampartReceiver??)
-    * [RAMPART-201] - Add alias/certificate used for validating signature
-    * [RAMPART-183] - Rampart not correctly enforcing Signature validity if other security elements exist (ie - Timestamp)
-    * [RAMPART-98] -  When the request uses a BEARER keyType, The STSClient tries to retrieve the ProofToken even when the token type is Bearer.
-   
-
-** Improvement
-    * [RAMPART-297] - Add support for ContentEncryptedElements Assertion
-    * [RAMPART-321] - Possible improvements to the logging in Rampart
-   
-
-Release 1.5.1 - 23 Dec 2010
-===========================
- 
-** Bug
-    * [RAMPART-316] - commons-lang jar is not available with Axis2 which breaks Sample-08
-    * [RAMPART-315] - Sample-06 is not working in the current trunk
-    * [RAMPART-181] - OptimizePartsConfig does not open namespace tag when serializing the assertion
-    * [RAMPART-186] - Password call back not copied over when the call back is set via a parameter to the axis Service (Secure conversation)
-    * [RAMPART-174] - Rampart module says true to all assertions when canSupportAssertion is called
-    * [RAMPART-202] - RampartEngine throws ClassCastException retrieving SOAPHeaderBlocks
-    * [RAMPART-212] - WSSecurityException: Error in converting SOAP Envelope to Document
-    * [RAMPART-314] - Rampart distribution does not contain OpenSAML 1.1 jars
-    * [RAMPART-198] - Rampart 1.4 assumes WSS10 or WSS11 to be present in the policy
-    * [RAMPART-273] - multiple rampart samples doesn't work
-    * [RAMPART-254] - Public getter/setter setCallbackHander/getCallbackHander mis-spelled [ hander --> handler] in SAMLTokenIssuerConfig
-    * [RAMPART-259] - SAML2TokenIssuer calls DefaultBootstrap.bootstrap() per every request and attribute call back handler not being called
-    * [RAMPART-277] - Rampart ignores token inclusion settings when using the asymmetric security binding
-    * [RAMPART-267] - div class="xleft" does not work
-    * [RAMPART-224] - Error in Rampart configuration schema
-    * [RAMPART-283] - sp:ProtectTokens Assertion Ignored w/ Transport Security Binding
-    * [RAMPART-288] - Supporting Tokens Not Encrypted When Protection Order is Sign Before Encrypting
-    * [RAMPART-300] - Rampart automaticaly tries to load an "Encryption user" if the security policy defines the use of a UsernameToken with a AsymmetricBinding
-    * [RAMPART-225] - SupportingToken UsernameToken is always encrypted
-    * [RAMPART-303] - Incorrect XML Passed to Digest Algorithm when XML Elements Belong to Empty Namespace
-    * [RAMPART-309] - Incorrect XML Passed to Digest Algorithm
-    * [RAMPART-116] - Policy Sample 04 on application scope fails with "Error in key derivation"
-    * [RAMPART-253] - TTL doesn't serialized in to saml-issuer-config from SAMLTokenIssuerConfig
-    * [RAMPART-270] - NPE in RampartMessageData
-    * [RAMPART-274] - renewing a sts token doesn't work
-    * [RAMPART-180] - Wrong NameIdentifier format
-    * [RAMPART-276] - SignedEncryptedElements can incorrectly set the namespace of child xpaths during serialization
-    * [RAMPART-293] - NPE in RampartMessageData prevents fault being returned to service consumer
-    * [RAMPART-308] - All security exceptions reported as wsse:InvalidSecurity
-    * [RAMPART-290] - NullPointerException in RampartEngine.isSecurityFault if the incoming fault message contains an invalid fault code element
-    * [RAMPART-311] - Error AxisFault: A required message part [body] is not signed.
-    * [RAMPART-239] - Axis2: Rampart module should not check the order of WS-Security header tags
-    * [RAMPART-119] - Invalid behavior when empty <sp:SignedParts/> element present in the policy
-    * [RAMPART-310] - Property 'invalidIssuerAddress' missing from error.properties
-    * [RAMPART-154] - org.apache.rahas.client.STSClient.org.apache.rahas.processIssueResponse fails if SamlAssertion is issued.
-    * [RAMPART-130] - MTOM with WS-Security
-    * [RAMPART-97 ] - interop(WSE3.0 + Rampart1.3) Signature varification failed,When request with Non-English Character
-    * [RAMPART-210] - samples/basic/sample11 does not exist in distro rampart-dist-1.4-bin.zip
-    * [RAMPART-22 ] - Exception handling in UsernameTokenProcessor.handleUsernameToken
-    * [RAMPART-111] - Rampart won't send certificate serial + issuer. Only either BinaryToken or Identity, but not always as it should
-    * [RAMPART-187] - Secure conversation clients do not work when the bootstrap policy requires Username Token
-    * [RAMPART-195] - Maven metadata are invalid in official repo preventing the use of rampart in offline mode
-    * [RAMPART-280] - renewToken() does not provide a mechanism to update the token in the token-store
-    * [RAMPART-6  ] - RAMPART : Incoming policy validation of KeyWrap Algorithm.
-    * [RAMPART-7  ] - RAMPART : Incoming policy validation of Bulk Encryption Algorithms.
-    * [RAMPART-266] - Rampart module fails validating signing certificate when security provider is Bouncy Castle
-    * [RAMPART-271] - Build failure in the rampart trunk
-    * [RAMPART-279] - NPE thrown when WS-Trust renew binding implementation
-    * [RAMPART-285] - Interoporability issues in SAML 2.0 implementation
-    * [RAMPART-306] - Rampart Configuration page of the web site should be updated with Crypto Caching configurations
-    * [RAMPART-307] - Spelling error in org.apache.rampart.builder.BindingBuilder - Method getSignatureBuider should be getSignatureBuilder
-    * [RAMPART-206] - RampartUtil.getToken() not setting parent properties on the STS service call resulting in HTTP 401 error
-
-** Improvement
-    * [RAMPART-313] - Improvements to the site axis.apache.org/axis2/java/rampart/
-    * [RAMPART-121] - Handling of KeyStores
-    * [RAMPART-25 ] - Abilty to dynamically set Encryption certificate on client
-    * [RAMPART-258] - A sample is required to demonstrate the SAML 2.0 Token issuing capability in Rampart
-    * [RAMPART-291] - Possible improvements to SAML2TokenIssuer
-    * [RAMPART-265] - Incorrect version references in Rampart 1.4
-
-Release 1.5 01 Feb 2010
-=======================
- 
-** Bug
-    * [RAMPART-189] - WS-Security rampart uses wrong token in service response
-    * [RAMPART-191] - NullPointerException in AbstractHTTPSender.java:126 leading to "Unexpected number of certificates: 0"
-    * [RAMPART-193] - Missing signature in SOAP fault messages
-    * [RAMPART-209] - https urls are present in the src checkout page for both anonymous and developpers
-    * [RAMPART-230] - Rampart expands message object model unnecessarily
-    * [RAMPART-232] - Problem when body is signed and then an XPath is encrypted
-    * [RAMPART-244] - Invalid behavior when empty <sp:EncryptedParts/> element present in the policy
-    * [RAMPART-247] - Rampart fails to handle scenarios where password type is not set by default in UsernameToken [where 'type' is not included in the UsernameToken element]
-    * [RAMPART-249] - The way attached references and unattached references created incorrectly for SAML tokens and does not interop with WCF
-    * [RAMPART-250] - For SecureConversationToken key identifier type not set properly
-    * [RAMPART-251] - <EncryptedElements/> fails when the element is not namespce qualified
-    * [RAMPART-255] - Sample05 does not work correctly
-    * [RAMPART-257] - "build.xml" file inside the samples/policy does not copy the correct versions of the rampart, rahas, and addressing mar files.
-    * [RAMPART-259] - SAML2TokenIssuer calls DefaultBootstrap.bootstrap() per every request and attribute call back handler not being called
-    * [RAMPART-260] - Sample06 does not work correctly
-    * [RAMPART-262] - SymmetricBinding client can invoke the AsymmetricBinding service policy
-
-** Improvement
-    * [RAMPART-200] - Provide capability to configure x509 supporting token certificates different from the ones used for the assymetric binding
-    * [RAMPART-233] - Tests are required for negative scenario testing
-    * [RAMPART-242] - Test Cases are required for upcoming SAML2.0 support in Rampart
-    * [RAMPART-243] - Updating the README.txt and the contents of the binary distribution corresponding to SAML 2.0 support
-    * [RAMPART-245] - Supporting same type of multiple SupprtingToken
-    * [RAMPART-246] - Need to able to set a AttributeCallbackHandler class by name to the SAMLTokenIssuerConfig
-    * [RAMPART-248] - Caching crypto objects to improve the performance when using the same crypto for signing and encrypting.
-    * [RAMPART-256] - Sample for a policy having multiple supporting tokens - enabling to sign/encrypt with multiple keys
-    * [RAMPART-258] - A sample is required to demonstrate the SAML 2.0 Token issuing capability in Rampart
-
-** New Feature
-  * [RAMPART-231] - Implementing the SAML 2.0 support in Rampart
-
-Release 1.4 - 12/Jun/2008
-=========================
-
-** Bug
-    * [RAMPART-41] - "IncludeToken/Once" is not handled properly in Rampart
-    * [RAMPART-84] - "SupportingTokens" Token Inop for Asymetric Binding (Sign before Encrypt)
-    * [RAMPART-86] - Test the SymmetricBinding implementation
-    * [RAMPART-88] - Policy sample "sample-tomcat" incorrectly adds client.jks to Client's truststore
-    * [RAMPART-89] - License files missing in distribution
-    * [RAMPART-90] - Rampart must respond using the applicable WS-Policy even when returning a fault
-    * [RAMPART-91] - Wrong  KeyIdentifierType in WSSecSignature and WSSecEncryptedKey
-    * [RAMPART-92] - Error in checking generated encrypted parts with the policy
-    * [RAMPART-93] - ValueType is not set correctly in the Signature when a encrypted key is used to sign
-    * [RAMPART-100] - Missing encrypted key token in response when Asymmetric Binding is used
-    * [RAMPART-101] - Rampart uses xmlsec-1.4.0
-    * [RAMPART-102] - Policy Validation Error
-    * [RAMPART-104] - Rampart generates empty reference lists
-    * [RAMPART-107] - Rampart ignores the MTOM assertion in the bootstrap policy in secure conversation
-    * [RAMPART-108] - Policy Validator doesn't check the transport when Transport binding is used with HttpsToken 
-    * [RAMPART-109] - Error in placement of reference list in No-Timestamp scenarios
-    * [RAMPART-110] - Symmetric binding scenario: "Cannot find Reference in Manifest" Exception is thrown
-    * [RAMPART-114] - "Unexpected signature" exception thrown when using Signed/SupportingTokens Assertion
-    * [RAMPART-115] - Incrorrect reference URI in the soap response in Secure Conversation Scenarios
-    * [RAMPART-117] - 1.3 not available on download page
-    * [RAMPART-122] - /sp:EncryptedParts/sp:Header needs qualified attribute names
-    * [RAMPART-123] - client stub are not given the namespace declaration for <sp:EncryptedElements>
-    * [RAMPART-124] - /sp:SignedParts/sp:Header selects no elements if the Name attribute is unspecified
-    * [RAMPART-125] - Encryption of SOAP Headers broken
-    * [RAMPART-127] - Possible Security Hole
-    * [RAMPART-129] - Validation of supporting tokens according to a service's policy
-    * [RAMPART-130] - MTOM with WS-Security
-    * [RAMPART-131] - Rampart security header problem
-    * [RAMPART-132] - Issue with XPath configuration inside RampartUtil
-    * [RAMPART-133] - Supporting tokens are not added to the soap header
-    * [RAMPART-136] - Rampart doesn't support RequiredElements Assertion
-    * [RAMPART-138] - Created response of SymmetricBindingBuilder WITHOUT timestamp is incorrect
-    * [RAMPART-139] - SignatureToken doesn't work for Symetricbinding
-    * [RAMPART-140] - Processing of response fails if a security policy is set
-    * [RAMPART-141] - Issue of Rampart not supporting X509PKIPathv1 token
-    * [RAMPART-143] - Policy with 'Layout' 'Lax' having no subelements leads to a NullPointerException in PolicyEngine
-    * [RAMPART-145] - When we use an issued token for sig/encrypt we must use the attached reference or unattached reference as specified by policy
-    * [RAMPART-146] - The exact elements that are equired to be encrypted are not validated
-    * [RAMPART-147] - Header parts included in EncryptedParts are not processed by Rampart
-    * [RAMPART-148] - Release notes are not copied to source distribution 
-    * [RAMPART-149] - Improvements to the documentation 
-    * [RAMPART-151] - Rahas docs not being built
-    * [RAMPART-153] - Incorrect links given in source checkout page
-    * [RAMPART-157] - Duplicate namespace declaration in SingedEncryptedElements assertion
-    * [RAMPART-160] - Source files are also copied in to Rampart jars
-    * [RAMPART-161] - java.util.ConcurrentModificationException while a token is associated with a user when sevaral users are using a service
-    * [RAMPART-162] - NullPointerException thrown when a non-existing algorythm suite is used in a policy file when invoking a secured service 
-    * [RAMPART-165] - Exception in Rampart Processing causes NPE 
-    * [RAMPART-166] - Wrong SoapFault code accessing a Secure endpoint without security 
-    * [RAMPART-167] - Remove bouncycastle from the distribution and add a note
-    * [RAMPART-168] - When SecureConversationTokens are used Rampart always try to use the attached reference 
-    * [RAMPART-169] - HttpsToken serializer does not support ws-securitypolicy 1.2
-
-** Improvement
-    * [RAMPART-85] - Uncommented and fixed AsymmetricBindingBuilderTest
-    * [RAMPART-94] - Change rampart implementation to use same encrypted key in both request and response messages
-    * [RAMPART-99] - add userCertAlias parameter to Rampart Configuration
-    * [RAMPART-103] - include a note on adding bouncycastle as a security provider in the JRE
-    * [RAMPART-105] - Update RampartTest to include test scenarios for RAMPART-99, RAMPART-102 and RAMPART-104
-    * [RAMPART-106] - Encrypt the Username Token when it is used as a supporting token
-    * [RAMPART-113] - Enforce transport level security when Transport binding is used with Https Token
-    * [RAMPART-120] - sources unavailable in maven repository
-    * [RAMPART-134] - Add WS - Security Policy 1.2 support to Rampart
-    * [RAMPART-135] - Allow custom implementation of PolicyBasedResultsValidator using callback handler mechanism
-    * [RAMPART-137] - Add tests for encrypted supporting token scenarios
-    * [RAMPART-152] - Timestamp Precision In Milliseconds Configuration
-    * [RAMPART-163] - Update the WS wiki with Rampart information
-
-** New Feature
-    * [RAMPART-87] - Add renewal and validation support for issued token
-    * [RAMPART-95] - Support Encrypted Header
-
-
-
-** Task
-    * [RAMPART-158] - Create a FAQ
-    * [RAMPART-159] - Fix Releases/Versions in Rampart JIRA
-    
-Release 1.3 - 06/Sep/07
-=======================    
-
-** Bug
-    * [RAMPART-32] - Processing of <Issuer> and <RequestSecurityTokenTemplate> in class org.apache.ws.secpolicy.builders.IssuedTokenBuilder is wrong.
-    * [RAMPART-42] - TransportBinding does not encrypt the message payload
-    * [RAMPART-49] - RampartPolicyBuilder logs to console/System.out
-    * [RAMPART-52] - UsernameToken Builder Bug.
-    * [RAMPART-53] - rampart causes problems with hierarchies
-    * [RAMPART-57] - Move generated code into target directory in rampart-integration test
-    * [RAMPART-58] - problems engaging rampart per operation
-    * [RAMPART-62] - Build failure on Mac OS
-    * [RAMPART-76] - Rampart 1.3.mar throws error with Axis2 1.3
-    * [RAMPART-79] - setAction in Options does not create a non-null "Action" element in the SOAP Header
-
-** Improvement
-    * [RAMPART-17] - Create Apache Rampart website
-    * [RAMPART-20] - Improve logging
-    * [RAMPART-27] - The user in the configuration for UsernameToken and Signature should be different
-    * [RAMPART-48] - RampartMessageData class needs tightening
-    * [RAMPART-51] - Rampart developer guide
-    * [RAMPART-54] - Reviewed the Developer Guide
-    
-Release 1.2 - 02/Jun/07
-=======================     
-    
-** Bug
-    * [RAMPART-12] - ClassCastException in fault parsing
-    * [RAMPART-28] - Cannot add parts of the header for encryption
-    * [RAMPART-34] - SignedEncryptedSupportingTokens assertion does not work 
-    * [RAMPART-35] - SignedSupportingTokens does not sign the UsernameToken 
-    * [RAMPART-36] - Using the "SupportingTokens" assertion throws exception
-    * [RAMPART-37] - SymmetricBinding is broken 
-    * [RAMPART-43] - When IncludeTimestamp is commented in Sample03 service throws a Nullpointer exception.
-
-
-** New Feature
-    * [RAMPART-38] - AsymmetricBinding does not support UsernameToken as a supporting token
-    * [RAMPART-40] - implementation of the Xpath support 
-
-
-
-
-
-
-
-
-
-
diff --git a/release-docs/release-notes.html b/release-docs/release-notes.html
deleted file mode 100644
index 3af20d0..0000000
--- a/release-docs/release-notes.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-       "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
-  <title>Apache Rampart - Release Notes</title>
-  <meta name="generator" content="amaya 9.2.2, see http://www.w3.org/Amaya/"
-  />
-</head>
-
-<body>
-<h1>Apache Rampart Release Notes</h1>
-
-<p>This is the 1.6.0 release of Apache Rampart.</p>
-
-<p>Apache Rampart 1.6.0 is a toolkit that provides implementations of the WS-Sec*
-specifications for Apache Axis2 1.6.0, based on Apache WSS4J 1.5.11 and 
-the Apache AXIOM-DOOM 1.2.11 implementation.</p>
-
-<b>What is in this release</b>
-
-<p>There are two main Apache Axis2 modules provided with this release.</p> 
-<ul>
-<li>rampart-1.6.0.mar</li>
-This provides support for WS-Security and WS-SecureConversation features.
-<li>rahas-1.6.0.mar</li>
-This module provides the necessary components to enable SecurityTokenService 
-functionality on a service.
-</ul>
-
-<p>Apache Rampart 1.6.0 uses a configuration model based on WS-Policy 
-and WS-Security Policy and it is important to note that Apache Rampart 1.0 style 
-configuration is also available even though being marked as deprecated.
-</p>
-
-<p>Apache Rampart 1.6.0 can be successfully used with the next Apache Sandesha2 1.6.0
-release targeted towards Apache Axis2 1.6.0 to configure
-WS-SecureConversation + WS-ReliableMessaging scenarios.</p>
-<p>
-The rampart module was successfully tested for interoperability with other
-WS-Security implementations.</p>
-
-<p>WS - Sec* specifications supported by Apache Rampart are as follows:</p>
-
-<ul>
-<li>WS - Security 1.0</li>
-<li>WS - Secure Conversation - February 2005</li>
-<li>WS - Security Policy - 1.1 - July 2005</li>
-<li>WS - Trust - February 2005</li>
-<li>WS - Trust - WS-SX specification</li>
-<li>SAML Specification - 1.1 </li>
-<li>SAML Specification - 2.0 </li>
-</ul>
-
-
-
-
-<p>Thank you for using Apache Rampart.</p>
-
-<p></p>
-
-<p>Apache Rampart Team</p>
-
-<p></p>
-</body>
-</html>
diff --git a/src/site/markdown/download.md.vm b/src/site/markdown/download.md.vm
new file mode 100644
index 0000000..b970037
--- /dev/null
+++ b/src/site/markdown/download.md.vm
@@ -0,0 +1,60 @@
+##
+## 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.
+##
+
+Releases
+--------
+
+The current release is ${release_version} and was published on ${release_date}. The release note for this
+release can be found [here](release-notes/${release_version}.html).
+
+The following distributions are available for download:
+
+&nbsp;              | Link                                         | Checksums and signatures
+--------------------|----------------------------------------------|----------------------------
+Binary distribution | [rampart-dist-${release_version}-bin.zip][1] | [MD5][2] [SHA1][3] [PGP][4]
+Source distribution | [rampart-dist-${release_version}-src.zip][5] | [MD5][6] [SHA1][7] [PGP][8]
+
+The binary distribution contains the following Axis2 modules:
+
+*   `rampart-${release_version}.mar` provides support for WS-Security and WS-SecureConversation
+    features.
+
+*   `rahas-${release_version}.mar` provides the necessary components to enable SecurityTokenService
+    functionality on a service.
+
+The signatures of the distributions can be [verified][9] against the public keys in the [KEYS][10] file.
+
+Maintenance releases from branches other than the main branch can be found [here][11].
+Distributions for older releases can be found in the [archive][12].
+
+All releases are also available as Maven artifacts in the [central repository][13].
+
+[1]: http://www.apache.org/dyn/closer.lua/axis/axis2/java/rampart/${release_version}/rampart-dist-${release_version}-bin.zip
+[2]: https://www.apache.org/dist/axis/axis2/java/rampart/${release_version}/rampart-dist-${release_version}-bin.zip.md5
+[3]: https://www.apache.org/dist/axis/axis2/java/rampart/${release_version}/rampart-dist-${release_version}-bin.zip.sha1
+[4]: https://www.apache.org/dist/axis/axis2/java/rampart/${release_version}/rampart-dist-${release_version}-bin.zip.asc
+[5]: http://www.apache.org/dyn/closer.lua/axis/axis2/java/rampart/${release_version}/rampart-dist-${release_version}-src.zip
+[6]: https://www.apache.org/dist/axis/axis2/java/rampart/${release_version}/rampart-dist-${release_version}-src.zip.md5
+[7]: https://www.apache.org/dist/axis/axis2/java/rampart/${release_version}/rampart-dist-${release_version}-src.zip.sha1
+[8]: https://www.apache.org/dist/axis/axis2/java/rampart/${release_version}/rampart-dist-${release_version}-src.zip.asc
+[9]: http://www.apache.org/dev/release-signing#verifying-signature
+[10]: https://www.apache.org/dist/axis/axis2/java/rampart/KEYS
+[11]: http://www.apache.org/dyn/closer.lua/axis/axis2/java/rampart/
+[12]: http://archive.apache.org/dist/axis/axis2/java/rampart/
+[13]: http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.apache.rampart%22
diff --git a/src/site/markdown/index.md b/src/site/markdown/index.md
new file mode 100644
index 0000000..e174284
--- /dev/null
+++ b/src/site/markdown/index.md
@@ -0,0 +1,23 @@
+Welcome to Apache Rampart
+-------------------------
+
+Apache Rampart&#x2122; provides implementations of the WS-Sec* specifications for
+Apache Axis2, based on [Apache WSS4J][1] and the [Apache Axiom DOOM implementation][2].
+Rampart implements the following specifications:
+
+* WS - Security 1.0
+* WS - Security 1.1
+* WS - Secure Conversation - February 2005
+* WS - Security Policy - 1.1 - July 2005
+* WS - Security Policy - 1.2
+* WS - Trust - February 2005
+* WS - Trust - WS-SX specification
+* SAML Specification - 1.1
+* SAML Specification - 2.0
+
+- - -
+
+Apache Rampart, Rampart, Apache, the Apache feather logo, and the Apache Rampart project logo are trademarks of The Apache Software Foundation.
+
+[1]: http://ws.apache.org/wss4j/
+[2]: http://ws.apache.org/axiom/implementations/axiom-dom/
diff --git a/src/site/markdown/release-notes/1.6.1.md b/src/site/markdown/release-notes/1.6.1.md
new file mode 100644
index 0000000..680fd6f
--- /dev/null
+++ b/src/site/markdown/release-notes/1.6.1.md
@@ -0,0 +1,7 @@
+Apache Rampart 1.6.1 Release Note
+---------------------------------
+
+The Apache Rampart 1.6.1 release updates WSS4J to version 1.5.12 and ensures
+compatibility with Axis2 1.6.1. Please note that Rampart 1.6.1 will not work
+with Axis2 1.6.0 and that users of Axis2 1.6.1 are required to update to
+Rampart 1.6.1, i.e. Rampart 1.6.0 doesn't work with Axis2 1.6.1.
diff --git a/src/site/markdown/release-notes/1.6.2.md b/src/site/markdown/release-notes/1.6.2.md
new file mode 100644
index 0000000..746b984
--- /dev/null
+++ b/src/site/markdown/release-notes/1.6.2.md
@@ -0,0 +1,10 @@
+Apache Rampart 1.6.2 Release Note
+---------------------------------
+
+Apache Rampart 1.6.2 is a maintenance release that updates WSS4J to version
+1.6.4 and OpenSAML to version 2.5.1. Apache Rampart 1.6.2 ensure compatibility
+with the latest Axis2 1.6.2 release.
+
+A complete list of issues fixed in this release can be found [here][1].
+
+[1]: http://s.apache.org/rampart1.6.2
diff --git a/src/site/markdown/release-notes/1.6.3.md b/src/site/markdown/release-notes/1.6.3.md
new file mode 100644
index 0000000..dcf8861
--- /dev/null
+++ b/src/site/markdown/release-notes/1.6.3.md
@@ -0,0 +1,7 @@
+Apache Rampart 1.6.3 Release Note
+---------------------------------
+
+Apache Rampart 1.6.3 is a maintenance release compatible with Apache Axis2
+1.6.3. A complete list of issues fixed in this release can be found [here][1].
+
+[1]: http://s.apache.org/rampart1.6.3
\ No newline at end of file
diff --git a/src/site/markdown/release-notes/1.6.4.md b/src/site/markdown/release-notes/1.6.4.md
new file mode 100644
index 0000000..2f8f4a5
--- /dev/null
+++ b/src/site/markdown/release-notes/1.6.4.md
@@ -0,0 +1,7 @@
+Apache Rampart 1.6.4 Release Note
+---------------------------------
+
+Apache Rampart 1.6.4 is a maintenance release compatible with Apache Axis2
+1.6.4. A complete list of issues fixed in this release can be found [here][1].
+
+[1]: https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310610&amp;version=12334369
diff --git a/src/site/markdown/release-notes/1.7.0.md b/src/site/markdown/release-notes/1.7.0.md
new file mode 100644
index 0000000..183c21e
--- /dev/null
+++ b/src/site/markdown/release-notes/1.7.0.md
@@ -0,0 +1,11 @@
+Apache Rampart 1.7.0 Release Note
+---------------------------------
+
+Apache Rampart 1.7.0 is a major release designed for compatibility with Axis2
+1.7.0. A complete list of issues fixed in this release can be found [here][1].
+
+Please note that Apache Rampart uses a configuration model based on WS-Policy
+and WS-Security Policy and that the Apache Rampart 1.0 style configuration
+(already deprecated since Rampart 1.1) is no longer supported in 1.7.0.
+
+[1]: https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310610&amp;version=12316529
diff --git a/src/site/markdown/release-notes/1.8.0.md b/src/site/markdown/release-notes/1.8.0.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/site/markdown/release-notes/1.8.0.md
diff --git a/modules/documentation/src/site/resources/images/apache-rampart-logo.jpg b/src/site/resources/images/apache-rampart-logo.jpg
similarity index 100%
rename from modules/documentation/src/site/resources/images/apache-rampart-logo.jpg
rename to src/site/resources/images/apache-rampart-logo.jpg
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/logos/asf_logo_wide.png b/src/site/resources/images/logos/asf_logo_wide.png
similarity index 100%
rename from modules/documentation/src/site/resources/images/logos/asf_logo_wide.png
rename to src/site/resources/images/logos/asf_logo_wide.png
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/message-builder.jpg b/src/site/resources/images/message-builder.jpg
similarity index 100%
rename from modules/documentation/src/site/resources/images/message-builder.jpg
rename to src/site/resources/images/message-builder.jpg
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/rampart-engine.jpg b/src/site/resources/images/rampart-engine.jpg
similarity index 100%
rename from modules/documentation/src/site/resources/images/rampart-engine.jpg
rename to src/site/resources/images/rampart-engine.jpg
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/rampart-handlers.jpg b/src/site/resources/images/rampart-handlers.jpg
similarity index 100%
rename from modules/documentation/src/site/resources/images/rampart-handlers.jpg
rename to src/site/resources/images/rampart-handlers.jpg
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/rampart-trust.jpg b/src/site/resources/images/rampart-trust.jpg
similarity index 100%
rename from modules/documentation/src/site/resources/images/rampart-trust.jpg
rename to src/site/resources/images/rampart-trust.jpg
Binary files differ
diff --git a/modules/documentation/src/site/resources/images/security-stack.jpg b/src/site/resources/images/security-stack.jpg
similarity index 100%
rename from modules/documentation/src/site/resources/images/security-stack.jpg
rename to src/site/resources/images/security-stack.jpg
Binary files differ
diff --git a/modules/documentation/src/site/resources/rampart-config.xsd b/src/site/resources/rampart-config.xsd
similarity index 100%
rename from modules/documentation/src/site/resources/rampart-config.xsd
rename to src/site/resources/rampart-config.xsd
diff --git a/modules/documentation/src/site/resources/samples/msgs/creq04.xml b/src/site/resources/samples/msgs/creq04.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/creq04.xml
rename to src/site/resources/samples/msgs/creq04.xml
diff --git a/modules/documentation/src/site/resources/samples/msgs/cres04.xml b/src/site/resources/samples/msgs/cres04.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/cres04.xml
rename to src/site/resources/samples/msgs/cres04.xml
diff --git a/modules/documentation/src/site/resources/samples/msgs/req01.xml b/src/site/resources/samples/msgs/req01.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/req01.xml
rename to src/site/resources/samples/msgs/req01.xml
diff --git a/modules/documentation/src/site/resources/samples/msgs/req02.xml b/src/site/resources/samples/msgs/req02.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/req02.xml
rename to src/site/resources/samples/msgs/req02.xml
diff --git a/modules/documentation/src/site/resources/samples/msgs/req03.xml b/src/site/resources/samples/msgs/req03.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/req03.xml
rename to src/site/resources/samples/msgs/req03.xml
diff --git a/modules/documentation/src/site/resources/samples/msgs/req04.xml b/src/site/resources/samples/msgs/req04.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/req04.xml
rename to src/site/resources/samples/msgs/req04.xml
diff --git a/src/site/resources/samples/msgs/req09.xml b/src/site/resources/samples/msgs/req09.xml
new file mode 100644
index 0000000..ca9cc80
--- /dev/null
+++ b/src/site/resources/samples/msgs/req09.xml
@@ -0,0 +1,59 @@
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
+  <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
+     <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
+        <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-1">
+           <wsu:Created>2011-10-02T17:02:00.891Z</wsu:Created>
+           <wsu:Expires>2011-10-02T17:07:00.891Z</wsu:Expires>
+        </wsu:Timestamp>
+        <xenc:EncryptedKey Id="EncKeyId-217C2EC3C2E291A44313175749217822">
+           <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
+           <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+              <wsse:SecurityTokenReference>
+                 <wsse:KeyIdentifier EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#ThumbprintSHA1">aqePjuZzE1lzwMMtquksvNJsbmI=</wsse:KeyIdentifier>
+              </wsse:SecurityTokenReference>
+           </ds:KeyInfo>
+           <xenc:CipherData>
+              <xenc:CipherValue>dcU0PS/8bZjpJ1u5Mey5oytQNdNj+Naq+1cMnEv4abN/BP6RDURGv+4+XT1uIHSU4G7FpspJ+U06fa4VeqNyCfAq2SDul6WzPLRTQ3qRdiHARBpR8kI5YrOWXmTR/nl5yzz03NC51GGqA+R6X1CwpuXDrCbcz3CsE+TQduFHtlM=</xenc:CipherValue>
+           </xenc:CipherData>
+        </xenc:EncryptedKey>
+        <xenc:ReferenceList>
+           <xenc:DataReference URI="#EncDataId-3" />
+        </xenc:ReferenceList>
+        <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-2">
+           <ds:SignedInfo>
+              <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+              <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1" />
+              <ds:Reference URI="#Timestamp-1">
+                 <ds:Transforms>
+                    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+                 </ds:Transforms>
+                 <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
+                 <ds:DigestValue>nJA1OmoBVIEcnsJBZEadzN6UJs0=</ds:DigestValue>
+              </ds:Reference>
+           </ds:SignedInfo>
+           <ds:SignatureValue>pf4BJD5Qiv8Z+oqs7I+D13D0Oz8=</ds:SignatureValue>
+           <ds:KeyInfo Id="KeyId-217C2EC3C2E291A44313175749218033">
+              <wsse:SecurityTokenReference xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="STRId-217C2EC3C2E291A44313175749218034">
+                 <wsse:Reference URI="#EncKeyId-217C2EC3C2E291A44313175749217822" ValueType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKey" />
+              </wsse:SecurityTokenReference>
+           </ds:KeyInfo>
+        </ds:Signature>
+     </wsse:Security>
+     <wsa:To>http://localhost:8081/axis2/services/sample09</wsa:To>
+     <wsa:MessageID>urn:uuid:2f08b4d8-4a46-439c-bd89-e6eb0a6f227c</wsa:MessageID>
+     <wsa:Action>urn:echo</wsa:Action>
+  </soapenv:Header>
+  <soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Id-2030128673">
+     <xenc:EncryptedData Id="EncDataId-3" Type="http://www.w3.org/2001/04/xmlenc#Content">
+        <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
+        <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+           <wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
+              <wsse:Reference URI="#EncKeyId-217C2EC3C2E291A44313175749217822" />
+           </wsse:SecurityTokenReference>
+        </ds:KeyInfo>
+        <xenc:CipherData>
+           <xenc:CipherValue>oUOJCeKFAGyuKdMDjUDB2n3NjcHC8udPl+ZWHwwKOttJSt/IlthXipCs62Gnn8gmzLi4DT0LnwhI9/vwUbulFjuPRENIs3D+IRu8mrL+UgxIYnkn44qKR/hYIOR/bY6SyLkbKlITAatDtJafqz5rs6IdSOQ/07s+JQImBYDQD7dxBtXsJw/0TBb78VeSIl+VWsQDDSf+PSxZLAWCQYQZRBXPMWxQ+lm7ArS2rLIswPoS6D9PwyHJDDmcJ5A4C2DTSu/IgTvM6wj7spLIjGL1nGa4kRmg71bwHpZ4aKNOrslNuDOldrPPuDxNiuSijX/lhbHMHOCYg/YJP2SbhWfVLkFmRqFbQFdoyYqbM+s/pweclcAIWVaLlvu003shSBqrvgfXUPFKH3vUDOsM/jD2iOKOpAc+hdKqWVKIUjjyBVZNSQ2DX+9XBeL5VWECgRC0</xenc:CipherValue>
+        </xenc:CipherData>
+     </xenc:EncryptedData>
+  </soapenv:Body>
+</soapenv:Envelope>
diff --git a/modules/documentation/src/site/resources/samples/msgs/res01.xml b/src/site/resources/samples/msgs/res01.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/res01.xml
rename to src/site/resources/samples/msgs/res01.xml
diff --git a/modules/documentation/src/site/resources/samples/msgs/res02.xml b/src/site/resources/samples/msgs/res02.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/res02.xml
rename to src/site/resources/samples/msgs/res02.xml
diff --git a/modules/documentation/src/site/resources/samples/msgs/res03.xml b/src/site/resources/samples/msgs/res03.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/res03.xml
rename to src/site/resources/samples/msgs/res03.xml
diff --git a/modules/documentation/src/site/resources/samples/msgs/res04.xml b/src/site/resources/samples/msgs/res04.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/res04.xml
rename to src/site/resources/samples/msgs/res04.xml
diff --git a/src/site/resources/samples/msgs/res09.xml b/src/site/resources/samples/msgs/res09.xml
new file mode 100644
index 0000000..b2ba53e
--- /dev/null
+++ b/src/site/resources/samples/msgs/res09.xml
@@ -0,0 +1,51 @@
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+  <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
+     <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
+        <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-4">
+           <wsu:Created>2011-10-02T17:02:01.986Z</wsu:Created>
+           <wsu:Expires>2011-10-02T17:07:01.986Z</wsu:Expires>
+        </wsu:Timestamp>
+        <wsse11:SignatureConfirmation xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" Value="pf4BJD5Qiv8Z+oqs7I+D13D0Oz8=" wsu:Id="SigConf-5" />
+        <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-6">
+           <ds:SignedInfo>
+              <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+              <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1" />
+              <ds:Reference URI="#Id-2097953288">
+                 <ds:Transforms>
+                    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+                 </ds:Transforms>
+                 <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
+                 <ds:DigestValue>G/7ZztG0V1Kmv0wm+mzgymHcOyo=</ds:DigestValue>
+              </ds:Reference>
+              <ds:Reference URI="#Timestamp-4">
+                 <ds:Transforms>
+                    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+                 </ds:Transforms>
+                 <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
+                 <ds:DigestValue>1wuRtmA8p7YYbLHbGZCg/zwoLbI=</ds:DigestValue>
+              </ds:Reference>
+              <ds:Reference URI="#SigConf-5">
+                 <ds:Transforms>
+                    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+                 </ds:Transforms>
+                 <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
+                 <ds:DigestValue>S1DcEeIgKXsIRXEFarD4mV2+2q0=</ds:DigestValue>
+              </ds:Reference>
+           </ds:SignedInfo>
+           <ds:SignatureValue>r8Rlddsga6YTXf2iVLKA7TK8rGg=</ds:SignatureValue>
+           <ds:KeyInfo Id="KeyId-297B8911F2D33E5F7213175749219873">
+              <wsse:SecurityTokenReference xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="STRId-297B8911F2D33E5F7213175749219874">
+                 <wsse:KeyIdentifier EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKeySHA1">BaA/2+IZ8kYoENnGHL4K7unfywk=</wsse:KeyIdentifier>
+              </wsse:SecurityTokenReference>
+           </ds:KeyInfo>
+        </ds:Signature>
+     </wsse:Security>
+     <wsa:Action>urn:echoResponse</wsa:Action>
+     <wsa:RelatesTo>urn:uuid:2f08b4d8-4a46-439c-bd89-e6eb0a6f227c</wsa:RelatesTo>
+  </soapenv:Header>
+  <soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Id-2097953288">
+     <ns:echoResponse xmlns:ns="http://sample09.policy.samples.rampart.apache.org">
+        <ns:return>Hello world</ns:return>
+     </ns:echoResponse>
+  </soapenv:Body>
+</soapenv:Envelope>
diff --git a/modules/documentation/src/site/resources/samples/msgs/rst04.xml b/src/site/resources/samples/msgs/rst04.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/rst04.xml
rename to src/site/resources/samples/msgs/rst04.xml
diff --git a/modules/documentation/src/site/resources/samples/msgs/rstr04.xml b/src/site/resources/samples/msgs/rstr04.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/msgs/rstr04.xml
rename to src/site/resources/samples/msgs/rstr04.xml
diff --git a/modules/documentation/src/site/resources/samples/policy/sample01.xml b/src/site/resources/samples/policy/sample01.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/policy/sample01.xml
rename to src/site/resources/samples/policy/sample01.xml
diff --git a/modules/documentation/src/site/resources/samples/policy/sample02.xml b/src/site/resources/samples/policy/sample02.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/policy/sample02.xml
rename to src/site/resources/samples/policy/sample02.xml
diff --git a/modules/documentation/src/site/resources/samples/policy/sample03.xml b/src/site/resources/samples/policy/sample03.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/policy/sample03.xml
rename to src/site/resources/samples/policy/sample03.xml
diff --git a/modules/documentation/src/site/resources/samples/policy/sample04.xml b/src/site/resources/samples/policy/sample04.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/policy/sample04.xml
rename to src/site/resources/samples/policy/sample04.xml
diff --git a/modules/documentation/src/site/resources/samples/policy/sample05.xml b/src/site/resources/samples/policy/sample05.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/policy/sample05.xml
rename to src/site/resources/samples/policy/sample05.xml
diff --git a/modules/documentation/src/site/resources/samples/policy/sample06.xml b/src/site/resources/samples/policy/sample06.xml
similarity index 100%
rename from modules/documentation/src/site/resources/samples/policy/sample06.xml
rename to src/site/resources/samples/policy/sample06.xml
diff --git a/src/site/site.xml b/src/site/site.xml
new file mode 100644
index 0000000..7f3505f
--- /dev/null
+++ b/src/site/site.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  ~  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.
+  -->
+
+<project name="Apache Rampart">
+
+    <bannerLeft>
+        <src>images/apache-rampart-logo.jpg</src>
+    </bannerLeft>
+
+    <bannerRight>
+        <src>http://www.apache.org/images/asf_logo_wide.png</src>
+        <href>http://www.apache.org</href>
+    </bannerRight>
+
+    <skin>
+        <groupId>org.apache.maven.skins</groupId>
+        <artifactId>maven-fluido-skin</artifactId>
+        <version>1.4</version>
+    </skin>
+
+    <publishDate format="dd MMM yyyy"/>
+
+    <body>
+        <links>
+            <item name="Apache Axis2/Java" href="http://axis.apache.org/axis2/java/core/" />
+        </links>
+        
+        <menu name="Apache Rampart">
+            <item name="Home" href="index.html" />
+            <item name="Downloads" href="javascript:void(0)">
+                <item name="Releases" href="download.html"/>
+                <item name="Source Code" href="svn.html"/>
+            </item>
+            <item name="Release Notes" href="javascript:void(0)">
+                <item name="1.6.1" href="release-notes/1.6.1.html"/>
+                <item name="1.6.2" href="release-notes/1.6.2.html"/>
+                <item name="1.6.3" href="release-notes/1.6.3.html"/>
+                <item name="1.6.4" href="release-notes/1.6.4.html"/>
+                <item name="1.7.0" href="release-notes/1.7.0.html"/>
+            </item>
+        </menu>
+        <menu name="Documentation">
+            <item name="Getting Started" href="quick-start.html"/>
+            <item name="Samples" href="samples.html"/>
+            <item name="FAQ" href="http://wiki.apache.org/ws/FrontPage/Rampart/FAQ"/>
+            <item name="Rampart Configuration" href="rampartconfig-guide.html"/>
+            <item name="STS Configuration" href="setting-up-sts.html"/>
+            <item name="Developer Guide" href="developer-guide.html"/>
+            <item name="Build the Site" href="siteHowTo.html" /> 
+        </menu>
+        <menu name="Resources">
+            <item name="Articles" href="articles.html" />
+            <item name="Specifications" href="specifications.html"/>
+            <item name="Online Javadocs" href="apidocs/index.html"/>
+        </menu>
+        <menu name="Project Information">
+            <item name="Project Team" href="team-list.html" />
+            <item name="Issue Tracking" href="http://issues.apache.org/jira/browse/Rampart" />
+            <item name="Mailing Lists" href="mail-lists.html"/>
+            <item name="Source Code" href="http://svn.apache.org/viewvc/axis/axis2/java/rampart/" />
+            <item name="License" href="http://www.apache.org/licenses/"/>
+            <item name="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html"/>
+            <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
+            <item name="Security" href="http://www.apache.org/security/"/>
+        </menu>
+    </body>
+</project>
diff --git a/modules/documentation/src/site/xdoc/articles.xml b/src/site/xdoc/articles.xml
similarity index 100%
rename from modules/documentation/src/site/xdoc/articles.xml
rename to src/site/xdoc/articles.xml
diff --git a/modules/documentation/src/site/xdoc/developer-guide.xml b/src/site/xdoc/developer-guide.xml
similarity index 100%
rename from modules/documentation/src/site/xdoc/developer-guide.xml
rename to src/site/xdoc/developer-guide.xml
diff --git a/modules/documentation/src/site/xdoc/quick-start.xml b/src/site/xdoc/quick-start.xml
similarity index 93%
rename from modules/documentation/src/site/xdoc/quick-start.xml
rename to src/site/xdoc/quick-start.xml
index a5d41cc..90db940 100644
--- a/modules/documentation/src/site/xdoc/quick-start.xml
+++ b/src/site/xdoc/quick-start.xml
@@ -11,7 +11,7 @@
 		<p>Steps to install</p>
 		<ol>
 			<li>If you haven't installed Axis2, then download and extract the standard binary distribution. Make sure you have set the AXIS2_HOME environment variable</li>
-			<li>Run ant from the "samples" directory to copy the required libraries and modules to relevant directories in AXIS2_HOME.</li>
+			<li>Run ant from the top level directory of the Rampart distribution to copy the required libraries and modules to relevant directories in AXIS2_HOME.</li>
 		</ol>
 		<p></p>
 
diff --git a/modules/documentation/src/site/xdoc/rampartconfig-guide.xml b/src/site/xdoc/rampartconfig-guide.xml
similarity index 100%
rename from modules/documentation/src/site/xdoc/rampartconfig-guide.xml
rename to src/site/xdoc/rampartconfig-guide.xml
diff --git a/modules/documentation/src/site/xdoc/samples.xml b/src/site/xdoc/samples.xml
similarity index 97%
rename from modules/documentation/src/site/xdoc/samples.xml
rename to src/site/xdoc/samples.xml
index 574d7f7..73565fb 100644
--- a/modules/documentation/src/site/xdoc/samples.xml
+++ b/src/site/xdoc/samples.xml
@@ -29,6 +29,7 @@
         <h2> Policy samples </h2>
         <p>These samples use WS Security Policy Language for configuration. It is recommended to use policy based configuration model for all production scenarios </p>
         <h3>Running Samples</h3>
+        <p>Before beginning, please install Rampart as described <a href="quick-start.html">here</a>.</p>
         <p>Now we'll look at how to run the first sample inside samples/policy folder.</p>
         <ol>
             <li>Open a console and change the directory to sample/policy and give the following command. This will start the server at port 8080</li>
diff --git a/modules/documentation/src/site/xdoc/setting-up-sts.xml b/src/site/xdoc/setting-up-sts.xml
similarity index 100%
rename from modules/documentation/src/site/xdoc/setting-up-sts.xml
rename to src/site/xdoc/setting-up-sts.xml
diff --git a/modules/documentation/src/site/xdoc/siteHowTo.xml b/src/site/xdoc/siteHowTo.xml
similarity index 100%
rename from modules/documentation/src/site/xdoc/siteHowTo.xml
rename to src/site/xdoc/siteHowTo.xml
diff --git a/modules/documentation/src/site/xdoc/specifications.xml b/src/site/xdoc/specifications.xml
similarity index 100%
rename from modules/documentation/src/site/xdoc/specifications.xml
rename to src/site/xdoc/specifications.xml
diff --git a/modules/documentation/src/site/xdoc/svn.xml b/src/site/xdoc/svn.xml
similarity index 100%
rename from modules/documentation/src/site/xdoc/svn.xml
rename to src/site/xdoc/svn.xml
