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 f1bf82ba8c84fbdc62fe2d8d4a4a04e2c76c722c)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageCourses.java	(revision 5cb17f5b797a344409f54452779e7b1321acd32d)
@@ -1,6 +1,10 @@
 package info.ajanovski.eprms.tap.pages.admin;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
+import org.apache.tapestry5.SelectModel;
+import org.apache.tapestry5.ValueEncoder;
 import org.apache.tapestry5.annotations.Persist;
 import org.apache.tapestry5.annotations.Property;
@@ -8,7 +12,12 @@
 import org.apache.tapestry5.hibernate.annotations.CommitAfter;
 import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.services.SelectModelFactory;
 import org.slf4j.Logger;
 
+import info.ajanovski.eprms.model.entities.ActivityType;
 import info.ajanovski.eprms.model.entities.Course;
+import info.ajanovski.eprms.model.entities.CourseActivityType;
+import info.ajanovski.eprms.model.util.ActivityTypeHierarchicalComparator;
+import info.ajanovski.eprms.model.util.CourseActivityTypeHierarchicalComparator;
 import info.ajanovski.eprms.tap.annotations.AdministratorPage;
 import info.ajanovski.eprms.tap.services.GenericService;
@@ -25,8 +34,20 @@
 
 	@Inject
+	private SelectModelFactory selectModelFactory;
+
+	@Inject
 	private GenericService genericService;
 
 	@Property
 	private Course course;
+	@Property
+	@Persist
+	private Course addActivityTypeForCourse;
+	@Property
+	private ActivityType activityType;
+	@Property
+	private ActivityType selectParentActivityType;
+	@Property
+	private CourseActivityType courseActivityType;
 
 	@Persist
@@ -34,6 +55,19 @@
 	private Course editCourse;
 
+	@Persist
+	@Property
+	private List<ActivityType> inActivityTypes;
+
 	public List<Course> getAllCourses() {
 		return (List<Course>) genericService.getAll(Course.class);
+	}
+
+	public List<CourseActivityType> getCourseCourseActivityTypes() {
+		List<CourseActivityType> list = course.getCourseActivityTypes();
+
+		CourseActivityTypeHierarchicalComparator comparator = new CourseActivityTypeHierarchicalComparator();
+		list.sort(comparator);
+
+		return list;
 	}
 
@@ -45,4 +79,13 @@
 	void onActionFromDeleteCourse(Course c) {
 		genericService.delete(c);
+	}
+
+	void onActionFromAddCourseActivityType(Course c) {
+		addActivityTypeForCourse = c;
+	}
+
+	@CommitAfter
+	void onActionFromDeleteCourseActivityType(CourseActivityType cat) {
+		genericService.delete(cat);
 	}
 
@@ -58,3 +101,75 @@
 	}
 
+	public ValueEncoder<ActivityType> getActivityTypeEncoder() {
+		return new ValueEncoder<ActivityType>() {
+			@Override
+			public String toClient(ActivityType value) {
+				return String.valueOf(value.getActivityTypeId());
+			}
+
+			@Override
+			public ActivityType toValue(String id) {
+				return genericService.getByPK(ActivityType.class, Long.parseLong(id));
+			}
+		};
+	}
+
+	public void onActivate() {
+		if (inActivityTypes == null) {
+			inActivityTypes = new ArrayList<ActivityType>();
+		}
+	}
+
+	public SelectModel getActivityTypeModel() {
+		return selectModelFactory.create(getAllActivityTypes().stream().filter(at -> at.getSubActivityTypes() != null)
+				.collect(Collectors.toList()), "title");
+	}
+
+	public List<ActivityType> getAllActivityTypes() {
+		ActivityTypeHierarchicalComparator athc = new ActivityTypeHierarchicalComparator();
+		List<ActivityType> lista = (List<ActivityType>) genericService.getAll(ActivityType.class);
+		lista.sort(athc);
+		return lista;
+	}
+
+	public Long getDepth(ActivityType at) {
+		if (at.getSuperActivityType() != null) {
+			return getDepth(at.getSuperActivityType()) + 1;
+		} else {
+			return 0L;
+		}
+	}
+
+	public long getHierarchicalDepth() {
+		return (3 * getDepth(courseActivityType.getActivityType()));
+	}
+
+	private boolean cancelFrmAddActivityType;
+
+	void onSelectedFromSubmitSelectParentActivityType() {
+		cancelFrmAddActivityType = false;
+	}
+
+	void onSelectedFromCancelSelectParentActivityType() {
+		cancelFrmAddActivityType = true;
+	}
+
+	@CommitAfter
+	public void onSuccessFromFrmAddActivityType() {
+		if (!cancelFrmAddActivityType) {
+			int pos = 1;
+			for (ActivityType at : selectParentActivityType.getSubActivityTypes()) {
+				CourseActivityType cat = new CourseActivityType();
+				cat.setCourse(addActivityTypeForCourse);
+				cat.setActivityType(at);
+				cat.setPositionNumber(pos);
+				pos++;
+				genericService.saveOrUpdate(cat);
+			}
+			addActivityTypeForCourse = null;
+		} else {
+			addActivityTypeForCourse = null;
+		}
+	}
+
 }
