diff --git a/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/ProjectListController.java b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/ProjectListController.java
index c0f861b9b39f1d904459104ace67c600fc0d3dff..9efe0e7c586f7b34cec6cb3cdbbd0ea79e4508bd 100644
--- a/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/ProjectListController.java
+++ b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/ProjectListController.java
@@ -25,8 +25,8 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory;
 import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.Windows;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.link.Link;
 import org.olat.core.gui.components.link.LinkFactory;
@@ -43,9 +43,14 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
-import org.olat.core.gui.control.creator.ControllerCreator;
+import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
+import org.olat.core.gui.control.generic.dtabs.DTab;
+import org.olat.core.gui.control.generic.dtabs.DTabs;
+import org.olat.core.gui.render.Renderer;
+import org.olat.core.gui.render.StringOutput;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.UserConstants;
 import org.olat.core.id.context.BusinessControl;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.util.coordinate.CoordinatorManager;
@@ -59,6 +64,8 @@ import org.olat.course.properties.CoursePropertyManager;
 import org.olat.course.run.userview.NodeEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.group.BusinessGroup;
+import org.olat.user.HomePageConfigManager;
+import org.olat.user.HomePageConfigManagerImpl;
 import org.olat.user.UserInfoMainController;
 
 /**
@@ -69,6 +76,7 @@ import org.olat.user.UserInfoMainController;
 
 public class ProjectListController extends BasicController implements GenericEventListener {
 	
+	private static final String OPEN_IDENTITY_CMD = "openID";
 	// List commands
 	private static final String TABLE_ACTION_SHOW_DETAIL     = "cmd.show.detail";
 	private static final String TABLE_ACTION_ACCOUNT_MANAGER = "cmd.account.manager";
@@ -94,6 +102,7 @@ public class ProjectListController extends BasicController implements GenericEve
 	private int numberOfEventInTable = 0;
 	private int nbrSelectedProjects;
 	private boolean isParticipantInAnyProject;
+	private CloseableCalloutWindowController calloutCtrl;
 
 
 	/**
@@ -207,6 +216,13 @@ public class ProjectListController extends BasicController implements GenericEve
 			projectController = new ProjectController(ureq, this.getWindowControl(), userCourseEnv, nodeEvaluation, project, true, moduleConfig);
 			projectController.addControllerListener(this);
 			mainPanel.pushContent(projectController.getInitialComponent());
+		} else if (event.getCommand().equals(OPEN_IDENTITY_CMD)){
+			Link link = (Link) source;
+			if (calloutCtrl!=null) {
+				calloutCtrl.deactivate();
+				calloutCtrl = null;
+			}
+			openUserInPopup(ureq, (Identity) link.getUserObject());
 		}
 	}
 
@@ -244,7 +260,7 @@ public class ProjectListController extends BasicController implements GenericEve
 		if ( te.getActionId().equals(TABLE_ACTION_SHOW_DETAIL)) {
 			activateProjectController(currentProject, urequest);
 		} else if ( te.getActionId().equals(TABLE_ACTION_ACCOUNT_MANAGER)) {
-			activateUserController(currentProject, urequest);
+			activateUserController(currentProject, urequest, te);
 		} else if ( te.getActionId().equals(TABLE_ACTION_SELECT)) {
 			handleEnrollAction(urequest, currentProject);
 		} else if ( te.getActionId().equals(TABLE_ACTION_CANCEL_SELECT)) {
@@ -298,22 +314,55 @@ public class ProjectListController extends BasicController implements GenericEve
 	}
 
 
-	private void activateUserController(final Project projectAt, UserRequest urequest) {
+	private void activateUserController(final Project projectAt, UserRequest urequest, TableEvent tableEvent) {
 		if (projectAt.getProjectLeaders().isEmpty()) {
 			this.showInfo("show.info.no.project.leader");
-		} else if (projectAt.getProjectLeaders().size() > 0) {
-			// Open visiting card in new popup
-			ControllerCreator ctrlCreator = new ControllerCreator() {
-				public Controller createController(UserRequest lureq, WindowControl lwControl) {
-					return new UserInfoMainController(lureq, lwControl, projectAt.getProjectLeaders().get(0));
-				}
-			};
-			// wrap the content controller into a full header layout
-			ControllerCreator layoutCtrlr = BaseFullWebappPopupLayoutFactory.createAuthMinimalPopupLayout(urequest, ctrlCreator);
-			this.openInNewBrowserWindow(urequest, layoutCtrlr);
+		} else if (projectAt.getProjectLeaders().size() > 1) {
+			VelocityContainer identityVC = createVelocityContainer("identityCallout");
+			List<Identity> allIdents = projectAt.getProjectLeaders();
+			ArrayList<Link> identLinks = new ArrayList<Link>(allIdents.size());
+			for (Identity identity : allIdents) {
+				String last = identity.getUser().getProperty(UserConstants.LASTNAME, getLocale());
+				String first = identity.getUser().getProperty(UserConstants.FIRSTNAME, getLocale()); 
+				String linkName = last + " " + first;	
+				
+				Link idLink = LinkFactory.createCustomLink(linkName, OPEN_IDENTITY_CMD, linkName, Link.NONTRANSLATED, identityVC, this);
+				idLink.setUserObject(identity);
+				identLinks.add(idLink);
+			}
+			identityVC.contextPut("identLinks", identLinks);			
+			
+			int row = tableEvent.getRowId();
+			String targetDomID = ProjectManagerColumnRenderer.PROJECTMANAGER_COLUMN_ROW_IDENT + row;
+			String title = translate("projectlist.callout.title", projectAt.getTitle());
+			
+			calloutCtrl = new CloseableCalloutWindowController(urequest, getWindowControl(), identityVC, targetDomID, title, true, null);
+			calloutCtrl.activate();
+			listenTo(calloutCtrl);	
+		} else if (projectAt.getProjectLeaders().size() == 1) {
+			// no callout, if its only one user
+			Identity leader = projectAt.getProjectLeaders().get(0);
+			openUserInPopup(urequest, leader);
 		}
 	}
 
+	private void openUserInPopup(UserRequest ureq, final Identity ident){
+		// did not work to open as popup based on ureq! -> open as tab in same window
+			HomePageConfigManager hpcm = HomePageConfigManagerImpl.getInstance();
+			OLATResourceable ores = hpcm.loadConfigFor(ident.getName());
+			DTabs dts = (DTabs) Windows.getWindows(ureq).getWindow(ureq).getAttribute("DTabs");
+			DTab dt = dts.getDTab(ores);
+			if (dt == null) {
+				// does not yet exist -> create and add
+				dt = dts.createDTab(ores, ident.getName());
+				if (dt == null) return;
+				UserInfoMainController uimc = new UserInfoMainController(ureq, dt.getWindowControl(), ident);
+				dt.setController(uimc);
+				dts.addDTab(dt);
+			}
+			dts.activate(ureq, dt, null);
+	}
+	
 
 	private void activateProjectController(Project project, UserRequest urequest) {
 		removeAsListenerAndDispose(projectController);
@@ -344,8 +393,27 @@ public class ProjectListController extends BasicController implements GenericEve
 		
 		int dataColumn = 0;
 		tableController.addColumnDescriptor(new DefaultColumnDescriptor("projectlist.tableheader.title", dataColumn++, TABLE_ACTION_SHOW_DETAIL, ureq.getLocale()));
-		DefaultColumnDescriptor projectManagerDescriptor = new DefaultColumnDescriptor("projectlist.tableheader.account.manager", dataColumn++, TABLE_ACTION_ACCOUNT_MANAGER, ureq.getLocale());
-		projectManagerDescriptor.setIsPopUpWindowAction( true, "height=600, width=900, location=no, menubar=no, resizable=yes, status=no, scrollbars=yes, toolbar=no");
+		
+		CustomRenderColumnDescriptor projectManagerDescriptor = new CustomRenderColumnDescriptor("projectlist.tableheader.account.manager", dataColumn++, TABLE_ACTION_ACCOUNT_MANAGER, ureq.getLocale(), ColumnDescriptor.ALIGNMENT_LEFT, new ProjectManagerColumnRenderer()){
+
+			/**
+			 * @see org.olat.core.gui.components.table.DefaultColumnDescriptor#compareTo(int, int)
+			 */
+			@Override
+			public int compareTo(int rowa, int rowb) {
+				return super.compareTo(rowa, rowb);
+			}
+
+			/**
+			 * @see org.olat.core.gui.components.table.CustomRenderColumnDescriptor#renderValue(org.olat.core.gui.render.StringOutput, int, org.olat.core.gui.render.Renderer)
+			 */
+			@Override
+			public void renderValue(StringOutput sb, int row, Renderer renderer) {
+					Object val = getModelData(row);
+					String rowSt = Integer.toString(row); // to get info about row in Renderer!
+					getCustomCellRenderer().render(sb, renderer, val, getLocale(), getAlignment(), rowSt);
+			}	
+		};
 		tableController.addColumnDescriptor(projectManagerDescriptor);
 		// Custom-Fields
 		List<CustomField> customFieldList = moduleConfig.getCustomFields();
