Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/components/Layout.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/components/Layout.java	(revision 73a53991e9beb4d73f19176f20bcc4107e3f6b22)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/components/Layout.java	(revision cb2784dcb34e2e245e81adf931dbb80803dcfca8)
@@ -81,14 +81,12 @@
 
 	public String[] getStudentPageNames() {
-		return new String[] { "user/MyProfile", "user/MyProjectReports", "user/MyDatabases", "user/MyRepositories",
+		return new String[] { "user/MyProjects", "user/MyProjectReports", "user/MyDatabases", "user/MyRepositories",
 				"user/MyRepositoryAuth" };
 	}
 
 	public String[] getProjectManagerPageNames() {
-		if (userInfo.isAdministrator()) {
+		if (userInfo.isAdministrator() || userInfo.isInstructor()) {
 			return new String[] { "projectmanager/ProjectOverviewTickets", "projectmanager/ProjectOverviewTimeline",
-					"admin/ManageCourses", "admin/ManageProjects", "admin/ProjectAutomation",
-					"admin/OverallCourseReport", "admin/ManageActivityTypes", "admin/ManageTeams",
-					"admin/ManageDatabases", "admin/ManageRepositories", };
+					"admin/ManageCourses", "admin/ManageProjects", "admin/OverallCourseReport" };
 		} else {
 			return null;
@@ -98,5 +96,7 @@
 	public String[] getAdminPageNames() {
 		if (userInfo.isAdministrator()) {
-			return new String[] { "admin/ManagePersons", "admin/Translations", "admin/SystemParameters" };
+			return new String[] { "admin/ManageActivityTypes", "admin/ManagePersons", "admin/ManageTeams",
+					"admin/ProjectAutomation", "admin/Translations", "admin/SystemParameters", "admin/ManageDatabases",
+					"admin/ManageRepositories" };
 		} else {
 			return null;
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDao.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDao.java	(revision 73a53991e9beb4d73f19176f20bcc4107e3f6b22)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDao.java	(revision cb2784dcb34e2e245e81adf931dbb80803dcfca8)
@@ -43,3 +43,5 @@
 	public List<Role> getRolesForPerson(long personId);
 
+	public List<Person> getAllPersonsFromRole(String roleName);
+
 }
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDaoImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDaoImpl.java	(revision 73a53991e9beb4d73f19176f20bcc4107e3f6b22)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDaoImpl.java	(revision cb2784dcb34e2e245e81adf931dbb80803dcfca8)
@@ -34,4 +34,5 @@
 import info.ajanovski.eprms.model.entities.PersonRole;
 import info.ajanovski.eprms.model.entities.Role;
+import info.ajanovski.eprms.model.util.ModelConstants;
 import info.ajanovski.eprms.tap.util.UsefulMethods;
 
@@ -96,3 +97,9 @@
 	}
 
+	@Override
+	public List<Person> getAllPersonsFromRole(String roleName) {
+		return getEntityManager().createQuery("select pr.person from PersonRole pr where pr.role.name=:roleName")
+				.setParameter("roleName", roleName).getResultList();
+	}
+
 }
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageCourses.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageCourses.java	(revision 73a53991e9beb4d73f19176f20bcc4107e3f6b22)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageCourses.java	(revision cb2784dcb34e2e245e81adf931dbb80803dcfca8)
@@ -19,12 +19,18 @@
 import info.ajanovski.eprms.model.entities.Course;
 import info.ajanovski.eprms.model.entities.CourseActivityType;
+import info.ajanovski.eprms.model.entities.CourseTeacher;
+import info.ajanovski.eprms.model.entities.Person;
 import info.ajanovski.eprms.model.util.ActivityTypeHierarchicalComparator;
 import info.ajanovski.eprms.model.util.CourseActivityTypeHierarchicalComparator;
 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.services.GenericService;
+import info.ajanovski.eprms.tap.services.PersonManager;
 import info.ajanovski.eprms.tap.util.UserInfo;
 
 @AdministratorPage
+@InstructorPage
 public class ManageCourses {
 	@SessionState
@@ -43,7 +49,13 @@
 	@Property
 	private Course course;
+
 	@Property
 	@Persist
 	private Course addActivityTypeForCourse;
+
+	@Property
+	@Persist
+	private Course addTeacherForCourse;
+
 	@Property
 	private ActivityType activityType;
@@ -63,4 +75,10 @@
 	public List<Course> getAllCourses() {
 		List<Course> lista = (List<Course>) genericService.getAll(Course.class);
+		if (userInfo.isInstructor() && !userInfo.isAdministrator()) {
+			lista = lista.stream()
+					.filter(p -> p.getCourseTeachers().stream()
+							.anyMatch(q -> q.getTeacher().getPersonId() == userInfo.getPersonId()))
+					.collect(Collectors.toList());
+		}
 		CourseComparator cc = new CourseComparator();
 		Collections.sort(lista, cc);
@@ -90,7 +108,16 @@
 	}
 
+	void onActionFromAddCourseTeacher(Course c) {
+		addTeacherForCourse = c;
+	}
+
 	@CommitAfter
 	void onActionFromDeleteCourseActivityType(CourseActivityType cat) {
 		genericService.delete(cat);
+	}
+
+	@CommitAfter
+	void onActionFromDeleteCourseTeacher(CourseTeacher ct) {
+		genericService.delete(ct);
 	}
 
@@ -185,4 +212,34 @@
 		editCourse = null;
 	}
-	
+
+	@Inject
+	private PersonManager personManager;
+
+	public SelectModel getTeacherModel() {
+		return selectModelFactory.create(personManager.getAllPersonsFromRole(ModelConstants.RoleInstructor),
+				"userName");
+	}
+
+	@Property
+	private Person selectTeacher;
+
+	public List<CourseTeacher> getCourseTeachers() {
+		return course.getCourseTeachers();
+	}
+
+	@Property
+	private CourseTeacher courseTeacher;
+
+	void onCancelSelectTeacher() {
+		addTeacherForCourse = null;
+	}
+
+	@CommitAfter
+	public void onSuccessFromFrmAddTeacher() {
+		CourseTeacher ct = new CourseTeacher();
+		ct.setCourse(addTeacherForCourse);
+		ct.setTeacher(selectTeacher);
+		genericService.save(ct);
+		addTeacherForCourse = null;
+	}
 }
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageProjects.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageProjects.java	(revision 73a53991e9beb4d73f19176f20bcc4107e3f6b22)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageProjects.java	(revision cb2784dcb34e2e245e81adf931dbb80803dcfca8)
@@ -42,4 +42,5 @@
 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.Database;
 import info.ajanovski.eprms.model.entities.Person;
@@ -121,8 +122,4 @@
 	@Persist
 	@Property
-	private Course newCourse;
-
-	@Persist
-	@Property
 	private Project newProject;
 
@@ -161,5 +158,5 @@
 		List<Project> list = (List<Project>) projectManager.getAllProjectsOrderByTitle();
 		if (selectedCourse == null) {
-			return list;
+			return new ArrayList<Project>();
 		} else {
 			return list.stream()
@@ -190,8 +187,4 @@
 	}
 
-	public void onActionFromNewCourse() {
-		newCourse = new Course();
-	}
-
 	public void onActionFromEditProject(Project p) {
 		newProject = p;
@@ -213,10 +206,11 @@
 		String tunnelPrefix = systemConfigService.getString(AppConstants.SystemParameterDBTunnelPrefix);
 		String ownerSuffix = systemConfigService.getString(AppConstants.SystemParameterDBCreationOwnerSuffix);
-		String prjcode = p.getCode().toLowerCase();
+		String prjcode = p.getCode().toLowerCase().replace("-", "_").replace(" ", "_");
 		newDb.setType(systemConfigService.getString(AppConstants.SystemParameterDBServerType));
 		newDb.setServer(systemConfigService.getString(AppConstants.SystemParameterDBServerName));
 		newDb.setPort(systemConfigService.getString(AppConstants.SystemParameterDBServerPort));
-		newDb.setName(dbPrefix + prjcode);
-		newDb.setOwner(dbPrefix + prjcode + ownerSuffix);
+		String dbName = (dbPrefix + prjcode).toLowerCase().replace("-", "_").replace(" ", "_");
+		newDb.setName(dbName);
+		newDb.setOwner(dbName + ownerSuffix);
 		newDb.setPassword(generateRandomHexToken(6));
 		newDb.setTunnelServer(systemConfigService.getString(AppConstants.SystemParameterDBTunnelServerName));
@@ -239,4 +233,10 @@
 	public List<Course> getAllCourses() {
 		List<Course> lista = (List<Course>) genericService.getAll(Course.class);
+		if (userInfo.isInstructor() && !userInfo.isAdministrator()) {
+			lista = lista.stream()
+					.filter(p -> p.getCourseTeachers().stream()
+							.anyMatch(q -> q.getTeacher().getPersonId() == userInfo.getPersonId()))
+					.collect(Collectors.toList());
+		}
 		CourseComparator cc = new CourseComparator();
 		Collections.sort(lista, cc);
@@ -273,12 +273,4 @@
 
 	@CommitAfter
-	public void onSuccessFromNewCourseForm() {
-		genericService.saveOrUpdate(newCourse);
-		selectedCourse = newCourse;
-		selectedProject = null;
-		newCourse = null;
-	}
-
-	@CommitAfter
 	public void onSuccessFromNewProjectForm() {
 		genericService.saveOrUpdate(newProject);
@@ -288,8 +280,15 @@
 	}
 
+	public void onCancelNewProject() {
+		newProject = null;
+	}
+
 	@CommitAfter
 	public void onSuccessFromNewTeamForm() {
-		genericService.save(newTeam);
-		genericService.save(newResponsibility);
+		genericService.saveOrUpdate(newTeam);
+		if (newResponsibility != null) {
+			genericService.saveOrUpdate(newResponsibility.getTeam());
+			genericService.saveOrUpdate(newResponsibility);
+		}
 		newTeam = null;
 		newResponsibility = null;
@@ -387,4 +386,8 @@
 	}
 
+	void onCancelNewTeam() {
+		newTeam = null;
+	}
+
 	@CommitAfter
 	void onActionFromChangeStatus(Project p) {
@@ -395,3 +398,15 @@
 		return ModelConstants.AllProjectStatuses;
 	}
+
+	@CommitAfter
+	public void onActionFromDeleteProject(Project p) {
+		try {
+			for (CourseProject cp : p.getCourseProjects()) {
+				genericService.delete(cp);
+			}
+			genericService.delete(p);
+		} catch (Exception e) {
+
+		}
+	}
 }
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AccessControllerRequestFilter.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AccessControllerRequestFilter.java	(revision 73a53991e9beb4d73f19176f20bcc4107e3f6b22)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AccessControllerRequestFilter.java	(revision cb2784dcb34e2e245e81adf931dbb80803dcfca8)
@@ -52,9 +52,11 @@
 
 	public AccessControllerRequestFilter(final ApplicationStateManager asm, final ComponentSource componentSource,
-			final Logger logger) {
+			final Logger logger, Response response, PageRenderLinkSource linkSource) {
 		logger.info("AccessController ComponentRequestFilter constructor");
+		this.componentSource = componentSource;
+		this.response = response;
 		this.applicationStateManager = asm;
-		this.componentSource = componentSource;
 		this.logger = logger;
+		this.linkSource = linkSource;
 	}
 
@@ -121,4 +123,8 @@
 					canAccess = canAccess || userInfo.isStudent();
 				}
+				if (instructorPage) {
+					logger.debug("checkAccess: instructorPage");
+					canAccess = canAccess || userInfo.isInstructor();
+				}
 				if (adminPage) {
 					logger.debug("checkAccess: adminPage");
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AppModule.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AppModule.java	(revision 73a53991e9beb4d73f19176f20bcc4107e3f6b22)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AppModule.java	(revision cb2784dcb34e2e245e81adf931dbb80803dcfca8)
@@ -32,9 +32,7 @@
 import org.apache.tapestry5.commons.MappedConfiguration;
 import org.apache.tapestry5.commons.OrderedConfiguration;
-import org.apache.tapestry5.hibernate.HibernateConstants;
 import org.apache.tapestry5.hibernate.HibernateEntityPackageManager;
 import org.apache.tapestry5.hibernate.HibernateSymbols;
 import org.apache.tapestry5.hibernate.HibernateTransactionAdvisor;
-import org.apache.tapestry5.hibernate.web.HibernatePersistenceConstants;
 import org.apache.tapestry5.http.services.RequestGlobals;
 import org.apache.tapestry5.ioc.MethodAdviceReceiver;
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManager.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManager.java	(revision 73a53991e9beb4d73f19176f20bcc4107e3f6b22)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManager.java	(revision cb2784dcb34e2e245e81adf931dbb80803dcfca8)
@@ -43,3 +43,7 @@
 	public List<Role> getRolesForPerson(long personId);
 
+	public List<Person> getAllPersonsFromRole(String roleName);
+	
+	
+
 }
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManagerImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManagerImpl.java	(revision 73a53991e9beb4d73f19176f20bcc4107e3f6b22)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManagerImpl.java	(revision cb2784dcb34e2e245e81adf931dbb80803dcfca8)
@@ -76,3 +76,8 @@
 	}
 