Index: eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/admin/ManageCourses.tml
===================================================================
--- eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/admin/ManageCourses.tml	(revision f1bf82ba8c84fbdc62fe2d8d4a4a04e2c76c722c)
+++ eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/admin/ManageCourses.tml	(revision 5cb17f5b797a344409f54452779e7b1321acd32d)
@@ -5,16 +5,50 @@
 <h1>${message:admin/ManageCourses-pagelink}</h1>
 
-<div t:type="if" t:test="editCourse" class="card">
-	<div class="card-body">
-		<form t:type="beaneditform" t:id="frmEditCourse" t:object="editCourse"
-			t:exclude="courseId"></form>
-	</div>
+<div t:type="if" t:test="addActivityTypeForCourse" class="card">
+	<t:modalbox>
+		<div class="card-body">
+			<form t:type="form" t:id="frmAddActivityType" class="form">
+				<div class="form-group">
+					<label t:type="label" t:for="selectParentActivityType" /> <select
+						t:type="select" t:model="activityTypeModel"
+						t:id="selectParentActivityType" t:value="selectParentActivityType" />
+				</div>
+				<t:submit t:id="submitSelectParentActivityType" t:value="OK" />
+				<t:submit t:id="cancelSelectParentActivityType" t:value="Cancel" />
+			</form>
+		</div>
+	</t:modalbox>
 </div>
 
-<table class="table table-sm" t:type="grid" t:source="allCourses"
-	t:row="course" t:exclude="courseId" t:add="edit">
+<div t:type="if" t:test="editCourse" class="card">
+	<t:modalbox>
+		<div class="card-body">
+			<form t:type="beaneditform" t:id="frmEditCourse"
+				t:object="editCourse" t:exclude="courseId" t:submitLabel="OK"></form>
+		</div>
+	</t:modalbox>
+</div>
+
+<table class="table table-sm table-bordered" t:type="grid"
+	t:source="allCourses" t:row="course" t:exclude="courseId"
+	t:add="activities,edit">
+	<p:activitiesCell>
+		<p class="m-0" style="margin-left:${hierarchicalDepth}em !important;"
+			t:type="loop" t:source="CourseCourseActivityTypes"
+			t:value="courseActivityType">
+			${courseActivityType?.activityType?.title} <a href=""
+				t:type="actionlink" t:id="deleteCourseActivityType"
+				t:context="courseActivityType" t:mixins="confirm"
+				class="btn btn-sm btn-danger p-0"><svg t:type="svgicon"
+					t:path="minus" /></a>
+		</p>
+		<a href="" t:type="actionlink" t:id="addCourseActivityType"
+			t:context="course" class="btn btn-sm btn-primary p-0"><svg
+				t:type="svgicon" t:path="plus" />${message:add-label}
+			${message:activityType-label}</a>
+	</p:activitiesCell>
 	<p:editCell>
 		<a href="" t:type="actionlink" t:id="editCourse" t:context="course"
-			class="btn btn-sm btn-primary"><svg t:type="svgicon"
+			class="btn btn-sm btn-secondary"><svg t:type="svgicon"
 				t:path="edit" />${message:edit-label}</a>
 		<t:if t:test="allowDeleteCourse">
