Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDao.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDao.java	(revision 5529c6c320928095f6e2d6fe0a0e4e98a433a919)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDao.java	(revision b4c83b394342c24ffd29e6cb647b680981627b8a)
@@ -27,4 +27,5 @@
 import info.ajanovski.eprms.model.entities.CourseProject;
 import info.ajanovski.eprms.model.entities.Project;
+import info.ajanovski.eprms.model.entities.TeamMember;
 
 public interface ProjectDao {
@@ -40,3 +41,5 @@
 	public List<Project> getProjectByPerson(Long personId);
 
+	public List<TeamMember> getTeamMembershipOfPerson(Long personId);
+
 }
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDaoImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDaoImpl.java	(revision 5529c6c320928095f6e2d6fe0a0e4e98a433a919)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDaoImpl.java	(revision b4c83b394342c24ffd29e6cb647b680981627b8a)
@@ -31,4 +31,5 @@
 import info.ajanovski.eprms.model.entities.CourseProject;
 import info.ajanovski.eprms.model.entities.Project;
+import info.ajanovski.eprms.model.entities.TeamMember;
 
 public class ProjectDaoImpl implements ProjectDao {
@@ -119,3 +120,14 @@
 	}
 
+	@Override
+	public List<TeamMember> getTeamMembershipOfPerson(Long personId) {
+		return getEntityManager().createQuery("""
+				select tm
+				from Team t
+				join t.teamMembers tm
+				join tm.person p
+				where p.personId=:personId
+				""").setParameter("personId", personId).getResultList();
+	}
+
 }
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageTeams.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageTeams.java	(revision 5529c6c320928095f6e2d6fe0a0e4e98a433a919)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageTeams.java	(revision b4c83b394342c24ffd29e6cb647b680981627b8a)
@@ -21,11 +21,16 @@
 package info.ajanovski.eprms.tap.pages.admin;
 
+import java.util.Date;
 import java.util.List;
 
+import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.SessionState;
+import org.apache.tapestry5.hibernate.annotations.CommitAfter;
 import org.apache.tapestry5.ioc.annotations.Inject;
 
 import info.ajanovski.eprms.model.entities.Team;
+import info.ajanovski.eprms.model.entities.TeamMember;
+import info.ajanovski.eprms.model.util.ModelConstants;
 import info.ajanovski.eprms.tap.annotations.AdministratorPage;
 import info.ajanovski.eprms.tap.annotations.InstructorPage;
@@ -44,5 +49,43 @@
 
 	public List<Team> getTeams() {
-		return (List<Team>) genericService.getAll(Team.class);
+		List<Team> lista = (List<Team>) genericService.getAll(Team.class);
+		if (approvalOnly != null && approvalOnly) {
+			return lista.stream()
+					.filter(p -> p.getStatus() != null && p.getStatus().equals(ModelConstants.TeamStatusProposed))
+					.toList();
+		} else {
+			return lista;
+		}
 	}