+	@Override
+	public List<Person> getAllPersonsFromRole(String roleName) {
+		return personDao.getAllPersonsFromRole(roleName);
+	}
+
 }
Index: eprms-tap/src/main/resources/info/ajanovski/eprms/tap/components/Layout.tml
===================================================================
--- eprms-tap/src/main/resources/info/ajanovski/eprms/tap/components/Layout.tml	(revision 73a53991e9beb4d73f19176f20bcc4107e3f6b22)
+++ eprms-tap/src/main/resources/info/ajanovski/eprms/tap/components/Layout.tml	(revision cb2784dcb34e2e245e81adf931dbb80803dcfca8)
@@ -31,10 +31,11 @@
 					class="nav-item"><a class="nav-link ${classForPageName}"
 					t:type="pagelink" t:page="prop:pageName">${pageNameTitle}</a></li>
-				<t:if t:test="userInfo.administrator">
+				<t:if t:test="userInfo.instructor">
 					<li class="nav-item dropdown"><a
-						class="nav-link dropdown-toggle" href="#" id="mainMenuProjectManager"
-						role="button" data-toggle="dropdown" aria-haspopup="true"
-						aria-expanded="false">${message:projectManager-label}</a>
-						<div class="dropdown-menu" aria-labelledby="mainMenuProjectManager">
+						class="nav-link dropdown-toggle" href="#"
+						id="mainMenuProjectManager" role="button" data-toggle="dropdown"
+						aria-haspopup="true" aria-expanded="false">${message:projectManager-label}</a>
+						<div class="dropdown-menu"
+							aria-labelledby="mainMenuProjectManager">
 							<t:loop t:source="projectManagerPageNames" t:value="pageName">
 								<a class="dropdown-item ${classForPageName}" t:type="pagelink"
