From 976eb0849f4cef5681b7f3b2f1329f528254cad7 Mon Sep 17 00:00:00 2001
From: Thomas Lenz <tlenz@iaik.tugraz.at>
Date: Wed, 7 May 2014 08:03:26 +0200
Subject: finalize IDP interfederation configuration

Info: STORK VIDP configuration is moved to section interfederation
---
 .../configuration/data/FormularCustomization.java  |  15 +-
 .../data/oa/OAAuthenticationData.java              |  12 +-
 .../data/oa/OAMOAIDPInterfederationConfig.java     |  19 +-
 .../id/configuration/data/oa/OASTORKConfig.java    |  17 +-
 .../configuration/struts/action/BasicOAAction.java | 430 ++++++++++++++-------
 .../configuration/struts/action/EditOAAction.java  | 130 +------
 .../struts/action/InterfederationIDPAction.java    | 312 ++++++++++++---
 .../configuration/struts/action/MOAIDPAction.java  |  59 +++
 .../id/configuration/struts/action/VIDPAction.java |  75 ++++
 .../validation/oa/OASTORKConfigValidation.java     |   5 +-
 .../resources/applicationResources_de.properties   |   7 +
 .../resources/applicationResources_en.properties   |   8 +-
 id/ConfigWebTool/src/main/resources/struts.xml     |  54 +++
 id/ConfigWebTool/src/main/webapp/js/common.js      |   2 +-
 .../src/main/webapp/jsp/editOAGeneral.jsp          |  11 +-
 .../main/webapp/jsp/interfederation/idplist.jsp    |  14 +-
 .../main/webapp/jsp/interfederation/moa_idp.jsp    |   6 +-
 .../src/main/webapp/jsp/interfederation/vidp.jsp   |  46 ++-
 .../src/main/webapp/jsp/snippets/OA/pvp2.jsp       |   2 +-
 .../src/main/webapp/jsp/snippets/OA/vidp.jsp       |   2 +-
 20 files changed, 861 insertions(+), 365 deletions(-)
 create mode 100644 id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/MOAIDPAction.java
 create mode 100644 id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/VIDPAction.java

(limited to 'id/ConfigWebTool')

diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/FormularCustomization.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/FormularCustomization.java
index 3539b4589..fc9cc05ad 100644
--- a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/FormularCustomization.java
+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/FormularCustomization.java
@@ -95,7 +95,11 @@ public class FormularCustomization implements IOnlineApplicationData {
     
 	private String aditionalAuthBlockText = null;
 	private boolean isHideBPKAuthBlock = false;
-		
+
+	public FormularCustomization() {
+		new FormularCustomization(null);
+	}
+	
 	public FormularCustomization(Map<String, String> map) {
 		appletRedirectTargetList = Arrays.asList("","_blank","_self","_parent","_top");
 		fontTypeList = Arrays.asList("","Verdana","Geneva","Arial","Helvetica","sans-serif","Times New Roman");
@@ -121,14 +125,15 @@ public class FormularCustomization implements IOnlineApplicationData {
 	@Override
 	public List<String> parse(OnlineApplication dbOA, AuthenticatedUser authUser, HttpServletRequest request) {
 		AuthComponentOA auth = dbOA.getAuthComponentOA();
+
+		if (dbOA.getAuthComponentOA() != null)
+			isHideBPKAuthBlock = dbOA.isRemoveBPKFromAuthBlock();
 		
 		if (auth != null) {
 			TemplatesType templates = auth.getTemplates();
 			
-			aditionalAuthBlockText = templates.getAditionalAuthBlockText();
-			isHideBPKAuthBlock = dbOA.isRemoveBPKFromAuthBlock();
-			
-			if (templates != null) {
+			if (templates != null) {			
+				aditionalAuthBlockText = templates.getAditionalAuthBlockText();
 				
 				TransformsInfoType bkuSelectTemplate = templates.getBKUSelectionTemplate();
 				if (bkuSelectTemplate != null && MiscUtil.isNotEmpty(bkuSelectTemplate.getFilename())) {
diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OAAuthenticationData.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OAAuthenticationData.java
index fbc16632d..ee2f46eb9 100644
--- a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OAAuthenticationData.java
+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OAAuthenticationData.java
@@ -93,9 +93,7 @@ public class OAAuthenticationData implements IOnlineApplicationData {
 	             setBkuLocalURL(defaultbkus.getLocalBKU());
 	             setBkuOnlineURL(defaultbkus.getOnlineBKU());
 	         }
-	     }
-	     ConfigurationDBUtils.closeSession();
-		 
+	     }		 
 	}
 	
 	/* (non-Javadoc)
@@ -154,13 +152,13 @@ public class OAAuthenticationData implements IOnlineApplicationData {
 				
 				mandateProfiles = null;
 				
-				List<MandatesProfileNameItem> profileList = mandates.getProfileNameItems();
-				for (MandatesProfileNameItem el : profileList) {
+				List<String> profileList = mandates.getProfileName();
+				for (String el : profileList) {
 					if (mandateProfiles == null)
-						mandateProfiles = el.getItem();
+						mandateProfiles = el;
 					
 					else
-						mandateProfiles += "," + el.getItem();
+						mandateProfiles += "," + el;
 				}
 				
 				//TODO: only for RC1
diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OAMOAIDPInterfederationConfig.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OAMOAIDPInterfederationConfig.java
index 41271858f..7dad12477 100644
--- a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OAMOAIDPInterfederationConfig.java
+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OAMOAIDPInterfederationConfig.java
@@ -82,7 +82,8 @@ public class OAMOAIDPInterfederationConfig implements IOnlineApplicationData {
 	public String store(OnlineApplication dbOA, AuthenticatedUser authUser,
 			HttpServletRequest request) {
 
-		if (authUser.isAdmin()) {
+		if (authUser.isAdmin()) {			
+			dbOA.setIsInterfederationIDP(true);
 			
 			InterfederationIDPType moaIDP = dbOA.getInterfederationIDP();
 			if (moaIDP == null) {
@@ -137,56 +138,56 @@ public class OAMOAIDPInterfederationConfig implements IOnlineApplicationData {
 	/**
 	 * @return the queryURL
 	 */
-	protected String getQueryURL() {
+	public String getQueryURL() {
 		return queryURL;
 	}
 
 	/**
 	 * @param queryURL the queryURL to set
 	 */
-	protected void setQueryURL(String queryURL) {
+	public void setQueryURL(String queryURL) {
 		this.queryURL = queryURL;
 	}
 
 	/**
 	 * @return the inboundSSO
 	 */
-	protected boolean isInboundSSO() {
+	public boolean isInboundSSO() {
 		return inboundSSO;
 	}
 
 	/**
 	 * @param inboundSSO the inboundSSO to set
 	 */
-	protected void setInboundSSO(boolean inboundSSO) {
+	public void setInboundSSO(boolean inboundSSO) {
 		this.inboundSSO = inboundSSO;
 	}
 
 	/**
 	 * @return the outboundSSO
 	 */
-	protected boolean isOutboundSSO() {
+	public boolean isOutboundSSO() {
 		return outboundSSO;
 	}
 
 	/**
 	 * @param outboundSSO the outboundSSO to set
 	 */
-	protected void setOutboundSSO(boolean outboundSSO) {
+	public void setOutboundSSO(boolean outboundSSO) {
 		this.outboundSSO = outboundSSO;
 	}
 
 	/**
 	 * @return the storeSSOSession
 	 */
-	protected boolean isStoreSSOSession() {
+	public boolean isStoreSSOSession() {
 		return storeSSOSession;
 	}
 
 	/**
 	 * @param storeSSOSession the storeSSOSession to set
 	 */
-	protected void setStoreSSOSession(boolean storeSSOSession) {
+	public void setStoreSSOSession(boolean storeSSOSession) {
 		this.storeSSOSession = storeSSOSession;
 	}
 	
diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OASTORKConfig.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OASTORKConfig.java
index 2bb8c0a19..f5c92fec9 100644
--- a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OASTORKConfig.java
+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/data/oa/OASTORKConfig.java
@@ -66,8 +66,6 @@ public class OASTORKConfig implements IOnlineApplicationData{
 			citizenCountries.add(current.getCountryCode());
 		}
 		
-		getAttributeProviderPlugins().add(new AttributeProviderPlugin());
-		
 	}
 
 	/* (non-Javadoc)
@@ -248,12 +246,17 @@ public class OASTORKConfig implements IOnlineApplicationData{
 	}
 	
 	public List<CPEPS> getEnabledCPEPS() {
-		List<CPEPS> result = new ArrayList<CPEPS>();
-		for(CPEPS current : ConfigurationDBRead.getMOAIDConfiguration().getAuthComponentGeneral().getForeignIdentities().getSTORK().getCPEPS()) {
-			if(enabledCitizenCountries.contains(current.getCountryCode()))
-				result.add(current);
+		if (enabledCitizenCountries != null) {
+			List<CPEPS> result = new ArrayList<CPEPS>();
+			for(CPEPS current : ConfigurationDBRead.getMOAIDConfiguration().getAuthComponentGeneral().getForeignIdentities().getSTORK().getCPEPS()) {
+				if(enabledCitizenCountries.contains(current.getCountryCode()))
+					result.add(current);
+			}
+			return result;
 		}
-		return result;
+		
+		return null;
+		
 	}
 	
 	public List<String> getAvailableAttributeProviderPlugins() {
diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/BasicOAAction.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/BasicOAAction.java
index 5fe9625ba..43954828c 100644
--- a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/BasicOAAction.java
+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/BasicOAAction.java
@@ -22,20 +22,28 @@
  */
 package at.gv.egovernment.moa.id.configuration.struts.action;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.List;
 
 import org.apache.log4j.Logger;
 
 import at.gv.egovernment.moa.id.commons.db.ConfigurationDBRead;
+import at.gv.egovernment.moa.id.commons.db.ConfigurationDBUtils;
+import at.gv.egovernment.moa.id.commons.db.dao.config.MOAIDConfiguration;
 import at.gv.egovernment.moa.id.commons.db.dao.config.OnlineApplication;
 import at.gv.egovernment.moa.id.commons.db.dao.config.UserDatabase;
+import at.gv.egovernment.moa.id.commons.db.ex.MOADatabaseException;
 import at.gv.egovernment.moa.id.commons.validation.ValidationHelper;
 import at.gv.egovernment.moa.id.configuration.Constants;
 import at.gv.egovernment.moa.id.configuration.data.oa.IOnlineApplicationData;
 import at.gv.egovernment.moa.id.configuration.data.oa.OAGeneralConfig;
+import at.gv.egovernment.moa.id.configuration.data.oa.OAPVP2Config;
 import at.gv.egovernment.moa.id.configuration.exception.BasicOAActionException;
+import at.gv.egovernment.moa.id.configuration.exception.ConfigurationException;
 import at.gv.egovernment.moa.id.configuration.helper.LanguageHelper;
+import at.gv.egovernment.moa.id.configuration.helper.MailHelper;
 import at.gv.egovernment.moa.id.util.Random;
 import at.gv.egovernment.moa.util.MiscUtil;
 
@@ -53,6 +61,7 @@ public class BasicOAAction extends BasicAction {
     
     private String oaidobj;
     private boolean newOA;
+    private boolean isMetaDataRefreshRequired = false;
     
     /**
 	 * 
@@ -120,163 +129,287 @@ public class BasicOAAction extends BasicAction {
         session.setAttribute(Constants.SESSION_BKUFORMPREVIEW, null);
     }
     
-    protected OnlineApplication preProcessSaveOnlineApplication() throws BasicOAActionException {
-        Object formidobj = session.getAttribute(Constants.SESSION_FORMID);
-        if (formidobj != null && formidobj instanceof String) {
-            String formid = (String) formidobj;
-            if (!formid.equals(formID)) {
-            	throw new BasicOAActionException(
-            			"FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
-                        + authUser.getGivenName() + authUser.getUserID(), 
-                		Constants.STRUTS_ERROR);
-            }
-        } else {
-        	throw new BasicOAActionException(
-        			"FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
-                    + authUser.getGivenName() + authUser.getUserID(), 
-            		Constants.STRUTS_ERROR);
-            		
-        }
-        session.setAttribute(Constants.SESSION_FORMID, null);
-
-        UserDatabase userdb = ConfigurationDBRead.getUserWithID(authUser.getUserID());
-        if (!authUser.isAdmin() && userdb.isIsMailAddressVerified() != null && !userdb.isIsMailAddressVerified()) {
-            log.info("Online-Applikation managemant disabled. Mail address is not verified.");
-            throw new BasicOAActionException(
-            		LanguageHelper.getErrorString("error.editoa.mailverification", request), 
-            		Constants.STRUTS_SUCCESS);
-        }
+    protected OnlineApplication postProcessSaveOnlineApplication(OnlineApplication onlineapplication ) throws BasicOAActionException {
+    	 if (onlineapplication == null) {
+             onlineapplication = new OnlineApplication();
+             onlineapplication.setIsNew(true);
+             onlineapplication.setIsActive(false);
 
-        OnlineApplication onlineapplication = null;
+             if (!authUser.isAdmin()) {
+                 onlineapplication.setIsAdminRequired(true);
 
-        Object oadbid = request.getSession().getAttribute(Constants.SESSION_OAID);
-        Long oaid = (long) -1;
+             } else
+                 isMetaDataRefreshRequired = true;
 
-        if (oadbid != null) {
-            try {
-                oaid = (Long) oadbid;
-                if (oaid < 0 || oaid > Long.MAX_VALUE) {
-                	throw new BasicOAActionException(
-                			LanguageHelper.getErrorString("errors.edit.oa.oaid", request), 
-                    		Constants.STRUTS_ERROR);
-                }
+         } else {
+         	onlineapplication.setIsNew(false);
+             if (!authUser.isAdmin() && !onlineapplication.getPublicURLPrefix().equals(getGeneralOA().getIdentifier())) {
 
-            } catch (Throwable t) {
-            	throw new BasicOAActionException(
-            			LanguageHelper.getErrorString("errors.edit.oa.oaid", request), 
-                		Constants.STRUTS_ERROR);
-            }
-        }
+                 onlineapplication.setIsAdminRequired(true);
+                 onlineapplication.setIsActive(false);
+                 log.info("User with ID " + authUser.getUserID() + " change OA-PublicURLPrefix. Reaktivation is required.");
+             }
 
-        // valid DBID and check entry
-        OAGeneralConfig oaGeneralForm = ((OAGeneralConfig)formList.get(new OAGeneralConfig().getName()));
-        String oaidentifier = oaGeneralForm.getIdentifier();
-        if (MiscUtil.isEmpty(oaidentifier)) {
-        	log.info("Empty OA identifier");
-        	throw new BasicOAActionException(
-        			LanguageHelper.getErrorString("validation.general.oaidentifier.empty", request), 
-            		Constants.STRUTS_ERROR_VALIDATION);
-        	
-        } else {
-
-            if (!ValidationHelper.validateURL(oaidentifier)) {
-            	log.warn("OnlineapplikationIdentifier is not a valid URL: " + oaidentifier);
-            	throw new BasicOAActionException(
-            			LanguageHelper.getErrorString("validation.general.oaidentifier.valid",
-                                new Object[]{ValidationHelper.getNotValidOAIdentifierCharacters()}, request), 
-                		Constants.STRUTS_ERROR_VALIDATION);
-                
-            } else {
-
-                if (oaid == -1) {
-                    onlineapplication = ConfigurationDBRead.getOnlineApplication(oaidentifier);
-                    setNewOA(true);
-                    if (onlineapplication != null) {
-                        log.info("The OAIdentifier is not unique");
-                    	throw new BasicOAActionException(
-                    			LanguageHelper.getErrorString("validation.general.oaidentifier.notunique", request), 
-                        		Constants.STRUTS_ERROR_VALIDATION);
-                    	
-                    }
-
-                } else {
-                    onlineapplication = ConfigurationDBRead.getOnlineApplication(oaid);
-                    if (!oaidentifier.equals(onlineapplication.getPublicURLPrefix())) {
-
-                        if (ConfigurationDBRead.getOnlineApplication(oaidentifier) != null) {
-                        	log.info("The OAIdentifier is not unique");
-                        	throw new BasicOAActionException(
-                        			LanguageHelper.getErrorString("validation.general.oaidentifier.notunique", request), 
-                        			Constants.STRUTS_ERROR_VALIDATION);
-                           
-                        }
-                    }
-                }
-            }
-        }
-        
-        return onlineapplication;
+         }
+
+         if ((onlineapplication.isIsAdminRequired() == null)
+                 || (authUser.isAdmin() && getGeneralOA().isActive() && onlineapplication.isIsAdminRequired())) {
+
+             onlineapplication.setIsAdminRequired(false);
+             isMetaDataRefreshRequired = true;
+
+             UserDatabase userdb = null;
+				if (onlineapplication.getHjid() != null)
+                 userdb = ConfigurationDBRead.getUsersWithOADBID(onlineapplication.getHjid());
+
+             if (userdb != null && !userdb.isIsAdmin()) {
+                 try {
+                     MailHelper.sendUserOnlineApplicationActivationMail(userdb.getGivenname(), userdb.getFamilyname(),
+                             userdb.getInstitut(), onlineapplication.getPublicURLPrefix(), userdb.getMail());
+                 } catch (ConfigurationException e) {
+                     log.warn("Sending Mail to User " + userdb.getMail() + " failed", e);
+                 }
+             }
+         }
+
+         //save OA configuration
+         String error = saveOAConfigToDatabase(onlineapplication);
+         if (MiscUtil.isNotEmpty(error)) {
+             log.warn("OA configuration can not be stored!");
+             addActionError(error);
+
+             formID = Random.nextRandom();
+             session.setAttribute(Constants.SESSION_FORMID, formID);
+             
+             throw new BasicOAActionException(error, Constants.STRUTS_ERROR_VALIDATION);
+         }
+
+         //set metadata reload flag if reload is required
+         
+         if (getPvp2OA() != null && getPvp2OA().getMetaDataURL() != null) {
+
+             try {
+                 if (isMetaDataRefreshRequired
+                         || !getPvp2OA().getMetaDataURL().equals(onlineapplication.getAuthComponentOA().getOAPVP2().getMetadataURL())
+                         || getPvp2OA().getFileUpload() != null
+                         || getPvp2OA().isReLoad()) {
+
+                     log.debug("Set PVP2 Metadata refresh flag.");
+                     MOAIDConfiguration moaconfig = ConfigurationDBRead.getMOAIDConfiguration();
+                     moaconfig.setPvp2RefreshItem(new Date());
+                     ConfigurationDBUtils.saveOrUpdate(moaconfig);
+
+                 }
+             } catch (Throwable e) {
+                 log.info("Found no MetadataURL in OA-Databaseconfig!", e);
+             }
+
+         }
+         
+         return onlineapplication;
+    }
+    
+    protected OnlineApplication preProcessSaveOnlineApplication() throws BasicOAActionException {
+    	try {
+	        Object formidobj = session.getAttribute(Constants.SESSION_FORMID);
+	        if (formidobj != null && formidobj instanceof String) {
+	            String formid = (String) formidobj;
+	            if (!formid.equals(formID)) {
+	            	throw new BasicOAActionException(
+	            			"FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
+	                        + authUser.getGivenName() + authUser.getUserID(), 
+	                		Constants.STRUTS_ERROR);
+	            }
+	        } else {
+	        	throw new BasicOAActionException(
+	        			"FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
+	                    + authUser.getGivenName() + authUser.getUserID(), 
+	            		Constants.STRUTS_ERROR);
+	            		
+	        }
+	        session.setAttribute(Constants.SESSION_FORMID, null);
+	
+	        UserDatabase userdb = ConfigurationDBRead.getUserWithID(authUser.getUserID());
+	        if (!authUser.isAdmin() && userdb.isIsMailAddressVerified() != null && !userdb.isIsMailAddressVerified()) {
+	            log.info("Online-Applikation managemant disabled. Mail address is not verified.");
+	            throw new BasicOAActionException(
+	            		LanguageHelper.getErrorString("error.editoa.mailverification", request), 
+	            		Constants.STRUTS_SUCCESS);
+	        }
+	
+	        OnlineApplication onlineapplication = null;
+	
+	        Object oadbid = request.getSession().getAttribute(Constants.SESSION_OAID);
+	        Long oaid = (long) -1;
+	
+	        if (oadbid != null) {
+	            try {
+	                oaid = (Long) oadbid;
+	                if (oaid < 0 || oaid > Long.MAX_VALUE) {
+	                	throw new BasicOAActionException(
+	                			LanguageHelper.getErrorString("errors.edit.oa.oaid", request), 
+	                    		Constants.STRUTS_ERROR);
+	                }
+	
+	            } catch (Throwable t) {
+	            	throw new BasicOAActionException(
+	            			LanguageHelper.getErrorString("errors.edit.oa.oaid", request), 
+	                		Constants.STRUTS_ERROR);
+	            }
+	        }
+	
+	        // valid DBID and check entry
+	        OAGeneralConfig oaGeneralForm = ((OAGeneralConfig)formList.get(new OAGeneralConfig().getName()));
+	        String oaidentifier = oaGeneralForm.getIdentifier();
+	        if (MiscUtil.isEmpty(oaidentifier)) {
+	        	log.info("Empty OA identifier");
+	        	throw new BasicOAActionException(
+	        			LanguageHelper.getErrorString("validation.general.oaidentifier.empty", request), 
+	            		Constants.STRUTS_ERROR_VALIDATION);
+	        	
+	        } else {
+	
+	            if (!ValidationHelper.validateURL(oaidentifier)) {
+	            	log.warn("OnlineapplikationIdentifier is not a valid URL: " + oaidentifier);
+	            	throw new BasicOAActionException(
+	            			LanguageHelper.getErrorString("validation.general.oaidentifier.valid",
+	                                new Object[]{ValidationHelper.getNotValidOAIdentifierCharacters()}, request), 
+	                		Constants.STRUTS_ERROR_VALIDATION);
+	                
+	            } else {
+	
+	                if (oaid == -1) {
+	                    onlineapplication = ConfigurationDBRead.getOnlineApplication(oaidentifier);
+	                    setNewOA(true);
+	                    if (onlineapplication != null) {
+	                        log.info("The OAIdentifier is not unique");
+	                    	throw new BasicOAActionException(
+	                    			LanguageHelper.getErrorString("validation.general.oaidentifier.notunique", request), 
+	                        		Constants.STRUTS_ERROR_VALIDATION);
+	                    	
+	                    }
+	
+	                } else {
+	                    onlineapplication = ConfigurationDBRead.getOnlineApplication(oaid);
+	                    if (!oaidentifier.equals(onlineapplication.getPublicURLPrefix())) {
+	
+	                        if (ConfigurationDBRead.getOnlineApplication(oaidentifier) != null) {
+	                        	log.info("The OAIdentifier is not unique");
+	                        	throw new BasicOAActionException(
+	                        			LanguageHelper.getErrorString("validation.general.oaidentifier.notunique", request), 
+	                        			Constants.STRUTS_ERROR_VALIDATION);
+	                           
+	                        }
+	                    }
+	                }
+	            }
+	        }
+	        
+	        return onlineapplication;
+	        
+    	} catch (BasicOAActionException e) {
+            formID = Random.nextRandom();
+            session.setAttribute(Constants.SESSION_FORMID, formID);
+    		
+    		throw e;
+    	}
     	
     }
     
     protected String preProcessDeleteOnlineApplication() throws BasicOAActionException {
-        Object formidobj = session.getAttribute(Constants.SESSION_FORMID);
-        if (formidobj != null && formidobj instanceof String) {
-            String formid = (String) formidobj;
-            if (!formid.equals(formID)) {
-                log.warn("FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
-                        + authUser.getGivenName() + authUser.getUserID());
-                throw new BasicOAActionException(
-                		"FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
-                        + authUser.getGivenName() + authUser.getUserID(), 
-            			Constants.STRUTS_ERROR);
-                
-            }
-        } else {
-            log.warn("FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
-                    + authUser.getGivenName() + authUser.getUserID());
-            throw new BasicOAActionException(
-            		"FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
-                    + authUser.getGivenName() + authUser.getUserID(), 
-        			Constants.STRUTS_ERROR);
-        }
-        session.setAttribute(Constants.SESSION_FORMID, null);
-
-        UserDatabase userdb = ConfigurationDBRead.getUserWithID(authUser.getUserID());
-        if (!authUser.isAdmin() && userdb.isIsMailAddressVerified() != null && !userdb.isIsMailAddressVerified()) {
-            log.info("Online-Applikation managemant disabled. Mail address is not verified.");
-            throw new BasicOAActionException(
-            		LanguageHelper.getErrorString("error.editoa.mailverification", request), 
-        			Constants.STRUTS_SUCCESS);
-            
-        }
-
-        String oaidentifier = getGeneralOA().getIdentifier();
-        if (MiscUtil.isEmpty(oaidentifier)) {
-            log.info("Empty OA identifier");
+    	try {
+	        Object formidobj = session.getAttribute(Constants.SESSION_FORMID);
+	        if (formidobj != null && formidobj instanceof String) {
+	            String formid = (String) formidobj;
+	            if (!formid.equals(formID)) {
+	                log.warn("FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
+	                        + authUser.getGivenName() + authUser.getUserID());
+	                throw new BasicOAActionException(
+	                		"FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
+	                        + authUser.getGivenName() + authUser.getUserID(), 
+	            			Constants.STRUTS_ERROR);
+	                
+	            }
+	        } else {
+	            log.warn("FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
+	                    + authUser.getGivenName() + authUser.getUserID());
+	            throw new BasicOAActionException(
+	            		"FormIDs does not match. Some suspect Form is received from user " + authUser.getFamilyName()
+	                    + authUser.getGivenName() + authUser.getUserID(), 
+	        			Constants.STRUTS_ERROR);
+	        }
+	        session.setAttribute(Constants.SESSION_FORMID, null);
+	
+	        UserDatabase userdb = ConfigurationDBRead.getUserWithID(authUser.getUserID());
+	        if (!authUser.isAdmin() && userdb.isIsMailAddressVerified() != null && !userdb.isIsMailAddressVerified()) {
+	            log.info("Online-Applikation managemant disabled. Mail address is not verified.");
+	            throw new BasicOAActionException(
+	            		LanguageHelper.getErrorString("error.editoa.mailverification", request), 
+	        			Constants.STRUTS_SUCCESS);
+	            
+	        }
+	
+	        String oaidentifier = getGeneralOA().getIdentifier();
+	        if (MiscUtil.isEmpty(oaidentifier)) {
+	            log.info("Empty OA identifier");
+	            formID = Random.nextRandom();
+	            session.setAttribute(Constants.SESSION_FORMID, formID);
+	            
+	            throw new BasicOAActionException(
+	            		LanguageHelper.getErrorString("validation.general.oaidentifier.empty", request), 
+	        			Constants.STRUTS_ERROR_VALIDATION);
+	
+	        } else {
+	            if (ValidationHelper.isValidOAIdentifier(oaidentifier)) {
+	                log.warn("IdentificationNumber contains potentail XSS characters: " + oaidentifier);
+	                formID = Random.nextRandom();
+	                session.setAttribute(Constants.SESSION_FORMID, formID);
+	                
+	                throw new BasicOAActionException(
+	                		LanguageHelper.getErrorString("validation.general.oaidentifier.valid",
+	                                new Object[]{ValidationHelper.getNotValidOAIdentifierCharacters()}, request), 
+	            			Constants.STRUTS_ERROR_VALIDATION);
+	            }
+	        }
+	        
+	        return oaidentifier;
+	        
+    	} catch (BasicOAActionException e) {
             formID = Random.nextRandom();
             session.setAttribute(Constants.SESSION_FORMID, formID);
-            
-            throw new BasicOAActionException(
-            		LanguageHelper.getErrorString("validation.general.oaidentifier.empty", request), 
-        			Constants.STRUTS_ERROR_VALIDATION);
-
-        } else {
-            if (ValidationHelper.isValidOAIdentifier(oaidentifier)) {
-                log.warn("IdentificationNumber contains potentail XSS characters: " + oaidentifier);
-                formID = Random.nextRandom();
-                session.setAttribute(Constants.SESSION_FORMID, formID);
-                
-                throw new BasicOAActionException(
-                		LanguageHelper.getErrorString("validation.general.oaidentifier.valid",
-                                new Object[]{ValidationHelper.getNotValidOAIdentifierCharacters()}, request), 
-            			Constants.STRUTS_ERROR_VALIDATION);
-            }
-        }
-        
-        return oaidentifier;
+    		
+    		throw e;
+    	}
     }
     
+    private String saveOAConfigToDatabase(OnlineApplication dboa) {
+    	
+    	for (IOnlineApplicationData form : formList.values())
+    		form.store(dboa, authUser, request);
+    	
+        try {
+            if (dboa.isIsNew()) {
+                ConfigurationDBUtils.save(dboa);
+
+                if (!authUser.isAdmin()) {
+                    UserDatabase user = ConfigurationDBRead.getUserWithID(authUser.getUserID());
+
+                    List<OnlineApplication> useroas = user.getOnlineApplication();
+                    if (useroas == null) useroas = new ArrayList<OnlineApplication>();
+
+                    useroas.add(dboa);
+                    ConfigurationDBUtils.saveOrUpdate(user);
+                }
+            } else
+                ConfigurationDBUtils.saveOrUpdate(dboa);
+
+        } catch (MOADatabaseException e) {
+            log.warn("Online-Application can not be stored.", e);
+            return LanguageHelper.getErrorString("error.db.oa.store", request);
+        }
+
+        return null;
+    }
     
     /**
      * @param oaidobj the oaidobj to set
@@ -307,4 +440,13 @@ public class BasicOAAction extends BasicAction {
     	formList.put(generalOA.getName(), generalOA);
     }
     
+    
+    public OAPVP2Config getPvp2OA() {
+        return (OAPVP2Config) formList.get(new OAPVP2Config().getName());
+    }
+
+    public void setPvp2OA(OAPVP2Config pvp2oa) {
+    	formList.put(pvp2oa.getName(), pvp2oa);
+    }
+    
 }
diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/EditOAAction.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/EditOAAction.java
index e9850200a..6d735a85b 100644
--- a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/EditOAAction.java
+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/EditOAAction.java
@@ -49,8 +49,7 @@ public class EditOAAction extends BasicOAAction {
 
     private final Logger log = Logger.getLogger(EditOAAction.class);
     private static final long serialVersionUID = 1L;
-
-    private boolean isMetaDataRefreshRequired = false;
+    
     private String nextPage;
     private InputStream stream;
         
@@ -130,6 +129,12 @@ public class EditOAAction extends BasicOAAction {
 			populateBasicInformations();
 			
 			populateBasicNewOnlineApplicationInformation();
+						
+			// prepare attribute helper list
+			ArrayList<AttributeHelper> attributes = new ArrayList<AttributeHelper>();
+			for(StorkAttribute current : ConfigurationDBRead.getMOAIDConfiguration().getAuthComponentGeneral().getForeignIdentities().getSTORK().getAttributes())
+				attributes.add(new AttributeHelper(current));						
+			getStorkOA().setHelperAttributes(attributes);
 			
 		} catch (BasicActionException e) {
 			return Constants.STRUTS_ERROR;
@@ -144,8 +149,8 @@ public class EditOAAction extends BasicOAAction {
             return Constants.STRUTS_SUCCESS;
         }
 
+        ConfigurationDBUtils.closeSession();
         session.setAttribute(Constants.SESSION_OAUTH20SECRET, ((OAOAuth20Config)formList.get(new OAOAuth20Config().getName())).getClientSecret());
-
         nextPage = Constants.STRUTS_RETURNAREA_VALUES.main.name();
         
         return Constants.STRUTS_OA_EDIT;
@@ -191,80 +196,14 @@ public class EditOAAction extends BasicOAAction {
             return Constants.STRUTS_ERROR_VALIDATION;
 
         } else {
-        	
-            if (onlineapplication == null) {
-                onlineapplication = new OnlineApplication();
-                onlineapplication.setIsNew(true);
-                onlineapplication.setIsActive(false);
-
-                if (!authUser.isAdmin()) {
-                    onlineapplication.setIsAdminRequired(true);
-
-                } else
-                    isMetaDataRefreshRequired = true;
-
-            } else {
-            	onlineapplication.setIsNew(false);
-                if (!authUser.isAdmin() && !onlineapplication.getPublicURLPrefix().equals(getGeneralOA().getIdentifier())) {
-
-                    onlineapplication.setIsAdminRequired(true);
-                    onlineapplication.setIsActive(false);
-                    log.info("User with ID " + authUser.getUserID() + " change OA-PublicURLPrefix. Reaktivation is required.");
-                }
-
-            }
-
-            if ((onlineapplication.isIsAdminRequired() == null)
-                    || (authUser.isAdmin() && getGeneralOA().isActive() && onlineapplication.isIsAdminRequired())) {
-
-                onlineapplication.setIsAdminRequired(false);
-                isMetaDataRefreshRequired = true;
-
-                UserDatabase userdb = null;
-				if (onlineapplication.getHjid() != null)
-                    userdb = ConfigurationDBRead.getUsersWithOADBID(onlineapplication.getHjid());
-
-                if (userdb != null && !userdb.isIsAdmin()) {
-                    try {
-                        MailHelper.sendUserOnlineApplicationActivationMail(userdb.getGivenname(), userdb.getFamilyname(),
-                                userdb.getInstitut(), onlineapplication.getPublicURLPrefix(), userdb.getMail());
-                    } catch (ConfigurationException e) {
-                        log.warn("Sending Mail to User " + userdb.getMail() + " failed", e);
-                    }
-                }
-            }
-
-            //save OA configuration
-            String error = saveOAConfigToDatabase(onlineapplication);
-            if (MiscUtil.isNotEmpty(error)) {
-                log.warn("OA configuration can not be stored!");
-                addActionError(error);
-
-                formID = Random.nextRandom();
-                session.setAttribute(Constants.SESSION_FORMID, formID);
-                return Constants.STRUTS_ERROR_VALIDATION;
-            }
-
-            //set metadata reload flag if reload is required
-            if (getPvp2OA().getMetaDataURL() != null) {
-
-                try {
-                    if (isMetaDataRefreshRequired
-                            || !getPvp2OA().getMetaDataURL().equals(onlineapplication.getAuthComponentOA().getOAPVP2().getMetadataURL())
-                            || getPvp2OA().getFileUpload() != null
-                            || getPvp2OA().isReLoad()) {
-
-                        log.debug("Set PVP2 Metadata refresh flag.");
-                        MOAIDConfiguration moaconfig = ConfigurationDBRead.getMOAIDConfiguration();
-                        moaconfig.setPvp2RefreshItem(new Date());
-                        ConfigurationDBUtils.saveOrUpdate(moaconfig);
-
-                    }
-                } catch (Throwable e) {
-                    log.info("Found no MetadataURL in OA-Databaseconfig!", e);
-                }
-
-            }
+        	try {
+				onlineapplication = postProcessSaveOnlineApplication(onlineapplication);
+				
+			} catch (BasicOAActionException e) {
+				addActionError(e.getStrutsError());
+				return e.getStrutsReturnValue();
+			}
+        	        	
         }
 
         Object nextPageAttr = session.getAttribute(Constants.SESSION_RETURNAREA);
@@ -489,35 +428,6 @@ public class EditOAAction extends BasicOAAction {
 
         return Constants.STRUTS_SUCCESS;
     }
-
-    private String saveOAConfigToDatabase(OnlineApplication dboa) {
-    	
-    	for (IOnlineApplicationData form : formList.values())
-    		form.store(dboa, authUser, request);
-    	
-        try {
-            if (dboa.isIsNew()) {
-                ConfigurationDBUtils.save(dboa);
-
-                if (!authUser.isAdmin()) {
-                    UserDatabase user = ConfigurationDBRead.getUserWithID(authUser.getUserID());
-
-                    List<OnlineApplication> useroas = user.getOnlineApplication();
-                    if (useroas == null) useroas = new ArrayList<OnlineApplication>();
-
-                    useroas.add(dboa);
-                    ConfigurationDBUtils.saveOrUpdate(user);
-                }
-            } else
-                ConfigurationDBUtils.saveOrUpdate(dboa);
-
-        } catch (MOADatabaseException e) {
-            log.warn("Online-Application can not be stored.", e);
-            return LanguageHelper.getErrorString("error.db.oa.store", request);
-        }
-
-        return null;
-    }
     
     public OAAuthenticationData getAuthOA() {
         return (OAAuthenticationData) formList.get(new OAAuthenticationData().getName());
@@ -526,14 +436,6 @@ public class EditOAAction extends BasicOAAction {
     public void setAuthOA(OAAuthenticationData generalOA) {
     	formList.put(generalOA.getName(), generalOA);
     }
-    
-    public OAPVP2Config getPvp2OA() {
-        return (OAPVP2Config) formList.get(new OAPVP2Config().getName());
-    }
-
-    public void setPvp2OA(OAPVP2Config pvp2oa) {
-    	formList.put(pvp2oa.getName(), pvp2oa);
-    }
 
     public OASAML1Config getSaml1OA() {
         return (OASAML1Config) formList.get(new OASAML1Config().getName());
diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/InterfederationIDPAction.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/InterfederationIDPAction.java
index 769b92649..4c0830ae9 100644
--- a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/InterfederationIDPAction.java
+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/InterfederationIDPAction.java
@@ -23,29 +23,32 @@
 package at.gv.egovernment.moa.id.configuration.struts.action;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Date;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.log4j.Logger;
 
 import at.gv.egovernment.moa.id.commons.db.ConfigurationDBRead;
 import at.gv.egovernment.moa.id.commons.db.ConfigurationDBUtils;
+import at.gv.egovernment.moa.id.commons.db.dao.config.AttributeProviderPlugin;
+import at.gv.egovernment.moa.id.commons.db.dao.config.MOAIDConfiguration;
 import at.gv.egovernment.moa.id.commons.db.dao.config.OnlineApplication;
+import at.gv.egovernment.moa.id.commons.db.dao.config.UserDatabase;
 import at.gv.egovernment.moa.id.configuration.Constants;
 import at.gv.egovernment.moa.id.configuration.data.FormularCustomization;
 import at.gv.egovernment.moa.id.configuration.data.OAListElement;
 import at.gv.egovernment.moa.id.configuration.data.oa.IOnlineApplicationData;
 import at.gv.egovernment.moa.id.configuration.data.oa.OAAuthenticationData;
 import at.gv.egovernment.moa.id.configuration.data.oa.OAMOAIDPInterfederationConfig;
-import at.gv.egovernment.moa.id.configuration.data.oa.OAPVP2Config;
+import at.gv.egovernment.moa.id.configuration.data.oa.OAOAuth20Config;
 import at.gv.egovernment.moa.id.configuration.data.oa.OASTORKConfig;
+import at.gv.egovernment.moa.id.configuration.data.oa.OATargetConfiguration;
 import at.gv.egovernment.moa.id.configuration.exception.BasicActionException;
 import at.gv.egovernment.moa.id.configuration.exception.BasicOAActionException;
 import at.gv.egovernment.moa.id.configuration.helper.FormDataHelper;
 import at.gv.egovernment.moa.id.configuration.helper.LanguageHelper;
-import at.gv.egovernment.moa.id.util.FormBuildUtils;
 import at.gv.egovernment.moa.id.util.Random;
+import at.gv.egovernment.moa.util.MiscUtil;
 
 /**
  * @author tlenz
@@ -60,6 +63,8 @@ public class InterfederationIDPAction extends BasicOAAction {
 	
 	private List<OAListElement> formOAs; 
 	
+	private String interfederationType; 
+	
 	public InterfederationIDPAction() {
 		super();
 		
@@ -98,35 +103,143 @@ public class InterfederationIDPAction extends BasicOAAction {
 		}
 	}
 	
+	public String newIDP() {
+        log.debug("insert new interfederation IDP");
+
+		try {
+			populateBasicInformations();
+			
+			if (!authUser.isAdmin()) {
+				log.warn("User with ID " + authUser.getUserID() + " not allowed to manage interfederation IDPs.");
+				addActionError(LanguageHelper.getErrorString("errors.notallowed", request));
+				return Constants.STRUTS_NOTALLOWED;
+			}
+			
+			if (STRUTS_IDP_MOA.equals(interfederationType)) {
+				formList.putAll(MOAIDPAction.buildMOAIDPFormList());
+				
+			} else if (STRUTS_IDP_VIDP.equals(interfederationType)) {
+				formList.putAll(VIDPAction.buildVIDPFormList());
+				getStorkOA().setVidpEnabled(true);
+				getStorkOA().getAttributeProviderPlugins().add(new AttributeProviderPlugin());
+				
+			} else {
+				log.warn("Unkown interfederation IDP type");
+				addActionError("Unkown interfederation IDP type");
+				return Constants.STRUTS_ERROR;
+			}
+			
+			populateBasicNewOnlineApplicationInformation();
+			
+		} catch (BasicActionException e) {
+			return Constants.STRUTS_ERROR;
+			
+		}
+        
+        return Constants.STRUTS_OA_EDIT + interfederationType;
+		
+	}
+	
 	public String loadIDPInformation() {
 		try {
 			populateBasicInformations();
 			
+			if (!authUser.isAdmin()) {
+				log.warn("User with ID " + authUser.getUserID() + " not allowed to manage interfederation IDPs.");
+				addActionError(LanguageHelper.getErrorString("errors.notallowed", request));
+				return Constants.STRUTS_NOTALLOWED;
+			}
+			
 			OnlineApplication oa = populateOnlineApplicationFromRequest();
 			
 			if (oa.isIsInterfederationIDP() != null 
 					&& oa.isIsInterfederationIDP()) {				
 				
-				buildMOAIDPFormList();				
-				parseOAToForm(oa);				
-				
-				return Constants.STRUTS_SUCCESS + STRUTS_IDP_MOA;
+				formList.putAll(MOAIDPAction.buildMOAIDPFormList());
+				interfederationType = STRUTS_IDP_MOA;
 				
 			} else if (oa.getAuthComponentOA().getOASTORK() != null 
 					&& oa.getAuthComponentOA().getOASTORK().isVidpEnabled() != null
 					&& oa.getAuthComponentOA().getOASTORK().isVidpEnabled()) {
 				
-				buildVIDPFormList();				
-				parseOAToForm(oa);								
-				
-				return Constants.STRUTS_SUCCESS + STRUTS_IDP_VIDP;
+				formList.putAll(VIDPAction.buildVIDPFormList());
+				if (getStorkOA().getAttributeProviderPlugins() == null || 
+						getStorkOA().getAttributeProviderPlugins().size() == 0)
+					getStorkOA().getAttributeProviderPlugins().add(new AttributeProviderPlugin());
+				interfederationType = STRUTS_IDP_VIDP;
 				
 			} else {
 				log.warn("Requested application is not an interfederation IDP.");
 				return Constants.STRUTS_NOTALLOWED;
 			}
+
+			parseOAToForm(oa);											
+			return Constants.STRUTS_SUCCESS + interfederationType;
+			
+			
+		} catch (BasicActionException e) {
+			return Constants.STRUTS_ERROR;
+			
+		} catch (BasicOAActionException e) {
+			addActionError(e.getStrutsError());
+			return e.getStrutsReturnValue();
+			
+		}		
+	}
+	
+	public String saveIDP() {
+		
+    	OnlineApplication onlineapplication= null;
+    	
+		try {
+			populateBasicInformations();
+			
+			if (!authUser.isAdmin()) {
+				log.warn("User with ID " + authUser.getUserID() + " not allowed to manage interfederation IDPs.");
+				addActionError(LanguageHelper.getErrorString("errors.notallowed", request));
+				return Constants.STRUTS_NOTALLOWED;
+			}
+			
+			onlineapplication = preProcessSaveOnlineApplication();
+			
+			if ( onlineapplication != null && 
+					!((onlineapplication.isIsInterfederationIDP() != null && onlineapplication.isIsInterfederationIDP()) || 
+					(onlineapplication.getAuthComponentOA().getOASTORK() != null 
+						&& onlineapplication.getAuthComponentOA().getOASTORK().isVidpEnabled() != null
+						&& onlineapplication.getAuthComponentOA().getOASTORK().isVidpEnabled()))) {				
+				log.warn("IDP which should be stored is not of type interfederation IDP.");
+				addActionError("IDP which should be stored is not of type MOA-ID interfederation IDP.");
+				return Constants.STRUTS_ERROR;
 				
-				
+			}
+			
+	        List<String> errors = new ArrayList<String>();
+			
+	        //validate forms
+	        for (IOnlineApplicationData form : formList.values())
+	        	errors.addAll(form.validate(getGeneralOA(), authUser, request));
+	        
+	        if (errors.size() > 0) {
+	            log.info("IDP-Configuration with ID " + getGeneralOA().getIdentifier() + " has some errors.");
+	            for (String el : errors)
+	                addActionError(el);
+
+	            formID = Random.nextRandom();
+	            session.setAttribute(Constants.SESSION_FORMID, formID);
+	            return Constants.STRUTS_ERROR_VALIDATION;
+
+	        } else {
+				postProcessSaveOnlineApplication(onlineapplication);
+						        	
+	        }
+	        
+	        //remove session attributes
+	        session.setAttribute(Constants.SESSION_OAID, null);
+	        ConfigurationDBUtils.closeSession();
+	        
+	        addActionMessage(LanguageHelper.getGUIString("webpages.idp.success", getGeneralOA().getIdentifier(), request));
+	        return Constants.STRUTS_SUCCESS;
+			
 			
 		} catch (BasicActionException e) {
 			return Constants.STRUTS_ERROR;
@@ -137,7 +250,81 @@ public class InterfederationIDPAction extends BasicOAAction {
 			
 		}		
 	}
+	
+	public String cancleAndBackIDP() {
+		try {
+			populateBasicInformations();
+			
+			if (!authUser.isAdmin()) {
+				log.warn("User with ID " + authUser.getUserID() + " not allowed to manage interfederation IDPs.");
+				addActionError(LanguageHelper.getErrorString("errors.notallowed", request));
+				return Constants.STRUTS_NOTALLOWED;
+			}
+			
+		} catch (BasicActionException e) {
+			return Constants.STRUTS_ERROR;
+			
+		}
+
+        session.setAttribute(Constants.SESSION_OAID, null);
+        addActionMessage(LanguageHelper.getGUIString("webpages.idp.cancle", getGeneralOA().getIdentifier(), request));
+        ConfigurationDBUtils.closeSession();
 
+        return Constants.STRUTS_SUCCESS;		
+	}
+	
+	public String deleteIDP() {
+		String oaidentifier = null;
+		try {
+			populateBasicInformations();
+			
+			if (!authUser.isAdmin()) {
+				log.warn("User with ID " + authUser.getUserID() + " not allowed to manage interfederation IDPs.");
+				addActionError(LanguageHelper.getErrorString("errors.notallowed", request));
+				return Constants.STRUTS_NOTALLOWED;
+			}
+			
+			oaidentifier  = preProcessDeleteOnlineApplication();
+	        
+			
+		} catch (BasicActionException e) {
+			return Constants.STRUTS_ERROR;
+			
+		} catch (BasicOAActionException e) {
+			addActionError(e.getStrutsError());
+			return e.getStrutsReturnValue();
+			
+		}
+
+		session.setAttribute(Constants.SESSION_OAID, null);
+        OnlineApplication onlineapplication = ConfigurationDBRead.getOnlineApplication(oaidentifier);
+        
+        try {
+            if (MiscUtil.isNotEmpty(onlineapplication.getAuthComponentOA().getOAPVP2().getMetadataURL())) {
+
+                MOAIDConfiguration moaconfig = ConfigurationDBRead.getMOAIDConfiguration();
+                moaconfig.setPvp2RefreshItem(new Date());
+                ConfigurationDBUtils.saveOrUpdate(moaconfig);
+
+            }
+        } catch (Throwable e) {
+            log.info("Found no MetadataURL in OA-Databaseconfig!", e);
+        }
+
+        if (ConfigurationDBUtils.delete(onlineapplication)) {
+        	
+            ConfigurationDBUtils.closeSession();
+            addActionMessage(LanguageHelper.getGUIString("webpages.oaconfig.delete.message", oaidentifier, request));
+            return Constants.STRUTS_SUCCESS;
+
+        } else {
+            ConfigurationDBUtils.closeSession();
+            addActionError(LanguageHelper.getGUIString("webpages.oaconfig.delete.error", oaidentifier, request));
+            return Constants.STRUTS_SUCCESS;
+        }
+		
+	}
+	
 	/**
 	 * @param oa
 	 */
@@ -161,35 +348,7 @@ public class InterfederationIDPAction extends BasicOAAction {
         session.setAttribute(Constants.SESSION_FORMID, formID);
         session.setAttribute(Constants.SESSION_OAID, oaid);		
 	}
-
-	private void buildMOAIDPFormList() {
-		
-    	OAPVP2Config pvp2OA = new OAPVP2Config();
-    	formList.put(pvp2OA.getName(), pvp2OA);
-    	
-    	OAMOAIDPInterfederationConfig moaidp = new OAMOAIDPInterfederationConfig();
-    	formList.put(moaidp.getName(), moaidp);
-		
-	}
-		
-	/**
-	 * 
-	 */
-	private void buildVIDPFormList() {
-		
-    	OAAuthenticationData authOA = new OAAuthenticationData();
-    	formList.put(authOA.getName(), authOA);
-    	
-    	OASTORKConfig storkOA = new OASTORKConfig();
-    	formList.put(storkOA.getName(), storkOA);
-    	
-        Map<String, String> map = new HashMap<String, String>();
-        map.putAll(FormBuildUtils.getDefaultMap());
-    	FormularCustomization formOA = new FormularCustomization(map);
-    	formList.put(formOA.getName(), formOA);
-		
-	}
-	
+			
 	/**
 	 * @return the formOAs
 	 */
@@ -197,19 +356,74 @@ public class InterfederationIDPAction extends BasicOAAction {
 		return formOAs;
 	}
 	
-    public OAPVP2Config getPvp2OA() {
-        return (OAPVP2Config) formList.get(new OAPVP2Config().getName());
+    public OAMOAIDPInterfederationConfig getMoaIDP() {
+        return (OAMOAIDPInterfederationConfig) formList.get(new OAMOAIDPInterfederationConfig().getName());
     }
 
-    public void setPvp2OA(OAPVP2Config pvp2oa) {
+    public void setMoaIDP(OAMOAIDPInterfederationConfig pvp2oa) {
     	formList.put(pvp2oa.getName(), pvp2oa);
     }
+
+    /**
+     * @return the formOA
+     */
+    public OATargetConfiguration getTargetConfig() {
+        return (OATargetConfiguration) formList.get(new OATargetConfiguration().getName());
+    }
+
+    /**
+     * @param formOA the formOA to set
+     */
+    public void setTargetConfig(OATargetConfiguration formOA) {
+    	formList.put(formOA.getName(), formOA);
+    }
     
-    public OAMOAIDPInterfederationConfig getMOAIDP() {
-        return (OAMOAIDPInterfederationConfig) formList.get(new OAMOAIDPInterfederationConfig().getName());
+    /**
+     * @return the formOA
+     */
+    public FormularCustomization getFormOA() {
+        return (FormularCustomization) formList.get(new FormularCustomization(null).getName());
     }
 
-    public void setMOAIDP(OAMOAIDPInterfederationConfig pvp2oa) {
-    	formList.put(pvp2oa.getName(), pvp2oa);
+    /**
+     * @param formOA the formOA to set
+     */
+    public void setFormOA(FormularCustomization formOA) {
+    	formList.put(formOA.getName(), formOA);
+    }
+    
+    public OASTORKConfig getStorkOA() {
+        return (OASTORKConfig) formList.get(new OASTORKConfig().getName());
+    }
+
+    public void setStorkOA(OASTORKConfig storkOA) {
+    	formList.put(storkOA.getName(), storkOA);
+    }
+    
+    
+    public OAAuthenticationData getAuthOA() {
+        return (OAAuthenticationData) formList.get(new OAAuthenticationData().getName());
     }
+
+    public void setAuthOA(OAAuthenticationData generalOA) {
+    	formList.put(generalOA.getName(), generalOA);
+    }
+    
+    
+	/**
+	 * @return the interfederationType
+	 */
+	public String getInterfederationType() {
+		return interfederationType;
+	}
+
+	/**
+	 * @param interfederationType the interfederationType to set
+	 */
+	public void setInterfederationType(String interfederationType) {
+		this.interfederationType = interfederationType;
+	}
+    
+    
+    
 }
diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/MOAIDPAction.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/MOAIDPAction.java
new file mode 100644
index 000000000..8c04a382a
--- /dev/null
+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/MOAIDPAction.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2014 Federal Chancellery Austria
+ * MOA-ID has been developed in a cooperation between BRZ, the Federal
+ * Chancellery Austria - ICT staff unit, and Graz University of Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.gv.egovernment.moa.id.configuration.struts.action;
+
+import java.util.LinkedHashMap;
+
+import at.gv.egovernment.moa.id.configuration.data.oa.IOnlineApplicationData;
+import at.gv.egovernment.moa.id.configuration.data.oa.OAMOAIDPInterfederationConfig;
+import at.gv.egovernment.moa.id.configuration.data.oa.OAPVP2Config;
+
+/**
+ * @author tlenz
+ *
+ */
+public class MOAIDPAction extends InterfederationIDPAction {
+
+	private static final long serialVersionUID = -2047128481980413334L;
+	
+	public MOAIDPAction() {
+		super();		
+		formList.putAll(buildMOAIDPFormList());
+	}
+	
+	public static LinkedHashMap<String, IOnlineApplicationData> buildMOAIDPFormList() {
+		
+		LinkedHashMap<String, IOnlineApplicationData> forms = 
+				new LinkedHashMap<String, IOnlineApplicationData>(); 
+				
+		
+    	OAPVP2Config pvp2OA = new OAPVP2Config();
+    	forms.put(pvp2OA.getName(), pvp2OA);
+    	
+    	OAMOAIDPInterfederationConfig moaidp = new OAMOAIDPInterfederationConfig();
+    	forms.put(moaidp.getName(), moaidp);
+		
+    	return forms;
+	}
+
+}
diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/VIDPAction.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/VIDPAction.java
new file mode 100644
index 000000000..8588dd286
--- /dev/null
+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/struts/action/VIDPAction.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2014 Federal Chancellery Austria
+ * MOA-ID has been developed in a cooperation between BRZ, the Federal
+ * Chancellery Austria - ICT staff unit, and Graz University of Technology.
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://www.osor.eu/eupl/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ *
+ * This product combines work with different licenses. See the "NOTICE" text
+ * file for details on the various modules and licenses.
+ * The "NOTICE" text file is part of the distribution. Any derivative works
+ * that you distribute must include a readable copy of the "NOTICE" text file.
+ */
+package at.gv.egovernment.moa.id.configuration.struts.action;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import at.gv.egovernment.moa.id.configuration.data.FormularCustomization;
+import at.gv.egovernment.moa.id.configuration.data.oa.IOnlineApplicationData;
+import at.gv.egovernment.moa.id.configuration.data.oa.OAAuthenticationData;
+import at.gv.egovernment.moa.id.configuration.data.oa.OASTORKConfig;
+import at.gv.egovernment.moa.id.configuration.data.oa.OATargetConfiguration;
+import at.gv.egovernment.moa.id.util.FormBuildUtils;
+
+/**
+ * @author tlenz
+ *
+ */
+public class VIDPAction extends InterfederationIDPAction {
+
+	private static final long serialVersionUID = 1981465294474566533L;
+
+	
+	public VIDPAction() {
+		super();
+		formList.putAll(buildVIDPFormList());
+	}
+	
+	/**
+	 * @return 
+	 * 
+	 */
+	public static LinkedHashMap<String, IOnlineApplicationData> buildVIDPFormList() {
+		LinkedHashMap<String, IOnlineApplicationData> forms = 
+				new LinkedHashMap<String, IOnlineApplicationData>(); 
+		
+		OATargetConfiguration oaTarget = new OATargetConfiguration();
+		forms.put(oaTarget.getName(), oaTarget);
+		
+		OAAuthenticationData authOA = new OAAuthenticationData();
+    	forms.put(authOA.getName(), authOA);
+    	
+    	OASTORKConfig storkOA = new OASTORKConfig();
+    	forms.put(storkOA.getName(), storkOA);
+    	
+        Map<String, String> map = new HashMap<String, String>();
+        map.putAll(FormBuildUtils.getDefaultMap());
+    	FormularCustomization formOA = new FormularCustomization(map);
+    	forms.put(formOA.getName(), formOA);
+		
+    	return forms;
+	}
+	
+}
diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OASTORKConfigValidation.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OASTORKConfigValidation.java
index d18c34458..60209542b 100644
--- a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OASTORKConfigValidation.java
+++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OASTORKConfigValidation.java
@@ -23,6 +23,7 @@
 package at.gv.egovernment.moa.id.configuration.validation.oa;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
@@ -52,7 +53,9 @@ public class OASTORKConfigValidation {
 		}
 		
 		if (oageneral.isVidpEnabled()) {		
-			for(AttributeProviderPlugin current : oageneral.getAttributeProviderPlugins()) {
+			Iterator<AttributeProviderPlugin> interator = oageneral.getAttributeProviderPlugins().iterator();				
+			while (interator.hasNext()) {
+				AttributeProviderPlugin current = interator.next();
 				if (MiscUtil.isEmpty(current.getUrl()) || !ValidationHelper.validateURL(current.getUrl())) {
 					log.info("AttributeProviderPlugin URL has no valid form.");
 					errors.add(LanguageHelper.getErrorString("validation.stork.ap.url.valid", request));
diff --git a/id/ConfigWebTool/src/main/resources/applicationResources_de.properties b/id/ConfigWebTool/src/main/resources/applicationResources_de.properties
index 0df2a1d85..8e58f4f1d 100644
--- a/id/ConfigWebTool/src/main/resources/applicationResources_de.properties
+++ b/id/ConfigWebTool/src/main/resources/applicationResources_de.properties
@@ -105,6 +105,11 @@ webpages.inderfederation.moaid.inboundSSO=Eingehendes SSO erlauben
 webpages.inderfederation.moaid.outboundSSO=Ausgehendes SSO erlauben
 webpages.inderfederation.moaid.storeSSOSession=SSO Session speichern
 webpages.inderfederation.moaid.attributQueryURL=AttributQuery Service URL
+webpages.interfederation.new.header=Neuen Identity Provider hinzuf\u00FCgen
+webpages.interfederation.new.vidp=STORK VIDP
+webpages.interfederation.new.moaid=MOA-ID IDP
+
+
 
 webpages.moaconfig.save.success=Die MOA-ID Konfiguration wurde erfolgreich gespeichert.
 webpages.moaconfig.header=Allgemeine Konfiguration
@@ -306,6 +311,8 @@ message.title=Meldung:
 webpages.oaconfig.success=Die Online-Applikation {0} konnte erfolgreich gespeichert werden.
 webpages.oaconfig.success.admin=Die Online-Applikation {0} konnte erfolgreich gespeichert werden. Es ist jedoch eine Aktivierung durch den Administrator erforderlich. 
 webpages.oaconfig.cancle=Die Bearbeitung der Online-Applikation {0} wurde abgebrochen.
+webpages.idp.success=Der IdentityProvider {0} konnte erfolgreich gespeichert werden.
+webpages.idp.cancle=Die Bearbeitung des IdentityProvider {0} wurde abgebrochen.
 
 webpages.oaconfig.delete.message=Die Online-Applikation {0} wurde erfolgreich gel\u00F6scht.
 webpages.oaconfig.delete.error=Die Online-Applikation {0} konnte nicht gel\u00F6scht werden. 
diff --git a/id/ConfigWebTool/src/main/resources/applicationResources_en.properties b/id/ConfigWebTool/src/main/resources/applicationResources_en.properties
index 3f0d7d3fe..e15f44d87 100644
--- a/id/ConfigWebTool/src/main/resources/applicationResources_en.properties
+++ b/id/ConfigWebTool/src/main/resources/applicationResources_en.properties
@@ -104,8 +104,10 @@ webpages.inderfederation.moaid.header=Interfederation
 webpages.inderfederation.moaid.inboundSSO=Allow inbound SSO
 webpages.inderfederation.moaid.outboundSSO=Allow outbound SSO
 webpages.inderfederation.moaid.storeSSOSession=Store SSO session
-webpages.inderfederation.moaid.attributQueryURL=AttributQuery Service URL
-
+webpages.inderfederation.moaid.attributQueryURL=AttributQuery service URL
+webpages.interfederation.new.header=Add new Identity Provider
+webpages.interfederation.new.vidp=STORK VIDP
+webpages.interfederation.new.moaid=MOA-ID IDP
 
 webpages.moaconfig.save.success=MOA-ID has been successfully saved.
 webpages.moaconfig.header=General configuration
@@ -307,6 +309,8 @@ message.title=Announcement:
 webpages.oaconfig.success=The Online-Application {0} could be saved.
 webpages.oaconfig.success.admin=Online-Applikation {0} could be saved. The activation by the Administrator is necessary.
 webpages.oaconfig.cancle=The processing of Online-Applikation {0} was interrupted.
+webpages.idp.success=IdentityProvider {0} could be saved.
+webpages.idp.cancle=The processing of IdentityProvider {0} was interrupted.
 
 webpages.oaconfig.delete.message=Online-Application {0} was succesfully removed.
 webpages.oaconfig.delete.error=Online-Application {0} could not be removed.
diff --git a/id/ConfigWebTool/src/main/resources/struts.xml b/id/ConfigWebTool/src/main/resources/struts.xml
index 28297c9e6..3fc82f83f 100644
--- a/id/ConfigWebTool/src/main/resources/struts.xml
+++ b/id/ConfigWebTool/src/main/resources/struts.xml
@@ -387,6 +387,60 @@
 	     </result>
 			<interceptor-ref name="OwnStack"/>
 		</action>
+
+ 		<action name="newIDP" method="newIDP" class="at.gv.egovernment.moa.id.configuration.struts.action.InterfederationIDPAction">
+			<result name="editOA-VIDP">/jsp/interfederation/vidp.jsp</result>
+			<result name="editOA-MOAIDP">/jsp/interfederation/moa_idp.jsp</result>
+			<result name="success" type="chain">main</result>
+			<result name="error">/error.jsp</result>
+			<result name="reauthentication" type="redirectAction">
+	          <param name="actionName">logout</param>
+            <param name="namespace">/</param> 
+	     </result>
+			<interceptor-ref name="OwnStack"/>
+		</action>
+
+
+ 		 <action name="saveMOAIDP" method="saveIDP" class="at.gv.egovernment.moa.id.configuration.struts.action.MOAIDPAction">
+			<result name="success" type="chain">main</result>
+			<result name="error_validation">/jsp/interfederation/moa_idp.jsp</result>
+			<result name="error">/error.jsp</result>
+			<result name="reauthentication" type="redirectAction">
+	          <param name="actionName">logout</param>
+            <param name="namespace">/</param> 
+	     </result>
+			<interceptor-ref name="OwnStack"/>
+		</action>
+		
+		<action name="saveVIDP" method="saveIDP" class="at.gv.egovernment.moa.id.configuration.struts.action.VIDPAction">
+			<result name="success" type="chain">main</result>
+			<result name="error_validation">/jsp/interfederation/vidp.jsp</result>
+			<result name="error">/error.jsp</result>
+			<result name="reauthentication" type="redirectAction">
+	          <param name="actionName">logout</param>
+            <param name="namespace">/</param> 
+	     </result>
+			<interceptor-ref name="OwnStack"/>
+		</action>
+		
+ 		<action name="cancleandbackIDP" method="cancleAndBackIDP" class="at.gv.egovernment.moa.id.configuration.struts.action.InterfederationIDPAction">
+			<result type="chain">main</result>
+			<result name="reauthentication" type="redirectAction">
+	          <param name="actionName">logout</param>
+            <param name="namespace">/</param> 
+	     </result>
+			<interceptor-ref name="OwnStack"/>
+		</action> 		
+ 	
+ 		<action name="deleteIDP" method="deleteIDP" class="at.gv.egovernment.moa.id.configuration.struts.action.InterfederationIDPAction">
+			<result name="success" type="chain">main</result>
+			<result name="error_validation">/jsp/editOAGeneral.jsp</result>
+			<result name="reauthentication" type="redirectAction">
+	          <param name="actionName">logout</param>
+            <param name="namespace">/</param> 
+	     </result>
+			<interceptor-ref name="OwnStack"/>
+		</action> 
 				
  	</package>
 			
diff --git a/id/ConfigWebTool/src/main/webapp/js/common.js b/id/ConfigWebTool/src/main/webapp/js/common.js
index 18c755f4b..32e79bb66 100644
--- a/id/ConfigWebTool/src/main/webapp/js/common.js
+++ b/id/ConfigWebTool/src/main/webapp/js/common.js
@@ -204,7 +204,7 @@ function oaOnLoad() {
 	AdminTarget();
 	oaTargetSubSector();
 	
-	oaVIDP();
+//	oaVIDP();
 	
 	$(".colorfield").each(
 		function() {
diff --git a/id/ConfigWebTool/src/main/webapp/jsp/editOAGeneral.jsp b/id/ConfigWebTool/src/main/webapp/jsp/editOAGeneral.jsp
index e797d05fe..a3541c9a7 100644
--- a/id/ConfigWebTool/src/main/webapp/jsp/editOAGeneral.jsp
+++ b/id/ConfigWebTool/src/main/webapp/jsp/editOAGeneral.jsp
@@ -54,13 +54,6 @@
 								<button type="button" class="oa_buttons" onclick="oaSAML1();" id="button_saml1_hidden">
 									<%=LanguageHelper.getGUIString("webpages.oaconfig.menu.saml1.hidden", request) %>
 								</button>
-								
-								<button  type="button" class="oa_buttons" onclick="oaVIDP();" id="button_vidp_show">
-									<%=LanguageHelper.getGUIString("webpages.oaconfig.menu.vidp.show", request) %>
-								</button>
-								<button type="button" style="display:none" class="oa_buttons" onclick="oaVIDP();" id="button_vidp_hidden">
-									<%=LanguageHelper.getGUIString("webpages.oaconfig.menu.vidp.hidden", request) %>
-								</button>
 							</s:if>
 							
 							<button type="button" class="oa_buttons" onclick="oaPVP2();" id="button_pvp2_show">
@@ -81,13 +74,11 @@
 							<s:include value="snippets/OA/saml1.jsp"></s:include>
 
 							<s:include value="snippets/OA/pvp2.jsp">
-								<s:param name="headBlock">hidden</s:param>
+								<s:param name="hideBlock">hidden</s:param>
 							</s:include>							
 						
 							<s:include value="snippets/OA/openIDConnect.jsp"></s:include>						  						
 							
-							<s:include value="snippets/OA/vidp.jsp"></s:include>
-
 					</div>
 
 					<s:include value="snippets/OA/formCustomization.jsp"></s:include>
diff --git a/id/ConfigWebTool/src/main/webapp/jsp/interfederation/idplist.jsp b/id/ConfigWebTool/src/main/webapp/jsp/interfederation/idplist.jsp
index db36cb2ec..3e7404dfc 100644
--- a/id/ConfigWebTool/src/main/webapp/jsp/interfederation/idplist.jsp
+++ b/id/ConfigWebTool/src/main/webapp/jsp/interfederation/idplist.jsp
@@ -35,7 +35,19 @@
 						<s:param name="editAction">loadIDP</s:param>
 					</s:include>
 				</div>
-				
+				<br>
+				<br>
+				<div id="button_area">
+					<h3><%=LanguageHelper.getGUIString("webpages.interfederation.new.header", request) %></h3>
+					<s:form action="newIDP" namespace="/secure" method="POST" >
+						<s:hidden name="interfederationType" value="-MOAIDP"></s:hidden>
+						<s:submit key="webpages.interfederation.new.moaid"/>
+					</s:form>		
+					<s:form action="newIDP" namespace="/secure" method="POST" >
+						<s:hidden name="interfederationType" value="-VIDP"></s:hidden>
+						<s:submit key="webpages.interfederation.new.vidp"/>
+					</s:form>		
+				</div>	
 				
 								
 			</s:if>
diff --git a/id/ConfigWebTool/src/main/webapp/jsp/interfederation/moa_idp.jsp b/id/ConfigWebTool/src/main/webapp/jsp/interfederation/moa_idp.jsp
index 5dd769757..f0d0671bf 100644
--- a/id/ConfigWebTool/src/main/webapp/jsp/interfederation/moa_idp.jsp
+++ b/id/ConfigWebTool/src/main/webapp/jsp/interfederation/moa_idp.jsp
@@ -38,14 +38,16 @@
 						<s:include value="../snippets/OA/interfederation.jsp"></s:include>
 						
 						<s:include value="../snippets/OA/pvp2.jsp">
-							<s:param name="headBlock">""</s:param>
+							<s:param name="hideBlock">""</s:param>
 						</s:include>	
 										
 						<s:hidden name="formID" value="%{formID}"></s:hidden>
+						<s:hidden name="interfederationType" value="%{interfederationType}"></s:hidden>
+					
 					
 						<div id="button_area">					
 							<s:submit key="webpages.edit.back" action="cancleandbackIDP"/>								
-							<s:submit key="webpages.edit.save" action="saveIDP"/>						
+							<s:submit key="webpages.edit.save" action="saveMOAIDP"/>						
 							<s:if test="!isNewOA()">
 								<s:submit key="webpages.edit.delete" action="deleteIDP"/>
 							</s:if>								
diff --git a/id/ConfigWebTool/src/main/webapp/jsp/interfederation/vidp.jsp b/id/ConfigWebTool/src/main/webapp/jsp/interfederation/vidp.jsp
index 5f51d9f86..3a5dd68c9 100644
--- a/id/ConfigWebTool/src/main/webapp/jsp/interfederation/vidp.jsp
+++ b/id/ConfigWebTool/src/main/webapp/jsp/interfederation/vidp.jsp
@@ -13,11 +13,11 @@
 		<script src="../js/jquery.js"></script>
 	</head>
 	
-	<body>
+	<body onload="oaOnLoad()">
 		
- 		<jsp:include page="snippets/header_userinfos.jsp"></jsp:include>
+ 		<jsp:include page="../snippets/header_userinfos.jsp"></jsp:include>
 
-		<jsp:include page="snippets/main_menu.jsp"></jsp:include>
+		<jsp:include page="../snippets/main_menu.jsp"></jsp:include>
 		
 		<div id="information_area">
 			<s:if test="hasActionErrors()">
@@ -27,20 +27,44 @@
    			</div>
 			</s:if>	
 			
-			<h2><%=LanguageHelper.getGUIString("webpages.interfederation.header", request) %></h2>
-			
 			<s:if test="authUser.isAdmin()">
-				
-				<div class="oa_config_block">
-					<h3><%=LanguageHelper.getGUIString("webpages.interfederation.list.header", request) %></h3>
-					<jsp:include page="snippets/oas_list.jsp"></jsp:include>
-				</div>
+				<div id="list_area"> 
+					<h2><%=LanguageHelper.getGUIString("webpages.interfederation.header", request) %></h2>
+			
+					<s:form namespace="/secure" method="POST" enctype="multipart/form-data">
+					
+						<s:include value="../snippets/OA/generalInformation.jsp"></s:include>
 
+						<s:include value="../snippets/OA/targetConfiguration.jsp"></s:include>
+		
+						<s:include value="../snippets/OA/authentication.jsp"></s:include>
+						
+						<s:include value="../snippets/OA/vidp.jsp">
+							<s:param name="hideBlock"></s:param>
+						</s:include>
+						
+						<s:include value="../snippets/OA/formCustomization.jsp"></s:include>
+																
+						<s:hidden name="formID" value="%{formID}"></s:hidden>
+						<s:hidden name="interfederationType" value="%{interfederationType}"></s:hidden>
+					
+					
+						<div id="button_area">					
+							<s:submit key="webpages.edit.back" action="cancleandbackIDP"/>								
+							<s:submit key="webpages.edit.save" action="saveVIDP"/>						
+							<s:if test="!isNewOA()">
+								<s:submit key="webpages.edit.delete" action="deleteIDP"/>
+							</s:if>								
+						</div>					
+			
+					</s:form>
+							
+				</div>
 			</s:if>
 				
 		</div>
 		
-		<jsp:include page="snippets/footer.jsp"></jsp:include>
+		<jsp:include page="../snippets/footer.jsp"></jsp:include>
 		
 	</body>
 </html>
\ No newline at end of file
diff --git a/id/ConfigWebTool/src/main/webapp/jsp/snippets/OA/pvp2.jsp b/id/ConfigWebTool/src/main/webapp/jsp/snippets/OA/pvp2.jsp
index f9471816c..398e6d110 100644
--- a/id/ConfigWebTool/src/main/webapp/jsp/snippets/OA/pvp2.jsp
+++ b/id/ConfigWebTool/src/main/webapp/jsp/snippets/OA/pvp2.jsp
@@ -3,7 +3,7 @@
 <%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
-						<div id="oa_pvp2_area" class="oa_protocol_area ${param.headBlock}">
+						<div id="oa_pvp2_area" class="oa_protocol_area ${param.hideBlock}">
 							<h4><%=LanguageHelper.getGUIString("webpages.oaconfig.protocols.pvp2.header", request) %></h4>
 						
 							<s:checkbox 	key="webpages.oaconfig.pvp2.reload"
diff --git a/id/ConfigWebTool/src/main/webapp/jsp/snippets/OA/vidp.jsp b/id/ConfigWebTool/src/main/webapp/jsp/snippets/OA/vidp.jsp
index 0dda520b5..e8f1c86d3 100644
--- a/id/ConfigWebTool/src/main/webapp/jsp/snippets/OA/vidp.jsp
+++ b/id/ConfigWebTool/src/main/webapp/jsp/snippets/OA/vidp.jsp
@@ -3,7 +3,7 @@
 <%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
-						<div id="oa_vidp_area" class="oa_protocol_area">
+						<div id="oa_vidp_area" class="oa_protocol_area ${param.hideBlock}">
 							<h4><%=LanguageHelper.getGUIString("webpages.oaconfig.stork.header", request) %></h4>
 	
 							<p><s:checkbox name="storkOA.vidpEnabled" 
-- 
cgit v1.2.3