+
+	@Property
+	private Team team;
+
+	@Property
+	private TeamMember teamMember;
+
+	@Persist
+	@Property
+	private Boolean approvalOnly;
+
+	void onActionFromToggleApprovalOnly() {
+		if (approvalOnly == null) {
+			approvalOnly = false;
+		} else {
+			approvalOnly = !approvalOnly;
+		}
+	}
+
+	@CommitAfter
+	void onActionFromApproveTeam(Team t) {
+		t.setStatus(ModelConstants.TeamStatusAccepted);
+		t.setOpenForNewMembers(false);
+		t.setStatusDate(new Date());
+		for (TeamMember tm : t.getTeamMembers()) {
+			tm.setStatus(ModelConstants.TeamMemberStatusAccepted);
+			genericService.saveOrUpdate(tm);
+		}
+		genericService.saveOrUpdate(t);
+	}
+
 }
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/user/MyProjects.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/user/MyProjects.java	(revision b4c83b394342c24ffd29e6cb647b680981627b8a)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/user/MyProjects.java	(revision b4c83b394342c24ffd29e6cb647b680981627b8a)
@@ -0,0 +1,407 @@
+package info.ajanovski.eprms.tap.pages.user;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+
+import org.apache.tapestry5.SelectModel;
+import org.apache.tapestry5.annotations.Import;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.SessionState;
+import org.apache.tapestry5.corelib.components.Zone;
+import org.apache.tapestry5.hibernate.annotations.CommitAfter;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.services.SelectModelFactory;
+import org.apache.tapestry5.services.ajax.AjaxResponseRenderer;
+import org.slf4j.Logger;
+
+import info.ajanovski.eprms.model.entities.Activity;
+import info.ajanovski.eprms.model.entities.Course;
+import info.ajanovski.eprms.model.entities.CourseProject;
+import info.ajanovski.eprms.model.entities.Person;
+import info.ajanovski.eprms.model.entities.Project;
+import info.ajanovski.eprms.model.entities.Responsibility;
+import info.ajanovski.eprms.model.entities.Team;
+import info.ajanovski.eprms.model.entities.TeamMember;
+import info.ajanovski.eprms.model.util.CourseComparator;
+import info.ajanovski.eprms.model.util.ModelConstants;
+import info.ajanovski.eprms.tap.annotations.AdministratorPage;
+import info.ajanovski.eprms.tap.annotations.InstructorPage;
+import info.ajanovski.eprms.tap.annotations.StudentPage;
+import info.ajanovski.eprms.tap.services.GenericService;
+import info.ajanovski.eprms.tap.services.PersonManager;
+import info.ajanovski.eprms.tap.services.ProjectManager;
+import info.ajanovski.eprms.tap.util.UserInfo;
+
+@StudentPage
+@InstructorPage
+@AdministratorPage
+@Import(module = { "bootstrap/modal", "bootstrap/collapse", "zoneUpdateEffect" })
+public class MyProjects {
+	@SessionState
+	@Property
+	private UserInfo userInfo;
+
+	@Inject
+	private Logger logger;
+
+	@Inject
+	private Request request;
+
+	@Inject
+	private AjaxResponseRenderer ajaxResponseRenderer;
+
+	@Inject
+	private SelectModelFactory selectModelFactory;
+
+	@InjectComponent
+	private Zone zNPModal;
+
+	@InjectComponent
+	private Zone zNTModal;
+
+	@InjectComponent
+	private Zone zJNTModal;
+
+	@InjectComponent
+	private Zone zJTModal;
+
+	@Inject
+	private ProjectManager projectManager;
+
+	@Inject
+	private GenericService genericService;
+
+	public List<Project> getMyProjects() {
+		return projectManager.getProjectByPerson(userInfo.getPersonId());
+	}
+
+	@Property
+	private Project project;
+
+	@Property
+	private Activity activity;
+
+	@Property
+	@Persist
+	private Course selectedCourse;
+
+	private Boolean cancelForm = false;
+
+	@Property
+	@Persist
+	private Project newProject;
+
+	@Property
+	@Persist
+	private Team teamToEdit;
+
+	@Property
+	@Persist
+	private Boolean teamNew;
+
+	@Property
+	private TeamMember myTeamMember;
+
+	@Property
+	private TeamMember teamMember;
+
+	@Property
+	@Persist
+	private Boolean chooseATeam;
+
+	@Persist
+	@Property
+	private Team selectedTeam;
+
+	@Property
+	@Persist
+	private Team addToTeam;
+
+	@Property
+	@Persist
+	private String newMember;
+
+	public void setupRender() {
+		if (teamNew == null) {
+			if (teamToEdit != null) {
+				teamToEdit = genericService.getByPK(Team.class, teamToEdit.getTeamId());
+			}
+		}
+	}
+
+	public SelectModel getAllCourses() {
+		CourseComparator cc = new CourseComparator();
+		List<Course> lista = (List<Course>) genericService.getAll(Course.class);
+		Collections.sort(lista, cc);
+		return selectModelFactory.create(lista, "title");
+	}
+
+	public List<TeamMember> getMyMemberTeams() {
+		return projectManager.getTeamMembershipOfPerson(userInfo.getPersonId());
+	}
+
+	public List<Team> getMyTeams() {
+		return projectManager.getTeamMembershipOfPerson(userInfo.getPersonId()).stream().map(TeamMember::getTeam)
+				.toList();
+	}
+
+	public SelectModel getMyTeamsModel() {
+		List<Team> lista = getMyTeams();
+		return selectModelFactory.create(lista, "name");
+	}
+
+	public Person getMyself() {
+		return genericService.getByPK(Person.class, userInfo.getPersonId());
+	}
+
+	public void onActionFromProposeProject() {
+		newProject = new Project();
+		newProject.setStatus(ModelConstants.ProjectStatusProposed);
+		newProject.setStartDate(new Date());
+	}
+
+	public void onActionFromEditProject(Project p) {
+		if (p.getResponsibilities() != null && p.getResponsibilities().size() > 0) {
+			selectedTeam = p.getResponsibilities().get(0).getTeam();
+		}
+		if (p.getCourseProjects() != null && p.getCourseProjects().size() > 0) {
+			selectedCourse = p.getCourseProjects().get(0).getCourse();
+		}
+		newProject = p;
+	}
+
+	void onCancelNewProject() {
+		newProject = null;
+		selectedTeam = null;
+		selectedCourse = null;
+	}
+
+	public void onSuccessFromFrmProposeProject() {
+		newProject = null;
+		selectedTeam = null;
+		selectedCourse = null;
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zNPModal);
+		}
+	}
+
+	@CommitAfter
+	public void onValidateFromFrmProposeProject() {
+		genericService.saveOrUpdate(newProject);
+		if (selectedTeam != null) {
+			if (!(newProject.getResponsibilities().stream()
+					.anyMatch(p -> p.getTeam().getTeamId() == selectedTeam.getTeamId()))) {
+				Responsibility r = new Responsibility();
+				r.setProject(newProject);
+				r.setTeam(selectedTeam);
+				List<Responsibility> listr = new ArrayList<Responsibility>();
+				listr.add(r);
+				newProject.setResponsibilities(listr);
+				genericService.saveOrUpdate(r);
+			}
+		}
+		if (selectedCourse != null) {
+			if (!(newProject.getCourseProjects().stream()
+					.anyMatch(p -> p.getCourse().getCourseId() == selectedCourse.getCourseId()))) {
+				CourseProject cp = new CourseProject();
+				cp.setProject(newProject);
+				cp.setCourse(selectedCourse);
+				List<CourseProject> listcp = new ArrayList<CourseProject>();
+				listcp.add(cp);
+				newProject.setCourseProjects(listcp);
+				genericService.saveOrUpdate(cp);
+			}
+		}
+		genericService.saveOrUpdate(newProject);
+	}
+
+	public void onActionFromProposeTeam() {
+		teamNew = true;
+		teamToEdit = new Team();
+		teamToEdit.setCreatedDate(new Date());
+		teamToEdit.setStatusDate(new Date());
+		teamToEdit.setStatus(ModelConstants.TeamStatusProposed);
+	}
+
+	void onCancelNewTeam() {
+		teamToEdit = null;
+	}
+
+	public void onSuccessFromFrmProposeTeam() {
+		teamToEdit = null;
+		teamNew = null;
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zNTModal);
+		}
+	}
+
+	@CommitAfter
+	public void onValidateFromFrmProposeTeam() {
+		genericService.saveOrUpdate(teamToEdit);
+		if (!(teamToEdit.getTeamMembers().stream()
+				.anyMatch(p -> p.getPerson().getPersonId() == getMyself().getPersonId()))) {
+			TeamMember tm = new TeamMember();
+			tm.setPerson(getMyself());
+			tm.setPositionNumber(1);
+			tm.setRole(ModelConstants.TeamMemberRoleCoordinator);
+			tm.setTeam(teamToEdit);
+			tm.setStatus(ModelConstants.TeamMemberStatusAccepted);
+			tm.setCreatedDate(new Date());
+			tm.setStatusDate(new Date());
+			genericService.saveOrUpdate(tm);
+		}
+	}
+
+	@CommitAfter
+	void onActionFromLeaveTeam(TeamMember tm) {
+		Team t = tm.getTeam();
+		t.getTeamMembers().remove(tm);
+		genericService.delete(tm);
+		if (t.getTeamMembers().size() == 0) {
+			for (Responsibility r : t.getResponsibilities()) {
+				Project p = r.getProject();
+				p.getResponsibilities().remove(r);
+				genericService.delete(r);
+				if (p.getResponsibilities().size() == 0) {
+					for (CourseProject cp : p.getCourseProjects()) {
+						genericService.delete(cp);
+					}
+					genericService.delete(p);
+				}
+			}
+			genericService.deleteByPK(Team.class, t.getTeamId());
+		}
+	}
+
+	void onActionFromChooseTeamToJoin() {
+		chooseATeam = true;
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zJTModal);
+		}
+	}
+
+	public SelectModel getJoinableTeams() {
+		List<Team> lista = (List<Team>) genericService.getAll(Team.class);
+		return selectModelFactory.create(lista.stream()
+				.filter(p -> p.getOpenForNewMembers() != null && p.getOpenForNewMembers() == true
+						&& !(getMyMemberTeams().stream().anyMatch(q -> q.getTeam().getTeamId() == p.getTeamId())))
+				.collect(Collectors.toList()), "name");
+	}
+
+	@CommitAfter
+	public void onValidateFromFrmJoinTeam() {
+		if (selectedTeam != null) {
+			TeamMember tm = new TeamMember();
+			tm.setPerson(getMyself());
+			tm.setRole(ModelConstants.TeamMemberRoleMember);
+			tm.setTeam(selectedTeam);
+			tm.setStatus(ModelConstants.TeamMemberStatusProposed);
+			tm.setCreatedDate(new Date());
+			tm.setStatusDate(new Date());
+			genericService.saveOrUpdate(tm);
+		}
+	}
+
+	public void onSuccessFromFrmJoinTeam() {
+		selectedTeam = null;
+		chooseATeam = null;
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zJTModal);
+		}
+	}
+
+	public void onCancelJoinTeam() {
+		selectedTeam = null;
+		chooseATeam = null;
+	}
+
+	public void onActionFromEditTeam(TeamMember tm) {
+		teamToEdit = tm.getTeam();
+	}
+
+	public boolean isCanApprove() {
+		if (myTeamMember.getTeam().getTeamMembers().stream()
+				.anyMatch(p -> p.getPerson().getPersonId() == getMyself().getPersonId() && p.getRole() != null
+						&& p.getRole().equals(ModelConstants.TeamMemberRoleCoordinator))) {
+			if (teamMember != null && !(teamMember.getStatus() != null
+					&& teamMember.getStatus().equals(ModelConstants.TeamMemberStatusAccepted))) {
+				return true;
+			} else {
+				if (teamMember == null) {
+					return true;
+				} else {
+					return false;
+				}
+			}
+		} else {
+			return false;
+		}
+	}
+
+	public void onActionFromAddMembers(TeamMember tm) {
+		newMember = new String("brindeks");
+		addToTeam = tm.getTeam();
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zJNTModal);
+		}
+	}
+
+	public void onCancelAddMembers() {
+		newMember = null;
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zJNTModal);
+		}
+	}
+
+	@Inject
+	private PersonManager personManager;
+
+	@CommitAfter
+	public void onValidateFromFrmAddMembers() {
+		if (newMember != null) {
+			Person p = personManager.getPersonByUsername(newMember);
+			if (p != null) {
+				TeamMember tm = new TeamMember();
+				tm.setPerson(p);
+				tm.setRole(ModelConstants.TeamMemberRoleMember);
+				tm.setTeam(addToTeam);
+				tm.setStatus(ModelConstants.TeamMemberStatusProposed);
+				tm.setCreatedDate(new Date());
+				tm.setStatusDate(new Date());
+				genericService.saveOrUpdate(tm);
+			}
+		}
+	}
+
+	public void onSuccessFromFrmAddMembers() {
+		newMember = null;
+		addToTeam = null;
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zJNTModal);
+		}
+	}
+
+	@CommitAfter
+	public void onActionFromApproveTeamMember(TeamMember tm) {
+		tm.setStatus(ModelConstants.TeamMemberStatusAccepted);
+	}
+
+	public boolean isProjectEditable() {
+		if (project != null) {
+			if (project.getStatus().equals(ModelConstants.ProjectStatusProposed)) {
+				return true;
+			} else {
+				return false;
+			}
+		} else {
+			return false;
+		}
+	}
+}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ProjectManager.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ProjectManager.java	(revision 5529c6c320928095f6e2d6fe0a0e4e98a433a919)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ProjectManager.java	(revision b4c83b394342c24ffd29e6cb647b680981627b8a)
@@ -27,4 +27,5 @@
 import info.ajanovski.eprms.model.entities.CourseProject;
 import info.ajanovski.eprms.model.entities.Project;