@@ -70,4 +71,6 @@
 					<div class="dropdown-menu" aria-labelledby="mainMenuUserProfile">
 						<t:if t:test="userInfo">
+							<a class="dropdown-item" t:type="pagelink"
+								t:page="user/MyProfile">${message:user/MyProfile-pagelink}</a>
 							<a href="" t:type="pagelink" t:page="user/Logout"
 								class="dropdown-item"><img t:type="SVGIcon" t:path="log-out" />
Index: eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/admin/ManageProjects.tml
===================================================================
--- eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/admin/ManageProjects.tml	(revision 73a53991e9beb4d73f19176f20bcc4107e3f6b22)
+++ eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/admin/ManageProjects.tml	(revision cb2784dcb34e2e245e81adf931dbb80803dcfca8)
@@ -23,20 +23,4 @@
 	</div>
 
-	<div class="col-6">
-		<div class="card mb-3" t:type="if" t:test="newCourse">
-			<div class="card-body">
-				<h3>${message:Course-label}</h3>
-				<form t:id="NewCourseForm" t:type="beaneditform"
-					t:object="newCourse" t:exclude="courseId"
-					t:submitLabel="message:submit-label"></form>
-			</div>
-		</div>
-		<div t:type="unless" t:test="newCourse">
-			<a t:type="actionlink" t:id="NewCourse" class="btn btn-primary"><img
-				t:type="SVGIcon" t:path="plus-square" /> ${message:new-label}
-				${message:Course-label}</a>
-		</div>
-
-	</div>
 </div>
 
