diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/BoardMessageDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/BoardMessageDao.java
new file mode 100644
index 0000000000..1260150d4c
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/BoardMessageDao.java
@@ -0,0 +1,14 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.interfaces;
+
+import se.su.dsv.scipro.data.dataobjects.BoardMessage;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public interface BoardMessageDao extends LazyDeleteDao<BoardMessage>{
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/HiddenMessageBoardDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/HiddenMessageBoardDao.java
new file mode 100644
index 0000000000..c540d4d1fe
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/HiddenMessageBoardDao.java
@@ -0,0 +1,14 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.interfaces;
+
+import se.su.dsv.scipro.data.dataobjects.HiddenMessageBoard;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public interface HiddenMessageBoardDao extends LazyDeleteDao<HiddenMessageBoard>{
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/HiddenMessageDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/HiddenMessageDao.java
new file mode 100644
index 0000000000..11ae3ef7c1
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/HiddenMessageDao.java
@@ -0,0 +1,15 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.interfaces;
+
+import se.su.dsv.scipro.data.dataobjects.BoardMessage;
+import se.su.dsv.scipro.data.dataobjects.HiddenMessage;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public interface HiddenMessageDao extends LazyDeleteDao<HiddenMessage>{
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageBoardDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageBoardDao.java
new file mode 100644
index 0000000000..b1fc487869
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageBoardDao.java
@@ -0,0 +1,14 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.interfaces;
+
+import se.su.dsv.scipro.data.dataobjects.MessageBoard;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public interface MessageBoardDao extends LazyDeleteDao<MessageBoard>{
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageDao.java
new file mode 100644
index 0000000000..7482bc065c
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageDao.java
@@ -0,0 +1,14 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.interfaces;
+
+import se.su.dsv.scipro.data.dataobjects.Message;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public interface MessageDao extends LazyDeleteDao<Message>{
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/PrivateMessageDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/PrivateMessageDao.java
new file mode 100644
index 0000000000..a862090fb5
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/PrivateMessageDao.java
@@ -0,0 +1,14 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.interfaces;
+
+import se.su.dsv.scipro.data.dataobjects.PrivateMessage;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public interface PrivateMessageDao extends LazyDeleteDao<PrivateMessage>{
+
+}
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/RecipientDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/RecipientDao.java
new file mode 100644
index 0000000000..80dc14bea6
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/RecipientDao.java
@@ -0,0 +1,14 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.interfaces;
+
+import se.su.dsv.scipro.data.dataobjects.Recipient;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public interface RecipientDao extends LazyDeleteDao<Recipient>{
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardDaoJPAImp.java
new file mode 100644
index 0000000000..f231746189
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardDaoJPAImp.java
@@ -0,0 +1,19 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.jpa;
+
+import se.su.dsv.scipro.data.dao.interfaces.BoardDao;
+import se.su.dsv.scipro.data.dataobjects.Board;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public class BoardDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<Board> implements BoardDao {
+
+	public BoardDaoJPAImp() {
+		super(Board.class);
+	}
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardMessageJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardMessageJPAImp.java
new file mode 100644
index 0000000000..a449a16cd4
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardMessageJPAImp.java
@@ -0,0 +1,20 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.jpa;
+
+import se.su.dsv.scipro.data.dao.interfaces.BoardMessageDao;
+import se.su.dsv.scipro.data.dataobjects.BoardMessage;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ * 
+ */
+public class BoardMessageJPAImp extends LazyDeleteAbstractDaoJPAImp<BoardMessage>
+		implements BoardMessageDao {
+
+	public BoardMessageJPAImp() {
+		super(BoardMessage.class);
+	}
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/HiddenMessageBoardJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/HiddenMessageBoardJPAImp.java
new file mode 100644
index 0000000000..ece51d1bc4
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/HiddenMessageBoardJPAImp.java
@@ -0,0 +1,21 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.jpa;
+
+import se.su.dsv.scipro.data.dao.interfaces.HiddenMessageBoardDao;
+import se.su.dsv.scipro.data.dataobjects.HiddenMessageBoard;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public class HiddenMessageBoardJPAImp extends LazyDeleteAbstractDaoJPAImp<HiddenMessageBoard>
+		implements HiddenMessageBoardDao {
+
+	public HiddenMessageBoardJPAImp() {
+		super(HiddenMessageBoard.class);
+	}
+
+}
+
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/HiddenMessageJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/HiddenMessageJPAImp.java
new file mode 100644
index 0000000000..89ad5eac5a
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/HiddenMessageJPAImp.java
@@ -0,0 +1,20 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.jpa;
+
+import se.su.dsv.scipro.data.dao.interfaces.HiddenMessageDao;
+import se.su.dsv.scipro.data.dataobjects.HiddenMessage;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public class HiddenMessageJPAImp extends LazyDeleteAbstractDaoJPAImp<HiddenMessage>
+		implements HiddenMessageDao {
+
+	public HiddenMessageJPAImp() {
+		super(HiddenMessage.class);
+	}
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageBoardJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageBoardJPAImp.java
new file mode 100644
index 0000000000..91f5aa9ca3
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageBoardJPAImp.java
@@ -0,0 +1,19 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.jpa;
+
+import se.su.dsv.scipro.data.dao.interfaces.MessageBoardDao;
+import se.su.dsv.scipro.data.dataobjects.MessageBoard;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public class MessageBoardJPAImp  extends LazyDeleteAbstractDaoJPAImp<MessageBoard>
+		implements MessageBoardDao {
+
+	public MessageBoardJPAImp() {
+		super(MessageBoard.class);
+	}
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageJPAImp.java
new file mode 100644
index 0000000000..e92b19a8d6
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageJPAImp.java
@@ -0,0 +1,17 @@
+package se.su.dsv.scipro.data.dao.jpa;
+
+import se.su.dsv.scipro.data.dao.interfaces.MessageDao;
+import se.su.dsv.scipro.data.dataobjects.Message;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public class MessageJPAImp  extends LazyDeleteAbstractDaoJPAImp<Message>
+		implements MessageDao {
+
+	public MessageJPAImp() {
+		super(Message.class);
+	}
+}
+
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/PrivateMessageJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/PrivateMessageJPAImp.java
new file mode 100644
index 0000000000..4cfeb475b1
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/PrivateMessageJPAImp.java
@@ -0,0 +1,16 @@
+package se.su.dsv.scipro.data.dao.jpa;
+
+import se.su.dsv.scipro.data.dao.interfaces.PrivateMessageDao;
+import se.su.dsv.scipro.data.dataobjects.PrivateMessage;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ * 
+ */
+public class PrivateMessageJPAImp extends
+		LazyDeleteAbstractDaoJPAImp<PrivateMessage> implements PrivateMessageDao {
+
+	public PrivateMessageJPAImp() {
+		super(PrivateMessage.class);
+	}
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/RecipientJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/RecipientJPAImp.java
new file mode 100644
index 0000000000..85234454e8
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/RecipientJPAImp.java
@@ -0,0 +1,19 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dao.jpa;
+
+import se.su.dsv.scipro.data.dao.interfaces.RecipientDao;
+import se.su.dsv.scipro.data.dataobjects.Recipient;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ * 
+ */
+public class RecipientJPAImp extends LazyDeleteAbstractDaoJPAImp<Recipient>
+		implements RecipientDao {
+
+	public RecipientJPAImp() {
+		super(Recipient.class);
+	}
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/Board.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/Board.java
new file mode 100644
index 0000000000..07fe7ed946
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/Board.java
@@ -0,0 +1,95 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dataobjects;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+
+@MappedSuperclass
+public abstract class Board extends LazyDeletableDomainObject implements Comparable<Board> {
+
+	@Id
+	@GeneratedValue
+	private Long id;
+	
+	private String title;
+	
+	@OneToOne
+	private Project project;
+	
+	public Long getId() {
+		return id;
+	}
+	
+
+	public String getTitle() {
+		return title;
+	}
+
+
+
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+
+
+
+	public Project getProject() {
+		return project;
+	}
+
+
+
+
+	public void setProject(Project project) {
+		this.project = project;
+	}
+
+
+
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((id == null) ? 0 : id.hashCode());
+		return result;
+	}
+
+
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Board other = (Board) obj;
+		if (id == null) {
+			if (other.id != null)
+				return false;
+		} else if (!id.equals(other.id))
+			return false;
+		return true;
+	}
+
+
+
+	@Override
+	public int compareTo(Board other) {
+		return title.compareTo(other.title);
+	}
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/BoardMessage.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/BoardMessage.java
new file mode 100644
index 0000000000..6f8b707c24
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/BoardMessage.java
@@ -0,0 +1,26 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dataobjects;
+
+import javax.persistence.Cacheable;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+
+@Entity
+@Table(name="board_message")
+@Cacheable(true)
+@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class BoardMessage extends Message{
+
+
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/HiddenMessage.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/HiddenMessage.java
new file mode 100644
index 0000000000..e30535e412
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/HiddenMessage.java
@@ -0,0 +1,25 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dataobjects;
+
+import javax.persistence.Cacheable;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+
+@Entity
+@Table(name="hidden_message")
+@Cacheable(true)
+@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class HiddenMessage extends Message{
+
+	
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/HiddenMessageBoard.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/HiddenMessageBoard.java
new file mode 100644
index 0000000000..4c0959c19b
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/HiddenMessageBoard.java
@@ -0,0 +1,40 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dataobjects;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.Cacheable;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ * 
+ */
+
+@Entity
+@Table(name = "hidden_message_board")
+@Cacheable(true)
+@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class HiddenMessageBoard extends Board {
+	@OneToMany
+	private List<HiddenMessage> hiddenMessageList = new ArrayList<HiddenMessage>();
+
+	public List<HiddenMessage> getHiddenMessageList() {
+		return hiddenMessageList;
+	}
+
+	public void setHiddenMessageList(List<HiddenMessage> hiddenMessageList) {
+		this.hiddenMessageList = hiddenMessageList;
+	}
+	
+	
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/Message.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/Message.java
new file mode 100644
index 0000000000..f7c4f195c8
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/Message.java
@@ -0,0 +1,86 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dataobjects;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public class Message extends LazyDeletableDomainObject implements Comparable<Message> {
+
+	@Id
+	@GeneratedValue
+	private Long id;
+	
+	private String title;
+	
+	@Lob
+	private String message;
+	
+	@ManyToOne(optional=false)
+	private User user;
+	
+	public Long getId() {
+		return id;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	@Override
+	public int compareTo(Message o) {
+		return getDateCreated().compareTo(o.getDateCreated());
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((id == null) ? 0 : id.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Message other = (Message) obj;
+		if (id == null) {
+			if (other.id != null)
+				return false;
+		} else if (!id.equals(other.id))
+			return false;
+		return true;
+	}	
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java
new file mode 100644
index 0000000000..599c1a0726
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java
@@ -0,0 +1,40 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dataobjects;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.Cacheable;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+
+@Entity
+@Table(name="message_board")
+@Cacheable(true)
+@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class MessageBoard extends Board {
+	
+
+	@OneToMany
+	private List<BoardMessage> boardMessageList = new ArrayList<BoardMessage>();
+
+	public List<BoardMessage> getBoardMessageList() {
+		return boardMessageList;
+	}
+
+	public void setBoardMessageList(List<BoardMessage> boardMessageList) {
+		this.boardMessageList = boardMessageList;
+	}
+	
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/PrivateMessage.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/PrivateMessage.java
new file mode 100644
index 0000000000..004a6ed190
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/PrivateMessage.java
@@ -0,0 +1,90 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dataobjects;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ *
+ */
+public class PrivateMessage extends LazyDeletableDomainObject implements Comparable<PrivateMessage>{
+	
+	
+	@Id
+	@GeneratedValue
+	private Long id;
+	
+	private String title;
+	
+	@Lob
+	private String message;
+	
+	@ManyToOne(optional=false)
+	private User fromUser;
+	
+	@OneToMany
+	private List<Recipient> recipientList = new ArrayList<Recipient>();
+
+	public String getTitle() {
+		return title;
+	}
+
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+
+	public String getMessage() {
+		return message;
+	}
+	
+
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+
+	public User getFromUser() {
+		return fromUser;
+	}
+
+
+	public void setFromUser(User fromUser) {
+		this.fromUser = fromUser;
+	}
+
+	
+
+	public List<Recipient> getRecipientList() {
+		return recipientList;
+	}
+
+
+	public void setRecipientList(List<Recipient> recipientList) {
+		this.recipientList = recipientList;
+	}
+
+
+	@Override
+	public int compareTo(PrivateMessage o) {
+		return getDateCreated().compareTo(o.getDateCreated());
+	}
+
+
+	@Override
+	public Long getId() {
+		return id;
+	}
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/Recipient.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/Recipient.java
new file mode 100644
index 0000000000..9382598f10
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/Recipient.java
@@ -0,0 +1,73 @@
+/**
+ * 
+ */
+package se.su.dsv.scipro.data.dataobjects;
+
+import java.util.Date;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Johan Aschan - aschan@dsv.su.se
+ * 
+ */
+public class Recipient extends LazyDeletableDomainObject {
+
+	@Id
+	@GeneratedValue
+	private Long id;
+
+	@ManyToOne
+	private User user;
+
+	private Date dateRead;
+
+	@Override
+	public Long getId() {
+		return id;
+	}
+
+	public Date getDateRead() {
+		return dateRead;
+	}
+
+	public void setDateRead(Date dateRead) {
+		this.dateRead = dateRead;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((id == null) ? 0 : id.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Recipient other = (Recipient) obj;
+		if (id == null) {
+			if (other.id != null)
+				return false;
+		} else if (!id.equals(other.id))
+			return false;
+		return true;
+	}
+
+}