+import info.ajanovski.eprms.model.entities.TeamMember;
 import info.ajanovski.eprms.model.entities.WorkEvaluation;
 import info.ajanovski.eprms.model.entities.WorkReport;
@@ -43,5 +44,5 @@
 
 	public List<Project> getProjectByPerson(Long personId);
-	
+
 	public void cycleStatus(Project p);
 
@@ -50,3 +51,5 @@
 	public List<WorkReport> getWorkReportsForActivity(Activity activity);
 
+	public List<TeamMember> getTeamMembershipOfPerson(Long personId);
+
 }
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ProjectManagerImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ProjectManagerImpl.java	(revision 5529c6c320928095f6e2d6fe0a0e4e98a433a919)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ProjectManagerImpl.java	(revision b4c83b394342c24ffd29e6cb647b680981627b8a)
@@ -33,4 +33,5 @@
 import info.ajanovski.eprms.model.entities.CourseProject;
 import info.ajanovski.eprms.model.entities.Project;
+import info.ajanovski.eprms.model.entities.TeamMember;
 import info.ajanovski.eprms.model.entities.WorkEvaluation;
 import info.ajanovski.eprms.model.entities.WorkReport;
@@ -98,10 +99,11 @@
 			String s = p.getStatus();
 			int index = Arrays.asList(ModelConstants.AllProjectStatuses).indexOf(s);
