diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java b/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java
index 89ecc8ad9e..0c03a098ff 100644
--- a/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java
+++ b/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java
@@ -24,5 +24,4 @@ public interface FinalSeminarUploadController extends IClusterable {
 	void storeSeminarDocument(FileUpload upload, User uploader, FinalSeminar seminar) throws Exception;
 
 	void storeOpposition(FileUpload upload, User uploader, FinalSeminarOpposition opposition) throws Exception;
-
 }
diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java b/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java
index ba1bf5019a..cc6dd04594 100644
--- a/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java
+++ b/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java
@@ -1,5 +1,7 @@
 package se.su.dsv.scipro.data.controllers;
 
+import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
+import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition;
 import se.su.dsv.scipro.data.dataobjects.User;
 import se.su.dsv.scipro.data.enums.NotificationPriority;
 
@@ -10,5 +12,32 @@ import se.su.dsv.scipro.data.enums.NotificationPriority;
  */
 public interface NotificationController {
 
-	public void processNotification(User usertoNotify, NotificationMessage notificationMessage, String absoluteUrl, NotificationPriority notificationPriority);
+	public void processNotification(User usertoNotify, NotificationMessage notificationMessage,
+			String absoluteUrl, NotificationPriority notificationPriority);
+
+	public void createNotificationForPrivateMessage(final User user, final String message,
+			final String url);
+
+	public void createNotificationForConference(final User user, final String message,
+			final String messageboardTitle, final NotificationPriority notificationPriority,
+			final String absolutePath);
+
+	public void createNotificationForComment(final User user, final String message,
+			final NotificationPriority notificationPriority, final String title,
+			final String classId, final String absolutePath);
+
+	public void createNotificationForReplyPrivateMessage(final User user, final String message,
+			final String url);
+	
+	public void createNotificationForFinalSeminarEdited(final User user,
+			final FinalSeminar finalSeminar, final NotificationPriority notificationPriority,
+			final String absolutePath);
+	public void createNotificationForCreateFinalSeminar(final User user, final FinalSeminar finalSemniar,
+			final NotificationPriority notificationPriority, final String absolutePath, final boolean opponent);
+	public void createNotificationForThesisUploaded(final User user,
+			final FinalSeminar finalSeminar, final NotificationPriority notificationPriority,
+			final String absolutePath);
+	public void createNotificationForOppositionUploaded(final User user,
+			final FinalSeminarOpposition opposition,
+			final NotificationPriority notificationPriority, final String absolutePath);
 }
diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java b/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java
index b0622c61a8..5eb8e8f616 100644
--- a/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java
+++ b/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java
@@ -3,16 +3,23 @@ package se.su.dsv.scipro.data.controllers.impl;
 import java.io.IOException;
 import java.util.Date;
 import java.util.List;
+import java.util.Properties;
 
 import javax.persistence.PersistenceException;
 
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.RequestCycle;
 import org.apache.wicket.markup.html.form.upload.FileUpload;
+import org.apache.wicket.protocol.http.RequestUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 
+import se.su.dsv.scipro.SciProSession;
 import se.su.dsv.scipro.data.controllers.FinalSeminarUploadController;
+import se.su.dsv.scipro.data.controllers.NotificationController;
+import se.su.dsv.scipro.data.controllers.NotificationMessage;
 import se.su.dsv.scipro.data.dao.interfaces.CheckPlagiarismEventDao;
 import se.su.dsv.scipro.data.dao.interfaces.FileDescriptionDao;
 import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarDao;
@@ -22,12 +29,20 @@ import se.su.dsv.scipro.data.dao.interfaces.ProjectDao;
 import se.su.dsv.scipro.data.dataobjects.CheckPlagiarismEvent;
 import se.su.dsv.scipro.data.dataobjects.FileDescription;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
+import se.su.dsv.scipro.data.dataobjects.FinalSeminarActiveParticipation;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition;
 import se.su.dsv.scipro.data.dataobjects.Project;
+import se.su.dsv.scipro.data.dataobjects.ProjectFollower;
 import se.su.dsv.scipro.data.dataobjects.Student;
 import se.su.dsv.scipro.data.dataobjects.User;
