diff --git a/iTrust/WebRoot/auth/hcp/menu.jsp b/iTrust/WebRoot/auth/hcp/menu.jsp
index c1212e9691732fb072d4fa64d2cb04344e734f27..ae1e0cc95f4072425cdfe32c4414306e363a020c 100644
--- a/iTrust/WebRoot/auth/hcp/menu.jsp
+++ b/iTrust/WebRoot/auth/hcp/menu.jsp
@@ -66,10 +66,11 @@
 		<ul class="nav nav-sidebar">
 			<li><a href="/iTrust/auth/hcp/sendMessage.jsp">Compose a Message</a>
 			<li><a href="/iTrust/auth/hcp/messageInbox.jsp">Message Inbox</a>
-			<li><a href="/iTrust/auth/hcp-patient/messageOutbox.jsp">Message Outbox</a>
+			<li><a href="/iTrust/auth/hcp/messageOutbox.jsp">Message Outbox</a>
 		    <li><a href="/iTrust/auth/hcp-uap/showEmailHistory.jsp">Email History</a>
 		</ul>
 	</div>
+
 </div>
 
 <div class="panel panel-default">
diff --git a/iTrust/WebRoot/auth/hcp/messageInbox.jsp b/iTrust/WebRoot/auth/hcp/messageInbox.jsp
index acd87d74bbce0788cd7336a80bf3bdf059a4d116..408048ddd7fd847de0f2f9fd5e5b8674a4d142fd 100644
--- a/iTrust/WebRoot/auth/hcp/messageInbox.jsp
+++ b/iTrust/WebRoot/auth/hcp/messageInbox.jsp
@@ -35,6 +35,8 @@ pageTitle = "iTrust - View My Message ";
 	//Edit Filter backend
 	boolean editing = false;
 	String headerMessage = "";