diff --git a/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/ProjectListTableModel.java b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/ProjectListTableModel.java
index bc5480d3792fc6370bfca3c34e3ba08fe376496f..8ce59f49834e0dfd2a22d1b773886a9b5ae4806c 100644
--- a/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/ProjectListTableModel.java
+++ b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/ProjectListTableModel.java
@@ -29,7 +29,6 @@ import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.core.gui.components.table.DefaultTableDataModel;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
-import org.olat.core.id.UserConstants;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.course.nodes.projectbroker.datamodel.CustomField;
@@ -106,17 +105,12 @@ public class ProjectListTableModel extends DefaultTableDataModel {
 			if (identities.isEmpty()) {
 				return "-";
 			} else {
-				// Get last added identity
-				Object[] identityAndDate  = identities.get(identities.size() - 1);
-				String last = ((Identity)identityAndDate[0]).getUser().getProperty(UserConstants.LASTNAME, getLocale());
-				String first= ((Identity)identityAndDate[0]).getUser().getProperty(UserConstants.FIRSTNAME, getLocale()); 
-				String showName = last + " " + first;
-				if (identities.size() == 1) {
-					return showName;
-				} else {
-					// more than one projectleader => show ...
-					return showName + ", ...";
+				// return all proj-leaders
+				ArrayList<Identity> allIdents = new ArrayList<Identity>();
+				for (Object[] idobj : identities) {
+					allIdents.add((Identity)idobj[0]);
 				}
+				return allIdents;
 			}
 		} else if (col == (numberOfCustomFieldInTable + numberOfEventInTable + 2)) {
 			return ProjectBrokerManagerFactory.getProjectBrokerManager().getStateFor(project,identity,moduleConfig);
diff --git a/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/ProjectManagerColumnRenderer.java b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/ProjectManagerColumnRenderer.java
new file mode 100644
index 0000000000000000000000000000000000000000..9845c763a7789fe06f6d3ef3bb300d69a27d08a1
--- /dev/null
+++ b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/ProjectManagerColumnRenderer.java
@@ -0,0 +1,74 @@
+/**
+* OLAT - Online Learning and Training<br>
+* http://www.olat.org
+* <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
+* <p>
+* http://www.apache.org/licenses/LICENSE-2.0
+* <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>
+* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
+* University of Zurich, Switzerland.
+* <p>
+*/
+package org.olat.course.nodes.projectbroker;
+
+import java.util.ArrayList;
+import java.util.Locale;
+
+import org.olat.core.gui.components.table.CustomCellRenderer;
+import org.olat.core.gui.render.Renderer;
+import org.olat.core.gui.render.StringOutput;
+import org.olat.core.id.Identity;
+import org.olat.core.id.UserConstants;
+
+/**
+ * Description:<br>
+ * wrapper for multiple identities in one cell.
+ * needed to code the row-id into the cell for later callout-opening.
+ * 
+ * <P>
+ * Initial Date:  01.04.2011 <br>
+ * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
+ */
+public class ProjectManagerColumnRenderer implements CustomCellRenderer {
+
+	public static final String PROJECTMANAGER_COLUMN_ROW_IDENT = "pmrow";
+	
+	/**
+	 * @see org.olat.core.gui.components.table.CustomCellRenderer#render(org.olat.core.gui.render.StringOutput, org.olat.core.gui.render.Renderer, java.lang.Object, java.util.Locale, int, java.lang.String)
+	 */
+	@Override
+	public void render(StringOutput sb, Renderer renderer, Object val, Locale locale, int alignment, String action) {			
+		if (val instanceof ArrayList){
+			@SuppressWarnings("unchecked")
+			ArrayList<Identity> allIdents = (ArrayList<Identity>) val;
+			Integer row = Integer.parseInt(action);
+			StringBuilder buf = new StringBuilder();
+			
+			if (renderer!=null) {
+				// if no renderer is set, then we assume it's a table export - in which case we don't want the htmls (<b>)
+				sb.append("<span class=\"projmgrrowcontent\"");
+				sb.append("id=\"" + PROJECTMANAGER_COLUMN_ROW_IDENT + row + "\">");
+			}
+			
+			for (Identity identity : allIdents) {
+				String last = identity.getUser().getProperty(UserConstants.LASTNAME, locale);
+				String first= identity.getUser().getProperty(UserConstants.FIRSTNAME, locale); 
+				buf.append(last).append(" ").append(first).append(", ");				
+			}
+			sb.append(buf.substring(0, buf.length() - 2));
+			
+			if (renderer!=null) {
+				sb.append("</span>");
+			}			
+		}
+	}
+}
diff --git a/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/_content/identityCallout.html b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/_content/identityCallout.html
new file mode 100644
index 0000000000000000000000000000000000000000..eca0461f7fbea7a840f0b61811fd495404898a26
--- /dev/null
+++ b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/_content/identityCallout.html
@@ -0,0 +1,6 @@
+$r.translate("projectlist.callout.intro")
+<ul>
+#foreach($identityLink in $identLinks)
+	<li>$r.render($identityLink.componentName)</li>
+#end
+</ul>
\ No newline at end of file
diff --git a/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_de.properties b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_de.properties
index 0b4f4f06c7f326a303315e5afa7027fdc5a98d84..9a0c510c6b67d7a07f0b5becfec97fad5181a107 100644
--- a/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_de.properties
+++ b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_de.properties
@@ -32,6 +32,9 @@ tab.project.folder=Ordner
 tab.project.members=Teilnehmerverwaltung
 tab.project.details.inline=Inline Edit Beschreibung
 
+projectlist.callout.title=$:projectlist.tableheader.account.manager für {0}
+projectlist.callout.intro=Klicken Sie auf den Benutzer für weitere Informationen zu diesem.
+
 detailsform.title.label=Titel
 detailsform.projectleaders.label=Verantwortlich
 detailsform.description.label=Beschreibung