@@ -76,31 +60,39 @@
 				</div>
 				<div class="card-body">
-					<form t:id="NewProjectForm" t:type="beaneditform"
-						t:object="newProject" t:exclude="projectId" t:add="courses"
-						t:submitLabel="OK" class="form-horizontal">
-						<p:description>
-							<div class="form-group">
-								<label t:type="label" t:for="description"></label>
-								<textarea t:id="description" t:type="textarea"
-									t:value="newProject.description" t:mixins="webeditor"
-									t:WebEditor.areaType="" />
+					<t:modalbox>
+						<form t:id="NewProjectForm" t:type="form" class="form-horizontal">
+							<t:beaneditor t:object="newProject" t:exclude="projectId"
+								t:add="courses" t:submitLabel="OK">
+								<p:description>
+									<div class="form-group">
+										<label t:type="label" t:for="description"></label>
+										<textarea t:id="description" t:type="textarea"
+											t:value="newProject.description" t:mixins="webeditor"
+											t:WebEditor.areaType="" />
+									</div>
+								</p:description>
+								<p:status>
+									<div class="form-group">
+										<label t:type="label" t:for="status"></label> <select
+											t:id="status" t:type="select" t:model="modelProjectStatuses"
+											t:value="newProject.status" />
+									</div>
+								</p:status>
+								<p:courses>
+									<div class="form-group col-12">
+										<label t:type="label" t:for="inCourses"></label>
+										<div t:type="palette" t:id="inCourses"
+											t:encoder="courseEncoder" t:model="coursesModel"
+											t:selected="inCourses" t:size="3"></div>
+									</div>
+								</p:courses>
+							</t:beaneditor>
+							<div class="form-row">
+								<t:submit t:value="OK" />
+								<a href="" t:type="eventlink" t:id="cancelNewProject"
+									class="btn btn-default">${message:cancel-label}</a>
 							</div>