+	String filterMessage = "";
+	
 	String[] fields = new String[6];
 	if(request.getParameter("edit") != null && request.getParameter("edit").equals("true")) {
 		editing = true;
@@ -57,7 +59,8 @@ pageTitle = "iTrust - View My Message ";
 			nf += request.getParameter("endDate");
 			
 			//Validate Filter
-
+			
+		    filterMessage = nf; 
 			if(nf.startsWith("Error")) {
 				error = true;
 				headerMessage = nf;
@@ -65,16 +68,24 @@ pageTitle = "iTrust - View My Message ";
 			
 			if(!error) {
 				if(request.getParameter("test") != null) {
+					filterMessage = nf; 
 					response.sendRedirect("messageInbox.jsp?edit=true&testFilter="+nf);
-				} else if(request.getParameter("save") != null) {
-					f_action.editMessageFilter(nf);
-					response.sendRedirect("messageInbox.jsp?filter=true");
+				} 
+				
+				if(request.getParameter("save") != null) {
+					filterMessage = nf;  
+
+				    f_action.editMessageFilter(nf);							
+					response.sendRedirect("messageInbox.jsp?filter=true&testFilter="+nf);
 				}
 			}
 		}
 		
 		if(request.getParameter("testFilter") != null) {
 			String filter = request.getParameter("testFilter");
+			
+			filterMessage = filter;     
+			
 			String[] f = filter.split(",", -1);
 			for(i=0; i<6; i++) {
 				try {
@@ -85,6 +96,9 @@ pageTitle = "iTrust - View My Message ";
 			}
 		} else {
 			String filter = dao.getPersonnel(loggedInMID.longValue()).getMessageFilter();
+			
+			filterMessage = filter;  
+			
 			if(!filter.equals("")) {
 				String[] f = filter.split(",", -1);
 				for(i=0; i<6; i++) {
@@ -124,9 +138,14 @@ pageTitle = "iTrust - View My Message ";
 		String filter = "";
 		if(request.getParameter("testFilter") != null) {
 			filter = request.getParameter("testFilter");
+			
+			filterMessage = filter; 
 		} else {
 			filter = dao.getPersonnel(loggedInMID.longValue()).getMessageFilter();
+			
+			filterMessage = filter;  
 		}
+		
 		if(!filter.equals("") && !filter.equals(",,,,,")) {
 			List<MessageBean> filtered = action.filterMessages(messages, filter);
 			messages = filtered;
@@ -217,7 +236,7 @@ pageTitle = "iTrust - View My Message ";
 	</tr>
 	<tr>
 		<td><a href="messageInbox.jsp?edit=true" >Edit Filter</a></td>
-		<td><a href="messageInbox.jsp?filter=true" >Apply Filter</a></td>
+		<td><a href="messageInbox.jsp?filter=true&testFilter=<%=filterMessage%>" >Apply Filter</a></td>
 	</tr>
 	</table>
 	</form>
diff --git a/iTrust/WebRoot/auth/hcp/messageOutbox.jsp b/iTrust/WebRoot/auth/hcp/messageOutbox.jsp
index 5ed4b2df06362044971c415a3a484bb01f5f017e..52ef995f712bb03e7a40e5ed95fbe19766f8f686 100644
--- a/iTrust/WebRoot/auth/hcp/messageOutbox.jsp
+++ b/iTrust/WebRoot/auth/hcp/messageOutbox.jsp
@@ -3,8 +3,15 @@
 <%@page import="java.util.List"%>
 
 <%@page import="edu.ncsu.csc.itrust.action.ViewMyMessagesAction"%>
+<%@page import="edu.ncsu.csc.itrust.action.EditPersonnelAction"%>
 <%@page import="edu.ncsu.csc.itrust.beans.MessageBean"%>
 <%@page import="edu.ncsu.csc.itrust.dao.DAOFactory"%>
+<%@page import="edu.ncsu.csc.itrust.dao.mysql.PersonnelDAO"%>
+<%@page import="java.util.ArrayList"%>
+<%@page import="java.text.DateFormat"%>
+<%@page import="java.text.SimpleDateFormat"%>
+<%@page import="java.util.Date"%>
+<%@page import="java.util.Calendar"%>
 
 <%@include file="/global.jsp" %>
 
@@ -17,12 +24,90 @@ pageTitle = "iTrust - View My Sent Messages";
 <div align=center>
 	<h2>My Sent Messages</h2>
 	<a href="/iTrust/auth/hcp/sendMessage.jsp">Compose a Message</a><br /><br />
+	
 <%
-	loggingAction.logEvent(TransactionType.OUTBOX_VIEW, loggedInMID.longValue(), 0, "");
-
+    loggingAction.logEvent(TransactionType.OUTBOX_VIEW, loggedInMID.longValue(), 0, "");
+	
 	ViewMyMessagesAction action = new ViewMyMessagesAction(prodDAO, loggedInMID.longValue());
+	EditPersonnelAction f_action = new EditPersonnelAction(prodDAO, loggedInMID.longValue(), loggedInMID.toString());
+	PersonnelDAO dao = new PersonnelDAO(prodDAO);
 	List<MessageBean> messages = null;
-	if(request.getParameter("sortby") != null) {
+	
+	//Edit Filter backend
+	boolean editing = false;
+	String headerMessage = "";
+	String filterMessage = "";
+	String[] fields = new String[6];
+	if(request.getParameter("edit") != null && request.getParameter("edit").equals("true")) {
+		editing = true;
+		
+		int i;
+		for(i=0; i<6; i++) {
+			fields[i] = "";
+		}
+		
+		if(request.getParameter("cancel") != null) 
+			response.sendRedirect("messageOutbox.jsp"); 
+		else if(request.getParameter("test") != null || request.getParameter("save") != null) {
+			boolean error = false;
+			String nf = "";
+			nf += request.getParameter("receiver").replace(",","")+",";
+			nf += request.getParameter("subject").replace(",","")+",";
+			nf += request.getParameter("hasWords").replace(",","")+",";
+			nf += request.getParameter("notWords").replace(",","")+",";
+			nf += request.getParameter("startDate").replace(",","")+",";
+			nf += request.getParameter("endDate");
+			
+			//Validate Filter
+
+			if(nf.startsWith("Error")) {
+				error = true;
+				headerMessage = nf;
+			}
+			
+			if(!error) {
+				if(request.getParameter("test") != null) {
+					filterMessage = nf;
+					response.sendRedirect("messageOutbox.jsp?edit=true&testFilter="+nf);
+				} else if(request.getParameter("save") != null) {
+					
+					filterMessage = nf;   
+					
+					f_action.editMessageFilter(nf);
+					response.sendRedirect("messageOutbox.jsp?filter=true&testFilter="+nf);
+				}
+			}
+		}
+		
+		if(request.getParameter("testFilter") != null) {
+			String filter = request.getParameter("testFilter");
+			filterMessage = filter;
+			String[] f = filter.split(",", -1);
+			for(i=0; i<6; i++) {
+				try {
+					fields[i] = f[i];
+				} catch(ArrayIndexOutOfBoundsException e) {
+					//do nothing
+				}
+			}
+		} else {
+			String filter = dao.getPersonnel(loggedInMID.longValue()).getMessageFilter();
+			filterMessage = filter;
+			if(!filter.equals("")) {
+				String[] f = filter.split(",", -1);
+				for(i=0; i<6; i++) {
+					try {
+						fields[i] = f[i];
+					} catch(ArrayIndexOutOfBoundsException e) {
+						//do nothing
+					}
+				}
+			}
+		}
+	}
+	
+	//Sorts messages
+	if(request.getParameter("sort") != null) {
 		if(request.getParameter("sortby").equals("name")) {
 			if(request.getParameter("sorthow").equals("asce")) {
 				messages = action.getAllMySentMessagesNameAscending();
@@ -40,9 +125,87 @@ pageTitle = "iTrust - View My Sent Messages";
 	else {
 		messages = action.getAllMySentMessages();
 	}
+	
+	//Filters Messages
+	boolean is_filtered = false;
+	if((request.getParameter("filter") != null && request.getParameter("filter").equals("true")) || request.getParameter("testFilter") != null) {
+		String filter = "";
+		if(request.getParameter("testFilter") != null) {
+			filter = request.getParameter("testFilter");
+			
+			filterMessage = filter;
+		} else {
+			filter = dao.getPersonnel(loggedInMID.longValue()).getMessageFilter();
+			filterMessage = filter;
+		}
+		if(!filter.equals("") && !filter.equals(",,,,,")) {
+			List<MessageBean> filtered = action.filterSentMessages(messages, filter);
+			messages = filtered;
+			is_filtered = true;
+		}
+	}
+	
 	session.setAttribute("messages", messages);
-	if (messages.size() > 0) { %>
-	<form method="post" action="messageOutbox.jsp">	
+	%>
+	
+	<%
+	
+	if(editing) {
+		%>
+		<div class="filterEdit">
+			<div align="center">
+				<span style="font-size: 13pt; font-weight: bold;">Edit Message Filter</span>
+				<%= headerMessage.equals("") ? "" : "<br /><span class=\"iTrustMessage\">"+headerMessage+"</span><br /><br />" %>
+				<form method="post" action="messageOutbox.jsp?edit=true">
+					<table>
+						<tr style="text-align: right;">
+							<td>
+								<label for="receiver">Receiver: </label>
+								<input type="text" name="receiver" id="receiver" value="<%= StringEscapeUtils.escapeHtml("" + (fields[0] )) %>" />
+							</td>
+							<td style="padding-left: 10px; padding-right: 10px;">
+								<label for="hasWords">Has the words: </label>
+								<input type="text" name="hasWords" id="hasWords" value="<%= StringEscapeUtils.escapeHtml("" + (fields[2] )) %>" />
+							</td>
+							<td>
+								<label for="startDate">Start Date: </label>
+								<input type="text" name="startDate" id="startDate" value="<%= StringEscapeUtils.escapeHtml("" + (fields[4] )) %>" />
+								<input type="button" value="Select Date" onclick="displayDatePicker('startDate');" />
+							</td>
+						</tr>
+						<tr style="text-align: right;">
+							<td>
+								<label for="subject">Subject: </label>
+								<input type="text" name="subject" id="subject" value="<%= StringEscapeUtils.escapeHtml("" + (fields[1] )) %>" />
+							</td>
+							<td style="padding-left: 10px; padding-right: 10px;">
+								<label for="notWords">Does not have the words: </label>
+								<input type="text" name="notWords" id="notWords" value="<%= StringEscapeUtils.escapeHtml("" + (fields[3] )) %>" />
+							</td>
+							<td>
+								<label for="endDate">End Date: </label>
+								<input type="text" name="endDate" id="endDate" value="<%= StringEscapeUtils.escapeHtml("" + (fields[5] )) %>" />
+								<input type="button" value="Select Date" onclick="displayDatePicker('endDate');" />
+							</td>
+						</tr>
+						<tr style="text-align: center;">
+							<td colspan="3">
+								<input type="submit" name="test" value="Test Filter" />
+								<input type="submit" name="save" value="Save" />
+								<input type="submit" name="cancel" value="Cancel" />
+							</td>
+						</tr>
+					</table>
+				</form>
+			</div>
+		</div>
+		<br />
+		<%
+	}
+	
+	%>
+	
+	<form method="post" action="messageOutbox.jsp<%= StringEscapeUtils.escapeHtml("" + (is_filtered?"?filter=true":"" )) %>">	
 	<table>
 	<tr>
 		<td>
@@ -60,27 +223,32 @@ pageTitle = "iTrust - View My Sent Messages";
 			</select>
 		</td>
 		<td>
-			<input type="submit" value="Sort" />
+			<input type="submit" name="sort" value="Sort" />
 		</td>
 	</tr>
+	<tr>
+		<td><a href="messageOutbox.jsp?edit=true" >Edit Filter</a></td>
+		<td><a href="messageOutbox.jsp?filter=true&testFilter=<%=filterMessage%>" >Apply Filter</a></td>
+	</tr>
 	</table>
 	</form>
 	<br />
+	<%if(messages.size() > 0) { %>
 	<table class="fancyTable">
 		<tr>
 			<th>To</th>
 			<th>Subject</th>
-			<th>Sent</th>
+			<th>Received</th>
 			<th></th>
 		</tr>
-<%		int index = 0; %>
-<%		for(MessageBean message : messages) { %>
+<%		int index = 0; 
+		for(MessageBean message : messages) { %>
 		<tr <%=(index%2 == 1)?"class=\"alt\"":"" %>>
-			<td><%= StringEscapeUtils.escapeHtml("" + ( action.getName(message.getTo()) )) %></td>
-			<td><%= StringEscapeUtils.escapeHtml("" + ( message.getSubject() )) %></td>
-			<td><%= StringEscapeUtils.escapeHtml("" + ( message.getSentDate() )) %></td>
-			<td><a href="viewMessageOutbox.jsp?msg=<%= StringEscapeUtils.escapeHtml("" + ( index )) %>">Read</a></td>
-		</tr>
+		<td><%= StringEscapeUtils.escapeHtml("" + ( action.getName(message.getTo()) )) %></td>
+		<td><%= StringEscapeUtils.escapeHtml("" + ( message.getSubject() )) %></td>
+		<td><%= StringEscapeUtils.escapeHtml("" + ( message.getSentDate() )) %></td>
+		<td><a href="viewMessageOutbox.jsp?msg=<%= StringEscapeUtils.escapeHtml("" + ( index )) %>">Read</a></td>
+	</tr>
 <%			index ++; %>
 <%		} %>
 	</table>
diff --git a/iTrust/WebRoot/auth/patient/menu.jsp b/iTrust/WebRoot/auth/patient/menu.jsp
index 27cd4df3571efdda470d8e6955f0536a85bdfd1d..e31d0313772566e1e85c1f60919994a5e3947257 100644
--- a/iTrust/WebRoot/auth/patient/menu.jsp
+++ b/iTrust/WebRoot/auth/patient/menu.jsp
@@ -79,7 +79,7 @@
 		<ul class="nav nav-sidebar">
 			<li><a href="/iTrust/auth/patient/sendMessage.jsp">Compose a Message</a>
 			<li><a href="/iTrust/auth/patient/messageInbox.jsp">Message Inbox</a>
-			<li><a href="/iTrust/auth/hcp-patient/messageOutbox.jsp">Message Outbox</a>
+			<li><a href="/iTrust/auth/patient/messageOutbox.jsp">Message Outbox</a>
 		</ul>
 	</div>
 </div>
diff --git a/iTrust/WebRoot/auth/patient/messageInbox.jsp b/iTrust/WebRoot/auth/patient/messageInbox.jsp
index 3dab22f8e9fd2fe439a6e9bb33d46e2483d2f6c9..241d029cbb711eae25a3ddaee066295a5a9b7bc0 100644
--- a/iTrust/WebRoot/auth/patient/messageInbox.jsp
+++ b/iTrust/WebRoot/auth/patient/messageInbox.jsp
@@ -34,6 +34,7 @@ pageTitle = "iTrust - View My Message ";
 	//Edit Filter backend
 	boolean editing = false;
 	String headerMessage = "";
+	String filterMessage = "";
 	String[] fields = new String[6];
 	if(request.getParameter("edit") != null && request.getParameter("edit").equals("true")) {
 		editing = true;
@@ -55,6 +56,8 @@ pageTitle = "iTrust - View My Message ";
 			nf += request.getParameter("startDate").replace(",","")+",";
 			nf += request.getParameter("endDate");
 			
+			filterMessage = nf;
+			
 			//Validate Filter
 			if(nf.startsWith("Error")) {
 				error = true;
@@ -63,16 +66,19 @@ pageTitle = "iTrust - View My Message ";
 			
 			if(!error) {
 				if(request.getParameter("test") != null) {
+					filterMessage = nf; 
 					response.sendRedirect("messageInbox.jsp?edit=true&testFilter="+nf);
 				} else if(request.getParameter("save") != null) {
+					filterMessage = nf; 
 					f_action.editMessageFilter(nf);
-					response.sendRedirect("messageInbox.jsp?filter=true"); 
+					response.sendRedirect("messageInbox.jsp?filter=true&testFilter="+nf); 
 				}
 			}
 		}
 		
 		if(request.getParameter("testFilter") != null) {
 			String filter = request.getParameter("testFilter");
+			filterMessage = filter; 
 			String[] f = filter.split(",", -1);
 			for(i=0; i<6; i++) {
 				try {
@@ -83,6 +89,7 @@ pageTitle = "iTrust - View My Message ";
 			}
 		} else {
 			String filter = dao.getPatient(loggedInMID.longValue()).getMessageFilter();
+			filterMessage = filter; 
 			if(!filter.equals("")) {
 				String[] f = filter.split(",", -1);
 				for(i=0; i<6; i++) {
@@ -126,8 +133,10 @@ pageTitle = "iTrust - View My Message ";
 		String filter = "";
 		if(request.getParameter("testFilter") != null) {
 			filter = request.getParameter("testFilter");
+			filterMessage = filter; 
 		} else {
 			filter = dao.getPatient(loggedInMID.longValue()).getMessageFilter();
+			filterMessage = filter; 
 		}
 		if(!filter.equals("") && !filter.equals(",,,,,")) {
 			List<MessageBean> filtered = action.filterMessages(messages, filter);
@@ -219,7 +228,7 @@ pageTitle = "iTrust - View My Message ";
 	</tr>
 	<tr>
 		<td><a href="messageInbox.jsp?edit=true" >Edit Filter</a></td>
-		<td><a href="messageInbox.jsp?filter=true" >Apply Filter</a></td>
+		<td><a href="messageInbox.jsp?filter=true&testFilter=<%=filterMessage%>" >Apply Filter</a></td>
 	</tr>
 	</table>
 	</form>
@@ -260,4 +269,4 @@ pageTitle = "iTrust - View My Message ";
 	<br />
 </div>
 
-<%@include file="/footer.jsp" %>
\ No newline at end of file
+<%@include file="/footer.jsp" %>
diff --git a/iTrust/WebRoot/auth/patient/messageOutbox.jsp b/iTrust/WebRoot/auth/patient/messageOutbox.jsp
index 190b1515f12d01f102018a15f0f6f9b8d8bb2b4e..035ee28b7fc796673a89e7496e7a254f8bd655f9 100644
--- a/iTrust/WebRoot/auth/patient/messageOutbox.jsp
+++ b/iTrust/WebRoot/auth/patient/messageOutbox.jsp
@@ -3,15 +3,21 @@
 <%@page import="java.util.List"%>
 
 <%@page import="edu.ncsu.csc.itrust.action.ViewMyMessagesAction"%>
+<%@page import="edu.ncsu.csc.itrust.action.EditPatientAction"%>
 <%@page import="edu.ncsu.csc.itrust.beans.MessageBean"%>
+<%@page import="edu.ncsu.csc.itrust.beans.PatientBean"%>
 <%@page import="edu.ncsu.csc.itrust.dao.DAOFactory"%>
+<%@page import="edu.ncsu.csc.itrust.dao.mysql.PatientDAO"%>
+<%@page import="java.util.ArrayList"%>
+<%@page import="java.text.DateFormat"%>
+<%@page import="java.text.SimpleDateFormat"%>
+<%@page import="java.util.Date"%>
+<%@page import="java.util.Calendar"%>
 
 <%@include file="/global.jsp" %>
 
 <%
 pageTitle = "iTrust - View My Sent Messages";
-
-
 %>
 
 <%@include file="/header.jsp" %>
@@ -19,11 +25,98 @@ pageTitle = "iTrust - View My Sent Messages";
 <div align=center>
 	<h2>My Sent Messages</h2>
 	<a href="/iTrust/auth/patient/sendMessage.jsp">Compose a Message</a><br /><br />
+	
+	
 <%
-loggingAction.logEvent(TransactionType.OUTBOX_VIEW, loggedInMID.longValue(), loggedInMID.longValue(), "");
 	ViewMyMessagesAction action = new ViewMyMessagesAction(prodDAO, loggedInMID.longValue());
+	EditPatientAction f_action = new EditPatientAction(prodDAO, loggedInMID.longValue(), loggedInMID.toString()); 
+	PatientDAO dao = new PatientDAO(prodDAO);   
 	List<MessageBean> messages = null;
-	if(request.getParameter("sortby") != null) {
+	
+	String filterMessage = "";
+	
+	
+	//Edit Filter backend
+	boolean editing = false;
+	String headerMessage = "";
+	String[] fields = new String[6];
+	if(request.getParameter("edit") != null && request.getParameter("edit").equals("true")) {
+		editing = true;
+		
+		int i;
+		for(i=0; i<6; i++) {
+			fields[i] = "";
+		}
+		
+		if(request.getParameter("cancel") != null) 
+			response.sendRedirect("messageOutbox.jsp"); 
+		else if(request.getParameter("test") != null || request.getParameter("save") != null) {
+			boolean error = false;          
+			String nf = "";
+			nf += request.getParameter("receiver").replace(",","")+",";
+			nf += request.getParameter("subject").replace(",","")+",";
+			nf += request.getParameter("hasWords").replace(",","")+",";
+			nf += request.getParameter("notWords").replace(",","")+",";
+			nf += request.getParameter("startDate").replace(",","")+",";
+			nf += request.getParameter("endDate");
+			
+			//Validate Filter
+			if(nf.startsWith("Error")) {
+				error = true;
+				headerMessage = nf;
+			}
+			
+			if(!error) {
+				if(request.getParameter("test") != null) {
+					
+					filterMessage = nf;  
+					
+					response.sendRedirect("messageOutbox.jsp?edit=true&testFilter="+nf);
+
+					
+				} else if(request.getParameter("save") != null) {
+					
+					filterMessage = nf;
+					
+					f_action.editMessageFilter(nf);      
+					response.sendRedirect("messageOutbox.jsp?filter=true&testFilter="+nf); 
+				}
+			}
+		}
+		
+		if(request.getParameter("testFilter") != null) {
+			String filter = request.getParameter("testFilter");    
+			
+filterMessage = filter;
+			
+			String[] f = filter.split(",", -1);
+			for(i=0; i<6; i++) {
+				try {
+					fields[i] = f[i];
+				} catch(ArrayIndexOutOfBoundsException e) {
+					//do nothing
+				}
+			}
+		} else {
+			String filter = dao.getPatient(loggedInMID.longValue()).getMessageFilter(); 
+			
+filterMessage = filter;
+			
+			if(!filter.equals("")) {
+				String[] f = filter.split(",", -1);
+				for(i=0; i<6; i++) {
+					try {
+						fields[i] = f[i];
+					} catch(ArrayIndexOutOfBoundsException e) {
+						//do nothing
+					}
+				}
+			}
+		}
+	}
+	
+	//Sorts messages
+	if(request.getParameter("sort") != null) {
 		if(request.getParameter("sortby").equals("name")) {
 			if(request.getParameter("sorthow").equals("asce")) {
 				messages = action.getAllMySentMessagesNameAscending();
@@ -39,11 +132,99 @@ loggingAction.logEvent(TransactionType.OUTBOX_VIEW, loggedInMID.longValue(), log
 		}
 	}
 	else {
+		if(request.getParameter("edit") == null && request.getParameter("filter") == null) {
+			//loggingAction.logEvent(TransactionType.OUTBOX_VIEW, loggedInMID, 0, "");   
+			loggingAction.logEvent(TransactionType.OUTBOX_VIEW, loggedInMID.longValue(), loggedInMID.longValue(), ""); 
+		}
+		
 		messages = action.getAllMySentMessages();
 	}
-	session.setAttribute("messages", messages);
-	if (messages.size() > 0) { %>
-	<form method="post" action="messageOutbox.jsp">	
+	
+	//Filters Messages
+	boolean is_filtered = false;
+	if((request.getParameter("filter") != null && request.getParameter("filter").equals("true")) || request.getParameter("testFilter") != null) {
+		String filter = "";
+		if(request.getParameter("testFilter") != null) {   
+			filter = request.getParameter("testFilter");
+		
+filterMessage = filter;
+			
+		} else {
+			filter = dao.getPatient(loggedInMID.longValue()).getMessageFilter();    
+			
+filterMessage = filter;
+		}
+		if(!filter.equals("") && !filter.equals(",,,,,")) {
+			List<MessageBean> filtered = action.filterSentMessages(messages, filter);  
+			messages = filtered;
+			is_filtered = true;
+		}
+	}
+	
+	session.setAttribute("messages", messages);     
+	%>
+	
+	<%
+	
+	if(editing) {
+		%>
+		<div class="filterEdit">
+			<div align="center">
+				<span style="font-size: 13pt; font-weight: bold;">Edit Message Filter</span>
+				<%= headerMessage.equals("") ? "" : "<br /><span class=\"iTrustMessage\">"+headerMessage+"</span><br /><br />" %>
+				<form method="post" action="messageOutbox.jsp?edit=true">
+					<table>
+						<tr style="text-align: right;">
+							<td>
+								<label for="receiver">Receiver: </label>
+								<input type="text" name="receiver" id="receiver" value="<%= StringEscapeUtils.escapeHtml("" + (fields[0] )) %>" />
+							</td>
+							<td style="padding-left: 10px; padding-right: 10px;">
+								<label for="hasWords">Has the words: </label>
+								<input type="text" name="hasWords" id="hasWords" value="<%= StringEscapeUtils.escapeHtml("" + (fields[2] )) %>" />
+							</td>
+							<td>
+								<label for="startDate">Start Date: </label>
+								<input type="text" name="startDate" id="startDate" value="<%= StringEscapeUtils.escapeHtml("" + (fields[4] )) %>" />
+								<input type="button" value="Select Date" onclick="displayDatePicker('startDate');" />
+							</td>
+						</tr>
+						<tr style="text-align: right;">
+							<td>
+								<label for="subject">Subject: </label>
+								<input type="text" name="subject" id="subject" value="<%= StringEscapeUtils.escapeHtml("" + (fields[1] )) %>" />
+							</td>
+							<td style="padding-left: 10px; padding-right: 10px;">
+								<label for="notWords">Does not have the words: </label>
+								<input type="text" name="notWords" id="notWords" value="<%= StringEscapeUtils.escapeHtml("" + (fields[3] )) %>" />
+							</td>
+							<td>
+								<label for="endDate">End Date: </label>
+								<input type="text" name="endDate" id="endDate" value="<%= StringEscapeUtils.escapeHtml("" + (fields[5] )) %>" />
+								<input type="button" value="Select Date" onclick="displayDatePicker('endDate');" />
+							</td>
+						</tr>
+						<tr style="text-align: center;">
+							<td colspan="3">
+								<input type="submit" name="test" value="Test Filter" />
+								<input type="submit" name="save" value="Save" />
+								<input type="submit" name="cancel" value="Cancel" />
+							</td>
+						</tr>
+					</table>
+				</form>
+			</div>
+		</div>
+		<br />
+		<%
+	}
+	
+	%>
+	
+
+
+	
+	<form method="post" action="messageOutbox.jsp<%= StringEscapeUtils.escapeHtml("" + (is_filtered?"?filter=true":"" )) %>">
 	<table>
 	<tr>
 		<td>
@@ -61,27 +242,33 @@ loggingAction.logEvent(TransactionType.OUTBOX_VIEW, loggedInMID.longValue(), log
 			</select>
 		</td>
 		<td>
-			<input type="submit" value="Sort" />
+			<input type="submit" name="sort" value="Sort" />
 		</td>
 	</tr>
+	<tr>
+		<td><a href="messageOutbox.jsp?edit=true" >Edit Filter</a></td>
+		<td><a href="messageOutbox.jsp?filter=true&testFilter=<%=filterMessage%>" >Apply Filter</a></td>
+	</tr>
 	</table>
 	</form>
 	<br />
+	
+	<%if(messages.size() > 0) { %> 
 	<table class="fancyTable">
 		<tr>
 			<th>To</th>
 			<th>Subject</th>
 			<th>Received</th>
-			<th></th>
+			<th> </th>
 		</tr>
-<%		int index = 0; %>
-<%		for(MessageBean message : messages) { %>
+<%		int index = 0; 
+		for(MessageBean message : messages) { %>
 		<tr <%=(index%2 == 1)?"class=\"alt\"":"" %>>
-			<td><%= StringEscapeUtils.escapeHtml("" + ( action.getName(message.getTo()) )) %></td>
-			<td><%= StringEscapeUtils.escapeHtml("" + ( message.getSubject() )) %></td>
-			<td><%= StringEscapeUtils.escapeHtml("" + ( message.getSentDate() )) %></td>
-			<td><a href="viewMessageOutbox.jsp?msg=<%= StringEscapeUtils.escapeHtml("" + ( index )) %>">Read</a></td>
-		</tr>
+		<td><%= StringEscapeUtils.escapeHtml("" + ( action.getName(message.getTo()) )) %></td>
+		<td><%= StringEscapeUtils.escapeHtml("" + ( message.getSubject() )) %></td>
+		<td><%= StringEscapeUtils.escapeHtml("" + ( message.getSentDate() )) %></td>
+		<td><a href="viewMessageOutbox.jsp?msg=<%= StringEscapeUtils.escapeHtml("" + ( index )) %>">Read</a></td>
+	</tr>
 <%			index ++; %>
 <%		} %>
 	</table>
@@ -93,4 +280,4 @@ loggingAction.logEvent(TransactionType.OUTBOX_VIEW, loggedInMID.longValue(), log
 	<br />
 </div>
 
-<%@include file="/footer.jsp" %>
+<%@include file="/footer.jsp" %>
\ No newline at end of file
diff --git a/iTrust/src/edu/ncsu/csc/itrust/action/ViewMyMessagesAction.java b/iTrust/src/edu/ncsu/csc/itrust/action/ViewMyMessagesAction.java
index 9d5305774af378140785b598d32631d3b0909ee1..57c5f9d0aef86503ac5cb732bc0550e0c360a469 100644
--- a/iTrust/src/edu/ncsu/csc/itrust/action/ViewMyMessagesAction.java
+++ b/iTrust/src/edu/ncsu/csc/itrust/action/ViewMyMessagesAction.java
@@ -135,7 +135,7 @@ public class ViewMyMessagesAction {
 	
 	
 	/**
-	 * Gets a list of messages for a user based on their filter criteria.
+	 * Gets a list of received messages for a user based on their filter criteria.
 	 * 
 	 * @param messages List of all of a user's MessageBeans
 	 * @param filter String containing a user's filter criteria.
@@ -222,6 +222,94 @@ public class ViewMyMessagesAction {
 		return filtered;
 	}
 	
+	/**
+	 * Gets a list of Sent messages for a user based on their filter criteria.
+	 * 
+	 * @param messages List of all of a user's MessageBeans
+	 * @param filter String containing a user's filter criteria.
+	 * @return a List of MessageBeans that meet the criteria of the filter.
+	 * @throws ITrustException
+	 * @throws ParseException
+	 */
+	public List<MessageBean> filterSentMessages(List<MessageBean> messages, String filter) throws ITrustException, ParseException {
+		List<MessageBean> filtered = new ArrayList<MessageBean>();
+		String[] f = filter.split(",", -1);
+		for(MessageBean m : messages) {
+			/**
+			 * Check the sender filter field.
+			 * Exclude if this MessageBean does not match the 
+			 * requested sender, if one is specified.
+			 */
+			if(!f[0].equals("")) {
+				if(!this.getName(m.getTo()).equalsIgnoreCase(f[0]))
+					continue;
+			}
+			/**
+			 * Check the subject filter field.
+			 * Exclude if this MessageBean does not match the 
+			 * requested subject, if one is specified.
+			 */
+			if(!f[1].equals("")) {
+				if(!m.getSubject().equalsIgnoreCase(f[1]))
+					continue;
+			}
+			/**
+			 * Check the body of the message for certain words.
+			 * Exclude if this MessageBean if it does not contain 
+			 * those words in the message body.
+			 */
+			if(!f[2].equals("")) {
+				if(!m.getSubject().toLowerCase().contains(f[2].toLowerCase()) && !m.getBody().toLowerCase().contains(f[2].toLowerCase()))
+					continue;
+			}
+			/**
+			 * Check the body of the message for certain words.
+			 * Exclude if this MessageBean if it does contain 
+			 * those words in the message body.
+			 */
+			if(!f[3].equals("")) {
+				if(m.getSubject().toLowerCase().contains(f[3].toLowerCase()) || m.getBody().toLowerCase().contains(f[3].toLowerCase()))
+					continue;
+			}
+			/**
+			 * Check the start date filter field.
+			 * Exclude if this MessageBean was not sent after
+			 * this date.
+			 */
+			if(!f[4].equals("")) {
+				DateFormat format = new SimpleDateFormat("MM/dd/yyyy");
+				Date s = format.parse(f[4]);
+				if(s.after(m.getSentDate()))
+						continue;
+				
+			}
+			/**
+			 * Check the end date filter field.
+			 * Exclude if this MessageBean was not sent before
+			 * this date.
+			 */
+			if(!f[5].equals("")) {
+				DateFormat format = new SimpleDateFormat("MM/dd/yyyy");
+				Date s = format.parse(f[5]);
+				Calendar c = Calendar.getInstance();
+				c.setTime(s);
+				c.add(Calendar.DAY_OF_MONTH, 1);
+				s = c.getTime();
+				if(s.before(m.getSentDate()))
+						continue;
+				
+			}
+			/**
+			 * If the message has not been eliminated by any 
+			 * of the filter fields, add it to the new list 
+			 * of messages.
+			 */
+			filtered.add(m);
+		}
+		
+		return filtered;
+	}
+	
 	/**
 	 * Gets a patient's name from their MID
 	 *