+			index++;
 			if (index < 0) {
 				index = 0;
-			} else if (index > ModelConstants.AllProjectStatuses.length) {
+			} else if (index >= ModelConstants.AllProjectStatuses.length) {
 				index = 0;
 			} else {
-				index++;
+				index = index;
 			}
 			p.setStatus(Arrays.asList(ModelConstants.AllProjectStatuses).get(index));
@@ -132,3 +134,8 @@
 	}
 
+	@Override
+	public List<TeamMember> getTeamMembershipOfPerson(Long personId) {
+		return projectDao.getTeamMembershipOfPerson(personId);
+	}
+
 }
Index: eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/admin/ManageTeams.tml
===================================================================
--- eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/admin/ManageTeams.tml	(revision 5529c6c320928095f6e2d6fe0a0e4e98a433a919)
+++ eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/admin/ManageTeams.tml	(revision b4c83b394342c24ffd29e6cb647b680981627b8a)
@@ -5,6 +5,36 @@
 <h1>${message:admin/ManageTeams-pagelink}</h1>
 
-<table class="table table-sm" t:type="grid" t:source="teams"
-	t:exclude="teamId"></table>
+<div>
+	<a href="" class="btn btn-secondary" t:type="iconactionlink"
+		t:id="toggleApprovalOnly" t:path="toggle-left">Toggle</a>
+</div>
 
