diff --git a/src/main/java/org/olat/admin/user/imp/ImportStep00.java b/src/main/java/org/olat/admin/user/imp/ImportStep00.java
index 08035ceaee8bd5ae966467d2f4bd1d433936afc0..0d63539dbf0bd001ed49d593f2e176ee3c574f8a 100644
--- a/src/main/java/org/olat/admin/user/imp/ImportStep00.java
+++ b/src/main/java/org/olat/admin/user/imp/ImportStep00.java
@@ -110,8 +110,8 @@ class ImportStep00 extends BasicStep {
 
 		private FormLayoutContainer textContainer;
 		private List<UserPropertyHandler> userPropertyHandlers;
-		private ArrayList<List<String>> newIdents;
-		private List<Object> idents;
+		private List<TransientIdentity> newIdents;
+		private List<Identity> idents;
 
 		public ImportStepForm00(UserRequest ureq, WindowControl control, Form rootForm, StepsRunContext runContext) {
 			super(ureq, control, rootForm, runContext, LAYOUT_VERTICAL, null);
@@ -147,8 +147,8 @@ class ImportStep00 extends BasicStep {
 
 			boolean importDataError = false;
 
-			idents = new ArrayList<Object>();
-			newIdents = new ArrayList<List<String>>();
+			idents = new ArrayList<Identity>();
+			newIdents = new ArrayList<TransientIdentity>();
 			// fxdiff: check also emails in change-workflow, see OLAT-5723
 			Set<String> tempEmailsInUse = new HashSet<String>();
 			RegistrationManager rm = RegistrationManager.getInstance();
@@ -254,21 +254,20 @@ class ImportStep00 extends BasicStep {
 						String thisKey = "";
 						String thisValue = "";
 						// check that no user with same login name is already in list
-						for (Iterator<List<String>> it_news = newIdents.iterator(); it_news.hasNext();) {
-							List<String> singleUser = it_news.next();
-							if (singleUser.get(1).equalsIgnoreCase(login)) {
+						for (Iterator<TransientIdentity> it_news = newIdents.iterator(); it_news.hasNext();) {
+							TransientIdentity singleUser = it_news.next();
+							if (singleUser.getName().equalsIgnoreCase(login)) {
 								textAreaElement.setErrorKey("error.login.douplicate", new String[] { String.valueOf(i + 1), login });
 								importDataError = true;
 								break;
 							}
 						}
 
-						List<String> ud = new ArrayList<String>();
+						TransientIdentity ud = new TransientIdentity();
 						// insert fix fields: login, pwd, lang from above
-						ud.add("false"); // used for first column in model (user existing)
-						ud.add(login);
-						ud.add(pwd);
-						ud.add(lang);
+						ud.setName(login);
+						ud.setPassword(pwd);
+						ud.setLanguage(lang);
 
 						for (int j = 0; j < userPropertyHandlers.size(); j++) {
 							userPropertyHandler = userPropertyHandlers.get(j);
@@ -326,7 +325,7 @@ class ImportStep00 extends BasicStep {
 									importedEmails.add(thisValue);
 								}
 							}
-							ud.add(thisValue);
+							ud.setProperty(thisKey, thisValue);
 							columnId++;
 						}
 						idents.add(ud);
diff --git a/src/main/java/org/olat/admin/user/imp/ImportStep01.java b/src/main/java/org/olat/admin/user/imp/ImportStep01.java
index 13a523065090de0d6efb14aee3a797f2a35562a2..8a34b2070384812a6fe17e06c766f9c5d3ede8da 100644
--- a/src/main/java/org/olat/admin/user/imp/ImportStep01.java
+++ b/src/main/java/org/olat/admin/user/imp/ImportStep01.java
@@ -24,7 +24,6 @@
 */
 package org.olat.admin.user.imp;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import org.olat.core.gui.UserRequest;
@@ -47,6 +46,7 @@ import org.olat.core.gui.control.generic.wizard.StepFormController;
 import org.olat.core.gui.control.generic.wizard.StepsEvent;
 import org.olat.core.gui.control.generic.wizard.StepsRunContext;
 import org.olat.core.gui.translator.Translator;
+import org.olat.core.id.Identity;
 import org.olat.user.UserManager;
 import org.olat.user.propertyhandlers.UserPropertyHandler;
 
@@ -80,8 +80,8 @@ class ImportStep01 extends BasicStep {
 	}
 
 	private final class ImportStepForm01 extends StepFormBasicController {
-		private ArrayList<List<String>> newIdents;
-		private List<Object> idents;
+		private List<TransientIdentity> newIdents;
+		private List<Identity> idents;
 		private FormLayoutContainer textContainer;
 		private List<UserPropertyHandler> userPropertyHandlers;
 
@@ -110,8 +110,8 @@ class ImportStep01 extends BasicStep {
 			FormLayoutContainer formLayoutVertical = FormLayoutContainer.createVerticalFormLayout("vertical", getTranslator());
 			formLayout.add(formLayoutVertical);
 
-			idents = (List<Object>) getFromRunContext("idents");
-			newIdents = (ArrayList<List<String>>) getFromRunContext("newIdents");
+			idents = (List<Identity>) getFromRunContext("idents");
+			newIdents = (List<TransientIdentity>) getFromRunContext("newIdents");
 			textContainer = FormLayoutContainer.createCustomFormLayout("step1", getTranslator(), this.velocity_root + "/step1.html");
 			formLayoutVertical.add(textContainer);
 
@@ -146,12 +146,9 @@ class ImportStep01 extends BasicStep {
 					tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos++));
 			}
 
-
-			FlexiTableDataModel tableDataModel = new FlexiTableDataModelImpl(new Model(idents, colPos), tableColumnModel);
+			FlexiTableDataModel<Identity> tableDataModel = new FlexiTableDataModelImpl<Identity>(new Model(idents, colPos), tableColumnModel);
 			uifactory.addTableElement(ureq, getWindowControl(), "newUsers", tableDataModel, formLayoutVertical);
-
 		}
-
 	}
 }
 
diff --git a/src/main/java/org/olat/admin/user/imp/Model.java b/src/main/java/org/olat/admin/user/imp/Model.java
index bbd7c4f1af2ecc8cd3d3ededfe55348368d0f165..f2ccdb5904f1b4ccd8ff24a2cb45d4417d03af51 100644
--- a/src/main/java/org/olat/admin/user/imp/Model.java
+++ b/src/main/java/org/olat/admin/user/imp/Model.java
@@ -39,63 +39,53 @@ import org.olat.user.propertyhandlers.UserPropertyHandler;
  * 
  * Description: Table model for user mass import.
  */
-public class Model extends DefaultTableDataModel<Object> {
+public class Model extends DefaultTableDataModel<Identity> {
 
 	private List<UserPropertyHandler> userPropertyHandlers;
 	private static final String usageIdentifyer = UserImportController.class.getCanonicalName();
 	private int columnCount = 0;
 
-	public Model(List<Object> objects, int columnCount) {
+	public Model(List<Identity> objects, int columnCount) {
 		super(objects);
 		userPropertyHandlers = UserManager.getInstance().getUserPropertyHandlersFor(usageIdentifyer, true);
 		this.columnCount = columnCount;
 	}
 
+	@Override
 	public int getColumnCount() {
 		return columnCount;
 	}
 
+	@Override
 	public Object getValueAt(int row, int col) {
-		Identity ident = null;
-		List<String> userArray = null;
-		boolean userExists = false;
-		Object o = getObject(row);
-		if (o instanceof Identity) {
-			ident = (Identity) o;
-			userExists = true;
-		} else {
-			userArray = (List<String>) o;
-		}
+		Identity ident = getObject(row);
+		boolean userExists = !(ident instanceof TransientIdentity);
 		
 		if (col == 0) { // existing
 			return (userExists ? Boolean.FALSE : Boolean.TRUE);
 		}
-		if (col == 1) { return (userExists ? ident.getName() : userArray.get(col)); }
+		if (col == 1) {
+			return ident.getName();
+		}
 
 		if (col == 2) {// pwd
 			if (userExists) {
 				return "-";
 			} else {
-				return (userArray.get(col) == null ? "-" : "***");
+				return (((TransientIdentity)ident).getPassword() == null ? "-" : "***");
 			}
 		} else if (col == 3) {// lang
 			if (userExists) {
 				return ident.getUser().getPreferences().getLanguage();
 			} else {
-				return userArray.get(col);
+				return ((TransientIdentity)ident).getLanguage();
 			}
 		} else if (col > 3 && col < getColumnCount()) {
-			if (userExists) {
-				// get user property for this column for an already existing user
-				UserPropertyHandler userPropertyHandler = userPropertyHandlers.get(col - 4);
-				String value = userPropertyHandler.getUserProperty(ident.getUser(), getLocale());
-				return (value == null ? "n/a" : value);
-			} else {
-				return userArray.get(col);
-			}
-		} 
-
+			// get user property for this column for an already existing user
+			UserPropertyHandler userPropertyHandler = userPropertyHandlers.get(col - 4);
+			String value = userPropertyHandler.getUserProperty(ident.getUser(), getLocale());
+			return (value == null ? "n/a" : value);
+		}
 		return "ERROR";
-
 	}
 }
diff --git a/src/main/java/org/olat/admin/user/imp/TransientIdentity.java b/src/main/java/org/olat/admin/user/imp/TransientIdentity.java
new file mode 100644
index 0000000000000000000000000000000000000000..868905facd45ac2f99baa8e26d6b1da3b7207742
--- /dev/null
+++ b/src/main/java/org/olat/admin/user/imp/TransientIdentity.java
@@ -0,0 +1,146 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.admin.user.imp;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import org.olat.core.id.Identity;
+import org.olat.core.id.Persistable;
+import org.olat.core.id.Preferences;
+import org.olat.core.id.User;
+
+/**
+ * A transient implementation of Identity
+ *
+ * Initial date: 08.07.2013<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class TransientIdentity implements Identity, User {
+	private static final long serialVersionUID = 1394807800521540930L;
+
+	private String login;
+	private String password;
+	private String language;
+	
+	private Map<String, String> properties = new HashMap<String,String>();
+
+	@Override
+	public Date getCreationDate() {
+		return null;
+	}
+
+	@Override
+	public Long getKey() {
+		return null;
+	}
+
+
+	@Override
+	public String getName() {
+		return login;
+	}
+	
+	@Override
+	public void setName(String name) {
+		this.login = name;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public String getLanguage() {
+		return language;
+	}
+
+	public void setLanguage(String language) {
+		this.language = language;
+	}
+
+	@Override
+	public User getUser() {
+		return this;
+	}
+
+	@Override
+	public Date getLastLogin() {
+		return null;
+	}
+
+	@Override
+	public void setLastLogin(Date loginDate) {
+		//
+	}
+
+	@Override
+	public Integer getStatus() {
+		return null;
+	}
+
+	@Override
+	public void setStatus(Integer newStatus) {
+		//
+	}
+
+
+
+	@Override
+	public boolean equalsByPersistableKey(Persistable persistable) {
+		return super.equals(persistable);
+	}
+
+	@Override
+	public Preferences getPreferences() {
+		return null;
+	}
+
+	@Override
+	public void setPreferences(Preferences prefs) {
+		//
+	}
+
+	@Override
+	public void setProperty(String propertyName, String propertyValue) {
+		properties.put(propertyName, propertyValue);
+	}
+
+	@Override
+	public String getProperty(String propertyName, Locale locale) {
+		return properties.get(propertyName);
+	}
+
+	@Override
+	public void setIdentityEnvironmentAttributes(Map<String, String> identEnvAttribs) {
+		//
+	}
+
+	@Override
+	public String getPropertyOrIdentityEnvAttribute(String propertyName, Locale locale) {
+		return null;
+	}
+}
diff --git a/src/main/java/org/olat/admin/user/imp/UserImportController.java b/src/main/java/org/olat/admin/user/imp/UserImportController.java
index 314ceb647569aa6e96e12d58577f126be3802e49..cd06ab1ed161993ba29d55764f2d4808b7ff997d 100644
--- a/src/main/java/org/olat/admin/user/imp/UserImportController.java
+++ b/src/main/java/org/olat/admin/user/imp/UserImportController.java
@@ -28,7 +28,6 @@ package org.olat.admin.user.imp;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -112,11 +111,11 @@ public class UserImportController extends BasicController {
 		}
 	}
 
-	private Identity doCreateAndPersistIdentity(List<String> singleUser) {
+	private Identity doCreateAndPersistIdentity(TransientIdentity singleUser) {
 		// Create new user and identity and put user to users group
-		String login = singleUser.get(1); //pos 0 is used for existing/non-existing user flag
-		String pwd = singleUser.get(2);
-		String lang = singleUser.get(3);
+		String login = singleUser.getName(); //pos 0 is used for existing/non-existing user flag
+		String pwd = singleUser.getPassword();
+		String lang = singleUser.getLanguage();
 
 		// use password only when configured to do so
 		if (canCreateOLATPassword) {
@@ -132,13 +131,10 @@ public class UserImportController extends BasicController {
 		User newUser = um.createUser(null, null, null);
 
 		List<UserPropertyHandler> userProperties = userPropertyHandlers;
-		int col = 4;
-		String thisValue = "", stringValue;
 		for (UserPropertyHandler userPropertyHandler : userProperties) {
-			thisValue = singleUser.get(col);
-			stringValue = userPropertyHandler.getStringValue(thisValue, getLocale());
+			String thisValue = singleUser.getProperty(userPropertyHandler.getName(), null);
+			String stringValue = userPropertyHandler.getStringValue(thisValue, getLocale());
 			userPropertyHandler.setUserProperty(newUser, stringValue);
-			col++;
 		}
 		// Init preferences
 		newUser.getPreferences().setLanguage(lang);
@@ -172,10 +168,9 @@ public class UserImportController extends BasicController {
 					if (runContext.containsKey("validImport") && ((Boolean) runContext.get("validImport")).booleanValue()) {
 						// create new users and persist
 						@SuppressWarnings("unchecked")
-						List<List<String>> newIdents = (List<List<String>>) runContext.get("newIdents");
-						for (Iterator<List<String>> it_news = newIdents.iterator(); it_news.hasNext();) {
-							List<String> singleUser = it_news.next();
-							doCreateAndPersistIdentity(singleUser);
+						List<TransientIdentity> newIdents = (List<TransientIdentity>) runContext.get("newIdents");
+						for (TransientIdentity newIdent:newIdents) {
+							doCreateAndPersistIdentity(newIdent);
 						}
 
 						@SuppressWarnings("unchecked")
@@ -185,7 +180,7 @@ public class UserImportController extends BasicController {
 
 						if (ownGroups.size() > 0 || partGroups.size() > 0){
 							@SuppressWarnings("unchecked")
-							List<Object> allIdents = (List<Object>) runContext.get("idents");
+							List<Identity> allIdents = (List<Identity>) runContext.get("idents");
 							Boolean sendMailObj = (Boolean)runContext.get("sendMail");
 							boolean sendmail = sendMailObj == null ? true : sendMailObj.booleanValue();
 							processGroupAdditionForAllIdents(allIdents, ownGroups, partGroups, sendmail);
@@ -208,16 +203,15 @@ public class UserImportController extends BasicController {
 		}
 	}
 	
-	private Collection<Identity> getIdentities(List<Object> allIdents) {
+	private Collection<Identity> getIdentities(List<Identity> allIdents) {
 		Set<Identity> identities = new HashSet<Identity>(allIdents.size());
 		List<String> usernames = new ArrayList<String>();
 		for (Object o : allIdents) {
-			if (o instanceof Identity) {
+			if(o instanceof TransientIdentity) {
+				TransientIdentity transIdent = (TransientIdentity)o;
+				usernames.add(transIdent.getName());
+			} else if (o instanceof Identity) {
 				identities.add((Identity)o);	
-			} else if(o instanceof List) {
-				@SuppressWarnings("unchecked")
-				List<String> userArray = (List<String>) o;
-				usernames.addAll(userArray);
 			}
 		}
 
@@ -226,7 +220,7 @@ public class UserImportController extends BasicController {
 		return identities;
 	}
 
-	private void processGroupAdditionForAllIdents(List<Object> allIdents, List<Long> tutorGroups, List<Long> partGroups, boolean sendmail) {
+	private void processGroupAdditionForAllIdents(List<Identity> allIdents, List<Long> tutorGroups, List<Long> partGroups, boolean sendmail) {
 		Collection<Identity> identities = getIdentities(allIdents);
 		List<BusinessGroupMembershipChange> changes = new ArrayList<BusinessGroupMembershipChange>();
 		for(Identity identity:identities) {
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/AbstractTextElement.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/AbstractTextElement.java
index 9bd5c873e522a19f67da2ee4db1f9fede61881cf..1db642be235ebec69afb5b2c6eafed35f5f9aa0a 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/AbstractTextElement.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/AbstractTextElement.java
@@ -36,7 +36,6 @@ import org.olat.core.gui.components.form.flexible.impl.FormItemImpl;
 import org.olat.core.util.ValidationStatus;
 import org.olat.core.util.ValidationStatusImpl;
 import org.olat.core.util.filter.Filter;
-import org.olat.core.util.filter.FilterFactory;
 
 /**
  * Description:<br>
@@ -127,14 +126,15 @@ public abstract class AbstractTextElement extends FormItemImpl implements TextEl
 	/**
 	 * @see org.olat.core.gui.components.form.flexible.elements.TextElement#getValue()
 	 */
+	@Override
 	public String getValue() {
-		Filter xssFilter = FilterFactory.getXSSFilterForTextField(value.length() + 1);
-		return getValue(xssFilter);
+		return value;
 	}
 
 	/**
 	 * @see org.olat.core.gui.components.form.flexible.elements.TextElement#getValue(org.olat.core.util.filter.Filter)
 	 */
+	@Override
 	public String getValue(Filter filter) {
 		return filter.filter(value);
 	}
diff --git a/src/main/java/org/olat/user/AbstractUserPropertyHandler.java b/src/main/java/org/olat/user/AbstractUserPropertyHandler.java
index 87e55026b2a0209556230a47145fa0c47eff1739..f5de71af0a649360aa3bbe51f93c73a1cfc8d310 100644
--- a/src/main/java/org/olat/user/AbstractUserPropertyHandler.java
+++ b/src/main/java/org/olat/user/AbstractUserPropertyHandler.java
@@ -120,12 +120,14 @@ public abstract class AbstractUserPropertyHandler implements UserPropertyHandler
 	 * @return The non-i18-ified raw value from the database
 	 */
 	protected String getInternalValue(User user) {
-		if (user != null) {
+		if (user instanceof UserImpl) {
 			String value = ((UserImpl)user).getProperties().get(name);
 			if("_".equals(value) && "oracle".equals(DBFactory.getInstance().getDbVendor())) {
 				value = null;
 			}
 			return value;
+		} else if (user instanceof User) {
+			return user.getProperty(name, null);
 		}
 		return null;
 	}
@@ -134,7 +136,7 @@ public abstract class AbstractUserPropertyHandler implements UserPropertyHandler
 	 * @param value The raw value in a 18n independent form
 	 */
 	protected void setInternalValue(User user, String value) {
-		if (user != null) {
+		if (user instanceof UserImpl) {
 			// remove fields with null or empty value from o_userfield table (hibernate)
 			// sparse data storage
 			if (value == null || value.length() == 0) {
@@ -147,6 +149,8 @@ public abstract class AbstractUserPropertyHandler implements UserPropertyHandler
 			} else {
 				((UserImpl)user).getProperties().put(name, value);
 			}
+		} else if (user instanceof UserImpl) {
+			user.setProperty(name, value);
 		}
 	}