+import se.su.dsv.scipro.data.enums.NotificationPriority;
+import se.su.dsv.scipro.project.pages.ProjectOppositionPage;
+import se.su.dsv.scipro.project.pages.ProjectStartPage;
 import se.su.dsv.scipro.repository.FileRepository;
 import se.su.dsv.scipro.repository.util.FileStorageException;
+import se.su.dsv.scipro.supervisor.pages.SupervisorProjectsFinalSeminarPage;
+import se.su.dsv.scipro.supervisor.pages.SupervisorStartPage;
+import se.su.dsv.scipro.util.PropsUtils;
 
 @Controller("seminarUploadController")
 public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadController {
@@ -57,6 +72,9 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
 	@Autowired
 	private CheckPlagiarismEventDao checkPlagiarismEventDao;
 
+	@Autowired
+	private NotificationController notificationController;
+
 	private FileDescription store(FileUpload upload, String storeToPath) throws IOException {
 		fileRepository.storeFile(upload, storeToPath);
 		List<FileDescription> fds = fileRepository.searchFiles(storeToPath);
@@ -148,6 +166,27 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
 				checkPlagiarismEventDao.save(checkPlagiarismEvent);
 			}
 
+			for (FinalSeminarActiveParticipation fa : seminar.getActiveParticipations()) {
+
+				notificationController.createNotificationForThesisUploaded(fa.getUser(), seminar,
+						NotificationPriority.HIGH, ProjectOppositionPage.getAbsoluteURL());
+			}
+
+			for (FinalSeminarOpposition fo : seminar.getOppositions()) {
+				notificationController.createNotificationForThesisUploaded(fo.getOpponent().getUser(), seminar,
+						NotificationPriority.HIGH, ProjectOppositionPage.getAbsoluteURL());
+			}
+
+			for (ProjectFollower pf : seminar.getProject().getProjectFollowers()) {
+				notificationController.createNotificationForThesisUploaded(pf.getFollower().getUser(), seminar,
+						NotificationPriority.HIGH, SupervisorProjectsFinalSeminarPage.getAbsoluteURL());
+			}
+			if (seminar.getProject().getHeadSupervisor() != null) {
+				notificationController.createNotificationForThesisUploaded(seminar.getProject().getHeadSupervisor()
+						.getUser(), seminar, NotificationPriority.HIGH,
+						SupervisorProjectsFinalSeminarPage.getAbsoluteURL());
+			}
+
 		} catch (IOException e) {
 			Logger.getRootLogger().log(Level.ERROR,
 					"Error while storing seminardocument: " + e.getMessage());
@@ -178,6 +217,20 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
 			opposition.setOpponentReport(fd);
 			opposition.setDateReported(new Date());
 			opposition = finalSeminarOppositionDao.save(opposition);
+
+			for (Student student : opposition.getFinalSeminar().getProject().getProjectParticipants()) {
+				notificationController.createNotificationForOppositionUploaded(student.getUser(), opposition,
+						NotificationPriority.HIGH, ProjectStartPage.getAbsoluteURL());
+			}
+			for (ProjectFollower pf : opposition.getFinalSeminar().getProject().getProjectFollowers()) {
+				notificationController.createNotificationForOppositionUploaded(pf.getFollower().getUser(), opposition,
+						NotificationPriority.HIGH, SupervisorProjectsFinalSeminarPage.getAbsoluteURL());
+			}
+			if (opposition.getFinalSeminar().getProject().getHeadSupervisor() != null) {
+				notificationController.createNotificationForOppositionUploaded(opposition.getFinalSeminar().getProject().getHeadSupervisor()
+						.getUser(), opposition, NotificationPriority.HIGH,
+						SupervisorProjectsFinalSeminarPage.getAbsoluteURL());
+			}
 		} catch (IOException e) {
 			Logger.getRootLogger().log(Level.ERROR,
 					"Error while storing opposition report: " + e.getMessage());
@@ -205,4 +258,10 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
 				+ String.valueOf(o.getId()) + "/";
 	}
 
+
+
+
+
+
+
 }
diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java b/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java
index 3159af89f5..9047e1d33e 100644
--- a/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java
+++ b/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java
@@ -1,16 +1,21 @@
 package se.su.dsv.scipro.data.controllers.impl;
 
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.Properties;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 
+import se.su.dsv.scipro.SciProSession;
 import se.su.dsv.scipro.data.controllers.NotificationController;
 import se.su.dsv.scipro.data.controllers.NotificationMessage;
 import se.su.dsv.scipro.data.dao.interfaces.GeneralSystemSettingsDao;
 import se.su.dsv.scipro.data.dao.interfaces.MailEventDao;
 import se.su.dsv.scipro.data.dao.interfaces.UserSettingsDao;
 import se.su.dsv.scipro.data.dao.interfaces.WebNotificationDao;
+import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
+import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition;
 import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings;
 import se.su.dsv.scipro.data.dataobjects.MailEvent;
 import se.su.dsv.scipro.data.dataobjects.User;
@@ -138,4 +143,227 @@ public class NotificationControllerImpl implements NotificationController {
 
 		return message;
 	}
+
+	@Override
+	public void createNotificationForPrivateMessage(final User user, final String message,
+			final String url) {
+		Properties props = null;
+		try {
+			props = PropsUtils.load("notification.properties");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		String mailSubject = props.getProperty("mailSubject");
+		String privateMessageNotification = props.getProperty("privateMessageNotification");
+		String twoNewLines = props.getProperty("twoNewLines");
+
+		String webNotificationMessage = SciProSession.get().getUser() + privateMessageNotification;
+
+		String mailMessage = webNotificationMessage + twoNewLines + message;
+
+		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
+				mailSubject, mailMessage);
+		processNotification(user, notificationMessage, url, NotificationPriority.MEDIUM);
+
+	}
+
+	@Override
+	public void createNotificationForConference(final User user, final String message,
+			final String messageboardTitle, final NotificationPriority notificationPriority,
+			final String absolutePath) {
+
+		Properties props = null;
+		try {
+			props = PropsUtils.load("notification.properties");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		String mailSubject = props.getProperty("mailSubject");
+		String conferenceNotification = props.getProperty("conferenceNotification");
+		String twoNewLines = props.getProperty("twoNewLines");
+		String quote = props.getProperty("quote");
+
+		String webNotificationMessage = SciProSession.get().getUser() + conferenceNotification
+				+ quote + messageboardTitle + quote;
+
+		String mailMessage = webNotificationMessage + twoNewLines + message;
+
+		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
+				mailSubject, mailMessage);
+		processNotification(user, notificationMessage, absolutePath, notificationPriority);
+	}
+
+	@Override
+	public void createNotificationForComment(final User user, final String message,
+			final NotificationPriority notificationPriority, final String title,
+			final String classId, final String absolutePath) {
+
+		Properties props = null;
+		try {
+			props = PropsUtils.load("notification.properties");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		String mailSubject = props.getProperty("mailSubject");
+		String conferenceNotification = props.getProperty("conferenceNotificationComment");
+		String twoNewLines = props.getProperty("twoNewLines");
+
+		String webNotificationMessage = SciProSession.get().getUser() + conferenceNotification
+				+ title;
+
+		String mailMessage = webNotificationMessage + twoNewLines + message;
+
+		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
+				mailSubject, mailMessage);
+		processNotification(user, notificationMessage, absolutePath + "&" + classId,
+				notificationPriority);
+	}
+
+	@Override
+	public void createNotificationForReplyPrivateMessage(final User user, final String message,
+			final String absolutePath) {
+		Properties props = null;
+		try {
+			props = PropsUtils.load("notification.properties");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		String mailSubject = props.getProperty("mailSubject");
+		String privateMessageNotification = props.getProperty("privateMessageReplyNotification");
+		String twoNewLines = props.getProperty("twoNewLines");
+
+		String webNotificationMessage = SciProSession.get().getUser() + privateMessageNotification;
+
+		String mailMessage = webNotificationMessage + twoNewLines + message;
+
+		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
+				mailSubject, mailMessage);
+		processNotification(user, notificationMessage, absolutePath, NotificationPriority.MEDIUM);
+	}
+	
+	@Override
+	public void createNotificationForFinalSeminarEdited(final User user,
+			final FinalSeminar finalSeminar, final NotificationPriority notificationPriority,
+			final String absolutePath) {
+
+		Properties props = null;
+		try {
+			props = PropsUtils.load("notification.properties");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		String mailSubject = props.getProperty("mailSubject");
+		String finalSeminarReportEdited = props.getProperty("finalSeminarOppositionReportEdited");
+		String finalSeminarOppositionReportBeenEdited = props
+				.getProperty("finalSeminarOppositionReportBeenEdited");
+		String quote = props.getProperty("quote");
+
+		String webNotificationMessage = finalSeminarReportEdited + quote
+				+ finalSeminar.getProject().getTitle() + quote
+				+ finalSeminarOppositionReportBeenEdited;
+		String mailMessage = webNotificationMessage;
+
+		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
+				mailSubject, mailMessage);
+		processNotification(user, notificationMessage, absolutePath,
+				notificationPriority);
+	}
+	
+	@Override
+	public void createNotificationForCreateFinalSeminar(final User user, final FinalSeminar finalSemniar,
+			final NotificationPriority notificationPriority, final String absolutePath, final boolean opponent) {
+
+		Properties props = null;
+		try {
+			props = PropsUtils.load("notification.properties");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		String created = props.getProperty("finalSeminarCreated");
+		String mailSubject = props.getProperty("mailSubject");
+		String project = "";
+		if(!opponent){
+			project = props.getProperty("finalSeminarProject");
+		}else{
+			project = props.getProperty("finalSeminarProjectOpponnent");
+		}
+
+		String comma = props.getProperty("comma");
+		String space = props.getProperty("space");
+		String quote = props.getProperty("quote");
+
+		DateFormat dfFrom = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+		DateFormat dfTo = new SimpleDateFormat("-HH:mm");
+		String webNotificationMessage = created + quote + finalSemniar.getProject().getTitle()
+				+ quote + project + finalSemniar.getRoom() + comma + space
+				+ dfFrom.format(finalSemniar.getStartDate())
+				+ dfTo.format(finalSemniar.getEndDate());
+
+		String mailMessage = webNotificationMessage;
+
+		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
+				mailSubject, mailMessage);
+		processNotification(user, notificationMessage, absolutePath,
+				notificationPriority);
+	}
+	
+	@Override
+	public void createNotificationForThesisUploaded(final User user,
+			final FinalSeminar finalSeminar, final NotificationPriority notificationPriority,
+			final String absolutePath) {
+
+		Properties props = null;
+		try {
+			props = PropsUtils.load("notification.properties");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		String mailSubject = props.getProperty("mailSubject");
+		String finalSeminarReportUploaded = props.getProperty("finalSeminarReportUploaded");
+		String finalSeminarReportBeenUploaded = props.getProperty("finalSeminarReportBeenUploaded");
+		String quote = props.getProperty("quote");
+
+		String webNotificationMessage = finalSeminarReportUploaded + quote
+				+ finalSeminar.getProject().getTitle() + quote + finalSeminarReportBeenUploaded;
+		String mailMessage = webNotificationMessage;
+
+		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
+				mailSubject, mailMessage);
+		processNotification(user, notificationMessage, absolutePath,
+				notificationPriority);
+	}
+	
+	@Override
+	public void createNotificationForOppositionUploaded(final User user,
+			final FinalSeminarOpposition opposition,
+			final NotificationPriority notificationPriority, final String absolutePath) {
+
+		Properties props = null;
+		try {
+			props = PropsUtils.load("notification.properties");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		String mailSubject = props.getProperty("mailSubject");
+		String finalSeminarOppositionReportUploaded = props
+				.getProperty("finalSeminarOppositionReportUploaded");
+		String finalSeminarOppositionReportBeenUploaded = props
+				.getProperty("finalSeminarOppositionReportBeenUploaded");
+		String dot = props.getProperty("dot");
+		String quote = props.getProperty("quote");
+		String space = props.getProperty("space");
+
+		String webNotificationMessage = finalSeminarOppositionReportUploaded + quote
+				+ opposition.getFinalSeminar().getProject().getTitle() + quote
+				+ finalSeminarOppositionReportBeenUploaded
+				+ opposition.getOpponent().getUser().getFirstName() + space
+				+ opposition.getOpponent().getUser().getLastName() + dot;
+		String mailMessage = webNotificationMessage;
+
+		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
+				mailSubject, mailMessage);
+		processNotification(user, notificationMessage, absolutePath,
+				notificationPriority);
+	}
 }