+<div t:type="if" t:test="approvalOnly">
+	<h2>Only Teams Wating For Approval</h2>
+	<p:else>
+		<h2>All Teams</h2>
+	</p:else>
+</div>
+
+<div class="card card-body bg-light mb-3" t:type="loop" t:source="teams"
+	t:value="team">
+	<h2>${team.name}
+		<div t:type="if" t:test="approvalOnly">
+			<a href="" class="btn btn-sm btn-primary" t:type="iconactionlink"
+				t:id="approveTeam" t:context="team" t:path="check">${message:approve-label}</a>
+		</div>
+	</h2>
+	<p>
+		<t:outputraw t:value="team.description" />
+	</p>
+	${team.statusDate} <br />${message:openForNewMembers-label}:
+	${team.openForNewMembers} - Max: ${team.maxMembers}
+
+	<table class="table table-sm " t:type="grid"
+		t:source="team.teamMembers" t:row="teamMember" t:add="name"
+		t:exclude="teamMemberId,createdDate,statusDate">
+		<p:nameCell>${teamMember.person.userName}  ${teamMember.person.firstName} ${teamMember.person.lastName}</p:nameCell>
+	</table>
+
+</div>
 </html>
Index: eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/user/MyProjects.tml
===================================================================
--- eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/user/MyProjects.tml	(revision b4c83b394342c24ffd29e6cb647b680981627b8a)
+++ eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/user/MyProjects.tml	(revision b4c83b394342c24ffd29e6cb647b680981627b8a)
@@ -0,0 +1,191 @@
+<html t:type="layout" title="${message:user/MyProjects-pagelink}"
+	xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"
+	xmlns:p="tapestry:parameter">
+
+<style>
+.bg-project:nth-child(even) {
+	background: #e0ffff;
+}
+
+.bg-project:nth-child(odd) {
+	background: #80ffff;
+}
+</style>
+
+<div t:type="zone" t:id="zJTModal" id="zJTModal">
+	<t:if t:test="chooseATeam">
+		<t:ModalBox t:id="JTModal">
+			<h3>${message:Join-label}${message:Team-label}</h3>
+			<form t:type="form" t:id="frmJoinTeam">
+				<select t:type="select" t:model="joinableTeams"
+					t:value="selectedTeam" />
+				<submit t:type="submit" t:value="OK" />
+				<a href="" t:type="eventlink" t:id="cancelJoinTeam">${message:cancel-label}</a>
+			</form>
+		</t:ModalBox>
+	</t:if>
+</div>
+
+<div t:type="zone" t:id="zJNTModal" id="zJNTModal">
+	<t:if t:test="newMember">
+		<t:ModalBox t:id="JNTModal">
+			<h3>${message:Join-label}${message:Team-label}</h3>
+			<form t:type="form" t:id="frmAddMembers">
+				<input t:type="textfield" t:value="newMember" />
+				<submit t:type="submit" t:value="OK" />
+				<a href="" t:type="eventlink" t:id="cancelAddMembers">${message:cancel-label}</a>
+			</form>
+		</t:ModalBox>
+	</t:if>
+</div>
+
+<div t:type="zone" t:id="zNPModal" id="zNPModal">
+	<t:if t:test="newProject">
+		<t:ModalBox t:id="NPModal">
+			<h3>${message:Project-label}</h3>
+			<form t:id="frmProposeProject" t:type="Form" t:value="OK">
+				<t:beaneditor t:object="newProject" t:add="course,team"
+					t:exclude="projectId,status,startDate,finishDate"
+					t:reorder="team,course,code,title,description">
+					<p:course>
+						<label t:type="label" t:for="selectCourse"></label>
+						<select t:id="selectCourse" t:type="select" t:model="allCourses"
+							t:value="selectedCourse" />
+					</p:course>
+					<p:team>
+						<label t:type="label" t:for="selectTeam"></label>
+						<select t:id="selectTeam" t:type="select" t:model="myTeamsModel"
+							t:value="selectedTeam" />
+					</p:team>
+					<p:description>
+						<div class="form-group">
+							<label t:type="label" t:for="projectDescription"></label>
+							<textarea t:id="projectDescription" t:type="textarea"
+								t:value="newProject.description" t:mixins="webeditor"
+								t:WebEditor.areaType="" />
+						</div>
+					</p:description>
+				</t:beaneditor>
+				<button t:type="submit" t:value="OK" />
+				<a href="" t:type="eventlink" t:id="cancelNewProject">${message:cancel-label}</a>
+			</form>
+		</t:ModalBox>
+	</t:if>
+</div>
+
+<div t:type="zone" t:id="zNTModal" id="zNTModal">
+	<t:if t:test="teamToEdit">
+		<t:ModalBox t:id="NTModal">
+			<h3>${message:Team-label}</h3>
+			<form t:id="frmProposeTeam" t:type="Form" t:value="OK">
+				<t:beaneditor t:object="teamToEdit"
+					t:exclude="teamId,status,statusDate,createdDate">
+					<p:description>
+						<div class="form-group">
+							<label t:type="label" t:for="teamDescription"></label>
+							<textarea t:id="teamDescription" t:type="textarea"
+								t:value="teamToEdit.description" t:mixins="webeditor"
+								t:WebEditor.areaType="" />
+						</div>
+					</p:description>
+				</t:beaneditor>
+				<button t:type="submit" t:value="OK" />
+				<a href="" t:type="eventlink" t:id="cancelNewTeam">${message:cancel-label}</a>
+			</form>
+		</t:ModalBox>
+	</t:if>
+</div>
+
+<div class="row">
+<div class="col-6">
+
+
+<h1>${message:user/MyTeams-pagelink}</h1>
+
+<p>
+	<a href="" t:id="ProposeTeam" t:type="iconactionlink"
+		class="btn btn-primary" t:path="plus-square">
+		${message:propose-label} ${message:team-label}</a> <a href=""
+		t:id="ChooseTeamToJoin" t:type="iconactionlink"
+		class="btn btn-primary" t:path="users"> ${message:join-label}
+		${message:team-label}</a>
+</p>
+
+
+<div t:type="loop" t:source="myMemberTeams" t:value="myTeamMember"
+	class="card bg-light mb-3">
+	<div class="card-header">
+		<div class="float-right">
+			<span t:type="if" t:test="canApprove"> <a href=""
+				t:type="iconactionlink" t:id="addMembers" t:context="myTeamMember"
+				t:path="edit" class="btn btn-sm btn-secondary">${message:add-label}
+					${message:teamMember-label}</a>
+			</span> <span t:type="if" t:test="canApprove"> <a href=""
+				t:type="iconactionlink" t:id="editTeam" t:context="myTeamMember"
+				t:path="edit" class="btn btn-sm btn-info">${message:edit-label}</a>
+			</span> <a href="" t:type="iconactionlink" t:id="leaveTeam"
+				t:context="myTeamMember" t:path="minus-square" t:mixins="Confirm"
+				class="btn btn-sm btn-danger">${message:leave-label}</a>
+		</div>
+		<h3>${myTeamMember.team.name}
+			<small class="text-muted">${message:status-label}:
+				${myTeamMember.team.status}</small>
+		</h3>
+	</div>
+	<div class="card-body">
+		<p class="card-text">
+			<t:outputRaw t:value="myTeamMember.team.description" />
+		</p>
+
+		<table class="table table-sm table-hover " t:type="grid"
+			t:source="myTeamMember.team.teamMembers" t:row="teamMember"
+			t:reorder="positionNumber,name,role,status" t:add="name,actions"
+			t:exclude="teamMemberId,createdDate,statusDate">
+			<p:nameCell>${teamMember.person.userName}</p:nameCell>
+			<p:actionsCell>
+				<div t:type="if" t:test="canApprove">
+					<a href="" class="btn btn-sm btn-primary" t:type="iconactionlink"
+						t:path="check" t:id="approveTeamMember" t:context="teamMember">${message:approve-label}</a>
+				</div>
+			</p:actionsCell>
+		</table>
+	</div>
+
+</div>
+
+</div>
+<div class="col-6">
+
+<h1>${message:user/MyProjects-pagelink}</h1>
+
+<p>
+	<t:if t:test="myTeams">
+		<a href="" t:id="ProposeProject" t:type="iconactionlink"
+			class="btn btn-primary" t:path="plus-square">
+			${message:propose-label} ${message:project-label}</a>
+	</t:if>
+</p>
+
+
+<div class="card mb-4 bg-project" t:type="loop" t:source="myProjects"
+	t:value="project">
+	<div class="card-header">
+		<div class="float-right">
+			<t:if t:test="projectEditable">
+				<a class="btn btn-sm btn-info" href="" t:type="iconactionlink"
+					t:path="edit" t:id="editProject" t:context="project">${message:edit-label}
+				</a>
+			</t:if>
+		</div>
+<p class="text-muted float-right">${message:status-label}:
+                                ${project.status}<br/>Code: ${project.code}</p>
+
+		<h3>${project.title}</h3>
+	</div>
+	<div class="card-body">
+		<t:outputraw t:value="project.description" />
+	</div>
+</div>
+</div>
+</div>
+</html>