-						</p:description>
-						<p:status>
-							<div class="form-group">
-								<label t:type="label" t:for="status"></label> <select
-									t:id="status" t:type="select" t:model="modelProjectStatuses"
-									t:value="newProject.status" />
-							</div>
-						</p:status>
-						<p:courses>
-							<div class="form-group col-12">
-								<label t:type="label" t:for="inCourses"></label>
-								<div t:type="palette" t:id="inCourses" t:encoder="courseEncoder"
-									t:model="coursesModel" t:selected="inCourses" t:size="4"></div>
-							</div>
-						</p:courses>
-
-					</form>
+						</form>
+					</t:modalbox>
 				</div>
 			</div>
@@ -108,7 +100,12 @@
 			<div class="card mb-3" t:type="if" t:test="newTeam">
 				<div class="card-body">
-					<h3>${message:Team-label}</h3>
-					<form t:id="NewTeamForm" t:type="beaneditform" t:object="newTeam"
-						t:exclude="teamId"></form>
+					<t:modalbox>
+						<h3>${message:Team-label}</h3>
+						<form t:id="NewTeamForm" t:type="form">
+							<t:beaneditor t:object="newTeam" t:exclude="teamId" />
+							<t:submit t:value="OK" />
+							<a t:type="eventlink" t:id="cancelNewTeam">${message:cancel-label}</a>
+						</form>
+					</t:modalbox>
 				</div>
 			</div>
@@ -182,17 +179,22 @@
 							t:path="clipboard" /> ${message:Paste-label}
 							${message:Activities-label}
-					</a>
-					</span>
+					</a></span> <a t:type="iconactionLink" t:context="project"
+						t:id="deleteProject" class="btn btn-sm btn-danger" t:path="minus">
+						${message:remove-label} </a>
 				</p>
 
 				<h3>${project.title}
-					<small class="text-muted">Status: ${project.status} <a
-						t:type="actionlink" t:context="project" t:id="changeStatus"
-						class="btn btn-sm btn-efault"> <img t:type="SVGIcon"
-							t:path="repeat" /></a></small> <small class="text-muted">Started:
-						${project?.startDate}</small>
+					<small class="text-muted ml-3">Code: ${project.code} -
+						Status: ${project.status} <a t:type="iconactionlink"
+						t:context="project" t:id="changeStatus" class="btn"
+						t:path="repeat"></a>
+					</small>
 				</h3>
 				<p t:type="if" t:test="projectCourses">
 					<span t:type="loop" t:source="projectCourses" t:value="course">${courseTitle}</span>
+				</p>
+				<p>Started: ${project?.startDate}</p>
+				<p t:type="if" t:test="selectedProject">
+					<t:outputraw t:value="project.description" />
 				</p>
 			</div>
